Fossil SCM

merge trunk

jan.nijtmans 2015-02-22 12:00 svn-import merge
Commit c3bcab0f0505eb9a96a59dbd3994b93e998f5463
+17
--- a/fossil.1
+++ b/fossil.1
@@ -0,0 +1,17 @@
1
+rsioned
2
+.br
3
+biseFebruary 2015wiki, ticket tracker, CGI/httphttp&and rsioned
4
+.br
5
+bisect In
6
+over seven years of operation, no work has ever been lost after
7
+having been commihangesgdiffddremove clean helpisect ranchundlefinfo open sqlite3February 2015wiki, rsiraise stashlean import tashone info purge ll commit init synciff jsonag
8
+.br
9
+bisect exportmote-url timeline
10
+.br
11
+blame iseFebruary 2015wiki, t icrsioi
12
+.br
13
+branchmv rm undousefsrss
14
+.br
15
+cat gdiff praisepdate
16
+.br
17
+changeshelp qlite3
--- a/fossil.1
+++ b/fossil.1
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/fossil.1
+++ b/fossil.1
@@ -0,0 +1,17 @@
1 rsioned
2 .br
3 biseFebruary 2015wiki, ticket tracker, CGI/httphttp&and rsioned
4 .br
5 bisect In
6 over seven years of operation, no work has ever been lost after
7 having been commihangesgdiffddremove clean helpisect ranchundlefinfo open sqlite3February 2015wiki, rsiraise stashlean import tashone info purge ll commit init synciff jsonag
8 .br
9 bisect exportmote-url timeline
10 .br
11 blame iseFebruary 2015wiki, t icrsioi
12 .br
13 branchmv rm undousefsrss
14 .br
15 cat gdiff praisepdate
16 .br
17 changeshelp qlite3
+17 -1
--- skins/README.md
+++ skins/README.md
@@ -1,11 +1,11 @@
11
Built-in Skins
22
==============
33
44
Each subdirectory under this folder describes a built-in "skin".
55
There are three files in each subdirectory for the CSS, the header,
6
-and the footer for the skin.
6
+and the footer for that skin.
77
88
To improve an existing built-in skin, simply edit the appropriate
99
files and recompile.
1010
1111
To add a new skin:
@@ -23,5 +23,21 @@
2323
2424
4. Edit the BuiltinSkin[] array near the top of the src/skins.c source
2525
file so that it describes and references the "newskin" skin.
2626
2727
5. Type "make" to rebuild.
28
+
29
+Development Hints
30
+-----------------
31
+
32
+One way to develop a new skin is to copy the baseline files (css.txt,
33
+footer.txt, and header.txt) into a working directory $WORKDIR then
34
+launch Fossil with a command-line option "--skin $WORKDIR". Example:
35
+
36
+ cp -r skins/default newskin
37
+ fossil ui --skin ./newskin
38
+
39
+When the argument to --skin contains one or more '/' characters, the
40
+appropriate skin files are read from disk from the directory specified.
41
+So after launching fossil as shown above, you can edit the newskin/css.txt,
42
+newskin/header.txt, and newskin/footer.txt files using your favorite
43
+text editor, then press Reload on your browser to see immediate results.
2844
--- skins/README.md
+++ skins/README.md
@@ -1,11 +1,11 @@
1 Built-in Skins
2 ==============
3
4 Each subdirectory under this folder describes a built-in "skin".
5 There are three files in each subdirectory for the CSS, the header,
6 and the footer for the skin.
7
8 To improve an existing built-in skin, simply edit the appropriate
9 files and recompile.
10
11 To add a new skin:
@@ -23,5 +23,21 @@
23
24 4. Edit the BuiltinSkin[] array near the top of the src/skins.c source
25 file so that it describes and references the "newskin" skin.
26
27 5. Type "make" to rebuild.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
--- skins/README.md
+++ skins/README.md
@@ -1,11 +1,11 @@
1 Built-in Skins
2 ==============
3
4 Each subdirectory under this folder describes a built-in "skin".
5 There are three files in each subdirectory for the CSS, the header,
6 and the footer for that skin.
7
8 To improve an existing built-in skin, simply edit the appropriate
9 files and recompile.
10
11 To add a new skin:
@@ -23,5 +23,21 @@
23
24 4. Edit the BuiltinSkin[] array near the top of the src/skins.c source
25 file so that it describes and references the "newskin" skin.
26
27 5. Type "make" to rebuild.
28
29 Development Hints
30 -----------------
31
32 One way to develop a new skin is to copy the baseline files (css.txt,
33 footer.txt, and header.txt) into a working directory $WORKDIR then
34 launch Fossil with a command-line option "--skin $WORKDIR". Example:
35
36 cp -r skins/default newskin
37 fossil ui --skin ./newskin
38
39 When the argument to --skin contains one or more '/' characters, the
40 appropriate skin files are read from disk from the directory specified.
41 So after launching fossil as shown above, you can edit the newskin/css.txt,
42 newskin/header.txt, and newskin/footer.txt files using your favorite
43 text editor, then press Reload on your browser to see immediate results.
44
--- skins/etienne1/css.txt
+++ skins/etienne1/css.txt
@@ -1,8 +1,9 @@
11
body {
22
margin: 0 auto;
3
- width: 960px;
3
+ min-width: 800px;
4
+ padding: 0px 20px;
45
font-family: sans-serif;
56
font-size:14pt;
67
}
78
89
a {
@@ -163,18 +164,19 @@
163164
.report thead+tbody tr:hover {
164165
background-color: #f5f9fc !important;
165166
}
166167
167168
td.tktDspLabel {
168
- max-width: 70px;
169
+ width: 70px;
169170
text-align: right;
171
+ overflow: hidden;
170172
}
171173
td.tktDspValue {
172
- max-width: 800px;
173174
text-align: left;
174175
vertical-align: top;
175
- background-color: #f5f9fc;
176
+ background-color: #f8f8f8;
177
+ border: 1px solid #ccc;
176178
}
177179
td.tktDspValue pre {
178180
white-space: pre-wrap;
179181
}
180182
181183
--- skins/etienne1/css.txt
+++ skins/etienne1/css.txt
@@ -1,8 +1,9 @@
1 body {
2 margin: 0 auto;
3 width: 960px;
 
4 font-family: sans-serif;
5 font-size:14pt;
6 }
7
8 a {
@@ -163,18 +164,19 @@
163 .report thead+tbody tr:hover {
164 background-color: #f5f9fc !important;
165 }
166
167 td.tktDspLabel {
168 max-width: 70px;
169 text-align: right;
 
170 }
171 td.tktDspValue {
172 max-width: 800px;
173 text-align: left;
174 vertical-align: top;
175 background-color: #f5f9fc;
 
176 }
177 td.tktDspValue pre {
178 white-space: pre-wrap;
179 }
180
181
--- skins/etienne1/css.txt
+++ skins/etienne1/css.txt
@@ -1,8 +1,9 @@
1 body {
2 margin: 0 auto;
3 min-width: 800px;
4 padding: 0px 20px;
5 font-family: sans-serif;
6 font-size:14pt;
7 }
8
9 a {
@@ -163,18 +164,19 @@
164 .report thead+tbody tr:hover {
165 background-color: #f5f9fc !important;
166 }
167
168 td.tktDspLabel {
169 width: 70px;
170 text-align: right;
171 overflow: hidden;
172 }
173 td.tktDspValue {
 
174 text-align: left;
175 vertical-align: top;
176 background-color: #f8f8f8;
177 border: 1px solid #ccc;
178 }
179 td.tktDspValue pre {
180 white-space: pre-wrap;
181 }
182
183
+1 -1
--- src/blob.c
+++ src/blob.c
@@ -753,11 +753,11 @@
753753
** Initialize a blob to be the content of a file. If the filename
754754
** is blank or "-" then read from standard input.
755755
**
756756
** Any prior content of the blob is discarded, not freed.
757757
**
758
-** Return the number of bytes read. Calls fossil_fatal() error (i.e.
758
+** Return the number of bytes read. Calls fossil_fatal() on error (i.e.
759759
** it exit()s and does not return).
760760
*/
761761
int blob_read_from_file(Blob *pBlob, const char *zFilename){
762762
int size, got;
763763
FILE *in;
764764
--- src/blob.c
+++ src/blob.c
@@ -753,11 +753,11 @@
753 ** Initialize a blob to be the content of a file. If the filename
754 ** is blank or "-" then read from standard input.
755 **
756 ** Any prior content of the blob is discarded, not freed.
757 **
758 ** Return the number of bytes read. Calls fossil_fatal() error (i.e.
759 ** it exit()s and does not return).
760 */
761 int blob_read_from_file(Blob *pBlob, const char *zFilename){
762 int size, got;
763 FILE *in;
764
--- src/blob.c
+++ src/blob.c
@@ -753,11 +753,11 @@
753 ** Initialize a blob to be the content of a file. If the filename
754 ** is blank or "-" then read from standard input.
755 **
756 ** Any prior content of the blob is discarded, not freed.
757 **
758 ** Return the number of bytes read. Calls fossil_fatal() on error (i.e.
759 ** it exit()s and does not return).
760 */
761 int blob_read_from_file(Blob *pBlob, const char *zFilename){
762 int size, got;
763 FILE *in;
764
+1
--- src/cgi.c
+++ src/cgi.c
@@ -1680,10 +1680,11 @@
16801680
*/
16811681
#define HTTP_SERVER_LOCALHOST 0x0001 /* Bind to 127.0.0.1 only */
16821682
#define HTTP_SERVER_SCGI 0x0002 /* SCGI instead of HTTP */
16831683
#define HTTP_SERVER_HAD_REPOSITORY 0x0004 /* Was the repository open? */
16841684
#define HTTP_SERVER_HAD_CHECKOUT 0x0008 /* Was a checkout open? */
1685
+#define HTTP_SERVER_REPOLIST 0x0010 /* Allow repo listing */
16851686
16861687
#endif /* INTERFACE */
16871688
16881689
/*
16891690
** Maximum number of child processes that we can have running
16901691
--- src/cgi.c
+++ src/cgi.c
@@ -1680,10 +1680,11 @@
1680 */
1681 #define HTTP_SERVER_LOCALHOST 0x0001 /* Bind to 127.0.0.1 only */
1682 #define HTTP_SERVER_SCGI 0x0002 /* SCGI instead of HTTP */
1683 #define HTTP_SERVER_HAD_REPOSITORY 0x0004 /* Was the repository open? */
1684 #define HTTP_SERVER_HAD_CHECKOUT 0x0008 /* Was a checkout open? */
 
1685
1686 #endif /* INTERFACE */
1687
1688 /*
1689 ** Maximum number of child processes that we can have running
1690
--- src/cgi.c
+++ src/cgi.c
@@ -1680,10 +1680,11 @@
1680 */
1681 #define HTTP_SERVER_LOCALHOST 0x0001 /* Bind to 127.0.0.1 only */
1682 #define HTTP_SERVER_SCGI 0x0002 /* SCGI instead of HTTP */
1683 #define HTTP_SERVER_HAD_REPOSITORY 0x0004 /* Was the repository open? */
1684 #define HTTP_SERVER_HAD_CHECKOUT 0x0008 /* Was a checkout open? */
1685 #define HTTP_SERVER_REPOLIST 0x0010 /* Allow repo listing */
1686
1687 #endif /* INTERFACE */
1688
1689 /*
1690 ** Maximum number of child processes that we can have running
1691
+14 -1
--- src/event.c
+++ src/event.c
@@ -267,10 +267,16 @@
267267
rid = db_int(0,
268268
"SELECT rid FROM tagxref"
269269
" WHERE tagid=(SELECT tagid FROM tag WHERE tagname GLOB '%q*')"
270270
" ORDER BY mtime DESC", zTag
271271
);
272
+ if( rid && strlen(zId)<40 ){
273
+ zId = db_text(0,
274
+ "SELECT substr(tagname,7) FROM tag WHERE tagname GLOB '%q*'",
275
+ zTag
276
+ );
277
+ }
272278
free(zTag);
273279
274280
/* Need both check-in and wiki-write or wiki-create privileges in order
275281
** to edit/create an event.
276282
*/
@@ -393,11 +399,18 @@
393399
md5sum_blob(&event, &cksum);
394400
blob_appendf(&event, "Z %b\n", &cksum);
395401
blob_reset(&cksum);
396402
nrid = content_put(&event);
397403
db_multi_exec("INSERT OR IGNORE INTO unsent VALUES(%d)", nrid);
398
- manifest_crosslink(nrid, &event, MC_NONE);
404
+ if( manifest_crosslink(nrid, &event, MC_NONE)==0 ){
405
+ db_end_transaction(1);
406
+ style_header("Error");
407
+ @ Internal error: Fossil tried to make an invalid artifact for
408
+ @ the edited technode.
409
+ style_footer();
410
+ return;
411
+ }
399412
assert( blob_is_reset(&event) );
400413
content_deltify(rid, nrid, 0);
401414
db_end_transaction(0);
402415
cgi_redirectf("technote?name=%T", zId);
403416
}
404417
--- src/event.c
+++ src/event.c
@@ -267,10 +267,16 @@
267 rid = db_int(0,
268 "SELECT rid FROM tagxref"
269 " WHERE tagid=(SELECT tagid FROM tag WHERE tagname GLOB '%q*')"
270 " ORDER BY mtime DESC", zTag
271 );
 
 
 
 
 
 
272 free(zTag);
273
274 /* Need both check-in and wiki-write or wiki-create privileges in order
275 ** to edit/create an event.
276 */
@@ -393,11 +399,18 @@
393 md5sum_blob(&event, &cksum);
394 blob_appendf(&event, "Z %b\n", &cksum);
395 blob_reset(&cksum);
396 nrid = content_put(&event);
397 db_multi_exec("INSERT OR IGNORE INTO unsent VALUES(%d)", nrid);
398 manifest_crosslink(nrid, &event, MC_NONE);
 
 
 
 
 
 
 
399 assert( blob_is_reset(&event) );
400 content_deltify(rid, nrid, 0);
401 db_end_transaction(0);
402 cgi_redirectf("technote?name=%T", zId);
403 }
404
--- src/event.c
+++ src/event.c
@@ -267,10 +267,16 @@
267 rid = db_int(0,
268 "SELECT rid FROM tagxref"
269 " WHERE tagid=(SELECT tagid FROM tag WHERE tagname GLOB '%q*')"
270 " ORDER BY mtime DESC", zTag
271 );
272 if( rid && strlen(zId)<40 ){
273 zId = db_text(0,
274 "SELECT substr(tagname,7) FROM tag WHERE tagname GLOB '%q*'",
275 zTag
276 );
277 }
278 free(zTag);
279
280 /* Need both check-in and wiki-write or wiki-create privileges in order
281 ** to edit/create an event.
282 */
@@ -393,11 +399,18 @@
399 md5sum_blob(&event, &cksum);
400 blob_appendf(&event, "Z %b\n", &cksum);
401 blob_reset(&cksum);
402 nrid = content_put(&event);
403 db_multi_exec("INSERT OR IGNORE INTO unsent VALUES(%d)", nrid);
404 if( manifest_crosslink(nrid, &event, MC_NONE)==0 ){
405 db_end_transaction(1);
406 style_header("Error");
407 @ Internal error: Fossil tried to make an invalid artifact for
408 @ the edited technode.
409 style_footer();
410 return;
411 }
412 assert( blob_is_reset(&event) );
413 content_deltify(rid, nrid, 0);
414 db_end_transaction(0);
415 cgi_redirectf("technote?name=%T", zId);
416 }
417
+4 -1
--- src/info.c
+++ src/info.c
@@ -827,10 +827,13 @@
827827
@ <tr><th>Page&nbsp;Name:</th><td>%h(pWiki->zWikiTitle)</td></tr>
828828
@ <tr><th>Date:</th><td>
829829
hyperlink_to_date(zDate, "</td></tr>");
830830
@ <tr><th>Original&nbsp;User:</th><td>
831831
hyperlink_to_user(pWiki->zUser, zDate, "</td></tr>");
832
+ if( pWiki->zMimetype ){
833
+ @ <tr><th>Mimetype:</th><td>%h(pWiki->zMimetype)</td></tr>
834
+ }
832835
if( pWiki->nParent>0 ){
833836
int i;
834837
@ <tr><th>Parent%s(pWiki->nParent==1?"":"s"):</th><td>
835838
for(i=0; i<pWiki->nParent; i++){
836839
char *zParent = pWiki->azParent[i];
@@ -854,11 +857,11 @@
854857
}
855858
856859
857860
@ <div class="section">Content</div>
858861
blob_init(&wiki, pWiki->zWiki, -1);
859
- wiki_convert(&wiki, 0, 0);
862
+ wiki_render_by_mimetype(&wiki, pWiki->zMimetype);
860863
blob_reset(&wiki);
861864
manifest_destroy(pWiki);
862865
style_footer();
863866
}
864867
865868
--- src/info.c
+++ src/info.c
@@ -827,10 +827,13 @@
827 @ <tr><th>Page&nbsp;Name:</th><td>%h(pWiki->zWikiTitle)</td></tr>
828 @ <tr><th>Date:</th><td>
829 hyperlink_to_date(zDate, "</td></tr>");
830 @ <tr><th>Original&nbsp;User:</th><td>
831 hyperlink_to_user(pWiki->zUser, zDate, "</td></tr>");
 
 
 
832 if( pWiki->nParent>0 ){
833 int i;
834 @ <tr><th>Parent%s(pWiki->nParent==1?"":"s"):</th><td>
835 for(i=0; i<pWiki->nParent; i++){
836 char *zParent = pWiki->azParent[i];
@@ -854,11 +857,11 @@
854 }
855
856
857 @ <div class="section">Content</div>
858 blob_init(&wiki, pWiki->zWiki, -1);
859 wiki_convert(&wiki, 0, 0);
860 blob_reset(&wiki);
861 manifest_destroy(pWiki);
862 style_footer();
863 }
864
865
--- src/info.c
+++ src/info.c
@@ -827,10 +827,13 @@
827 @ <tr><th>Page&nbsp;Name:</th><td>%h(pWiki->zWikiTitle)</td></tr>
828 @ <tr><th>Date:</th><td>
829 hyperlink_to_date(zDate, "</td></tr>");
830 @ <tr><th>Original&nbsp;User:</th><td>
831 hyperlink_to_user(pWiki->zUser, zDate, "</td></tr>");
832 if( pWiki->zMimetype ){
833 @ <tr><th>Mimetype:</th><td>%h(pWiki->zMimetype)</td></tr>
834 }
835 if( pWiki->nParent>0 ){
836 int i;
837 @ <tr><th>Parent%s(pWiki->nParent==1?"":"s"):</th><td>
838 for(i=0; i<pWiki->nParent; i++){
839 char *zParent = pWiki->azParent[i];
@@ -854,11 +857,11 @@
857 }
858
859
860 @ <div class="section">Content</div>
861 blob_init(&wiki, pWiki->zWiki, -1);
862 wiki_render_by_mimetype(&wiki, pWiki->zMimetype);
863 blob_reset(&wiki);
864 manifest_destroy(pWiki);
865 style_footer();
866 }
867
868
+86 -30
--- src/main.c
+++ src/main.c
@@ -1408,10 +1408,48 @@
14081408
}
14091409
}
14101410
#endif
14111411
return zRepo;
14121412
}
1413
+
1414
+/*
1415
+** Generate a web-page that lists all repositories located under the
1416
+** g.zRepositoryName directory and return non-zero.
1417
+**
1418
+** Or, if no repositories can be located beneath g.zRepositoryName,
1419
+** return 0.
1420
+*/
1421
+static int repo_list_page(void){
1422
+ Blob base;
1423
+ int n = 0;
1424
+
1425
+ assert( g.db==0 );
1426
+ blob_init(&base, g.zRepositoryName, -1);
1427
+ sqlite3_open(":memory:", &g.db);
1428
+ db_multi_exec("CREATE TABLE sfile(x TEXT);");
1429
+ db_multi_exec("CREATE TABLE vfile(pathname);");
1430
+ vfile_scan(&base, blob_size(&base), 0, 0, 0);
1431
+ db_multi_exec("DELETE FROM sfile WHERE x NOT GLOB '*.fossil'");
1432
+ n = db_int(0, "SELECT count(*) FROM sfile");
1433
+ if( n>0 ){
1434
+ Stmt q;
1435
+ @ <h1>Available Repositories:</h1>
1436
+ @ <ol>
1437
+ db_prepare(&q, "SELECT x, substr(x,-7,-100000)||'/home'"
1438
+ " FROM sfile ORDER BY x COLLATE nocase;");
1439
+ while( db_step(&q)==SQLITE_ROW ){
1440
+ const char *zName = db_column_text(&q, 0);
1441
+ const char *zUrl = db_column_text(&q, 1);
1442
+ @ <li><a href="%h(zUrl)">%h(zName)</a></li>
1443
+ }
1444
+ @ </ol>
1445
+ cgi_reply();
1446
+ }
1447
+ sqlite3_close(g.db);
1448
+ g.db = 0;
1449
+ return n;
1450
+}
14131451
14141452
/*
14151453
** Preconditions:
14161454
**
14171455
** * Environment variables are set up according to the CGI standard.
@@ -1431,11 +1469,15 @@
14311469
** $prefix can be determined from its suffix, then the file $prefix is
14321470
** returned as static text.
14331471
**
14341472
** If no suitable webpage is found, try to redirect to zNotFound.
14351473
*/
1436
-static void process_one_web_page(const char *zNotFound, Glob *pFileGlob){
1474
+static void process_one_web_page(
1475
+ const char *zNotFound, /* Redirect here on a 404 if not NULL */
1476
+ Glob *pFileGlob, /* Deliver static files matching */
1477
+ int allowRepoList /* Send repo list for "/" URL */
1478
+){
14371479
const char *zPathInfo;
14381480
char *zPath = NULL;
14391481
int idx;
14401482
int i;
14411483
@@ -1506,10 +1548,14 @@
15061548
15071549
if( szFile<1024 ){
15081550
set_base_url(0);
15091551
if( zNotFound ){
15101552
cgi_redirect(zNotFound);
1553
+ }else if( strcmp(zPathInfo,"/")==0
1554
+ && allowRepoList
1555
+ && repo_list_page() ){
1556
+ /* Will return a list of repositories */
15111557
}else{
15121558
#ifdef FOSSIL_ENABLE_JSON
15131559
if(g.json.isJsonMode){
15141560
json_err(FSL_JSON_E_RESOURCE_NOT_FOUND,NULL,1);
15151561
return;
@@ -1805,10 +1851,11 @@
18051851
const char *zFile;
18061852
const char *zNotFound = 0;
18071853
char **azRedirect = 0; /* List of repositories to redirect to */
18081854
int nRedirect = 0; /* Number of entries in azRedirect */
18091855
Glob *pFileGlob = 0; /* Pattern for files */
1856
+ int allowRepoList = 0; /* Allow lists of repository files */
18101857
Blob config, line, key, value, value2;
18111858
if( g.argc==3 && fossil_strcmp(g.argv[1],"cgi")==0 ){
18121859
zFile = g.argv[2];
18131860
}else{
18141861
zFile = g.argv[1];
@@ -1862,10 +1909,19 @@
18621909
** Grant "administrator" privileges to users connecting with HTTP
18631910
** from IP address 127.0.0.1. Do not bother checking credentials.
18641911
*/
18651912
g.useLocalauth = 1;
18661913
continue;
1914
+ }
1915
+ if( blob_eq(&key, "repolist") ){
1916
+ /* repolist
1917
+ **
1918
+ ** If using "directory:" and the URL is "/" then generate a page
1919
+ ** showing a list of available repositories.
1920
+ */
1921
+ allowRepoList = 1;
1922
+ continue;
18671923
}
18681924
if( blob_eq(&key, "redirect:") && blob_token(&line, &value)
18691925
&& blob_token(&line, &value2) ){
18701926
/* See the header comment on the redirect_web_page() function
18711927
** above for details. */
@@ -1952,11 +2008,11 @@
19522008
}
19532009
cgi_init();
19542010
if( nRedirect ){
19552011
redirect_web_page(nRedirect, azRedirect);
19562012
}else{
1957
- process_one_web_page(zNotFound, pFileGlob);
2013
+ process_one_web_page(zNotFound, pFileGlob, allowRepoList);
19582014
}
19592015
}
19602016
19612017
/*
19622018
** If g.argv[arg] exists then it is either the name of a repository
@@ -1970,24 +2026,17 @@
19702026
** Open the repository to be served if it is known. If g.argv[arg] is
19712027
** a directory full of repositories, then set g.zRepositoryName to
19722028
** the name of that directory and the specific repository will be
19732029
** opened later by process_one_web_page() based on the content of
19742030
** the PATH_INFO variable.
1975
-**
1976
-** If disallowDir is set, then the directory full of repositories method
1977
-** is disallowed.
19782031
*/
1979
-static void find_server_repository(int disallowDir, int arg){
2032
+static void find_server_repository(int arg){
19802033
if( g.argc<=arg ){
19812034
db_must_be_within_tree();
19822035
}else if( file_isdir(g.argv[arg])==1 ){
1983
- if( disallowDir ){
1984
- fossil_fatal("\"%s\" is a directory, not a repository file", g.argv[arg]);
1985
- }else{
1986
- g.zRepositoryName = mprintf("%s", g.argv[arg]);
1987
- file_simplify_name(g.zRepositoryName, -1, 0);
1988
- }
2036
+ g.zRepositoryName = mprintf("%s", g.argv[arg]);
2037
+ file_simplify_name(g.zRepositoryName, -1, 0);
19892038
}else{
19902039
db_open_repository(g.argv[arg]);
19912040
}
19922041
}
19932042
@@ -2028,18 +2077,19 @@
20282077
** If the --localauth option is given, then automatic login is performed
20292078
** for requests coming from localhost, if the "localauth" setting is not
20302079
** enabled.
20312080
**
20322081
** Options:
2082
+** --baseurl URL base URL (useful with reverse proxies)
2083
+** --files GLOB comma-separate glob patterns for static file to serve
20332084
** --localauth enable automatic login for local connections
20342085
** --host NAME specify hostname of the server
20352086
** --https signal a request coming in via https
20362087
** --nojail drop root privilege but do not enter the chroot jail
20372088
** --nossl signal that no SSL connections are available
20382089
** --notfound URL use URL as "HTTP 404, object not found" page.
2039
-** --files GLOB comma-separate glob patterns for static file to serve
2040
-** --baseurl URL base URL (useful with reverse proxies)
2090
+** --repolist If REPOSITORY is directory, URL "/" lists all repos
20412091
** --scgi Interpret input as SCGI rather than HTTP
20422092
** --skin LABEL Use override skin LABEL
20432093
**
20442094
** See also: cgi, server, winsrv
20452095
*/
@@ -2049,10 +2099,11 @@
20492099
const char *zHost;
20502100
const char *zAltBase;
20512101
const char *zFileGlob;
20522102
int useSCGI;
20532103
int noJail;
2104
+ int allowRepoList;
20542105
20552106
/* The winhttp module passes the --files option as --files-urlenc with
20562107
** the argument being URL encoded, to avoid wildcard expansion in the
20572108
** shell. This option is for internal use and is undocumented.
20582109
*/
@@ -2065,10 +2116,11 @@
20652116
zFileGlob = find_option("files",0,1);
20662117
}
20672118
skin_override();
20682119
zNotFound = find_option("notfound", 0, 1);
20692120
noJail = find_option("nojail",0,0)!=0;
2121
+ allowRepoList = find_option("repolist",0,0)!=0;
20702122
g.useLocalauth = find_option("localauth", 0, 0)!=0;
20712123
g.sslNotAvailable = find_option("nossl", 0, 0)!=0;
20722124
useSCGI = find_option("scgi", 0, 0)!=0;
20732125
zAltBase = find_option("baseurl", 0, 1);
20742126
if( zAltBase ) set_base_url(zAltBase);
@@ -2089,15 +2141,15 @@
20892141
g.fullHttpReply = 1;
20902142
if( g.argc>=5 ){
20912143
g.httpIn = fossil_fopen(g.argv[2], "rb");
20922144
g.httpOut = fossil_fopen(g.argv[3], "wb");
20932145
zIpAddr = g.argv[4];
2094
- find_server_repository(0, 5);
2146
+ find_server_repository(5);
20952147
}else{
20962148
g.httpIn = stdin;
20972149
g.httpOut = stdout;
2098
- find_server_repository(0, 2);
2150
+ find_server_repository(2);
20992151
}
21002152
if( zIpAddr==0 ){
21012153
zIpAddr = cgi_ssh_remote_addr(0);
21022154
if( zIpAddr && zIpAddr[0] ){
21032155
g.fSshClient |= CGI_SSH_CLIENT;
@@ -2109,21 +2161,21 @@
21092161
}else if( g.fSshClient & CGI_SSH_CLIENT ){
21102162
ssh_request_loop(zIpAddr, glob_create(zFileGlob));
21112163
}else{
21122164
cgi_handle_http_request(zIpAddr);
21132165
}
2114
- process_one_web_page(zNotFound, glob_create(zFileGlob));
2166
+ process_one_web_page(zNotFound, glob_create(zFileGlob), allowRepoList);
21152167
}
21162168
21172169
/*
21182170
** Process all requests in a single SSH connection if possible.
21192171
*/
21202172
void ssh_request_loop(const char *zIpAddr, Glob *FileGlob){
21212173
blob_zero(&g.cgiIn);
21222174
do{
21232175
cgi_handle_ssh_http_request(zIpAddr);
2124
- process_one_web_page(0, FileGlob);
2176
+ process_one_web_page(0, FileGlob, 0);
21252177
blob_reset(&g.cgiIn);
21262178
} while ( g.fSshClient & CGI_SSH_FOSSIL ||
21272179
g.fSshClient & CGI_SSH_COMPAT );
21282180
}
21292181
@@ -2140,21 +2192,21 @@
21402192
Th_InitTraceLog();
21412193
login_set_capabilities("sx", 0);
21422194
g.useLocalauth = 1;
21432195
g.httpIn = stdin;
21442196
g.httpOut = stdout;
2145
- find_server_repository(0, 2);
2197
+ find_server_repository(2);
21462198
g.cgiOutput = 1;
21472199
g.fullHttpReply = 1;
21482200
zIpAddr = cgi_ssh_remote_addr(0);
21492201
if( zIpAddr && zIpAddr[0] ){
21502202
g.fSshClient |= CGI_SSH_CLIENT;
21512203
ssh_request_loop(zIpAddr, 0);
21522204
}else{
21532205
cgi_set_parameter("REMOTE_ADDR", "127.0.0.1");
21542206
cgi_handle_http_request(0);
2155
- process_one_web_page(0, 0);
2207
+ process_one_web_page(0, 0, 0);
21562208
}
21572209
}
21582210
21592211
#if !defined(_WIN32)
21602212
#if !defined(__DARWIN__) && !defined(__APPLE__) && !defined(__HAIKU__)
@@ -2211,16 +2263,15 @@
22112263
** "*.fossil*" will be served as static content. With the "ui" command,
22122264
** the REPOSITORY can only be a directory if the --notfound option is
22132265
** also present.
22142266
**
22152267
** By default, the "ui" command provides full administrative access without
2216
-** having to log in. This can be disabled by setting turning off the
2217
-** "localauth" setting. Automatic login for the "server" command is available
2218
-** if the --localauth option is present and the "localauth" setting is off
2219
-** and the connection is from localhost. The optional REPOSITORY argument
2220
-** to "ui" may be a directory and will function as "server" if and only if
2221
-** the --notfound option is used.
2268
+** having to log in. This can be disabled by turning off the "localauth"
2269
+** setting. Automatic login for the "server" command is available if the
2270
+** --localauth option is present and the "localauth" setting is off and the
2271
+** connection is from localhost. The "ui" command also enables --repolist
2272
+** by default.
22222273
**
22232274
** Options:
22242275
** --baseurl URL Use URL as the base (useful for reverse proxies)
22252276
** --files GLOBLIST Comma-separated list of glob patterns for static files
22262277
** --localauth enable automatic login for requests from localhost
@@ -2227,10 +2278,11 @@
22272278
** --localhost listen on 127.0.0.1 only (always true for "ui")
22282279
** --nojail Drop root privileges but do not enter the chroot jail
22292280
** --notfound URL Redirect
22302281
** -P|--port TCPPORT listen to request on port TCPPORT
22312282
** --th-trace trace TH1 execution (for debugging purposes)
2283
+** --repolist If REPOSITORY is dir, URL "/" lists repos.
22322284
** --scgi Accept SCGI rather than HTTP
22332285
** --skin LABEL Use override skin LABEL
22342286
22352287
**
22362288
** See also: cgi, http, winsrv
@@ -2244,10 +2296,11 @@
22442296
const char *zNotFound; /* The --notfound option or NULL */
22452297
int flags = 0; /* Server flags */
22462298
#if !defined(_WIN32)
22472299
int noJail; /* Do not enter the chroot jail */
22482300
#endif
2301
+ int allowRepoList; /* List repositories on URL "/" */
22492302
const char *zAltBase; /* Argument to the --baseurl option */
22502303
const char *zFileGlob; /* Static content must match this */
22512304
char *zIpAddr = 0; /* Bind to this IP address */
22522305
22532306
#if defined(_WIN32)
@@ -2269,10 +2322,11 @@
22692322
#endif
22702323
g.useLocalauth = find_option("localauth", 0, 0)!=0;
22712324
Th_InitTraceLog();
22722325
zPort = find_option("port", "P", 1);
22732326
zNotFound = find_option("notfound", 0, 1);
2327
+ allowRepoList = find_option("repolist",0,0)!=0;
22742328
zAltBase = find_option("baseurl", 0, 1);
22752329
if( find_option("scgi", 0, 0)!=0 ) flags |= HTTP_SERVER_SCGI;
22762330
if( zAltBase ){
22772331
set_base_url(zAltBase);
22782332
}
@@ -2284,14 +2338,15 @@
22842338
verify_all_options();
22852339
22862340
if( g.argc!=2 && g.argc!=3 ) usage("?REPOSITORY?");
22872341
isUiCmd = g.argv[1][0]=='u';
22882342
if( isUiCmd ){
2289
- flags |= HTTP_SERVER_LOCALHOST;
2343
+ flags |= HTTP_SERVER_LOCALHOST|HTTP_SERVER_REPOLIST;
22902344
g.useLocalauth = 1;
2345
+ allowRepoList = 1;
22912346
}
2292
- find_server_repository(isUiCmd && zNotFound==0, 2);
2347
+ find_server_repository(2);
22932348
if( zPort ){
22942349
int i;
22952350
for(i=strlen(zPort)-1; i>=0 && zPort[i]!=':'; i--){}
22962351
if( i>0 ){
22972352
zIpAddr = mprintf("%.*s", i, zPort);
@@ -2341,20 +2396,21 @@
23412396
g.httpOut = stdout;
23422397
if( g.fHttpTrace || g.fSqlTrace ){
23432398
fprintf(stderr, "====== SERVER pid %d =======\n", getpid());
23442399
}
23452400
g.cgiOutput = 1;
2346
- find_server_repository(isUiCmd && zNotFound==0, 2);
2401
+ find_server_repository(2);
23472402
g.zRepositoryName = enter_chroot_jail(g.zRepositoryName, noJail);
23482403
if( flags & HTTP_SERVER_SCGI ){
23492404
cgi_handle_scgi_request();
23502405
}else{
23512406
cgi_handle_http_request(0);
23522407
}
2353
- process_one_web_page(zNotFound, glob_create(zFileGlob));
2408
+ process_one_web_page(zNotFound, glob_create(zFileGlob), allowRepoList);
23542409
#else
23552410
/* Win32 implementation */
2411
+ (void)allowRepoList; /* Suppress warning */
23562412
if( isUiCmd ){
23572413
zBrowser = db_get("web-browser", "start");
23582414
if( zIpAddr ){
23592415
zBrowserCmd = mprintf("%s http://%s:%%d/ &", zBrowser, zIpAddr);
23602416
}else{
23612417
--- src/main.c
+++ src/main.c
@@ -1408,10 +1408,48 @@
1408 }
1409 }
1410 #endif
1411 return zRepo;
1412 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1413
1414 /*
1415 ** Preconditions:
1416 **
1417 ** * Environment variables are set up according to the CGI standard.
@@ -1431,11 +1469,15 @@
1431 ** $prefix can be determined from its suffix, then the file $prefix is
1432 ** returned as static text.
1433 **
1434 ** If no suitable webpage is found, try to redirect to zNotFound.
1435 */
1436 static void process_one_web_page(const char *zNotFound, Glob *pFileGlob){
 
 
 
 
1437 const char *zPathInfo;
1438 char *zPath = NULL;
1439 int idx;
1440 int i;
1441
@@ -1506,10 +1548,14 @@
1506
1507 if( szFile<1024 ){
1508 set_base_url(0);
1509 if( zNotFound ){
1510 cgi_redirect(zNotFound);
 
 
 
 
1511 }else{
1512 #ifdef FOSSIL_ENABLE_JSON
1513 if(g.json.isJsonMode){
1514 json_err(FSL_JSON_E_RESOURCE_NOT_FOUND,NULL,1);
1515 return;
@@ -1805,10 +1851,11 @@
1805 const char *zFile;
1806 const char *zNotFound = 0;
1807 char **azRedirect = 0; /* List of repositories to redirect to */
1808 int nRedirect = 0; /* Number of entries in azRedirect */
1809 Glob *pFileGlob = 0; /* Pattern for files */
 
1810 Blob config, line, key, value, value2;
1811 if( g.argc==3 && fossil_strcmp(g.argv[1],"cgi")==0 ){
1812 zFile = g.argv[2];
1813 }else{
1814 zFile = g.argv[1];
@@ -1862,10 +1909,19 @@
1862 ** Grant "administrator" privileges to users connecting with HTTP
1863 ** from IP address 127.0.0.1. Do not bother checking credentials.
1864 */
1865 g.useLocalauth = 1;
1866 continue;
 
 
 
 
 
 
 
 
 
1867 }
1868 if( blob_eq(&key, "redirect:") && blob_token(&line, &value)
1869 && blob_token(&line, &value2) ){
1870 /* See the header comment on the redirect_web_page() function
1871 ** above for details. */
@@ -1952,11 +2008,11 @@
1952 }
1953 cgi_init();
1954 if( nRedirect ){
1955 redirect_web_page(nRedirect, azRedirect);
1956 }else{
1957 process_one_web_page(zNotFound, pFileGlob);
1958 }
1959 }
1960
1961 /*
1962 ** If g.argv[arg] exists then it is either the name of a repository
@@ -1970,24 +2026,17 @@
1970 ** Open the repository to be served if it is known. If g.argv[arg] is
1971 ** a directory full of repositories, then set g.zRepositoryName to
1972 ** the name of that directory and the specific repository will be
1973 ** opened later by process_one_web_page() based on the content of
1974 ** the PATH_INFO variable.
1975 **
1976 ** If disallowDir is set, then the directory full of repositories method
1977 ** is disallowed.
1978 */
1979 static void find_server_repository(int disallowDir, int arg){
1980 if( g.argc<=arg ){
1981 db_must_be_within_tree();
1982 }else if( file_isdir(g.argv[arg])==1 ){
1983 if( disallowDir ){
1984 fossil_fatal("\"%s\" is a directory, not a repository file", g.argv[arg]);
1985 }else{
1986 g.zRepositoryName = mprintf("%s", g.argv[arg]);
1987 file_simplify_name(g.zRepositoryName, -1, 0);
1988 }
1989 }else{
1990 db_open_repository(g.argv[arg]);
1991 }
1992 }
1993
@@ -2028,18 +2077,19 @@
2028 ** If the --localauth option is given, then automatic login is performed
2029 ** for requests coming from localhost, if the "localauth" setting is not
2030 ** enabled.
2031 **
2032 ** Options:
 
 
2033 ** --localauth enable automatic login for local connections
2034 ** --host NAME specify hostname of the server
2035 ** --https signal a request coming in via https
2036 ** --nojail drop root privilege but do not enter the chroot jail
2037 ** --nossl signal that no SSL connections are available
2038 ** --notfound URL use URL as "HTTP 404, object not found" page.
2039 ** --files GLOB comma-separate glob patterns for static file to serve
2040 ** --baseurl URL base URL (useful with reverse proxies)
2041 ** --scgi Interpret input as SCGI rather than HTTP
2042 ** --skin LABEL Use override skin LABEL
2043 **
2044 ** See also: cgi, server, winsrv
2045 */
@@ -2049,10 +2099,11 @@
2049 const char *zHost;
2050 const char *zAltBase;
2051 const char *zFileGlob;
2052 int useSCGI;
2053 int noJail;
 
2054
2055 /* The winhttp module passes the --files option as --files-urlenc with
2056 ** the argument being URL encoded, to avoid wildcard expansion in the
2057 ** shell. This option is for internal use and is undocumented.
2058 */
@@ -2065,10 +2116,11 @@
2065 zFileGlob = find_option("files",0,1);
2066 }
2067 skin_override();
2068 zNotFound = find_option("notfound", 0, 1);
2069 noJail = find_option("nojail",0,0)!=0;
 
2070 g.useLocalauth = find_option("localauth", 0, 0)!=0;
2071 g.sslNotAvailable = find_option("nossl", 0, 0)!=0;
2072 useSCGI = find_option("scgi", 0, 0)!=0;
2073 zAltBase = find_option("baseurl", 0, 1);
2074 if( zAltBase ) set_base_url(zAltBase);
@@ -2089,15 +2141,15 @@
2089 g.fullHttpReply = 1;
2090 if( g.argc>=5 ){
2091 g.httpIn = fossil_fopen(g.argv[2], "rb");
2092 g.httpOut = fossil_fopen(g.argv[3], "wb");
2093 zIpAddr = g.argv[4];
2094 find_server_repository(0, 5);
2095 }else{
2096 g.httpIn = stdin;
2097 g.httpOut = stdout;
2098 find_server_repository(0, 2);
2099 }
2100 if( zIpAddr==0 ){
2101 zIpAddr = cgi_ssh_remote_addr(0);
2102 if( zIpAddr && zIpAddr[0] ){
2103 g.fSshClient |= CGI_SSH_CLIENT;
@@ -2109,21 +2161,21 @@
2109 }else if( g.fSshClient & CGI_SSH_CLIENT ){
2110 ssh_request_loop(zIpAddr, glob_create(zFileGlob));
2111 }else{
2112 cgi_handle_http_request(zIpAddr);
2113 }
2114 process_one_web_page(zNotFound, glob_create(zFileGlob));
2115 }
2116
2117 /*
2118 ** Process all requests in a single SSH connection if possible.
2119 */
2120 void ssh_request_loop(const char *zIpAddr, Glob *FileGlob){
2121 blob_zero(&g.cgiIn);
2122 do{
2123 cgi_handle_ssh_http_request(zIpAddr);
2124 process_one_web_page(0, FileGlob);
2125 blob_reset(&g.cgiIn);
2126 } while ( g.fSshClient & CGI_SSH_FOSSIL ||
2127 g.fSshClient & CGI_SSH_COMPAT );
2128 }
2129
@@ -2140,21 +2192,21 @@
2140 Th_InitTraceLog();
2141 login_set_capabilities("sx", 0);
2142 g.useLocalauth = 1;
2143 g.httpIn = stdin;
2144 g.httpOut = stdout;
2145 find_server_repository(0, 2);
2146 g.cgiOutput = 1;
2147 g.fullHttpReply = 1;
2148 zIpAddr = cgi_ssh_remote_addr(0);
2149 if( zIpAddr && zIpAddr[0] ){
2150 g.fSshClient |= CGI_SSH_CLIENT;
2151 ssh_request_loop(zIpAddr, 0);
2152 }else{
2153 cgi_set_parameter("REMOTE_ADDR", "127.0.0.1");
2154 cgi_handle_http_request(0);
2155 process_one_web_page(0, 0);
2156 }
2157 }
2158
2159 #if !defined(_WIN32)
2160 #if !defined(__DARWIN__) && !defined(__APPLE__) && !defined(__HAIKU__)
@@ -2211,16 +2263,15 @@
2211 ** "*.fossil*" will be served as static content. With the "ui" command,
2212 ** the REPOSITORY can only be a directory if the --notfound option is
2213 ** also present.
2214 **
2215 ** By default, the "ui" command provides full administrative access without
2216 ** having to log in. This can be disabled by setting turning off the
2217 ** "localauth" setting. Automatic login for the "server" command is available
2218 ** if the --localauth option is present and the "localauth" setting is off
2219 ** and the connection is from localhost. The optional REPOSITORY argument
2220 ** to "ui" may be a directory and will function as "server" if and only if
2221 ** the --notfound option is used.
2222 **
2223 ** Options:
2224 ** --baseurl URL Use URL as the base (useful for reverse proxies)
2225 ** --files GLOBLIST Comma-separated list of glob patterns for static files
2226 ** --localauth enable automatic login for requests from localhost
@@ -2227,10 +2278,11 @@
2227 ** --localhost listen on 127.0.0.1 only (always true for "ui")
2228 ** --nojail Drop root privileges but do not enter the chroot jail
2229 ** --notfound URL Redirect
2230 ** -P|--port TCPPORT listen to request on port TCPPORT
2231 ** --th-trace trace TH1 execution (for debugging purposes)
 
2232 ** --scgi Accept SCGI rather than HTTP
2233 ** --skin LABEL Use override skin LABEL
2234
2235 **
2236 ** See also: cgi, http, winsrv
@@ -2244,10 +2296,11 @@
2244 const char *zNotFound; /* The --notfound option or NULL */
2245 int flags = 0; /* Server flags */
2246 #if !defined(_WIN32)
2247 int noJail; /* Do not enter the chroot jail */
2248 #endif
 
2249 const char *zAltBase; /* Argument to the --baseurl option */
2250 const char *zFileGlob; /* Static content must match this */
2251 char *zIpAddr = 0; /* Bind to this IP address */
2252
2253 #if defined(_WIN32)
@@ -2269,10 +2322,11 @@
2269 #endif
2270 g.useLocalauth = find_option("localauth", 0, 0)!=0;
2271 Th_InitTraceLog();
2272 zPort = find_option("port", "P", 1);
2273 zNotFound = find_option("notfound", 0, 1);
 
2274 zAltBase = find_option("baseurl", 0, 1);
2275 if( find_option("scgi", 0, 0)!=0 ) flags |= HTTP_SERVER_SCGI;
2276 if( zAltBase ){
2277 set_base_url(zAltBase);
2278 }
@@ -2284,14 +2338,15 @@
2284 verify_all_options();
2285
2286 if( g.argc!=2 && g.argc!=3 ) usage("?REPOSITORY?");
2287 isUiCmd = g.argv[1][0]=='u';
2288 if( isUiCmd ){
2289 flags |= HTTP_SERVER_LOCALHOST;
2290 g.useLocalauth = 1;
 
2291 }
2292 find_server_repository(isUiCmd && zNotFound==0, 2);
2293 if( zPort ){
2294 int i;
2295 for(i=strlen(zPort)-1; i>=0 && zPort[i]!=':'; i--){}
2296 if( i>0 ){
2297 zIpAddr = mprintf("%.*s", i, zPort);
@@ -2341,20 +2396,21 @@
2341 g.httpOut = stdout;
2342 if( g.fHttpTrace || g.fSqlTrace ){
2343 fprintf(stderr, "====== SERVER pid %d =======\n", getpid());
2344 }
2345 g.cgiOutput = 1;
2346 find_server_repository(isUiCmd && zNotFound==0, 2);
2347 g.zRepositoryName = enter_chroot_jail(g.zRepositoryName, noJail);
2348 if( flags & HTTP_SERVER_SCGI ){
2349 cgi_handle_scgi_request();
2350 }else{
2351 cgi_handle_http_request(0);
2352 }
2353 process_one_web_page(zNotFound, glob_create(zFileGlob));
2354 #else
2355 /* Win32 implementation */
 
2356 if( isUiCmd ){
2357 zBrowser = db_get("web-browser", "start");
2358 if( zIpAddr ){
2359 zBrowserCmd = mprintf("%s http://%s:%%d/ &", zBrowser, zIpAddr);
2360 }else{
2361
--- src/main.c
+++ src/main.c
@@ -1408,10 +1408,48 @@
1408 }
1409 }
1410 #endif
1411 return zRepo;
1412 }
1413
1414 /*
1415 ** Generate a web-page that lists all repositories located under the
1416 ** g.zRepositoryName directory and return non-zero.
1417 **
1418 ** Or, if no repositories can be located beneath g.zRepositoryName,
1419 ** return 0.
1420 */
1421 static int repo_list_page(void){
1422 Blob base;
1423 int n = 0;
1424
1425 assert( g.db==0 );
1426 blob_init(&base, g.zRepositoryName, -1);
1427 sqlite3_open(":memory:", &g.db);
1428 db_multi_exec("CREATE TABLE sfile(x TEXT);");
1429 db_multi_exec("CREATE TABLE vfile(pathname);");
1430 vfile_scan(&base, blob_size(&base), 0, 0, 0);
1431 db_multi_exec("DELETE FROM sfile WHERE x NOT GLOB '*.fossil'");
1432 n = db_int(0, "SELECT count(*) FROM sfile");
1433 if( n>0 ){
1434 Stmt q;
1435 @ <h1>Available Repositories:</h1>
1436 @ <ol>
1437 db_prepare(&q, "SELECT x, substr(x,-7,-100000)||'/home'"
1438 " FROM sfile ORDER BY x COLLATE nocase;");
1439 while( db_step(&q)==SQLITE_ROW ){
1440 const char *zName = db_column_text(&q, 0);
1441 const char *zUrl = db_column_text(&q, 1);
1442 @ <li><a href="%h(zUrl)">%h(zName)</a></li>
1443 }
1444 @ </ol>
1445 cgi_reply();
1446 }
1447 sqlite3_close(g.db);
1448 g.db = 0;
1449 return n;
1450 }
1451
1452 /*
1453 ** Preconditions:
1454 **
1455 ** * Environment variables are set up according to the CGI standard.
@@ -1431,11 +1469,15 @@
1469 ** $prefix can be determined from its suffix, then the file $prefix is
1470 ** returned as static text.
1471 **
1472 ** If no suitable webpage is found, try to redirect to zNotFound.
1473 */
1474 static void process_one_web_page(
1475 const char *zNotFound, /* Redirect here on a 404 if not NULL */
1476 Glob *pFileGlob, /* Deliver static files matching */
1477 int allowRepoList /* Send repo list for "/" URL */
1478 ){
1479 const char *zPathInfo;
1480 char *zPath = NULL;
1481 int idx;
1482 int i;
1483
@@ -1506,10 +1548,14 @@
1548
1549 if( szFile<1024 ){
1550 set_base_url(0);
1551 if( zNotFound ){
1552 cgi_redirect(zNotFound);
1553 }else if( strcmp(zPathInfo,"/")==0
1554 && allowRepoList
1555 && repo_list_page() ){
1556 /* Will return a list of repositories */
1557 }else{
1558 #ifdef FOSSIL_ENABLE_JSON
1559 if(g.json.isJsonMode){
1560 json_err(FSL_JSON_E_RESOURCE_NOT_FOUND,NULL,1);
1561 return;
@@ -1805,10 +1851,11 @@
1851 const char *zFile;
1852 const char *zNotFound = 0;
1853 char **azRedirect = 0; /* List of repositories to redirect to */
1854 int nRedirect = 0; /* Number of entries in azRedirect */
1855 Glob *pFileGlob = 0; /* Pattern for files */
1856 int allowRepoList = 0; /* Allow lists of repository files */
1857 Blob config, line, key, value, value2;
1858 if( g.argc==3 && fossil_strcmp(g.argv[1],"cgi")==0 ){
1859 zFile = g.argv[2];
1860 }else{
1861 zFile = g.argv[1];
@@ -1862,10 +1909,19 @@
1909 ** Grant "administrator" privileges to users connecting with HTTP
1910 ** from IP address 127.0.0.1. Do not bother checking credentials.
1911 */
1912 g.useLocalauth = 1;
1913 continue;
1914 }
1915 if( blob_eq(&key, "repolist") ){
1916 /* repolist
1917 **
1918 ** If using "directory:" and the URL is "/" then generate a page
1919 ** showing a list of available repositories.
1920 */
1921 allowRepoList = 1;
1922 continue;
1923 }
1924 if( blob_eq(&key, "redirect:") && blob_token(&line, &value)
1925 && blob_token(&line, &value2) ){
1926 /* See the header comment on the redirect_web_page() function
1927 ** above for details. */
@@ -1952,11 +2008,11 @@
2008 }
2009 cgi_init();
2010 if( nRedirect ){
2011 redirect_web_page(nRedirect, azRedirect);
2012 }else{
2013 process_one_web_page(zNotFound, pFileGlob, allowRepoList);
2014 }
2015 }
2016
2017 /*
2018 ** If g.argv[arg] exists then it is either the name of a repository
@@ -1970,24 +2026,17 @@
2026 ** Open the repository to be served if it is known. If g.argv[arg] is
2027 ** a directory full of repositories, then set g.zRepositoryName to
2028 ** the name of that directory and the specific repository will be
2029 ** opened later by process_one_web_page() based on the content of
2030 ** the PATH_INFO variable.
 
 
 
2031 */
2032 static void find_server_repository(int arg){
2033 if( g.argc<=arg ){
2034 db_must_be_within_tree();
2035 }else if( file_isdir(g.argv[arg])==1 ){
2036 g.zRepositoryName = mprintf("%s", g.argv[arg]);
2037 file_simplify_name(g.zRepositoryName, -1, 0);
 
 
 
 
2038 }else{
2039 db_open_repository(g.argv[arg]);
2040 }
2041 }
2042
@@ -2028,18 +2077,19 @@
2077 ** If the --localauth option is given, then automatic login is performed
2078 ** for requests coming from localhost, if the "localauth" setting is not
2079 ** enabled.
2080 **
2081 ** Options:
2082 ** --baseurl URL base URL (useful with reverse proxies)
2083 ** --files GLOB comma-separate glob patterns for static file to serve
2084 ** --localauth enable automatic login for local connections
2085 ** --host NAME specify hostname of the server
2086 ** --https signal a request coming in via https
2087 ** --nojail drop root privilege but do not enter the chroot jail
2088 ** --nossl signal that no SSL connections are available
2089 ** --notfound URL use URL as "HTTP 404, object not found" page.
2090 ** --repolist If REPOSITORY is directory, URL "/" lists all repos
 
2091 ** --scgi Interpret input as SCGI rather than HTTP
2092 ** --skin LABEL Use override skin LABEL
2093 **
2094 ** See also: cgi, server, winsrv
2095 */
@@ -2049,10 +2099,11 @@
2099 const char *zHost;
2100 const char *zAltBase;
2101 const char *zFileGlob;
2102 int useSCGI;
2103 int noJail;
2104 int allowRepoList;
2105
2106 /* The winhttp module passes the --files option as --files-urlenc with
2107 ** the argument being URL encoded, to avoid wildcard expansion in the
2108 ** shell. This option is for internal use and is undocumented.
2109 */
@@ -2065,10 +2116,11 @@
2116 zFileGlob = find_option("files",0,1);
2117 }
2118 skin_override();
2119 zNotFound = find_option("notfound", 0, 1);
2120 noJail = find_option("nojail",0,0)!=0;
2121 allowRepoList = find_option("repolist",0,0)!=0;
2122 g.useLocalauth = find_option("localauth", 0, 0)!=0;
2123 g.sslNotAvailable = find_option("nossl", 0, 0)!=0;
2124 useSCGI = find_option("scgi", 0, 0)!=0;
2125 zAltBase = find_option("baseurl", 0, 1);
2126 if( zAltBase ) set_base_url(zAltBase);
@@ -2089,15 +2141,15 @@
2141 g.fullHttpReply = 1;
2142 if( g.argc>=5 ){
2143 g.httpIn = fossil_fopen(g.argv[2], "rb");
2144 g.httpOut = fossil_fopen(g.argv[3], "wb");
2145 zIpAddr = g.argv[4];
2146 find_server_repository(5);
2147 }else{
2148 g.httpIn = stdin;
2149 g.httpOut = stdout;
2150 find_server_repository(2);
2151 }
2152 if( zIpAddr==0 ){
2153 zIpAddr = cgi_ssh_remote_addr(0);
2154 if( zIpAddr && zIpAddr[0] ){
2155 g.fSshClient |= CGI_SSH_CLIENT;
@@ -2109,21 +2161,21 @@
2161 }else if( g.fSshClient & CGI_SSH_CLIENT ){
2162 ssh_request_loop(zIpAddr, glob_create(zFileGlob));
2163 }else{
2164 cgi_handle_http_request(zIpAddr);
2165 }
2166 process_one_web_page(zNotFound, glob_create(zFileGlob), allowRepoList);
2167 }
2168
2169 /*
2170 ** Process all requests in a single SSH connection if possible.
2171 */
2172 void ssh_request_loop(const char *zIpAddr, Glob *FileGlob){
2173 blob_zero(&g.cgiIn);
2174 do{
2175 cgi_handle_ssh_http_request(zIpAddr);
2176 process_one_web_page(0, FileGlob, 0);
2177 blob_reset(&g.cgiIn);
2178 } while ( g.fSshClient & CGI_SSH_FOSSIL ||
2179 g.fSshClient & CGI_SSH_COMPAT );
2180 }
2181
@@ -2140,21 +2192,21 @@
2192 Th_InitTraceLog();
2193 login_set_capabilities("sx", 0);
2194 g.useLocalauth = 1;
2195 g.httpIn = stdin;
2196 g.httpOut = stdout;
2197 find_server_repository(2);
2198 g.cgiOutput = 1;
2199 g.fullHttpReply = 1;
2200 zIpAddr = cgi_ssh_remote_addr(0);
2201 if( zIpAddr && zIpAddr[0] ){
2202 g.fSshClient |= CGI_SSH_CLIENT;
2203 ssh_request_loop(zIpAddr, 0);
2204 }else{
2205 cgi_set_parameter("REMOTE_ADDR", "127.0.0.1");
2206 cgi_handle_http_request(0);
2207 process_one_web_page(0, 0, 0);
2208 }
2209 }
2210
2211 #if !defined(_WIN32)
2212 #if !defined(__DARWIN__) && !defined(__APPLE__) && !defined(__HAIKU__)
@@ -2211,16 +2263,15 @@
2263 ** "*.fossil*" will be served as static content. With the "ui" command,
2264 ** the REPOSITORY can only be a directory if the --notfound option is
2265 ** also present.
2266 **
2267 ** By default, the "ui" command provides full administrative access without
2268 ** having to log in. This can be disabled by turning off the "localauth"
2269 ** setting. Automatic login for the "server" command is available if the
2270 ** --localauth option is present and the "localauth" setting is off and the
2271 ** connection is from localhost. The "ui" command also enables --repolist
2272 ** by default.
 
2273 **
2274 ** Options:
2275 ** --baseurl URL Use URL as the base (useful for reverse proxies)
2276 ** --files GLOBLIST Comma-separated list of glob patterns for static files
2277 ** --localauth enable automatic login for requests from localhost
@@ -2227,10 +2278,11 @@
2278 ** --localhost listen on 127.0.0.1 only (always true for "ui")
2279 ** --nojail Drop root privileges but do not enter the chroot jail
2280 ** --notfound URL Redirect
2281 ** -P|--port TCPPORT listen to request on port TCPPORT
2282 ** --th-trace trace TH1 execution (for debugging purposes)
2283 ** --repolist If REPOSITORY is dir, URL "/" lists repos.
2284 ** --scgi Accept SCGI rather than HTTP
2285 ** --skin LABEL Use override skin LABEL
2286
2287 **
2288 ** See also: cgi, http, winsrv
@@ -2244,10 +2296,11 @@
2296 const char *zNotFound; /* The --notfound option or NULL */
2297 int flags = 0; /* Server flags */
2298 #if !defined(_WIN32)
2299 int noJail; /* Do not enter the chroot jail */
2300 #endif
2301 int allowRepoList; /* List repositories on URL "/" */
2302 const char *zAltBase; /* Argument to the --baseurl option */
2303 const char *zFileGlob; /* Static content must match this */
2304 char *zIpAddr = 0; /* Bind to this IP address */
2305
2306 #if defined(_WIN32)
@@ -2269,10 +2322,11 @@
2322 #endif
2323 g.useLocalauth = find_option("localauth", 0, 0)!=0;
2324 Th_InitTraceLog();
2325 zPort = find_option("port", "P", 1);
2326 zNotFound = find_option("notfound", 0, 1);
2327 allowRepoList = find_option("repolist",0,0)!=0;
2328 zAltBase = find_option("baseurl", 0, 1);
2329 if( find_option("scgi", 0, 0)!=0 ) flags |= HTTP_SERVER_SCGI;
2330 if( zAltBase ){
2331 set_base_url(zAltBase);
2332 }
@@ -2284,14 +2338,15 @@
2338 verify_all_options();
2339
2340 if( g.argc!=2 && g.argc!=3 ) usage("?REPOSITORY?");
2341 isUiCmd = g.argv[1][0]=='u';
2342 if( isUiCmd ){
2343 flags |= HTTP_SERVER_LOCALHOST|HTTP_SERVER_REPOLIST;
2344 g.useLocalauth = 1;
2345 allowRepoList = 1;
2346 }
2347 find_server_repository(2);
2348 if( zPort ){
2349 int i;
2350 for(i=strlen(zPort)-1; i>=0 && zPort[i]!=':'; i--){}
2351 if( i>0 ){
2352 zIpAddr = mprintf("%.*s", i, zPort);
@@ -2341,20 +2396,21 @@
2396 g.httpOut = stdout;
2397 if( g.fHttpTrace || g.fSqlTrace ){
2398 fprintf(stderr, "====== SERVER pid %d =======\n", getpid());
2399 }
2400 g.cgiOutput = 1;
2401 find_server_repository(2);
2402 g.zRepositoryName = enter_chroot_jail(g.zRepositoryName, noJail);
2403 if( flags & HTTP_SERVER_SCGI ){
2404 cgi_handle_scgi_request();
2405 }else{
2406 cgi_handle_http_request(0);
2407 }
2408 process_one_web_page(zNotFound, glob_create(zFileGlob), allowRepoList);
2409 #else
2410 /* Win32 implementation */
2411 (void)allowRepoList; /* Suppress warning */
2412 if( isUiCmd ){
2413 zBrowser = db_get("web-browser", "start");
2414 if( zIpAddr ){
2415 zBrowserCmd = mprintf("%s http://%s:%%d/ &", zBrowser, zIpAddr);
2416 }else{
2417
+3 -2
--- src/main.mk
+++ src/main.mk
@@ -450,11 +450,12 @@
450450
-DSQLITE_ENABLE_LOCKING_STYLE=0 \
451451
-DSQLITE_THREADSAFE=0 \
452452
-DSQLITE_DEFAULT_FILE_FORMAT=4 \
453453
-DSQLITE_OMIT_DEPRECATED \
454454
-DSQLITE_ENABLE_EXPLAIN_COMMENTS \
455
- -DSQLITE_ENABLE_FTS4
455
+ -DSQLITE_ENABLE_FTS4 \
456
+ -DSQLITE_ENABLE_FTS3_PARENTHESIS
456457
457458
# Setup the options used to compile the included SQLite shell.
458459
SHELL_OPTIONS = -Dmain=sqlite3_shell \
459460
-DSQLITE_OMIT_LOAD_EXTENSION=1 \
460461
-DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) \
@@ -491,11 +492,11 @@
491492
$(OBJDIR)/cson_amalgamation.o
492493
493494
494495
$(APPNAME): $(OBJDIR)/headers $(OBJDIR)/codecheck1 $(OBJ) $(EXTRAOBJ)
495496
$(OBJDIR)/codecheck1 $(TRANS_SRC)
496
- $(TCC) $(CFLAGS) -o $(APPNAME) $(OBJ) $(EXTRAOBJ) $(LIB)
497
+ $(TCC) -o $(APPNAME) $(OBJ) $(EXTRAOBJ) $(LIB)
497498
498499
# This rule prevents make from using its default rules to try build
499500
# an executable named "manifest" out of the file named "manifest.c"
500501
#
501502
$(SRCDIR)/../manifest:
502503
--- src/main.mk
+++ src/main.mk
@@ -450,11 +450,12 @@
450 -DSQLITE_ENABLE_LOCKING_STYLE=0 \
451 -DSQLITE_THREADSAFE=0 \
452 -DSQLITE_DEFAULT_FILE_FORMAT=4 \
453 -DSQLITE_OMIT_DEPRECATED \
454 -DSQLITE_ENABLE_EXPLAIN_COMMENTS \
455 -DSQLITE_ENABLE_FTS4
 
456
457 # Setup the options used to compile the included SQLite shell.
458 SHELL_OPTIONS = -Dmain=sqlite3_shell \
459 -DSQLITE_OMIT_LOAD_EXTENSION=1 \
460 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) \
@@ -491,11 +492,11 @@
491 $(OBJDIR)/cson_amalgamation.o
492
493
494 $(APPNAME): $(OBJDIR)/headers $(OBJDIR)/codecheck1 $(OBJ) $(EXTRAOBJ)
495 $(OBJDIR)/codecheck1 $(TRANS_SRC)
496 $(TCC) $(CFLAGS) -o $(APPNAME) $(OBJ) $(EXTRAOBJ) $(LIB)
497
498 # This rule prevents make from using its default rules to try build
499 # an executable named "manifest" out of the file named "manifest.c"
500 #
501 $(SRCDIR)/../manifest:
502
--- src/main.mk
+++ src/main.mk
@@ -450,11 +450,12 @@
450 -DSQLITE_ENABLE_LOCKING_STYLE=0 \
451 -DSQLITE_THREADSAFE=0 \
452 -DSQLITE_DEFAULT_FILE_FORMAT=4 \
453 -DSQLITE_OMIT_DEPRECATED \
454 -DSQLITE_ENABLE_EXPLAIN_COMMENTS \
455 -DSQLITE_ENABLE_FTS4 \
456 -DSQLITE_ENABLE_FTS3_PARENTHESIS
457
458 # Setup the options used to compile the included SQLite shell.
459 SHELL_OPTIONS = -Dmain=sqlite3_shell \
460 -DSQLITE_OMIT_LOAD_EXTENSION=1 \
461 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) \
@@ -491,11 +492,11 @@
492 $(OBJDIR)/cson_amalgamation.o
493
494
495 $(APPNAME): $(OBJDIR)/headers $(OBJDIR)/codecheck1 $(OBJ) $(EXTRAOBJ)
496 $(OBJDIR)/codecheck1 $(TRANS_SRC)
497 $(TCC) -o $(APPNAME) $(OBJ) $(EXTRAOBJ) $(LIB)
498
499 # This rule prevents make from using its default rules to try build
500 # an executable named "manifest" out of the file named "manifest.c"
501 #
502 $(SRCDIR)/../manifest:
503
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -158,10 +158,11 @@
158158
-DSQLITE_THREADSAFE=0
159159
-DSQLITE_DEFAULT_FILE_FORMAT=4
160160
-DSQLITE_OMIT_DEPRECATED
161161
-DSQLITE_ENABLE_EXPLAIN_COMMENTS
162162
-DSQLITE_ENABLE_FTS4
163
+ -DSQLITE_ENABLE_FTS3_PARENTHESIS
163164
}
164165
#lappend SQLITE_OPTIONS -DSQLITE_ENABLE_FTS3=1
165166
#lappend SQLITE_OPTIONS -DSQLITE_ENABLE_STAT4
166167
#lappend SQLITE_OPTIONS -DSQLITE_WIN32_NO_ANSI
167168
#lappend SQLITE_OPTIONS -DSQLITE_WINNT_MAX_PATH_CHARS=4096
168169
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -158,10 +158,11 @@
158 -DSQLITE_THREADSAFE=0
159 -DSQLITE_DEFAULT_FILE_FORMAT=4
160 -DSQLITE_OMIT_DEPRECATED
161 -DSQLITE_ENABLE_EXPLAIN_COMMENTS
162 -DSQLITE_ENABLE_FTS4
 
163 }
164 #lappend SQLITE_OPTIONS -DSQLITE_ENABLE_FTS3=1
165 #lappend SQLITE_OPTIONS -DSQLITE_ENABLE_STAT4
166 #lappend SQLITE_OPTIONS -DSQLITE_WIN32_NO_ANSI
167 #lappend SQLITE_OPTIONS -DSQLITE_WINNT_MAX_PATH_CHARS=4096
168
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -158,10 +158,11 @@
158 -DSQLITE_THREADSAFE=0
159 -DSQLITE_DEFAULT_FILE_FORMAT=4
160 -DSQLITE_OMIT_DEPRECATED
161 -DSQLITE_ENABLE_EXPLAIN_COMMENTS
162 -DSQLITE_ENABLE_FTS4
163 -DSQLITE_ENABLE_FTS3_PARENTHESIS
164 }
165 #lappend SQLITE_OPTIONS -DSQLITE_ENABLE_FTS3=1
166 #lappend SQLITE_OPTIONS -DSQLITE_ENABLE_STAT4
167 #lappend SQLITE_OPTIONS -DSQLITE_WIN32_NO_ANSI
168 #lappend SQLITE_OPTIONS -DSQLITE_WINNT_MAX_PATH_CHARS=4096
169
--- src/markdown_html.c
+++ src/markdown_html.c
@@ -82,14 +82,18 @@
8282
}
8383
}
8484
8585
8686
/* HTML block tags */
87
+
88
+/* Size of the prolog: "<div class='markdown'>\n" */
89
+#define PROLOG_SIZE 23
8790
8891
static void html_prolog(struct Blob *ob, void *opaque){
8992
INTER_BLOCK(ob);
9093
BLOB_APPEND_LITTERAL(ob, "<div class=\"markdown\">\n");
94
+ assert( blob_size(ob)==PROLOG_SIZE );
9195
}
9296
9397
static void html_epilog(struct Blob *ob, void *opaque){
9498
INTER_BLOCK(ob);
9599
BLOB_APPEND_LITTERAL(ob, "</div>\n");
@@ -126,13 +130,12 @@
126130
void *opaque
127131
){
128132
struct Blob *title = opaque;
129133
/* The first header at the beginning of a text is considered as
130134
* a title and not output. */
131
- if( blob_size(ob)==0 && blob_size(title)==0 ){
135
+ if( blob_size(ob)<=PROLOG_SIZE && blob_size(title)==0 ){
132136
BLOB_APPEND_BLOB(title, text);
133
- return;
134137
}
135138
INTER_BLOCK(ob);
136139
blob_appendf(ob, "<h%d>", level);
137140
BLOB_APPEND_BLOB(ob, text);
138141
blob_appendf(ob, "</h%d>", level);
139142
--- src/markdown_html.c
+++ src/markdown_html.c
@@ -82,14 +82,18 @@
82 }
83 }
84
85
86 /* HTML block tags */
 
 
 
87
88 static void html_prolog(struct Blob *ob, void *opaque){
89 INTER_BLOCK(ob);
90 BLOB_APPEND_LITTERAL(ob, "<div class=\"markdown\">\n");
 
91 }
92
93 static void html_epilog(struct Blob *ob, void *opaque){
94 INTER_BLOCK(ob);
95 BLOB_APPEND_LITTERAL(ob, "</div>\n");
@@ -126,13 +130,12 @@
126 void *opaque
127 ){
128 struct Blob *title = opaque;
129 /* The first header at the beginning of a text is considered as
130 * a title and not output. */
131 if( blob_size(ob)==0 && blob_size(title)==0 ){
132 BLOB_APPEND_BLOB(title, text);
133 return;
134 }
135 INTER_BLOCK(ob);
136 blob_appendf(ob, "<h%d>", level);
137 BLOB_APPEND_BLOB(ob, text);
138 blob_appendf(ob, "</h%d>", level);
139
--- src/markdown_html.c
+++ src/markdown_html.c
@@ -82,14 +82,18 @@
82 }
83 }
84
85
86 /* HTML block tags */
87
88 /* Size of the prolog: "<div class='markdown'>\n" */
89 #define PROLOG_SIZE 23
90
91 static void html_prolog(struct Blob *ob, void *opaque){
92 INTER_BLOCK(ob);
93 BLOB_APPEND_LITTERAL(ob, "<div class=\"markdown\">\n");
94 assert( blob_size(ob)==PROLOG_SIZE );
95 }
96
97 static void html_epilog(struct Blob *ob, void *opaque){
98 INTER_BLOCK(ob);
99 BLOB_APPEND_LITTERAL(ob, "</div>\n");
@@ -126,13 +130,12 @@
130 void *opaque
131 ){
132 struct Blob *title = opaque;
133 /* The first header at the beginning of a text is considered as
134 * a title and not output. */
135 if( blob_size(ob)<=PROLOG_SIZE && blob_size(title)==0 ){
136 BLOB_APPEND_BLOB(title, text);
 
137 }
138 INTER_BLOCK(ob);
139 blob_appendf(ob, "<h%d>", level);
140 BLOB_APPEND_BLOB(ob, text);
141 blob_appendf(ob, "</h%d>", level);
142
+23 -3
--- src/skins.c
+++ src/skins.c
@@ -60,28 +60,38 @@
6060
**
6161
** The following static variable holds the name of the alternative skin,
6262
** or NULL if the skin should be as configured.
6363
*/
6464
static struct BuiltinSkin *pAltSkin = 0;
65
+static char *zAltSkinDir = 0;
6566
6667
/*
6768
** Invoke this routine to set the alternative skin. Return NULL if the
6869
** alternative was successfully installed. Return a string listing all
6970
** available skins if zName does not match an available skin. Memory
7071
** for the returned string comes from fossil_malloc() and should be freed
7172
** by the caller.
73
+**
74
+** If the alternative skin name contains one or more '/' characters, then
75
+** it is assumed to be a directory on disk that holds override css.txt,
76
+** footer.txt, and header.txt. This mode can be used for interactive
77
+** development of new skins.
7278
*/
7379
char *skin_use_alternative(const char *zName){
7480
int i;
75
- Blob err;
81
+ Blob err = BLOB_INITIALIZER;
82
+ if( strchr(zName, '/')!=0 ){
83
+ zAltSkinDir = fossil_strdup(zName);
84
+ return 0;
85
+ }
7686
for(i=0; i<ArraySize(aBuiltinSkin); i++){
7787
if( fossil_strcmp(aBuiltinSkin[i].zLabel, zName)==0 ){
7888
pAltSkin = &aBuiltinSkin[i];
7989
return 0;
8090
}
8191
}
82
- blob_init(&err, aBuiltinSkin[0].zLabel, -1);
92
+ blob_appendf(&err, "available skins: %s", aBuiltinSkin[0].zLabel);
8393
for(i=1; i<ArraySize(aBuiltinSkin); i++){
8494
blob_append(&err, " ", 1);
8595
blob_append(&err, aBuiltinSkin[i].zLabel, -1);
8696
}
8797
return blob_str(&err);
@@ -93,11 +103,11 @@
93103
*/
94104
void skin_override(void){
95105
const char *zSkin = find_option("skin",0,1);
96106
if( zSkin ){
97107
char *zErr = skin_use_alternative(zSkin);
98
- if( zErr ) fossil_fatal("available skins: %s", zErr);
108
+ if( zErr ) fossil_fatal("%s", zErr);
99109
}
100110
}
101111
102112
/*
103113
** The following routines return the various components of the skin
@@ -104,10 +114,20 @@
104114
** that should be used for the current run.
105115
*/
106116
const char *skin_get(const char *zWhat){
107117
const char *zOut;
108118
char *z;
119
+ if( zAltSkinDir ){
120
+ char *z = mprintf("%s/%s.txt", zAltSkinDir, zWhat);
121
+ if( file_isfile(z) ){
122
+ Blob x;
123
+ blob_read_from_file(&x, z);
124
+ fossil_free(z);
125
+ return blob_str(&x);
126
+ }
127
+ fossil_free(z);
128
+ }
109129
if( pAltSkin ){
110130
z = mprintf("skins/%s/%s.txt", pAltSkin->zLabel, zWhat);
111131
zOut = builtin_text(z);
112132
fossil_free(z);
113133
}else{
114134
--- src/skins.c
+++ src/skins.c
@@ -60,28 +60,38 @@
60 **
61 ** The following static variable holds the name of the alternative skin,
62 ** or NULL if the skin should be as configured.
63 */
64 static struct BuiltinSkin *pAltSkin = 0;
 
65
66 /*
67 ** Invoke this routine to set the alternative skin. Return NULL if the
68 ** alternative was successfully installed. Return a string listing all
69 ** available skins if zName does not match an available skin. Memory
70 ** for the returned string comes from fossil_malloc() and should be freed
71 ** by the caller.
 
 
 
 
 
72 */
73 char *skin_use_alternative(const char *zName){
74 int i;
75 Blob err;
 
 
 
 
76 for(i=0; i<ArraySize(aBuiltinSkin); i++){
77 if( fossil_strcmp(aBuiltinSkin[i].zLabel, zName)==0 ){
78 pAltSkin = &aBuiltinSkin[i];
79 return 0;
80 }
81 }
82 blob_init(&err, aBuiltinSkin[0].zLabel, -1);
83 for(i=1; i<ArraySize(aBuiltinSkin); i++){
84 blob_append(&err, " ", 1);
85 blob_append(&err, aBuiltinSkin[i].zLabel, -1);
86 }
87 return blob_str(&err);
@@ -93,11 +103,11 @@
93 */
94 void skin_override(void){
95 const char *zSkin = find_option("skin",0,1);
96 if( zSkin ){
97 char *zErr = skin_use_alternative(zSkin);
98 if( zErr ) fossil_fatal("available skins: %s", zErr);
99 }
100 }
101
102 /*
103 ** The following routines return the various components of the skin
@@ -104,10 +114,20 @@
104 ** that should be used for the current run.
105 */
106 const char *skin_get(const char *zWhat){
107 const char *zOut;
108 char *z;
 
 
 
 
 
 
 
 
 
 
109 if( pAltSkin ){
110 z = mprintf("skins/%s/%s.txt", pAltSkin->zLabel, zWhat);
111 zOut = builtin_text(z);
112 fossil_free(z);
113 }else{
114
--- src/skins.c
+++ src/skins.c
@@ -60,28 +60,38 @@
60 **
61 ** The following static variable holds the name of the alternative skin,
62 ** or NULL if the skin should be as configured.
63 */
64 static struct BuiltinSkin *pAltSkin = 0;
65 static char *zAltSkinDir = 0;
66
67 /*
68 ** Invoke this routine to set the alternative skin. Return NULL if the
69 ** alternative was successfully installed. Return a string listing all
70 ** available skins if zName does not match an available skin. Memory
71 ** for the returned string comes from fossil_malloc() and should be freed
72 ** by the caller.
73 **
74 ** If the alternative skin name contains one or more '/' characters, then
75 ** it is assumed to be a directory on disk that holds override css.txt,
76 ** footer.txt, and header.txt. This mode can be used for interactive
77 ** development of new skins.
78 */
79 char *skin_use_alternative(const char *zName){
80 int i;
81 Blob err = BLOB_INITIALIZER;
82 if( strchr(zName, '/')!=0 ){
83 zAltSkinDir = fossil_strdup(zName);
84 return 0;
85 }
86 for(i=0; i<ArraySize(aBuiltinSkin); i++){
87 if( fossil_strcmp(aBuiltinSkin[i].zLabel, zName)==0 ){
88 pAltSkin = &aBuiltinSkin[i];
89 return 0;
90 }
91 }
92 blob_appendf(&err, "available skins: %s", aBuiltinSkin[0].zLabel);
93 for(i=1; i<ArraySize(aBuiltinSkin); i++){
94 blob_append(&err, " ", 1);
95 blob_append(&err, aBuiltinSkin[i].zLabel, -1);
96 }
97 return blob_str(&err);
@@ -93,11 +103,11 @@
103 */
104 void skin_override(void){
105 const char *zSkin = find_option("skin",0,1);
106 if( zSkin ){
107 char *zErr = skin_use_alternative(zSkin);
108 if( zErr ) fossil_fatal("%s", zErr);
109 }
110 }
111
112 /*
113 ** The following routines return the various components of the skin
@@ -104,10 +114,20 @@
114 ** that should be used for the current run.
115 */
116 const char *skin_get(const char *zWhat){
117 const char *zOut;
118 char *z;
119 if( zAltSkinDir ){
120 char *z = mprintf("%s/%s.txt", zAltSkinDir, zWhat);
121 if( file_isfile(z) ){
122 Blob x;
123 blob_read_from_file(&x, z);
124 fossil_free(z);
125 return blob_str(&x);
126 }
127 fossil_free(z);
128 }
129 if( pAltSkin ){
130 z = mprintf("skins/%s/%s.txt", pAltSkin->zLabel, zWhat);
131 zOut = builtin_text(z);
132 fossil_free(z);
133 }else{
134
--- src/style.c
+++ src/style.c
@@ -1264,11 +1264,10 @@
12641264
@ padding-left: 1em;
12651265
@ padding-right: 1em;
12661266
},
12671267
{ ".fileage td:nth-child(3)",
12681268
"fileage third column (the check-in comment)",
1269
- @ word-break: break-all;
12701269
@ word-wrap: break-word;
12711270
@ max-width: 50%;
12721271
},
12731272
{ ".brlist table", "The list of branches",
12741273
@ border-spacing: 0;
12751274
--- src/style.c
+++ src/style.c
@@ -1264,11 +1264,10 @@
1264 @ padding-left: 1em;
1265 @ padding-right: 1em;
1266 },
1267 { ".fileage td:nth-child(3)",
1268 "fileage third column (the check-in comment)",
1269 @ word-break: break-all;
1270 @ word-wrap: break-word;
1271 @ max-width: 50%;
1272 },
1273 { ".brlist table", "The list of branches",
1274 @ border-spacing: 0;
1275
--- src/style.c
+++ src/style.c
@@ -1264,11 +1264,10 @@
1264 @ padding-left: 1em;
1265 @ padding-right: 1em;
1266 },
1267 { ".fileage td:nth-child(3)",
1268 "fileage third column (the check-in comment)",
 
1269 @ word-wrap: break-word;
1270 @ max-width: 50%;
1271 },
1272 { ".brlist table", "The list of branches",
1273 @ border-spacing: 0;
1274
+1 -1
--- src/timeline.c
+++ src/timeline.c
@@ -1802,11 +1802,11 @@
18021802
** before
18031803
** after
18041804
** descendants | children
18051805
** ancestors | parents
18061806
**
1807
-** The BASELINE can be any unique prefix of 4 characters or more.
1807
+** The CHECKIN can be any unique prefix of 4 characters or more.
18081808
** The DATETIME should be in the ISO8601 format. For
18091809
** examples: "2007-08-18 07:21:21". You can also say "current"
18101810
** for the current version or "now" for the current time.
18111811
**
18121812
** Options:
18131813
--- src/timeline.c
+++ src/timeline.c
@@ -1802,11 +1802,11 @@
1802 ** before
1803 ** after
1804 ** descendants | children
1805 ** ancestors | parents
1806 **
1807 ** The BASELINE can be any unique prefix of 4 characters or more.
1808 ** The DATETIME should be in the ISO8601 format. For
1809 ** examples: "2007-08-18 07:21:21". You can also say "current"
1810 ** for the current version or "now" for the current time.
1811 **
1812 ** Options:
1813
--- src/timeline.c
+++ src/timeline.c
@@ -1802,11 +1802,11 @@
1802 ** before
1803 ** after
1804 ** descendants | children
1805 ** ancestors | parents
1806 **
1807 ** The CHECKIN can be any unique prefix of 4 characters or more.
1808 ** The DATETIME should be in the ISO8601 format. For
1809 ** examples: "2007-08-18 07:21:21". You can also say "current"
1810 ** for the current version or "now" for the current time.
1811 **
1812 ** Options:
1813
+2
--- src/wiki.c
+++ src/wiki.c
@@ -147,13 +147,15 @@
147147
wiki_convert(pWiki, 0, 0);
148148
}else if( fossil_strcmp(zMimetype, "text/x-markdown")==0 ){
149149
Blob title = BLOB_INITIALIZER;
150150
Blob tail = BLOB_INITIALIZER;
151151
markdown_to_html(pWiki, &title, &tail);
152
+#if 0
152153
if( blob_size(&title)>0 ){
153154
@ <h1>%s(blob_str(&title))</h1>
154155
}
156
+#endif
155157
@ %s(blob_str(&tail))
156158
blob_reset(&title);
157159
blob_reset(&tail);
158160
}else{
159161
@ <pre>
160162
--- src/wiki.c
+++ src/wiki.c
@@ -147,13 +147,15 @@
147 wiki_convert(pWiki, 0, 0);
148 }else if( fossil_strcmp(zMimetype, "text/x-markdown")==0 ){
149 Blob title = BLOB_INITIALIZER;
150 Blob tail = BLOB_INITIALIZER;
151 markdown_to_html(pWiki, &title, &tail);
 
152 if( blob_size(&title)>0 ){
153 @ <h1>%s(blob_str(&title))</h1>
154 }
 
155 @ %s(blob_str(&tail))
156 blob_reset(&title);
157 blob_reset(&tail);
158 }else{
159 @ <pre>
160
--- src/wiki.c
+++ src/wiki.c
@@ -147,13 +147,15 @@
147 wiki_convert(pWiki, 0, 0);
148 }else if( fossil_strcmp(zMimetype, "text/x-markdown")==0 ){
149 Blob title = BLOB_INITIALIZER;
150 Blob tail = BLOB_INITIALIZER;
151 markdown_to_html(pWiki, &title, &tail);
152 #if 0
153 if( blob_size(&title)>0 ){
154 @ <h1>%s(blob_str(&title))</h1>
155 }
156 #endif
157 @ %s(blob_str(&tail))
158 blob_reset(&title);
159 blob_reset(&tail);
160 }else{
161 @ <pre>
162
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -762,11 +762,11 @@
762762
** Parse this element into the p structure.
763763
**
764764
** The content of z[] might be modified by converting characters
765765
** to lowercase and by inserting some "\000" characters.
766766
*/
767
-static void parseMarkup(ParsedMarkup *p, char *z){
767
+static int parseMarkup(ParsedMarkup *p, char *z){
768768
int i, j, c;
769769
int iACode;
770770
char *zValue;
771771
int seen = 0;
772772
char zTag[100];
@@ -794,11 +794,11 @@
794794
p->aAttr[0].zValue = &z[i];
795795
while( fossil_isalnum(z[i]) ){ i++; }
796796
p->aAttr[0].cTerm = c = z[i];
797797
z[i++] = 0;
798798
p->nAttr = 1;
799
- if( c=='>' ) return;
799
+ if( c=='>' ) return 0;
800800
}
801801
while( fossil_isspace(z[i]) ){ i++; }
802802
while( c!='>' && p->nAttr<8 && fossil_isalpha(z[i]) ){
803803
int attrOk; /* True to preserve attribute. False to ignore it */
804804
j = 0;
@@ -841,10 +841,11 @@
841841
p->nAttr++;
842842
}
843843
while( fossil_isspace(z[i]) ){ i++; }
844844
if( z[i]=='>' || (z[i]=='/' && z[i+1]=='>') ) break;
845845
}
846
+ return seen;
846847
}
847848
848849
/*
849850
** Render markup on the given blob.
850851
*/
@@ -960,11 +961,11 @@
960961
static void popStack(Renderer *p){
961962
if( p->nStack ){
962963
int iCode;
963964
p->nStack--;
964965
iCode = p->aStack[p->nStack].iCode;
965
- if( iCode!=MARKUP_DIV && p->pOut ){
966
+ if( (iCode!=MARKUP_DIV || p->aStack[p->nStack].zId==0) && p->pOut ){
966967
blob_appendf(p->pOut, "</%s>", aMarkup[iCode].zName);
967968
}
968969
}
969970
}
970971
@@ -1480,11 +1481,11 @@
14801481
break;
14811482
}
14821483
case TOKEN_MARKUP: {
14831484
const char *zId;
14841485
int iDiv;
1485
- parseMarkup(&markup, z);
1486
+ int mAttr = parseMarkup(&markup, z);
14861487
14871488
/* Convert <title> to <h1 align='center'> */
14881489
if( markup.iCode==MARKUP_TITLE && !p->inVerbatim ){
14891490
markup.iCode = MARKUP_H1;
14901491
markup.nAttr = 1;
@@ -1567,11 +1568,11 @@
15671568
popStackToTag(p, markup.iCode);
15681569
}else
15691570
15701571
/* Push <div> markup onto the stack together with the id=ID attribute.
15711572
*/
1572
- if( markup.iCode==MARKUP_DIV ){
1573
+ if( markup.iCode==MARKUP_DIV && (mAttr & ATTR_ID)!=0 ){
15731574
pushStackWithId(p, markup.iCode, markupId(&markup),
15741575
(p->state & ALLOW_WIKI)!=0);
15751576
}else
15761577
15771578
/* Enter <verbatim> processing. With verbatim enabled, all other
15781579
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -762,11 +762,11 @@
762 ** Parse this element into the p structure.
763 **
764 ** The content of z[] might be modified by converting characters
765 ** to lowercase and by inserting some "\000" characters.
766 */
767 static void parseMarkup(ParsedMarkup *p, char *z){
768 int i, j, c;
769 int iACode;
770 char *zValue;
771 int seen = 0;
772 char zTag[100];
@@ -794,11 +794,11 @@
794 p->aAttr[0].zValue = &z[i];
795 while( fossil_isalnum(z[i]) ){ i++; }
796 p->aAttr[0].cTerm = c = z[i];
797 z[i++] = 0;
798 p->nAttr = 1;
799 if( c=='>' ) return;
800 }
801 while( fossil_isspace(z[i]) ){ i++; }
802 while( c!='>' && p->nAttr<8 && fossil_isalpha(z[i]) ){
803 int attrOk; /* True to preserve attribute. False to ignore it */
804 j = 0;
@@ -841,10 +841,11 @@
841 p->nAttr++;
842 }
843 while( fossil_isspace(z[i]) ){ i++; }
844 if( z[i]=='>' || (z[i]=='/' && z[i+1]=='>') ) break;
845 }
 
846 }
847
848 /*
849 ** Render markup on the given blob.
850 */
@@ -960,11 +961,11 @@
960 static void popStack(Renderer *p){
961 if( p->nStack ){
962 int iCode;
963 p->nStack--;
964 iCode = p->aStack[p->nStack].iCode;
965 if( iCode!=MARKUP_DIV && p->pOut ){
966 blob_appendf(p->pOut, "</%s>", aMarkup[iCode].zName);
967 }
968 }
969 }
970
@@ -1480,11 +1481,11 @@
1480 break;
1481 }
1482 case TOKEN_MARKUP: {
1483 const char *zId;
1484 int iDiv;
1485 parseMarkup(&markup, z);
1486
1487 /* Convert <title> to <h1 align='center'> */
1488 if( markup.iCode==MARKUP_TITLE && !p->inVerbatim ){
1489 markup.iCode = MARKUP_H1;
1490 markup.nAttr = 1;
@@ -1567,11 +1568,11 @@
1567 popStackToTag(p, markup.iCode);
1568 }else
1569
1570 /* Push <div> markup onto the stack together with the id=ID attribute.
1571 */
1572 if( markup.iCode==MARKUP_DIV ){
1573 pushStackWithId(p, markup.iCode, markupId(&markup),
1574 (p->state & ALLOW_WIKI)!=0);
1575 }else
1576
1577 /* Enter <verbatim> processing. With verbatim enabled, all other
1578
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -762,11 +762,11 @@
762 ** Parse this element into the p structure.
763 **
764 ** The content of z[] might be modified by converting characters
765 ** to lowercase and by inserting some "\000" characters.
766 */
767 static int parseMarkup(ParsedMarkup *p, char *z){
768 int i, j, c;
769 int iACode;
770 char *zValue;
771 int seen = 0;
772 char zTag[100];
@@ -794,11 +794,11 @@
794 p->aAttr[0].zValue = &z[i];
795 while( fossil_isalnum(z[i]) ){ i++; }
796 p->aAttr[0].cTerm = c = z[i];
797 z[i++] = 0;
798 p->nAttr = 1;
799 if( c=='>' ) return 0;
800 }
801 while( fossil_isspace(z[i]) ){ i++; }
802 while( c!='>' && p->nAttr<8 && fossil_isalpha(z[i]) ){
803 int attrOk; /* True to preserve attribute. False to ignore it */
804 j = 0;
@@ -841,10 +841,11 @@
841 p->nAttr++;
842 }
843 while( fossil_isspace(z[i]) ){ i++; }
844 if( z[i]=='>' || (z[i]=='/' && z[i+1]=='>') ) break;
845 }
846 return seen;
847 }
848
849 /*
850 ** Render markup on the given blob.
851 */
@@ -960,11 +961,11 @@
961 static void popStack(Renderer *p){
962 if( p->nStack ){
963 int iCode;
964 p->nStack--;
965 iCode = p->aStack[p->nStack].iCode;
966 if( (iCode!=MARKUP_DIV || p->aStack[p->nStack].zId==0) && p->pOut ){
967 blob_appendf(p->pOut, "</%s>", aMarkup[iCode].zName);
968 }
969 }
970 }
971
@@ -1480,11 +1481,11 @@
1481 break;
1482 }
1483 case TOKEN_MARKUP: {
1484 const char *zId;
1485 int iDiv;
1486 int mAttr = parseMarkup(&markup, z);
1487
1488 /* Convert <title> to <h1 align='center'> */
1489 if( markup.iCode==MARKUP_TITLE && !p->inVerbatim ){
1490 markup.iCode = MARKUP_H1;
1491 markup.nAttr = 1;
@@ -1567,11 +1568,11 @@
1568 popStackToTag(p, markup.iCode);
1569 }else
1570
1571 /* Push <div> markup onto the stack together with the id=ID attribute.
1572 */
1573 if( markup.iCode==MARKUP_DIV && (mAttr & ATTR_ID)!=0 ){
1574 pushStackWithId(p, markup.iCode, markupId(&markup),
1575 (p->state & ALLOW_WIKI)!=0);
1576 }else
1577
1578 /* Enter <verbatim> processing. With verbatim enabled, all other
1579
--- src/winhttp.c
+++ src/winhttp.c
@@ -260,10 +260,13 @@
260260
blob_appendf(&options, " --files-urlenc %T", zFileGlob);
261261
}
262262
if( g.useLocalauth ){
263263
blob_appendf(&options, " --localauth");
264264
}
265
+ if( flags & HTTP_SERVER_REPOLIST ){
266
+ blob_appendf(&options, " --repolist");
267
+ }
265268
if( WSAStartup(MAKEWORD(1,1), &wd) ){
266269
fossil_fatal("unable to initialize winsock");
267270
}
268271
while( iPort<=mxPort ){
269272
s = socket(AF_INET, SOCK_STREAM, 0);
270273
--- src/winhttp.c
+++ src/winhttp.c
@@ -260,10 +260,13 @@
260 blob_appendf(&options, " --files-urlenc %T", zFileGlob);
261 }
262 if( g.useLocalauth ){
263 blob_appendf(&options, " --localauth");
264 }
 
 
 
265 if( WSAStartup(MAKEWORD(1,1), &wd) ){
266 fossil_fatal("unable to initialize winsock");
267 }
268 while( iPort<=mxPort ){
269 s = socket(AF_INET, SOCK_STREAM, 0);
270
--- src/winhttp.c
+++ src/winhttp.c
@@ -260,10 +260,13 @@
260 blob_appendf(&options, " --files-urlenc %T", zFileGlob);
261 }
262 if( g.useLocalauth ){
263 blob_appendf(&options, " --localauth");
264 }
265 if( flags & HTTP_SERVER_REPOLIST ){
266 blob_appendf(&options, " --repolist");
267 }
268 if( WSAStartup(MAKEWORD(1,1), &wd) ){
269 fossil_fatal("unable to initialize winsock");
270 }
271 while( iPort<=mxPort ){
272 s = socket(AF_INET, SOCK_STREAM, 0);
273
--- win/Makefile.PellesCGMake
+++ win/Makefile.PellesCGMake
@@ -83,11 +83,11 @@
8383
8484
# define the SQLite files, which need special flags on compile
8585
SQLITESRC=sqlite3.c
8686
ORIGSQLITESRC=$(foreach sf,$(SQLITESRC),$(SRCDIR)$(sf))
8787
SQLITEOBJ=$(foreach sf,$(SQLITESRC),$(sf:.c=.obj))
88
-SQLITEDEFINES=-DNDEBUG=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_OMIT_DEPRECATED -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_WIN32_NO_ANSI
88
+SQLITEDEFINES=-DNDEBUG=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_OMIT_DEPRECATED -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_WIN32_NO_ANSI
8989
9090
# define the SQLite shell files, which need special flags on compile
9191
SQLITESHELLSRC=shell.c
9292
ORIGSQLITESHELLSRC=$(foreach sf,$(SQLITESHELLSRC),$(SRCDIR)$(sf))
9393
SQLITESHELLOBJ=$(foreach sf,$(SQLITESHELLSRC),$(sf:.c=.obj))
9494
--- win/Makefile.PellesCGMake
+++ win/Makefile.PellesCGMake
@@ -83,11 +83,11 @@
83
84 # define the SQLite files, which need special flags on compile
85 SQLITESRC=sqlite3.c
86 ORIGSQLITESRC=$(foreach sf,$(SQLITESRC),$(SRCDIR)$(sf))
87 SQLITEOBJ=$(foreach sf,$(SQLITESRC),$(sf:.c=.obj))
88 SQLITEDEFINES=-DNDEBUG=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_OMIT_DEPRECATED -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_WIN32_NO_ANSI
89
90 # define the SQLite shell files, which need special flags on compile
91 SQLITESHELLSRC=shell.c
92 ORIGSQLITESHELLSRC=$(foreach sf,$(SQLITESHELLSRC),$(SRCDIR)$(sf))
93 SQLITESHELLOBJ=$(foreach sf,$(SQLITESHELLSRC),$(sf:.c=.obj))
94
--- win/Makefile.PellesCGMake
+++ win/Makefile.PellesCGMake
@@ -83,11 +83,11 @@
83
84 # define the SQLite files, which need special flags on compile
85 SQLITESRC=sqlite3.c
86 ORIGSQLITESRC=$(foreach sf,$(SQLITESRC),$(SRCDIR)$(sf))
87 SQLITEOBJ=$(foreach sf,$(SQLITESRC),$(sf:.c=.obj))
88 SQLITEDEFINES=-DNDEBUG=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_OMIT_DEPRECATED -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_WIN32_NO_ANSI
89
90 # define the SQLite shell files, which need special flags on compile
91 SQLITESHELLSRC=shell.c
92 ORIGSQLITESHELLSRC=$(foreach sf,$(SQLITESHELLSRC),$(SRCDIR)$(sf))
93 SQLITESHELLOBJ=$(foreach sf,$(SQLITESHELLSRC),$(sf:.c=.obj))
94
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -24,11 +24,11 @@
2424
CFLAGS = -o
2525
BCC = $(DMDIR)\bin\dmc $(CFLAGS)
2626
TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL)
2727
LIBS = $(DMDIR)\extra\lib\ zlib wsock32 advapi32
2828
29
-SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_OMIT_DEPRECATED -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4
29
+SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_OMIT_DEPRECATED -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS
3030
3131
SHELL_OPTIONS = -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=fossil_open -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
3232
3333
SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c foci_.c fusefs_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c sitemap_.c skins_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
3434
3535
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -24,11 +24,11 @@
24 CFLAGS = -o
25 BCC = $(DMDIR)\bin\dmc $(CFLAGS)
26 TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL)
27 LIBS = $(DMDIR)\extra\lib\ zlib wsock32 advapi32
28
29 SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_OMIT_DEPRECATED -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4
30
31 SHELL_OPTIONS = -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=fossil_open -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
32
33 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c foci_.c fusefs_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c sitemap_.c skins_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
34
35
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -24,11 +24,11 @@
24 CFLAGS = -o
25 BCC = $(DMDIR)\bin\dmc $(CFLAGS)
26 TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL)
27 LIBS = $(DMDIR)\extra\lib\ zlib wsock32 advapi32
28
29 SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_OMIT_DEPRECATED -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS
30
31 SHELL_OPTIONS = -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=fossil_open -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
32
33 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c foci_.c fusefs_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c sitemap_.c skins_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
34
35
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -2025,10 +2025,11 @@
20252025
-DSQLITE_THREADSAFE=0 \
20262026
-DSQLITE_DEFAULT_FILE_FORMAT=4 \
20272027
-DSQLITE_OMIT_DEPRECATED \
20282028
-DSQLITE_ENABLE_EXPLAIN_COMMENTS \
20292029
-DSQLITE_ENABLE_FTS4 \
2030
+ -DSQLITE_ENABLE_FTS3_PARENTHESIS \
20302031
-DSQLITE_WIN32_NO_ANSI \
20312032
-D_HAVE__MINGW_H \
20322033
-DSQLITE_USE_MALLOC_H \
20332034
-DSQLITE_USE_MSIZE
20342035
20352036
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -2025,10 +2025,11 @@
2025 -DSQLITE_THREADSAFE=0 \
2026 -DSQLITE_DEFAULT_FILE_FORMAT=4 \
2027 -DSQLITE_OMIT_DEPRECATED \
2028 -DSQLITE_ENABLE_EXPLAIN_COMMENTS \
2029 -DSQLITE_ENABLE_FTS4 \
 
2030 -DSQLITE_WIN32_NO_ANSI \
2031 -D_HAVE__MINGW_H \
2032 -DSQLITE_USE_MALLOC_H \
2033 -DSQLITE_USE_MSIZE
2034
2035
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -2025,10 +2025,11 @@
2025 -DSQLITE_THREADSAFE=0 \
2026 -DSQLITE_DEFAULT_FILE_FORMAT=4 \
2027 -DSQLITE_OMIT_DEPRECATED \
2028 -DSQLITE_ENABLE_EXPLAIN_COMMENTS \
2029 -DSQLITE_ENABLE_FTS4 \
2030 -DSQLITE_ENABLE_FTS3_PARENTHESIS \
2031 -DSQLITE_WIN32_NO_ANSI \
2032 -D_HAVE__MINGW_H \
2033 -DSQLITE_USE_MALLOC_H \
2034 -DSQLITE_USE_MSIZE
2035
2036
--- win/Makefile.mingw.mistachkin
+++ win/Makefile.mingw.mistachkin
@@ -2024,10 +2024,12 @@
20242024
-DSQLITE_ENABLE_LOCKING_STYLE=0 \
20252025
-DSQLITE_THREADSAFE=0 \
20262026
-DSQLITE_DEFAULT_FILE_FORMAT=4 \
20272027
-DSQLITE_OMIT_DEPRECATED \
20282028
-DSQLITE_ENABLE_EXPLAIN_COMMENTS \
2029
+ -DSQLITE_ENABLE_FTS4 \
2030
+ -DSQLITE_ENABLE_FTS3_PARENTHESIS \
20292031
-DSQLITE_WIN32_NO_ANSI \
20302032
-D_HAVE__MINGW_H \
20312033
-DSQLITE_USE_MALLOC_H \
20322034
-DSQLITE_USE_MSIZE
20332035
20342036
--- win/Makefile.mingw.mistachkin
+++ win/Makefile.mingw.mistachkin
@@ -2024,10 +2024,12 @@
2024 -DSQLITE_ENABLE_LOCKING_STYLE=0 \
2025 -DSQLITE_THREADSAFE=0 \
2026 -DSQLITE_DEFAULT_FILE_FORMAT=4 \
2027 -DSQLITE_OMIT_DEPRECATED \
2028 -DSQLITE_ENABLE_EXPLAIN_COMMENTS \
 
 
2029 -DSQLITE_WIN32_NO_ANSI \
2030 -D_HAVE__MINGW_H \
2031 -DSQLITE_USE_MALLOC_H \
2032 -DSQLITE_USE_MSIZE
2033
2034
--- win/Makefile.mingw.mistachkin
+++ win/Makefile.mingw.mistachkin
@@ -2024,10 +2024,12 @@
2024 -DSQLITE_ENABLE_LOCKING_STYLE=0 \
2025 -DSQLITE_THREADSAFE=0 \
2026 -DSQLITE_DEFAULT_FILE_FORMAT=4 \
2027 -DSQLITE_OMIT_DEPRECATED \
2028 -DSQLITE_ENABLE_EXPLAIN_COMMENTS \
2029 -DSQLITE_ENABLE_FTS4 \
2030 -DSQLITE_ENABLE_FTS3_PARENTHESIS \
2031 -DSQLITE_WIN32_NO_ANSI \
2032 -D_HAVE__MINGW_H \
2033 -DSQLITE_USE_MALLOC_H \
2034 -DSQLITE_USE_MSIZE
2035
2036
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -190,10 +190,11 @@
190190
/DSQLITE_THREADSAFE=0 \
191191
/DSQLITE_DEFAULT_FILE_FORMAT=4 \
192192
/DSQLITE_OMIT_DEPRECATED \
193193
/DSQLITE_ENABLE_EXPLAIN_COMMENTS \
194194
/DSQLITE_ENABLE_FTS4 \
195
+ /DSQLITE_ENABLE_FTS3_PARENTHESIS \
195196
/DSQLITE_WIN32_NO_ANSI
196197
197198
SHELL_OPTIONS = /Dmain=sqlite3_shell \
198199
/DSQLITE_OMIT_LOAD_EXTENSION=1 \
199200
/DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) \
200201
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -190,10 +190,11 @@
190 /DSQLITE_THREADSAFE=0 \
191 /DSQLITE_DEFAULT_FILE_FORMAT=4 \
192 /DSQLITE_OMIT_DEPRECATED \
193 /DSQLITE_ENABLE_EXPLAIN_COMMENTS \
194 /DSQLITE_ENABLE_FTS4 \
 
195 /DSQLITE_WIN32_NO_ANSI
196
197 SHELL_OPTIONS = /Dmain=sqlite3_shell \
198 /DSQLITE_OMIT_LOAD_EXTENSION=1 \
199 /DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) \
200
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -190,10 +190,11 @@
190 /DSQLITE_THREADSAFE=0 \
191 /DSQLITE_DEFAULT_FILE_FORMAT=4 \
192 /DSQLITE_OMIT_DEPRECATED \
193 /DSQLITE_ENABLE_EXPLAIN_COMMENTS \
194 /DSQLITE_ENABLE_FTS4 \
195 /DSQLITE_ENABLE_FTS3_PARENTHESIS \
196 /DSQLITE_WIN32_NO_ANSI
197
198 SHELL_OPTIONS = /Dmain=sqlite3_shell \
199 /DSQLITE_OMIT_LOAD_EXTENSION=1 \
200 /DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) \
201
--- www/branching.wiki
+++ www/branching.wiki
@@ -180,11 +180,11 @@
180180
181181
A tag can be a one-time tag, a propagating tag or a cancellation tag.
182182
A one-time tag only applies to the check-in to which it is attached. A
183183
propagating tag applies to the check-in to which it is attached and also
184184
to all direct descendants of that check-in. A <i>direct descendant</i>
185
-is a descendant through direct children. Tags propagation does not
185
+is a descendant through direct children. Tag propagation does not
186186
cross merges. Tag propagation also stops as soon
187187
as it encounters another check-in with the same tag. A cancellation tag
188188
is attached to a single check-in in order to either override a one-time
189189
tag that was previously placed on that same check-in, or to block
190190
tag propagation from an ancestor.
191191
--- www/branching.wiki
+++ www/branching.wiki
@@ -180,11 +180,11 @@
180
181 A tag can be a one-time tag, a propagating tag or a cancellation tag.
182 A one-time tag only applies to the check-in to which it is attached. A
183 propagating tag applies to the check-in to which it is attached and also
184 to all direct descendants of that check-in. A <i>direct descendant</i>
185 is a descendant through direct children. Tags propagation does not
186 cross merges. Tag propagation also stops as soon
187 as it encounters another check-in with the same tag. A cancellation tag
188 is attached to a single check-in in order to either override a one-time
189 tag that was previously placed on that same check-in, or to block
190 tag propagation from an ancestor.
191
--- www/branching.wiki
+++ www/branching.wiki
@@ -180,11 +180,11 @@
180
181 A tag can be a one-time tag, a propagating tag or a cancellation tag.
182 A one-time tag only applies to the check-in to which it is attached. A
183 propagating tag applies to the check-in to which it is attached and also
184 to all direct descendants of that check-in. A <i>direct descendant</i>
185 is a descendant through direct children. Tag propagation does not
186 cross merges. Tag propagation also stops as soon
187 as it encounters another check-in with the same tag. A cancellation tag
188 is attached to a single check-in in order to either override a one-time
189 tag that was previously placed on that same check-in, or to block
190 tag propagation from an ancestor.
191
+25 -64
--- www/concepts.wiki
+++ www/concepts.wiki
@@ -197,11 +197,15 @@
197197
is identified by your VISUAL environment variable. Fossil will also
198198
use GPG to clearsign your manifests if you happen to have it installed,
199199
but fossil will skip that step if GPG missing from your system.
200200
You can optionally set up fossil to use external "diff" programs,
201201
though fossil has an excellent built-in "diff" algorithm that works
202
-fine for most people.
202
+fine for most people. If you happen to have Tcl/Tk installed on your
203
+system, Fossil will use it to generate a graphical "diff" display when
204
+you use the --tk option to the "diff" command, but this too is entirely
205
+optional.
206
+
203207
204208
To uninstall fossil, simply delete the executable.
205209
206210
To upgrade an older version of fossil to a newer version, just
207211
replace the old executable with the new one. You might need to
@@ -391,75 +395,32 @@
391395
<h2>5.0 Setting Up A Fossil Server</h2>
392396
393397
With other configuration management software, setting up a server is
394398
a lot of work and normally takes time, patience, and a lot of system
395399
knowledge. Fossil is designed to avoid this frustration. Setting up
396
-a server with fossil is ridiculously easy. You have three options:</p>
400
+a server with fossil is ridiculously easy. You have four options:</p>
397401
398402
<ol>
399
-<li><b><a name="saserv"></a>Setting up a stand-alone server</b>
400
-
401
-From within your source tree just use the <b>server</b> command and
402
-fossil will start listening for incoming requests on TCP port 8080.
403
-You can point your web browser at <a href="http://localhost:8080/">
404
-http://localhost:8080/</a> and begin exploring. Or your coworkers
405
-can do pushes or pulls against your server. Use the <b>--port</b>
406
-option to the server command to specify a different TCP port. If
407
-you do not have a local source tree, use the <b>-R</b> command-line
408
-option to specify the repository file.
409
-
410
-The "fossil server" command is a great way to set of transient connections
411
-between coworkers for doing quick pushes or pulls. But you can also
412
-set up a permanent stand-alone server if you prefer. Just make
413
-arrangements for fossil to be launched with appropriate arguments
414
-after every reboot.
415
-
416
-If you just want a server to browse the built-in fossil website
417
-locally, use the <b>ui</b> command in place of <b>server</b>. The
418
-<b>ui</b> command starts up a local server too, but it also takes
419
-the additional step of automatically launching your webbrowser and
420
-pointing at the new server.
421
-</li>
422
-
423
-<li><b>Setting up a CGI server</b>
424
-
425
-If you have a web-server running on your machine already, you can
426
-set up fossil to be run from CGI. Simply create an executable script
427
-that looks something like this:
428
-
429
-<blockquote><pre>
430
-#!/usr/local/bin/fossil
431
-repository: /home/me/bigproject.fossil
432
-</pre></blockquote>
433
-
434
-Edit this script to use whatever pathnames are appropriate for
435
-your project. Then point your web browser at the script and off you
436
-go. The [./selfhost.wiki | self-hosting fossil repositories] are
437
-all set up this way.</li>
438
-
439
-<li><b>Setting up an inetd server</b>
440
-
441
-If you have inetd or xinetd running on your system, you can set
442
-those services up to launch fossil to deal with inbound TCP/IP connections
443
-on whatever port you want. Set up inetd or xinetd to launch fossil
444
-like this:
445
-
446
-<blockquote><pre>
447
-/usr/local/bin/fossil http /home/me/bigproject.fossil
448
-</pre></blockquote>
449
-
450
-As before, change the filenames to whatever is appropriate for
451
-your system. You can have fossil run as any user that has write
452
-permission on the repository and on the directory that contains the
453
-repository. But it is safer to run fossil as root. When fossil
454
-sees that it is running as root, it automatically puts itself into
455
-a <a href="http://en.wikipedia.org/wiki/Chroot">chroot jail</a> and
456
-drops all privileges prior to reading any information from the client.
457
-Since fossil is a stand-alone program, you do not need to put anything
458
-in the chroot jail with fossil in order for it to do its job.
459
-</li>
460
-</ol>
403
+<li><p><b>Stand-alone server.</b>
404
+Simply run the [/help?cmd=server|fossil server] or
405
+[/help?cmd=ui|fossil ui] command from the command-line.
406
+
407
+<li><p><b>CGI.</b>
408
+Install a 2-line CGI script on a CGI-enabled web-server like Apache.
409
+
410
+<li><p><b>SCGI.</b>
411
+Start an SCGI server using the
412
+[/help?cmd=server| fossil server --scgi] command for handling
413
+SCGI requests from web-servers like Nginx.
414
+
415
+<li><p><b>Inetd or Stunnel.</b>
416
+Configure programs like inetd, xinetd, or stunnel to hand off HTTP requests
417
+directly to the [/help?cmd=http|fossil http] command.
418
+</ol>
419
+
420
+See the [./server.wiki | How To Configure A Fossil Server] document
421
+for details.
461422
462423
<h2>6.0 Review Of Key Concepts</h2>
463424
464425
<ul>
465426
<li>The <b>fossil</b> program is a self-contained stand-alone executable.
466427
467428
ADDED www/customskin.md
--- www/concepts.wiki
+++ www/concepts.wiki
@@ -197,11 +197,15 @@
197 is identified by your VISUAL environment variable. Fossil will also
198 use GPG to clearsign your manifests if you happen to have it installed,
199 but fossil will skip that step if GPG missing from your system.
200 You can optionally set up fossil to use external "diff" programs,
201 though fossil has an excellent built-in "diff" algorithm that works
202 fine for most people.
 
 
 
 
203
204 To uninstall fossil, simply delete the executable.
205
206 To upgrade an older version of fossil to a newer version, just
207 replace the old executable with the new one. You might need to
@@ -391,75 +395,32 @@
391 <h2>5.0 Setting Up A Fossil Server</h2>
392
393 With other configuration management software, setting up a server is
394 a lot of work and normally takes time, patience, and a lot of system
395 knowledge. Fossil is designed to avoid this frustration. Setting up
396 a server with fossil is ridiculously easy. You have three options:</p>
397
398 <ol>
399 <li><b><a name="saserv"></a>Setting up a stand-alone server</b>
400
401 From within your source tree just use the <b>server</b> command and
402 fossil will start listening for incoming requests on TCP port 8080.
403 You can point your web browser at <a href="http://localhost:8080/">
404 http://localhost:8080/</a> and begin exploring. Or your coworkers
405 can do pushes or pulls against your server. Use the <b>--port</b>
406 option to the server command to specify a different TCP port. If
407 you do not have a local source tree, use the <b>-R</b> command-line
408 option to specify the repository file.
409
410 The "fossil server" command is a great way to set of transient connections
411 between coworkers for doing quick pushes or pulls. But you can also
412 set up a permanent stand-alone server if you prefer. Just make
413 arrangements for fossil to be launched with appropriate arguments
414 after every reboot.
415
416 If you just want a server to browse the built-in fossil website
417 locally, use the <b>ui</b> command in place of <b>server</b>. The
418 <b>ui</b> command starts up a local server too, but it also takes
419 the additional step of automatically launching your webbrowser and
420 pointing at the new server.
421 </li>
422
423 <li><b>Setting up a CGI server</b>
424
425 If you have a web-server running on your machine already, you can
426 set up fossil to be run from CGI. Simply create an executable script
427 that looks something like this:
428
429 <blockquote><pre>
430 #!/usr/local/bin/fossil
431 repository: /home/me/bigproject.fossil
432 </pre></blockquote>
433
434 Edit this script to use whatever pathnames are appropriate for
435 your project. Then point your web browser at the script and off you
436 go. The [./selfhost.wiki | self-hosting fossil repositories] are
437 all set up this way.</li>
438
439 <li><b>Setting up an inetd server</b>
440
441 If you have inetd or xinetd running on your system, you can set
442 those services up to launch fossil to deal with inbound TCP/IP connections
443 on whatever port you want. Set up inetd or xinetd to launch fossil
444 like this:
445
446 <blockquote><pre>
447 /usr/local/bin/fossil http /home/me/bigproject.fossil
448 </pre></blockquote>
449
450 As before, change the filenames to whatever is appropriate for
451 your system. You can have fossil run as any user that has write
452 permission on the repository and on the directory that contains the
453 repository. But it is safer to run fossil as root. When fossil
454 sees that it is running as root, it automatically puts itself into
455 a <a href="http://en.wikipedia.org/wiki/Chroot">chroot jail</a> and
456 drops all privileges prior to reading any information from the client.
457 Since fossil is a stand-alone program, you do not need to put anything
458 in the chroot jail with fossil in order for it to do its job.
459 </li>
460 </ol>
461
462 <h2>6.0 Review Of Key Concepts</h2>
463
464 <ul>
465 <li>The <b>fossil</b> program is a self-contained stand-alone executable.
466
467 DDED www/customskin.md
--- www/concepts.wiki
+++ www/concepts.wiki
@@ -197,11 +197,15 @@
197 is identified by your VISUAL environment variable. Fossil will also
198 use GPG to clearsign your manifests if you happen to have it installed,
199 but fossil will skip that step if GPG missing from your system.
200 You can optionally set up fossil to use external "diff" programs,
201 though fossil has an excellent built-in "diff" algorithm that works
202 fine for most people. If you happen to have Tcl/Tk installed on your
203 system, Fossil will use it to generate a graphical "diff" display when
204 you use the --tk option to the "diff" command, but this too is entirely
205 optional.
206
207
208 To uninstall fossil, simply delete the executable.
209
210 To upgrade an older version of fossil to a newer version, just
211 replace the old executable with the new one. You might need to
@@ -391,75 +395,32 @@
395 <h2>5.0 Setting Up A Fossil Server</h2>
396
397 With other configuration management software, setting up a server is
398 a lot of work and normally takes time, patience, and a lot of system
399 knowledge. Fossil is designed to avoid this frustration. Setting up
400 a server with fossil is ridiculously easy. You have four options:</p>
401
402 <ol>
403 <li><p><b>Stand-alone server.</b>
404 Simply run the [/help?cmd=server|fossil server] or
405 [/help?cmd=ui|fossil ui] command from the command-line.
406
407 <li><p><b>CGI.</b>
408 Install a 2-line CGI script on a CGI-enabled web-server like Apache.
409
410 <li><p><b>SCGI.</b>
411 Start an SCGI server using the
412 [/help?cmd=server| fossil server --scgi] command for handling
413 SCGI requests from web-servers like Nginx.
414
415 <li><p><b>Inetd or Stunnel.</b>
416 Configure programs like inetd, xinetd, or stunnel to hand off HTTP requests
417 directly to the [/help?cmd=http|fossil http] command.
418 </ol>
419
420 See the [./server.wiki | How To Configure A Fossil Server] document
421 for details.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
422
423 <h2>6.0 Review Of Key Concepts</h2>
424
425 <ul>
426 <li>The <b>fossil</b> program is a self-contained stand-alone executable.
427
428 DDED www/customskin.md
--- a/www/customskin.md
+++ b/www/customskin.md
@@ -0,0 +1,5 @@
1
+Theming
2
+=======onal)default header looks# Sk</div
3
+Tcontent sectionnd the footer# SkNoticee that there are no `<html>` or `<head>` elements in the header,
4
+nor three files,three under the
5
+ Admin menu.
--- a/www/customskin.md
+++ b/www/customskin.md
@@ -0,0 +1,5 @@
 
 
 
 
 
--- a/www/customskin.md
+++ b/www/customskin.md
@@ -0,0 +1,5 @@
1 Theming
2 =======onal)default header looks# Sk</div
3 Tcontent sectionnd the footer# SkNoticee that there are no `<html>` or `<head>` elements in the header,
4 nor three files,three under the
5 Admin menu.
--- www/fossil-v-git.wiki
+++ www/fossil-v-git.wiki
@@ -17,17 +17,20 @@
1717
<h2>2.0 Executive Summary:</h2>
1818
1919
<blockquote><center><table border=1 cellpadding=5>
2020
<tr><th width="50%">GIT</th><th width="50%">FOSSIL</th></tr>
2121
<tr><td>File versioning only</td>
22
- <td>Versioning, Tickets, Wiki, and Blog/News</td></tr>
22
+ <td>Versioning, Tickets, Wiki, and Technotes</td></tr>
2323
<tr><td>Sharding</td><td>Replicating</td></tr>
2424
<tr><td>Developer branches</td><td>Feature branches</td></tr>
2525
<tr><td>Complex</td><td>Intuitive</td></tr>
2626
<tr><td>Separate web tools</td><td>Integrated Web interface</td></tr>
2727
<tr><td>Lots of little tools</td><td>Single executable</td></tr>
28
-<tr><td>Pile-of-files repository</td><td>Single file repository</td></tr>
28
+<tr><td>Pile-of-files repository</td>
29
+ <td>Single-file relational database</td></tr>
30
+<tr><td>One check-out per repository</td>
31
+ <td>Many check-outs per repository</td></tr>
2932
<tr><td>Uses "<tt>rebase</tt>"</td><td>Immutable</td></tr>
3033
<tr><td>GPL</td><td>BSD</td></tr>
3134
</table></center></blockquote>
3235
3336
<h2>3.0 Discussion</h2>
@@ -36,11 +39,11 @@
3639
3740
Git provides file versioning services only, whereas Fossil adds an
3841
integrated [./wikitheory.wiki | wiki],
3942
[./bugtheory.wiki | ticketing &amp; bug tracking],
4043
[./embeddeddoc.wiki | embedded documentation], and
41
-[./event.wiki | News/Blog features].
44
+[./event.wiki | Technical notes].
4245
These additional capabilities are available for Git as 3rd-party
4346
user-installed add-ons, but with Fossil they are integrated into
4447
the design. One way to describe Fossil is that it is
4548
"[https://github.com/ | github]-in-a-box".
4649
@@ -148,10 +151,13 @@
148151
Fossil strives for simplicity. Fossil wants to be easy to learn and to
149152
require little thinking about how to operating it.
150153
[./quotes.wiki | Reports from the field]
151154
indicate that Fossil is mostly successful at this effort.
152155
156
+Fossil will <u>never</u> get you into anything like the
157
+"disconnected head state" which has frustrated so many Git users.
158
+
153159
<h3>3.5 Web Interface</h3>
154160
155161
Git has a web interface, but it requires a fair amount of setup and an
156162
external web server. Fossil comes with a fully functional
157163
[./webui.wiki | built-in web-server]
@@ -189,11 +195,27 @@
189195
repository can serve multiple simultaneous working checkouts.
190196
A Fossil repository is an SQLite database, so it is highly resistant
191197
to damage from a power-loss or system crash - incomplete transactions
192198
are simply rolled back after the system reboots.
193199
194
-<h3>3.8 Audit Trail</h3>
200
+<h3>3.8 Check-outs Per Repository</h3>
201
+
202
+In Git, a check-out and a repository are joined in a fundamental way
203
+so that only a single version of the project history, or a single branch,
204
+can be open at once. If you have a project with multiple branches and
205
+you want to have two or more branches open at the same time (perhaps to
206
+do performance comparisons, or maybe to run simultaneous builds using
207
+different compile-time options) then in Git you actually have to create
208
+a new clone of the repository for each open checkout.
209
+
210
+In Fossil, the repository and the check-out are distinct entities and
211
+so a single repository can support multiple simultaneous checkouts.
212
+This feature is <em>extensively</em> used by the Fossil developers
213
+themselves. Perhaps we are biased, but we not understand how anyone
214
+can work efficiently with just one check-out per repository.
215
+
216
+<h3>3.9 Audit Trail</h3>
195217
196218
Git features the "rebase" command which can be used to change the
197219
sequence of check-ins in the repository. Rebase can be used to "clean up"
198220
a complex sequence of check-ins to make their intent easier for others
199221
to understand. This is important if you view the history of a project
@@ -204,24 +226,47 @@
204226
Fossil allows mistakes to be corrected (for example, check-in comments
205227
can be revised, and check-ins can be moved onto new branches even after
206228
the check-in has occurred) but the correction is an addition to the repository
207229
and the original actions are preserved and displayed alongside
208230
the corrections, thus preserving an historically accurate audit trail.
209
-This is analogous to an accountant marking through an incorrect
210
-entry in a ledger and writing in a correction beside it, rather than
211
-erasing and incorrect entry.
231
+This is analogous to an accounting practice of marking through an incorrect
232
+entry in a ledger and writing a correction beside it.
233
+
212234
213235
To put it another way, Git remembers what you should have done whereas
214236
Fossil remembers what you actually did.
215237
216238
The lack of a "rebase" command and the inability to rewrite history
217239
is considered a feature of Fossil, not an omission or bug.
218240
219
-<h3>3.9 License</h3>
241
+<h3>3.10 License</h3>
220242
221243
Both Git and Fossil are open-source. Git is under
222244
[http://www.gnu.org/licenses/gpl.html | GPL] whereas Fossil is
223245
under the
224246
[http://en.wikipedia.org/wiki/BSD_licenses | two-clause BSD license].
225
-The difference should not be of a concern to most users. However,
226
-some corporate lawyers have objections to using GPL products and
227
-are more comfortable with a BSD-style license.
247
+The different licenses parallel, to some extent, the different philosophies
248
+of Git and Fossil.
249
+There are exceptions on both sides, but to a first approximation, Git
250
+works better for GPL projects and Fossil works better for BSD projects.
251
+
252
+The GPL is designed to provide a very contributor-friendly environment.
253
+No legal paperwork is needed to contribute to a GPL project because
254
+the GPL is cleverly designed so that the act of contributing
255
+to the project (or even reading the code for the project) constitutes
256
+an acceptance of the licensing terms. GPL encourages a bazaar-style
257
+development model, with lots of anonymous programmers contributing
258
+drive-by patches. The theory is that with many eyeballs, all bugs
259
+are shallow. Surprisingly, this has actually been demonstrated to
260
+work in many well-known projects.
261
+
262
+The BSD-style licenses are more user-friendly. BSD-style licenses
263
+place fewer restrictions on the users of the software at the expense
264
+of making it more difficult to contribute changes or enhancements.
265
+To protect against IP claims,
266
+every contributor to a BSD-style project must sign legal documents in
267
+which they agree to release their contributions under the same license.
268
+(Some BSD-licensed projects omit this formality, but do so at their peril.)
269
+A BSD-style license encourages a more cathedral-style approach to development.
270
+There is a small team of developers. Drive-by patches and anonymous
271
+contributors are discouraged and/or prohibited. Contributors are expected
272
+to be experts and be available to support their changes for the long-term.
228273
--- www/fossil-v-git.wiki
+++ www/fossil-v-git.wiki
@@ -17,17 +17,20 @@
17 <h2>2.0 Executive Summary:</h2>
18
19 <blockquote><center><table border=1 cellpadding=5>
20 <tr><th width="50%">GIT</th><th width="50%">FOSSIL</th></tr>
21 <tr><td>File versioning only</td>
22 <td>Versioning, Tickets, Wiki, and Blog/News</td></tr>
23 <tr><td>Sharding</td><td>Replicating</td></tr>
24 <tr><td>Developer branches</td><td>Feature branches</td></tr>
25 <tr><td>Complex</td><td>Intuitive</td></tr>
26 <tr><td>Separate web tools</td><td>Integrated Web interface</td></tr>
27 <tr><td>Lots of little tools</td><td>Single executable</td></tr>
28 <tr><td>Pile-of-files repository</td><td>Single file repository</td></tr>
 
 
 
29 <tr><td>Uses "<tt>rebase</tt>"</td><td>Immutable</td></tr>
30 <tr><td>GPL</td><td>BSD</td></tr>
31 </table></center></blockquote>
32
33 <h2>3.0 Discussion</h2>
@@ -36,11 +39,11 @@
36
37 Git provides file versioning services only, whereas Fossil adds an
38 integrated [./wikitheory.wiki | wiki],
39 [./bugtheory.wiki | ticketing &amp; bug tracking],
40 [./embeddeddoc.wiki | embedded documentation], and
41 [./event.wiki | News/Blog features].
42 These additional capabilities are available for Git as 3rd-party
43 user-installed add-ons, but with Fossil they are integrated into
44 the design. One way to describe Fossil is that it is
45 "[https://github.com/ | github]-in-a-box".
46
@@ -148,10 +151,13 @@
148 Fossil strives for simplicity. Fossil wants to be easy to learn and to
149 require little thinking about how to operating it.
150 [./quotes.wiki | Reports from the field]
151 indicate that Fossil is mostly successful at this effort.
152
 
 
 
153 <h3>3.5 Web Interface</h3>
154
155 Git has a web interface, but it requires a fair amount of setup and an
156 external web server. Fossil comes with a fully functional
157 [./webui.wiki | built-in web-server]
@@ -189,11 +195,27 @@
189 repository can serve multiple simultaneous working checkouts.
190 A Fossil repository is an SQLite database, so it is highly resistant
191 to damage from a power-loss or system crash - incomplete transactions
192 are simply rolled back after the system reboots.
193
194 <h3>3.8 Audit Trail</h3>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
195
196 Git features the "rebase" command which can be used to change the
197 sequence of check-ins in the repository. Rebase can be used to "clean up"
198 a complex sequence of check-ins to make their intent easier for others
199 to understand. This is important if you view the history of a project
@@ -204,24 +226,47 @@
204 Fossil allows mistakes to be corrected (for example, check-in comments
205 can be revised, and check-ins can be moved onto new branches even after
206 the check-in has occurred) but the correction is an addition to the repository
207 and the original actions are preserved and displayed alongside
208 the corrections, thus preserving an historically accurate audit trail.
209 This is analogous to an accountant marking through an incorrect
210 entry in a ledger and writing in a correction beside it, rather than
211 erasing and incorrect entry.
212
213 To put it another way, Git remembers what you should have done whereas
214 Fossil remembers what you actually did.
215
216 The lack of a "rebase" command and the inability to rewrite history
217 is considered a feature of Fossil, not an omission or bug.
218
219 <h3>3.9 License</h3>
220
221 Both Git and Fossil are open-source. Git is under
222 [http://www.gnu.org/licenses/gpl.html | GPL] whereas Fossil is
223 under the
224 [http://en.wikipedia.org/wiki/BSD_licenses | two-clause BSD license].
225 The difference should not be of a concern to most users. However,
226 some corporate lawyers have objections to using GPL products and
227 are more comfortable with a BSD-style license.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
228
--- www/fossil-v-git.wiki
+++ www/fossil-v-git.wiki
@@ -17,17 +17,20 @@
17 <h2>2.0 Executive Summary:</h2>
18
19 <blockquote><center><table border=1 cellpadding=5>
20 <tr><th width="50%">GIT</th><th width="50%">FOSSIL</th></tr>
21 <tr><td>File versioning only</td>
22 <td>Versioning, Tickets, Wiki, and Technotes</td></tr>
23 <tr><td>Sharding</td><td>Replicating</td></tr>
24 <tr><td>Developer branches</td><td>Feature branches</td></tr>
25 <tr><td>Complex</td><td>Intuitive</td></tr>
26 <tr><td>Separate web tools</td><td>Integrated Web interface</td></tr>
27 <tr><td>Lots of little tools</td><td>Single executable</td></tr>
28 <tr><td>Pile-of-files repository</td>
29 <td>Single-file relational database</td></tr>
30 <tr><td>One check-out per repository</td>
31 <td>Many check-outs per repository</td></tr>
32 <tr><td>Uses "<tt>rebase</tt>"</td><td>Immutable</td></tr>
33 <tr><td>GPL</td><td>BSD</td></tr>
34 </table></center></blockquote>
35
36 <h2>3.0 Discussion</h2>
@@ -36,11 +39,11 @@
39
40 Git provides file versioning services only, whereas Fossil adds an
41 integrated [./wikitheory.wiki | wiki],
42 [./bugtheory.wiki | ticketing &amp; bug tracking],
43 [./embeddeddoc.wiki | embedded documentation], and
44 [./event.wiki | Technical notes].
45 These additional capabilities are available for Git as 3rd-party
46 user-installed add-ons, but with Fossil they are integrated into
47 the design. One way to describe Fossil is that it is
48 "[https://github.com/ | github]-in-a-box".
49
@@ -148,10 +151,13 @@
151 Fossil strives for simplicity. Fossil wants to be easy to learn and to
152 require little thinking about how to operating it.
153 [./quotes.wiki | Reports from the field]
154 indicate that Fossil is mostly successful at this effort.
155
156 Fossil will <u>never</u> get you into anything like the
157 "disconnected head state" which has frustrated so many Git users.
158
159 <h3>3.5 Web Interface</h3>
160
161 Git has a web interface, but it requires a fair amount of setup and an
162 external web server. Fossil comes with a fully functional
163 [./webui.wiki | built-in web-server]
@@ -189,11 +195,27 @@
195 repository can serve multiple simultaneous working checkouts.
196 A Fossil repository is an SQLite database, so it is highly resistant
197 to damage from a power-loss or system crash - incomplete transactions
198 are simply rolled back after the system reboots.
199
200 <h3>3.8 Check-outs Per Repository</h3>
201
202 In Git, a check-out and a repository are joined in a fundamental way
203 so that only a single version of the project history, or a single branch,
204 can be open at once. If you have a project with multiple branches and
205 you want to have two or more branches open at the same time (perhaps to
206 do performance comparisons, or maybe to run simultaneous builds using
207 different compile-time options) then in Git you actually have to create
208 a new clone of the repository for each open checkout.
209
210 In Fossil, the repository and the check-out are distinct entities and
211 so a single repository can support multiple simultaneous checkouts.
212 This feature is <em>extensively</em> used by the Fossil developers
213 themselves. Perhaps we are biased, but we not understand how anyone
214 can work efficiently with just one check-out per repository.
215
216 <h3>3.9 Audit Trail</h3>
217
218 Git features the "rebase" command which can be used to change the
219 sequence of check-ins in the repository. Rebase can be used to "clean up"
220 a complex sequence of check-ins to make their intent easier for others
221 to understand. This is important if you view the history of a project
@@ -204,24 +226,47 @@
226 Fossil allows mistakes to be corrected (for example, check-in comments
227 can be revised, and check-ins can be moved onto new branches even after
228 the check-in has occurred) but the correction is an addition to the repository
229 and the original actions are preserved and displayed alongside
230 the corrections, thus preserving an historically accurate audit trail.
231 This is analogous to an accounting practice of marking through an incorrect
232 entry in a ledger and writing a correction beside it.
233
234
235 To put it another way, Git remembers what you should have done whereas
236 Fossil remembers what you actually did.
237
238 The lack of a "rebase" command and the inability to rewrite history
239 is considered a feature of Fossil, not an omission or bug.
240
241 <h3>3.10 License</h3>
242
243 Both Git and Fossil are open-source. Git is under
244 [http://www.gnu.org/licenses/gpl.html | GPL] whereas Fossil is
245 under the
246 [http://en.wikipedia.org/wiki/BSD_licenses | two-clause BSD license].
247 The different licenses parallel, to some extent, the different philosophies
248 of Git and Fossil.
249 There are exceptions on both sides, but to a first approximation, Git
250 works better for GPL projects and Fossil works better for BSD projects.
251
252 The GPL is designed to provide a very contributor-friendly environment.
253 No legal paperwork is needed to contribute to a GPL project because
254 the GPL is cleverly designed so that the act of contributing
255 to the project (or even reading the code for the project) constitutes
256 an acceptance of the licensing terms. GPL encourages a bazaar-style
257 development model, with lots of anonymous programmers contributing
258 drive-by patches. The theory is that with many eyeballs, all bugs
259 are shallow. Surprisingly, this has actually been demonstrated to
260 work in many well-known projects.
261
262 The BSD-style licenses are more user-friendly. BSD-style licenses
263 place fewer restrictions on the users of the software at the expense
264 of making it more difficult to contribute changes or enhancements.
265 To protect against IP claims,
266 every contributor to a BSD-style project must sign legal documents in
267 which they agree to release their contributions under the same license.
268 (Some BSD-licensed projects omit this formality, but do so at their peril.)
269 A BSD-style license encourages a more cathedral-style approach to development.
270 There is a small team of developers. Drive-by patches and anonymous
271 contributors are discouraged and/or prohibited. Contributors are expected
272 to be experts and be available to support their changes for the long-term.
273
--- www/hacker-howto.wiki
+++ www/hacker-howto.wiki
@@ -2,10 +2,11 @@
22
33
The following links are of interest to programmers who want to modify
44
or enhance Fossil. Ordinary users can safely ignore this information.
55
66
* [./build.wiki | How To Compile And Install Fossil]
7
+ * [./customskin.md | Theming Fossil]
78
* [./makefile.wiki | The Fossil Build Process]
89
* [./tech_overview.wiki | A Technical Overview of Fossil]
910
* [./adding_code.wiki | Adding Features To Fossil]
1011
* [./contribute.wiki|Contributing Code Or Enhancements To The Fossil Project]
1112
* [./style.wiki | Coding Style Guidelines]
1213
--- www/hacker-howto.wiki
+++ www/hacker-howto.wiki
@@ -2,10 +2,11 @@
2
3 The following links are of interest to programmers who want to modify
4 or enhance Fossil. Ordinary users can safely ignore this information.
5
6 * [./build.wiki | How To Compile And Install Fossil]
 
7 * [./makefile.wiki | The Fossil Build Process]
8 * [./tech_overview.wiki | A Technical Overview of Fossil]
9 * [./adding_code.wiki | Adding Features To Fossil]
10 * [./contribute.wiki|Contributing Code Or Enhancements To The Fossil Project]
11 * [./style.wiki | Coding Style Guidelines]
12
--- www/hacker-howto.wiki
+++ www/hacker-howto.wiki
@@ -2,10 +2,11 @@
2
3 The following links are of interest to programmers who want to modify
4 or enhance Fossil. Ordinary users can safely ignore this information.
5
6 * [./build.wiki | How To Compile And Install Fossil]
7 * [./customskin.md | Theming Fossil]
8 * [./makefile.wiki | The Fossil Build Process]
9 * [./tech_overview.wiki | A Technical Overview of Fossil]
10 * [./adding_code.wiki | Adding Features To Fossil]
11 * [./contribute.wiki|Contributing Code Or Enhancements To The Fossil Project]
12 * [./style.wiki | Coding Style Guidelines]
13
+51 -75
--- www/index.wiki
+++ www/index.wiki
@@ -1,115 +1,91 @@
1
-<title>Fossil</title>
2
-
3
-
4
-<p align="center">
5
-<font size="3">
6
-<i>Simple, high-reliability, distributed software configuration management</i>
7
-</font>
8
-</p>
9
-
10
-
11
-<h3>Why Use Fossil?</h3>
12
-
13
-<table border="0" cellspacing="10" bgcolor="white" align="right"
14
-cellpadding="2">
15
-<tr><td bgcolor="#446979">
16
-<table border="0" cellpadding="10" bgcolor="white">
17
-<tr><td>
1
+<title>Home</title>
2
+
3
+<h3>What Is Fossil?</h3>
4
+
5
+<div style='width:200px;float:right;border:2px solid #446979;padding:10px;margin:0px 10px;'>
186
<ul>
197
<li> [http://www.fossil-scm.org/download.html | Download]
208
<li> [./quickstart.wiki | Quick Start]
219
<li> [./build.wiki | Install]
2210
<li> [../COPYRIGHT-BSD2.txt | License]
23
-<li> [/timeline | Recent changes]
2411
<li> [./faq.wiki | FAQ]
25
-<li> [./hacker-howto.wiki | Hacker How-To]
2612
<li> [./changes.wiki | Change Log]
13
+<li> [./hacker-howto.wiki | Hacker How-To]
2714
<li> [./hints.wiki | Tip &amp; Hints]
2815
<li> [./permutedindex.html | Documentation Index]
2916
<li> [http://www.fossil-scm.org/schimpf-book/home | Jim Schimpf's book]
3017
<li> Mailing list
3118
<ul>
3219
<li> [http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users | sign-up]
3320
<li> [http://www.mail-archive.com/[email protected] | archives]
34
- <ul>
21
+ </ul>
3522
</ul>
36
-</td></tr>
37
-<tr><td>
3823
<center><img src="fossil3.gif"></center>
39
-</td></tr>
40
-</table>
41
-</table>
42
-
43
-There are plenty of open-source version control systems available on the
44
-internet these days. What makes Fossil worthy of attention?
45
-
46
- 1. <b>Bug Tracking And Wiki</b> -
24
+</div>
25
+
26
+<p>Fossil is a simple, high-reliability, distributed software configuration
27
+management with these advanced features:
28
+
29
+ 1. <b>Integrated Bug Tracking, Wiki, and Technotes</b> -
4730
In addition to doing [./concepts.wiki | distributed version control]
4831
like Git and Mercurial,
49
- Fossil also supports [./bugtheory.wiki | distributed bug tracking],
50
- [./wikitheory.wiki | distributed wiki], and a
51
- [./event.wiki | distributed blog] mechanism all in a single
52
- integrated package.
53
-
54
- 2. <b>Web Interface</b> -
55
- Fossil has a built-in and easy-to-use [./webui.wiki | web interface]
56
- that simplifies project tracking and promotes situational awareness.
57
- Simply type "fossil&nbsp;ui" from within any check-out and Fossil
58
- automatically opens your web browser in a page that gives detailed
59
- [/timeline?n=100&y=ci | graphical history] and status information
60
- on that project.
61
-
62
- This entire website (except the
63
- [http://www.fossil-scm.org/download.html | download] page)
32
+ Fossil also supports [./bugtheory.wiki | bug tracking],
33
+ [./wikitheory.wiki | wiki], and [./event.wiki | technotes].
34
+
35
+ 2. <b>Built-in Web Interface</b> -
36
+ Fossil has a built-in and intuitive [./webui.wiki | web interface]
37
+ with a rich assortment of information pages
38
+ ([./webpage-ex.md|examples]) designed to promote situational awareness.
39
+
40
+ This entire website&#185;
6441
is just a running instance of Fossil. The pages you see here
6542
are all [./wikitheory.wiki | wiki] or
6643
[./embeddeddoc.wiki | embedded documentation].
6744
When you clone Fossil from one of its
6845
[./selfhost.wiki | self-hosting repositories],
6946
you get more than just source code - you get this entire website.
47
+ <span style='font-size:75%;'>(&#185;except the
48
+ [http://www.fossil-scm.org/download.html | download] page)</span>
49
+
50
+ 3. <b>Self-Contained</b> -
51
+ Fossil is a single self-contained stand-alone executable.
52
+ To install, simply download a
53
+ <a href="http://www.fossil-scm.org/download.html">precompiled binary</a>
54
+ for Linux, Mac, OpenBSD, or Windows and put it on your $PATH.
55
+ [./build.wiki | Easy-to-compile source code] is also available.
56
+
57
+ 4. <b>Simple Networking</b> -
58
+ No custom protocols or TCP ports.
59
+ Fossil uses ordinary HTTP (or HTTPS or SSH)
60
+ for network communications, so it works fine from behind
61
+ restrictive firewalls, including [./quickstart.wiki#proxy|proxies].
62
+ The protocol is
63
+ [./stats.wiki | bandwidth efficient] to the point that Fossil can be
64
+ used comfortably over dial-up.
65
+
66
+ 5. <b>CGI/SCGI Enabled</b> - No server is required, but if you want to
67
+ set one up, Fossil supports four easy
68
+ [./server.wiki | server configurations].
7069
71
- 3. <b>Autosync</b> -
70
+ 6. <b>Autosync</b> -
7271
Fossil supports [./concepts.wiki#workflow | "autosync" mode]
7372
which helps to keep projects moving
7473
forward by reducing the amount of needless
7574
[./branching.wiki | forking and merging] often
7675
associated with distributed projects.
7776
78
- 4. <b>Self-Contained</b> -
79
- Fossil is a single stand-alone executable that contains everything
80
- needed to do configuration management.
81
- Installation is trivial: simply download a
82
- <a href="http://www.fossil-scm.org/download.html">precompiled binary</a>
83
- for Linux, Mac, or Windows and put it on your $PATH.
84
- [./build.wiki | Easy-to-compile source code] is available for
85
- users on other platforms. Fossil sources are also mostly self-contained,
86
- requiring only the standard C library to build.
87
-
88
- 5. <b>Simple Networking</b> -
89
- Fossil uses plain old HTTP (with
90
- [./quickstart.wiki#proxy | proxy support])
91
- for all network communications, meaning that it works fine from behind
92
- restrictive firewalls. The protocol is
93
- [./stats.wiki | bandwidth efficient] to the point that Fossil can be
94
- used comfortably over a dial-up internet connection.
95
-
96
- 6. <b>CGI/SCGI Enabled</b> -
97
- No server is required to use fossil. But a
98
- server does make collaboration easier. Fossil supports four different
99
- yet simple [./server.wiki | server configurations].
100
- The most popular is a 2-line CGI script. This is the approach
101
- used by the [./selfhost.wiki | self-hosting fossil repositories].
102
-
10377
7. <b>Robust &amp; Reliable</b> -
10478
Fossil stores content using an [./fileformat.wiki | enduring file format]
10579
in an SQLite database so that transactions are
106
- atomic even if interrupted by a power loss or system crash. Furthermore,
107
- automatic [./selfcheck.wiki | self-checks] verify that all aspects of
108
- the repository are consistent prior to each commit. In over six years
80
+ atomic even if interrupted by a power loss or system crash.
81
+ Automatic [./selfcheck.wiki | self-checks] verify that all aspects of
82
+ the repository are consistent prior to each commit. In over seven years
10983
of operation, no work has ever been lost after having been committed to
11084
a Fossil repository.
85
+
86
+ 8. <b>Free and Open-Source</b> - Uses the [../COPYRIGHT-BSD2.txt|2-clause BSD license].
11187
11288
<hr>
11389
<h3>Links For Fossil Users:</h3>
11490
11591
* "Fuel" is cross-platform GUI front-end for Fossil
@@ -159,11 +135,11 @@
159135
* [./fossil-v-git.wiki | Fossil versus Git].
160136
* [./fiveminutes.wiki | Up and running in 5 minutes as a single user]
161137
(contributed by Gilles Ganault on 2013-01-08).
162138
* [./antibot.wiki | How Fossil defends against abuse by spiders and bots].
163139
164
-<h3>Links For Fossil Developer:</h3>
140
+<h3>Links For Fossil Developers:</h3>
165141
166142
* [./contribute.wiki | Contributing] code or documentation to the
167143
Fossil project.
168144
* [./theory1.wiki | Thoughts On The Design Of Fossil].
169145
* [./pop.wiki | Principles Of Operation]
170146
--- www/index.wiki
+++ www/index.wiki
@@ -1,115 +1,91 @@
1 <title>Fossil</title>
2
3
4 <p align="center">
5 <font size="3">
6 <i>Simple, high-reliability, distributed software configuration management</i>
7 </font>
8 </p>
9
10
11 <h3>Why Use Fossil?</h3>
12
13 <table border="0" cellspacing="10" bgcolor="white" align="right"
14 cellpadding="2">
15 <tr><td bgcolor="#446979">
16 <table border="0" cellpadding="10" bgcolor="white">
17 <tr><td>
18 <ul>
19 <li> [http://www.fossil-scm.org/download.html | Download]
20 <li> [./quickstart.wiki | Quick Start]
21 <li> [./build.wiki | Install]
22 <li> [../COPYRIGHT-BSD2.txt | License]
23 <li> [/timeline | Recent changes]
24 <li> [./faq.wiki | FAQ]
25 <li> [./hacker-howto.wiki | Hacker How-To]
26 <li> [./changes.wiki | Change Log]
 
27 <li> [./hints.wiki | Tip &amp; Hints]
28 <li> [./permutedindex.html | Documentation Index]
29 <li> [http://www.fossil-scm.org/schimpf-book/home | Jim Schimpf's book]
30 <li> Mailing list
31 <ul>
32 <li> [http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users | sign-up]
33 <li> [http://www.mail-archive.com/[email protected] | archives]
34 <ul>
35 </ul>
36 </td></tr>
37 <tr><td>
38 <center><img src="fossil3.gif"></center>
39 </td></tr>
40 </table>
41 </table>
42
43 There are plenty of open-source version control systems available on the
44 internet these days. What makes Fossil worthy of attention?
45
46 1. <b>Bug Tracking And Wiki</b> -
47 In addition to doing [./concepts.wiki | distributed version control]
48 like Git and Mercurial,
49 Fossil also supports [./bugtheory.wiki | distributed bug tracking],
50 [./wikitheory.wiki | distributed wiki], and a
51 [./event.wiki | distributed blog] mechanism all in a single
52 integrated package.
53
54 2. <b>Web Interface</b> -
55 Fossil has a built-in and easy-to-use [./webui.wiki | web interface]
56 that simplifies project tracking and promotes situational awareness.
57 Simply type "fossil&nbsp;ui" from within any check-out and Fossil
58 automatically opens your web browser in a page that gives detailed
59 [/timeline?n=100&y=ci | graphical history] and status information
60 on that project.
61
62 This entire website (except the
63 [http://www.fossil-scm.org/download.html | download] page)
64 is just a running instance of Fossil. The pages you see here
65 are all [./wikitheory.wiki | wiki] or
66 [./embeddeddoc.wiki | embedded documentation].
67 When you clone Fossil from one of its
68 [./selfhost.wiki | self-hosting repositories],
69 you get more than just source code - you get this entire website.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
71 3. <b>Autosync</b> -
72 Fossil supports [./concepts.wiki#workflow | "autosync" mode]
73 which helps to keep projects moving
74 forward by reducing the amount of needless
75 [./branching.wiki | forking and merging] often
76 associated with distributed projects.
77
78 4. <b>Self-Contained</b> -
79 Fossil is a single stand-alone executable that contains everything
80 needed to do configuration management.
81 Installation is trivial: simply download a
82 <a href="http://www.fossil-scm.org/download.html">precompiled binary</a>
83 for Linux, Mac, or Windows and put it on your $PATH.
84 [./build.wiki | Easy-to-compile source code] is available for
85 users on other platforms. Fossil sources are also mostly self-contained,
86 requiring only the standard C library to build.
87
88 5. <b>Simple Networking</b> -
89 Fossil uses plain old HTTP (with
90 [./quickstart.wiki#proxy | proxy support])
91 for all network communications, meaning that it works fine from behind
92 restrictive firewalls. The protocol is
93 [./stats.wiki | bandwidth efficient] to the point that Fossil can be
94 used comfortably over a dial-up internet connection.
95
96 6. <b>CGI/SCGI Enabled</b> -
97 No server is required to use fossil. But a
98 server does make collaboration easier. Fossil supports four different
99 yet simple [./server.wiki | server configurations].
100 The most popular is a 2-line CGI script. This is the approach
101 used by the [./selfhost.wiki | self-hosting fossil repositories].
102
103 7. <b>Robust &amp; Reliable</b> -
104 Fossil stores content using an [./fileformat.wiki | enduring file format]
105 in an SQLite database so that transactions are
106 atomic even if interrupted by a power loss or system crash. Furthermore,
107 automatic [./selfcheck.wiki | self-checks] verify that all aspects of
108 the repository are consistent prior to each commit. In over six years
109 of operation, no work has ever been lost after having been committed to
110 a Fossil repository.
 
 
111
112 <hr>
113 <h3>Links For Fossil Users:</h3>
114
115 * "Fuel" is cross-platform GUI front-end for Fossil
@@ -159,11 +135,11 @@
159 * [./fossil-v-git.wiki | Fossil versus Git].
160 * [./fiveminutes.wiki | Up and running in 5 minutes as a single user]
161 (contributed by Gilles Ganault on 2013-01-08).
162 * [./antibot.wiki | How Fossil defends against abuse by spiders and bots].
163
164 <h3>Links For Fossil Developer:</h3>
165
166 * [./contribute.wiki | Contributing] code or documentation to the
167 Fossil project.
168 * [./theory1.wiki | Thoughts On The Design Of Fossil].
169 * [./pop.wiki | Principles Of Operation]
170
--- www/index.wiki
+++ www/index.wiki
@@ -1,115 +1,91 @@
1 <title>Home</title>
2
3 <h3>What Is Fossil?</h3>
4
5 <div style='width:200px;float:right;border:2px solid #446979;padding:10px;margin:0px 10px;'>
 
 
 
 
 
 
 
 
 
 
 
 
6 <ul>
7 <li> [http://www.fossil-scm.org/download.html | Download]
8 <li> [./quickstart.wiki | Quick Start]
9 <li> [./build.wiki | Install]
10 <li> [../COPYRIGHT-BSD2.txt | License]
 
11 <li> [./faq.wiki | FAQ]
 
12 <li> [./changes.wiki | Change Log]
13 <li> [./hacker-howto.wiki | Hacker How-To]
14 <li> [./hints.wiki | Tip &amp; Hints]
15 <li> [./permutedindex.html | Documentation Index]
16 <li> [http://www.fossil-scm.org/schimpf-book/home | Jim Schimpf's book]
17 <li> Mailing list
18 <ul>
19 <li> [http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users | sign-up]
20 <li> [http://www.mail-archive.com/[email protected] | archives]
21 </ul>
22 </ul>
 
 
23 <center><img src="fossil3.gif"></center>
24 </div>
25
26 <p>Fossil is a simple, high-reliability, distributed software configuration
27 management with these advanced features:
28
29 1. <b>Integrated Bug Tracking, Wiki, and Technotes</b> -
 
 
30 In addition to doing [./concepts.wiki | distributed version control]
31 like Git and Mercurial,
32 Fossil also supports [./bugtheory.wiki | bug tracking],
33 [./wikitheory.wiki | wiki], and [./event.wiki | technotes].
34
35 2. <b>Built-in Web Interface</b> -
36 Fossil has a built-in and intuitive [./webui.wiki | web interface]
37 with a rich assortment of information pages
38 ([./webpage-ex.md|examples]) designed to promote situational awareness.
39
40 This entire website&#185;
 
 
 
 
 
 
41 is just a running instance of Fossil. The pages you see here
42 are all [./wikitheory.wiki | wiki] or
43 [./embeddeddoc.wiki | embedded documentation].
44 When you clone Fossil from one of its
45 [./selfhost.wiki | self-hosting repositories],
46 you get more than just source code - you get this entire website.
47 <span style='font-size:75%;'>(&#185;except the
48 [http://www.fossil-scm.org/download.html | download] page)</span>
49
50 3. <b>Self-Contained</b> -
51 Fossil is a single self-contained stand-alone executable.
52 To install, simply download a
53 <a href="http://www.fossil-scm.org/download.html">precompiled binary</a>
54 for Linux, Mac, OpenBSD, or Windows and put it on your $PATH.
55 [./build.wiki | Easy-to-compile source code] is also available.
56
57 4. <b>Simple Networking</b> -
58 No custom protocols or TCP ports.
59 Fossil uses ordinary HTTP (or HTTPS or SSH)
60 for network communications, so it works fine from behind
61 restrictive firewalls, including [./quickstart.wiki#proxy|proxies].
62 The protocol is
63 [./stats.wiki | bandwidth efficient] to the point that Fossil can be
64 used comfortably over dial-up.
65
66 5. <b>CGI/SCGI Enabled</b> - No server is required, but if you want to
67 set one up, Fossil supports four easy
68 [./server.wiki | server configurations].
69
70 6. <b>Autosync</b> -
71 Fossil supports [./concepts.wiki#workflow | "autosync" mode]
72 which helps to keep projects moving
73 forward by reducing the amount of needless
74 [./branching.wiki | forking and merging] often
75 associated with distributed projects.
76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77 7. <b>Robust &amp; Reliable</b> -
78 Fossil stores content using an [./fileformat.wiki | enduring file format]
79 in an SQLite database so that transactions are
80 atomic even if interrupted by a power loss or system crash.
81 Automatic [./selfcheck.wiki | self-checks] verify that all aspects of
82 the repository are consistent prior to each commit. In over seven years
83 of operation, no work has ever been lost after having been committed to
84 a Fossil repository.
85
86 8. <b>Free and Open-Source</b> - Uses the [../COPYRIGHT-BSD2.txt|2-clause BSD license].
87
88 <hr>
89 <h3>Links For Fossil Users:</h3>
90
91 * "Fuel" is cross-platform GUI front-end for Fossil
@@ -159,11 +135,11 @@
135 * [./fossil-v-git.wiki | Fossil versus Git].
136 * [./fiveminutes.wiki | Up and running in 5 minutes as a single user]
137 (contributed by Gilles Ganault on 2013-01-08).
138 * [./antibot.wiki | How Fossil defends against abuse by spiders and bots].
139
140 <h3>Links For Fossil Developers:</h3>
141
142 * [./contribute.wiki | Contributing] code or documentation to the
143 Fossil project.
144 * [./theory1.wiki | Thoughts On The Design Of Fossil].
145 * [./pop.wiki | Principles Of Operation]
146
--- www/inout.wiki
+++ www/inout.wiki
@@ -48,5 +48,16 @@
4848
since the git-fast-export file format is currently the only VCS interchange
4949
format that Fossil will generate. However,
5050
future versions of Fossil might add the ability to generate other
5151
VCS interchange formats, and so for compatibility, the use of the --git
5252
option recommented.
53
+
54
+An anonymous user sends this comment:
55
+
56
+<blockquote>
57
+The main Fossil branch is called "trunk", while the main git branch is
58
+called "master". After you've exported your FOSSIL repo to git, you won't
59
+see any files and gitk will complain about a missing "HEAD". You can
60
+resolve this problem by merging "trunk" with "master"
61
+(first verify using git status that you are on the "master" branch):
62
+<tt>git merge trunk</tt>
63
+</blockquote>
5364
--- www/inout.wiki
+++ www/inout.wiki
@@ -48,5 +48,16 @@
48 since the git-fast-export file format is currently the only VCS interchange
49 format that Fossil will generate. However,
50 future versions of Fossil might add the ability to generate other
51 VCS interchange formats, and so for compatibility, the use of the --git
52 option recommented.
 
 
 
 
 
 
 
 
 
 
 
53
--- www/inout.wiki
+++ www/inout.wiki
@@ -48,5 +48,16 @@
48 since the git-fast-export file format is currently the only VCS interchange
49 format that Fossil will generate. However,
50 future versions of Fossil might add the ability to generate other
51 VCS interchange formats, and so for compatibility, the use of the --git
52 option recommented.
53
54 An anonymous user sends this comment:
55
56 <blockquote>
57 The main Fossil branch is called "trunk", while the main git branch is
58 called "master". After you've exported your FOSSIL repo to git, you won't
59 see any files and gitk will complain about a missing "HEAD". You can
60 resolve this problem by merging "trunk" with "master"
61 (first verify using git status that you are on the "master" branch):
62 <tt>git merge trunk</tt>
63 </blockquote>
64
+23 -24
--- www/mkdownload.tcl
+++ www/mkdownload.tcl
@@ -5,42 +5,41 @@
55
#
66
#
77
set out [open download.html w]
88
fconfigure $out -encoding utf-8 -translation lf
99
puts $out \
10
-{<!DOCTYPE html><html>
11
-<head>
12
-<base href="/" />
13
-<title>Fossil: Downloads</title>
14
-<link rel="stylesheet" href="/fossil/style.css" type="text/css"
15
- media="screen">
16
-</head>
17
-<body>
18
-<div class="header">
19
- <div class="logo">
20
- <img src="/fossil/logo" alt="logo">
21
- <br /><nobr>Fossil</nobr>
22
- </div>
23
-
24
- <div class="title">Fossil Downloads</div>
25
-</div>
26
-<div class="mainmenu">
10
+{<!DOCTYPE html>
11
+<html>
12
+ <head>
13
+ <base href="https://www.fossil-scm.org/download.html" />
14
+ <title>Fossil: Download</title>
15
+ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
16
+ href="/fossil/timeline.rss" />
17
+ <link rel="stylesheet" href="/fossil/style.css?default" type="text/css"
18
+ media="screen" />
19
+ </head>
20
+
21
+ <body>
22
+ <div class="header">
23
+ <div class="title"><h1>Fossil</h1>Download</div>
24
+ </div>
25
+ <div class="mainmenu">
2726
<a href='/fossil/doc/trunk/www/index.wiki'>Home</a>
2827
<a href='/fossil/timeline?y=ci'>Timeline</a>
29
-<a href='/download.html'>Download</a>
30
-<a href='/fossil/dir?ci=trunk'>Code</a>
31
-<a href='/fossil/doc/trunk/www/permutedindex.html'>Documentation</a>
28
+<a href='/fossil/dir?ci=tip'>Code</a>
29
+<a href='/fossil/doc/trunk/www/permutedindex.html'>Docs</a>
3230
<a href='/fossil/brlist'>Branches</a>
33
-<a href='/fossil/taglist'>Tags</a>
34
-<a href='/fossil/reportlist'>Tickets</a>
31
+<a href='/fossil/ticket'>Tickets</a>
32
+<a href='/fossil/wiki'>Wiki</a>
33
+<a href='/download.html' class='active'>Download</a>
3534
</div>
3635
<div class="content">
3736
<p>
3837
3938
<center><font size=4>}
4039
puts $out \
41
-"<b>To install Fossil \u2192</b> download the stand-alone executable"
40
+"<b>To install Fossil &rarr;</b> download the stand-alone executable"
4241
puts $out \
4342
{and put it on your $PATH.
4443
</font><p><small>
4544
RPMs available
4645
<a href="http://download.opensuse.org/repositories/home:/rmax:/fossil/">
@@ -111,11 +110,11 @@
111110
puts $out "</td></tr>"
112111
}
113112
}
114113
puts $out "<tr><td colspan=5><hr></td></tr>"
115114
116
-puts $out {</table>
115
+puts $out {</table></div>
117116
</body>
118117
</html>
119118
}
120119
121120
close $out
122121
--- www/mkdownload.tcl
+++ www/mkdownload.tcl
@@ -5,42 +5,41 @@
5 #
6 #
7 set out [open download.html w]
8 fconfigure $out -encoding utf-8 -translation lf
9 puts $out \
10 {<!DOCTYPE html><html>
11 <head>
12 <base href="/" />
13 <title>Fossil: Downloads</title>
14 <link rel="stylesheet" href="/fossil/style.css" type="text/css"
15 media="screen">
16 </head>
17 <body>
18 <div class="header">
19 <div class="logo">
20 <img src="/fossil/logo" alt="logo">
21 <br /><nobr>Fossil</nobr>
22 </div>
23
24 <div class="title">Fossil Downloads</div>
25 </div>
26 <div class="mainmenu">
27 <a href='/fossil/doc/trunk/www/index.wiki'>Home</a>
28 <a href='/fossil/timeline?y=ci'>Timeline</a>
29 <a href='/download.html'>Download</a>
30 <a href='/fossil/dir?ci=trunk'>Code</a>
31 <a href='/fossil/doc/trunk/www/permutedindex.html'>Documentation</a>
32 <a href='/fossil/brlist'>Branches</a>
33 <a href='/fossil/taglist'>Tags</a>
34 <a href='/fossil/reportlist'>Tickets</a>
 
35 </div>
36 <div class="content">
37 <p>
38
39 <center><font size=4>}
40 puts $out \
41 "<b>To install Fossil \u2192</b> download the stand-alone executable"
42 puts $out \
43 {and put it on your $PATH.
44 </font><p><small>
45 RPMs available
46 <a href="http://download.opensuse.org/repositories/home:/rmax:/fossil/">
@@ -111,11 +110,11 @@
111 puts $out "</td></tr>"
112 }
113 }
114 puts $out "<tr><td colspan=5><hr></td></tr>"
115
116 puts $out {</table>
117 </body>
118 </html>
119 }
120
121 close $out
122
--- www/mkdownload.tcl
+++ www/mkdownload.tcl
@@ -5,42 +5,41 @@
5 #
6 #
7 set out [open download.html w]
8 fconfigure $out -encoding utf-8 -translation lf
9 puts $out \
10 {<!DOCTYPE html>
11 <html>
12 <head>
13 <base href="https://www.fossil-scm.org/download.html" />
14 <title>Fossil: Download</title>
15 <link rel="alternate" type="application/rss+xml" title="RSS Feed"
16 href="/fossil/timeline.rss" />
17 <link rel="stylesheet" href="/fossil/style.css?default" type="text/css"
18 media="screen" />
19 </head>
20
21 <body>
22 <div class="header">
23 <div class="title"><h1>Fossil</h1>Download</div>
24 </div>
25 <div class="mainmenu">
 
26 <a href='/fossil/doc/trunk/www/index.wiki'>Home</a>
27 <a href='/fossil/timeline?y=ci'>Timeline</a>
28 <a href='/fossil/dir?ci=tip'>Code</a>
29 <a href='/fossil/doc/trunk/www/permutedindex.html'>Docs</a>
 
30 <a href='/fossil/brlist'>Branches</a>
31 <a href='/fossil/ticket'>Tickets</a>
32 <a href='/fossil/wiki'>Wiki</a>
33 <a href='/download.html' class='active'>Download</a>
34 </div>
35 <div class="content">
36 <p>
37
38 <center><font size=4>}
39 puts $out \
40 "<b>To install Fossil &rarr;</b> download the stand-alone executable"
41 puts $out \
42 {and put it on your $PATH.
43 </font><p><small>
44 RPMs available
45 <a href="http://download.opensuse.org/repositories/home:/rmax:/fossil/">
@@ -111,11 +110,11 @@
110 puts $out "</td></tr>"
111 }
112 }
113 puts $out "<tr><td colspan=5><hr></td></tr>"
114
115 puts $out {</table></div>
116 </body>
117 </html>
118 }
119
120 close $out
121
--- www/mkindex.tcl
+++ www/mkindex.tcl
@@ -17,10 +17,11 @@
1717
checkin.wiki {Check-in Checklist}
1818
changes.wiki {Fossil Changelog}
1919
copyright-release.html {Contributor License Agreement}
2020
concepts.wiki {Fossil Core Concepts}
2121
contribute.wiki {Contributing Code or Documentation To The Fossil Project}
22
+ customskin.md {Theming: Customizing The Appearance of Web Pages}
2223
custom_ticket.wiki {Customizing The Ticket System}
2324
delta_encoder_algorithm.wiki {Fossil Delta Encoding Algorithm}
2425
delta_format.wiki {Fossil Delta Format}
2526
embeddeddoc.wiki {Embedded Project Documentation}
2627
event.wiki {Events}
@@ -55,10 +56,11 @@
5556
ssl.wiki {Using SSL with Fossil}
5657
sync.wiki {The Fossil Sync Protocol}
5758
tech_overview.wiki {A Technical Overview Of The Design And Implementation
5859
Of Fossil}
5960
tech_overview.wiki {SQLite Databases Used By Fossil}
61
+ th1.md {The TH1 Scripting Language}
6062
tickets.wiki {The Fossil Ticket System}
6163
theory1.wiki {Thoughts On The Design Of The Fossil DVCS}
6264
webui.wiki {The Fossil Web Interface}
6365
wikitheory.wiki {Wiki In Fossil}
6466
}
6567
--- www/mkindex.tcl
+++ www/mkindex.tcl
@@ -17,10 +17,11 @@
17 checkin.wiki {Check-in Checklist}
18 changes.wiki {Fossil Changelog}
19 copyright-release.html {Contributor License Agreement}
20 concepts.wiki {Fossil Core Concepts}
21 contribute.wiki {Contributing Code or Documentation To The Fossil Project}
 
22 custom_ticket.wiki {Customizing The Ticket System}
23 delta_encoder_algorithm.wiki {Fossil Delta Encoding Algorithm}
24 delta_format.wiki {Fossil Delta Format}
25 embeddeddoc.wiki {Embedded Project Documentation}
26 event.wiki {Events}
@@ -55,10 +56,11 @@
55 ssl.wiki {Using SSL with Fossil}
56 sync.wiki {The Fossil Sync Protocol}
57 tech_overview.wiki {A Technical Overview Of The Design And Implementation
58 Of Fossil}
59 tech_overview.wiki {SQLite Databases Used By Fossil}
 
60 tickets.wiki {The Fossil Ticket System}
61 theory1.wiki {Thoughts On The Design Of The Fossil DVCS}
62 webui.wiki {The Fossil Web Interface}
63 wikitheory.wiki {Wiki In Fossil}
64 }
65
--- www/mkindex.tcl
+++ www/mkindex.tcl
@@ -17,10 +17,11 @@
17 checkin.wiki {Check-in Checklist}
18 changes.wiki {Fossil Changelog}
19 copyright-release.html {Contributor License Agreement}
20 concepts.wiki {Fossil Core Concepts}
21 contribute.wiki {Contributing Code or Documentation To The Fossil Project}
22 customskin.md {Theming: Customizing The Appearance of Web Pages}
23 custom_ticket.wiki {Customizing The Ticket System}
24 delta_encoder_algorithm.wiki {Fossil Delta Encoding Algorithm}
25 delta_format.wiki {Fossil Delta Format}
26 embeddeddoc.wiki {Embedded Project Documentation}
27 event.wiki {Events}
@@ -55,10 +56,11 @@
56 ssl.wiki {Using SSL with Fossil}
57 sync.wiki {The Fossil Sync Protocol}
58 tech_overview.wiki {A Technical Overview Of The Design And Implementation
59 Of Fossil}
60 tech_overview.wiki {SQLite Databases Used By Fossil}
61 th1.md {The TH1 Scripting Language}
62 tickets.wiki {The Fossil Ticket System}
63 theory1.wiki {Thoughts On The Design Of The Fossil DVCS}
64 webui.wiki {The Fossil Web Interface}
65 wikitheory.wiki {Wiki In Fossil}
66 }
67
--- www/permutedindex.html
+++ www/permutedindex.html
@@ -24,10 +24,11 @@
2424
<li><a href="tech_overview.wiki">A Technical Overview Of The Design And Implementation Of Fossil</a></li>
2525
<li><a href="adding_code.wiki">Adding New Features To Fossil</a></li>
2626
<li><a href="antibot.wiki">against Spiders and Bots &mdash; Defense</a></li>
2727
<li><a href="copyright-release.html">Agreement &mdash; Contributor License</a></li>
2828
<li><a href="delta_encoder_algorithm.wiki">Algorithm &mdash; Fossil Delta Encoding</a></li>
29
+<li><a href="customskin.md">Appearance of Web Pages &mdash; Theming: Customizing The</a></li>
2930
<li><a href="fiveminutes.wiki">as a Single User &mdash; Update and Running in 5 Minutes</a></li>
3031
<li><a href="faq.wiki">Asked Questions &mdash; Frequently</a></li>
3132
<li><a href="password.wiki">Authentication &mdash; Password Management And</a></li>
3233
<li><a href="antibot.wiki">Bots &mdash; Defense against Spiders and</a></li>
3334
<li><a href="private.wiki">Branches &mdash; Creating, Syncing, and Deleting Private</a></li>
@@ -51,10 +52,11 @@
5152
<li><a href="copyright-release.html">Contributor License Agreement</a></li>
5253
<li><a href="concepts.wiki">Core Concepts &mdash; Fossil</a></li>
5354
<li><a href="newrepo.wiki">Create A New Fossil Repository &mdash; How To</a></li>
5455
<li><a href="private.wiki">Creating, Syncing, and Deleting Private Branches</a></li>
5556
<li><a href="qandc.wiki">Criticisms &mdash; Questions And</a></li>
57
+<li><a href="customskin.md">Customizing The Appearance of Web Pages &mdash; Theming:</a></li>
5658
<li><a href="custom_ticket.wiki">Customizing The Ticket System</a></li>
5759
<li><a href="tech_overview.wiki">Databases Used By Fossil &mdash; SQLite</a></li>
5860
<li><a href="antibot.wiki">Defense against Spiders and Bots</a></li>
5961
<li><a href="shunning.wiki">Deleting Content From Fossil &mdash; Shunning:</a></li>
6062
<li><a href="private.wiki">Deleting Private Branches &mdash; Creating, Syncing, and</a></li>
@@ -110,10 +112,11 @@
110112
<li><a href="inout.wiki">Import And Export To And From Git</a></li>
111113
<li><a href="build.wiki">Installing Fossil &mdash; Compiling and</a></li>
112114
<li><a href="fossil-from-msvc.wiki">Integrating Fossil in the Microsoft Express 2010 IDE</a></li>
113115
<li><a href="selfcheck.wiki">Integrity Self Checks &mdash; Fossil Repository</a></li>
114116
<li><a href="webui.wiki">Interface &mdash; The Fossil Web</a></li>
117
+<li><a href="th1.md">Language &mdash; The TH1 Scripting</a></li>
115118
<li><a href="copyright-release.html">License Agreement &mdash; Contributor</a></li>
116119
<li><a href="password.wiki">Management And Authentication &mdash; Password</a></li>
117120
<li><a href="branching.wiki">Merging, and Tagging &mdash; Branching, Forking,</a></li>
118121
<li><a href="fossil-from-msvc.wiki">Microsoft Express 2010 IDE &mdash; Integrating Fossil in the</a></li>
119122
<li><a href="fiveminutes.wiki">Minutes as a Single User &mdash; Update and Running in 5</a></li>
@@ -122,10 +125,11 @@
122125
<li><a href="newrepo.wiki">New Fossil Repository &mdash; How To Create A</a></li>
123126
<li><a href="foss-cklist.wiki">Open-Source Projects &mdash; Checklist For Successful</a></li>
124127
<li><a href="pop.wiki">Operations &mdash; Principles Of</a></li>
125128
<li><a href="tech_overview.wiki">Overview Of The Design And Implementation Of Fossil &mdash; A Technical</a></li>
126129
<li><a href="index.wiki">Page &mdash; Home</a></li>
130
+<li><a href="customskin.md">Pages &mdash; Theming: Customizing The Appearance of Web</a></li>
127131
<li><a href="password.wiki">Password Management And Authentication</a></li>
128132
<li><a href="quotes.wiki">People Are Saying About Fossil, Git, and DVCSes in General &mdash; Quotes: What</a></li>
129133
<li><a href="stats.wiki">Performance Statistics</a></li>
130134
<li><a href="../test/release-checklist.wiki">Pre-Release Testing Checklist</a></li>
131135
<li><a href="pop.wiki">Principles Of Operations</a></li>
@@ -143,10 +147,11 @@
143147
<li><a href="newrepo.wiki">Repository &mdash; How To Create A New Fossil</a></li>
144148
<li><a href="selfcheck.wiki">Repository Integrity Self Checks &mdash; Fossil</a></li>
145149
<li><a href="reviews.wiki">Reviews</a></li>
146150
<li><a href="fiveminutes.wiki">Running in 5 Minutes as a Single User &mdash; Update and</a></li>
147151
<li><a href="quotes.wiki">Saying About Fossil, Git, and DVCSes in General &mdash; Quotes: What People Are</a></li>
152
+<li><a href="th1.md">Scripting Language &mdash; The TH1</a></li>
148153
<li><a href="selfcheck.wiki">Self Checks &mdash; Fossil Repository Integrity</a></li>
149154
<li><a href="selfhost.wiki">Self Hosting Repositories &mdash; Fossil</a></li>
150155
<li><a href="server.wiki">Server &mdash; How To Configure A Fossil</a></li>
151156
<li><a href="settings.wiki">Settings &mdash; Fossil</a></li>
152157
<li><a href="shunning.wiki">Shunning: Deleting Content From Fossil</a></li>
@@ -164,14 +169,17 @@
164169
<li><a href="custom_ticket.wiki">System &mdash; Customizing The Ticket</a></li>
165170
<li><a href="tickets.wiki">System &mdash; The Fossil Ticket</a></li>
166171
<li><a href="branching.wiki">Tagging &mdash; Branching, Forking, Merging, and</a></li>
167172
<li><a href="tech_overview.wiki">Technical Overview Of The Design And Implementation Of Fossil &mdash; A</a></li>
168173
<li><a href="../test/release-checklist.wiki">Testing Checklist &mdash; Pre-Release</a></li>
174
+<li><a href="th1.md">TH1 Scripting Language &mdash; The</a></li>
169175
<li><a href="makefile.wiki">The Fossil Build Process</a></li>
170176
<li><a href="sync.wiki">The Fossil Sync Protocol</a></li>
171177
<li><a href="tickets.wiki">The Fossil Ticket System</a></li>
172178
<li><a href="webui.wiki">The Fossil Web Interface</a></li>
179
+<li><a href="th1.md">The TH1 Scripting Language</a></li>
180
+<li><a href="customskin.md">Theming: Customizing The Appearance of Web Pages</a></li>
173181
<li><a href="theory1.wiki">Thoughts On The Design Of The Fossil DVCS</a></li>
174182
<li><a href="custom_ticket.wiki">Ticket System &mdash; Customizing The</a></li>
175183
<li><a href="tickets.wiki">Ticket System &mdash; The Fossil</a></li>
176184
<li><a href="hints.wiki">Tips And Usage Hints &mdash; Fossil</a></li>
177185
<li><a href="bugtheory.wiki">Tracking In Fossil &mdash; Bug</a></li>
@@ -180,9 +188,10 @@
180188
<li><a href="fiveminutes.wiki">User &mdash; Update and Running in 5 Minutes as a Single</a></li>
181189
<li><a href="ssl.wiki">Using SSL with Fossil</a></li>
182190
<li><a href="checkin_names.wiki">Version Names &mdash; Checkin And</a></li>
183191
<li><a href="fossil-v-git.wiki">Versus Git &mdash; Fossil</a></li>
184192
<li><a href="webui.wiki">Web Interface &mdash; The Fossil</a></li>
193
+<li><a href="customskin.md">Web Pages &mdash; Theming: Customizing The Appearance of</a></li>
185194
<li><a href="quotes.wiki">What People Are Saying About Fossil, Git, and DVCSes in General &mdash; Quotes:</a></li>
186195
<li><a href="wikitheory.wiki">Wiki In Fossil</a></li>
187196
<li><a href="ssl.wiki">with Fossil &mdash; Using SSL</a></li>
188197
</ul></div>
189198
--- www/permutedindex.html
+++ www/permutedindex.html
@@ -24,10 +24,11 @@
24 <li><a href="tech_overview.wiki">A Technical Overview Of The Design And Implementation Of Fossil</a></li>
25 <li><a href="adding_code.wiki">Adding New Features To Fossil</a></li>
26 <li><a href="antibot.wiki">against Spiders and Bots &mdash; Defense</a></li>
27 <li><a href="copyright-release.html">Agreement &mdash; Contributor License</a></li>
28 <li><a href="delta_encoder_algorithm.wiki">Algorithm &mdash; Fossil Delta Encoding</a></li>
 
29 <li><a href="fiveminutes.wiki">as a Single User &mdash; Update and Running in 5 Minutes</a></li>
30 <li><a href="faq.wiki">Asked Questions &mdash; Frequently</a></li>
31 <li><a href="password.wiki">Authentication &mdash; Password Management And</a></li>
32 <li><a href="antibot.wiki">Bots &mdash; Defense against Spiders and</a></li>
33 <li><a href="private.wiki">Branches &mdash; Creating, Syncing, and Deleting Private</a></li>
@@ -51,10 +52,11 @@
51 <li><a href="copyright-release.html">Contributor License Agreement</a></li>
52 <li><a href="concepts.wiki">Core Concepts &mdash; Fossil</a></li>
53 <li><a href="newrepo.wiki">Create A New Fossil Repository &mdash; How To</a></li>
54 <li><a href="private.wiki">Creating, Syncing, and Deleting Private Branches</a></li>
55 <li><a href="qandc.wiki">Criticisms &mdash; Questions And</a></li>
 
56 <li><a href="custom_ticket.wiki">Customizing The Ticket System</a></li>
57 <li><a href="tech_overview.wiki">Databases Used By Fossil &mdash; SQLite</a></li>
58 <li><a href="antibot.wiki">Defense against Spiders and Bots</a></li>
59 <li><a href="shunning.wiki">Deleting Content From Fossil &mdash; Shunning:</a></li>
60 <li><a href="private.wiki">Deleting Private Branches &mdash; Creating, Syncing, and</a></li>
@@ -110,10 +112,11 @@
110 <li><a href="inout.wiki">Import And Export To And From Git</a></li>
111 <li><a href="build.wiki">Installing Fossil &mdash; Compiling and</a></li>
112 <li><a href="fossil-from-msvc.wiki">Integrating Fossil in the Microsoft Express 2010 IDE</a></li>
113 <li><a href="selfcheck.wiki">Integrity Self Checks &mdash; Fossil Repository</a></li>
114 <li><a href="webui.wiki">Interface &mdash; The Fossil Web</a></li>
 
115 <li><a href="copyright-release.html">License Agreement &mdash; Contributor</a></li>
116 <li><a href="password.wiki">Management And Authentication &mdash; Password</a></li>
117 <li><a href="branching.wiki">Merging, and Tagging &mdash; Branching, Forking,</a></li>
118 <li><a href="fossil-from-msvc.wiki">Microsoft Express 2010 IDE &mdash; Integrating Fossil in the</a></li>
119 <li><a href="fiveminutes.wiki">Minutes as a Single User &mdash; Update and Running in 5</a></li>
@@ -122,10 +125,11 @@
122 <li><a href="newrepo.wiki">New Fossil Repository &mdash; How To Create A</a></li>
123 <li><a href="foss-cklist.wiki">Open-Source Projects &mdash; Checklist For Successful</a></li>
124 <li><a href="pop.wiki">Operations &mdash; Principles Of</a></li>
125 <li><a href="tech_overview.wiki">Overview Of The Design And Implementation Of Fossil &mdash; A Technical</a></li>
126 <li><a href="index.wiki">Page &mdash; Home</a></li>
 
127 <li><a href="password.wiki">Password Management And Authentication</a></li>
128 <li><a href="quotes.wiki">People Are Saying About Fossil, Git, and DVCSes in General &mdash; Quotes: What</a></li>
129 <li><a href="stats.wiki">Performance Statistics</a></li>
130 <li><a href="../test/release-checklist.wiki">Pre-Release Testing Checklist</a></li>
131 <li><a href="pop.wiki">Principles Of Operations</a></li>
@@ -143,10 +147,11 @@
143 <li><a href="newrepo.wiki">Repository &mdash; How To Create A New Fossil</a></li>
144 <li><a href="selfcheck.wiki">Repository Integrity Self Checks &mdash; Fossil</a></li>
145 <li><a href="reviews.wiki">Reviews</a></li>
146 <li><a href="fiveminutes.wiki">Running in 5 Minutes as a Single User &mdash; Update and</a></li>
147 <li><a href="quotes.wiki">Saying About Fossil, Git, and DVCSes in General &mdash; Quotes: What People Are</a></li>
 
148 <li><a href="selfcheck.wiki">Self Checks &mdash; Fossil Repository Integrity</a></li>
149 <li><a href="selfhost.wiki">Self Hosting Repositories &mdash; Fossil</a></li>
150 <li><a href="server.wiki">Server &mdash; How To Configure A Fossil</a></li>
151 <li><a href="settings.wiki">Settings &mdash; Fossil</a></li>
152 <li><a href="shunning.wiki">Shunning: Deleting Content From Fossil</a></li>
@@ -164,14 +169,17 @@
164 <li><a href="custom_ticket.wiki">System &mdash; Customizing The Ticket</a></li>
165 <li><a href="tickets.wiki">System &mdash; The Fossil Ticket</a></li>
166 <li><a href="branching.wiki">Tagging &mdash; Branching, Forking, Merging, and</a></li>
167 <li><a href="tech_overview.wiki">Technical Overview Of The Design And Implementation Of Fossil &mdash; A</a></li>
168 <li><a href="../test/release-checklist.wiki">Testing Checklist &mdash; Pre-Release</a></li>
 
169 <li><a href="makefile.wiki">The Fossil Build Process</a></li>
170 <li><a href="sync.wiki">The Fossil Sync Protocol</a></li>
171 <li><a href="tickets.wiki">The Fossil Ticket System</a></li>
172 <li><a href="webui.wiki">The Fossil Web Interface</a></li>
 
 
173 <li><a href="theory1.wiki">Thoughts On The Design Of The Fossil DVCS</a></li>
174 <li><a href="custom_ticket.wiki">Ticket System &mdash; Customizing The</a></li>
175 <li><a href="tickets.wiki">Ticket System &mdash; The Fossil</a></li>
176 <li><a href="hints.wiki">Tips And Usage Hints &mdash; Fossil</a></li>
177 <li><a href="bugtheory.wiki">Tracking In Fossil &mdash; Bug</a></li>
@@ -180,9 +188,10 @@
180 <li><a href="fiveminutes.wiki">User &mdash; Update and Running in 5 Minutes as a Single</a></li>
181 <li><a href="ssl.wiki">Using SSL with Fossil</a></li>
182 <li><a href="checkin_names.wiki">Version Names &mdash; Checkin And</a></li>
183 <li><a href="fossil-v-git.wiki">Versus Git &mdash; Fossil</a></li>
184 <li><a href="webui.wiki">Web Interface &mdash; The Fossil</a></li>
 
185 <li><a href="quotes.wiki">What People Are Saying About Fossil, Git, and DVCSes in General &mdash; Quotes:</a></li>
186 <li><a href="wikitheory.wiki">Wiki In Fossil</a></li>
187 <li><a href="ssl.wiki">with Fossil &mdash; Using SSL</a></li>
188 </ul></div>
189
--- www/permutedindex.html
+++ www/permutedindex.html
@@ -24,10 +24,11 @@
24 <li><a href="tech_overview.wiki">A Technical Overview Of The Design And Implementation Of Fossil</a></li>
25 <li><a href="adding_code.wiki">Adding New Features To Fossil</a></li>
26 <li><a href="antibot.wiki">against Spiders and Bots &mdash; Defense</a></li>
27 <li><a href="copyright-release.html">Agreement &mdash; Contributor License</a></li>
28 <li><a href="delta_encoder_algorithm.wiki">Algorithm &mdash; Fossil Delta Encoding</a></li>
29 <li><a href="customskin.md">Appearance of Web Pages &mdash; Theming: Customizing The</a></li>
30 <li><a href="fiveminutes.wiki">as a Single User &mdash; Update and Running in 5 Minutes</a></li>
31 <li><a href="faq.wiki">Asked Questions &mdash; Frequently</a></li>
32 <li><a href="password.wiki">Authentication &mdash; Password Management And</a></li>
33 <li><a href="antibot.wiki">Bots &mdash; Defense against Spiders and</a></li>
34 <li><a href="private.wiki">Branches &mdash; Creating, Syncing, and Deleting Private</a></li>
@@ -51,10 +52,11 @@
52 <li><a href="copyright-release.html">Contributor License Agreement</a></li>
53 <li><a href="concepts.wiki">Core Concepts &mdash; Fossil</a></li>
54 <li><a href="newrepo.wiki">Create A New Fossil Repository &mdash; How To</a></li>
55 <li><a href="private.wiki">Creating, Syncing, and Deleting Private Branches</a></li>
56 <li><a href="qandc.wiki">Criticisms &mdash; Questions And</a></li>
57 <li><a href="customskin.md">Customizing The Appearance of Web Pages &mdash; Theming:</a></li>
58 <li><a href="custom_ticket.wiki">Customizing The Ticket System</a></li>
59 <li><a href="tech_overview.wiki">Databases Used By Fossil &mdash; SQLite</a></li>
60 <li><a href="antibot.wiki">Defense against Spiders and Bots</a></li>
61 <li><a href="shunning.wiki">Deleting Content From Fossil &mdash; Shunning:</a></li>
62 <li><a href="private.wiki">Deleting Private Branches &mdash; Creating, Syncing, and</a></li>
@@ -110,10 +112,11 @@
112 <li><a href="inout.wiki">Import And Export To And From Git</a></li>
113 <li><a href="build.wiki">Installing Fossil &mdash; Compiling and</a></li>
114 <li><a href="fossil-from-msvc.wiki">Integrating Fossil in the Microsoft Express 2010 IDE</a></li>
115 <li><a href="selfcheck.wiki">Integrity Self Checks &mdash; Fossil Repository</a></li>
116 <li><a href="webui.wiki">Interface &mdash; The Fossil Web</a></li>
117 <li><a href="th1.md">Language &mdash; The TH1 Scripting</a></li>
118 <li><a href="copyright-release.html">License Agreement &mdash; Contributor</a></li>
119 <li><a href="password.wiki">Management And Authentication &mdash; Password</a></li>
120 <li><a href="branching.wiki">Merging, and Tagging &mdash; Branching, Forking,</a></li>
121 <li><a href="fossil-from-msvc.wiki">Microsoft Express 2010 IDE &mdash; Integrating Fossil in the</a></li>
122 <li><a href="fiveminutes.wiki">Minutes as a Single User &mdash; Update and Running in 5</a></li>
@@ -122,10 +125,11 @@
125 <li><a href="newrepo.wiki">New Fossil Repository &mdash; How To Create A</a></li>
126 <li><a href="foss-cklist.wiki">Open-Source Projects &mdash; Checklist For Successful</a></li>
127 <li><a href="pop.wiki">Operations &mdash; Principles Of</a></li>
128 <li><a href="tech_overview.wiki">Overview Of The Design And Implementation Of Fossil &mdash; A Technical</a></li>
129 <li><a href="index.wiki">Page &mdash; Home</a></li>
130 <li><a href="customskin.md">Pages &mdash; Theming: Customizing The Appearance of Web</a></li>
131 <li><a href="password.wiki">Password Management And Authentication</a></li>
132 <li><a href="quotes.wiki">People Are Saying About Fossil, Git, and DVCSes in General &mdash; Quotes: What</a></li>
133 <li><a href="stats.wiki">Performance Statistics</a></li>
134 <li><a href="../test/release-checklist.wiki">Pre-Release Testing Checklist</a></li>
135 <li><a href="pop.wiki">Principles Of Operations</a></li>
@@ -143,10 +147,11 @@
147 <li><a href="newrepo.wiki">Repository &mdash; How To Create A New Fossil</a></li>
148 <li><a href="selfcheck.wiki">Repository Integrity Self Checks &mdash; Fossil</a></li>
149 <li><a href="reviews.wiki">Reviews</a></li>
150 <li><a href="fiveminutes.wiki">Running in 5 Minutes as a Single User &mdash; Update and</a></li>
151 <li><a href="quotes.wiki">Saying About Fossil, Git, and DVCSes in General &mdash; Quotes: What People Are</a></li>
152 <li><a href="th1.md">Scripting Language &mdash; The TH1</a></li>
153 <li><a href="selfcheck.wiki">Self Checks &mdash; Fossil Repository Integrity</a></li>
154 <li><a href="selfhost.wiki">Self Hosting Repositories &mdash; Fossil</a></li>
155 <li><a href="server.wiki">Server &mdash; How To Configure A Fossil</a></li>
156 <li><a href="settings.wiki">Settings &mdash; Fossil</a></li>
157 <li><a href="shunning.wiki">Shunning: Deleting Content From Fossil</a></li>
@@ -164,14 +169,17 @@
169 <li><a href="custom_ticket.wiki">System &mdash; Customizing The Ticket</a></li>
170 <li><a href="tickets.wiki">System &mdash; The Fossil Ticket</a></li>
171 <li><a href="branching.wiki">Tagging &mdash; Branching, Forking, Merging, and</a></li>
172 <li><a href="tech_overview.wiki">Technical Overview Of The Design And Implementation Of Fossil &mdash; A</a></li>
173 <li><a href="../test/release-checklist.wiki">Testing Checklist &mdash; Pre-Release</a></li>
174 <li><a href="th1.md">TH1 Scripting Language &mdash; The</a></li>
175 <li><a href="makefile.wiki">The Fossil Build Process</a></li>
176 <li><a href="sync.wiki">The Fossil Sync Protocol</a></li>
177 <li><a href="tickets.wiki">The Fossil Ticket System</a></li>
178 <li><a href="webui.wiki">The Fossil Web Interface</a></li>
179 <li><a href="th1.md">The TH1 Scripting Language</a></li>
180 <li><a href="customskin.md">Theming: Customizing The Appearance of Web Pages</a></li>
181 <li><a href="theory1.wiki">Thoughts On The Design Of The Fossil DVCS</a></li>
182 <li><a href="custom_ticket.wiki">Ticket System &mdash; Customizing The</a></li>
183 <li><a href="tickets.wiki">Ticket System &mdash; The Fossil</a></li>
184 <li><a href="hints.wiki">Tips And Usage Hints &mdash; Fossil</a></li>
185 <li><a href="bugtheory.wiki">Tracking In Fossil &mdash; Bug</a></li>
@@ -180,9 +188,10 @@
188 <li><a href="fiveminutes.wiki">User &mdash; Update and Running in 5 Minutes as a Single</a></li>
189 <li><a href="ssl.wiki">Using SSL with Fossil</a></li>
190 <li><a href="checkin_names.wiki">Version Names &mdash; Checkin And</a></li>
191 <li><a href="fossil-v-git.wiki">Versus Git &mdash; Fossil</a></li>
192 <li><a href="webui.wiki">Web Interface &mdash; The Fossil</a></li>
193 <li><a href="customskin.md">Web Pages &mdash; Theming: Customizing The Appearance of</a></li>
194 <li><a href="quotes.wiki">What People Are Saying About Fossil, Git, and DVCSes in General &mdash; Quotes:</a></li>
195 <li><a href="wikitheory.wiki">Wiki In Fossil</a></li>
196 <li><a href="ssl.wiki">with Fossil &mdash; Using SSL</a></li>
197 </ul></div>
198
--- www/selfcheck.wiki
+++ www/selfcheck.wiki
@@ -44,11 +44,11 @@
4444
new delta-encoding mechanism designed expressly for fossil. We want
4545
to make sure that bugs in these encoding mechanisms do not lead to
4646
loss of data.
4747
4848
To increase our confidence that everything in the repository is
49
-recoverable, fossil makes sure it can extract an exact replicate
49
+recoverable, fossil makes sure it can extract an exact replica
5050
of every content file that it changes just prior to transaction
5151
commit. So during the course of check-in (or other repository
5252
operation) many different files
5353
in the repository might be modified. Some files are simply
5454
compressed. Other files are delta encoded and then compressed.
5555
5656
ADDED www/th1.md
5757
ADDED www/webpage-ex.md
--- www/selfcheck.wiki
+++ www/selfcheck.wiki
@@ -44,11 +44,11 @@
44 new delta-encoding mechanism designed expressly for fossil. We want
45 to make sure that bugs in these encoding mechanisms do not lead to
46 loss of data.
47
48 To increase our confidence that everything in the repository is
49 recoverable, fossil makes sure it can extract an exact replicate
50 of every content file that it changes just prior to transaction
51 commit. So during the course of check-in (or other repository
52 operation) many different files
53 in the repository might be modified. Some files are simply
54 compressed. Other files are delta encoded and then compressed.
55
56 DDED www/th1.md
57 DDED www/webpage-ex.md
--- www/selfcheck.wiki
+++ www/selfcheck.wiki
@@ -44,11 +44,11 @@
44 new delta-encoding mechanism designed expressly for fossil. We want
45 to make sure that bugs in these encoding mechanisms do not lead to
46 loss of data.
47
48 To increase our confidence that everything in the repository is
49 recoverable, fossil makes sure it can extract an exact replica
50 of every content file that it changes just prior to transaction
51 commit. So during the course of check-in (or other repository
52 operation) many different files
53 in the repository might be modified. Some files are simply
54 compressed. Other files are delta encoded and then compressed.
55
56 DDED www/th1.md
57 DDED www/webpage-ex.md
+2
--- a/www/th1.md
+++ b/www/th1.md
@@ -0,0 +1,2 @@
1
+ sCL CLCLCLCLCL. Refer to the
2
+TCL ttpiz_main.c or thsource fileeach each command does.
--- a/www/th1.md
+++ b/www/th1.md
@@ -0,0 +1,2 @@
 
 
--- a/www/th1.md
+++ b/www/th1.md
@@ -0,0 +1,2 @@
1 sCL CLCLCLCLCL. Refer to the
2 TCL ttpiz_main.c or thsource fileeach each command does.
--- a/www/webpage-ex.md
+++ b/www/webpage-ex.md
@@ -0,0 +1,60 @@
1
+Web-Page Examples
2
+============
3
+
4
+Here are just a fewThis is not an exhaustive list.
5
+Exp t<style>
6
+.exbtn {
7
+ border: 1px solid #000;
8
+ margin: 1ex;
9
+ border-radius: 1ex;
10
+ padding: 0 1ex;
11
+ background-color: #eee;
12
+}
13
+</style>
14
+
15
+ * <a tar=25&y=ci&a=1970-01-01'>(Example)</a> &../../..
16
+ Firsy=ci&n=100'>Example</a>ss='exbtn'
17
+ href='$ROOT/tim to see many
18
+other exampl../../..mple</a>>src/file.c</b> source file.
19
+
20
+ * <a target='_blank' class='exbtn'
21
+=200&uf=0c3c2d086a'>(Example)</a> &rarr;
22
+ All check-ins using../../..rticExample</a>merge with that bran source file.
23
+
24
+ * <a target='_blank' class='exbtn'
25
+ href='$ROOT/timeline?n href='$ROOT/timelch.
26
+
27
+ * <a targ../../..-ins betwee/a>roject.)
28
+
29
+ * <a Web-Page Examples
30
+===============
31
+
32
+Here are just a few examples of the many web pages supported
33
+by Fossil. ../../..-ins betwee/a>roject.)
34
+
35
+ * <a target='_blank' class='exbtn'
36
+ hre
37
+
38
+ * <a Web-Page Examples
39
+===============
40
+
41
+Here are just a few examples of the many webrmple)</a> &rarr;
42
+ S ../../..t branch.
43
+
44
+ * <a target='_blank' class='exbtn'
45
+ href='$ROOT/timeline?n=200&tget='_blank' ll check-ins of the "svn-import" branch only.
46
+
47
+ * <aExample</../../..===============
48
+
49
+Here are just a few examples of the many web pages supported
50
+by Fossil. Follow hyperlinks on the examples below t<style>
51
+.exbtn {
52
+ border: 1px solid #000;
53
+ margin: 1ex;
54
+ bordeWeb-Pagen the most direct path from
55
+ versionExample</a>merge with that branclank' class='exbtn'
56
+ href='$ROOT/timeline?namechng'>(Example)</a> &rarr;
57
+ Show check-ins that contain file name changes
58
+
59
+ * <a Example</a>timeline?u=drh&c=2014-01-08&y=ci'>(Example)</a> &rarr;
60
+ S
--- a/www/webpage-ex.md
+++ b/www/webpage-ex.md
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/www/webpage-ex.md
+++ b/www/webpage-ex.md
@@ -0,0 +1,60 @@
1 Web-Page Examples
2 ============
3
4 Here are just a fewThis is not an exhaustive list.
5 Exp t<style>
6 .exbtn {
7 border: 1px solid #000;
8 margin: 1ex;
9 border-radius: 1ex;
10 padding: 0 1ex;
11 background-color: #eee;
12 }
13 </style>
14
15 * <a tar=25&y=ci&a=1970-01-01'>(Example)</a> &../../..
16 Firsy=ci&n=100'>Example</a>ss='exbtn'
17 href='$ROOT/tim to see many
18 other exampl../../..mple</a>>src/file.c</b> source file.
19
20 * <a target='_blank' class='exbtn'
21 =200&uf=0c3c2d086a'>(Example)</a> &rarr;
22 All check-ins using../../..rticExample</a>merge with that bran source file.
23
24 * <a target='_blank' class='exbtn'
25 href='$ROOT/timeline?n href='$ROOT/timelch.
26
27 * <a targ../../..-ins betwee/a>roject.)
28
29 * <a Web-Page Examples
30 ===============
31
32 Here are just a few examples of the many web pages supported
33 by Fossil. ../../..-ins betwee/a>roject.)
34
35 * <a target='_blank' class='exbtn'
36 hre
37
38 * <a Web-Page Examples
39 ===============
40
41 Here are just a few examples of the many webrmple)</a> &rarr;
42 S ../../..t branch.
43
44 * <a target='_blank' class='exbtn'
45 href='$ROOT/timeline?n=200&tget='_blank' ll check-ins of the "svn-import" branch only.
46
47 * <aExample</../../..===============
48
49 Here are just a few examples of the many web pages supported
50 by Fossil. Follow hyperlinks on the examples below t<style>
51 .exbtn {
52 border: 1px solid #000;
53 margin: 1ex;
54 bordeWeb-Pagen the most direct path from
55 versionExample</a>merge with that branclank' class='exbtn'
56 href='$ROOT/timeline?namechng'>(Example)</a> &rarr;
57 Show check-ins that contain file name changes
58
59 * <a Example</a>timeline?u=drh&c=2014-01-08&y=ci'>(Example)</a> &rarr;
60 S
+2 -2
--- www/webui.wiki
+++ www/webui.wiki
@@ -8,19 +8,19 @@
88
* [./wikitheory.wiki | Wiki]
99
* [./embeddeddoc.wiki | On-line documentation]
1010
* Status information
1111
* Timelines
1212
* Graphs of revision and branching history
13
- * [./event.wiki | Blogs, News, and Announcements]
13
+ * [./event.wiki | Technical notes]
1414
* File and version lists and differences
1515
* Download historical versions as ZIP archives
1616
* Historical change data
1717
* Add and remove tags on checkins
1818
* Move checkins between branches
1919
* Revise checkin comments
2020
* Manage user credentials and access permissions
21
- * And so forth...
21
+ * And so forth... (some [./webpage-ex.md|examples])
2222
2323
You get all of this, and more, for free when you use Fossil.
2424
There are no extra programs to install or setup.
2525
Everything you need is already pre-configured and built into the
2626
self-contained, stand-alone Fossil executable.
2727
--- www/webui.wiki
+++ www/webui.wiki
@@ -8,19 +8,19 @@
8 * [./wikitheory.wiki | Wiki]
9 * [./embeddeddoc.wiki | On-line documentation]
10 * Status information
11 * Timelines
12 * Graphs of revision and branching history
13 * [./event.wiki | Blogs, News, and Announcements]
14 * File and version lists and differences
15 * Download historical versions as ZIP archives
16 * Historical change data
17 * Add and remove tags on checkins
18 * Move checkins between branches
19 * Revise checkin comments
20 * Manage user credentials and access permissions
21 * And so forth...
22
23 You get all of this, and more, for free when you use Fossil.
24 There are no extra programs to install or setup.
25 Everything you need is already pre-configured and built into the
26 self-contained, stand-alone Fossil executable.
27
--- www/webui.wiki
+++ www/webui.wiki
@@ -8,19 +8,19 @@
8 * [./wikitheory.wiki | Wiki]
9 * [./embeddeddoc.wiki | On-line documentation]
10 * Status information
11 * Timelines
12 * Graphs of revision and branching history
13 * [./event.wiki | Technical notes]
14 * File and version lists and differences
15 * Download historical versions as ZIP archives
16 * Historical change data
17 * Add and remove tags on checkins
18 * Move checkins between branches
19 * Revise checkin comments
20 * Manage user credentials and access permissions
21 * And so forth... (some [./webpage-ex.md|examples])
22
23 You get all of this, and more, for free when you use Fossil.
24 There are no extra programs to install or setup.
25 Everything you need is already pre-configured and built into the
26 self-contained, stand-alone Fossil executable.
27

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button