Changes To Cookbook
Not logged in
@@ -115,10 +115,99 @@
 
 <verbatim>
 #!/usr/bin/fossil
 repository: /srv/fossil-scm/code.autonomo.us.fossil-scm
 </verbatim>
+
+<h3>Another solution to <i>automatically</i> serve multiple repositories</h3>
+
+With the following CGI script (I have named it <samp>p</samp> simply) it is possible to define a location where all the your repositories should be located (in this example: <samp>/home/repos/fossil</samp>). All the repositories are named according the scheme <samp><project name>.fsl</samp> for sake of this example.
+
+If this script is called alone (like e.g.: <samp>http://your.server.here/cgi-bin/p</samp>), it will list all repositories located under <samp>$REPOSROOT</samp>, <b>if</b> there <b>does not</b> exist a corresponding file <samp>.<project name></samp> (that mechanism is used to <i>hide</i> some repository in the listing).
+
+If the script is called like e.g. <samp>http://your.server.here/cgi-bin/p/<project name></samp>, then the corresponding repository will be selected to work with.
+
+The lines 5 - 8 in the script below allow configuration for you needs. You have to chose, what fossil binary to use, what extension your repository databases have and where all your databases are located.
+
+<nowiki>
+<font face="monospace">
+<font color="#a52a2a">&nbsp;1 </font><font color="#0000ff">#!/bin/sh</font><br>
+<font color="#a52a2a">&nbsp;2 </font><br>
+<font color="#a52a2a">&nbsp;3 </font><font color="#0000ff">### Configuration section ###</font><br>
+<font color="#a52a2a">&nbsp;4 </font><br>
+<font color="#a52a2a">&nbsp;5 </font><font color="#008b8b">TITLE</font>=<font color="#a52a2a"><b>&quot;</b></font><font color="#ff00ff">&lt;h2&gt;Fossil repositories&lt;/h2&gt;</font><font color="#a52a2a"><b>&quot;</b></font><br>
+<font color="#a52a2a">&nbsp;6 </font><font color="#008b8b">FOSSIL</font>=/usr/local/bin/fossil<br>
+<font color="#a52a2a">&nbsp;7 </font><font color="#008b8b">REPOSROOT</font>=/home/repos/fossil<br>
+<font color="#a52a2a">&nbsp;8 </font><font color="#008b8b">REPOSEXT</font>=<font color="#a52a2a"><b>&quot;</b></font><font color="#ff00ff">.fsl</font><font color="#a52a2a"><b>&quot;</b></font><br>
+<font color="#a52a2a">&nbsp;9 </font><br>
+<font color="#a52a2a">10 </font><font color="#0000ff">### Processing section -- nothing to configure here! ###</font><br>
+<font color="#a52a2a">11 </font><br>
+<font color="#a52a2a">12 </font><font color="#a52a2a"><b>set</b></font><font color="#008b8b">&nbsp;</font><font color="#6a5acd">-f</font><font color="#008b8b">&nbsp;&nbsp;&nbsp;&nbsp;</font>; <font color="#0000ff"># disable filename globbing</font><br>
+<font color="#a52a2a">13 </font><br>
+<font color="#a52a2a">14 </font><font color="#0000ff">## Some helper functions</font><br>
+<font color="#a52a2a">15 </font><br>
+<font color="#a52a2a">16 </font><font color="#008b8b">HeaderText () {</font><br>
+<font color="#a52a2a">17 </font>&nbsp;&nbsp;<font color="#a52a2a"><b>if </b></font><font color="#a52a2a"><b>[</b></font>&nbsp;<font color="#a52a2a"><b>-z</b></font>&nbsp;<font color="#a52a2a"><b>&quot;</b></font><font color="#a020f0">$headerWritten</font><font color="#a52a2a"><b>&quot;</b></font>&nbsp;<font color="#a52a2a"><b>]</b></font><font color="#a52a2a"><b>;</b></font>&nbsp;<font color="#a52a2a"><b>then</b></font><br>
+<font color="#a52a2a">18 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#a52a2a"><b>echo</b></font><font color="#ff00ff">&nbsp;</font><font color="#a52a2a"><b>&quot;</b></font><font color="#ff00ff">Content-type: text/plain; charset=iso-8859-1</font><font color="#a52a2a"><b>&quot;</b></font><br>
+<font color="#a52a2a">19 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#a52a2a"><b>echo</b></font><br>
+<font color="#a52a2a">20 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008b8b">headerWritten</font>=<font color="#ff00ff">1</font><br>
+<font color="#a52a2a">21 </font>&nbsp;&nbsp;<font color="#a52a2a"><b>fi</b></font><br>
+<font color="#a52a2a">22 </font><font color="#008b8b">}</font><br>
+<font color="#a52a2a">23 </font><br>
+<font color="#a52a2a">24 </font><font color="#008b8b">HeaderHTML () {</font><br>
+<font color="#a52a2a">25 </font>&nbsp;&nbsp;<font color="#a52a2a"><b>if </b></font><font color="#a52a2a"><b>[</b></font>&nbsp;<font color="#a52a2a"><b>-z</b></font>&nbsp;<font color="#a52a2a"><b>&quot;</b></font><font color="#a020f0">$headerWritten</font><font color="#a52a2a"><b>&quot;</b></font>&nbsp;<font color="#a52a2a"><b>]</b></font><font color="#a52a2a"><b>;</b></font>&nbsp;<font color="#a52a2a"><b>then</b></font><br>
+<font color="#a52a2a">26 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#a52a2a"><b>echo</b></font><font color="#ff00ff">&nbsp;</font><font color="#a52a2a"><b>&quot;</b></font><font color="#ff00ff">Content-type: text/html; charset=iso-8859-1</font><font color="#a52a2a"><b>&quot;</b></font><br>
+<font color="#a52a2a">27 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#a52a2a"><b>echo</b></font><br>
+<font color="#a52a2a">28 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008b8b">headerWritten</font>=<font color="#ff00ff">1</font><br>
+<font color="#a52a2a">29 </font>&nbsp;&nbsp;<font color="#a52a2a"><b>fi</b></font><br>
+<font color="#a52a2a">30 </font><font color="#008b8b">}</font><br>
+<font color="#a52a2a">31 </font><br>
+<font color="#a52a2a">32 </font><font color="#008b8b">Error () {</font><br>
+<font color="#a52a2a">33 </font>&nbsp;&nbsp;HeaderHTML<br>
+<font color="#a52a2a">34 </font>&nbsp;&nbsp;<font color="#a52a2a"><b>echo</b></font><font color="#ff00ff">&nbsp;</font><font color="#a52a2a"><b>&quot;</b></font><font color="#ff00ff">&lt;p&gt;&lt;font color=</font><font color="#a52a2a"><b>&quot;</b></font><font color="#ff00ff">red</font><font color="#a52a2a"><b>&quot;</b></font><font color="#ff00ff">&gt;ERROR: </font><font color="#a020f0">$1</font><font color="#ff00ff">&lt;/font&gt;&lt;/p&gt;</font><font color="#a52a2a"><b>&quot;</b></font><br>
+<font color="#a52a2a">35 </font>&nbsp;&nbsp;<font color="#a52a2a"><b>exit</b></font>&nbsp;<font color="#ff00ff">1</font><br>
+<font color="#a52a2a">36 </font><font color="#008b8b">}</font><br>
+<font color="#a52a2a">37 </font><br>
+<font color="#a52a2a">38 </font><font color="#008b8b">P () {</font><br>
+<font color="#a52a2a">39 </font>&nbsp;&nbsp;HeaderText<br>
+<font color="#a52a2a">40 </font>&nbsp;&nbsp;<font color="#a52a2a"><b>for </b></font>var <font color="#a52a2a"><b>in</b></font>&nbsp;<font color="#a020f0">$*</font><font color="#a52a2a"><b>;</b></font>&nbsp;<font color="#a52a2a"><b>do</b></font><br>
+<font color="#a52a2a">41 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#a52a2a"><b>eval</b></font>&nbsp;<font color="#a52a2a"><b>echo</b></font><font color="#ff00ff">&nbsp;</font><font color="#a020f0">$var</font><font color="#ff00ff">&nbsp;= </font><font color="#a52a2a"><b>&quot;</b></font><font color="#6a5acd">\$</font><font color="#a020f0">$var</font><font color="#a52a2a"><b>&quot;</b></font><br>
+<font color="#a52a2a">42 </font>&nbsp;&nbsp;<font color="#a52a2a"><b>done</b></font><br>
+<font color="#a52a2a">43 </font><font color="#008b8b">}</font><br>
+<font color="#a52a2a">44 </font><br>
+<font color="#a52a2a">45 </font><font color="#0000ff">## Do the real work here ...</font><br>
+<font color="#a52a2a">46 </font><br>
+<font color="#a52a2a">47 </font><font color="#008b8b">project</font>=<font color="#6a5acd">`echo </font><font color="#a020f0">$PATH_INFO</font><font color="#6a5acd">&nbsp;</font><font color="#a52a2a"><b>|</b></font><font color="#6a5acd">&nbsp;sed -e </font><font color="#a52a2a"><b>'</b></font><font color="#ff00ff">s!/</font><font color="#6a5acd">\(</font><font color="#ff00ff">[^/]*</font><font color="#6a5acd">\)</font><font color="#ff00ff">.*!\1!</font><font color="#a52a2a"><b>'|</b></font><font color="#6a5acd">&nbsp;tr </font><font color="#a52a2a"><b>&quot;</b></font><font color="#ff00ff">[A-Z]</font><font color="#a52a2a"><b>&quot;</b></font><font color="#6a5acd">&nbsp;</font><font color="#a52a2a"><b>&quot;</b></font><font color="#ff00ff">[a-z]</font><font color="#a52a2a"><b>&quot;</b></font><font color="#6a5acd">`</font><br>
+<font color="#a52a2a">48 </font><font color="#008b8b">repos</font>=<font color="#a52a2a"><b>&quot;</b></font><font color="#a020f0">$REPOSROOT</font><font color="#ff00ff">/</font><font color="#a020f0">$project$REPOSEXT</font><font color="#a52a2a"><b>&quot;</b></font><br>
+<font color="#a52a2a">49 </font><br>
+<font color="#a52a2a">50 </font><font color="#a52a2a"><b>if </b></font><font color="#a52a2a"><b>[</b></font>&nbsp;<font color="#a52a2a"><b>-r</b></font>&nbsp;<font color="#a52a2a"><b>&quot;</b></font><font color="#a020f0">$repos</font><font color="#a52a2a"><b>&quot;</b></font>&nbsp;<font color="#a52a2a"><b>]</b></font><font color="#a52a2a"><b>;</b></font>&nbsp;<font color="#a52a2a"><b>then</b></font><br>
+<font color="#a52a2a">51 </font>&nbsp;&nbsp;<font color="#008b8b">PATH_INFO</font>=<font color="#6a5acd">`echo </font><font color="#a020f0">$REQUEST_URI</font><font color="#6a5acd">&nbsp;</font><font color="#a52a2a"><b>|</b></font><font color="#6a5acd">&nbsp;sed -e </font><font color="#a52a2a"><b>&quot;</b></font><font color="#ff00ff">s!^</font><font color="#a020f0">$SCRIPT_NAME</font><font color="#ff00ff">/</font><font color="#a020f0">$project</font><font color="#6a5acd">\\</font><font color="#ff00ff">([^?]*</font><font color="#6a5acd">\\</font><font color="#ff00ff">).*!</font><font color="#6a5acd">\\</font><font color="#ff00ff">1!</font><font color="#a52a2a"><b>&quot;</b></font><font color="#6a5acd">`</font><br>
+<font color="#a52a2a">52 </font><font color="#a52a2a"><b>&nbsp;&nbsp;:</b></font>&nbsp;<font color="#a020f0">${</font><font color="#a020f0">PATH_INFO</font><font color="#a52a2a"><b>:=</b></font><font color="#ff00ff">/</font><font color="#a020f0">}</font><br>
+<font color="#a52a2a">53 </font>&nbsp;&nbsp;<font color="#008b8b">SCRIPT_NAME</font>=<font color="#a020f0">$SCRIPT_NAME</font>/<font color="#a020f0">$project</font><br>
+<font color="#a52a2a">54 </font>&nbsp;&nbsp;<font color="#008b8b">TEMPFILE</font>=<font color="#6a5acd">`mktemp /tmp/fossil-</font><font color="#a020f0">$project</font><font color="#6a5acd">.XXXXXX`</font>&nbsp;<font color="#a52a2a"><b>||</b></font>&nbsp;Error <font color="#a52a2a"><b>&quot;</b></font><font color="#ff00ff">Couldn't create tempfile</font><font color="#a52a2a"><b>&quot;</b></font><br>
+<font color="#a52a2a">55 </font>&nbsp;&nbsp;<font color="#a52a2a"><b>trap</b></font>&nbsp;<font color="#a52a2a"><b>&quot;</b></font><font color="#ff00ff">rm -f </font><font color="#a020f0">$TEMPFILE</font><font color="#a52a2a"><b>&quot;</b></font>&nbsp;EXIT QUIT INT TERM<br>
+<font color="#a52a2a">56 </font>&nbsp;&nbsp;<font color="#a52a2a"><b>echo</b></font><font color="#ff00ff">&nbsp;repository: </font><font color="#a020f0">$repos</font><font color="#ff00ff">&nbsp;</font><font color="#a52a2a"><b>&gt;</b></font>&nbsp;<font color="#a020f0">$TEMPFILE</font><br>
+<font color="#a52a2a">57 </font>&nbsp;&nbsp;<font color="#a020f0">$FOSSIL</font>&nbsp;cgi <font color="#a020f0">$TEMPFILE</font><br>
+<font color="#a52a2a">58 </font><font color="#a52a2a"><b>elif</b></font>&nbsp;<font color="#a52a2a"><b>[</b></font>&nbsp;<font color="#a52a2a"><b>-z</b></font>&nbsp;<font color="#a52a2a"><b>&quot;</b></font><font color="#a020f0">$project</font><font color="#a52a2a"><b>&quot;</b></font>&nbsp;<font color="#a52a2a"><b>]</b></font><font color="#a52a2a"><b>;</b></font>&nbsp;<font color="#a52a2a"><b>then</b></font><br>
+<font color="#a52a2a">59 </font>&nbsp;&nbsp;HeaderHTML<br>
+<font color="#a52a2a">60 </font>&nbsp;&nbsp;<font color="#a52a2a"><b>echo</b></font><font color="#ff00ff">&nbsp;</font><font color="#a52a2a"><b>&quot;</b></font><font color="#a020f0">$TITLE</font><font color="#a52a2a"><b>&quot;</b></font><br>
+<font color="#a52a2a">61 </font>&nbsp;&nbsp;<font color="#a52a2a"><b>echo</b></font><font color="#ff00ff">&nbsp;</font><font color="#a52a2a"><b>&quot;</b></font><font color="#ff00ff">&lt;ul&gt;</font><font color="#a52a2a"><b>&quot;</b></font><br>
+<font color="#a52a2a">62 </font>&nbsp;&nbsp;find <font color="#a020f0">$REPOSROOT</font>&nbsp;-name <font color="#a52a2a"><b>&quot;</b></font><font color="#ff00ff">*</font><font color="#a020f0">$REPOSEXT</font><font color="#a52a2a"><b>&quot;</b></font>&nbsp;<font color="#a52a2a"><b>|</b></font>&nbsp;\<br>
+<font color="#a52a2a">63 </font>&nbsp;&nbsp;while <font color="#a52a2a"><b>read</b></font>&nbsp;repos<font color="#a52a2a"><b>;</b></font>&nbsp;<font color="#a52a2a"><b>do</b></font><br>
+<font color="#a52a2a">64 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008b8b">project</font>=<font color="#6a5acd">`basename </font><font color="#a020f0">$repos</font><font color="#6a5acd">&nbsp;</font><font color="#a020f0">$REPOSEXT</font><font color="#6a5acd">`</font><br>
+<font color="#a52a2a">65 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#a52a2a"><b>if </b></font><font color="#a52a2a"><b>[</b></font>&nbsp;<font color="#a52a2a"><b>-f</b></font>&nbsp;<font color="#a020f0">$repos</font>&nbsp;<font color="#a52a2a"><b>-a</b></font>&nbsp;<font color="#a52a2a"><b>!</b></font>&nbsp;<font color="#a52a2a"><b>-e</b></font>&nbsp;<font color="#a020f0">$REPOSROOT</font>/.<font color="#a020f0">$project</font>&nbsp;<font color="#a52a2a"><b>]</b></font><font color="#a52a2a"><b>;</b></font>&nbsp;<font color="#a52a2a"><b>then</b></font><br>
+<font color="#a52a2a">66 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#a52a2a"><b>echo</b></font><font color="#ff00ff">&nbsp;</font><font color="#a52a2a"><b>&quot;</b></font><font color="#ff00ff">&lt;li&gt;&lt;a href='</font><font color="#a020f0">${</font><font color="#a020f0">REQUEST_URI</font><font color="#a020f0">}</font><font color="#ff00ff">/</font><font color="#a020f0">$project</font><font color="#ff00ff">'&gt;</font><font color="#a020f0">$project</font><font color="#ff00ff">&lt;/a&gt;&lt;/li&gt;</font><font color="#a52a2a"><b>&quot;</b></font><br>
+<font color="#a52a2a">67 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#a52a2a"><b>fi</b></font><br>
+<font color="#a52a2a">68 </font>&nbsp;&nbsp;<font color="#a52a2a"><b>done</b></font><br>
+<font color="#a52a2a">69 </font>&nbsp;&nbsp;<font color="#a52a2a"><b>echo</b></font><font color="#ff00ff">&nbsp;</font><font color="#a52a2a"><b>&quot;</b></font><font color="#ff00ff">&lt;/ul&gt;</font><font color="#a52a2a"><b>&quot;</b></font><br>
+<font color="#a52a2a">70 </font><font color="#a52a2a"><b>else</b></font><br>
+<font color="#a52a2a">71 </font>&nbsp;&nbsp;Error <font color="#a52a2a"><b>&quot;</b></font><font color="#ff00ff">No such project: </font><font color="#a020f0">$project</font><font color="#a52a2a"><b>&quot;</b></font><br>
+<font color="#a52a2a">72 </font><font color="#a52a2a"><b>fi</b></font><br>
+<font color="#a52a2a">73 </font><br>
+<font color="#a52a2a">74 </font><font color="#a52a2a"><b>exit</b></font>&nbsp;<font color="#ff00ff">0</font><br>
+</font>
+</nowiki>
 
 <h4>Windows</h4>
 <p>While it is far from a perfect set of instructions.. here are some quick notes that should help windows users along the way...</p>
 <ul>
 <li>you need fossil.exe accessible by your web server or on your path.. easiest is to just chuck it in \%SYSTEM_ROOT%\ (usually c:\windows\) </li>