Changes To Cookbook
Not logged in

Changes to "Cookbook" between 2009-04-22 14:53:44 and 2009-05-22 13:30:49

113
114
115
116
117
118
119

























































































120
121
122
123
124
125
126
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+








/usr/lib/cgi-bin/code.autonomo.us is just a standard fossil CGI file; it looks like this:

<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>
<li>assuming you are running apache, you need to either add the ExecCGI to the options on your DocumentRoot, or make sure the ScriptAlias directive is set and put your .cgi files in that folder..</li>
<li>the contents of your cgi file needs to essentially the same as above.. however paths needs to be windows friendly.. i have made sure that all folders on my test box are free of spaces, and as such this file works for me (obviously your paths may differ)