Fossil SCM

Pulled in the navbar and timeline changes.

aku 2007-09-17 00:58 trunk merge
Commit bbcb6326c9068b37546503156dc4212ed0c95592
+126
--- ideas.txt
+++ ideas.txt
@@ -1,5 +1,106 @@
1
+Possible ticket file format:
2
+
3
+ "Ticket"
4
+ title: TEXT
5
+ ticketid: TEXT
6
+ exists-in: BASELINE -- 0 or more
7
+ fixed-in: BASELINE -- 0 or more
8
+ tag: TAG -- 0 or more
9
+ created: DATETIME
10
+ attachment: FILENAME DESCRIPTION
11
+ parent: UUID*
12
+ derived-from: TICKET-FILENAME
13
+ description: MULTILINE-TEXT
14
+ remarks: MULTILINE-TEXT
15
+
16
+ * Things handles with tags:
17
+ created-by
18
+ assigned-to
19
+ priority
20
+ severity
21
+ target-release
22
+ status
23
+ resolution
24
+ type
25
+ subsystem
26
+
27
+Wiki header format:
28
+ "WikiPage"
29
+ parent: UUID*
30
+ title: TEXT
31
+ pagename: TEXT
32
+ mode: (readonly|appendonly|readwrite)
33
+ attachment: UUID name description
34
+
35
+ * Header ends with a blank line. wiki content follows.
36
+
37
+Cluster format:
38
+
39
+ M+ uuid
40
+ Z manifest-cksum
41
+
42
+ * Cluster generated in server mode only.
43
+ * Embargo cluster that reference phantoms or other embargoed clusters.
44
+ * Never send or ihave an embargoed cluster
45
+
46
+New sync algorithm based on clusters:
47
+
48
+ * Keep a table of unclustered artifacts. Strive to keep this table
49
+ less than 100 entries.
50
+ * Client sends content of unclustered table as ihaves to server
51
+ * Server builds a new cluster if size of cluster table >100.
52
+ * Server sends unclustered table to client
53
+ * Server sends gimme for all unknown ihave received from client
54
+ * Client sends gimme for all unknown ihave received from server
55
+ * Previous two steps repeat until no more gimmes
56
+
57
+Details of new push algorithm:
58
+
59
+ * Table "unsent" contains all files never pushed
60
+ * TEMP table "wanted" contains files the server does not have
61
+ Loop:
62
+ * Client sends login and "push" record
63
+ * Client sends file message for all files in unsent and removes
64
+ those files from the table.
65
+ * Client sends file message for all files in wanted.
66
+ * Client sends ihave messages for each entry in unclustered
67
+ ------
68
+ * Server receives file message
69
+ * Server creates phantoms for unknown ihaves
70
+ * Server sends gimme messages for all phantoms
71
+ ------
72
+ * Client clears its unsent table
73
+ * For each gimme message add an entry to wanted
74
+ * Halt if the wanted table is empty
75
+
76
+Details on new pull algorithm:
77
+
78
+ Loop:
79
+ * Client sends login and "pull" record
80
+ * Client sends "prior" message with repository id and max record number
81
+ * Client sends "gimme" for each phantom
82
+ --------
83
+ * Server creates new clusters to get unclustered size below 100
84
+ * If there is "prior" message with repository id that matches this
85
+ server, then send file messages for all record ids greater than
86
+ prior
87
+ * Server sends ihave messages for each entry in unclustered
88
+ * Server sends maxrid message
89
+ --------
90
+ * Client receives file records
91
+ * Client creates phantoms for unknown ihaves
92
+ * If no phantoms exist, record maxrid for the server and halt
93
+
94
+Need a dephantomize algorithm
95
+
96
+
97
+Auxiliary tables needed for new sync algorithm:
98
+
99
+ * unsent: files that have never been sent to another repository
100
+ * unclustered: non-phantom files not mentioned by a cluster
101
+
1102
Random thoughts:
2103
3104
* Changes to manifest to support:
4105
+ Trees of wiki pages and tickets
5106
+ The ability to cap or close a branch
@@ -58,10 +159,22 @@
58159
of a checkin, highlight other checkins that are direct (non-merge)
59160
descendents and ancestors of the mouseover checkin.
60161
+ Timeline showing individual branches
61162
+ Timeline shows forks and merges
62163
+ Tags shown on timeline (maybe) and in vinfo (surely).
164
+
165
+Features needed:
166
+ * Means to suppress artifacts
167
+ * Means to cap a branch
168
+ * Ticketing
169
+ + Problem is/is-not expressed in baseline X.
170
+ + Append comment and zero or more attachments
171
+ * Modify comments on baselines
172
+ * Append comments to any artifact
173
+ * Wiki?
174
+
175
+
63176
64177
Extended manifests.
65178
* normal manifest has:
66179
C comment
67180
D date-time
@@ -68,10 +181,23 @@
68181
F* filename uuid
69182
P uuid ... -- omitted for first manifest
70183
R repository-md5sum
71184
U user-login
72185
Z manifest-checksum
186
+
187
+ * Accessory:
188
+ A uuid|* attachment-uuid description
189
+ B (+|-)branchtag uuid
190
+ D date-time
191
+ E uuid new-comment
192
+ G uuid appended-remark
193
+ S repositoryid serial-number
194
+ U userid
195
+ V (+|-)versiontag uuid
196
+ X uuid-to-surpress
197
+ Z this-file-checksum
198
+
73199
* Change the comment on a version: -- always a leaf except in cluster
74200
D date-time
75201
E new-comment
76202
P uuid -- baseline whose comment is changed
77203
U user-login
78204
79205
ADDED src/bag.c
--- ideas.txt
+++ ideas.txt
@@ -1,5 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1 Random thoughts:
2
3 * Changes to manifest to support:
4 + Trees of wiki pages and tickets
5 + The ability to cap or close a branch
@@ -58,10 +159,22 @@
58 of a checkin, highlight other checkins that are direct (non-merge)
59 descendents and ancestors of the mouseover checkin.
60 + Timeline showing individual branches
61 + Timeline shows forks and merges
62 + Tags shown on timeline (maybe) and in vinfo (surely).
 
 
 
 
 
 
 
 
 
 
 
 
63
64 Extended manifests.
65 * normal manifest has:
66 C comment
67 D date-time
@@ -68,10 +181,23 @@
68 F* filename uuid
69 P uuid ... -- omitted for first manifest
70 R repository-md5sum
71 U user-login
72 Z manifest-checksum
 
 
 
 
 
 
 
 
 
 
 
 
 
73 * Change the comment on a version: -- always a leaf except in cluster
74 D date-time
75 E new-comment
76 P uuid -- baseline whose comment is changed
77 U user-login
78
79 DDED src/bag.c
--- ideas.txt
+++ ideas.txt
@@ -1,5 +1,106 @@
1 Possible ticket file format:
2
3 "Ticket"
4 title: TEXT
5 ticketid: TEXT
6 exists-in: BASELINE -- 0 or more
7 fixed-in: BASELINE -- 0 or more
8 tag: TAG -- 0 or more
9 created: DATETIME
10 attachment: FILENAME DESCRIPTION
11 parent: UUID*
12 derived-from: TICKET-FILENAME
13 description: MULTILINE-TEXT
14 remarks: MULTILINE-TEXT
15
16 * Things handles with tags:
17 created-by
18 assigned-to
19 priority
20 severity
21 target-release
22 status
23 resolution
24 type
25 subsystem
26
27 Wiki header format:
28 "WikiPage"
29 parent: UUID*
30 title: TEXT
31 pagename: TEXT
32 mode: (readonly|appendonly|readwrite)
33 attachment: UUID name description
34
35 * Header ends with a blank line. wiki content follows.
36
37 Cluster format:
38
39 M+ uuid
40 Z manifest-cksum
41
42 * Cluster generated in server mode only.
43 * Embargo cluster that reference phantoms or other embargoed clusters.
44 * Never send or ihave an embargoed cluster
45
46 New sync algorithm based on clusters:
47
48 * Keep a table of unclustered artifacts. Strive to keep this table
49 less than 100 entries.
50 * Client sends content of unclustered table as ihaves to server
51 * Server builds a new cluster if size of cluster table >100.
52 * Server sends unclustered table to client
53 * Server sends gimme for all unknown ihave received from client
54 * Client sends gimme for all unknown ihave received from server
55 * Previous two steps repeat until no more gimmes
56
57 Details of new push algorithm:
58
59 * Table "unsent" contains all files never pushed
60 * TEMP table "wanted" contains files the server does not have
61 Loop:
62 * Client sends login and "push" record
63 * Client sends file message for all files in unsent and removes
64 those files from the table.
65 * Client sends file message for all files in wanted.
66 * Client sends ihave messages for each entry in unclustered
67 ------
68 * Server receives file message
69 * Server creates phantoms for unknown ihaves
70 * Server sends gimme messages for all phantoms
71 ------
72 * Client clears its unsent table
73 * For each gimme message add an entry to wanted
74 * Halt if the wanted table is empty
75
76 Details on new pull algorithm:
77
78 Loop:
79 * Client sends login and "pull" record
80 * Client sends "prior" message with repository id and max record number
81 * Client sends "gimme" for each phantom
82 --------
83 * Server creates new clusters to get unclustered size below 100
84 * If there is "prior" message with repository id that matches this
85 server, then send file messages for all record ids greater than
86 prior
87 * Server sends ihave messages for each entry in unclustered
88 * Server sends maxrid message
89 --------
90 * Client receives file records
91 * Client creates phantoms for unknown ihaves
92 * If no phantoms exist, record maxrid for the server and halt
93
94 Need a dephantomize algorithm
95
96
97 Auxiliary tables needed for new sync algorithm:
98
99 * unsent: files that have never been sent to another repository
100 * unclustered: non-phantom files not mentioned by a cluster
101
102 Random thoughts:
103
104 * Changes to manifest to support:
105 + Trees of wiki pages and tickets
106 + The ability to cap or close a branch
@@ -58,10 +159,22 @@
159 of a checkin, highlight other checkins that are direct (non-merge)
160 descendents and ancestors of the mouseover checkin.
161 + Timeline showing individual branches
162 + Timeline shows forks and merges
163 + Tags shown on timeline (maybe) and in vinfo (surely).
164
165 Features needed:
166 * Means to suppress artifacts
167 * Means to cap a branch
168 * Ticketing
169 + Problem is/is-not expressed in baseline X.
170 + Append comment and zero or more attachments
171 * Modify comments on baselines
172 * Append comments to any artifact
173 * Wiki?
174
175
176
177 Extended manifests.
178 * normal manifest has:
179 C comment
180 D date-time
@@ -68,10 +181,23 @@
181 F* filename uuid
182 P uuid ... -- omitted for first manifest
183 R repository-md5sum
184 U user-login
185 Z manifest-checksum
186
187 * Accessory:
188 A uuid|* attachment-uuid description
189 B (+|-)branchtag uuid
190 D date-time
191 E uuid new-comment
192 G uuid appended-remark
193 S repositoryid serial-number
194 U userid
195 V (+|-)versiontag uuid
196 X uuid-to-surpress
197 Z this-file-checksum
198
199 * Change the comment on a version: -- always a leaf except in cluster
200 D date-time
201 E new-comment
202 P uuid -- baseline whose comment is changed
203 U user-login
204
205 DDED src/bag.c
+85
--- a/src/bag.c
+++ b/src/bag.c
@@ -0,0 +1,85 @@
1
+/*
2
+** Copyright (c) 2007 D. /*
3
+** Copyright (c) 2007 D.i/*
4
+** Copyright (c) 2007 D. Richard Hipp
5
+**
6
+** This program is free software; you can redGNU General Public
7
+** License version 2 as published by the Free Software Foundation.
8
+**lified BSD License (also
9
+** known as the "2-Clause License" or "FreeBSD LicWITHOUT ANY WARRANTYhope that it wiMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10
+** General Public License for more details.
11
+**
12
+** You should have received a copy of the GNU General Public
13
+** License along with this library; if not, write to the
14
+** Free Software Foundation, Inc., 59 Temple Place - Suite 330,
15
+** Boston, MA 02111-1307, USACopyright (c) 2007 D. /*
16
+** Copyright (c) 2007 D.i/*
17
+** Copyright (c) 2007 D. Richard Hipp
18
+**
19
+** This program is free software; you can redistribute it and/or
20
+** modify it under the terms of the Simplified BSD License (also
21
+** known as the "2-Clause License" or "FreeBSD License".)
22
+
23
+** This program is distributed in the hope that it will be useful,
24
+** but without any warranty; without even the implied warranty of
25
+** merchantability or fitness for a particular purpose.
26
+**
27
+** Author contact information:
28
+** [email protected]
29
+** http://www.hwaci.co entry.
30
+**
31
+** When an entry is deleted, its value is changedi/*
32
+** Copyright (c) 2007 D. Richard Hipp
33
+**
34
+** This program is free software; you can redistribute it and/or
35
+** modify it under the terms of the Simplified BSD License (also
36
+** known as the "2-Clause License" or "FreeBSD License".)
37
+
38
+** This program is distributed in the hope that it will be useful,
39
+** but without any warranty; without even the implied warranty of
40
+** merchantability or fitness for a particular purpose.
41
+**
42
+** Author contact information:
43
+** [email protected]" or "FreeBSD License".)
44
+
45
+** This program is distributed in the hoprchantability or fitness for a particular purpose.
46
+**
47
+** Author contact information:
48
+** [email protected]
49
+** http://www.hwaci.com/drh/
50
+**
51
+*******************************************************************************
52
+**
53
+** This file contains code used to implement a "bag" of integers.
54
+** A bag is an unordered collection without duplicates. In this
55
+**}
56
+ }nclude <assert.h>
57
+
58
+
59
+#if INTERFACE
60
+/*
61
+** An integer can appear in the bag at most once.
62
+** Integers must be positive.
63
+**
64
+** On a hash collision, search continues to the next slot in the array,
65
+** looping back to the beginning of the array when we reach the end.
66
+** The search stops when a match is found or upon encountering bag_resize(p, p->cnt*2eted, its value is changedi==0 ){
67
+plicates. In this
68
+** the terms of the cense (also
69
+** known as the "2-Clause License" or "FreeBSD License".)
70
+
71
+** This program is distributed in the hope that it will be useful,
72
+** but without any warranty; without even the implied warranty of
73
+** merchantability or fitness for a particular purpose.
74
+**
75
+** Author contact information:
76
+** [email protected]
77
+** http://www.hwaci.com/drh/
78
+**
79
+***************************************/*
80
+** Copyright (c) 2007 D. /*
81
+** Copyright (c) 2007 D.i/*
82
+** Copyright (c) 2007 D. Richard Hipp
83
+**
84
+** This program is free software; you can redistribute it and/or
85
+** modify it under the terms of the Simplified BSD License p->a[h] = -1;sz>2
--- a/src/bag.c
+++ b/src/bag.c
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/src/bag.c
+++ b/src/bag.c
@@ -0,0 +1,85 @@
1 /*
2 ** Copyright (c) 2007 D. /*
3 ** Copyright (c) 2007 D.i/*
4 ** Copyright (c) 2007 D. Richard Hipp
5 **
6 ** This program is free software; you can redGNU General Public
7 ** License version 2 as published by the Free Software Foundation.
8 **lified BSD License (also
9 ** known as the "2-Clause License" or "FreeBSD LicWITHOUT ANY WARRANTYhope that it wiMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10 ** General Public License for more details.
11 **
12 ** You should have received a copy of the GNU General Public
13 ** License along with this library; if not, write to the
14 ** Free Software Foundation, Inc., 59 Temple Place - Suite 330,
15 ** Boston, MA 02111-1307, USACopyright (c) 2007 D. /*
16 ** Copyright (c) 2007 D.i/*
17 ** Copyright (c) 2007 D. Richard Hipp
18 **
19 ** This program is free software; you can redistribute it and/or
20 ** modify it under the terms of the Simplified BSD License (also
21 ** known as the "2-Clause License" or "FreeBSD License".)
22
23 ** This program is distributed in the hope that it will be useful,
24 ** but without any warranty; without even the implied warranty of
25 ** merchantability or fitness for a particular purpose.
26 **
27 ** Author contact information:
28 ** [email protected]
29 ** http://www.hwaci.co entry.
30 **
31 ** When an entry is deleted, its value is changedi/*
32 ** Copyright (c) 2007 D. Richard Hipp
33 **
34 ** This program is free software; you can redistribute it and/or
35 ** modify it under the terms of the Simplified BSD License (also
36 ** known as the "2-Clause License" or "FreeBSD License".)
37
38 ** This program is distributed in the hope that it will be useful,
39 ** but without any warranty; without even the implied warranty of
40 ** merchantability or fitness for a particular purpose.
41 **
42 ** Author contact information:
43 ** [email protected]" or "FreeBSD License".)
44
45 ** This program is distributed in the hoprchantability or fitness for a particular purpose.
46 **
47 ** Author contact information:
48 ** [email protected]
49 ** http://www.hwaci.com/drh/
50 **
51 *******************************************************************************
52 **
53 ** This file contains code used to implement a "bag" of integers.
54 ** A bag is an unordered collection without duplicates. In this
55 **}
56 }nclude <assert.h>
57
58
59 #if INTERFACE
60 /*
61 ** An integer can appear in the bag at most once.
62 ** Integers must be positive.
63 **
64 ** On a hash collision, search continues to the next slot in the array,
65 ** looping back to the beginning of the array when we reach the end.
66 ** The search stops when a match is found or upon encountering bag_resize(p, p->cnt*2eted, its value is changedi==0 ){
67 plicates. In this
68 ** the terms of the cense (also
69 ** known as the "2-Clause License" or "FreeBSD License".)
70
71 ** This program is distributed in the hope that it will be useful,
72 ** but without any warranty; without even the implied warranty of
73 ** merchantability or fitness for a particular purpose.
74 **
75 ** Author contact information:
76 ** [email protected]
77 ** http://www.hwaci.com/drh/
78 **
79 ***************************************/*
80 ** Copyright (c) 2007 D. /*
81 ** Copyright (c) 2007 D.i/*
82 ** Copyright (c) 2007 D. Richard Hipp
83 **
84 ** This program is free software; you can redistribute it and/or
85 ** modify it under the terms of the Simplified BSD License p->a[h] = -1;sz>2
--- src/checkin.c
+++ src/checkin.c
@@ -391,10 +391,11 @@
391391
nrid = content_put(&content, 0, 0);
392392
if( rid>0 ){
393393
content_deltify(rid, nrid, 0);
394394
}
395395
db_multi_exec("UPDATE vfile SET mrid=%d, rid=%d WHERE id=%d", nrid,nrid,id);
396
+ db_multi_exec("INSERT OR IGNORE INTO unsent VALUES(%d)", nrid);
396397
}
397398
db_finalize(&q);
398399
399400
/* Create the manifest */
400401
blob_zero(&manifest);
@@ -451,10 +452,11 @@
451452
free(zManifestFile);
452453
nvid = content_put(&manifest, 0, 0);
453454
if( nvid==0 ){
454455
fossil_panic("trouble committing manifest: %s", g.zErrMsg);
455456
}
457
+ db_multi_exec("INSERT OR IGNORE INTO unsent VALUES(%d)", nvid);
456458
manifest_crosslink(nvid, &manifest);
457459
content_deltify(vid, nvid, 0);
458460
zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", nvid);
459461
printf("New_Version: %s\n", zUuid);
460462
zManifestFile = mprintf("%smanifest.uuid", g.zLocalRoot);
461463
--- src/checkin.c
+++ src/checkin.c
@@ -391,10 +391,11 @@
391 nrid = content_put(&content, 0, 0);
392 if( rid>0 ){
393 content_deltify(rid, nrid, 0);
394 }
395 db_multi_exec("UPDATE vfile SET mrid=%d, rid=%d WHERE id=%d", nrid,nrid,id);
 
396 }
397 db_finalize(&q);
398
399 /* Create the manifest */
400 blob_zero(&manifest);
@@ -451,10 +452,11 @@
451 free(zManifestFile);
452 nvid = content_put(&manifest, 0, 0);
453 if( nvid==0 ){
454 fossil_panic("trouble committing manifest: %s", g.zErrMsg);
455 }
 
456 manifest_crosslink(nvid, &manifest);
457 content_deltify(vid, nvid, 0);
458 zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", nvid);
459 printf("New_Version: %s\n", zUuid);
460 zManifestFile = mprintf("%smanifest.uuid", g.zLocalRoot);
461
--- src/checkin.c
+++ src/checkin.c
@@ -391,10 +391,11 @@
391 nrid = content_put(&content, 0, 0);
392 if( rid>0 ){
393 content_deltify(rid, nrid, 0);
394 }
395 db_multi_exec("UPDATE vfile SET mrid=%d, rid=%d WHERE id=%d", nrid,nrid,id);
396 db_multi_exec("INSERT OR IGNORE INTO unsent VALUES(%d)", nrid);
397 }
398 db_finalize(&q);
399
400 /* Create the manifest */
401 blob_zero(&manifest);
@@ -451,10 +452,11 @@
452 free(zManifestFile);
453 nvid = content_put(&manifest, 0, 0);
454 if( nvid==0 ){
455 fossil_panic("trouble committing manifest: %s", g.zErrMsg);
456 }
457 db_multi_exec("INSERT OR IGNORE INTO unsent VALUES(%d)", nvid);
458 manifest_crosslink(nvid, &manifest);
459 content_deltify(vid, nvid, 0);
460 zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", nvid);
461 printf("New_Version: %s\n", zUuid);
462 zManifestFile = mprintf("%smanifest.uuid", g.zLocalRoot);
463
--- src/content.c
+++ src/content.c
@@ -154,10 +154,12 @@
154154
int size;
155155
int rid;
156156
Stmt s1;
157157
Blob cmpr;
158158
Blob hash;
159
+ int markAsUnclustered = 0;
160
+
159161
assert( g.repositoryOpen );
160162
if( pBlob && srcId==0 ){
161163
sha1sum_blob(pBlob, &hash);
162164
}else{
163165
blob_init(&hash, zUuid, -1);
@@ -183,10 +185,11 @@
183185
db_end_transaction(0);
184186
return rid;
185187
}
186188
}else{
187189
rid = 0; /* No entry with the same UUID currently exists */
190
+ markAsUnclustered = 1;
188191
}
189192
db_finalize(&s1);
190193
191194
/* Construct a received-from ID if we do not already have one */
192195
if( g.rcvid==0 && pBlob!=0 ){
@@ -234,10 +237,17 @@
234237
** really a delta. Record this fact in the delta table.
235238
*/
236239
if( srcId ){
237240
db_multi_exec("REPLACE INTO delta(rid,srcid) VALUES(%d,%d)", rid, srcId);
238241
}
242
+
243
+ /* Add the element to the unclustered table if has never been
244
+ ** previously seen.
245
+ */
246
+ if( markAsUnclustered ){
247
+ db_multi_exec("INSERT OR IGNORE INTO unclustered VALUES(%d)", rid);
248
+ }
239249
240250
/* Finish the transaction and cleanup */
241251
db_finalize(&s1);
242252
db_end_transaction(0);
243253
blob_reset(&hash);
244254
--- src/content.c
+++ src/content.c
@@ -154,10 +154,12 @@
154 int size;
155 int rid;
156 Stmt s1;
157 Blob cmpr;
158 Blob hash;
 
 
159 assert( g.repositoryOpen );
160 if( pBlob && srcId==0 ){
161 sha1sum_blob(pBlob, &hash);
162 }else{
163 blob_init(&hash, zUuid, -1);
@@ -183,10 +185,11 @@
183 db_end_transaction(0);
184 return rid;
185 }
186 }else{
187 rid = 0; /* No entry with the same UUID currently exists */
 
188 }
189 db_finalize(&s1);
190
191 /* Construct a received-from ID if we do not already have one */
192 if( g.rcvid==0 && pBlob!=0 ){
@@ -234,10 +237,17 @@
234 ** really a delta. Record this fact in the delta table.
235 */
236 if( srcId ){
237 db_multi_exec("REPLACE INTO delta(rid,srcid) VALUES(%d,%d)", rid, srcId);
238 }
 
 
 
 
 
 
 
239
240 /* Finish the transaction and cleanup */
241 db_finalize(&s1);
242 db_end_transaction(0);
243 blob_reset(&hash);
244
--- src/content.c
+++ src/content.c
@@ -154,10 +154,12 @@
154 int size;
155 int rid;
156 Stmt s1;
157 Blob cmpr;
158 Blob hash;
159 int markAsUnclustered = 0;
160
161 assert( g.repositoryOpen );
162 if( pBlob && srcId==0 ){
163 sha1sum_blob(pBlob, &hash);
164 }else{
165 blob_init(&hash, zUuid, -1);
@@ -183,10 +185,11 @@
185 db_end_transaction(0);
186 return rid;
187 }
188 }else{
189 rid = 0; /* No entry with the same UUID currently exists */
190 markAsUnclustered = 1;
191 }
192 db_finalize(&s1);
193
194 /* Construct a received-from ID if we do not already have one */
195 if( g.rcvid==0 && pBlob!=0 ){
@@ -234,10 +237,17 @@
237 ** really a delta. Record this fact in the delta table.
238 */
239 if( srcId ){
240 db_multi_exec("REPLACE INTO delta(rid,srcid) VALUES(%d,%d)", rid, srcId);
241 }
242
243 /* Add the element to the unclustered table if has never been
244 ** previously seen.
245 */
246 if( markAsUnclustered ){
247 db_multi_exec("INSERT OR IGNORE INTO unclustered VALUES(%d)", rid);
248 }
249
250 /* Finish the transaction and cleanup */
251 db_finalize(&s1);
252 db_end_transaction(0);
253 blob_reset(&hash);
254
+1 -1
--- src/db.c
+++ src/db.c
@@ -257,11 +257,11 @@
257257
return sqlite3_column_double(pStmt->pStmt, N);
258258
}
259259
const char *db_column_text(Stmt *pStmt, int N){
260260
return (char*)sqlite3_column_text(pStmt->pStmt, N);
261261
}
262
-const char *db_column_malloc(Stmt *pStmt, int N){
262
+char *db_column_malloc(Stmt *pStmt, int N){
263263
return mprintf("%s", db_column_text(pStmt, N));
264264
}
265265
void db_column_blob(Stmt *pStmt, int N, Blob *pBlob){
266266
blob_append(pBlob, sqlite3_column_blob(pStmt->pStmt, N),
267267
sqlite3_column_bytes(pStmt->pStmt, N));
268268
--- src/db.c
+++ src/db.c
@@ -257,11 +257,11 @@
257 return sqlite3_column_double(pStmt->pStmt, N);
258 }
259 const char *db_column_text(Stmt *pStmt, int N){
260 return (char*)sqlite3_column_text(pStmt->pStmt, N);
261 }
262 const char *db_column_malloc(Stmt *pStmt, int N){
263 return mprintf("%s", db_column_text(pStmt, N));
264 }
265 void db_column_blob(Stmt *pStmt, int N, Blob *pBlob){
266 blob_append(pBlob, sqlite3_column_blob(pStmt->pStmt, N),
267 sqlite3_column_bytes(pStmt->pStmt, N));
268
--- src/db.c
+++ src/db.c
@@ -257,11 +257,11 @@
257 return sqlite3_column_double(pStmt->pStmt, N);
258 }
259 const char *db_column_text(Stmt *pStmt, int N){
260 return (char*)sqlite3_column_text(pStmt->pStmt, N);
261 }
262 char *db_column_malloc(Stmt *pStmt, int N){
263 return mprintf("%s", db_column_text(pStmt, N));
264 }
265 void db_column_blob(Stmt *pStmt, int N, Blob *pBlob){
266 blob_append(pBlob, sqlite3_column_blob(pStmt->pStmt, N),
267 sqlite3_column_bytes(pStmt->pStmt, N));
268
+3 -2
--- src/delta.c
+++ src/delta.c
@@ -340,15 +340,16 @@
340340
hash_init(&h, &zOut[base]);
341341
i = 0; /* Trying to match a landmark against zOut[base+i] */
342342
bestCnt = 0;
343343
while( 1 ){
344344
int hv;
345
+ int limit = 250;
345346
346347
hv = hash_32bit(&h) & (MX_LANDMARK-1);
347348
DEBUG2( printf("LOOKING: %4d [%s]\n", base+i, print16(&zOut[base+i])); )
348349
iBlock = landmark[hv];
349
- while( iBlock>=0 ){
350
+ while( iBlock>=0 && (limit--)>0 ){
350351
/*
351352
** The hash window has identified a potential match against
352353
** landmark block iBlock. But we need to investigate further.
353354
**
354355
** Look for a region in zOut that matches zSrc. Anchor the search
@@ -404,11 +405,11 @@
404405
}
405406
406407
/* We have a copy command that does not cause the delta to be larger
407408
** than a literal insert. So add the copy command to the delta.
408409
*/
409
- if( bestCnt>0 && base+i>=bestOfst+NHASH ){
410
+ if( bestCnt>0 ){
410411
if( bestLitsz>0 ){
411412
/* Add an insert command before the copy */
412413
putInt(bestLitsz,&zDelta);
413414
*(zDelta++) = ':';
414415
memcpy(zDelta, &zOut[base], bestLitsz);
415416
--- src/delta.c
+++ src/delta.c
@@ -340,15 +340,16 @@
340 hash_init(&h, &zOut[base]);
341 i = 0; /* Trying to match a landmark against zOut[base+i] */
342 bestCnt = 0;
343 while( 1 ){
344 int hv;
 
345
346 hv = hash_32bit(&h) & (MX_LANDMARK-1);
347 DEBUG2( printf("LOOKING: %4d [%s]\n", base+i, print16(&zOut[base+i])); )
348 iBlock = landmark[hv];
349 while( iBlock>=0 ){
350 /*
351 ** The hash window has identified a potential match against
352 ** landmark block iBlock. But we need to investigate further.
353 **
354 ** Look for a region in zOut that matches zSrc. Anchor the search
@@ -404,11 +405,11 @@
404 }
405
406 /* We have a copy command that does not cause the delta to be larger
407 ** than a literal insert. So add the copy command to the delta.
408 */
409 if( bestCnt>0 && base+i>=bestOfst+NHASH ){
410 if( bestLitsz>0 ){
411 /* Add an insert command before the copy */
412 putInt(bestLitsz,&zDelta);
413 *(zDelta++) = ':';
414 memcpy(zDelta, &zOut[base], bestLitsz);
415
--- src/delta.c
+++ src/delta.c
@@ -340,15 +340,16 @@
340 hash_init(&h, &zOut[base]);
341 i = 0; /* Trying to match a landmark against zOut[base+i] */
342 bestCnt = 0;
343 while( 1 ){
344 int hv;
345 int limit = 250;
346
347 hv = hash_32bit(&h) & (MX_LANDMARK-1);
348 DEBUG2( printf("LOOKING: %4d [%s]\n", base+i, print16(&zOut[base+i])); )
349 iBlock = landmark[hv];
350 while( iBlock>=0 && (limit--)>0 ){
351 /*
352 ** The hash window has identified a potential match against
353 ** landmark block iBlock. But we need to investigate further.
354 **
355 ** Look for a region in zOut that matches zSrc. Anchor the search
@@ -404,11 +405,11 @@
405 }
406
407 /* We have a copy command that does not cause the delta to be larger
408 ** than a literal insert. So add the copy command to the delta.
409 */
410 if( bestCnt>0 ){
411 if( bestLitsz>0 ){
412 /* Add an insert command before the copy */
413 putInt(bestLitsz,&zDelta);
414 *(zDelta++) = ':';
415 memcpy(zDelta, &zOut[base], bestLitsz);
416
+90 -23
--- src/descendents.c
+++ src/descendents.c
@@ -30,40 +30,105 @@
3030
3131
3232
/*
3333
** Create a temporary table named "leaves" if it does not
3434
** already exist. Load this table with the RID of all
35
-** versions that are leaves are which are decended from
35
+** versions that are leaves which are decended from
3636
** version iBase.
3737
*/
3838
void compute_leaves(int iBase){
39
- int generation = 0;
40
- int chngCnt = 0;
39
+ Bag seen; /* Descendents seen */
40
+ Bag pending; /* Unpropagated descendents */
4141
4242
db_multi_exec(
4343
"CREATE TEMP TABLE IF NOT EXISTS leaves("
44
- " rid INTEGER PRIMARY KEY,"
45
- " generation INTEGER"
44
+ " rid INTEGER PRIMARY KEY"
4645
");"
4746
"DELETE FROM leaves;"
48
- "INSERT INTO leaves VALUES(%d,0);",
49
- iBase
50
- );
51
- do{
52
- db_multi_exec(
53
- "INSERT OR IGNORE INTO leaves(rid,generation) "
54
- "SELECT cid, %d FROM plink"
55
- " WHERE pid IN (SELECT rid FROM leaves WHERE generation=%d)",
56
- generation+1, generation
57
- );
58
- generation++;
59
- chngCnt = db_changes();
60
- }while( chngCnt>0 );
61
- db_multi_exec(
62
- "DELETE FROM leaves"
63
- " WHERE EXISTS(SELECT 1 FROM plink WHERE pid=rid)"
64
- );
47
+ );
48
+ bag_init(&seen);
49
+ bag_init(&pending);
50
+ bag_insert(&pending, iBase);
51
+ while( bag_count(&pending) ){
52
+ int rid = bag_first(&pending);
53
+ int cnt = 0;
54
+ Stmt q;
55
+ bag_remove(&pending, rid);
56
+ db_prepare(&q, "SELECT cid FROM plink WHERE pid=%d", rid);
57
+ while( db_step(&q)==SQLITE_ROW ){
58
+ int cid = db_column_int(&q, 0);
59
+ if( bag_insert(&seen, cid) ){
60
+ bag_insert(&pending, cid);
61
+ }
62
+ cnt++;
63
+ }
64
+ db_finalize(&q);
65
+ if( cnt==0 ){
66
+ db_multi_exec("INSERT INTO leaves VALUES(%d)", rid);
67
+ }
68
+ }
69
+ bag_clear(&pending);
70
+ bag_clear(&seen);
71
+}
72
+
73
+/*
74
+** Load the record ID rid and up to N-1 closest ancestors into
75
+** the "ok" table.
76
+*/
77
+void compute_ancestors(int rid, int N){
78
+ Bag seen;
79
+ PQueue queue;
80
+ bag_init(&seen);
81
+ pqueue_init(&queue);
82
+ bag_insert(&seen, rid);
83
+ pqueue_insert(&queue, rid, 0.0);
84
+ while( (N--)>0 && (rid = pqueue_extract(&queue))!=0 ){
85
+ Stmt q;
86
+ db_multi_exec("INSERT OR IGNORE INTO ok VALUES(%d)", rid);
87
+ db_prepare(&q,
88
+ "SELECT a.pid, b.mtime FROM plink a LEFT JOIN plink b ON b.cid=a.pid"
89
+ " WHERE a.cid=%d", rid
90
+ );
91
+ while( db_step(&q)==SQLITE_ROW ){
92
+ int pid = db_column_int(&q, 0);
93
+ double mtime = db_column_double(&q, 1);
94
+ if( bag_insert(&seen, pid) ){
95
+ pqueue_insert(&queue, pid, -mtime);
96
+ }
97
+ }
98
+ db_finalize(&q);
99
+ }
100
+ bag_clear(&seen);
101
+ pqueue_clear(&queue);
102
+}
103
+
104
+/*
105
+** Load the record ID rid and up to N-1 closest descendents into
106
+** the "ok" table.
107
+*/
108
+void compute_descendents(int rid, int N){
109
+ Bag seen;
110
+ PQueue queue;
111
+ bag_init(&seen);
112
+ pqueue_init(&queue);
113
+ bag_insert(&seen, rid);
114
+ pqueue_insert(&queue, rid, 0.0);
115
+ while( (N--)>0 && (rid = pqueue_extract(&queue))!=0 ){
116
+ Stmt q;
117
+ db_multi_exec("INSERT OR IGNORE INTO ok VALUES(%d)", rid);
118
+ db_prepare(&q,"SELECT cid, mtime FROM plink WHERE pid=%d", rid);
119
+ while( db_step(&q)==SQLITE_ROW ){
120
+ int pid = db_column_int(&q, 0);
121
+ double mtime = db_column_double(&q, 1);
122
+ if( bag_insert(&seen, pid) ){
123
+ pqueue_insert(&queue, pid, mtime);
124
+ }
125
+ }
126
+ db_finalize(&q);
127
+ }
128
+ bag_clear(&seen);
129
+ pqueue_clear(&queue);
65130
}
66131
67132
/*
68133
** COMMAND: leaves
69134
**
@@ -117,12 +182,13 @@
117182
);
118183
print_timeline(&q, 20);
119184
db_finalize(&q);
120185
}
121186
187
+#if 0
122188
/*
123
-** WEBPAGE: leaves
189
+** WEB PAGE: leaves
124190
**
125191
** Find leaves of all branches.
126192
*/
127193
void branches_page(void){
128194
Stmt q;
@@ -148,5 +214,6 @@
148214
@ function xout(id){
149215
@ }
150216
@ </script>
151217
style_footer();
152218
}
219
+#endif
153220
--- src/descendents.c
+++ src/descendents.c
@@ -30,40 +30,105 @@
30
31
32 /*
33 ** Create a temporary table named "leaves" if it does not
34 ** already exist. Load this table with the RID of all
35 ** versions that are leaves are which are decended from
36 ** version iBase.
37 */
38 void compute_leaves(int iBase){
39 int generation = 0;
40 int chngCnt = 0;
41
42 db_multi_exec(
43 "CREATE TEMP TABLE IF NOT EXISTS leaves("
44 " rid INTEGER PRIMARY KEY,"
45 " generation INTEGER"
46 ");"
47 "DELETE FROM leaves;"
48 "INSERT INTO leaves VALUES(%d,0);",
49 iBase
50 );
51 do{
52 db_multi_exec(
53 "INSERT OR IGNORE INTO leaves(rid,generation) "
54 "SELECT cid, %d FROM plink"
55 " WHERE pid IN (SELECT rid FROM leaves WHERE generation=%d)",
56 generation+1, generation
57 );
58 generation++;
59 chngCnt = db_changes();
60 }while( chngCnt>0 );
61 db_multi_exec(
62 "DELETE FROM leaves"
63 " WHERE EXISTS(SELECT 1 FROM plink WHERE pid=rid)"
64 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65 }
66
67 /*
68 ** COMMAND: leaves
69 **
@@ -117,12 +182,13 @@
117 );
118 print_timeline(&q, 20);
119 db_finalize(&q);
120 }
121
 
122 /*
123 ** WEBPAGE: leaves
124 **
125 ** Find leaves of all branches.
126 */
127 void branches_page(void){
128 Stmt q;
@@ -148,5 +214,6 @@
148 @ function xout(id){
149 @ }
150 @ </script>
151 style_footer();
152 }
 
153
--- src/descendents.c
+++ src/descendents.c
@@ -30,40 +30,105 @@
30
31
32 /*
33 ** Create a temporary table named "leaves" if it does not
34 ** already exist. Load this table with the RID of all
35 ** versions that are leaves which are decended from
36 ** version iBase.
37 */
38 void compute_leaves(int iBase){
39 Bag seen; /* Descendents seen */
40 Bag pending; /* Unpropagated descendents */
41
42 db_multi_exec(
43 "CREATE TEMP TABLE IF NOT EXISTS leaves("
44 " rid INTEGER PRIMARY KEY"
 
45 ");"
46 "DELETE FROM leaves;"
47 );
48 bag_init(&seen);
49 bag_init(&pending);
50 bag_insert(&pending, iBase);
51 while( bag_count(&pending) ){
52 int rid = bag_first(&pending);
53 int cnt = 0;
54 Stmt q;
55 bag_remove(&pending, rid);
56 db_prepare(&q, "SELECT cid FROM plink WHERE pid=%d", rid);
57 while( db_step(&q)==SQLITE_ROW ){
58 int cid = db_column_int(&q, 0);
59 if( bag_insert(&seen, cid) ){
60 bag_insert(&pending, cid);
61 }
62 cnt++;
63 }
64 db_finalize(&q);
65 if( cnt==0 ){
66 db_multi_exec("INSERT INTO leaves VALUES(%d)", rid);
67 }
68 }
69 bag_clear(&pending);
70 bag_clear(&seen);
71 }
72
73 /*
74 ** Load the record ID rid and up to N-1 closest ancestors into
75 ** the "ok" table.
76 */
77 void compute_ancestors(int rid, int N){
78 Bag seen;
79 PQueue queue;
80 bag_init(&seen);
81 pqueue_init(&queue);
82 bag_insert(&seen, rid);
83 pqueue_insert(&queue, rid, 0.0);
84 while( (N--)>0 && (rid = pqueue_extract(&queue))!=0 ){
85 Stmt q;
86 db_multi_exec("INSERT OR IGNORE INTO ok VALUES(%d)", rid);
87 db_prepare(&q,
88 "SELECT a.pid, b.mtime FROM plink a LEFT JOIN plink b ON b.cid=a.pid"
89 " WHERE a.cid=%d", rid
90 );
91 while( db_step(&q)==SQLITE_ROW ){
92 int pid = db_column_int(&q, 0);
93 double mtime = db_column_double(&q, 1);
94 if( bag_insert(&seen, pid) ){
95 pqueue_insert(&queue, pid, -mtime);
96 }
97 }
98 db_finalize(&q);
99 }
100 bag_clear(&seen);
101 pqueue_clear(&queue);
102 }
103
104 /*
105 ** Load the record ID rid and up to N-1 closest descendents into
106 ** the "ok" table.
107 */
108 void compute_descendents(int rid, int N){
109 Bag seen;
110 PQueue queue;
111 bag_init(&seen);
112 pqueue_init(&queue);
113 bag_insert(&seen, rid);
114 pqueue_insert(&queue, rid, 0.0);
115 while( (N--)>0 && (rid = pqueue_extract(&queue))!=0 ){
116 Stmt q;
117 db_multi_exec("INSERT OR IGNORE INTO ok VALUES(%d)", rid);
118 db_prepare(&q,"SELECT cid, mtime FROM plink WHERE pid=%d", rid);
119 while( db_step(&q)==SQLITE_ROW ){
120 int pid = db_column_int(&q, 0);
121 double mtime = db_column_double(&q, 1);
122 if( bag_insert(&seen, pid) ){
123 pqueue_insert(&queue, pid, mtime);
124 }
125 }
126 db_finalize(&q);
127 }
128 bag_clear(&seen);
129 pqueue_clear(&queue);
130 }
131
132 /*
133 ** COMMAND: leaves
134 **
@@ -117,12 +182,13 @@
182 );
183 print_timeline(&q, 20);
184 db_finalize(&q);
185 }
186
187 #if 0
188 /*
189 ** WEB PAGE: leaves
190 **
191 ** Find leaves of all branches.
192 */
193 void branches_page(void){
194 Stmt q;
@@ -148,5 +214,6 @@
214 @ function xout(id){
215 @ }
216 @ </script>
217 style_footer();
218 }
219 #endif
220
+4 -3
--- src/info.c
+++ src/info.c
@@ -211,11 +211,10 @@
211211
" event.user, event.comment"
212212
" FROM leaves, plink, blob, event"
213213
" WHERE plink.cid=leaves.rid"
214214
" AND blob.rid=leaves.rid"
215215
" AND event.objid=leaves.rid"
216
- " AND +generation>0"
217216
" ORDER BY event.mtime DESC"
218217
);
219218
while( db_step(&q)==SQLITE_ROW ){
220219
const char *zUuid = db_column_text(&q, 0);
221220
const char *zDate = db_column_text(&q, 1);
@@ -536,12 +535,14 @@
536535
style_footer();
537536
}
538537
539538
/*
540539
** WEBPAGE: fview
541
-**
542
-** Show the complete content of a file identified by g.zExtra
540
+** URL: /fview/UUID
541
+**
542
+** Show the complete content of a file identified by UUID
543
+** as preformatted text.
543544
*/
544545
void fview_page(void){
545546
int rid;
546547
Blob content;
547548
548549
--- src/info.c
+++ src/info.c
@@ -211,11 +211,10 @@
211 " event.user, event.comment"
212 " FROM leaves, plink, blob, event"
213 " WHERE plink.cid=leaves.rid"
214 " AND blob.rid=leaves.rid"
215 " AND event.objid=leaves.rid"
216 " AND +generation>0"
217 " ORDER BY event.mtime DESC"
218 );
219 while( db_step(&q)==SQLITE_ROW ){
220 const char *zUuid = db_column_text(&q, 0);
221 const char *zDate = db_column_text(&q, 1);
@@ -536,12 +535,14 @@
536 style_footer();
537 }
538
539 /*
540 ** WEBPAGE: fview
541 **
542 ** Show the complete content of a file identified by g.zExtra
 
 
543 */
544 void fview_page(void){
545 int rid;
546 Blob content;
547
548
--- src/info.c
+++ src/info.c
@@ -211,11 +211,10 @@
211 " event.user, event.comment"
212 " FROM leaves, plink, blob, event"
213 " WHERE plink.cid=leaves.rid"
214 " AND blob.rid=leaves.rid"
215 " AND event.objid=leaves.rid"
 
216 " ORDER BY event.mtime DESC"
217 );
218 while( db_step(&q)==SQLITE_ROW ){
219 const char *zUuid = db_column_text(&q, 0);
220 const char *zDate = db_column_text(&q, 1);
@@ -536,12 +535,14 @@
535 style_footer();
536 }
537
538 /*
539 ** WEBPAGE: fview
540 ** URL: /fview/UUID
541 **
542 ** Show the complete content of a file identified by UUID
543 ** as preformatted text.
544 */
545 void fview_page(void){
546 int rid;
547 Blob content;
548
549
+2 -11
--- src/main.c
+++ src/main.c
@@ -339,11 +339,11 @@
339339
printf("\n");
340340
}
341341
}
342342
343343
/*
344
-** COMMAND: commands
344
+** COM MAND: commands
345345
**
346346
** Usage: %fossil commands
347347
** List all supported commands.
348348
*/
349349
void cmd_cmd_list(void){
@@ -385,10 +385,11 @@
385385
int rc, idx;
386386
const char *z;
387387
if( g.argc!=3 ){
388388
printf("Usage: %s help COMMAND.\nAvailable COMMANDs:\n", g.argv[0]);
389389
cmd_cmd_list();
390
+ printf("You are running fossil baseline " MANIFEST_UUID "\n");
390391
return;
391392
}
392393
rc = name_search(g.argv[2], aCommand, count(aCommand), &idx);
393394
if( rc==1 ){
394395
fossil_fatal("unknown command: %s", g.argv[2]);
@@ -410,20 +411,10 @@
410411
}
411412
}
412413
putchar('\n');
413414
}
414415
415
-/*
416
-** COMMAND: baseline
417
-**
418
-** Show the baseline number of the source code from which this
419
-** fossil executable was generated.
420
-*/
421
-void baseline_cmd(void){
422
- printf("%s\n", MANIFEST_UUID);
423
-}
424
-
425416
/*
426417
** RSS feeds need to reference absolute URLs so we need to calculate
427418
** the base URL onto which we add components. This is basically
428419
** cgi_redirect() stripped down and always returning an absolute URL.
429420
*/
430421
--- src/main.c
+++ src/main.c
@@ -339,11 +339,11 @@
339 printf("\n");
340 }
341 }
342
343 /*
344 ** COMMAND: commands
345 **
346 ** Usage: %fossil commands
347 ** List all supported commands.
348 */
349 void cmd_cmd_list(void){
@@ -385,10 +385,11 @@
385 int rc, idx;
386 const char *z;
387 if( g.argc!=3 ){
388 printf("Usage: %s help COMMAND.\nAvailable COMMANDs:\n", g.argv[0]);
389 cmd_cmd_list();
 
390 return;
391 }
392 rc = name_search(g.argv[2], aCommand, count(aCommand), &idx);
393 if( rc==1 ){
394 fossil_fatal("unknown command: %s", g.argv[2]);
@@ -410,20 +411,10 @@
410 }
411 }
412 putchar('\n');
413 }
414
415 /*
416 ** COMMAND: baseline
417 **
418 ** Show the baseline number of the source code from which this
419 ** fossil executable was generated.
420 */
421 void baseline_cmd(void){
422 printf("%s\n", MANIFEST_UUID);
423 }
424
425 /*
426 ** RSS feeds need to reference absolute URLs so we need to calculate
427 ** the base URL onto which we add components. This is basically
428 ** cgi_redirect() stripped down and always returning an absolute URL.
429 */
430
--- src/main.c
+++ src/main.c
@@ -339,11 +339,11 @@
339 printf("\n");
340 }
341 }
342
343 /*
344 ** COM MAND: commands
345 **
346 ** Usage: %fossil commands
347 ** List all supported commands.
348 */
349 void cmd_cmd_list(void){
@@ -385,10 +385,11 @@
385 int rc, idx;
386 const char *z;
387 if( g.argc!=3 ){
388 printf("Usage: %s help COMMAND.\nAvailable COMMANDs:\n", g.argv[0]);
389 cmd_cmd_list();
390 printf("You are running fossil baseline " MANIFEST_UUID "\n");
391 return;
392 }
393 rc = name_search(g.argv[2], aCommand, count(aCommand), &idx);
394 if( rc==1 ){
395 fossil_fatal("unknown command: %s", g.argv[2]);
@@ -410,20 +411,10 @@
411 }
412 }
413 putchar('\n');
414 }
415
 
 
 
 
 
 
 
 
 
 
416 /*
417 ** RSS feeds need to reference absolute URLs so we need to calculate
418 ** the base URL onto which we add components. This is basically
419 ** cgi_redirect() stripped down and always returning an absolute URL.
420 */
421
+73 -47
--- src/main.mk
+++ src/main.mk
@@ -12,10 +12,11 @@
1212
XTCC = $(TCC) $(CFLAGS) -I. -I$(SRCDIR)
1313
1414
1515
SRC = \
1616
$(SRCDIR)/add.c \
17
+ $(SRCDIR)/bag.c \
1718
$(SRCDIR)/blob.c \
1819
$(SRCDIR)/cgi.c \
1920
$(SRCDIR)/checkin.c \
2021
$(SRCDIR)/checkout.c \
2122
$(SRCDIR)/clearsign.c \
@@ -39,10 +40,11 @@
3940
$(SRCDIR)/md5.c \
4041
$(SRCDIR)/merge.c \
4142
$(SRCDIR)/merge3.c \
4243
$(SRCDIR)/name.c \
4344
$(SRCDIR)/pivot.c \
45
+ $(SRCDIR)/pqueue.c \
4446
$(SRCDIR)/printf.c \
4547
$(SRCDIR)/rebuild.c \
4648
$(SRCDIR)/schema.c \
4749
$(SRCDIR)/setup.c \
4850
$(SRCDIR)/sha1.c \
@@ -59,10 +61,11 @@
5961
$(SRCDIR)/xfer.c \
6062
$(SRCDIR)/zip.c
6163
6264
TRANS_SRC = \
6365
add_.c \
66
+ bag_.c \
6467
blob_.c \
6568
cgi_.c \
6669
checkin_.c \
6770
checkout_.c \
6871
clearsign_.c \
@@ -86,10 +89,11 @@
8689
md5_.c \
8790
merge_.c \
8891
merge3_.c \
8992
name_.c \
9093
pivot_.c \
94
+ pqueue_.c \
9195
printf_.c \
9296
rebuild_.c \
9397
schema_.c \
9498
setup_.c \
9599
sha1_.c \
@@ -106,10 +110,11 @@
106110
xfer_.c \
107111
zip_.c
108112
109113
OBJ = \
110114
add.o \
115
+ bag.o \
111116
blob.o \
112117
cgi.o \
113118
checkin.o \
114119
checkout.o \
115120
clearsign.o \
@@ -133,10 +138,11 @@
133138
md5.o \
134139
merge.o \
135140
merge3.o \
136141
name.o \
137142
pivot.o \
143
+ pqueue.o \
138144
printf.o \
139145
rebuild.o \
140146
schema.o \
141147
setup.o \
142148
sha1.o \
@@ -184,14 +190,14 @@
184190
$(TCC) -o $(APPNAME) $(OBJ) sqlite3.o $(LIB)
185191
186192
clean:
187193
rm -f *.o *_.c $(APPNAME) VERSION.h
188194
rm -f translate makeheaders mkindex page_index.h headers
189
- rm -f add.h blob.h cgi.h checkin.h checkout.h clearsign.h clone.h comformat.h construct.h content.h db.h delta.h deltacmd.h descendents.h diff.h diffcmd.h encode.h file.h http.h info.h login.h main.h manifest.h md5.h merge.h merge3.h name.h pivot.h printf.h rebuild.h schema.h setup.h sha1.h style.h sync.h timeline.h update.h url.h user.h verify.h vfile.h wiki.h wikiformat.h xfer.h zip.h
195
+ rm -f add.h bag.h blob.h cgi.h checkin.h checkout.h clearsign.h clone.h comformat.h construct.h content.h db.h delta.h deltacmd.h descendents.h diff.h diffcmd.h encode.h file.h http.h info.h login.h main.h manifest.h md5.h merge.h merge3.h name.h pivot.h pqueue.h printf.h rebuild.h schema.h setup.h sha1.h style.h sync.h timeline.h update.h url.h user.h verify.h vfile.h wiki.h wikiformat.h xfer.h zip.h
190196
191197
headers: makeheaders mkindex $(TRANS_SRC) ./VERSION.h
192
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
198
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
193199
./mkindex $(TRANS_SRC) >page_index.h
194200
touch headers
195201
196202
add_.c: $(SRCDIR)/add.c $(SRCDIR)/VERSION translate
197203
./translate $(SRCDIR)/add.c | sed -f $(SRCDIR)/VERSION >add_.c
@@ -198,451 +204,471 @@
198204
199205
add.o: add_.c add.h $(SRCDIR)/config.h
200206
$(XTCC) -o add.o -c add_.c
201207
202208
add.h: makeheaders
203
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
209
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
210
+ touch headers
211
+
212
+bag_.c: $(SRCDIR)/bag.c $(SRCDIR)/VERSION translate
213
+ ./translate $(SRCDIR)/bag.c | sed -f $(SRCDIR)/VERSION >bag_.c
214
+
215
+bag.o: bag_.c bag.h $(SRCDIR)/config.h
216
+ $(XTCC) -o bag.o -c bag_.c
217
+
218
+bag.h: makeheaders
219
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
204220
touch headers
205221
206222
blob_.c: $(SRCDIR)/blob.c $(SRCDIR)/VERSION translate
207223
./translate $(SRCDIR)/blob.c | sed -f $(SRCDIR)/VERSION >blob_.c
208224
209225
blob.o: blob_.c blob.h $(SRCDIR)/config.h
210226
$(XTCC) -o blob.o -c blob_.c
211227
212228
blob.h: makeheaders
213
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
229
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
214230
touch headers
215231
216232
cgi_.c: $(SRCDIR)/cgi.c $(SRCDIR)/VERSION translate
217233
./translate $(SRCDIR)/cgi.c | sed -f $(SRCDIR)/VERSION >cgi_.c
218234
219235
cgi.o: cgi_.c cgi.h $(SRCDIR)/config.h
220236
$(XTCC) -o cgi.o -c cgi_.c
221237
222238
cgi.h: makeheaders
223
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
239
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
224240
touch headers
225241
226242
checkin_.c: $(SRCDIR)/checkin.c $(SRCDIR)/VERSION translate
227243
./translate $(SRCDIR)/checkin.c | sed -f $(SRCDIR)/VERSION >checkin_.c
228244
229245
checkin.o: checkin_.c checkin.h $(SRCDIR)/config.h
230246
$(XTCC) -o checkin.o -c checkin_.c
231247
232248
checkin.h: makeheaders
233
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
249
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
234250
touch headers
235251
236252
checkout_.c: $(SRCDIR)/checkout.c $(SRCDIR)/VERSION translate
237253
./translate $(SRCDIR)/checkout.c | sed -f $(SRCDIR)/VERSION >checkout_.c
238254
239255
checkout.o: checkout_.c checkout.h $(SRCDIR)/config.h
240256
$(XTCC) -o checkout.o -c checkout_.c
241257
242258
checkout.h: makeheaders
243
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
259
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
244260
touch headers
245261
246262
clearsign_.c: $(SRCDIR)/clearsign.c $(SRCDIR)/VERSION translate
247263
./translate $(SRCDIR)/clearsign.c | sed -f $(SRCDIR)/VERSION >clearsign_.c
248264
249265
clearsign.o: clearsign_.c clearsign.h $(SRCDIR)/config.h
250266
$(XTCC) -o clearsign.o -c clearsign_.c
251267
252268
clearsign.h: makeheaders
253
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
269
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
254270
touch headers
255271
256272
clone_.c: $(SRCDIR)/clone.c $(SRCDIR)/VERSION translate
257273
./translate $(SRCDIR)/clone.c | sed -f $(SRCDIR)/VERSION >clone_.c
258274
259275
clone.o: clone_.c clone.h $(SRCDIR)/config.h
260276
$(XTCC) -o clone.o -c clone_.c
261277
262278
clone.h: makeheaders
263
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
279
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
264280
touch headers
265281
266282
comformat_.c: $(SRCDIR)/comformat.c $(SRCDIR)/VERSION translate
267283
./translate $(SRCDIR)/comformat.c | sed -f $(SRCDIR)/VERSION >comformat_.c
268284
269285
comformat.o: comformat_.c comformat.h $(SRCDIR)/config.h
270286
$(XTCC) -o comformat.o -c comformat_.c
271287
272288
comformat.h: makeheaders
273
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
289
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
274290
touch headers
275291
276292
construct_.c: $(SRCDIR)/construct.c $(SRCDIR)/VERSION translate
277293
./translate $(SRCDIR)/construct.c | sed -f $(SRCDIR)/VERSION >construct_.c
278294
279295
construct.o: construct_.c construct.h $(SRCDIR)/config.h
280296
$(XTCC) -o construct.o -c construct_.c
281297
282298
construct.h: makeheaders
283
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
299
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
284300
touch headers
285301
286302
content_.c: $(SRCDIR)/content.c $(SRCDIR)/VERSION translate
287303
./translate $(SRCDIR)/content.c | sed -f $(SRCDIR)/VERSION >content_.c
288304
289305
content.o: content_.c content.h $(SRCDIR)/config.h
290306
$(XTCC) -o content.o -c content_.c
291307
292308
content.h: makeheaders
293
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
309
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
294310
touch headers
295311
296312
db_.c: $(SRCDIR)/db.c $(SRCDIR)/VERSION translate
297313
./translate $(SRCDIR)/db.c | sed -f $(SRCDIR)/VERSION >db_.c
298314
299315
db.o: db_.c db.h $(SRCDIR)/config.h
300316
$(XTCC) -o db.o -c db_.c
301317
302318
db.h: makeheaders
303
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
319
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
304320
touch headers
305321
306322
delta_.c: $(SRCDIR)/delta.c $(SRCDIR)/VERSION translate
307323
./translate $(SRCDIR)/delta.c | sed -f $(SRCDIR)/VERSION >delta_.c
308324
309325
delta.o: delta_.c delta.h $(SRCDIR)/config.h
310326
$(XTCC) -o delta.o -c delta_.c
311327
312328
delta.h: makeheaders
313
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
329
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
314330
touch headers
315331
316332
deltacmd_.c: $(SRCDIR)/deltacmd.c $(SRCDIR)/VERSION translate
317333
./translate $(SRCDIR)/deltacmd.c | sed -f $(SRCDIR)/VERSION >deltacmd_.c
318334
319335
deltacmd.o: deltacmd_.c deltacmd.h $(SRCDIR)/config.h
320336
$(XTCC) -o deltacmd.o -c deltacmd_.c
321337
322338
deltacmd.h: makeheaders
323
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
339
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
324340
touch headers
325341
326342
descendents_.c: $(SRCDIR)/descendents.c $(SRCDIR)/VERSION translate
327343
./translate $(SRCDIR)/descendents.c | sed -f $(SRCDIR)/VERSION >descendents_.c
328344
329345
descendents.o: descendents_.c descendents.h $(SRCDIR)/config.h
330346
$(XTCC) -o descendents.o -c descendents_.c
331347
332348
descendents.h: makeheaders
333
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
349
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
334350
touch headers
335351
336352
diff_.c: $(SRCDIR)/diff.c $(SRCDIR)/VERSION translate
337353
./translate $(SRCDIR)/diff.c | sed -f $(SRCDIR)/VERSION >diff_.c
338354
339355
diff.o: diff_.c diff.h $(SRCDIR)/config.h
340356
$(XTCC) -o diff.o -c diff_.c
341357
342358
diff.h: makeheaders
343
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
359
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
344360
touch headers
345361
346362
diffcmd_.c: $(SRCDIR)/diffcmd.c $(SRCDIR)/VERSION translate
347363
./translate $(SRCDIR)/diffcmd.c | sed -f $(SRCDIR)/VERSION >diffcmd_.c
348364
349365
diffcmd.o: diffcmd_.c diffcmd.h $(SRCDIR)/config.h
350366
$(XTCC) -o diffcmd.o -c diffcmd_.c
351367
352368
diffcmd.h: makeheaders
353
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
369
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
354370
touch headers
355371
356372
encode_.c: $(SRCDIR)/encode.c $(SRCDIR)/VERSION translate
357373
./translate $(SRCDIR)/encode.c | sed -f $(SRCDIR)/VERSION >encode_.c
358374
359375
encode.o: encode_.c encode.h $(SRCDIR)/config.h
360376
$(XTCC) -o encode.o -c encode_.c
361377
362378
encode.h: makeheaders
363
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
379
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
364380
touch headers
365381
366382
file_.c: $(SRCDIR)/file.c $(SRCDIR)/VERSION translate
367383
./translate $(SRCDIR)/file.c | sed -f $(SRCDIR)/VERSION >file_.c
368384
369385
file.o: file_.c file.h $(SRCDIR)/config.h
370386
$(XTCC) -o file.o -c file_.c
371387
372388
file.h: makeheaders
373
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
389
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
374390
touch headers
375391
376392
http_.c: $(SRCDIR)/http.c $(SRCDIR)/VERSION translate
377393
./translate $(SRCDIR)/http.c | sed -f $(SRCDIR)/VERSION >http_.c
378394
379395
http.o: http_.c http.h $(SRCDIR)/config.h
380396
$(XTCC) -o http.o -c http_.c
381397
382398
http.h: makeheaders
383
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
399
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
384400
touch headers
385401
386402
info_.c: $(SRCDIR)/info.c $(SRCDIR)/VERSION translate
387403
./translate $(SRCDIR)/info.c | sed -f $(SRCDIR)/VERSION >info_.c
388404
389405
info.o: info_.c info.h $(SRCDIR)/config.h
390406
$(XTCC) -o info.o -c info_.c
391407
392408
info.h: makeheaders
393
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
409
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
394410
touch headers
395411
396412
login_.c: $(SRCDIR)/login.c $(SRCDIR)/VERSION translate
397413
./translate $(SRCDIR)/login.c | sed -f $(SRCDIR)/VERSION >login_.c
398414
399415
login.o: login_.c login.h $(SRCDIR)/config.h
400416
$(XTCC) -o login.o -c login_.c
401417
402418
login.h: makeheaders
403
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
419
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
404420
touch headers
405421
406422
main_.c: $(SRCDIR)/main.c $(SRCDIR)/VERSION translate
407423
./translate $(SRCDIR)/main.c | sed -f $(SRCDIR)/VERSION >main_.c
408424
409425
main.o: main_.c main.h page_index.h $(SRCDIR)/config.h
410426
$(XTCC) -o main.o -c main_.c
411427
412428
main.h: makeheaders
413
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
429
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
414430
touch headers
415431
416432
manifest_.c: $(SRCDIR)/manifest.c $(SRCDIR)/VERSION translate
417433
./translate $(SRCDIR)/manifest.c | sed -f $(SRCDIR)/VERSION >manifest_.c
418434
419435
manifest.o: manifest_.c manifest.h $(SRCDIR)/config.h
420436
$(XTCC) -o manifest.o -c manifest_.c
421437
422438
manifest.h: makeheaders
423
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
439
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
424440
touch headers
425441
426442
md5_.c: $(SRCDIR)/md5.c $(SRCDIR)/VERSION translate
427443
./translate $(SRCDIR)/md5.c | sed -f $(SRCDIR)/VERSION >md5_.c
428444
429445
md5.o: md5_.c md5.h $(SRCDIR)/config.h
430446
$(XTCC) -o md5.o -c md5_.c
431447
432448
md5.h: makeheaders
433
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
449
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
434450
touch headers
435451
436452
merge_.c: $(SRCDIR)/merge.c $(SRCDIR)/VERSION translate
437453
./translate $(SRCDIR)/merge.c | sed -f $(SRCDIR)/VERSION >merge_.c
438454
439455
merge.o: merge_.c merge.h $(SRCDIR)/config.h
440456
$(XTCC) -o merge.o -c merge_.c
441457
442458
merge.h: makeheaders
443
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
459
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
444460
touch headers
445461
446462
merge3_.c: $(SRCDIR)/merge3.c $(SRCDIR)/VERSION translate
447463
./translate $(SRCDIR)/merge3.c | sed -f $(SRCDIR)/VERSION >merge3_.c
448464
449465
merge3.o: merge3_.c merge3.h $(SRCDIR)/config.h
450466
$(XTCC) -o merge3.o -c merge3_.c
451467
452468
merge3.h: makeheaders
453
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
469
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
454470
touch headers
455471
456472
name_.c: $(SRCDIR)/name.c $(SRCDIR)/VERSION translate
457473
./translate $(SRCDIR)/name.c | sed -f $(SRCDIR)/VERSION >name_.c
458474
459475
name.o: name_.c name.h $(SRCDIR)/config.h
460476
$(XTCC) -o name.o -c name_.c
461477
462478
name.h: makeheaders
463
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
479
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
464480
touch headers
465481
466482
pivot_.c: $(SRCDIR)/pivot.c $(SRCDIR)/VERSION translate
467483
./translate $(SRCDIR)/pivot.c | sed -f $(SRCDIR)/VERSION >pivot_.c
468484
469485
pivot.o: pivot_.c pivot.h $(SRCDIR)/config.h
470486
$(XTCC) -o pivot.o -c pivot_.c
471487
472488
pivot.h: makeheaders
473
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
489
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
490
+ touch headers
491
+
492
+pqueue_.c: $(SRCDIR)/pqueue.c $(SRCDIR)/VERSION translate
493
+ ./translate $(SRCDIR)/pqueue.c | sed -f $(SRCDIR)/VERSION >pqueue_.c
494
+
495
+pqueue.o: pqueue_.c pqueue.h $(SRCDIR)/config.h
496
+ $(XTCC) -o pqueue.o -c pqueue_.c
497
+
498
+pqueue.h: makeheaders
499
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
474500
touch headers
475501
476502
printf_.c: $(SRCDIR)/printf.c $(SRCDIR)/VERSION translate
477503
./translate $(SRCDIR)/printf.c | sed -f $(SRCDIR)/VERSION >printf_.c
478504
479505
printf.o: printf_.c printf.h $(SRCDIR)/config.h
480506
$(XTCC) -o printf.o -c printf_.c
481507
482508
printf.h: makeheaders
483
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
509
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
484510
touch headers
485511
486512
rebuild_.c: $(SRCDIR)/rebuild.c $(SRCDIR)/VERSION translate
487513
./translate $(SRCDIR)/rebuild.c | sed -f $(SRCDIR)/VERSION >rebuild_.c
488514
489515
rebuild.o: rebuild_.c rebuild.h $(SRCDIR)/config.h
490516
$(XTCC) -o rebuild.o -c rebuild_.c
491517
492518
rebuild.h: makeheaders
493
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
519
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
494520
touch headers
495521
496522
schema_.c: $(SRCDIR)/schema.c $(SRCDIR)/VERSION translate
497523
./translate $(SRCDIR)/schema.c | sed -f $(SRCDIR)/VERSION >schema_.c
498524
499525
schema.o: schema_.c schema.h $(SRCDIR)/config.h
500526
$(XTCC) -o schema.o -c schema_.c
501527
502528
schema.h: makeheaders
503
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
529
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
504530
touch headers
505531
506532
setup_.c: $(SRCDIR)/setup.c $(SRCDIR)/VERSION translate
507533
./translate $(SRCDIR)/setup.c | sed -f $(SRCDIR)/VERSION >setup_.c
508534
509535
setup.o: setup_.c setup.h $(SRCDIR)/config.h
510536
$(XTCC) -o setup.o -c setup_.c
511537
512538
setup.h: makeheaders
513
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
539
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
514540
touch headers
515541
516542
sha1_.c: $(SRCDIR)/sha1.c $(SRCDIR)/VERSION translate
517543
./translate $(SRCDIR)/sha1.c | sed -f $(SRCDIR)/VERSION >sha1_.c
518544
519545
sha1.o: sha1_.c sha1.h $(SRCDIR)/config.h
520546
$(XTCC) -o sha1.o -c sha1_.c
521547
522548
sha1.h: makeheaders
523
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
549
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
524550
touch headers
525551
526552
style_.c: $(SRCDIR)/style.c $(SRCDIR)/VERSION translate
527553
./translate $(SRCDIR)/style.c | sed -f $(SRCDIR)/VERSION >style_.c
528554
529555
style.o: style_.c style.h $(SRCDIR)/config.h
530556
$(XTCC) -o style.o -c style_.c
531557
532558
style.h: makeheaders
533
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
559
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
534560
touch headers
535561
536562
sync_.c: $(SRCDIR)/sync.c $(SRCDIR)/VERSION translate
537563
./translate $(SRCDIR)/sync.c | sed -f $(SRCDIR)/VERSION >sync_.c
538564
539565
sync.o: sync_.c sync.h $(SRCDIR)/config.h
540566
$(XTCC) -o sync.o -c sync_.c
541567
542568
sync.h: makeheaders
543
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
569
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
544570
touch headers
545571
546572
timeline_.c: $(SRCDIR)/timeline.c $(SRCDIR)/VERSION translate
547573
./translate $(SRCDIR)/timeline.c | sed -f $(SRCDIR)/VERSION >timeline_.c
548574
549575
timeline.o: timeline_.c timeline.h $(SRCDIR)/config.h
550576
$(XTCC) -o timeline.o -c timeline_.c
551577
552578
timeline.h: makeheaders
553
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
579
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
554580
touch headers
555581
556582
update_.c: $(SRCDIR)/update.c $(SRCDIR)/VERSION translate
557583
./translate $(SRCDIR)/update.c | sed -f $(SRCDIR)/VERSION >update_.c
558584
559585
update.o: update_.c update.h $(SRCDIR)/config.h
560586
$(XTCC) -o update.o -c update_.c
561587
562588
update.h: makeheaders
563
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
589
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
564590
touch headers
565591
566592
url_.c: $(SRCDIR)/url.c $(SRCDIR)/VERSION translate
567593
./translate $(SRCDIR)/url.c | sed -f $(SRCDIR)/VERSION >url_.c
568594
569595
url.o: url_.c url.h $(SRCDIR)/config.h
570596
$(XTCC) -o url.o -c url_.c
571597
572598
url.h: makeheaders
573
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
599
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
574600
touch headers
575601
576602
user_.c: $(SRCDIR)/user.c $(SRCDIR)/VERSION translate
577603
./translate $(SRCDIR)/user.c | sed -f $(SRCDIR)/VERSION >user_.c
578604
579605
user.o: user_.c user.h $(SRCDIR)/config.h
580606
$(XTCC) -o user.o -c user_.c
581607
582608
user.h: makeheaders
583
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
609
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
584610
touch headers
585611
586612
verify_.c: $(SRCDIR)/verify.c $(SRCDIR)/VERSION translate
587613
./translate $(SRCDIR)/verify.c | sed -f $(SRCDIR)/VERSION >verify_.c
588614
589615
verify.o: verify_.c verify.h $(SRCDIR)/config.h
590616
$(XTCC) -o verify.o -c verify_.c
591617
592618
verify.h: makeheaders
593
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
619
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
594620
touch headers
595621
596622
vfile_.c: $(SRCDIR)/vfile.c $(SRCDIR)/VERSION translate
597623
./translate $(SRCDIR)/vfile.c | sed -f $(SRCDIR)/VERSION >vfile_.c
598624
599625
vfile.o: vfile_.c vfile.h $(SRCDIR)/config.h
600626
$(XTCC) -o vfile.o -c vfile_.c
601627
602628
vfile.h: makeheaders
603
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
629
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
604630
touch headers
605631
606632
wiki_.c: $(SRCDIR)/wiki.c $(SRCDIR)/VERSION translate
607633
./translate $(SRCDIR)/wiki.c | sed -f $(SRCDIR)/VERSION >wiki_.c
608634
609635
wiki.o: wiki_.c wiki.h $(SRCDIR)/config.h
610636
$(XTCC) -o wiki.o -c wiki_.c
611637
612638
wiki.h: makeheaders
613
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
639
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
614640
touch headers
615641
616642
wikiformat_.c: $(SRCDIR)/wikiformat.c $(SRCDIR)/VERSION translate
617643
./translate $(SRCDIR)/wikiformat.c | sed -f $(SRCDIR)/VERSION >wikiformat_.c
618644
619645
wikiformat.o: wikiformat_.c wikiformat.h $(SRCDIR)/config.h
620646
$(XTCC) -o wikiformat.o -c wikiformat_.c
621647
622648
wikiformat.h: makeheaders
623
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
649
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
624650
touch headers
625651
626652
xfer_.c: $(SRCDIR)/xfer.c $(SRCDIR)/VERSION translate
627653
./translate $(SRCDIR)/xfer.c | sed -f $(SRCDIR)/VERSION >xfer_.c
628654
629655
xfer.o: xfer_.c xfer.h $(SRCDIR)/config.h
630656
$(XTCC) -o xfer.o -c xfer_.c
631657
632658
xfer.h: makeheaders
633
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
659
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
634660
touch headers
635661
636662
zip_.c: $(SRCDIR)/zip.c $(SRCDIR)/VERSION translate
637663
./translate $(SRCDIR)/zip.c | sed -f $(SRCDIR)/VERSION >zip_.c
638664
639665
zip.o: zip_.c zip.h $(SRCDIR)/config.h
640666
$(XTCC) -o zip.o -c zip_.c
641667
642668
zip.h: makeheaders
643
- ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
669
+ ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
644670
touch headers
645671
646672
sqlite3.o: $(SRCDIR)/sqlite3.c
647673
$(XTCC) -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_PRIVATE= -DTHREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -c $(SRCDIR)/sqlite3.c -o sqlite3.o
648674
649675
--- src/main.mk
+++ src/main.mk
@@ -12,10 +12,11 @@
12 XTCC = $(TCC) $(CFLAGS) -I. -I$(SRCDIR)
13
14
15 SRC = \
16 $(SRCDIR)/add.c \
 
17 $(SRCDIR)/blob.c \
18 $(SRCDIR)/cgi.c \
19 $(SRCDIR)/checkin.c \
20 $(SRCDIR)/checkout.c \
21 $(SRCDIR)/clearsign.c \
@@ -39,10 +40,11 @@
39 $(SRCDIR)/md5.c \
40 $(SRCDIR)/merge.c \
41 $(SRCDIR)/merge3.c \
42 $(SRCDIR)/name.c \
43 $(SRCDIR)/pivot.c \
 
44 $(SRCDIR)/printf.c \
45 $(SRCDIR)/rebuild.c \
46 $(SRCDIR)/schema.c \
47 $(SRCDIR)/setup.c \
48 $(SRCDIR)/sha1.c \
@@ -59,10 +61,11 @@
59 $(SRCDIR)/xfer.c \
60 $(SRCDIR)/zip.c
61
62 TRANS_SRC = \
63 add_.c \
 
64 blob_.c \
65 cgi_.c \
66 checkin_.c \
67 checkout_.c \
68 clearsign_.c \
@@ -86,10 +89,11 @@
86 md5_.c \
87 merge_.c \
88 merge3_.c \
89 name_.c \
90 pivot_.c \
 
91 printf_.c \
92 rebuild_.c \
93 schema_.c \
94 setup_.c \
95 sha1_.c \
@@ -106,10 +110,11 @@
106 xfer_.c \
107 zip_.c
108
109 OBJ = \
110 add.o \
 
111 blob.o \
112 cgi.o \
113 checkin.o \
114 checkout.o \
115 clearsign.o \
@@ -133,10 +138,11 @@
133 md5.o \
134 merge.o \
135 merge3.o \
136 name.o \
137 pivot.o \
 
138 printf.o \
139 rebuild.o \
140 schema.o \
141 setup.o \
142 sha1.o \
@@ -184,14 +190,14 @@
184 $(TCC) -o $(APPNAME) $(OBJ) sqlite3.o $(LIB)
185
186 clean:
187 rm -f *.o *_.c $(APPNAME) VERSION.h
188 rm -f translate makeheaders mkindex page_index.h headers
189 rm -f add.h blob.h cgi.h checkin.h checkout.h clearsign.h clone.h comformat.h construct.h content.h db.h delta.h deltacmd.h descendents.h diff.h diffcmd.h encode.h file.h http.h info.h login.h main.h manifest.h md5.h merge.h merge3.h name.h pivot.h printf.h rebuild.h schema.h setup.h sha1.h style.h sync.h timeline.h update.h url.h user.h verify.h vfile.h wiki.h wikiformat.h xfer.h zip.h
190
191 headers: makeheaders mkindex $(TRANS_SRC) ./VERSION.h
192 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
193 ./mkindex $(TRANS_SRC) >page_index.h
194 touch headers
195
196 add_.c: $(SRCDIR)/add.c $(SRCDIR)/VERSION translate
197 ./translate $(SRCDIR)/add.c | sed -f $(SRCDIR)/VERSION >add_.c
@@ -198,451 +204,471 @@
198
199 add.o: add_.c add.h $(SRCDIR)/config.h
200 $(XTCC) -o add.o -c add_.c
201
202 add.h: makeheaders
203 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
 
 
 
 
 
 
 
 
 
 
204 touch headers
205
206 blob_.c: $(SRCDIR)/blob.c $(SRCDIR)/VERSION translate
207 ./translate $(SRCDIR)/blob.c | sed -f $(SRCDIR)/VERSION >blob_.c
208
209 blob.o: blob_.c blob.h $(SRCDIR)/config.h
210 $(XTCC) -o blob.o -c blob_.c
211
212 blob.h: makeheaders
213 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
214 touch headers
215
216 cgi_.c: $(SRCDIR)/cgi.c $(SRCDIR)/VERSION translate
217 ./translate $(SRCDIR)/cgi.c | sed -f $(SRCDIR)/VERSION >cgi_.c
218
219 cgi.o: cgi_.c cgi.h $(SRCDIR)/config.h
220 $(XTCC) -o cgi.o -c cgi_.c
221
222 cgi.h: makeheaders
223 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
224 touch headers
225
226 checkin_.c: $(SRCDIR)/checkin.c $(SRCDIR)/VERSION translate
227 ./translate $(SRCDIR)/checkin.c | sed -f $(SRCDIR)/VERSION >checkin_.c
228
229 checkin.o: checkin_.c checkin.h $(SRCDIR)/config.h
230 $(XTCC) -o checkin.o -c checkin_.c
231
232 checkin.h: makeheaders
233 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
234 touch headers
235
236 checkout_.c: $(SRCDIR)/checkout.c $(SRCDIR)/VERSION translate
237 ./translate $(SRCDIR)/checkout.c | sed -f $(SRCDIR)/VERSION >checkout_.c
238
239 checkout.o: checkout_.c checkout.h $(SRCDIR)/config.h
240 $(XTCC) -o checkout.o -c checkout_.c
241
242 checkout.h: makeheaders
243 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
244 touch headers
245
246 clearsign_.c: $(SRCDIR)/clearsign.c $(SRCDIR)/VERSION translate
247 ./translate $(SRCDIR)/clearsign.c | sed -f $(SRCDIR)/VERSION >clearsign_.c
248
249 clearsign.o: clearsign_.c clearsign.h $(SRCDIR)/config.h
250 $(XTCC) -o clearsign.o -c clearsign_.c
251
252 clearsign.h: makeheaders
253 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
254 touch headers
255
256 clone_.c: $(SRCDIR)/clone.c $(SRCDIR)/VERSION translate
257 ./translate $(SRCDIR)/clone.c | sed -f $(SRCDIR)/VERSION >clone_.c
258
259 clone.o: clone_.c clone.h $(SRCDIR)/config.h
260 $(XTCC) -o clone.o -c clone_.c
261
262 clone.h: makeheaders
263 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
264 touch headers
265
266 comformat_.c: $(SRCDIR)/comformat.c $(SRCDIR)/VERSION translate
267 ./translate $(SRCDIR)/comformat.c | sed -f $(SRCDIR)/VERSION >comformat_.c
268
269 comformat.o: comformat_.c comformat.h $(SRCDIR)/config.h
270 $(XTCC) -o comformat.o -c comformat_.c
271
272 comformat.h: makeheaders
273 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
274 touch headers
275
276 construct_.c: $(SRCDIR)/construct.c $(SRCDIR)/VERSION translate
277 ./translate $(SRCDIR)/construct.c | sed -f $(SRCDIR)/VERSION >construct_.c
278
279 construct.o: construct_.c construct.h $(SRCDIR)/config.h
280 $(XTCC) -o construct.o -c construct_.c
281
282 construct.h: makeheaders
283 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
284 touch headers
285
286 content_.c: $(SRCDIR)/content.c $(SRCDIR)/VERSION translate
287 ./translate $(SRCDIR)/content.c | sed -f $(SRCDIR)/VERSION >content_.c
288
289 content.o: content_.c content.h $(SRCDIR)/config.h
290 $(XTCC) -o content.o -c content_.c
291
292 content.h: makeheaders
293 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
294 touch headers
295
296 db_.c: $(SRCDIR)/db.c $(SRCDIR)/VERSION translate
297 ./translate $(SRCDIR)/db.c | sed -f $(SRCDIR)/VERSION >db_.c
298
299 db.o: db_.c db.h $(SRCDIR)/config.h
300 $(XTCC) -o db.o -c db_.c
301
302 db.h: makeheaders
303 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
304 touch headers
305
306 delta_.c: $(SRCDIR)/delta.c $(SRCDIR)/VERSION translate
307 ./translate $(SRCDIR)/delta.c | sed -f $(SRCDIR)/VERSION >delta_.c
308
309 delta.o: delta_.c delta.h $(SRCDIR)/config.h
310 $(XTCC) -o delta.o -c delta_.c
311
312 delta.h: makeheaders
313 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
314 touch headers
315
316 deltacmd_.c: $(SRCDIR)/deltacmd.c $(SRCDIR)/VERSION translate
317 ./translate $(SRCDIR)/deltacmd.c | sed -f $(SRCDIR)/VERSION >deltacmd_.c
318
319 deltacmd.o: deltacmd_.c deltacmd.h $(SRCDIR)/config.h
320 $(XTCC) -o deltacmd.o -c deltacmd_.c
321
322 deltacmd.h: makeheaders
323 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
324 touch headers
325
326 descendents_.c: $(SRCDIR)/descendents.c $(SRCDIR)/VERSION translate
327 ./translate $(SRCDIR)/descendents.c | sed -f $(SRCDIR)/VERSION >descendents_.c
328
329 descendents.o: descendents_.c descendents.h $(SRCDIR)/config.h
330 $(XTCC) -o descendents.o -c descendents_.c
331
332 descendents.h: makeheaders
333 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
334 touch headers
335
336 diff_.c: $(SRCDIR)/diff.c $(SRCDIR)/VERSION translate
337 ./translate $(SRCDIR)/diff.c | sed -f $(SRCDIR)/VERSION >diff_.c
338
339 diff.o: diff_.c diff.h $(SRCDIR)/config.h
340 $(XTCC) -o diff.o -c diff_.c
341
342 diff.h: makeheaders
343 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
344 touch headers
345
346 diffcmd_.c: $(SRCDIR)/diffcmd.c $(SRCDIR)/VERSION translate
347 ./translate $(SRCDIR)/diffcmd.c | sed -f $(SRCDIR)/VERSION >diffcmd_.c
348
349 diffcmd.o: diffcmd_.c diffcmd.h $(SRCDIR)/config.h
350 $(XTCC) -o diffcmd.o -c diffcmd_.c
351
352 diffcmd.h: makeheaders
353 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
354 touch headers
355
356 encode_.c: $(SRCDIR)/encode.c $(SRCDIR)/VERSION translate
357 ./translate $(SRCDIR)/encode.c | sed -f $(SRCDIR)/VERSION >encode_.c
358
359 encode.o: encode_.c encode.h $(SRCDIR)/config.h
360 $(XTCC) -o encode.o -c encode_.c
361
362 encode.h: makeheaders
363 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
364 touch headers
365
366 file_.c: $(SRCDIR)/file.c $(SRCDIR)/VERSION translate
367 ./translate $(SRCDIR)/file.c | sed -f $(SRCDIR)/VERSION >file_.c
368
369 file.o: file_.c file.h $(SRCDIR)/config.h
370 $(XTCC) -o file.o -c file_.c
371
372 file.h: makeheaders
373 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
374 touch headers
375
376 http_.c: $(SRCDIR)/http.c $(SRCDIR)/VERSION translate
377 ./translate $(SRCDIR)/http.c | sed -f $(SRCDIR)/VERSION >http_.c
378
379 http.o: http_.c http.h $(SRCDIR)/config.h
380 $(XTCC) -o http.o -c http_.c
381
382 http.h: makeheaders
383 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
384 touch headers
385
386 info_.c: $(SRCDIR)/info.c $(SRCDIR)/VERSION translate
387 ./translate $(SRCDIR)/info.c | sed -f $(SRCDIR)/VERSION >info_.c
388
389 info.o: info_.c info.h $(SRCDIR)/config.h
390 $(XTCC) -o info.o -c info_.c
391
392 info.h: makeheaders
393 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
394 touch headers
395
396 login_.c: $(SRCDIR)/login.c $(SRCDIR)/VERSION translate
397 ./translate $(SRCDIR)/login.c | sed -f $(SRCDIR)/VERSION >login_.c
398
399 login.o: login_.c login.h $(SRCDIR)/config.h
400 $(XTCC) -o login.o -c login_.c
401
402 login.h: makeheaders
403 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
404 touch headers
405
406 main_.c: $(SRCDIR)/main.c $(SRCDIR)/VERSION translate
407 ./translate $(SRCDIR)/main.c | sed -f $(SRCDIR)/VERSION >main_.c
408
409 main.o: main_.c main.h page_index.h $(SRCDIR)/config.h
410 $(XTCC) -o main.o -c main_.c
411
412 main.h: makeheaders
413 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
414 touch headers
415
416 manifest_.c: $(SRCDIR)/manifest.c $(SRCDIR)/VERSION translate
417 ./translate $(SRCDIR)/manifest.c | sed -f $(SRCDIR)/VERSION >manifest_.c
418
419 manifest.o: manifest_.c manifest.h $(SRCDIR)/config.h
420 $(XTCC) -o manifest.o -c manifest_.c
421
422 manifest.h: makeheaders
423 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
424 touch headers
425
426 md5_.c: $(SRCDIR)/md5.c $(SRCDIR)/VERSION translate
427 ./translate $(SRCDIR)/md5.c | sed -f $(SRCDIR)/VERSION >md5_.c
428
429 md5.o: md5_.c md5.h $(SRCDIR)/config.h
430 $(XTCC) -o md5.o -c md5_.c
431
432 md5.h: makeheaders
433 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
434 touch headers
435
436 merge_.c: $(SRCDIR)/merge.c $(SRCDIR)/VERSION translate
437 ./translate $(SRCDIR)/merge.c | sed -f $(SRCDIR)/VERSION >merge_.c
438
439 merge.o: merge_.c merge.h $(SRCDIR)/config.h
440 $(XTCC) -o merge.o -c merge_.c
441
442 merge.h: makeheaders
443 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
444 touch headers
445
446 merge3_.c: $(SRCDIR)/merge3.c $(SRCDIR)/VERSION translate
447 ./translate $(SRCDIR)/merge3.c | sed -f $(SRCDIR)/VERSION >merge3_.c
448
449 merge3.o: merge3_.c merge3.h $(SRCDIR)/config.h
450 $(XTCC) -o merge3.o -c merge3_.c
451
452 merge3.h: makeheaders
453 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
454 touch headers
455
456 name_.c: $(SRCDIR)/name.c $(SRCDIR)/VERSION translate
457 ./translate $(SRCDIR)/name.c | sed -f $(SRCDIR)/VERSION >name_.c
458
459 name.o: name_.c name.h $(SRCDIR)/config.h
460 $(XTCC) -o name.o -c name_.c
461
462 name.h: makeheaders
463 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
464 touch headers
465
466 pivot_.c: $(SRCDIR)/pivot.c $(SRCDIR)/VERSION translate
467 ./translate $(SRCDIR)/pivot.c | sed -f $(SRCDIR)/VERSION >pivot_.c
468
469 pivot.o: pivot_.c pivot.h $(SRCDIR)/config.h
470 $(XTCC) -o pivot.o -c pivot_.c
471
472 pivot.h: makeheaders
473 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
 
 
 
 
 
 
 
 
 
 
474 touch headers
475
476 printf_.c: $(SRCDIR)/printf.c $(SRCDIR)/VERSION translate
477 ./translate $(SRCDIR)/printf.c | sed -f $(SRCDIR)/VERSION >printf_.c
478
479 printf.o: printf_.c printf.h $(SRCDIR)/config.h
480 $(XTCC) -o printf.o -c printf_.c
481
482 printf.h: makeheaders
483 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
484 touch headers
485
486 rebuild_.c: $(SRCDIR)/rebuild.c $(SRCDIR)/VERSION translate
487 ./translate $(SRCDIR)/rebuild.c | sed -f $(SRCDIR)/VERSION >rebuild_.c
488
489 rebuild.o: rebuild_.c rebuild.h $(SRCDIR)/config.h
490 $(XTCC) -o rebuild.o -c rebuild_.c
491
492 rebuild.h: makeheaders
493 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
494 touch headers
495
496 schema_.c: $(SRCDIR)/schema.c $(SRCDIR)/VERSION translate
497 ./translate $(SRCDIR)/schema.c | sed -f $(SRCDIR)/VERSION >schema_.c
498
499 schema.o: schema_.c schema.h $(SRCDIR)/config.h
500 $(XTCC) -o schema.o -c schema_.c
501
502 schema.h: makeheaders
503 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
504 touch headers
505
506 setup_.c: $(SRCDIR)/setup.c $(SRCDIR)/VERSION translate
507 ./translate $(SRCDIR)/setup.c | sed -f $(SRCDIR)/VERSION >setup_.c
508
509 setup.o: setup_.c setup.h $(SRCDIR)/config.h
510 $(XTCC) -o setup.o -c setup_.c
511
512 setup.h: makeheaders
513 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
514 touch headers
515
516 sha1_.c: $(SRCDIR)/sha1.c $(SRCDIR)/VERSION translate
517 ./translate $(SRCDIR)/sha1.c | sed -f $(SRCDIR)/VERSION >sha1_.c
518
519 sha1.o: sha1_.c sha1.h $(SRCDIR)/config.h
520 $(XTCC) -o sha1.o -c sha1_.c
521
522 sha1.h: makeheaders
523 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
524 touch headers
525
526 style_.c: $(SRCDIR)/style.c $(SRCDIR)/VERSION translate
527 ./translate $(SRCDIR)/style.c | sed -f $(SRCDIR)/VERSION >style_.c
528
529 style.o: style_.c style.h $(SRCDIR)/config.h
530 $(XTCC) -o style.o -c style_.c
531
532 style.h: makeheaders
533 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
534 touch headers
535
536 sync_.c: $(SRCDIR)/sync.c $(SRCDIR)/VERSION translate
537 ./translate $(SRCDIR)/sync.c | sed -f $(SRCDIR)/VERSION >sync_.c
538
539 sync.o: sync_.c sync.h $(SRCDIR)/config.h
540 $(XTCC) -o sync.o -c sync_.c
541
542 sync.h: makeheaders
543 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
544 touch headers
545
546 timeline_.c: $(SRCDIR)/timeline.c $(SRCDIR)/VERSION translate
547 ./translate $(SRCDIR)/timeline.c | sed -f $(SRCDIR)/VERSION >timeline_.c
548
549 timeline.o: timeline_.c timeline.h $(SRCDIR)/config.h
550 $(XTCC) -o timeline.o -c timeline_.c
551
552 timeline.h: makeheaders
553 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
554 touch headers
555
556 update_.c: $(SRCDIR)/update.c $(SRCDIR)/VERSION translate
557 ./translate $(SRCDIR)/update.c | sed -f $(SRCDIR)/VERSION >update_.c
558
559 update.o: update_.c update.h $(SRCDIR)/config.h
560 $(XTCC) -o update.o -c update_.c
561
562 update.h: makeheaders
563 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
564 touch headers
565
566 url_.c: $(SRCDIR)/url.c $(SRCDIR)/VERSION translate
567 ./translate $(SRCDIR)/url.c | sed -f $(SRCDIR)/VERSION >url_.c
568
569 url.o: url_.c url.h $(SRCDIR)/config.h
570 $(XTCC) -o url.o -c url_.c
571
572 url.h: makeheaders
573 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
574 touch headers
575
576 user_.c: $(SRCDIR)/user.c $(SRCDIR)/VERSION translate
577 ./translate $(SRCDIR)/user.c | sed -f $(SRCDIR)/VERSION >user_.c
578
579 user.o: user_.c user.h $(SRCDIR)/config.h
580 $(XTCC) -o user.o -c user_.c
581
582 user.h: makeheaders
583 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
584 touch headers
585
586 verify_.c: $(SRCDIR)/verify.c $(SRCDIR)/VERSION translate
587 ./translate $(SRCDIR)/verify.c | sed -f $(SRCDIR)/VERSION >verify_.c
588
589 verify.o: verify_.c verify.h $(SRCDIR)/config.h
590 $(XTCC) -o verify.o -c verify_.c
591
592 verify.h: makeheaders
593 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
594 touch headers
595
596 vfile_.c: $(SRCDIR)/vfile.c $(SRCDIR)/VERSION translate
597 ./translate $(SRCDIR)/vfile.c | sed -f $(SRCDIR)/VERSION >vfile_.c
598
599 vfile.o: vfile_.c vfile.h $(SRCDIR)/config.h
600 $(XTCC) -o vfile.o -c vfile_.c
601
602 vfile.h: makeheaders
603 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
604 touch headers
605
606 wiki_.c: $(SRCDIR)/wiki.c $(SRCDIR)/VERSION translate
607 ./translate $(SRCDIR)/wiki.c | sed -f $(SRCDIR)/VERSION >wiki_.c
608
609 wiki.o: wiki_.c wiki.h $(SRCDIR)/config.h
610 $(XTCC) -o wiki.o -c wiki_.c
611
612 wiki.h: makeheaders
613 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
614 touch headers
615
616 wikiformat_.c: $(SRCDIR)/wikiformat.c $(SRCDIR)/VERSION translate
617 ./translate $(SRCDIR)/wikiformat.c | sed -f $(SRCDIR)/VERSION >wikiformat_.c
618
619 wikiformat.o: wikiformat_.c wikiformat.h $(SRCDIR)/config.h
620 $(XTCC) -o wikiformat.o -c wikiformat_.c
621
622 wikiformat.h: makeheaders
623 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
624 touch headers
625
626 xfer_.c: $(SRCDIR)/xfer.c $(SRCDIR)/VERSION translate
627 ./translate $(SRCDIR)/xfer.c | sed -f $(SRCDIR)/VERSION >xfer_.c
628
629 xfer.o: xfer_.c xfer.h $(SRCDIR)/config.h
630 $(XTCC) -o xfer.o -c xfer_.c
631
632 xfer.h: makeheaders
633 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
634 touch headers
635
636 zip_.c: $(SRCDIR)/zip.c $(SRCDIR)/VERSION translate
637 ./translate $(SRCDIR)/zip.c | sed -f $(SRCDIR)/VERSION >zip_.c
638
639 zip.o: zip_.c zip.h $(SRCDIR)/config.h
640 $(XTCC) -o zip.o -c zip_.c
641
642 zip.h: makeheaders
643 ./makeheaders add_.c:add.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
644 touch headers
645
646 sqlite3.o: $(SRCDIR)/sqlite3.c
647 $(XTCC) -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_PRIVATE= -DTHREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -c $(SRCDIR)/sqlite3.c -o sqlite3.o
648
649
--- src/main.mk
+++ src/main.mk
@@ -12,10 +12,11 @@
12 XTCC = $(TCC) $(CFLAGS) -I. -I$(SRCDIR)
13
14
15 SRC = \
16 $(SRCDIR)/add.c \
17 $(SRCDIR)/bag.c \
18 $(SRCDIR)/blob.c \
19 $(SRCDIR)/cgi.c \
20 $(SRCDIR)/checkin.c \
21 $(SRCDIR)/checkout.c \
22 $(SRCDIR)/clearsign.c \
@@ -39,10 +40,11 @@
40 $(SRCDIR)/md5.c \
41 $(SRCDIR)/merge.c \
42 $(SRCDIR)/merge3.c \
43 $(SRCDIR)/name.c \
44 $(SRCDIR)/pivot.c \
45 $(SRCDIR)/pqueue.c \
46 $(SRCDIR)/printf.c \
47 $(SRCDIR)/rebuild.c \
48 $(SRCDIR)/schema.c \
49 $(SRCDIR)/setup.c \
50 $(SRCDIR)/sha1.c \
@@ -59,10 +61,11 @@
61 $(SRCDIR)/xfer.c \
62 $(SRCDIR)/zip.c
63
64 TRANS_SRC = \
65 add_.c \
66 bag_.c \
67 blob_.c \
68 cgi_.c \
69 checkin_.c \
70 checkout_.c \
71 clearsign_.c \
@@ -86,10 +89,11 @@
89 md5_.c \
90 merge_.c \
91 merge3_.c \
92 name_.c \
93 pivot_.c \
94 pqueue_.c \
95 printf_.c \
96 rebuild_.c \
97 schema_.c \
98 setup_.c \
99 sha1_.c \
@@ -106,10 +110,11 @@
110 xfer_.c \
111 zip_.c
112
113 OBJ = \
114 add.o \
115 bag.o \
116 blob.o \
117 cgi.o \
118 checkin.o \
119 checkout.o \
120 clearsign.o \
@@ -133,10 +138,11 @@
138 md5.o \
139 merge.o \
140 merge3.o \
141 name.o \
142 pivot.o \
143 pqueue.o \
144 printf.o \
145 rebuild.o \
146 schema.o \
147 setup.o \
148 sha1.o \
@@ -184,14 +190,14 @@
190 $(TCC) -o $(APPNAME) $(OBJ) sqlite3.o $(LIB)
191
192 clean:
193 rm -f *.o *_.c $(APPNAME) VERSION.h
194 rm -f translate makeheaders mkindex page_index.h headers
195 rm -f add.h bag.h blob.h cgi.h checkin.h checkout.h clearsign.h clone.h comformat.h construct.h content.h db.h delta.h deltacmd.h descendents.h diff.h diffcmd.h encode.h file.h http.h info.h login.h main.h manifest.h md5.h merge.h merge3.h name.h pivot.h pqueue.h printf.h rebuild.h schema.h setup.h sha1.h style.h sync.h timeline.h update.h url.h user.h verify.h vfile.h wiki.h wikiformat.h xfer.h zip.h
196
197 headers: makeheaders mkindex $(TRANS_SRC) ./VERSION.h
198 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
199 ./mkindex $(TRANS_SRC) >page_index.h
200 touch headers
201
202 add_.c: $(SRCDIR)/add.c $(SRCDIR)/VERSION translate
203 ./translate $(SRCDIR)/add.c | sed -f $(SRCDIR)/VERSION >add_.c
@@ -198,451 +204,471 @@
204
205 add.o: add_.c add.h $(SRCDIR)/config.h
206 $(XTCC) -o add.o -c add_.c
207
208 add.h: makeheaders
209 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
210 touch headers
211
212 bag_.c: $(SRCDIR)/bag.c $(SRCDIR)/VERSION translate
213 ./translate $(SRCDIR)/bag.c | sed -f $(SRCDIR)/VERSION >bag_.c
214
215 bag.o: bag_.c bag.h $(SRCDIR)/config.h
216 $(XTCC) -o bag.o -c bag_.c
217
218 bag.h: makeheaders
219 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
220 touch headers
221
222 blob_.c: $(SRCDIR)/blob.c $(SRCDIR)/VERSION translate
223 ./translate $(SRCDIR)/blob.c | sed -f $(SRCDIR)/VERSION >blob_.c
224
225 blob.o: blob_.c blob.h $(SRCDIR)/config.h
226 $(XTCC) -o blob.o -c blob_.c
227
228 blob.h: makeheaders
229 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
230 touch headers
231
232 cgi_.c: $(SRCDIR)/cgi.c $(SRCDIR)/VERSION translate
233 ./translate $(SRCDIR)/cgi.c | sed -f $(SRCDIR)/VERSION >cgi_.c
234
235 cgi.o: cgi_.c cgi.h $(SRCDIR)/config.h
236 $(XTCC) -o cgi.o -c cgi_.c
237
238 cgi.h: makeheaders
239 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
240 touch headers
241
242 checkin_.c: $(SRCDIR)/checkin.c $(SRCDIR)/VERSION translate
243 ./translate $(SRCDIR)/checkin.c | sed -f $(SRCDIR)/VERSION >checkin_.c
244
245 checkin.o: checkin_.c checkin.h $(SRCDIR)/config.h
246 $(XTCC) -o checkin.o -c checkin_.c
247
248 checkin.h: makeheaders
249 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
250 touch headers
251
252 checkout_.c: $(SRCDIR)/checkout.c $(SRCDIR)/VERSION translate
253 ./translate $(SRCDIR)/checkout.c | sed -f $(SRCDIR)/VERSION >checkout_.c
254
255 checkout.o: checkout_.c checkout.h $(SRCDIR)/config.h
256 $(XTCC) -o checkout.o -c checkout_.c
257
258 checkout.h: makeheaders
259 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
260 touch headers
261
262 clearsign_.c: $(SRCDIR)/clearsign.c $(SRCDIR)/VERSION translate
263 ./translate $(SRCDIR)/clearsign.c | sed -f $(SRCDIR)/VERSION >clearsign_.c
264
265 clearsign.o: clearsign_.c clearsign.h $(SRCDIR)/config.h
266 $(XTCC) -o clearsign.o -c clearsign_.c
267
268 clearsign.h: makeheaders
269 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
270 touch headers
271
272 clone_.c: $(SRCDIR)/clone.c $(SRCDIR)/VERSION translate
273 ./translate $(SRCDIR)/clone.c | sed -f $(SRCDIR)/VERSION >clone_.c
274
275 clone.o: clone_.c clone.h $(SRCDIR)/config.h
276 $(XTCC) -o clone.o -c clone_.c
277
278 clone.h: makeheaders
279 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
280 touch headers
281
282 comformat_.c: $(SRCDIR)/comformat.c $(SRCDIR)/VERSION translate
283 ./translate $(SRCDIR)/comformat.c | sed -f $(SRCDIR)/VERSION >comformat_.c
284
285 comformat.o: comformat_.c comformat.h $(SRCDIR)/config.h
286 $(XTCC) -o comformat.o -c comformat_.c
287
288 comformat.h: makeheaders
289 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
290 touch headers
291
292 construct_.c: $(SRCDIR)/construct.c $(SRCDIR)/VERSION translate
293 ./translate $(SRCDIR)/construct.c | sed -f $(SRCDIR)/VERSION >construct_.c
294
295 construct.o: construct_.c construct.h $(SRCDIR)/config.h
296 $(XTCC) -o construct.o -c construct_.c
297
298 construct.h: makeheaders
299 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
300 touch headers
301
302 content_.c: $(SRCDIR)/content.c $(SRCDIR)/VERSION translate
303 ./translate $(SRCDIR)/content.c | sed -f $(SRCDIR)/VERSION >content_.c
304
305 content.o: content_.c content.h $(SRCDIR)/config.h
306 $(XTCC) -o content.o -c content_.c
307
308 content.h: makeheaders
309 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
310 touch headers
311
312 db_.c: $(SRCDIR)/db.c $(SRCDIR)/VERSION translate
313 ./translate $(SRCDIR)/db.c | sed -f $(SRCDIR)/VERSION >db_.c
314
315 db.o: db_.c db.h $(SRCDIR)/config.h
316 $(XTCC) -o db.o -c db_.c
317
318 db.h: makeheaders
319 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
320 touch headers
321
322 delta_.c: $(SRCDIR)/delta.c $(SRCDIR)/VERSION translate
323 ./translate $(SRCDIR)/delta.c | sed -f $(SRCDIR)/VERSION >delta_.c
324
325 delta.o: delta_.c delta.h $(SRCDIR)/config.h
326 $(XTCC) -o delta.o -c delta_.c
327
328 delta.h: makeheaders
329 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
330 touch headers
331
332 deltacmd_.c: $(SRCDIR)/deltacmd.c $(SRCDIR)/VERSION translate
333 ./translate $(SRCDIR)/deltacmd.c | sed -f $(SRCDIR)/VERSION >deltacmd_.c
334
335 deltacmd.o: deltacmd_.c deltacmd.h $(SRCDIR)/config.h
336 $(XTCC) -o deltacmd.o -c deltacmd_.c
337
338 deltacmd.h: makeheaders
339 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
340 touch headers
341
342 descendents_.c: $(SRCDIR)/descendents.c $(SRCDIR)/VERSION translate
343 ./translate $(SRCDIR)/descendents.c | sed -f $(SRCDIR)/VERSION >descendents_.c
344
345 descendents.o: descendents_.c descendents.h $(SRCDIR)/config.h
346 $(XTCC) -o descendents.o -c descendents_.c
347
348 descendents.h: makeheaders
349 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
350 touch headers
351
352 diff_.c: $(SRCDIR)/diff.c $(SRCDIR)/VERSION translate
353 ./translate $(SRCDIR)/diff.c | sed -f $(SRCDIR)/VERSION >diff_.c
354
355 diff.o: diff_.c diff.h $(SRCDIR)/config.h
356 $(XTCC) -o diff.o -c diff_.c
357
358 diff.h: makeheaders
359 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
360 touch headers
361
362 diffcmd_.c: $(SRCDIR)/diffcmd.c $(SRCDIR)/VERSION translate
363 ./translate $(SRCDIR)/diffcmd.c | sed -f $(SRCDIR)/VERSION >diffcmd_.c
364
365 diffcmd.o: diffcmd_.c diffcmd.h $(SRCDIR)/config.h
366 $(XTCC) -o diffcmd.o -c diffcmd_.c
367
368 diffcmd.h: makeheaders
369 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
370 touch headers
371
372 encode_.c: $(SRCDIR)/encode.c $(SRCDIR)/VERSION translate
373 ./translate $(SRCDIR)/encode.c | sed -f $(SRCDIR)/VERSION >encode_.c
374
375 encode.o: encode_.c encode.h $(SRCDIR)/config.h
376 $(XTCC) -o encode.o -c encode_.c
377
378 encode.h: makeheaders
379 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
380 touch headers
381
382 file_.c: $(SRCDIR)/file.c $(SRCDIR)/VERSION translate
383 ./translate $(SRCDIR)/file.c | sed -f $(SRCDIR)/VERSION >file_.c
384
385 file.o: file_.c file.h $(SRCDIR)/config.h
386 $(XTCC) -o file.o -c file_.c
387
388 file.h: makeheaders
389 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
390 touch headers
391
392 http_.c: $(SRCDIR)/http.c $(SRCDIR)/VERSION translate
393 ./translate $(SRCDIR)/http.c | sed -f $(SRCDIR)/VERSION >http_.c
394
395 http.o: http_.c http.h $(SRCDIR)/config.h
396 $(XTCC) -o http.o -c http_.c
397
398 http.h: makeheaders
399 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
400 touch headers
401
402 info_.c: $(SRCDIR)/info.c $(SRCDIR)/VERSION translate
403 ./translate $(SRCDIR)/info.c | sed -f $(SRCDIR)/VERSION >info_.c
404
405 info.o: info_.c info.h $(SRCDIR)/config.h
406 $(XTCC) -o info.o -c info_.c
407
408 info.h: makeheaders
409 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
410 touch headers
411
412 login_.c: $(SRCDIR)/login.c $(SRCDIR)/VERSION translate
413 ./translate $(SRCDIR)/login.c | sed -f $(SRCDIR)/VERSION >login_.c
414
415 login.o: login_.c login.h $(SRCDIR)/config.h
416 $(XTCC) -o login.o -c login_.c
417
418 login.h: makeheaders
419 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
420 touch headers
421
422 main_.c: $(SRCDIR)/main.c $(SRCDIR)/VERSION translate
423 ./translate $(SRCDIR)/main.c | sed -f $(SRCDIR)/VERSION >main_.c
424
425 main.o: main_.c main.h page_index.h $(SRCDIR)/config.h
426 $(XTCC) -o main.o -c main_.c
427
428 main.h: makeheaders
429 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
430 touch headers
431
432 manifest_.c: $(SRCDIR)/manifest.c $(SRCDIR)/VERSION translate
433 ./translate $(SRCDIR)/manifest.c | sed -f $(SRCDIR)/VERSION >manifest_.c
434
435 manifest.o: manifest_.c manifest.h $(SRCDIR)/config.h
436 $(XTCC) -o manifest.o -c manifest_.c
437
438 manifest.h: makeheaders
439 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
440 touch headers
441
442 md5_.c: $(SRCDIR)/md5.c $(SRCDIR)/VERSION translate
443 ./translate $(SRCDIR)/md5.c | sed -f $(SRCDIR)/VERSION >md5_.c
444
445 md5.o: md5_.c md5.h $(SRCDIR)/config.h
446 $(XTCC) -o md5.o -c md5_.c
447
448 md5.h: makeheaders
449 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
450 touch headers
451
452 merge_.c: $(SRCDIR)/merge.c $(SRCDIR)/VERSION translate
453 ./translate $(SRCDIR)/merge.c | sed -f $(SRCDIR)/VERSION >merge_.c
454
455 merge.o: merge_.c merge.h $(SRCDIR)/config.h
456 $(XTCC) -o merge.o -c merge_.c
457
458 merge.h: makeheaders
459 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
460 touch headers
461
462 merge3_.c: $(SRCDIR)/merge3.c $(SRCDIR)/VERSION translate
463 ./translate $(SRCDIR)/merge3.c | sed -f $(SRCDIR)/VERSION >merge3_.c
464
465 merge3.o: merge3_.c merge3.h $(SRCDIR)/config.h
466 $(XTCC) -o merge3.o -c merge3_.c
467
468 merge3.h: makeheaders
469 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
470 touch headers
471
472 name_.c: $(SRCDIR)/name.c $(SRCDIR)/VERSION translate
473 ./translate $(SRCDIR)/name.c | sed -f $(SRCDIR)/VERSION >name_.c
474
475 name.o: name_.c name.h $(SRCDIR)/config.h
476 $(XTCC) -o name.o -c name_.c
477
478 name.h: makeheaders
479 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
480 touch headers
481
482 pivot_.c: $(SRCDIR)/pivot.c $(SRCDIR)/VERSION translate
483 ./translate $(SRCDIR)/pivot.c | sed -f $(SRCDIR)/VERSION >pivot_.c
484
485 pivot.o: pivot_.c pivot.h $(SRCDIR)/config.h
486 $(XTCC) -o pivot.o -c pivot_.c
487
488 pivot.h: makeheaders
489 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
490 touch headers
491
492 pqueue_.c: $(SRCDIR)/pqueue.c $(SRCDIR)/VERSION translate
493 ./translate $(SRCDIR)/pqueue.c | sed -f $(SRCDIR)/VERSION >pqueue_.c
494
495 pqueue.o: pqueue_.c pqueue.h $(SRCDIR)/config.h
496 $(XTCC) -o pqueue.o -c pqueue_.c
497
498 pqueue.h: makeheaders
499 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
500 touch headers
501
502 printf_.c: $(SRCDIR)/printf.c $(SRCDIR)/VERSION translate
503 ./translate $(SRCDIR)/printf.c | sed -f $(SRCDIR)/VERSION >printf_.c
504
505 printf.o: printf_.c printf.h $(SRCDIR)/config.h
506 $(XTCC) -o printf.o -c printf_.c
507
508 printf.h: makeheaders
509 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
510 touch headers
511
512 rebuild_.c: $(SRCDIR)/rebuild.c $(SRCDIR)/VERSION translate
513 ./translate $(SRCDIR)/rebuild.c | sed -f $(SRCDIR)/VERSION >rebuild_.c
514
515 rebuild.o: rebuild_.c rebuild.h $(SRCDIR)/config.h
516 $(XTCC) -o rebuild.o -c rebuild_.c
517
518 rebuild.h: makeheaders
519 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
520 touch headers
521
522 schema_.c: $(SRCDIR)/schema.c $(SRCDIR)/VERSION translate
523 ./translate $(SRCDIR)/schema.c | sed -f $(SRCDIR)/VERSION >schema_.c
524
525 schema.o: schema_.c schema.h $(SRCDIR)/config.h
526 $(XTCC) -o schema.o -c schema_.c
527
528 schema.h: makeheaders
529 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
530 touch headers
531
532 setup_.c: $(SRCDIR)/setup.c $(SRCDIR)/VERSION translate
533 ./translate $(SRCDIR)/setup.c | sed -f $(SRCDIR)/VERSION >setup_.c
534
535 setup.o: setup_.c setup.h $(SRCDIR)/config.h
536 $(XTCC) -o setup.o -c setup_.c
537
538 setup.h: makeheaders
539 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
540 touch headers
541
542 sha1_.c: $(SRCDIR)/sha1.c $(SRCDIR)/VERSION translate
543 ./translate $(SRCDIR)/sha1.c | sed -f $(SRCDIR)/VERSION >sha1_.c
544
545 sha1.o: sha1_.c sha1.h $(SRCDIR)/config.h
546 $(XTCC) -o sha1.o -c sha1_.c
547
548 sha1.h: makeheaders
549 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
550 touch headers
551
552 style_.c: $(SRCDIR)/style.c $(SRCDIR)/VERSION translate
553 ./translate $(SRCDIR)/style.c | sed -f $(SRCDIR)/VERSION >style_.c
554
555 style.o: style_.c style.h $(SRCDIR)/config.h
556 $(XTCC) -o style.o -c style_.c
557
558 style.h: makeheaders
559 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
560 touch headers
561
562 sync_.c: $(SRCDIR)/sync.c $(SRCDIR)/VERSION translate
563 ./translate $(SRCDIR)/sync.c | sed -f $(SRCDIR)/VERSION >sync_.c
564
565 sync.o: sync_.c sync.h $(SRCDIR)/config.h
566 $(XTCC) -o sync.o -c sync_.c
567
568 sync.h: makeheaders
569 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
570 touch headers
571
572 timeline_.c: $(SRCDIR)/timeline.c $(SRCDIR)/VERSION translate
573 ./translate $(SRCDIR)/timeline.c | sed -f $(SRCDIR)/VERSION >timeline_.c
574
575 timeline.o: timeline_.c timeline.h $(SRCDIR)/config.h
576 $(XTCC) -o timeline.o -c timeline_.c
577
578 timeline.h: makeheaders
579 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
580 touch headers
581
582 update_.c: $(SRCDIR)/update.c $(SRCDIR)/VERSION translate
583 ./translate $(SRCDIR)/update.c | sed -f $(SRCDIR)/VERSION >update_.c
584
585 update.o: update_.c update.h $(SRCDIR)/config.h
586 $(XTCC) -o update.o -c update_.c
587
588 update.h: makeheaders
589 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
590 touch headers
591
592 url_.c: $(SRCDIR)/url.c $(SRCDIR)/VERSION translate
593 ./translate $(SRCDIR)/url.c | sed -f $(SRCDIR)/VERSION >url_.c
594
595 url.o: url_.c url.h $(SRCDIR)/config.h
596 $(XTCC) -o url.o -c url_.c
597
598 url.h: makeheaders
599 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
600 touch headers
601
602 user_.c: $(SRCDIR)/user.c $(SRCDIR)/VERSION translate
603 ./translate $(SRCDIR)/user.c | sed -f $(SRCDIR)/VERSION >user_.c
604
605 user.o: user_.c user.h $(SRCDIR)/config.h
606 $(XTCC) -o user.o -c user_.c
607
608 user.h: makeheaders
609 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
610 touch headers
611
612 verify_.c: $(SRCDIR)/verify.c $(SRCDIR)/VERSION translate
613 ./translate $(SRCDIR)/verify.c | sed -f $(SRCDIR)/VERSION >verify_.c
614
615 verify.o: verify_.c verify.h $(SRCDIR)/config.h
616 $(XTCC) -o verify.o -c verify_.c
617
618 verify.h: makeheaders
619 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
620 touch headers
621
622 vfile_.c: $(SRCDIR)/vfile.c $(SRCDIR)/VERSION translate
623 ./translate $(SRCDIR)/vfile.c | sed -f $(SRCDIR)/VERSION >vfile_.c
624
625 vfile.o: vfile_.c vfile.h $(SRCDIR)/config.h
626 $(XTCC) -o vfile.o -c vfile_.c
627
628 vfile.h: makeheaders
629 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
630 touch headers
631
632 wiki_.c: $(SRCDIR)/wiki.c $(SRCDIR)/VERSION translate
633 ./translate $(SRCDIR)/wiki.c | sed -f $(SRCDIR)/VERSION >wiki_.c
634
635 wiki.o: wiki_.c wiki.h $(SRCDIR)/config.h
636 $(XTCC) -o wiki.o -c wiki_.c
637
638 wiki.h: makeheaders
639 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
640 touch headers
641
642 wikiformat_.c: $(SRCDIR)/wikiformat.c $(SRCDIR)/VERSION translate
643 ./translate $(SRCDIR)/wikiformat.c | sed -f $(SRCDIR)/VERSION >wikiformat_.c
644
645 wikiformat.o: wikiformat_.c wikiformat.h $(SRCDIR)/config.h
646 $(XTCC) -o wikiformat.o -c wikiformat_.c
647
648 wikiformat.h: makeheaders
649 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
650 touch headers
651
652 xfer_.c: $(SRCDIR)/xfer.c $(SRCDIR)/VERSION translate
653 ./translate $(SRCDIR)/xfer.c | sed -f $(SRCDIR)/VERSION >xfer_.c
654
655 xfer.o: xfer_.c xfer.h $(SRCDIR)/config.h
656 $(XTCC) -o xfer.o -c xfer_.c
657
658 xfer.h: makeheaders
659 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
660 touch headers
661
662 zip_.c: $(SRCDIR)/zip.c $(SRCDIR)/VERSION translate
663 ./translate $(SRCDIR)/zip.c | sed -f $(SRCDIR)/VERSION >zip_.c
664
665 zip.o: zip_.c zip.h $(SRCDIR)/config.h
666 $(XTCC) -o zip.o -c zip_.c
667
668 zip.h: makeheaders
669 ./makeheaders add_.c:add.h bag_.c:bag.h blob_.c:blob.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h construct_.c:construct.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendents_.c:descendents.h diff_.c:diff.h diffcmd_.c:diffcmd.h encode_.c:encode.h file_.c:file.h http_.c:http.h info_.c:info.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h pivot_.c:pivot.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h schema_.c:schema.h setup_.c:setup.h sha1_.c:sha1.h style_.c:style.h sync_.c:sync.h timeline_.c:timeline.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)/sqlite3.h ./VERSION.h
670 touch headers
671
672 sqlite3.o: $(SRCDIR)/sqlite3.c
673 $(XTCC) -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_PRIVATE= -DTHREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -c $(SRCDIR)/sqlite3.c -o sqlite3.o
674
675
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -5,10 +5,11 @@
55
66
# Basenames of all source files:
77
#
88
set src {
99
add
10
+ bag
1011
blob
1112
cgi
1213
checkin
1314
checkout
1415
clearsign
@@ -32,10 +33,11 @@
3233
md5
3334
merge
3435
merge3
3536
name
3637
pivot
38
+ pqueue
3739
printf
3840
rebuild
3941
schema
4042
setup
4143
sha1
4244
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -5,10 +5,11 @@
5
6 # Basenames of all source files:
7 #
8 set src {
9 add
 
10 blob
11 cgi
12 checkin
13 checkout
14 clearsign
@@ -32,10 +33,11 @@
32 md5
33 merge
34 merge3
35 name
36 pivot
 
37 printf
38 rebuild
39 schema
40 setup
41 sha1
42
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -5,10 +5,11 @@
5
6 # Basenames of all source files:
7 #
8 set src {
9 add
10 bag
11 blob
12 cgi
13 checkin
14 checkout
15 clearsign
@@ -32,10 +33,11 @@
33 md5
34 merge
35 merge3
36 name
37 pivot
38 pqueue
39 printf
40 rebuild
41 schema
42 setup
43 sha1
44
+34 -1
--- src/manifest.c
+++ src/manifest.c
@@ -27,11 +27,11 @@
2727
#include "manifest.h"
2828
#include <assert.h>
2929
3030
#if INTERFACE
3131
/*
32
-** A parsed manifest
32
+** A parsed manifest or cluster.
3333
*/
3434
struct Manifest {
3535
Blob content; /* The original content blob */
3636
char *zComment; /* Decoded comment */
3737
double rDate; /* Time in the "D" line */
@@ -44,10 +44,13 @@
4444
char *zUuid; /* UUID of the file */
4545
} *aFile;
4646
int nParent; /* Number of parents */
4747
int nParentAlloc; /* Slots allocated in azParent[] */
4848
char **azParent; /* UUIDs of parents */
49
+ int nCChild; /* Number of cluster children */
50
+ int nCChildAlloc; /* Number of closts allocated in azCChild[] */
51
+ char **azCChild; /* UUIDs of referenced objects in a cluster */
4952
};
5053
#endif
5154
5255
5356
/*
@@ -55,10 +58,11 @@
5558
*/
5659
void manifest_clear(Manifest *p){
5760
blob_reset(&p->content);
5861
free(p->aFile);
5962
free(p->azParent);
63
+ free(p->azCChild);
6064
memset(p, 0, sizeof(*p));
6165
}
6266
6367
/*
6468
** Parse a manifest blob into a Manifest object. The Manifest
@@ -140,10 +144,28 @@
140144
if( p->rDate!=0.0 ) goto manifest_syntax_error;
141145
if( blob_token(&line, &a1)==0 ) goto manifest_syntax_error;
142146
if( blob_token(&line, &a2)!=0 ) goto manifest_syntax_error;
143147
zDate = blob_terminate(&a1);
144148
p->rDate = db_double(0.0, "SELECT julianday(%Q)", zDate);
149
+ }else if( z[0]=='M' ){
150
+ char *zUuid;
151
+ md5sum_step_text(blob_buffer(&line), blob_size(&line));
152
+ if( blob_token(&line, &a1)==0 ) goto manifest_syntax_error;
153
+ zUuid = blob_terminate(&a1);
154
+ if( blob_size(&a1)!=UUID_SIZE ) goto manifest_syntax_error;
155
+ if( !validate16(zUuid, UUID_SIZE) ) goto manifest_syntax_error;
156
+ if( p->nCChild>=p->nCChildAlloc ){
157
+ p->nCChildAlloc = p->nCChildAlloc*2 + 10;
158
+ p->azCChild =
159
+ realloc(p->azCChild, p->nCChildAlloc*sizeof(p->azCChild[0]) );
160
+ if( p->azCChild==0 ) fossil_panic("out of memory");
161
+ }
162
+ i = p->nCChild++;
163
+ p->azCChild[i] = zUuid;
164
+ if( i>0 && strcmp(p->azCChild[i-1], zUuid)>=0 ){
165
+ goto manifest_syntax_error;
166
+ }
145167
}else if( z[0]=='U' ){
146168
md5sum_step_text(blob_buffer(&line), blob_size(&line));
147169
if( p->zUser!=0 ) goto manifest_syntax_error;
148170
if( blob_token(&line, &a1)==0 ) goto manifest_syntax_error;
149171
if( blob_token(&line, &a2)!=0 ) goto manifest_syntax_error;
@@ -291,10 +313,14 @@
291313
292314
/*
293315
** Scan record rid/pContent to see if it is a manifest. If
294316
** it is a manifest, then populate the mlink, plink,
295317
** filename, and event tables with cross-reference information.
318
+**
319
+** (Later:) Also check to see if pContent is a cluster. If it
320
+** is a cluster then remove all referenced elements from the
321
+** unclustered table and create phantoms for any unknown elements.
296322
*/
297323
int manifest_crosslink(int rid, Blob *pContent){
298324
int i;
299325
Manifest m;
300326
Stmt q;
@@ -321,10 +347,17 @@
321347
db_multi_exec(
322348
"INSERT INTO event(type,mtime,objid,user,comment)"
323349
"VALUES('ci',%.17g,%d,%Q,%Q)",
324350
m.rDate, rid, m.zUser, m.zComment
325351
);
352
+ }
353
+ for(i=0; i<m.nCChild; i++){
354
+ int rid;
355
+ rid = uuid_to_rid(m.azCChild[i], 1);
356
+ if( rid>0 ){
357
+ db_multi_exec("DELETE FROM unclustered WHERE rid=%d", rid);
358
+ }
326359
}
327360
db_end_transaction(0);
328361
manifest_clear(&m);
329362
return 1;
330363
}
331364
332365
ADDED src/pqueue.c
--- src/manifest.c
+++ src/manifest.c
@@ -27,11 +27,11 @@
27 #include "manifest.h"
28 #include <assert.h>
29
30 #if INTERFACE
31 /*
32 ** A parsed manifest
33 */
34 struct Manifest {
35 Blob content; /* The original content blob */
36 char *zComment; /* Decoded comment */
37 double rDate; /* Time in the "D" line */
@@ -44,10 +44,13 @@
44 char *zUuid; /* UUID of the file */
45 } *aFile;
46 int nParent; /* Number of parents */
47 int nParentAlloc; /* Slots allocated in azParent[] */
48 char **azParent; /* UUIDs of parents */
 
 
 
49 };
50 #endif
51
52
53 /*
@@ -55,10 +58,11 @@
55 */
56 void manifest_clear(Manifest *p){
57 blob_reset(&p->content);
58 free(p->aFile);
59 free(p->azParent);
 
60 memset(p, 0, sizeof(*p));
61 }
62
63 /*
64 ** Parse a manifest blob into a Manifest object. The Manifest
@@ -140,10 +144,28 @@
140 if( p->rDate!=0.0 ) goto manifest_syntax_error;
141 if( blob_token(&line, &a1)==0 ) goto manifest_syntax_error;
142 if( blob_token(&line, &a2)!=0 ) goto manifest_syntax_error;
143 zDate = blob_terminate(&a1);
144 p->rDate = db_double(0.0, "SELECT julianday(%Q)", zDate);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145 }else if( z[0]=='U' ){
146 md5sum_step_text(blob_buffer(&line), blob_size(&line));
147 if( p->zUser!=0 ) goto manifest_syntax_error;
148 if( blob_token(&line, &a1)==0 ) goto manifest_syntax_error;
149 if( blob_token(&line, &a2)!=0 ) goto manifest_syntax_error;
@@ -291,10 +313,14 @@
291
292 /*
293 ** Scan record rid/pContent to see if it is a manifest. If
294 ** it is a manifest, then populate the mlink, plink,
295 ** filename, and event tables with cross-reference information.
 
 
 
 
296 */
297 int manifest_crosslink(int rid, Blob *pContent){
298 int i;
299 Manifest m;
300 Stmt q;
@@ -321,10 +347,17 @@
321 db_multi_exec(
322 "INSERT INTO event(type,mtime,objid,user,comment)"
323 "VALUES('ci',%.17g,%d,%Q,%Q)",
324 m.rDate, rid, m.zUser, m.zComment
325 );
 
 
 
 
 
 
 
326 }
327 db_end_transaction(0);
328 manifest_clear(&m);
329 return 1;
330 }
331
332 DDED src/pqueue.c
--- src/manifest.c
+++ src/manifest.c
@@ -27,11 +27,11 @@
27 #include "manifest.h"
28 #include <assert.h>
29
30 #if INTERFACE
31 /*
32 ** A parsed manifest or cluster.
33 */
34 struct Manifest {
35 Blob content; /* The original content blob */
36 char *zComment; /* Decoded comment */
37 double rDate; /* Time in the "D" line */
@@ -44,10 +44,13 @@
44 char *zUuid; /* UUID of the file */
45 } *aFile;
46 int nParent; /* Number of parents */
47 int nParentAlloc; /* Slots allocated in azParent[] */
48 char **azParent; /* UUIDs of parents */
49 int nCChild; /* Number of cluster children */
50 int nCChildAlloc; /* Number of closts allocated in azCChild[] */
51 char **azCChild; /* UUIDs of referenced objects in a cluster */
52 };
53 #endif
54
55
56 /*
@@ -55,10 +58,11 @@
58 */
59 void manifest_clear(Manifest *p){
60 blob_reset(&p->content);
61 free(p->aFile);
62 free(p->azParent);
63 free(p->azCChild);
64 memset(p, 0, sizeof(*p));
65 }
66
67 /*
68 ** Parse a manifest blob into a Manifest object. The Manifest
@@ -140,10 +144,28 @@
144 if( p->rDate!=0.0 ) goto manifest_syntax_error;
145 if( blob_token(&line, &a1)==0 ) goto manifest_syntax_error;
146 if( blob_token(&line, &a2)!=0 ) goto manifest_syntax_error;
147 zDate = blob_terminate(&a1);
148 p->rDate = db_double(0.0, "SELECT julianday(%Q)", zDate);
149 }else if( z[0]=='M' ){
150 char *zUuid;
151 md5sum_step_text(blob_buffer(&line), blob_size(&line));
152 if( blob_token(&line, &a1)==0 ) goto manifest_syntax_error;
153 zUuid = blob_terminate(&a1);
154 if( blob_size(&a1)!=UUID_SIZE ) goto manifest_syntax_error;
155 if( !validate16(zUuid, UUID_SIZE) ) goto manifest_syntax_error;
156 if( p->nCChild>=p->nCChildAlloc ){
157 p->nCChildAlloc = p->nCChildAlloc*2 + 10;
158 p->azCChild =
159 realloc(p->azCChild, p->nCChildAlloc*sizeof(p->azCChild[0]) );
160 if( p->azCChild==0 ) fossil_panic("out of memory");
161 }
162 i = p->nCChild++;
163 p->azCChild[i] = zUuid;
164 if( i>0 && strcmp(p->azCChild[i-1], zUuid)>=0 ){
165 goto manifest_syntax_error;
166 }
167 }else if( z[0]=='U' ){
168 md5sum_step_text(blob_buffer(&line), blob_size(&line));
169 if( p->zUser!=0 ) goto manifest_syntax_error;
170 if( blob_token(&line, &a1)==0 ) goto manifest_syntax_error;
171 if( blob_token(&line, &a2)!=0 ) goto manifest_syntax_error;
@@ -291,10 +313,14 @@
313
314 /*
315 ** Scan record rid/pContent to see if it is a manifest. If
316 ** it is a manifest, then populate the mlink, plink,
317 ** filename, and event tables with cross-reference information.
318 **
319 ** (Later:) Also check to see if pContent is a cluster. If it
320 ** is a cluster then remove all referenced elements from the
321 ** unclustered table and create phantoms for any unknown elements.
322 */
323 int manifest_crosslink(int rid, Blob *pContent){
324 int i;
325 Manifest m;
326 Stmt q;
@@ -321,10 +347,17 @@
347 db_multi_exec(
348 "INSERT INTO event(type,mtime,objid,user,comment)"
349 "VALUES('ci',%.17g,%d,%Q,%Q)",
350 m.rDate, rid, m.zUser, m.zComment
351 );
352 }
353 for(i=0; i<m.nCChild; i++){
354 int rid;
355 rid = uuid_to_rid(m.azCChild[i], 1);
356 if( rid>0 ){
357 db_multi_exec("DELETE FROM unclustered WHERE rid=%d", rid);
358 }
359 }
360 db_end_transaction(0);
361 manifest_clear(&m);
362 return 1;
363 }
364
365 DDED src/pqueue.c
+11
--- a/src/pqueue.c
+++ b/src/pqueue.c
@@ -0,0 +1,11 @@
1
+/*
2
+** CopyrigGNU General Public
3
+** License version 2 as published by the Free Software Foundation.
4
+**WITHOUT ANY WARRANTYMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5
+** General Public License for more details.
6
+**
7
+** You should have received a copy of the GNU General Public
8
+** License along with this library; if not, write to the
9
+** Free Software Foundation, Inc., 59 Temple Place - Suite 330,
10
+** Boston, MA 02111-1307, USACopyrig/*
11
+** Copyrig
--- a/src/pqueue.c
+++ b/src/pqueue.c
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
--- a/src/pqueue.c
+++ b/src/pqueue.c
@@ -0,0 +1,11 @@
1 /*
2 ** CopyrigGNU General Public
3 ** License version 2 as published by the Free Software Foundation.
4 **WITHOUT ANY WARRANTYMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5 ** General Public License for more details.
6 **
7 ** You should have received a copy of the GNU General Public
8 ** License along with this library; if not, write to the
9 ** Free Software Foundation, Inc., 59 Temple Place - Suite 330,
10 ** Boston, MA 02111-1307, USACopyrig/*
11 ** Copyrig
+5 -1
--- src/rebuild.c
+++ src/rebuild.c
@@ -52,10 +52,14 @@
5252
db_multi_exec("DROP TABLE %Q", zTable);
5353
free(zTable);
5454
}
5555
db_multi_exec(zRepositorySchema2);
5656
57
+ db_multi_exec("INSERT INTO unclustered SELECT rid FROM blob");
58
+ db_multi_exec(
59
+ "DELETE FROM config WHERE name IN ('remote-code', 'remote-maxid')"
60
+ );
5761
db_prepare(&s, "SELECT rid, size FROM blob");
5862
while( db_step(&s)==SQLITE_ROW ){
5963
int rid = db_column_int(&s, 0);
6064
int size = db_column_int(&s, 1);
6165
if( size>=0 ){
@@ -62,11 +66,11 @@
6266
Blob content;
6367
content_get(rid, &content);
6468
manifest_crosslink(rid, &content);
6569
blob_reset(&content);
6670
}else{
67
- db_multi_exec("INSERT INTO phantom VALUES(%d)", rid);
71
+ db_multi_exec("INSERT OR IGNORE INTO phantom VALUES(%d)", rid);
6872
}
6973
}
7074
return errCnt;
7175
}
7276
7377
--- src/rebuild.c
+++ src/rebuild.c
@@ -52,10 +52,14 @@
52 db_multi_exec("DROP TABLE %Q", zTable);
53 free(zTable);
54 }
55 db_multi_exec(zRepositorySchema2);
56
 
 
 
 
57 db_prepare(&s, "SELECT rid, size FROM blob");
58 while( db_step(&s)==SQLITE_ROW ){
59 int rid = db_column_int(&s, 0);
60 int size = db_column_int(&s, 1);
61 if( size>=0 ){
@@ -62,11 +66,11 @@
62 Blob content;
63 content_get(rid, &content);
64 manifest_crosslink(rid, &content);
65 blob_reset(&content);
66 }else{
67 db_multi_exec("INSERT INTO phantom VALUES(%d)", rid);
68 }
69 }
70 return errCnt;
71 }
72
73
--- src/rebuild.c
+++ src/rebuild.c
@@ -52,10 +52,14 @@
52 db_multi_exec("DROP TABLE %Q", zTable);
53 free(zTable);
54 }
55 db_multi_exec(zRepositorySchema2);
56
57 db_multi_exec("INSERT INTO unclustered SELECT rid FROM blob");
58 db_multi_exec(
59 "DELETE FROM config WHERE name IN ('remote-code', 'remote-maxid')"
60 );
61 db_prepare(&s, "SELECT rid, size FROM blob");
62 while( db_step(&s)==SQLITE_ROW ){
63 int rid = db_column_int(&s, 0);
64 int size = db_column_int(&s, 1);
65 if( size>=0 ){
@@ -62,11 +66,11 @@
66 Blob content;
67 content_get(rid, &content);
68 manifest_crosslink(rid, &content);
69 blob_reset(&content);
70 }else{
71 db_multi_exec("INSERT OR IGNORE INTO phantom VALUES(%d)", rid);
72 }
73 }
74 return errCnt;
75 }
76
77
+23 -1
--- src/schema.c
+++ src/schema.c
@@ -162,15 +162,37 @@
162162
@ comment TEXT
163163
@ );
164164
@ CREATE INDEX event_i1 ON event(mtime);
165165
@ CREATE INDEX event_i2 ON event(objid);
166166
@
167
-@ -- A record of phantoms
167
+@ -- A record of phantoms. A phantom is a record for which we know the
168
+@ -- UUID but we do not (yet) know the file content.
168169
@ --
169170
@ CREATE TABLE phantom(
170171
@ rid INTEGER PRIMARY KEY -- Record ID of the phantom
171172
@ );
173
+@
174
+@ -- Unclustered records. An unclustered record is a record (including
175
+@ -- a cluster records themselves) that is not mentioned by some other
176
+@ -- cluster.
177
+@ --
178
+@ -- Phantoms are usually included in the unclustered table. A new cluster
179
+@ -- will never be created that contains a phantom. But another repository
180
+@ -- might send us a cluster that contains entries that are phantoms to
181
+@ -- us.
182
+@ --
183
+@ CREATE TABLE unclustered(
184
+@ rid INTEGER PRIMARY KEY -- Record ID of the unclustered file
185
+@ );
186
+@
187
+@ -- Records which have never been pushed to another server. This is
188
+@ -- used to reduce push operations to a single HTTP request in the
189
+@ -- common case when one repository only talks to a single server.
190
+@ --
191
+@ CREATE TABLE unsent(
192
+@ rid INTEGER PRIMARY KEY -- Record ID of the phantom
193
+@ );
172194
@
173195
@ -- Aggregated ticket information
174196
@ --
175197
@ CREATE TABLE tkt(
176198
@ tktid INTEGER PRIMARY KEY, -- Internal ticket ID
177199
--- src/schema.c
+++ src/schema.c
@@ -162,15 +162,37 @@
162 @ comment TEXT
163 @ );
164 @ CREATE INDEX event_i1 ON event(mtime);
165 @ CREATE INDEX event_i2 ON event(objid);
166 @
167 @ -- A record of phantoms
 
168 @ --
169 @ CREATE TABLE phantom(
170 @ rid INTEGER PRIMARY KEY -- Record ID of the phantom
171 @ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
172 @
173 @ -- Aggregated ticket information
174 @ --
175 @ CREATE TABLE tkt(
176 @ tktid INTEGER PRIMARY KEY, -- Internal ticket ID
177
--- src/schema.c
+++ src/schema.c
@@ -162,15 +162,37 @@
162 @ comment TEXT
163 @ );
164 @ CREATE INDEX event_i1 ON event(mtime);
165 @ CREATE INDEX event_i2 ON event(objid);
166 @
167 @ -- A record of phantoms. A phantom is a record for which we know the
168 @ -- UUID but we do not (yet) know the file content.
169 @ --
170 @ CREATE TABLE phantom(
171 @ rid INTEGER PRIMARY KEY -- Record ID of the phantom
172 @ );
173 @
174 @ -- Unclustered records. An unclustered record is a record (including
175 @ -- a cluster records themselves) that is not mentioned by some other
176 @ -- cluster.
177 @ --
178 @ -- Phantoms are usually included in the unclustered table. A new cluster
179 @ -- will never be created that contains a phantom. But another repository
180 @ -- might send us a cluster that contains entries that are phantoms to
181 @ -- us.
182 @ --
183 @ CREATE TABLE unclustered(
184 @ rid INTEGER PRIMARY KEY -- Record ID of the unclustered file
185 @ );
186 @
187 @ -- Records which have never been pushed to another server. This is
188 @ -- used to reduce push operations to a single HTTP request in the
189 @ -- common case when one repository only talks to a single server.
190 @ --
191 @ CREATE TABLE unsent(
192 @ rid INTEGER PRIMARY KEY -- Record ID of the phantom
193 @ );
194 @
195 @ -- Aggregated ticket information
196 @ --
197 @ CREATE TABLE tkt(
198 @ tktid INTEGER PRIMARY KEY, -- Internal ticket ID
199
+2 -1
--- src/setup.c
+++ src/setup.c
@@ -520,11 +520,12 @@
520520
521521
@ <hr>
522522
entry_attribute("Home page", 60, "homepage", "hp", "");
523523
@ <p>The name of a wiki file that is the homepage for the website.
524524
@ The home page is the page that is displayed by the "Home" link
525
- @ at the top of this screen.</p>
525
+ @ at the top of this screen. Omit the path and the ".wiki"
526
+ @ suffix. </p>
526527
527528
entry_attribute("Ticket subdirectory", 60, "ticket-subdir", "tsd", "");
528529
@ <p>A subdirectory in the file hierarchy that contains all trouble
529530
@ tickets. Leave this blank to disable ticketing. Tickets text
530531
@ files within this subdirectory containing a particular format
531532
--- src/setup.c
+++ src/setup.c
@@ -520,11 +520,12 @@
520
521 @ <hr>
522 entry_attribute("Home page", 60, "homepage", "hp", "");
523 @ <p>The name of a wiki file that is the homepage for the website.
524 @ The home page is the page that is displayed by the "Home" link
525 @ at the top of this screen.</p>
 
526
527 entry_attribute("Ticket subdirectory", 60, "ticket-subdir", "tsd", "");
528 @ <p>A subdirectory in the file hierarchy that contains all trouble
529 @ tickets. Leave this blank to disable ticketing. Tickets text
530 @ files within this subdirectory containing a particular format
531
--- src/setup.c
+++ src/setup.c
@@ -520,11 +520,12 @@
520
521 @ <hr>
522 entry_attribute("Home page", 60, "homepage", "hp", "");
523 @ <p>The name of a wiki file that is the homepage for the website.
524 @ The home page is the page that is displayed by the "Home" link
525 @ at the top of this screen. Omit the path and the ".wiki"
526 @ suffix. </p>
527
528 entry_attribute("Ticket subdirectory", 60, "ticket-subdir", "tsd", "");
529 @ <p>A subdirectory in the file hierarchy that contains all trouble
530 @ tickets. Leave this blank to disable ticketing. Tickets text
531 @ files within this subdirectory containing a particular format
532
+10 -3
--- src/style.c
+++ src/style.c
@@ -133,13 +133,20 @@
133133
** WEBPAGE: index
134134
** WEBPAGE: home
135135
** WEBPAGE: not_found
136136
*/
137137
void page_index(void){
138
- style_header("Main Title Page");
139
- @ This will become the title page
140
- style_footer();
138
+ char *zHome = db_get("homepage", 0);
139
+ if( zHome ){
140
+ g.zExtra = zHome;
141
+ g.okRdWiki = 1;
142
+ wiki_page();
143
+ }else{
144
+ style_header("Main Title Page");
145
+ @ No homepage configured for this server
146
+ style_footer();
147
+ }
141148
}
142149
143150
/*
144151
** WEBPAGE: test_env
145152
*/
146153
--- src/style.c
+++ src/style.c
@@ -133,13 +133,20 @@
133 ** WEBPAGE: index
134 ** WEBPAGE: home
135 ** WEBPAGE: not_found
136 */
137 void page_index(void){
138 style_header("Main Title Page");
139 @ This will become the title page
140 style_footer();
 
 
 
 
 
 
 
141 }
142
143 /*
144 ** WEBPAGE: test_env
145 */
146
--- src/style.c
+++ src/style.c
@@ -133,13 +133,20 @@
133 ** WEBPAGE: index
134 ** WEBPAGE: home
135 ** WEBPAGE: not_found
136 */
137 void page_index(void){
138 char *zHome = db_get("homepage", 0);
139 if( zHome ){
140 g.zExtra = zHome;
141 g.okRdWiki = 1;
142 wiki_page();
143 }else{
144 style_header("Main Title Page");
145 @ No homepage configured for this server
146 style_footer();
147 }
148 }
149
150 /*
151 ** WEBPAGE: test_env
152 */
153
+130 -22
--- src/timeline.c
+++ src/timeline.c
@@ -22,10 +22,11 @@
2222
*******************************************************************************
2323
**
2424
** This file contains code to implement the timeline web page
2525
**
2626
*/
27
+#include <string.h>
2728
#include "config.h"
2829
#include "timeline.h"
2930
3031
/*
3132
** Generate a hyperlink to a version.
@@ -87,24 +88,37 @@
8788
** 6. Number of parents
8889
** 7. True if is a leaf
8990
*/
9091
void www_print_timeline(
9192
Stmt *pQuery,
92
- char *zLastDate,
93
+ int *pFirstEvent,
94
+ int *pLastEvent,
9395
int (*xCallback)(int, Blob*),
9496
Blob *pArg
9597
){
9698
char zPrevDate[20];
99
+ int cnt = 0;
97100
zPrevDate[0] = 0;
101
+ db_multi_exec(
102
+ "CREATE TEMP TABLE IF NOT EXISTS seen(rid INTEGER PRIMARY KEY);"
103
+ "DELETE FROM seen;"
104
+ );
98105
@ <table cellspacing=0 border=0 cellpadding=0>
99106
while( db_step(pQuery)==SQLITE_ROW ){
100107
int rid = db_column_int(pQuery, 0);
101108
const char *zUuid = db_column_text(pQuery, 1);
102109
int nPChild = db_column_int(pQuery, 5);
103110
int nParent = db_column_int(pQuery, 6);
104111
int isLeaf = db_column_int(pQuery, 7);
105112
const char *zDate = db_column_text(pQuery, 2);
113
+ if( cnt==0 && pFirstEvent ){
114
+ *pFirstEvent = rid;
115
+ }
116
+ if( pLastEvent ){
117
+ *pLastEvent = rid;
118
+ }
119
+ db_multi_exec("INSERT OR IGNORE INTO seen VALUES(%d)", rid);
106120
if( xCallback ){
107121
xCallback(rid, pArg);
108122
}
109123
if( memcmp(zDate, zPrevDate, 10) ){
110124
sprintf(zPrevDate, "%.10s", zDate);
@@ -132,13 +146,10 @@
132146
if( isLeaf ){
133147
@ <b>Leaf</b>
134148
}
135149
@ %h(db_column_text(pQuery,3))
136150
@ (by %h(db_column_text(pQuery,4)))</td></tr>
137
- if( zLastDate ){
138
- strcpy(zLastDate, zDate);
139
- }
140151
}
141152
@ </table>
142153
}
143154
144155
/*
@@ -172,18 +183,33 @@
172183
return 0;
173184
}
174185
175186
/*
176187
** WEBPAGE: timeline
188
+**
189
+** Query parameters:
190
+**
191
+** d=STARTDATE date in iso8601 notation. dflt: newest event
192
+** n=INTEGER number of events to show. dflt: 25
193
+** e=INTEGER starting event id. dflt: nil
194
+** u=NAME show only events from user. dflt: nil
195
+** a show events after and including. dflt: false
196
+** r show only related events. dflt: false
177197
*/
178198
void page_timeline(void){
179199
Stmt q;
180200
char *zSQL;
181201
Blob scriptInit;
182202
char zDate[100];
183203
const char *zStart = P("d");
184
- int nEntry = atoi(PD("n","25"));
204
+ int nEntry = atoi(PD("n","20"));
205
+ const char *zUser = P("u");
206
+ int objid = atoi(PD("e","0"));
207
+ int relatedEvents = P("r")!=0;
208
+ int afterFlag = P("a")!=0;
209
+ int firstEvent;
210
+ int lastEvent;
185211
186212
/* To view the timeline, must have permission to read project data.
187213
*/
188214
login_check_credentials();
189215
if( !g.okRead ){ login_needed(); return; }
@@ -202,23 +228,46 @@
202228
" (SELECT count(*) FROM plink WHERE cid=blob.rid),"
203229
" NOT EXISTS (SELECT 1 FROM plink WHERE pid=blob.rid)"
204230
" FROM event, blob"
205231
" WHERE event.type='ci' AND blob.rid=event.objid"
206232
);
233
+ if( zUser ){
234
+ zSQL = mprintf("%z AND event.user=%Q", zSQL, zUser);
235
+ }
236
+ if( objid ){
237
+ char *z = db_text(0, "SELECT datetime(event.mtime) FROM event"
238
+ " WHERE objid=%d", objid);
239
+ if( z ){
240
+ zStart = z;
241
+ }
242
+ }
207243
if( zStart ){
208244
while( isspace(zStart[0]) ){ zStart++; }
209245
if( zStart[0] ){
210
- zSQL = mprintf("%z AND event.mtime<=julianday(%Q, 'localtime')",
211
- zSQL, zStart);
246
+ zSQL = mprintf("%z AND event.mtime %s julianday(%Q, 'localtime')",
247
+ zSQL, afterFlag ? ">=" : "<=", zStart);
248
+ }
249
+ }
250
+ if( relatedEvents && objid ){
251
+ db_multi_exec(
252
+ "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY)"
253
+ );
254
+ if( afterFlag ){
255
+ compute_descendents(objid, nEntry);
256
+ }else{
257
+ compute_ancestors(objid, nEntry);
212258
}
259
+ zSQL = mprintf("%z AND event.objid IN ok", zSQL);
213260
}
214261
zSQL = mprintf("%z ORDER BY event.mtime DESC LIMIT %d", zSQL, nEntry);
215262
db_prepare(&q, zSQL);
216263
free(zSQL);
217264
zDate[0] = 0;
218265
blob_zero(&scriptInit);
219
- www_print_timeline(&q, zDate, save_parentage_javascript, &scriptInit);
266
+ zDate[0] = 0;
267
+ www_print_timeline(&q, &firstEvent, &lastEvent,
268
+ save_parentage_javascript, &scriptInit);
220269
db_finalize(&q);
221270
if( zStart==0 ){
222271
zStart = zDate;
223272
}
224273
@ <script>
@@ -350,48 +399,107 @@
350399
351400
352401
/*
353402
** COMMAND: timeline
354403
**
355
-** Usage: %fossil timeline ?DATETIME? ?-n|--count N?
404
+** Usage: %fossil timeline ?WHEN? ?UUID|DATETIME? ?-n|--count N?
356405
**
357406
** Print a summary of activity going backwards in date and time
358407
** specified or from the current date and time if no arguments
359
-** are given. Show as many as N (default 20) check-ins.
408
+** are given. Show as many as N (default 20) check-ins. The
409
+** WHEN argument can be any unique abbreviation of one of these
410
+** keywords:
411
+**
412
+** before
413
+** after
414
+** descendents | children
415
+** ancestors | parents
360416
**
361
-** The date and time should be in the ISO8601 format. For
362
-** examples: "2007-08-18 07:21:21". The time may be omitted.
363
-** Times are according to the local timezone.
417
+** The UUID can be any unique prefix of 4 characters or more.
418
+** The DATETIME should be in the ISO8601 format. For
419
+** examples: "2007-08-18 07:21:21". You can also say "current"
420
+** for the current version or "now" for the current time.
364421
*/
365422
void timeline_cmd(void){
366423
Stmt q;
367
- int n;
424
+ int n, k;
368425
const char *zCount;
426
+ char *zOrigin;
369427
char *zDate;
428
+ char *zSQL;
429
+ int objid = 0;
430
+ Blob uuid;
431
+ int mode = 1 ; /* 1: before 2:after 3:children 4:parents */
370432
db_find_and_open_repository();
371433
zCount = find_option("n","count",1);
372434
if( zCount ){
373435
n = atoi(zCount);
374436
}else{
375437
n = 20;
376438
}
377
- if( g.argc!=2 && g.argc!=3 ){
378
- usage("YYYY-MM-DDtHH:MM:SS");
439
+ if( g.argc==4 ){
440
+ k = strlen(g.argv[2]);
441
+ if( strncmp(g.argv[2],"before",k)==0 ){
442
+ mode = 1;
443
+ }else if( strncmp(g.argv[2],"after",k)==0 && k>1 ){
444
+ mode = 2;
445
+ }else if( strncmp(g.argv[2],"descendents",k)==0 ){
446
+ mode = 3;
447
+ }else if( strncmp(g.argv[2],"children",k)==0 ){
448
+ mode = 3;
449
+ }else if( strncmp(g.argv[2],"ancestors",k)==0 && k>1 ){
450
+ mode = 4;
451
+ }else if( strncmp(g.argv[2],"parents",k)==0 ){
452
+ mode = 4;
453
+ }else{
454
+ usage("?WHEN? ?UUID|DATETIME?");
455
+ }
456
+ zOrigin = g.argv[3];
457
+ }else if( g.argc==3 ){
458
+ zOrigin = g.argv[2];
459
+ }else{
460
+ zOrigin = "now";
379461
}
380
- if( g.argc==3 ){
381
- zDate = g.argv[2];
462
+ k = strlen(zOrigin);
463
+ blob_zero(&uuid);
464
+ blob_append(&uuid, zOrigin, -1);
465
+ if( strcmp(zOrigin, "now")==0 ){
466
+ if( mode==3 || mode==4 ){
467
+ fossil_fatal("cannot compute descendents or ancestors of a date");
468
+ }
469
+ zDate = mprintf("(SELECT julianday('now','utc'))");
470
+ }else if( strncmp(zOrigin, "current", k)==0 ){
471
+ objid = db_lget_int("checkout",0);
472
+ zDate = mprintf("(SELECT mtime FROM plink WHERE cid=%d)", objid);
473
+ }else if( name_to_uuid(&uuid, 0)==0 ){
474
+ objid = db_int(0, "SELECT rid FROM blob WHERE uuid=%B", &uuid);
475
+ zDate = mprintf("(SELECT mtime FROM plink WHERE cid=%d)", objid);
382476
}else{
383
- zDate = "now";
477
+ if( mode==3 || mode==4 ){
478
+ fossil_fatal("cannot compute descendents or ancestors of a date");
479
+ }
480
+ zDate = mprintf("(SELECT julianday(%Q, 'utc'))", zOrigin);
384481
}
385
- db_prepare(&q,
482
+ zSQL = mprintf(
386483
"SELECT blob.rid, uuid, datetime(event.mtime,'localtime'),"
387484
" comment || ' (by ' || user || ')',"
388485
" (SELECT count(*) FROM plink WHERE pid=blob.rid AND isprim),"
389486
" (SELECT count(*) FROM plink WHERE cid=blob.rid)"
390487
" FROM event, blob"
391488
" WHERE event.type='ci' AND blob.rid=event.objid"
392
- " AND event.mtime<=(SELECT julianday(%Q,'utc'))"
393
- " ORDER BY event.mtime DESC", zDate
489
+ " AND event.mtime %s %s",
490
+ (mode==1 || mode==4) ? "<=" : ">=", zDate
394491
);
492
+ if( mode==3 || mode==4 ){
493
+ db_multi_exec("CREATE TEMP TABLE ok(rid INTEGER PRIMARY KEY)");
494
+ if( mode==3 ){
495
+ compute_descendents(objid, n);
496
+ }else{
497
+ compute_ancestors(objid, n);
498
+ }
499
+ zSQL = mprintf("%z AND blob.rid IN ok", zSQL);
500
+ }
501
+ zSQL = mprintf("%z ORDER BY event.mtime DESC", zSQL);
502
+ db_prepare(&q, zSQL);
395503
print_timeline(&q, n);
396504
db_finalize(&q);
397505
}
398506
--- src/timeline.c
+++ src/timeline.c
@@ -22,10 +22,11 @@
22 *******************************************************************************
23 **
24 ** This file contains code to implement the timeline web page
25 **
26 */
 
27 #include "config.h"
28 #include "timeline.h"
29
30 /*
31 ** Generate a hyperlink to a version.
@@ -87,24 +88,37 @@
87 ** 6. Number of parents
88 ** 7. True if is a leaf
89 */
90 void www_print_timeline(
91 Stmt *pQuery,
92 char *zLastDate,
 
93 int (*xCallback)(int, Blob*),
94 Blob *pArg
95 ){
96 char zPrevDate[20];
 
97 zPrevDate[0] = 0;
 
 
 
 
98 @ <table cellspacing=0 border=0 cellpadding=0>
99 while( db_step(pQuery)==SQLITE_ROW ){
100 int rid = db_column_int(pQuery, 0);
101 const char *zUuid = db_column_text(pQuery, 1);
102 int nPChild = db_column_int(pQuery, 5);
103 int nParent = db_column_int(pQuery, 6);
104 int isLeaf = db_column_int(pQuery, 7);
105 const char *zDate = db_column_text(pQuery, 2);
 
 
 
 
 
 
 
106 if( xCallback ){
107 xCallback(rid, pArg);
108 }
109 if( memcmp(zDate, zPrevDate, 10) ){
110 sprintf(zPrevDate, "%.10s", zDate);
@@ -132,13 +146,10 @@
132 if( isLeaf ){
133 @ <b>Leaf</b>
134 }
135 @ %h(db_column_text(pQuery,3))
136 @ (by %h(db_column_text(pQuery,4)))</td></tr>
137 if( zLastDate ){
138 strcpy(zLastDate, zDate);
139 }
140 }
141 @ </table>
142 }
143
144 /*
@@ -172,18 +183,33 @@
172 return 0;
173 }
174
175 /*
176 ** WEBPAGE: timeline
 
 
 
 
 
 
 
 
 
177 */
178 void page_timeline(void){
179 Stmt q;
180 char *zSQL;
181 Blob scriptInit;
182 char zDate[100];
183 const char *zStart = P("d");
184 int nEntry = atoi(PD("n","25"));
 
 
 
 
 
 
185
186 /* To view the timeline, must have permission to read project data.
187 */
188 login_check_credentials();
189 if( !g.okRead ){ login_needed(); return; }
@@ -202,23 +228,46 @@
202 " (SELECT count(*) FROM plink WHERE cid=blob.rid),"
203 " NOT EXISTS (SELECT 1 FROM plink WHERE pid=blob.rid)"
204 " FROM event, blob"
205 " WHERE event.type='ci' AND blob.rid=event.objid"
206 );
 
 
 
 
 
 
 
 
 
 
207 if( zStart ){
208 while( isspace(zStart[0]) ){ zStart++; }
209 if( zStart[0] ){
210 zSQL = mprintf("%z AND event.mtime<=julianday(%Q, 'localtime')",
211 zSQL, zStart);
 
 
 
 
 
 
 
 
 
 
212 }
 
213 }
214 zSQL = mprintf("%z ORDER BY event.mtime DESC LIMIT %d", zSQL, nEntry);
215 db_prepare(&q, zSQL);
216 free(zSQL);
217 zDate[0] = 0;
218 blob_zero(&scriptInit);
219 www_print_timeline(&q, zDate, save_parentage_javascript, &scriptInit);
 
 
220 db_finalize(&q);
221 if( zStart==0 ){
222 zStart = zDate;
223 }
224 @ <script>
@@ -350,48 +399,107 @@
350
351
352 /*
353 ** COMMAND: timeline
354 **
355 ** Usage: %fossil timeline ?DATETIME? ?-n|--count N?
356 **
357 ** Print a summary of activity going backwards in date and time
358 ** specified or from the current date and time if no arguments
359 ** are given. Show as many as N (default 20) check-ins.
 
 
 
 
 
 
 
360 **
361 ** The date and time should be in the ISO8601 format. For
362 ** examples: "2007-08-18 07:21:21". The time may be omitted.
363 ** Times are according to the local timezone.
 
364 */
365 void timeline_cmd(void){
366 Stmt q;
367 int n;
368 const char *zCount;
 
369 char *zDate;
 
 
 
 
370 db_find_and_open_repository();
371 zCount = find_option("n","count",1);
372 if( zCount ){
373 n = atoi(zCount);
374 }else{
375 n = 20;
376 }
377 if( g.argc!=2 && g.argc!=3 ){
378 usage("YYYY-MM-DDtHH:MM:SS");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
379 }
380 if( g.argc==3 ){
381 zDate = g.argv[2];
 
 
 
 
 
 
 
 
 
 
 
 
382 }else{
383 zDate = "now";
 
 
 
384 }
385 db_prepare(&q,
386 "SELECT blob.rid, uuid, datetime(event.mtime,'localtime'),"
387 " comment || ' (by ' || user || ')',"
388 " (SELECT count(*) FROM plink WHERE pid=blob.rid AND isprim),"
389 " (SELECT count(*) FROM plink WHERE cid=blob.rid)"
390 " FROM event, blob"
391 " WHERE event.type='ci' AND blob.rid=event.objid"
392 " AND event.mtime<=(SELECT julianday(%Q,'utc'))"
393 " ORDER BY event.mtime DESC", zDate
394 );
 
 
 
 
 
 
 
 
 
 
 
395 print_timeline(&q, n);
396 db_finalize(&q);
397 }
398
--- src/timeline.c
+++ src/timeline.c
@@ -22,10 +22,11 @@
22 *******************************************************************************
23 **
24 ** This file contains code to implement the timeline web page
25 **
26 */
27 #include <string.h>
28 #include "config.h"
29 #include "timeline.h"
30
31 /*
32 ** Generate a hyperlink to a version.
@@ -87,24 +88,37 @@
88 ** 6. Number of parents
89 ** 7. True if is a leaf
90 */
91 void www_print_timeline(
92 Stmt *pQuery,
93 int *pFirstEvent,
94 int *pLastEvent,
95 int (*xCallback)(int, Blob*),
96 Blob *pArg
97 ){
98 char zPrevDate[20];
99 int cnt = 0;
100 zPrevDate[0] = 0;
101 db_multi_exec(
102 "CREATE TEMP TABLE IF NOT EXISTS seen(rid INTEGER PRIMARY KEY);"
103 "DELETE FROM seen;"
104 );
105 @ <table cellspacing=0 border=0 cellpadding=0>
106 while( db_step(pQuery)==SQLITE_ROW ){
107 int rid = db_column_int(pQuery, 0);
108 const char *zUuid = db_column_text(pQuery, 1);
109 int nPChild = db_column_int(pQuery, 5);
110 int nParent = db_column_int(pQuery, 6);
111 int isLeaf = db_column_int(pQuery, 7);
112 const char *zDate = db_column_text(pQuery, 2);
113 if( cnt==0 && pFirstEvent ){
114 *pFirstEvent = rid;
115 }
116 if( pLastEvent ){
117 *pLastEvent = rid;
118 }
119 db_multi_exec("INSERT OR IGNORE INTO seen VALUES(%d)", rid);
120 if( xCallback ){
121 xCallback(rid, pArg);
122 }
123 if( memcmp(zDate, zPrevDate, 10) ){
124 sprintf(zPrevDate, "%.10s", zDate);
@@ -132,13 +146,10 @@
146 if( isLeaf ){
147 @ <b>Leaf</b>
148 }
149 @ %h(db_column_text(pQuery,3))
150 @ (by %h(db_column_text(pQuery,4)))</td></tr>
 
 
 
151 }
152 @ </table>
153 }
154
155 /*
@@ -172,18 +183,33 @@
183 return 0;
184 }
185
186 /*
187 ** WEBPAGE: timeline
188 **
189 ** Query parameters:
190 **
191 ** d=STARTDATE date in iso8601 notation. dflt: newest event
192 ** n=INTEGER number of events to show. dflt: 25
193 ** e=INTEGER starting event id. dflt: nil
194 ** u=NAME show only events from user. dflt: nil
195 ** a show events after and including. dflt: false
196 ** r show only related events. dflt: false
197 */
198 void page_timeline(void){
199 Stmt q;
200 char *zSQL;
201 Blob scriptInit;
202 char zDate[100];
203 const char *zStart = P("d");
204 int nEntry = atoi(PD("n","20"));
205 const char *zUser = P("u");
206 int objid = atoi(PD("e","0"));
207 int relatedEvents = P("r")!=0;
208 int afterFlag = P("a")!=0;
209 int firstEvent;
210 int lastEvent;
211
212 /* To view the timeline, must have permission to read project data.
213 */
214 login_check_credentials();
215 if( !g.okRead ){ login_needed(); return; }
@@ -202,23 +228,46 @@
228 " (SELECT count(*) FROM plink WHERE cid=blob.rid),"
229 " NOT EXISTS (SELECT 1 FROM plink WHERE pid=blob.rid)"
230 " FROM event, blob"
231 " WHERE event.type='ci' AND blob.rid=event.objid"
232 );
233 if( zUser ){
234 zSQL = mprintf("%z AND event.user=%Q", zSQL, zUser);
235 }
236 if( objid ){
237 char *z = db_text(0, "SELECT datetime(event.mtime) FROM event"
238 " WHERE objid=%d", objid);
239 if( z ){
240 zStart = z;
241 }
242 }
243 if( zStart ){
244 while( isspace(zStart[0]) ){ zStart++; }
245 if( zStart[0] ){
246 zSQL = mprintf("%z AND event.mtime %s julianday(%Q, 'localtime')",
247 zSQL, afterFlag ? ">=" : "<=", zStart);
248 }
249 }
250 if( relatedEvents && objid ){
251 db_multi_exec(
252 "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY)"
253 );
254 if( afterFlag ){
255 compute_descendents(objid, nEntry);
256 }else{
257 compute_ancestors(objid, nEntry);
258 }
259 zSQL = mprintf("%z AND event.objid IN ok", zSQL);
260 }
261 zSQL = mprintf("%z ORDER BY event.mtime DESC LIMIT %d", zSQL, nEntry);
262 db_prepare(&q, zSQL);
263 free(zSQL);
264 zDate[0] = 0;
265 blob_zero(&scriptInit);
266 zDate[0] = 0;
267 www_print_timeline(&q, &firstEvent, &lastEvent,
268 save_parentage_javascript, &scriptInit);
269 db_finalize(&q);
270 if( zStart==0 ){
271 zStart = zDate;
272 }
273 @ <script>
@@ -350,48 +399,107 @@
399
400
401 /*
402 ** COMMAND: timeline
403 **
404 ** Usage: %fossil timeline ?WHEN? ?UUID|DATETIME? ?-n|--count N?
405 **
406 ** Print a summary of activity going backwards in date and time
407 ** specified or from the current date and time if no arguments
408 ** are given. Show as many as N (default 20) check-ins. The
409 ** WHEN argument can be any unique abbreviation of one of these
410 ** keywords:
411 **
412 ** before
413 ** after
414 ** descendents | children
415 ** ancestors | parents
416 **
417 ** The UUID can be any unique prefix of 4 characters or more.
418 ** The DATETIME should be in the ISO8601 format. For
419 ** examples: "2007-08-18 07:21:21". You can also say "current"
420 ** for the current version or "now" for the current time.
421 */
422 void timeline_cmd(void){
423 Stmt q;
424 int n, k;
425 const char *zCount;
426 char *zOrigin;
427 char *zDate;
428 char *zSQL;
429 int objid = 0;
430 Blob uuid;
431 int mode = 1 ; /* 1: before 2:after 3:children 4:parents */
432 db_find_and_open_repository();
433 zCount = find_option("n","count",1);
434 if( zCount ){
435 n = atoi(zCount);
436 }else{
437 n = 20;
438 }
439 if( g.argc==4 ){
440 k = strlen(g.argv[2]);
441 if( strncmp(g.argv[2],"before",k)==0 ){
442 mode = 1;
443 }else if( strncmp(g.argv[2],"after",k)==0 && k>1 ){
444 mode = 2;
445 }else if( strncmp(g.argv[2],"descendents",k)==0 ){
446 mode = 3;
447 }else if( strncmp(g.argv[2],"children",k)==0 ){
448 mode = 3;
449 }else if( strncmp(g.argv[2],"ancestors",k)==0 && k>1 ){
450 mode = 4;
451 }else if( strncmp(g.argv[2],"parents",k)==0 ){
452 mode = 4;
453 }else{
454 usage("?WHEN? ?UUID|DATETIME?");
455 }
456 zOrigin = g.argv[3];
457 }else if( g.argc==3 ){
458 zOrigin = g.argv[2];
459 }else{
460 zOrigin = "now";
461 }
462 k = strlen(zOrigin);
463 blob_zero(&uuid);
464 blob_append(&uuid, zOrigin, -1);
465 if( strcmp(zOrigin, "now")==0 ){
466 if( mode==3 || mode==4 ){
467 fossil_fatal("cannot compute descendents or ancestors of a date");
468 }
469 zDate = mprintf("(SELECT julianday('now','utc'))");
470 }else if( strncmp(zOrigin, "current", k)==0 ){
471 objid = db_lget_int("checkout",0);
472 zDate = mprintf("(SELECT mtime FROM plink WHERE cid=%d)", objid);
473 }else if( name_to_uuid(&uuid, 0)==0 ){
474 objid = db_int(0, "SELECT rid FROM blob WHERE uuid=%B", &uuid);
475 zDate = mprintf("(SELECT mtime FROM plink WHERE cid=%d)", objid);
476 }else{
477 if( mode==3 || mode==4 ){
478 fossil_fatal("cannot compute descendents or ancestors of a date");
479 }
480 zDate = mprintf("(SELECT julianday(%Q, 'utc'))", zOrigin);
481 }
482 zSQL = mprintf(
483 "SELECT blob.rid, uuid, datetime(event.mtime,'localtime'),"
484 " comment || ' (by ' || user || ')',"
485 " (SELECT count(*) FROM plink WHERE pid=blob.rid AND isprim),"
486 " (SELECT count(*) FROM plink WHERE cid=blob.rid)"
487 " FROM event, blob"
488 " WHERE event.type='ci' AND blob.rid=event.objid"
489 " AND event.mtime %s %s",
490 (mode==1 || mode==4) ? "<=" : ">=", zDate
491 );
492 if( mode==3 || mode==4 ){
493 db_multi_exec("CREATE TEMP TABLE ok(rid INTEGER PRIMARY KEY)");
494 if( mode==3 ){
495 compute_descendents(objid, n);
496 }else{
497 compute_ancestors(objid, n);
498 }
499 zSQL = mprintf("%z AND blob.rid IN ok", zSQL);
500 }
501 zSQL = mprintf("%z ORDER BY event.mtime DESC", zSQL);
502 db_prepare(&q, zSQL);
503 print_timeline(&q, n);
504 db_finalize(&q);
505 }
506
+146 -5
--- src/wiki.c
+++ src/wiki.c
@@ -25,20 +25,161 @@
2525
*/
2626
#include <assert.h>
2727
#include "config.h"
2828
#include "wiki.h"
2929
30
+
31
+/*
32
+** Create a fake replicate of the "vfile" table as a TEMP table
33
+** using the manifest identified by manid.
34
+*/
35
+static void create_fake_vfile(int manid){
36
+ static const char zVfileDef[] =
37
+ @ CREATE TEMP TABLE vfile(
38
+ @ id INTEGER PRIMARY KEY, -- ID of the checked out file
39
+ @ vid INTEGER REFERENCES blob, -- The version this file is part of.
40
+ @ chnged INT DEFAULT 0, -- 0:unchnged 1:edited 2:m-chng 3:m-add
41
+ @ deleted BOOLEAN DEFAULT 0, -- True if deleted
42
+ @ rid INTEGER, -- Originally from this repository record
43
+ @ mrid INTEGER, -- Based on this record due to a merge
44
+ @ pathname TEXT, -- Full pathname
45
+ @ UNIQUE(pathname,vid)
46
+ @ );
47
+ ;
48
+ db_multi_exec(zVfileDef);
49
+ load_vfile_from_rid(manid);
50
+}
51
+
52
+/*
53
+** Locate the wiki page with the name zPageName and render it.
54
+*/
55
+static void locate_and_render_wikipage(const char *zPageName){
56
+ Stmt q;
57
+ int id = 0;
58
+ int rid = 0;
59
+ int chnged = 0;
60
+ char *zPathname = 0;
61
+ db_prepare(&q,
62
+ "SELECT id, rid, chnged, pathname FROM vfile"
63
+ " WHERE (pathname='%q.wiki' OR pathname LIKE '%%/%q.wiki')"
64
+ " AND NOT deleted", zPageName, zPageName
65
+ );
66
+ if( db_step(&q)==SQLITE_ROW ){
67
+ id = db_column_int(&q, 0);
68
+ rid = db_column_int(&q, 1);
69
+ chnged = db_column_int(&q, 2);
70
+ if( chnged || rid==0 ){
71
+ zPathname = db_column_malloc(&q, 3);
72
+ }
73
+ }
74
+ db_finalize(&q);
75
+ if( id ){
76
+ Blob page, src;
77
+ char *zTitle = "wiki";
78
+ char *z;
79
+ blob_zero(&src);
80
+ if( zPathname ){
81
+ zPathname = mprintf("%s/%z", g.zLocalRoot, zPathname);
82
+ blob_read_from_file(&src, zPathname);
83
+ free(zPathname);
84
+ }else{
85
+ content_get(rid, &src);
86
+ }
87
+
88
+ /* The wiki page content is now in src. Check to see if
89
+ ** there is a <readonly/> or <appendonly/> element at the
90
+ ** beginning of the content.
91
+ */
92
+ z = blob_str(&src);
93
+ while( isspace(*z) ) z++;
94
+ if( strncmp(z, "<readonly/>", 11)==0 ){
95
+ z += 11;
96
+ }else if( strncmp(z, "<appendonly/>", 13)==0 ){
97
+ z += 13;
98
+ }
99
+
100
+ /* Check for <title>...</title> markup and remove it if present. */
101
+ while( isspace(*z) ) z++;
102
+ if( strncmp(z, "<title>", 7)==0 ){
103
+ int i;
104
+ for(i=7; z[i] && z[i]!='<'; i++){}
105
+ if( z[i]=='<' && strncmp(&z[i], "</title>", 8)==0 ){
106
+ zTitle = htmlize(&z[7], i-7);
107
+ z = &z[i+8];
108
+ }
109
+ }
110
+
111
+ /* Render the page */
112
+ style_header(zTitle);
113
+ blob_init(&page, z, -1);
114
+ wiki_convert(&page, cgi_output_blob(), WIKI_HTML);
115
+ blob_reset(&src);
116
+ }else{
117
+ style_header("Unknown Wiki Page");
118
+ @ The wiki page "%h(zPageName)" does not exist.
119
+ }
120
+ style_footer();
121
+}
122
+
30123
/*
31124
** WEBPAGE: wiki
125
+** URL: /wiki/PAGENAME
32126
**
33
-** Render the wiki page that is named after the /wiki/ part of
34
-** the url.
127
+** If the local database is available (which only happens if run
128
+** as "server" instead of "cgi" or "http") then the file is taken
129
+** from the local checkout. If there is no local checkout, then
130
+** the content is taken from the "head" baseline.
35131
*/
36132
void wiki_page(void){
37
- style_header("Wiki");
38
- @ extra=%h(g.zExtra)
39
- style_footer();
133
+ login_check_credentials();
134
+ if( !g.okRdWiki ){ login_needed(); return; }
135
+ if( !g.localOpen ){
136
+ int headid = db_int(0,
137
+ "SELECT cid FROM plink ORDER BY mtime DESC LIMIT 1"
138
+ );
139
+ create_fake_vfile(headid);
140
+ }
141
+ locate_and_render_wikipage(g.zExtra);
142
+}
143
+
144
+/*
145
+** The g.zExtra value is of the form UUID/otherstuff.
146
+** Extract the UUID and convert it to a record id. Leave
147
+** g.zExtra holding just otherstuff. If UUID does not exist
148
+** or is malformed, return 0 and leave g.zExtra unchanged.
149
+*/
150
+int extract_uuid_from_url(void){
151
+ int i, rid;
152
+ Blob uuid;
153
+ for(i=0; g.zExtra[i] && g.zExtra[i]!='/'; i++){}
154
+ blob_zero(&uuid);
155
+ blob_append(&uuid, g.zExtra, i);
156
+ rid = name_to_uuid(&uuid, 0);
157
+ blob_reset(&uuid);
158
+ if( rid ){
159
+ while( g.zExtra[i]=='/' ){ i++; }
160
+ g.zExtra = &g.zExtra[i];
161
+ }
162
+ return rid;
163
+}
164
+
165
+/*
166
+** WEBPAGE: bwiki
167
+** URL: /bwiki/UUID/PAGENAME
168
+**
169
+** UUID specifies a baseline. Render the wiki page PAGENAME as
170
+** it appears in that baseline.
171
+*/
172
+void bwiki_page(void){
173
+ int headid;
174
+ login_check_credentials();
175
+ if( !g.okRdWiki || !g.okHistory ){ login_needed(); return; }
176
+ headid = extract_uuid_from_url();
177
+ if( headid ){
178
+ create_fake_vfile(headid);
179
+ }
180
+ locate_and_render_wikipage(g.zExtra);
40181
}
41182
42183
/*
43184
** WEBPAGE: ambiguous
44185
**
45186
--- src/wiki.c
+++ src/wiki.c
@@ -25,20 +25,161 @@
25 */
26 #include <assert.h>
27 #include "config.h"
28 #include "wiki.h"
29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30 /*
31 ** WEBPAGE: wiki
 
32 **
33 ** Render the wiki page that is named after the /wiki/ part of
34 ** the url.
 
 
35 */
36 void wiki_page(void){
37 style_header("Wiki");
38 @ extra=%h(g.zExtra)
39 style_footer();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40 }
41
42 /*
43 ** WEBPAGE: ambiguous
44 **
45
--- src/wiki.c
+++ src/wiki.c
@@ -25,20 +25,161 @@
25 */
26 #include <assert.h>
27 #include "config.h"
28 #include "wiki.h"
29
30
31 /*
32 ** Create a fake replicate of the "vfile" table as a TEMP table
33 ** using the manifest identified by manid.
34 */
35 static void create_fake_vfile(int manid){
36 static const char zVfileDef[] =
37 @ CREATE TEMP TABLE vfile(
38 @ id INTEGER PRIMARY KEY, -- ID of the checked out file
39 @ vid INTEGER REFERENCES blob, -- The version this file is part of.
40 @ chnged INT DEFAULT 0, -- 0:unchnged 1:edited 2:m-chng 3:m-add
41 @ deleted BOOLEAN DEFAULT 0, -- True if deleted
42 @ rid INTEGER, -- Originally from this repository record
43 @ mrid INTEGER, -- Based on this record due to a merge
44 @ pathname TEXT, -- Full pathname
45 @ UNIQUE(pathname,vid)
46 @ );
47 ;
48 db_multi_exec(zVfileDef);
49 load_vfile_from_rid(manid);
50 }
51
52 /*
53 ** Locate the wiki page with the name zPageName and render it.
54 */
55 static void locate_and_render_wikipage(const char *zPageName){
56 Stmt q;
57 int id = 0;
58 int rid = 0;
59 int chnged = 0;
60 char *zPathname = 0;
61 db_prepare(&q,
62 "SELECT id, rid, chnged, pathname FROM vfile"
63 " WHERE (pathname='%q.wiki' OR pathname LIKE '%%/%q.wiki')"
64 " AND NOT deleted", zPageName, zPageName
65 );
66 if( db_step(&q)==SQLITE_ROW ){
67 id = db_column_int(&q, 0);
68 rid = db_column_int(&q, 1);
69 chnged = db_column_int(&q, 2);
70 if( chnged || rid==0 ){
71 zPathname = db_column_malloc(&q, 3);
72 }
73 }
74 db_finalize(&q);
75 if( id ){
76 Blob page, src;
77 char *zTitle = "wiki";
78 char *z;
79 blob_zero(&src);
80 if( zPathname ){
81 zPathname = mprintf("%s/%z", g.zLocalRoot, zPathname);
82 blob_read_from_file(&src, zPathname);
83 free(zPathname);
84 }else{
85 content_get(rid, &src);
86 }
87
88 /* The wiki page content is now in src. Check to see if
89 ** there is a <readonly/> or <appendonly/> element at the
90 ** beginning of the content.
91 */
92 z = blob_str(&src);
93 while( isspace(*z) ) z++;
94 if( strncmp(z, "<readonly/>", 11)==0 ){
95 z += 11;
96 }else if( strncmp(z, "<appendonly/>", 13)==0 ){
97 z += 13;
98 }
99
100 /* Check for <title>...</title> markup and remove it if present. */
101 while( isspace(*z) ) z++;
102 if( strncmp(z, "<title>", 7)==0 ){
103 int i;
104 for(i=7; z[i] && z[i]!='<'; i++){}
105 if( z[i]=='<' && strncmp(&z[i], "</title>", 8)==0 ){
106 zTitle = htmlize(&z[7], i-7);
107 z = &z[i+8];
108 }
109 }
110
111 /* Render the page */
112 style_header(zTitle);
113 blob_init(&page, z, -1);
114 wiki_convert(&page, cgi_output_blob(), WIKI_HTML);
115 blob_reset(&src);
116 }else{
117 style_header("Unknown Wiki Page");
118 @ The wiki page "%h(zPageName)" does not exist.
119 }
120 style_footer();
121 }
122
123 /*
124 ** WEBPAGE: wiki
125 ** URL: /wiki/PAGENAME
126 **
127 ** If the local database is available (which only happens if run
128 ** as "server" instead of "cgi" or "http") then the file is taken
129 ** from the local checkout. If there is no local checkout, then
130 ** the content is taken from the "head" baseline.
131 */
132 void wiki_page(void){
133 login_check_credentials();
134 if( !g.okRdWiki ){ login_needed(); return; }
135 if( !g.localOpen ){
136 int headid = db_int(0,
137 "SELECT cid FROM plink ORDER BY mtime DESC LIMIT 1"
138 );
139 create_fake_vfile(headid);
140 }
141 locate_and_render_wikipage(g.zExtra);
142 }
143
144 /*
145 ** The g.zExtra value is of the form UUID/otherstuff.
146 ** Extract the UUID and convert it to a record id. Leave
147 ** g.zExtra holding just otherstuff. If UUID does not exist
148 ** or is malformed, return 0 and leave g.zExtra unchanged.
149 */
150 int extract_uuid_from_url(void){
151 int i, rid;
152 Blob uuid;
153 for(i=0; g.zExtra[i] && g.zExtra[i]!='/'; i++){}
154 blob_zero(&uuid);
155 blob_append(&uuid, g.zExtra, i);
156 rid = name_to_uuid(&uuid, 0);
157 blob_reset(&uuid);
158 if( rid ){
159 while( g.zExtra[i]=='/' ){ i++; }
160 g.zExtra = &g.zExtra[i];
161 }
162 return rid;
163 }
164
165 /*
166 ** WEBPAGE: bwiki
167 ** URL: /bwiki/UUID/PAGENAME
168 **
169 ** UUID specifies a baseline. Render the wiki page PAGENAME as
170 ** it appears in that baseline.
171 */
172 void bwiki_page(void){
173 int headid;
174 login_check_credentials();
175 if( !g.okRdWiki || !g.okHistory ){ login_needed(); return; }
176 headid = extract_uuid_from_url();
177 if( headid ){
178 create_fake_vfile(headid);
179 }
180 locate_and_render_wikipage(g.zExtra);
181 }
182
183 /*
184 ** WEBPAGE: ambiguous
185 **
186
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -319,10 +319,11 @@
319319
if( z[n]!='>' && !isspace(z[n]) ) return 0;
320320
while( z[n] && (z[n]!='>' || inparen) ){
321321
if( z[n]=='"' ){
322322
inparen = !inparen;
323323
}
324
+ n++;
324325
}
325326
if( z[n]!='>' ) return 0;
326327
return n+1;
327328
}
328329
@@ -712,14 +713,14 @@
712713
/* TBD */
713714
}
714715
715716
/*
716717
** Resolve a hyperlink. The argument is the content of the [...]
717
-** in the wiki. Append the URL to the given blob.
718
+** in the wiki. Append the URL to the output of the Renderer.
718719
*/
719
-static void resolveHyperlink(const char *zTarget, Blob *pOut){
720
- blob_appendf(pOut, "http://www.fossil-scm.org/test-%T", zTarget);
720
+static void resolveHyperlink(const char *zTarget, Renderer *p){
721
+ blob_appendf(p->pOut, "http://www.fossil-scm.org/test-%T", zTarget);
721722
}
722723
723724
/*
724725
** Check to see if the given parsed markup is the correct
725726
** </verbatim> tag.
@@ -804,11 +805,11 @@
804805
zDisplay = zTarget;
805806
}else{
806807
while( isspace(*zDisplay) ) zDisplay++;
807808
}
808809
blob_append(p->pOut, "<a href=\"", -1);
809
- resolveHyperlink(zTarget, p->pOut);
810
+ resolveHyperlink(zTarget, p);
810811
blob_append(p->pOut, "\">", -1);
811812
savedState = p->state;
812813
p->state &= ~ALLOW_WIKI;
813814
p->state |= FONT_MARKUP_ONLY;
814815
wiki_render(p, zDisplay);
815816
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -319,10 +319,11 @@
319 if( z[n]!='>' && !isspace(z[n]) ) return 0;
320 while( z[n] && (z[n]!='>' || inparen) ){
321 if( z[n]=='"' ){
322 inparen = !inparen;
323 }
 
324 }
325 if( z[n]!='>' ) return 0;
326 return n+1;
327 }
328
@@ -712,14 +713,14 @@
712 /* TBD */
713 }
714
715 /*
716 ** Resolve a hyperlink. The argument is the content of the [...]
717 ** in the wiki. Append the URL to the given blob.
718 */
719 static void resolveHyperlink(const char *zTarget, Blob *pOut){
720 blob_appendf(pOut, "http://www.fossil-scm.org/test-%T", zTarget);
721 }
722
723 /*
724 ** Check to see if the given parsed markup is the correct
725 ** </verbatim> tag.
@@ -804,11 +805,11 @@
804 zDisplay = zTarget;
805 }else{
806 while( isspace(*zDisplay) ) zDisplay++;
807 }
808 blob_append(p->pOut, "<a href=\"", -1);
809 resolveHyperlink(zTarget, p->pOut);
810 blob_append(p->pOut, "\">", -1);
811 savedState = p->state;
812 p->state &= ~ALLOW_WIKI;
813 p->state |= FONT_MARKUP_ONLY;
814 wiki_render(p, zDisplay);
815
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -319,10 +319,11 @@
319 if( z[n]!='>' && !isspace(z[n]) ) return 0;
320 while( z[n] && (z[n]!='>' || inparen) ){
321 if( z[n]=='"' ){
322 inparen = !inparen;
323 }
324 n++;
325 }
326 if( z[n]!='>' ) return 0;
327 return n+1;
328 }
329
@@ -712,14 +713,14 @@
713 /* TBD */
714 }
715
716 /*
717 ** Resolve a hyperlink. The argument is the content of the [...]
718 ** in the wiki. Append the URL to the output of the Renderer.
719 */
720 static void resolveHyperlink(const char *zTarget, Renderer *p){
721 blob_appendf(p->pOut, "http://www.fossil-scm.org/test-%T", zTarget);
722 }
723
724 /*
725 ** Check to see if the given parsed markup is the correct
726 ** </verbatim> tag.
@@ -804,11 +805,11 @@
805 zDisplay = zTarget;
806 }else{
807 while( isspace(*zDisplay) ) zDisplay++;
808 }
809 blob_append(p->pOut, "<a href=\"", -1);
810 resolveHyperlink(zTarget, p);
811 blob_append(p->pOut, "\">", -1);
812 savedState = p->state;
813 p->state &= ~ALLOW_WIKI;
814 p->state |= FONT_MARKUP_ONLY;
815 wiki_render(p, zDisplay);
816
+131 -172
--- src/xfer.c
+++ src/xfer.c
@@ -234,105 +234,11 @@
234234
remote_has(rid);
235235
blob_reset(&uuid);
236236
}
237237
238238
/*
239
-** Send the file identified by mid and pUuid. If that file happens
240
-** to be a manifest, then also send all of the associated content
241
-** files for that manifest. If the file is not a manifest, then this
242
-** routine is the equivalent of send_file().
243
-*/
244
-static void send_manifest(Xfer *pXfer, int mid, Blob *pUuid, int srcId){
245
- Stmt q2;
246
- send_file(pXfer, mid, pUuid, srcId);
247
- db_prepare(&q2,
248
- "SELECT pid, uuid, fid FROM mlink, blob"
249
- " WHERE rid=fid AND mid=%d",
250
- mid
251
- );
252
- while( db_step(&q2)==SQLITE_ROW ){
253
- int pid, fid;
254
- Blob uuid;
255
- pid = db_column_int(&q2, 0);
256
- db_ephemeral_blob(&q2, 1, &uuid);
257
- fid = db_column_int(&q2, 2);
258
- send_file(pXfer, fid, &uuid, pid);
259
- }
260
- db_finalize(&q2);
261
-}
262
-
263
-/*
264
-** This routine runs when either client or server is notified that
265
-** the other side thinks rid is a leaf manifest. If we hold
266
-** children of rid, then send them over to the other side.
267
-*/
268
-static void leaf_response(Xfer *pXfer, int rid){
269
- Stmt q1;
270
- db_prepare(&q1,
271
- "SELECT cid, uuid FROM plink, blob"
272
- " WHERE blob.rid=plink.cid"
273
- " AND plink.pid=%d",
274
- rid
275
- );
276
- while( db_step(&q1)==SQLITE_ROW ){
277
- Blob uuid;
278
- int cid;
279
-
280
- cid = db_column_int(&q1, 0);
281
- db_ephemeral_blob(&q1, 1, &uuid);
282
- send_manifest(pXfer, cid, &uuid, rid);
283
- if( blob_size(pXfer->pOut)<pXfer->mxSend ){
284
- leaf_response(pXfer, cid);
285
- }
286
- }
287
-}
288
-
289
-/*
290
-** Sent a leaf message for every leaf.
291
-*/
292
-static void send_leaves(Xfer *pXfer){
293
- Stmt q;
294
- db_prepare(&q,
295
- "SELECT uuid FROM blob WHERE rid IN"
296
- " (SELECT cid FROM plink EXCEPT SELECT pid FROM plink)"
297
- );
298
- while( db_step(&q)==SQLITE_ROW ){
299
- const char *zUuid = db_column_text(&q, 0);
300
- blob_appendf(pXfer->pOut, "leaf %s\n", zUuid);
301
- }
302
- db_finalize(&q);
303
-}
304
-
305
-/*
306
-** Sent leaf content for every leaf that is not found in the
307
-** onremote table. This is intended to send leaf content for
308
-** every leaf that is unknown on the remote end.
309
-**
310
-** In addition, we might send "igot" messages for a few generations of
311
-** parents of the unknown leaves. This will speed the transmission
312
-** of new branches.
313
-*/
314
-static void send_unknown_leaf_content(Xfer *pXfer){
315
- Stmt q1;
316
- db_prepare(&q1,
317
- "SELECT rid, uuid FROM blob WHERE rid IN"
318
- " (SELECT cid FROM plink EXCEPT SELECT pid FROM plink)"
319
- " AND NOT EXISTS(SELECT 1 FROM onremote WHERE rid=blob.rid)"
320
- );
321
- while( db_step(&q1)==SQLITE_ROW ){
322
- Blob uuid;
323
- int cid;
324
-
325
- cid = db_column_int(&q1, 0);
326
- db_ephemeral_blob(&q1, 1, &uuid);
327
- send_manifest(pXfer, cid, &uuid, 0);
328
- }
329
- db_finalize(&q1);
330
-}
331
-
332
-/*
333
-** Sen a gimme message for every phantom.
239
+** Send a gimme message for every phantom.
334240
*/
335241
static void request_phantoms(Xfer *pXfer){
336242
Stmt q;
337243
db_prepare(&q, "SELECT uuid FROM phantom JOIN blob USING(rid)");
338244
while( db_step(&q)==SQLITE_ROW ){
@@ -396,10 +302,77 @@
396302
}
397303
}
398304
db_reset(&q);
399305
}
400306
307
+/*
308
+** Send the content of all files in the unsent table.
309
+**
310
+** This is really just an optimization. If you clear the
311
+** unsent table, all the right files will still get transferred.
312
+** It just might require an extra round trip or two.
313
+*/
314
+static void send_unsent(Xfer *pXfer){
315
+ Stmt q;
316
+ db_prepare(&q, "SELECT rid FROM unsent");
317
+ while( db_step(&q)==SQLITE_ROW ){
318
+ int rid = db_column_int(&q, 0);
319
+ send_file(pXfer, rid, 0, 0);
320
+ }
321
+ db_finalize(&q);
322
+ db_multi_exec("DELETE FROM unsent");
323
+}
324
+
325
+/*
326
+** Check to see if the number of unclustered entries is greater than
327
+** 100 and if it is, form a new cluster. Unclustered phantoms do not
328
+** count toward the 100 total. And phantoms are never added to a new
329
+** cluster.
330
+*/
331
+static void create_cluster(void){
332
+ Blob cluster, cksum;
333
+ Stmt q;
334
+ int nUncl;
335
+ nUncl = db_int(0, "SELECT count(*) FROM unclustered"
336
+ " WHERE NOT EXISTS(SELECT 1 FROM phantom"
337
+ " WHERE rid=unclustered.rid)");
338
+ if( nUncl<100 ){
339
+ return;
340
+ }
341
+ blob_zero(&cluster);
342
+ db_prepare(&q, "SELECT uuid FROM unclustered, blob"
343
+ " WHERE NOT EXISTS(SELECT 1 FROM phantom"
344
+ " WHERE rid!=unclustered.rid)"
345
+ " AND unclustered.rid=blob.rid"
346
+ " ORDER BY 1");
347
+ while( db_step(&q)==SQLITE_ROW ){
348
+ blob_appendf(&cluster, "M %s\n", db_column_text(&q, 0));
349
+ }
350
+ db_finalize(&q);
351
+ md5sum_blob(&cluster, &cksum);
352
+ blob_appendf(&cluster, "Z %b\n", &cksum);
353
+ blob_reset(&cksum);
354
+ db_multi_exec("DELETE FROM unclustered");
355
+ content_put(&cluster, 0, 0);
356
+ blob_reset(&cluster);
357
+}
358
+
359
+/*
360
+** Send an igot message for every entry in unclustered table.
361
+** Return the number of messages sent.
362
+*/
363
+static int send_unclustered(Xfer *pXfer){
364
+ Stmt q;
365
+ int cnt = 0;
366
+ db_prepare(&q, "SELECT uuid FROM unclustered JOIN blob USING(rid)");
367
+ while( db_step(&q)==SQLITE_ROW ){
368
+ blob_appendf(pXfer->pOut, "igot %s\n", db_column_text(&q, 0));
369
+ cnt++;
370
+ }
371
+ db_finalize(&q);
372
+ return cnt;
373
+}
401374
402375
/*
403376
** If this variable is set, disable login checks. Used for debugging
404377
** only.
405378
*/
@@ -454,22 +427,20 @@
454427
}
455428
}else
456429
457430
/* gimme UUID
458431
**
459
- ** Client is requesting a file. If the file is a manifest,
460
- ** the server can assume that the client also needs all content
461
- ** files associated with that manifest.
432
+ ** Client is requesting a file. Send it.
462433
*/
463434
if( blob_eq(&xfer.aToken[0], "gimme")
464435
&& xfer.nToken==2
465436
&& blob_is_uuid(&xfer.aToken[1])
466437
){
467438
if( isPull ){
468439
int rid = rid_from_uuid(&xfer.aToken[1], 0);
469440
if( rid ){
470
- send_manifest(&xfer, rid, &xfer.aToken[1], 0);
441
+ send_file(&xfer, rid, &xfer.aToken[1], 0);
471442
}
472443
}
473444
}else
474445
475446
/* igot UUID
@@ -484,32 +455,10 @@
484455
rid_from_uuid(&xfer.aToken[1], 1);
485456
}
486457
}else
487458
488459
489
- /* leaf UUID
490
- **
491
- ** Client announces that it has a particular manifest. If
492
- ** the server has children of this leaf, then send those
493
- ** children back to the client. If the server lacks this
494
- ** leaf, request it.
495
- */
496
- if( xfer.nToken==2
497
- && blob_eq(&xfer.aToken[0], "leaf")
498
- && blob_is_uuid(&xfer.aToken[1])
499
- ){
500
- int rid = rid_from_uuid(&xfer.aToken[1], 0);
501
- if( rid ){
502
- remote_has(rid);
503
- if( isPull ){
504
- leaf_response(&xfer, rid);
505
- }
506
- }else if( isPush ){
507
- content_put(0, blob_str(&xfer.aToken[1]), 0);
508
- }
509
- }else
510
-
511460
/* pull SERVERCODE PROJECTCODE
512461
** push SERVERCODE PROJECTCODE
513462
**
514463
** The client wants either send or receive. The server should
515464
** verify that the project code matches and that the server code
@@ -557,38 +506,28 @@
557506
cgi_reset_content();
558507
@ error not\sauthorized\sto\swrite
559508
nErr++;
560509
break;
561510
}
562
- send_leaves(&xfer);
563511
isPush = 1;
564512
}
565513
}else
566514
567515
/* clone
568516
**
569517
** The client knows nothing. Tell all.
570518
*/
571519
if( blob_eq(&xfer.aToken[0], "clone") ){
572
- int rootid;
573520
login_check_credentials();
574521
if( !g.okClone ){
575522
cgi_reset_content();
576523
@ error not\sauthorized\sto\sclone
577524
nErr++;
578525
break;
579526
}
580527
isPull = 1;
581528
@ push %s(db_get("server-code", "x")) %s(db_get("project-code", "x"))
582
- rootid = db_int(0,
583
- "SELECT pid FROM plink AS a"
584
- " WHERE NOT EXISTS(SELECT 1 FROM plink WHERE cid=a.pid)"
585
- );
586
- if( rootid ){
587
- send_file(&xfer, rootid, 0, -1);
588
- leaf_response(&xfer, rootid);
589
- }
590529
}else
591530
592531
/* login USER NONCE SIGNATURE
593532
**
594533
** Check for a valid login. This has to happen before anything else.
@@ -601,10 +540,31 @@
601540
g.okRead = g.okWrite = 1;
602541
}else{
603542
check_login(&xfer.aToken[1], &xfer.aToken[2], &xfer.aToken[3]);
604543
}
605544
}else
545
+
546
+ /* cookie TEXT
547
+ **
548
+ ** A cookie contains a arbitrary-length argument that is server-defined.
549
+ ** The argument must be encoded so as not to contain any whitespace.
550
+ ** The server can optionally send a cookie to the client. The client
551
+ ** might then return the same cookie back to the server on its next
552
+ ** communication. The cookie might record information that helps
553
+ ** the server optimize a push or pull.
554
+ **
555
+ ** The client is not required to return a cookie. So the server
556
+ ** must not depend on the cookie. The cookie should be an optimization
557
+ ** only. The client might also send a cookie that came from a different
558
+ ** server. So the server must be prepared to distinguish its own cookie
559
+ ** from cookies originating from other servers. The client might send
560
+ ** back several different cookies to the server. The server should be
561
+ ** prepared to sift through the cookies and pick the one that it wants.
562
+ */
563
+ if( blob_eq(&xfer.aToken[0], "cookie") && xfer.nToken==2 ){
564
+ /* Process the cookie */
565
+ }else
606566
607567
/* Unknown message
608568
*/
609569
{
610570
cgi_reset_content();
@@ -614,11 +574,12 @@
614574
}
615575
if( isPush ){
616576
request_phantoms(&xfer);
617577
}
618578
if( isPull ){
619
- send_unknown_leaf_content(&xfer);
579
+ create_cluster();
580
+ send_unclustered(&xfer);
620581
}
621582
db_end_transaction(0);
622583
}
623584
624585
/*
@@ -668,10 +629,11 @@
668629
const char *zSCode = db_get("server-code", "x");
669630
const char *zPCode = db_get("project-code", 0);
670631
int nMsg = 0; /* Number of messages sent or received */
671632
int nCycle = 0; /* Number of round trips to the server */
672633
int nFileSend = 0;
634
+ const char *zCookie; /* Server cookie */
673635
Blob send; /* Text we are sending to the server */
674636
Blob recv; /* Reply we got back from the server */
675637
Xfer xfer; /* Transfer data */
676638
677639
memset(&xfer, 0, sizeof(xfer));
@@ -711,16 +673,27 @@
711673
712674
713675
while( go ){
714676
int newPhantom = 0;
715677
678
+ /* Send make the most recently received cookie. Let the server
679
+ ** figure out if this is a cookie that it cares about.
680
+ */
681
+ zCookie = db_get("cookie", 0);
682
+ if( zCookie ){
683
+ blob_appendf(&send, "cookie %s\n", zCookie);
684
+ }
685
+
716686
/* Generate gimme messages for phantoms and leaf messages
717687
** for all leaves.
718688
*/
719689
if( pullFlag ){
720690
request_phantoms(&xfer);
721
- send_leaves(&xfer);
691
+ }
692
+ if( pushFlag ){
693
+ send_unsent(&xfer);
694
+ nMsg += send_unclustered(&xfer);
722695
}
723696
724697
/* Exchange messages with the server */
725698
nFileSend = xfer.nFileSent + xfer.nDeltaSent;
726699
printf("Send: %10d bytes, %3d messages, %3d files (%d+%d)\n",
@@ -742,11 +715,10 @@
742715
}
743716
if( pushFlag ){
744717
blob_appendf(&send, "push %s %s\n", zSCode, zPCode);
745718
nMsg++;
746719
}
747
-
748720
749721
/* Process the reply that came back from the server */
750722
while( blob_line(&recv, &xfer.line) ){
751723
if( blob_buffer(&xfer.line)[0]=='#' ){
752724
continue;
@@ -773,11 +745,11 @@
773745
&& blob_is_uuid(&xfer.aToken[1])
774746
){
775747
nMsg++;
776748
if( pushFlag ){
777749
int rid = rid_from_uuid(&xfer.aToken[1], 0);
778
- send_manifest(&xfer, rid, &xfer.aToken[1], 0);
750
+ send_file(&xfer, rid, &xfer.aToken[1], 0);
779751
}
780752
}else
781753
782754
/* igot UUID
783755
**
@@ -805,34 +777,10 @@
805777
}
806778
remote_has(rid);
807779
}else
808780
809781
810
- /* leaf UUID
811
- **
812
- ** Server announces that it has a particular manifest. Send
813
- ** any children of this leaf that we have if we are pushing.
814
- ** Make the leaf a phantom if we are pulling. Remember that the
815
- ** remote end has the specified UUID.
816
- */
817
- if( xfer.nToken==2
818
- && blob_eq(&xfer.aToken[0], "leaf")
819
- && blob_is_uuid(&xfer.aToken[1])
820
- ){
821
- int rid = rid_from_uuid(&xfer.aToken[1], 0);
822
- nMsg++;
823
- if( pushFlag && rid ){
824
- leaf_response(&xfer, rid);
825
- }
826
- if( pullFlag && rid==0 ){
827
- rid = content_put(0, blob_str(&xfer.aToken[1]), 0);
828
- newPhantom = 1;
829
- }
830
- remote_has(rid);
831
- }else
832
-
833
-
834782
/* push SERVERCODE PRODUCTCODE
835783
**
836784
** Should only happen in response to a clone. This message tells
837785
** the client what product to use for the new database.
838786
*/
@@ -853,10 +801,23 @@
853801
cloneFlag = 0;
854802
pullFlag = 1;
855803
blob_appendf(&send, "pull %s %s\n", zSCode, zPCode);
856804
nMsg++;
857805
}else
806
+
807
+ /* cookie TEXT
808
+ **
809
+ ** The server might include a cookie in its reply. The client
810
+ ** should remember this cookie and send it back to the server
811
+ ** in its next query.
812
+ **
813
+ ** Each cookie received overwrites the prior cookie from the
814
+ ** same server.
815
+ */
816
+ if( blob_eq(&xfer.aToken[0], "cookie") && xfer.nToken==2 ){
817
+ db_set("cookie", blob_str(&xfer.aToken[1]));
818
+ }else
858819
859820
/* error MESSAGE
860821
**
861822
** Report an error
862823
*/
@@ -881,27 +842,25 @@
881842
blob_size(&recv), nMsg,
882843
xfer.nFileRcvd + xfer.nDeltaRcvd + xfer.nDanglingFile,
883844
xfer.nFileRcvd, xfer.nDeltaRcvd, xfer.nDanglingFile);
884845
885846
blob_reset(&recv);
847
+ nCycle++;
848
+ go = 0;
849
+
850
+ /* If we received one or more files on the previous exchange but
851
+ ** there are still phantoms, then go another round.
852
+ */
853
+ if( (xfer.nFileRcvd+xfer.nDeltaRcvd+xfer.nDanglingFile>0 || newPhantom)
854
+ && db_exists("SELECT 1 FROM phantom")
855
+ ){
856
+ go = 1;
857
+ }
886858
nMsg = 0;
887859
xfer.nFileRcvd = 0;
888860
xfer.nDeltaRcvd = 0;
889861
xfer.nDanglingFile = 0;
890
- nCycle++;
891
- go = 0;
892
-
893
- /* If we have received one or more files on this cycle or if
894
- ** we have received information that has caused us to create
895
- ** new phantoms and we have one or more phantoms, then go for
896
- ** another round
897
- */
898
- if( (xfer.nFileRcvd+xfer.nDeltaRcvd+xfer.nDanglingFile>0 || newPhantom)
899
- && db_exists("SELECT 1 FROM phantom")
900
- ){
901
- go = 1;
902
- }
903862
904863
/* If we have one or more files queued to send, then go
905864
** another round
906865
*/
907866
if( xfer.nFileSent+xfer.nDeltaSent>0 ){
908867
909868
DELETED test/basic1.test
910869
ADDED wiki_and_ticket_ideas.txt
--- src/xfer.c
+++ src/xfer.c
@@ -234,105 +234,11 @@
234 remote_has(rid);
235 blob_reset(&uuid);
236 }
237
238 /*
239 ** Send the file identified by mid and pUuid. If that file happens
240 ** to be a manifest, then also send all of the associated content
241 ** files for that manifest. If the file is not a manifest, then this
242 ** routine is the equivalent of send_file().
243 */
244 static void send_manifest(Xfer *pXfer, int mid, Blob *pUuid, int srcId){
245 Stmt q2;
246 send_file(pXfer, mid, pUuid, srcId);
247 db_prepare(&q2,
248 "SELECT pid, uuid, fid FROM mlink, blob"
249 " WHERE rid=fid AND mid=%d",
250 mid
251 );
252 while( db_step(&q2)==SQLITE_ROW ){
253 int pid, fid;
254 Blob uuid;
255 pid = db_column_int(&q2, 0);
256 db_ephemeral_blob(&q2, 1, &uuid);
257 fid = db_column_int(&q2, 2);
258 send_file(pXfer, fid, &uuid, pid);
259 }
260 db_finalize(&q2);
261 }
262
263 /*
264 ** This routine runs when either client or server is notified that
265 ** the other side thinks rid is a leaf manifest. If we hold
266 ** children of rid, then send them over to the other side.
267 */
268 static void leaf_response(Xfer *pXfer, int rid){
269 Stmt q1;
270 db_prepare(&q1,
271 "SELECT cid, uuid FROM plink, blob"
272 " WHERE blob.rid=plink.cid"
273 " AND plink.pid=%d",
274 rid
275 );
276 while( db_step(&q1)==SQLITE_ROW ){
277 Blob uuid;
278 int cid;
279
280 cid = db_column_int(&q1, 0);
281 db_ephemeral_blob(&q1, 1, &uuid);
282 send_manifest(pXfer, cid, &uuid, rid);
283 if( blob_size(pXfer->pOut)<pXfer->mxSend ){
284 leaf_response(pXfer, cid);
285 }
286 }
287 }
288
289 /*
290 ** Sent a leaf message for every leaf.
291 */
292 static void send_leaves(Xfer *pXfer){
293 Stmt q;
294 db_prepare(&q,
295 "SELECT uuid FROM blob WHERE rid IN"
296 " (SELECT cid FROM plink EXCEPT SELECT pid FROM plink)"
297 );
298 while( db_step(&q)==SQLITE_ROW ){
299 const char *zUuid = db_column_text(&q, 0);
300 blob_appendf(pXfer->pOut, "leaf %s\n", zUuid);
301 }
302 db_finalize(&q);
303 }
304
305 /*
306 ** Sent leaf content for every leaf that is not found in the
307 ** onremote table. This is intended to send leaf content for
308 ** every leaf that is unknown on the remote end.
309 **
310 ** In addition, we might send "igot" messages for a few generations of
311 ** parents of the unknown leaves. This will speed the transmission
312 ** of new branches.
313 */
314 static void send_unknown_leaf_content(Xfer *pXfer){
315 Stmt q1;
316 db_prepare(&q1,
317 "SELECT rid, uuid FROM blob WHERE rid IN"
318 " (SELECT cid FROM plink EXCEPT SELECT pid FROM plink)"
319 " AND NOT EXISTS(SELECT 1 FROM onremote WHERE rid=blob.rid)"
320 );
321 while( db_step(&q1)==SQLITE_ROW ){
322 Blob uuid;
323 int cid;
324
325 cid = db_column_int(&q1, 0);
326 db_ephemeral_blob(&q1, 1, &uuid);
327 send_manifest(pXfer, cid, &uuid, 0);
328 }
329 db_finalize(&q1);
330 }
331
332 /*
333 ** Sen a gimme message for every phantom.
334 */
335 static void request_phantoms(Xfer *pXfer){
336 Stmt q;
337 db_prepare(&q, "SELECT uuid FROM phantom JOIN blob USING(rid)");
338 while( db_step(&q)==SQLITE_ROW ){
@@ -396,10 +302,77 @@
396 }
397 }
398 db_reset(&q);
399 }
400
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
401
402 /*
403 ** If this variable is set, disable login checks. Used for debugging
404 ** only.
405 */
@@ -454,22 +427,20 @@
454 }
455 }else
456
457 /* gimme UUID
458 **
459 ** Client is requesting a file. If the file is a manifest,
460 ** the server can assume that the client also needs all content
461 ** files associated with that manifest.
462 */
463 if( blob_eq(&xfer.aToken[0], "gimme")
464 && xfer.nToken==2
465 && blob_is_uuid(&xfer.aToken[1])
466 ){
467 if( isPull ){
468 int rid = rid_from_uuid(&xfer.aToken[1], 0);
469 if( rid ){
470 send_manifest(&xfer, rid, &xfer.aToken[1], 0);
471 }
472 }
473 }else
474
475 /* igot UUID
@@ -484,32 +455,10 @@
484 rid_from_uuid(&xfer.aToken[1], 1);
485 }
486 }else
487
488
489 /* leaf UUID
490 **
491 ** Client announces that it has a particular manifest. If
492 ** the server has children of this leaf, then send those
493 ** children back to the client. If the server lacks this
494 ** leaf, request it.
495 */
496 if( xfer.nToken==2
497 && blob_eq(&xfer.aToken[0], "leaf")
498 && blob_is_uuid(&xfer.aToken[1])
499 ){
500 int rid = rid_from_uuid(&xfer.aToken[1], 0);
501 if( rid ){
502 remote_has(rid);
503 if( isPull ){
504 leaf_response(&xfer, rid);
505 }
506 }else if( isPush ){
507 content_put(0, blob_str(&xfer.aToken[1]), 0);
508 }
509 }else
510
511 /* pull SERVERCODE PROJECTCODE
512 ** push SERVERCODE PROJECTCODE
513 **
514 ** The client wants either send or receive. The server should
515 ** verify that the project code matches and that the server code
@@ -557,38 +506,28 @@
557 cgi_reset_content();
558 @ error not\sauthorized\sto\swrite
559 nErr++;
560 break;
561 }
562 send_leaves(&xfer);
563 isPush = 1;
564 }
565 }else
566
567 /* clone
568 **
569 ** The client knows nothing. Tell all.
570 */
571 if( blob_eq(&xfer.aToken[0], "clone") ){
572 int rootid;
573 login_check_credentials();
574 if( !g.okClone ){
575 cgi_reset_content();
576 @ error not\sauthorized\sto\sclone
577 nErr++;
578 break;
579 }
580 isPull = 1;
581 @ push %s(db_get("server-code", "x")) %s(db_get("project-code", "x"))
582 rootid = db_int(0,
583 "SELECT pid FROM plink AS a"
584 " WHERE NOT EXISTS(SELECT 1 FROM plink WHERE cid=a.pid)"
585 );
586 if( rootid ){
587 send_file(&xfer, rootid, 0, -1);
588 leaf_response(&xfer, rootid);
589 }
590 }else
591
592 /* login USER NONCE SIGNATURE
593 **
594 ** Check for a valid login. This has to happen before anything else.
@@ -601,10 +540,31 @@
601 g.okRead = g.okWrite = 1;
602 }else{
603 check_login(&xfer.aToken[1], &xfer.aToken[2], &xfer.aToken[3]);
604 }
605 }else
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
606
607 /* Unknown message
608 */
609 {
610 cgi_reset_content();
@@ -614,11 +574,12 @@
614 }
615 if( isPush ){
616 request_phantoms(&xfer);
617 }
618 if( isPull ){
619 send_unknown_leaf_content(&xfer);
 
620 }
621 db_end_transaction(0);
622 }
623
624 /*
@@ -668,10 +629,11 @@
668 const char *zSCode = db_get("server-code", "x");
669 const char *zPCode = db_get("project-code", 0);
670 int nMsg = 0; /* Number of messages sent or received */
671 int nCycle = 0; /* Number of round trips to the server */
672 int nFileSend = 0;
 
673 Blob send; /* Text we are sending to the server */
674 Blob recv; /* Reply we got back from the server */
675 Xfer xfer; /* Transfer data */
676
677 memset(&xfer, 0, sizeof(xfer));
@@ -711,16 +673,27 @@
711
712
713 while( go ){
714 int newPhantom = 0;
715
 
 
 
 
 
 
 
 
716 /* Generate gimme messages for phantoms and leaf messages
717 ** for all leaves.
718 */
719 if( pullFlag ){
720 request_phantoms(&xfer);
721 send_leaves(&xfer);
 
 
 
722 }
723
724 /* Exchange messages with the server */
725 nFileSend = xfer.nFileSent + xfer.nDeltaSent;
726 printf("Send: %10d bytes, %3d messages, %3d files (%d+%d)\n",
@@ -742,11 +715,10 @@
742 }
743 if( pushFlag ){
744 blob_appendf(&send, "push %s %s\n", zSCode, zPCode);
745 nMsg++;
746 }
747
748
749 /* Process the reply that came back from the server */
750 while( blob_line(&recv, &xfer.line) ){
751 if( blob_buffer(&xfer.line)[0]=='#' ){
752 continue;
@@ -773,11 +745,11 @@
773 && blob_is_uuid(&xfer.aToken[1])
774 ){
775 nMsg++;
776 if( pushFlag ){
777 int rid = rid_from_uuid(&xfer.aToken[1], 0);
778 send_manifest(&xfer, rid, &xfer.aToken[1], 0);
779 }
780 }else
781
782 /* igot UUID
783 **
@@ -805,34 +777,10 @@
805 }
806 remote_has(rid);
807 }else
808
809
810 /* leaf UUID
811 **
812 ** Server announces that it has a particular manifest. Send
813 ** any children of this leaf that we have if we are pushing.
814 ** Make the leaf a phantom if we are pulling. Remember that the
815 ** remote end has the specified UUID.
816 */
817 if( xfer.nToken==2
818 && blob_eq(&xfer.aToken[0], "leaf")
819 && blob_is_uuid(&xfer.aToken[1])
820 ){
821 int rid = rid_from_uuid(&xfer.aToken[1], 0);
822 nMsg++;
823 if( pushFlag && rid ){
824 leaf_response(&xfer, rid);
825 }
826 if( pullFlag && rid==0 ){
827 rid = content_put(0, blob_str(&xfer.aToken[1]), 0);
828 newPhantom = 1;
829 }
830 remote_has(rid);
831 }else
832
833
834 /* push SERVERCODE PRODUCTCODE
835 **
836 ** Should only happen in response to a clone. This message tells
837 ** the client what product to use for the new database.
838 */
@@ -853,10 +801,23 @@
853 cloneFlag = 0;
854 pullFlag = 1;
855 blob_appendf(&send, "pull %s %s\n", zSCode, zPCode);
856 nMsg++;
857 }else
 
 
 
 
 
 
 
 
 
 
 
 
 
858
859 /* error MESSAGE
860 **
861 ** Report an error
862 */
@@ -881,27 +842,25 @@
881 blob_size(&recv), nMsg,
882 xfer.nFileRcvd + xfer.nDeltaRcvd + xfer.nDanglingFile,
883 xfer.nFileRcvd, xfer.nDeltaRcvd, xfer.nDanglingFile);
884
885 blob_reset(&recv);
 
 
 
 
 
 
 
 
 
 
 
886 nMsg = 0;
887 xfer.nFileRcvd = 0;
888 xfer.nDeltaRcvd = 0;
889 xfer.nDanglingFile = 0;
890 nCycle++;
891 go = 0;
892
893 /* If we have received one or more files on this cycle or if
894 ** we have received information that has caused us to create
895 ** new phantoms and we have one or more phantoms, then go for
896 ** another round
897 */
898 if( (xfer.nFileRcvd+xfer.nDeltaRcvd+xfer.nDanglingFile>0 || newPhantom)
899 && db_exists("SELECT 1 FROM phantom")
900 ){
901 go = 1;
902 }
903
904 /* If we have one or more files queued to send, then go
905 ** another round
906 */
907 if( xfer.nFileSent+xfer.nDeltaSent>0 ){
908
909 ELETED test/basic1.test
910 DDED wiki_and_ticket_ideas.txt
--- src/xfer.c
+++ src/xfer.c
@@ -234,105 +234,11 @@
234 remote_has(rid);
235 blob_reset(&uuid);
236 }
237
238 /*
239 ** Send a gimme message for every phantom.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240 */
241 static void request_phantoms(Xfer *pXfer){
242 Stmt q;
243 db_prepare(&q, "SELECT uuid FROM phantom JOIN blob USING(rid)");
244 while( db_step(&q)==SQLITE_ROW ){
@@ -396,10 +302,77 @@
302 }
303 }
304 db_reset(&q);
305 }
306
307 /*
308 ** Send the content of all files in the unsent table.
309 **
310 ** This is really just an optimization. If you clear the
311 ** unsent table, all the right files will still get transferred.
312 ** It just might require an extra round trip or two.
313 */
314 static void send_unsent(Xfer *pXfer){
315 Stmt q;
316 db_prepare(&q, "SELECT rid FROM unsent");
317 while( db_step(&q)==SQLITE_ROW ){
318 int rid = db_column_int(&q, 0);
319 send_file(pXfer, rid, 0, 0);
320 }
321 db_finalize(&q);
322 db_multi_exec("DELETE FROM unsent");
323 }
324
325 /*
326 ** Check to see if the number of unclustered entries is greater than
327 ** 100 and if it is, form a new cluster. Unclustered phantoms do not
328 ** count toward the 100 total. And phantoms are never added to a new
329 ** cluster.
330 */
331 static void create_cluster(void){
332 Blob cluster, cksum;
333 Stmt q;
334 int nUncl;
335 nUncl = db_int(0, "SELECT count(*) FROM unclustered"
336 " WHERE NOT EXISTS(SELECT 1 FROM phantom"
337 " WHERE rid=unclustered.rid)");
338 if( nUncl<100 ){
339 return;
340 }
341 blob_zero(&cluster);
342 db_prepare(&q, "SELECT uuid FROM unclustered, blob"
343 " WHERE NOT EXISTS(SELECT 1 FROM phantom"
344 " WHERE rid!=unclustered.rid)"
345 " AND unclustered.rid=blob.rid"
346 " ORDER BY 1");
347 while( db_step(&q)==SQLITE_ROW ){
348 blob_appendf(&cluster, "M %s\n", db_column_text(&q, 0));
349 }
350 db_finalize(&q);
351 md5sum_blob(&cluster, &cksum);
352 blob_appendf(&cluster, "Z %b\n", &cksum);
353 blob_reset(&cksum);
354 db_multi_exec("DELETE FROM unclustered");
355 content_put(&cluster, 0, 0);
356 blob_reset(&cluster);
357 }
358
359 /*
360 ** Send an igot message for every entry in unclustered table.
361 ** Return the number of messages sent.
362 */
363 static int send_unclustered(Xfer *pXfer){
364 Stmt q;
365 int cnt = 0;
366 db_prepare(&q, "SELECT uuid FROM unclustered JOIN blob USING(rid)");
367 while( db_step(&q)==SQLITE_ROW ){
368 blob_appendf(pXfer->pOut, "igot %s\n", db_column_text(&q, 0));
369 cnt++;
370 }
371 db_finalize(&q);
372 return cnt;
373 }
374
375 /*
376 ** If this variable is set, disable login checks. Used for debugging
377 ** only.
378 */
@@ -454,22 +427,20 @@
427 }
428 }else
429
430 /* gimme UUID
431 **
432 ** Client is requesting a file. Send it.
 
 
433 */
434 if( blob_eq(&xfer.aToken[0], "gimme")
435 && xfer.nToken==2
436 && blob_is_uuid(&xfer.aToken[1])
437 ){
438 if( isPull ){
439 int rid = rid_from_uuid(&xfer.aToken[1], 0);
440 if( rid ){
441 send_file(&xfer, rid, &xfer.aToken[1], 0);
442 }
443 }
444 }else
445
446 /* igot UUID
@@ -484,32 +455,10 @@
455 rid_from_uuid(&xfer.aToken[1], 1);
456 }
457 }else
458
459
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
460 /* pull SERVERCODE PROJECTCODE
461 ** push SERVERCODE PROJECTCODE
462 **
463 ** The client wants either send or receive. The server should
464 ** verify that the project code matches and that the server code
@@ -557,38 +506,28 @@
506 cgi_reset_content();
507 @ error not\sauthorized\sto\swrite
508 nErr++;
509 break;
510 }
 
511 isPush = 1;
512 }
513 }else
514
515 /* clone
516 **
517 ** The client knows nothing. Tell all.
518 */
519 if( blob_eq(&xfer.aToken[0], "clone") ){
 
520 login_check_credentials();
521 if( !g.okClone ){
522 cgi_reset_content();
523 @ error not\sauthorized\sto\sclone
524 nErr++;
525 break;
526 }
527 isPull = 1;
528 @ push %s(db_get("server-code", "x")) %s(db_get("project-code", "x"))
 
 
 
 
 
 
 
 
529 }else
530
531 /* login USER NONCE SIGNATURE
532 **
533 ** Check for a valid login. This has to happen before anything else.
@@ -601,10 +540,31 @@
540 g.okRead = g.okWrite = 1;
541 }else{
542 check_login(&xfer.aToken[1], &xfer.aToken[2], &xfer.aToken[3]);
543 }
544 }else
545
546 /* cookie TEXT
547 **
548 ** A cookie contains a arbitrary-length argument that is server-defined.
549 ** The argument must be encoded so as not to contain any whitespace.
550 ** The server can optionally send a cookie to the client. The client
551 ** might then return the same cookie back to the server on its next
552 ** communication. The cookie might record information that helps
553 ** the server optimize a push or pull.
554 **
555 ** The client is not required to return a cookie. So the server
556 ** must not depend on the cookie. The cookie should be an optimization
557 ** only. The client might also send a cookie that came from a different
558 ** server. So the server must be prepared to distinguish its own cookie
559 ** from cookies originating from other servers. The client might send
560 ** back several different cookies to the server. The server should be
561 ** prepared to sift through the cookies and pick the one that it wants.
562 */
563 if( blob_eq(&xfer.aToken[0], "cookie") && xfer.nToken==2 ){
564 /* Process the cookie */
565 }else
566
567 /* Unknown message
568 */
569 {
570 cgi_reset_content();
@@ -614,11 +574,12 @@
574 }
575 if( isPush ){
576 request_phantoms(&xfer);
577 }
578 if( isPull ){
579 create_cluster();
580 send_unclustered(&xfer);
581 }
582 db_end_transaction(0);
583 }
584
585 /*
@@ -668,10 +629,11 @@
629 const char *zSCode = db_get("server-code", "x");
630 const char *zPCode = db_get("project-code", 0);
631 int nMsg = 0; /* Number of messages sent or received */
632 int nCycle = 0; /* Number of round trips to the server */
633 int nFileSend = 0;
634 const char *zCookie; /* Server cookie */
635 Blob send; /* Text we are sending to the server */
636 Blob recv; /* Reply we got back from the server */
637 Xfer xfer; /* Transfer data */
638
639 memset(&xfer, 0, sizeof(xfer));
@@ -711,16 +673,27 @@
673
674
675 while( go ){
676 int newPhantom = 0;
677
678 /* Send make the most recently received cookie. Let the server
679 ** figure out if this is a cookie that it cares about.
680 */
681 zCookie = db_get("cookie", 0);
682 if( zCookie ){
683 blob_appendf(&send, "cookie %s\n", zCookie);
684 }
685
686 /* Generate gimme messages for phantoms and leaf messages
687 ** for all leaves.
688 */
689 if( pullFlag ){
690 request_phantoms(&xfer);
691 }
692 if( pushFlag ){
693 send_unsent(&xfer);
694 nMsg += send_unclustered(&xfer);
695 }
696
697 /* Exchange messages with the server */
698 nFileSend = xfer.nFileSent + xfer.nDeltaSent;
699 printf("Send: %10d bytes, %3d messages, %3d files (%d+%d)\n",
@@ -742,11 +715,10 @@
715 }
716 if( pushFlag ){
717 blob_appendf(&send, "push %s %s\n", zSCode, zPCode);
718 nMsg++;
719 }
 
720
721 /* Process the reply that came back from the server */
722 while( blob_line(&recv, &xfer.line) ){
723 if( blob_buffer(&xfer.line)[0]=='#' ){
724 continue;
@@ -773,11 +745,11 @@
745 && blob_is_uuid(&xfer.aToken[1])
746 ){
747 nMsg++;
748 if( pushFlag ){
749 int rid = rid_from_uuid(&xfer.aToken[1], 0);
750 send_file(&xfer, rid, &xfer.aToken[1], 0);
751 }
752 }else
753
754 /* igot UUID
755 **
@@ -805,34 +777,10 @@
777 }
778 remote_has(rid);
779 }else
780
781
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
782 /* push SERVERCODE PRODUCTCODE
783 **
784 ** Should only happen in response to a clone. This message tells
785 ** the client what product to use for the new database.
786 */
@@ -853,10 +801,23 @@
801 cloneFlag = 0;
802 pullFlag = 1;
803 blob_appendf(&send, "pull %s %s\n", zSCode, zPCode);
804 nMsg++;
805 }else
806
807 /* cookie TEXT
808 **
809 ** The server might include a cookie in its reply. The client
810 ** should remember this cookie and send it back to the server
811 ** in its next query.
812 **
813 ** Each cookie received overwrites the prior cookie from the
814 ** same server.
815 */
816 if( blob_eq(&xfer.aToken[0], "cookie") && xfer.nToken==2 ){
817 db_set("cookie", blob_str(&xfer.aToken[1]));
818 }else
819
820 /* error MESSAGE
821 **
822 ** Report an error
823 */
@@ -881,27 +842,25 @@
842 blob_size(&recv), nMsg,
843 xfer.nFileRcvd + xfer.nDeltaRcvd + xfer.nDanglingFile,
844 xfer.nFileRcvd, xfer.nDeltaRcvd, xfer.nDanglingFile);
845
846 blob_reset(&recv);
847 nCycle++;
848 go = 0;
849
850 /* If we received one or more files on the previous exchange but
851 ** there are still phantoms, then go another round.
852 */
853 if( (xfer.nFileRcvd+xfer.nDeltaRcvd+xfer.nDanglingFile>0 || newPhantom)
854 && db_exists("SELECT 1 FROM phantom")
855 ){
856 go = 1;
857 }
858 nMsg = 0;
859 xfer.nFileRcvd = 0;
860 xfer.nDeltaRcvd = 0;
861 xfer.nDanglingFile = 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
862
863 /* If we have one or more files queued to send, then go
864 ** another round
865 */
866 if( xfer.nFileSent+xfer.nDeltaSent>0 ){
867
868 ELETED test/basic1.test
869 DDED wiki_and_ticket_ideas.txt
D test/basic1.test
-231
--- a/test/basic1.test
+++ b/test/basic1.test
@@ -1,231 +0,0 @@
1
-#
2
-# Copyright (c) 2006 D. Richard Hipp
3
-#
4
-# This program is free software; you can redistribute it and/or
5
-# modify it under the terms of the GNU General Public
6
-# License version 2 as published by the Free Software Foundation.
7
-#
8
-# This program is distributed in the hope that it will be useful,
9
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
-# General Public License for more details.
12
-#
13
-# You should have received a copy of the GNU General Public
14
-# License along with this library; if not, write to the
15
-# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
16
-# Boston, MA 02111-1307, USA.
17
-#
18
-# Author contact information:
19
-# [email protected]
20
-# http://www.hwaci.com/drh/
21
-#
22
-############################################################################
23
-#
24
-# Tests of the basic check-in/check-out facility
25
-#
26
-
27
-# Construct a repository named "r1". Connect to this
28
-# repository from subdirectory "testdir". Initialize the
29
-# repository with the source code files to fossil.
30
-#
31
-# The initial (empty) version is $root. The version with
32
-# the source code files in it is $v1.
33
-#
34
-set srcdir [file dir $testdir]/src
35
-file delete -force r1
36
-file delete -force FOSSIL
37
-file delete -force testdir
38
-file mkdir testdir
39
-cd testdir
40
-fossil init ../r1
41
-fossil connect ../r1
42
-set root [lindex $RESULT 0]
43
-set srcfilelist {}
44
-foreach f [lsort [glob $srcdir/*]] {
45
- set tail [file tail $f]
46
- file copy $f $tail
47
- lappend srcfilelist $tail
48
-}
49
-eval fossil add $srcfilelist
50
-fossil commit -m {first checkin}
51
-set v1 [lindex $RESULT 0]
52
-fossil leaves root
53
-test basic1-1.1 {[expr {$v1==[lindex $RESULT 2]}]}
54
-fossil changes
55
-test basic1-1.2 {$RESULT==""}
56
-foreach f $srcfilelist {
57
- test basic1-1.3.$f {[same_file $srcdir/$f $f]}
58
-}
59
-fossil co $root
60
-fossil changes
61
-test basic1-1.4 {$RESULT==""}
62
-foreach f $srcfilelist {
63
- test basic1-1.5.$f {![file exists $f]}
64
-}
65
-fossil co $v1
66
-fossil changes
67
-test basic1-1.6 {$RESULT==""}
68
-foreach f $srcfilelist {
69
- test basic1-1.7.$f {[same_file $srcdir/$f $f]}
70
-}
71
-
72
-# Make random changes to 4 source code files and commit those
73
-# changes. Store the new version number in $v2
74
-#
75
-set changesinv2 [lrange $srcfilelist 3 6]
76
-set i 0
77
-foreach f $changesinv2 {
78
- set x [read_file $f]
79
- incr i
80
- expr {srand(1000+$i)}
81
- set y [random_changes $x 4 4 0 0.1]
82
- write_file $f $y
83
-}
84
-file mkdir copyofv2
85
-foreach f $srcfilelist {
86
- file copy $f copyofv2/$f
87
-}
88
-fossil changes
89
-set clist {}
90
-foreach {op file} $RESULT {
91
- test basic1-2.1-$file {$op=="edited:"}
92
- lappend clist $file
93
-}
94
-test basic1-2.2 {[lsort $clist]==[lsort $changesinv2]}
95
-fossil commit -m 'second commit'
96
-set v2 [lindex $RESULT 0]
97
-fossil changes
98
-test basic1-2.3 {$RESULT==""}
99
-foreach f $srcfilelist {
100
- test basic1-2.4-$f {[same_file $f copyofv2/$f]}
101
-}
102
-fossil checkout $v1
103
-fossil changes
104
-test basic1-2.5 {$RESULT==""}
105
-foreach f $srcfilelist {
106
- test basic1-2.6-$f {[same_file $f $srcdir/$f]}
107
-}
108
-fossil checkout $root
109
-foreach f $srcfilelist {
110
- test basic1-2.7-$f {![file exists $f]}
111
-}
112
-fossil checkout $v2
113
-foreach f $srcfilelist {
114
- test basic1-2.8-$f {[same_file $f copyofv2/$f]}
115
-}
116
-
117
-# Starting with version $v1, make changes to 4 other files.
118
-# 2 of the files that are changed overlap with the changes
119
-# in $v2. Call these new changes $v3. $v3 is a fork.
120
-#
121
-fossil checkout $v1
122
-set changesinv3 [lrange $srcfilelist 5 8]
123
-set i 0
124
-foreach f $changesinv3 {
125
- set x [read_file $f]
126
- incr i
127
- expr {srand(2000+$i)}
128
- set y [random_changes $x 4 4 2 0.1]
129
- write_file $f $y
130
-}
131
-file mkdir copyofv3
132
-foreach f $srcfilelist {
133
- file copy $f copyofv3/$f
134
-}
135
-fossil manifest
136
-set clist {}
137
-set alllist {}
138
-foreach {op file} $RESULT {
139
- test basic1-3.1-$file {$op=="edited:" || $op=="unchanged:"}
140
- lappend alllist $file
141
- if {$op=="edited:"} {lappend clist $file}
142
-}
143
-test basic1-3.2 {[lsort $clist]==[lsort $changesinv3]}
144
-test basic1-3.3 {[lsort $alllist]==[lsort $srcfilelist]}
145
-fossil commit -m {fork the main branch}
146
-set v3 [lindex $RESULT 0]
147
-fossil changes
148
-test basic1-3.4 {$RESULT==""}
149
-foreach f $srcfilelist {
150
- test basic1-3.5-$f {[same_file $f copyofv3/$f]}
151
-}
152
-fossil co $v1
153
-fossil changes
154
-test basic1-3.5 {$RESULT==""}
155
-foreach f $srcfilelist {
156
- test basic1-3.6-$f {[same_file $f $srcdir/$f]}
157
-}
158
-fossil co $v2
159
-fossil changes
160
-test basic1-3.7 {$RESULT==""}
161
-foreach f $srcfilelist {
162
- test basic1-3.8-$f {[same_file $f copyofv2/$f]}
163
-}
164
-fossil co $v3
165
-fossil changes
166
-test basic1-3.8 {$RESULT==""}
167
-foreach f $srcfilelist {
168
- test basic1-3.9-$f {[same_file $f copyofv3/$f]}
169
-}
170
-fossil leaves root
171
-test basic1-3.10 {[lindex $RESULT 2]==$v3}
172
-test basic1-3.11 {[lindex $RESULT 5]==$v2}
173
-
174
-# Now we will merge $v2 and $v3 to produce $v4. $v3 is currently
175
-# in the working tree.
176
-#
177
-file mkdir copyofv4
178
-foreach f $srcfilelist {
179
- file copy copyofv3/$f copyofv4/$f
180
-}
181
-set i 0
182
-foreach f $changesinv2 {
183
- set x [read_file $f]
184
- incr i
185
- expr {srand(1000+$i)}
186
- set y [random_changes $x 4 4 0 0.1]
187
- write_file copyofv4/$f $y
188
-}
189
-fossil merge $v2
190
-foreach f $srcfilelist {
191
- test basic1-4.1-$f {[same_file $f copyofv4/$f]}
192
-}
193
-fossil changes
194
-set clist {}
195
-foreach {op file} $RESULT {
196
- test basic1-4.2-$file {$op=="edited:"}
197
- lappend clist $file
198
-}
199
-test basic1-4.3 {[lsort $clist]==[lsort $changesinv2]}
200
-fossil commit -m {first merge}
201
-set v4 [lindex $RESULT 0]
202
-foreach f $srcfilelist {
203
- test basic1-4.4-$f {[same_file $f copyofv4/$f]}
204
-}
205
-fossil leaves root
206
-test basic1-4.5 {[llength $RESULT]==3}
207
-test basic1-4.6 {[lindex $RESULT 2]==$v4}
208
-fossil co $v1
209
-fossil changes
210
-test basic1-4.7 {$RESULT==""}
211
-foreach f $srcfilelist {
212
- test basic1-4.8-$f {[same_file $f $srcdir/$f]}
213
-}
214
-fossil co $v2
215
-fossil changes
216
-test basic1-4.9 {$RESULT==""}
217
-foreach f $srcfilelist {
218
- test basic1-4.10-$f {[same_file $f copyofv2/$f]}
219
-}
220
-fossil co $v3
221
-fossil changes
222
-test basic1-4.11 {$RESULT==""}
223
-foreach f $srcfilelist {
224
- test basic1-4.12-$f {[same_file $f copyofv3/$f]}
225
-}
226
-fossil co $v4
227
-fossil changes
228
-test basic1-4.13 {$RESULT==""}
229
-foreach f $srcfilelist {
230
- test basic1-4.14-$f {[same_file $f copyofv4/$f]}
231
-}
--- a/test/basic1.test
+++ b/test/basic1.test
@@ -1,231 +0,0 @@
1 #
2 # Copyright (c) 2006 D. Richard Hipp
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public
6 # License version 2 as published by the Free Software Foundation.
7 #
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 # General Public License for more details.
12 #
13 # You should have received a copy of the GNU General Public
14 # License along with this library; if not, write to the
15 # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
16 # Boston, MA 02111-1307, USA.
17 #
18 # Author contact information:
19 # [email protected]
20 # http://www.hwaci.com/drh/
21 #
22 ############################################################################
23 #
24 # Tests of the basic check-in/check-out facility
25 #
26
27 # Construct a repository named "r1". Connect to this
28 # repository from subdirectory "testdir". Initialize the
29 # repository with the source code files to fossil.
30 #
31 # The initial (empty) version is $root. The version with
32 # the source code files in it is $v1.
33 #
34 set srcdir [file dir $testdir]/src
35 file delete -force r1
36 file delete -force FOSSIL
37 file delete -force testdir
38 file mkdir testdir
39 cd testdir
40 fossil init ../r1
41 fossil connect ../r1
42 set root [lindex $RESULT 0]
43 set srcfilelist {}
44 foreach f [lsort [glob $srcdir/*]] {
45 set tail [file tail $f]
46 file copy $f $tail
47 lappend srcfilelist $tail
48 }
49 eval fossil add $srcfilelist
50 fossil commit -m {first checkin}
51 set v1 [lindex $RESULT 0]
52 fossil leaves root
53 test basic1-1.1 {[expr {$v1==[lindex $RESULT 2]}]}
54 fossil changes
55 test basic1-1.2 {$RESULT==""}
56 foreach f $srcfilelist {
57 test basic1-1.3.$f {[same_file $srcdir/$f $f]}
58 }
59 fossil co $root
60 fossil changes
61 test basic1-1.4 {$RESULT==""}
62 foreach f $srcfilelist {
63 test basic1-1.5.$f {![file exists $f]}
64 }
65 fossil co $v1
66 fossil changes
67 test basic1-1.6 {$RESULT==""}
68 foreach f $srcfilelist {
69 test basic1-1.7.$f {[same_file $srcdir/$f $f]}
70 }
71
72 # Make random changes to 4 source code files and commit those
73 # changes. Store the new version number in $v2
74 #
75 set changesinv2 [lrange $srcfilelist 3 6]
76 set i 0
77 foreach f $changesinv2 {
78 set x [read_file $f]
79 incr i
80 expr {srand(1000+$i)}
81 set y [random_changes $x 4 4 0 0.1]
82 write_file $f $y
83 }
84 file mkdir copyofv2
85 foreach f $srcfilelist {
86 file copy $f copyofv2/$f
87 }
88 fossil changes
89 set clist {}
90 foreach {op file} $RESULT {
91 test basic1-2.1-$file {$op=="edited:"}
92 lappend clist $file
93 }
94 test basic1-2.2 {[lsort $clist]==[lsort $changesinv2]}
95 fossil commit -m 'second commit'
96 set v2 [lindex $RESULT 0]
97 fossil changes
98 test basic1-2.3 {$RESULT==""}
99 foreach f $srcfilelist {
100 test basic1-2.4-$f {[same_file $f copyofv2/$f]}
101 }
102 fossil checkout $v1
103 fossil changes
104 test basic1-2.5 {$RESULT==""}
105 foreach f $srcfilelist {
106 test basic1-2.6-$f {[same_file $f $srcdir/$f]}
107 }
108 fossil checkout $root
109 foreach f $srcfilelist {
110 test basic1-2.7-$f {![file exists $f]}
111 }
112 fossil checkout $v2
113 foreach f $srcfilelist {
114 test basic1-2.8-$f {[same_file $f copyofv2/$f]}
115 }
116
117 # Starting with version $v1, make changes to 4 other files.
118 # 2 of the files that are changed overlap with the changes
119 # in $v2. Call these new changes $v3. $v3 is a fork.
120 #
121 fossil checkout $v1
122 set changesinv3 [lrange $srcfilelist 5 8]
123 set i 0
124 foreach f $changesinv3 {
125 set x [read_file $f]
126 incr i
127 expr {srand(2000+$i)}
128 set y [random_changes $x 4 4 2 0.1]
129 write_file $f $y
130 }
131 file mkdir copyofv3
132 foreach f $srcfilelist {
133 file copy $f copyofv3/$f
134 }
135 fossil manifest
136 set clist {}
137 set alllist {}
138 foreach {op file} $RESULT {
139 test basic1-3.1-$file {$op=="edited:" || $op=="unchanged:"}
140 lappend alllist $file
141 if {$op=="edited:"} {lappend clist $file}
142 }
143 test basic1-3.2 {[lsort $clist]==[lsort $changesinv3]}
144 test basic1-3.3 {[lsort $alllist]==[lsort $srcfilelist]}
145 fossil commit -m {fork the main branch}
146 set v3 [lindex $RESULT 0]
147 fossil changes
148 test basic1-3.4 {$RESULT==""}
149 foreach f $srcfilelist {
150 test basic1-3.5-$f {[same_file $f copyofv3/$f]}
151 }
152 fossil co $v1
153 fossil changes
154 test basic1-3.5 {$RESULT==""}
155 foreach f $srcfilelist {
156 test basic1-3.6-$f {[same_file $f $srcdir/$f]}
157 }
158 fossil co $v2
159 fossil changes
160 test basic1-3.7 {$RESULT==""}
161 foreach f $srcfilelist {
162 test basic1-3.8-$f {[same_file $f copyofv2/$f]}
163 }
164 fossil co $v3
165 fossil changes
166 test basic1-3.8 {$RESULT==""}
167 foreach f $srcfilelist {
168 test basic1-3.9-$f {[same_file $f copyofv3/$f]}
169 }
170 fossil leaves root
171 test basic1-3.10 {[lindex $RESULT 2]==$v3}
172 test basic1-3.11 {[lindex $RESULT 5]==$v2}
173
174 # Now we will merge $v2 and $v3 to produce $v4. $v3 is currently
175 # in the working tree.
176 #
177 file mkdir copyofv4
178 foreach f $srcfilelist {
179 file copy copyofv3/$f copyofv4/$f
180 }
181 set i 0
182 foreach f $changesinv2 {
183 set x [read_file $f]
184 incr i
185 expr {srand(1000+$i)}
186 set y [random_changes $x 4 4 0 0.1]
187 write_file copyofv4/$f $y
188 }
189 fossil merge $v2
190 foreach f $srcfilelist {
191 test basic1-4.1-$f {[same_file $f copyofv4/$f]}
192 }
193 fossil changes
194 set clist {}
195 foreach {op file} $RESULT {
196 test basic1-4.2-$file {$op=="edited:"}
197 lappend clist $file
198 }
199 test basic1-4.3 {[lsort $clist]==[lsort $changesinv2]}
200 fossil commit -m {first merge}
201 set v4 [lindex $RESULT 0]
202 foreach f $srcfilelist {
203 test basic1-4.4-$f {[same_file $f copyofv4/$f]}
204 }
205 fossil leaves root
206 test basic1-4.5 {[llength $RESULT]==3}
207 test basic1-4.6 {[lindex $RESULT 2]==$v4}
208 fossil co $v1
209 fossil changes
210 test basic1-4.7 {$RESULT==""}
211 foreach f $srcfilelist {
212 test basic1-4.8-$f {[same_file $f $srcdir/$f]}
213 }
214 fossil co $v2
215 fossil changes
216 test basic1-4.9 {$RESULT==""}
217 foreach f $srcfilelist {
218 test basic1-4.10-$f {[same_file $f copyofv2/$f]}
219 }
220 fossil co $v3
221 fossil changes
222 test basic1-4.11 {$RESULT==""}
223 foreach f $srcfilelist {
224 test basic1-4.12-$f {[same_file $f copyofv3/$f]}
225 }
226 fossil co $v4
227 fossil changes
228 test basic1-4.13 {$RESULT==""}
229 foreach f $srcfilelist {
230 test basic1-4.14-$f {[same_file $f copyofv4/$f]}
231 }
--- a/test/basic1.test
+++ b/test/basic1.test
@@ -1,231 +0,0 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/wiki_and_ticket_ideas.txt
+++ b/wiki_and_ticket_ideas.txt
@@ -0,0 +1,190 @@
1
+Thoughts On How To Implement Wiki And Tickets In Fossil
2
+
3
+The crux of the problem of wiki and tickets is not how
4
+to render the information. There are countless other
5
+wiki and ticket systems that have explored this territory.
6
+We have a lot of experience rendering wiki and writing
7
+ticketing systems and we know how that part works. The
8
+hard part about doing wiki and tickets in Fossil is
9
+figuring how how to synchronize the wiki and tickets
10
+across different repositories.
11
+
12
+There are a number of approaches:
13
+
14
+(1) Don't synchronize. Write a traditional wiki and ticket
15
+ system that lives on a single repository. Fossil will
16
+ sync the source tree from one repository to another but
17
+ the wiki and tickets live in separate tables of the
18
+ database stay on a single repository.
19
+
20
+(2) Make each wiki pages and each ticket a file in the source
21
+ tree. Each change to a wiki page or ticket creates a new
22
+ baseline. Actually, wiki and ticket changes could cluster
23
+ so that each new baseline contained multiple wiki and
24
+ ticket changes, but any isolated wiki or ticket change
25
+ still requires a new baseline.
26
+
27
+(3) Store each wiki page and ticket as a separate branch of
28
+ the source tree that forks at the very root of the tree.
29
+ Every change to a wiki page or ticket still requires a
30
+ new baseline, but the baseline consists of single file
31
+ change and is thus quite compact and easy to manage.
32
+
33
+(4) Other synchronization methods. We could treat the wiki
34
+ and/or tickets as a completely separate system with its
35
+ on synchronization protocol that just happens to live in
36
+ the same executable and use the same database as the
37
+ source tree sync mechanism.
38
+
39
+(5) Hybrid approaches. One can combine any of the previous
40
+ four approaches to wiki and ticket synchronization to
41
+ generate a hybrid.
42
+
43
+The advantage of (1) is that it is simple and direct and
44
+easy to implement. We already know how to do wiki and tickets
45
+on a single server with a database. CVSTrac is a good example
46
+of these and there are countless other excellent examples.
47
+Method (1) also keeps the wiki and tickets distinct from the
48
+source files. The problem with (1) is that you cannot take
49
+the wiki or tickets with your for disconnected operation.
50
+Well, maybe you could pull down a complete copy of the wiki
51
+and ticket tables to carry with you on the airplane, but even
52
+then you would not be able to make changes and then later
53
+synchronize those changes with the main repository.
54
+
55
+Method (2) makes each wiki page and each ticket a separate
56
+file in the source tree. This means that the existing versioning
57
+and synchronization logic is unchanged. And the repository
58
+file format is simple and easy to describe. (The simplicity
59
+of the file format is an important feature for my intended
60
+use of Fossil. The ability to reconstruct a baseline from
61
+raw artifacts with no special software is an important though
62
+not well described feature of Fossil.) Having wiki and tickets
63
+readily at hand also gives the interesting possibility of editing
64
+tickets and especially wiki using your favorite text editor,
65
+rather than having to use an often clunky web interface.
66
+The web interface is still provided, of course, but if the
67
+wiki source text is there in a file in front of you, how much
68
+easier it would be to edit it using emacs or vi.
69
+
70
+Among the disadvantages of (2) is that it greatly increases
71
+the number of files in the source tree because of the added
72
+wiki and tickets. The SQLite project, for example, currently
73
+has about 560 files in the tree. But there are around 2600
74
+tickets and 120 wiki pages. If we remove tickets that are
75
+closed we can get down to around 800 tickets. And if I were
76
+more aggressive about closing tickets, that number might be
77
+lower. But there are still more tickets than there are source
78
+files. The number of wiki pages is not that great, but on
79
+the other hand the SQLite wiki is not active like the Tcl/Tk
80
+wiki.
81
+
82
+Another disadvantage of (2) is that you cannot add a ticket
83
+or fix a ticket on a baseline after the baseline is created.
84
+To add or fix a ticket, you have to create a new baseline.
85
+That means that if a bug is discovered in a baseline after its
86
+release, you cannot add the ticket to the baseline in which
87
+the bug was found; you have to put the ticket in a follow-on
88
+baseline. This seems weird. Perhaps some additional processing
89
+inside of fossil can identify when tickets are added to subsequent
90
+baselines and tag prior baselines accordingly. On the other hand,
91
+because tickets are part of the baseline, tickets fixed in one
92
+branch remain open in parallel branches until fixed separately
93
+there, as they should be.
94
+
95
+Any interesting question with method (2) is what baseline to
96
+use for displaying wiki and tickets on the web interface.
97
+Clearly the display should use a leaf baseline. But the
98
+project might have several peer branches each with their
99
+own leaves. Which leaf should be used to display the wiki
100
+and tickets? Is there an interface that allows the user to
101
+browse through wiki and tickets from prior baselines?
102
+
103
+The third method solves the many-files problem of method (2).
104
+In (3), each wiki page and ever ticket becomes a separate
105
+branch of the baseline change hierarchy. So the number of
106
+files in the source tree remains small. The problem here is
107
+the number of branches in the baseline hierarchy explodes.
108
+The amount of network traffic used by the synchronization
109
+protocol (and to some degree the amount of CPU time) is
110
+proportional to the number of leaves in the baseline hierarchy.
111
+If every wiki page and every ticket is in its own tree with
112
+at least one leaf, then suddenly the project goes from have
113
+a 6 or 12 leaves to having thousands. The synchronization
114
+protocol would have to be enhanced to deal with this. I have
115
+outlined ways of doing this, but they involve more complex
116
+file format and more complicated wire protocols. My assessment
117
+is that this approach is not consistent with simplicity.
118
+
119
+In the list above, I mention methods (4) and (5) mostly as a
120
+way of showing that the list of (1) through (3) does not intend
121
+to be exhaustive. One can certainly devise variations on
122
+methods (1) through (3) to accomplish the same thing. And there
123
+might be other techniques that I have not thought of yet.
124
+
125
+I have been vacillating between methods (1), (2), and (3) for
126
+months. As of this writing, I am leaning toward (2) with
127
+careful attention to the ticket interpreter within Fossil so
128
+that when a ticket in a later baseline is written against an
129
+earlier baseline, a link is established in the database so that
130
+the later ticket is displayed with the earlier baseline. (The
131
+details are still sketchy.) Scaling is still an issue. But
132
+for the kinds of projects that Fossil is intended, I do not
133
+expect the number of wiki pages or tickets to become excessive.
134
+Fossil is not intended to be a replacement for the tcler's wiki
135
+or for wikipedia. Fossil is designed to be a convenient and
136
+self-contained CM system for an SQLite-sized project. Just
137
+as SQLite is not intended to replace Oracle, so Fossil is not
138
+intended to replace the server farm at a Web 2.0 startup.
139
+
140
+------------- 2007-08-02 ---------------
141
+
142
+Wiki and tickets need not be handled in the same way. Method
143
+(1) is disadvantageous to tickets since we what to be able to
144
+carry tickets with us, and modify them, while working offline.
145
+But the need to modify wiki offline is not nearly as acute.
146
+Hence consideration should be given to implementations that
147
+use different methods for handling tickets and wiki.
148
+
149
+Another hybrid method worth consideration is to place
150
+baselines of wiki and/or tickets in the source tree but
151
+allow overlays or deltas to be entered on a per-server
152
+basis. The overlays or deltas are not synchronized between
153
+servers. But one can take a "snapshot" of the overlays/deltas
154
+to create a new source tree baseline which could then be
155
+synchronized and used and/or modified offline. Let us call
156
+refer to this new methods as (6). Here are the details:
157
+
158
+ * Tickets or wiki or both are stored as part of the tree
159
+ as described in method (2).
160
+
161
+ * Web-based changes to wiki or tickets are not written back
162
+ into the tree but are instead stored locally in a cache
163
+ of exceptions or overlays.
164
+
165
+ * When the web interface goes to look for a ticket or a
166
+ wiki it consults its local cache first and then if not
167
+ found there, a designated baseline.
168
+
169
+ * The cache of changes is not synchronized by the push,
170
+ pull, or sync commands. It is local to the repository
171
+ on which it is entered.
172
+
173
+ * A button on the web interface (invoked by users with
174
+ appropriate privileges) takes all locally cached changes
175
+ and adds them to the tree in a new baseline.
176
+
177
+ * Locally cached changes are against a specific baseline.
178
+ That specific baseline is used as backup if a page or
179
+ ticket request is not found in the local cache. If the
180
+ backing baseline is changed, the local cache automatically
181
+ merges in the differences in wiki or tickets between
182
+ the old and new baselines.
183
+
184
+This approach still leaves the many-files problem. In SQLite,
185
+there are about 500 source files and about 3000 different ticket
186
+and wiki page titles. But if the wiki isn't that big and if
187
+tickets are removed from baselines after they have been closed
188
+for 30 days or longer and if tickets are dealt with aggressively,
189
+there perhaps the many-files problem won't be such a big deal.
190
+
--- a/wiki_and_ticket_ideas.txt
+++ b/wiki_and_ticket_ideas.txt
@@ -0,0 +1,190 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/wiki_and_ticket_ideas.txt
+++ b/wiki_and_ticket_ideas.txt
@@ -0,0 +1,190 @@
1 Thoughts On How To Implement Wiki And Tickets In Fossil
2
3 The crux of the problem of wiki and tickets is not how
4 to render the information. There are countless other
5 wiki and ticket systems that have explored this territory.
6 We have a lot of experience rendering wiki and writing
7 ticketing systems and we know how that part works. The
8 hard part about doing wiki and tickets in Fossil is
9 figuring how how to synchronize the wiki and tickets
10 across different repositories.
11
12 There are a number of approaches:
13
14 (1) Don't synchronize. Write a traditional wiki and ticket
15 system that lives on a single repository. Fossil will
16 sync the source tree from one repository to another but
17 the wiki and tickets live in separate tables of the
18 database stay on a single repository.
19
20 (2) Make each wiki pages and each ticket a file in the source
21 tree. Each change to a wiki page or ticket creates a new
22 baseline. Actually, wiki and ticket changes could cluster
23 so that each new baseline contained multiple wiki and
24 ticket changes, but any isolated wiki or ticket change
25 still requires a new baseline.
26
27 (3) Store each wiki page and ticket as a separate branch of
28 the source tree that forks at the very root of the tree.
29 Every change to a wiki page or ticket still requires a
30 new baseline, but the baseline consists of single file
31 change and is thus quite compact and easy to manage.
32
33 (4) Other synchronization methods. We could treat the wiki
34 and/or tickets as a completely separate system with its
35 on synchronization protocol that just happens to live in
36 the same executable and use the same database as the
37 source tree sync mechanism.
38
39 (5) Hybrid approaches. One can combine any of the previous
40 four approaches to wiki and ticket synchronization to
41 generate a hybrid.
42
43 The advantage of (1) is that it is simple and direct and
44 easy to implement. We already know how to do wiki and tickets
45 on a single server with a database. CVSTrac is a good example
46 of these and there are countless other excellent examples.
47 Method (1) also keeps the wiki and tickets distinct from the
48 source files. The problem with (1) is that you cannot take
49 the wiki or tickets with your for disconnected operation.
50 Well, maybe you could pull down a complete copy of the wiki
51 and ticket tables to carry with you on the airplane, but even
52 then you would not be able to make changes and then later
53 synchronize those changes with the main repository.
54
55 Method (2) makes each wiki page and each ticket a separate
56 file in the source tree. This means that the existing versioning
57 and synchronization logic is unchanged. And the repository
58 file format is simple and easy to describe. (The simplicity
59 of the file format is an important feature for my intended
60 use of Fossil. The ability to reconstruct a baseline from
61 raw artifacts with no special software is an important though
62 not well described feature of Fossil.) Having wiki and tickets
63 readily at hand also gives the interesting possibility of editing
64 tickets and especially wiki using your favorite text editor,
65 rather than having to use an often clunky web interface.
66 The web interface is still provided, of course, but if the
67 wiki source text is there in a file in front of you, how much
68 easier it would be to edit it using emacs or vi.
69
70 Among the disadvantages of (2) is that it greatly increases
71 the number of files in the source tree because of the added
72 wiki and tickets. The SQLite project, for example, currently
73 has about 560 files in the tree. But there are around 2600
74 tickets and 120 wiki pages. If we remove tickets that are
75 closed we can get down to around 800 tickets. And if I were
76 more aggressive about closing tickets, that number might be
77 lower. But there are still more tickets than there are source
78 files. The number of wiki pages is not that great, but on
79 the other hand the SQLite wiki is not active like the Tcl/Tk
80 wiki.
81
82 Another disadvantage of (2) is that you cannot add a ticket
83 or fix a ticket on a baseline after the baseline is created.
84 To add or fix a ticket, you have to create a new baseline.
85 That means that if a bug is discovered in a baseline after its
86 release, you cannot add the ticket to the baseline in which
87 the bug was found; you have to put the ticket in a follow-on
88 baseline. This seems weird. Perhaps some additional processing
89 inside of fossil can identify when tickets are added to subsequent
90 baselines and tag prior baselines accordingly. On the other hand,
91 because tickets are part of the baseline, tickets fixed in one
92 branch remain open in parallel branches until fixed separately
93 there, as they should be.
94
95 Any interesting question with method (2) is what baseline to
96 use for displaying wiki and tickets on the web interface.
97 Clearly the display should use a leaf baseline. But the
98 project might have several peer branches each with their
99 own leaves. Which leaf should be used to display the wiki
100 and tickets? Is there an interface that allows the user to
101 browse through wiki and tickets from prior baselines?
102
103 The third method solves the many-files problem of method (2).
104 In (3), each wiki page and ever ticket becomes a separate
105 branch of the baseline change hierarchy. So the number of
106 files in the source tree remains small. The problem here is
107 the number of branches in the baseline hierarchy explodes.
108 The amount of network traffic used by the synchronization
109 protocol (and to some degree the amount of CPU time) is
110 proportional to the number of leaves in the baseline hierarchy.
111 If every wiki page and every ticket is in its own tree with
112 at least one leaf, then suddenly the project goes from have
113 a 6 or 12 leaves to having thousands. The synchronization
114 protocol would have to be enhanced to deal with this. I have
115 outlined ways of doing this, but they involve more complex
116 file format and more complicated wire protocols. My assessment
117 is that this approach is not consistent with simplicity.
118
119 In the list above, I mention methods (4) and (5) mostly as a
120 way of showing that the list of (1) through (3) does not intend
121 to be exhaustive. One can certainly devise variations on
122 methods (1) through (3) to accomplish the same thing. And there
123 might be other techniques that I have not thought of yet.
124
125 I have been vacillating between methods (1), (2), and (3) for
126 months. As of this writing, I am leaning toward (2) with
127 careful attention to the ticket interpreter within Fossil so
128 that when a ticket in a later baseline is written against an
129 earlier baseline, a link is established in the database so that
130 the later ticket is displayed with the earlier baseline. (The
131 details are still sketchy.) Scaling is still an issue. But
132 for the kinds of projects that Fossil is intended, I do not
133 expect the number of wiki pages or tickets to become excessive.
134 Fossil is not intended to be a replacement for the tcler's wiki
135 or for wikipedia. Fossil is designed to be a convenient and
136 self-contained CM system for an SQLite-sized project. Just
137 as SQLite is not intended to replace Oracle, so Fossil is not
138 intended to replace the server farm at a Web 2.0 startup.
139
140 ------------- 2007-08-02 ---------------
141
142 Wiki and tickets need not be handled in the same way. Method
143 (1) is disadvantageous to tickets since we what to be able to
144 carry tickets with us, and modify them, while working offline.
145 But the need to modify wiki offline is not nearly as acute.
146 Hence consideration should be given to implementations that
147 use different methods for handling tickets and wiki.
148
149 Another hybrid method worth consideration is to place
150 baselines of wiki and/or tickets in the source tree but
151 allow overlays or deltas to be entered on a per-server
152 basis. The overlays or deltas are not synchronized between
153 servers. But one can take a "snapshot" of the overlays/deltas
154 to create a new source tree baseline which could then be
155 synchronized and used and/or modified offline. Let us call
156 refer to this new methods as (6). Here are the details:
157
158 * Tickets or wiki or both are stored as part of the tree
159 as described in method (2).
160
161 * Web-based changes to wiki or tickets are not written back
162 into the tree but are instead stored locally in a cache
163 of exceptions or overlays.
164
165 * When the web interface goes to look for a ticket or a
166 wiki it consults its local cache first and then if not
167 found there, a designated baseline.
168
169 * The cache of changes is not synchronized by the push,
170 pull, or sync commands. It is local to the repository
171 on which it is entered.
172
173 * A button on the web interface (invoked by users with
174 appropriate privileges) takes all locally cached changes
175 and adds them to the tree in a new baseline.
176
177 * Locally cached changes are against a specific baseline.
178 That specific baseline is used as backup if a page or
179 ticket request is not found in the local cache. If the
180 backing baseline is changed, the local cache automatically
181 merges in the differences in wiki or tickets between
182 the old and new baselines.
183
184 This approach still leaves the many-files problem. In SQLite,
185 there are about 500 source files and about 3000 different ticket
186 and wiki page titles. But if the wiki isn't that big and if
187 tickets are removed from baselines after they have been closed
188 for 30 days or longer and if tickets are dealt with aggressively,
189 there perhaps the many-files problem won't be such a big deal.
190
--- www/build.html
+++ www/build.html
@@ -1,9 +1,11 @@
11
<html>
22
<title>Building And Installing Fossil</title>
33
</head>
44
<body bgcolor="white">
5
+<p>[ <a href="index.html">Index</a> ]</p>
6
+<hr>
57
<h1>Installing Fossil</h1>
68
79
<p>This page describes how to build and install Fossil. The
810
whole process is designed to be very easy.</p>
911
1012
--- www/build.html
+++ www/build.html
@@ -1,9 +1,11 @@
1 <html>
2 <title>Building And Installing Fossil</title>
3 </head>
4 <body bgcolor="white">
 
 
5 <h1>Installing Fossil</h1>
6
7 <p>This page describes how to build and install Fossil. The
8 whole process is designed to be very easy.</p>
9
10
--- www/build.html
+++ www/build.html
@@ -1,9 +1,11 @@
1 <html>
2 <title>Building And Installing Fossil</title>
3 </head>
4 <body bgcolor="white">
5 <p>[ <a href="index.html">Index</a> ]</p>
6 <hr>
7 <h1>Installing Fossil</h1>
8
9 <p>This page describes how to build and install Fossil. The
10 whole process is designed to be very easy.</p>
11
12
--- www/concepts.html
+++ www/concepts.html
@@ -1,10 +1,12 @@
11
<html>
22
<head>
33
<title>Fossil Concepts</title>
44
</head>
55
<body bgcolor="white">
6
+<p>[ <a href="index.html">Index</a> ]</p>
7
+<hr>
68
<h1 align="center">
79
Fossil Concepts
810
</h1>
911
1012
<h2>1.0 Introduction</h2>
1113
--- www/concepts.html
+++ www/concepts.html
@@ -1,10 +1,12 @@
1 <html>
2 <head>
3 <title>Fossil Concepts</title>
4 </head>
5 <body bgcolor="white">
 
 
6 <h1 align="center">
7 Fossil Concepts
8 </h1>
9
10 <h2>1.0 Introduction</h2>
11
--- www/concepts.html
+++ www/concepts.html
@@ -1,10 +1,12 @@
1 <html>
2 <head>
3 <title>Fossil Concepts</title>
4 </head>
5 <body bgcolor="white">
6 <p>[ <a href="index.html">Index</a> ]</p>
7 <hr>
8 <h1 align="center">
9 Fossil Concepts
10 </h1>
11
12 <h2>1.0 Introduction</h2>
13
--- www/delta_encoder_algorithm.html
+++ www/delta_encoder_algorithm.html
@@ -129,10 +129,16 @@
129129
the "origin". This search is constrained on the side of the "target"
130130
by the "base" (backward search), and the end of the "target" (forward
131131
search), and on the side of the "origin" by the beginning and end of
132132
the "origin", respectively.</p>
133133
134
+<p>There are input files for which the hash chains generated by the
135
+pre-processing step can become very long, leading to long search times
136
+and affecting the performance of the delta generator. To limit the
137
+effect such long chains can have the actual search for candidates is
138
+bounded, looking at most N candidates. Currently N is set to 250.</p>
139
+
134140
<p>From the ranges for all the candidates the best (= largest) common
135141
range is taken and it is determined how many bytes are needed to
136142
encode the bytes between the "base" and the end of that range. If the
137143
range extended back to the "base" then this can be done in a single
138144
copy instruction. Otherwise, i.e if there is a gap between the "base"
139145
--- www/delta_encoder_algorithm.html
+++ www/delta_encoder_algorithm.html
@@ -129,10 +129,16 @@
129 the "origin". This search is constrained on the side of the "target"
130 by the "base" (backward search), and the end of the "target" (forward
131 search), and on the side of the "origin" by the beginning and end of
132 the "origin", respectively.</p>
133
 
 
 
 
 
 
134 <p>From the ranges for all the candidates the best (= largest) common
135 range is taken and it is determined how many bytes are needed to
136 encode the bytes between the "base" and the end of that range. If the
137 range extended back to the "base" then this can be done in a single
138 copy instruction. Otherwise, i.e if there is a gap between the "base"
139
--- www/delta_encoder_algorithm.html
+++ www/delta_encoder_algorithm.html
@@ -129,10 +129,16 @@
129 the "origin". This search is constrained on the side of the "target"
130 by the "base" (backward search), and the end of the "target" (forward
131 search), and on the side of the "origin" by the beginning and end of
132 the "origin", respectively.</p>
133
134 <p>There are input files for which the hash chains generated by the
135 pre-processing step can become very long, leading to long search times
136 and affecting the performance of the delta generator. To limit the
137 effect such long chains can have the actual search for candidates is
138 bounded, looking at most N candidates. Currently N is set to 250.</p>
139
140 <p>From the ranges for all the candidates the best (= largest) common
141 range is taken and it is determined how many bytes are needed to
142 encode the bytes between the "base" and the end of that range. If the
143 range extended back to the "base" then this can be done in a single
144 copy instruction. Otherwise, i.e if there is a gap between the "base"
145
--- www/fileformat.html
+++ www/fileformat.html
@@ -1,10 +1,12 @@
11
<html>
22
<head>
33
<title>Fossil File Format</title>
44
</head>
55
<body bgcolor="white">
6
+<p>[ <a href="index.html">Index</a> ]</p>
7
+<hr>
68
<h1 align="center">
79
Fossil File Formats
810
</h1>
911
1012
<p>
1113
--- www/fileformat.html
+++ www/fileformat.html
@@ -1,10 +1,12 @@
1 <html>
2 <head>
3 <title>Fossil File Format</title>
4 </head>
5 <body bgcolor="white">
 
 
6 <h1 align="center">
7 Fossil File Formats
8 </h1>
9
10 <p>
11
--- www/fileformat.html
+++ www/fileformat.html
@@ -1,10 +1,12 @@
1 <html>
2 <head>
3 <title>Fossil File Format</title>
4 </head>
5 <body bgcolor="white">
6 <p>[ <a href="index.html">Index</a> ]</p>
7 <hr>
8 <h1 align="center">
9 Fossil File Formats
10 </h1>
11
12 <p>
13
+2 -1
--- www/index.html
+++ www/index.html
@@ -81,18 +81,19 @@
8181
8282
<ul>
8383
<li>The <a href="concepts.html">concepts</b> behind fossil</li>
8484
<li><a href="build.html">Building And Installing</a></li>
8585
<li><a href="quickstart.html">Quick Start</a> guide to using fossil
86
-<li><a href="pop.html">Principals Of Operation</a></li>
86
+<li><a href="pop.html">Principles Of Operation</a></li>
8787
<li>The <a href="selfcheck.html">automatic self-check</a> mechanism
8888
helps insure project integrity.</li>
8989
<li>The <a href="fileformat.html">file format</a> used by every content
9090
file stored in the repository.</li>
9191
<li>The <a href="delta_format.html">format of deltas</a> used to
9292
efficiently store changes between file revisions.</li>
9393
<li>The <a href="delta_encoder_algorithm.html">encoder algorithm</a> used to
9494
efficiently generate deltas.</li>
95
+<li>The <a href="sync.html">synchronization protocol</a>.
9596
</ul>
9697
9798
</body>
9899
</html>
99100
100101
ADDED www/index.wiki
--- www/index.html
+++ www/index.html
@@ -81,18 +81,19 @@
81
82 <ul>
83 <li>The <a href="concepts.html">concepts</b> behind fossil</li>
84 <li><a href="build.html">Building And Installing</a></li>
85 <li><a href="quickstart.html">Quick Start</a> guide to using fossil
86 <li><a href="pop.html">Principals Of Operation</a></li>
87 <li>The <a href="selfcheck.html">automatic self-check</a> mechanism
88 helps insure project integrity.</li>
89 <li>The <a href="fileformat.html">file format</a> used by every content
90 file stored in the repository.</li>
91 <li>The <a href="delta_format.html">format of deltas</a> used to
92 efficiently store changes between file revisions.</li>
93 <li>The <a href="delta_encoder_algorithm.html">encoder algorithm</a> used to
94 efficiently generate deltas.</li>
 
95 </ul>
96
97 </body>
98 </html>
99
100 DDED www/index.wiki
--- www/index.html
+++ www/index.html
@@ -81,18 +81,19 @@
81
82 <ul>
83 <li>The <a href="concepts.html">concepts</b> behind fossil</li>
84 <li><a href="build.html">Building And Installing</a></li>
85 <li><a href="quickstart.html">Quick Start</a> guide to using fossil
86 <li><a href="pop.html">Principles Of Operation</a></li>
87 <li>The <a href="selfcheck.html">automatic self-check</a> mechanism
88 helps insure project integrity.</li>
89 <li>The <a href="fileformat.html">file format</a> used by every content
90 file stored in the repository.</li>
91 <li>The <a href="delta_format.html">format of deltas</a> used to
92 efficiently store changes between file revisions.</li>
93 <li>The <a href="delta_encoder_algorithm.html">encoder algorithm</a> used to
94 efficiently generate deltas.</li>
95 <li>The <a href="sync.html">synchronization protocol</a>.
96 </ul>
97
98 </body>
99 </html>
100
101 DDED www/index.wiki
--- a/www/index.wiki
+++ b/www/index.wiki
@@ -0,0 +1,24 @@
1
+<title>Fossil SCM Homepage</title>
2
+
3
+This is a preliminary homepage for a new software configuration
4
+management system cal2,3p1ECc;historical source codeincluded in a fossil-scm.hwaci.cominetd</a>file format is trival requires in] as "anonymous [./login The integration of <a href="http://wiki.org/wiki.cgi?WhatIsWiki">Wiki</a>
5
+and the ability to safely support anonymous check-in are features
6
+<h2</a>.
7
+Fossil attempts to beh1il - A Software Configuration Management System</h1>
8
+
9
+<p>
10
+This is a preliminary homepage for a new software configuration
11
+management sys<h1>Fossil - A Sofi, along thwiki">self-hosting
12
+ fossil wiki</a>, capable of hosting static pages and communitOthk,2:
13
+(v@Sli>There is a
14
+html
15
+or bothhtmlhe massesTheing and wiki, along thwiki">self-hosting
16
+ fossil wiki</a>, capable of hosting static pages and communitOthk,2:
17
+(v@Sli>Therh2 is a
18
+htmlh2re is a
19
+htmlhtmlhtmlhtmlhtmlguration Management System<h1>htmlhtml">Principalation Management System<<h1>htmlhtml<h1>Fossil - A Software Configuration Management System</h1>
20
+
21
+<p>
22
+This is a preliminary homepage for a new software configuration
23
+management system cal2,3p1ECc;historical source codeincluded in a
24
+ Confi
--- a/www/index.wiki
+++ b/www/index.wiki
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/www/index.wiki
+++ b/www/index.wiki
@@ -0,0 +1,24 @@
1 <title>Fossil SCM Homepage</title>
2
3 This is a preliminary homepage for a new software configuration
4 management system cal2,3p1ECc;historical source codeincluded in a fossil-scm.hwaci.cominetd</a>file format is trival requires in] as "anonymous [./login The integration of <a href="http://wiki.org/wiki.cgi?WhatIsWiki">Wiki</a>
5 and the ability to safely support anonymous check-in are features
6 <h2</a>.
7 Fossil attempts to beh1il - A Software Configuration Management System</h1>
8
9 <p>
10 This is a preliminary homepage for a new software configuration
11 management sys<h1>Fossil - A Sofi, along thwiki">self-hosting
12 fossil wiki</a>, capable of hosting static pages and communitOthk,2:
13 (v@Sli>There is a
14 html
15 or bothhtmlhe massesTheing and wiki, along thwiki">self-hosting
16 fossil wiki</a>, capable of hosting static pages and communitOthk,2:
17 (v@Sli>Therh2 is a
18 htmlh2re is a
19 htmlhtmlhtmlhtmlhtmlguration Management System<h1>htmlhtml">Principalation Management System<<h1>htmlhtml<h1>Fossil - A Software Configuration Management System</h1>
20
21 <p>
22 This is a preliminary homepage for a new software configuration
23 management system cal2,3p1ECc;historical source codeincluded in a
24 Confi
--- www/pop.html
+++ www/pop.html
@@ -1,10 +1,12 @@
11
<html>
22
<head>
33
<title>Fossil - Principles of Operation</title>
44
</head>
55
<body bgcolor="white">
6
+<p>[ <a href="index.html">Index</a> ]</p>
7
+<hr>
68
<h1>Principles Of Operation</h1>
79
810
<p>
911
This page attempts to define the foundational principals upon
1012
which Fossil is built.
1113
--- www/pop.html
+++ www/pop.html
@@ -1,10 +1,12 @@
1 <html>
2 <head>
3 <title>Fossil - Principles of Operation</title>
4 </head>
5 <body bgcolor="white">
 
 
6 <h1>Principles Of Operation</h1>
7
8 <p>
9 This page attempts to define the foundational principals upon
10 which Fossil is built.
11
--- www/pop.html
+++ www/pop.html
@@ -1,10 +1,12 @@
1 <html>
2 <head>
3 <title>Fossil - Principles of Operation</title>
4 </head>
5 <body bgcolor="white">
6 <p>[ <a href="index.html">Index</a> ]</p>
7 <hr>
8 <h1>Principles Of Operation</h1>
9
10 <p>
11 This page attempts to define the foundational principals upon
12 which Fossil is built.
13
--- www/quickstart.html
+++ www/quickstart.html
@@ -1,8 +1,10 @@
11
<html>
22
<title>Fossil - Quick Start</title>
33
<body bgcolor="white">
4
+<p>[ <a href="index.html">Index</a> ]</p>
5
+<hr>
46
<h1 align="center">Fossil Quick Start</h1>
57
68
<p>This is a guide to get you started using fossil quickly
79
and painlessly.</p>
810
911
--- www/quickstart.html
+++ www/quickstart.html
@@ -1,8 +1,10 @@
1 <html>
2 <title>Fossil - Quick Start</title>
3 <body bgcolor="white">
 
 
4 <h1 align="center">Fossil Quick Start</h1>
5
6 <p>This is a guide to get you started using fossil quickly
7 and painlessly.</p>
8
9
--- www/quickstart.html
+++ www/quickstart.html
@@ -1,8 +1,10 @@
1 <html>
2 <title>Fossil - Quick Start</title>
3 <body bgcolor="white">
4 <p>[ <a href="index.html">Index</a> ]</p>
5 <hr>
6 <h1 align="center">Fossil Quick Start</h1>
7
8 <p>This is a guide to get you started using fossil quickly
9 and painlessly.</p>
10
11
--- www/selfcheck.html
+++ www/selfcheck.html
@@ -1,10 +1,12 @@
11
<html>
22
<head>
33
<title>Fossil Repository Integrity Self-Checks</title>
44
</head>
55
<body bgcolor="white">
6
+<p>[ <a href="index.html">Index</a> ]</p>
7
+<hr>
68
<h1 align="center">
79
Fossil Repository Integrity Self-Checks
810
</h1>
911
1012
<p>
1113
1214
ADDED www/sync.html
--- www/selfcheck.html
+++ www/selfcheck.html
@@ -1,10 +1,12 @@
1 <html>
2 <head>
3 <title>Fossil Repository Integrity Self-Checks</title>
4 </head>
5 <body bgcolor="white">
 
 
6 <h1 align="center">
7 Fossil Repository Integrity Self-Checks
8 </h1>
9
10 <p>
11
12 DDED www/sync.html
--- www/selfcheck.html
+++ www/selfcheck.html
@@ -1,10 +1,12 @@
1 <html>
2 <head>
3 <title>Fossil Repository Integrity Self-Checks</title>
4 </head>
5 <body bgcolor="white">
6 <p>[ <a href="index.html">Index</a> ]</p>
7 <hr>
8 <h1 align="center">
9 Fossil Repository Integrity Self-Checks
10 </h1>
11
12 <p>
13
14 DDED www/sync.html
+463
--- a/www/sync.html
+++ b/www/sync.html
@@ -0,0 +1,463 @@
1
+<html>
2
+<head>
3
+<title>The Fossil Sync Protocol</title>
4
+</head>
5
+<body bgcolor="white">
6
+<p>[ <a href="index.html">Index</a> ]</p>
7
+<hr>
8
+<h1 align="center">The Fossil Sync Protocol</h1>
9
+
10
+<p>Fossil supports commands <b>push</b>, <b>pull</b>, and <b>sync</b>
11
+for transferring information from one repository to another. The
12
+command is run on the client repository. A URL for the server repository
13
+is specified as part of the command. This document describes what happens
14
+behind the scenes in order to synchronize the information on the two
15
+repositories.</p>
16
+
17
+<h2>1.0 Transport</h2>
18
+
19
+<p>All communication between client and server is via HTTP requests.
20
+The server is listening for incoming HTTP requests. The client
21
+issues one or more HTTP requests and receives replies for each
22
+request.</p>
23
+
24
+<p>The server might be running as an independent server
25
+using the <b>server</b> command, or it might be launched from
26
+inetd or xinetd using the <b>http</b> command. Or the server might
27
+be launched from CGI. The details of how the server is configured
28
+to "listen" for incoming HTTP requests is immaterial. The important
29
+point is that the server is listening for requests and the client
30
+is the issuer of the requests.</p>
31
+
32
+<p>A single push, pull, or sync might involve multiple HTTP requests.
33
+The client maintains state between all requests. But on the server
34
+side, each request is independent. The server does not preserve
35
+any information about the client from one request to the next.</p>
36
+
37
+<h3>1.1 Server Identification</h3>
38
+
39
+<p>The server is identified by a URL argument that accompanies the
40
+push, pull, or sync command on the client. (As a convenience to
41
+users, the URL can be omitted on the client command and the same URL
42
+from the most recent push, pull, or sync will be reused. This saves
43
+typing in the common case where the client does multiple syncs to
44
+the same server.)</p>
45
+
46
+<p>The client modifies the URL by appending the method name "<b>/xfer</b>"
47
+to the end. For example, if the URL specified on the client command
48
+line is</p>
49
+
50
+<blockquote>
51
+http://fossil-scm.hwaci.com/fossil
52
+</blockquote>
53
+
54
+<p>Then the URL that is really used to do the synchronization will
55
+be:</p>
56
+
57
+<blockquote>
58
+http://fossil-scm.hwaci.com/fossil/xfer
59
+</blockquote>
60
+
61
+<h3>1.2 HTTP Request Format</h3>
62
+
63
+<p>The client always sends a POST request to the server. The
64
+general format of the POST request is as follows:</p>
65
+
66
+<blockquote><pre>
67
+POST /fossil/xfer HTTP/1.0
68
+Host: fossil-scm.hwaci.com:80
69
+Content-Type: application/x-fossil
70
+Content-Length: 4216
71
+
72
+<i>content...</i>
73
+</pre></blockquote>
74
+
75
+<p>In the example above, the pathname given after the POST keyword
76
+on the first line is a copy of the URL pathname. The Host: parameter
77
+is also taken from the URL. The content type is always either
78
+"application/x-fossil" or "application/x-fossil-debug". The "x-fossil"
79
+content type is the default. The only difference is that "x-fossil"
80
+content is compressed using zlib whereas "x-fossil-debug" is sent
81
+uncompressed.</p>
82
+
83
+<p>A typical reply from the server might look something like this:</p>
84
+
85
+<blockquote><pre>
86
+HTTP/1.0 200 OK
87
+Date: Mon, 10 Sep 2007 12:21:01 GMT
88
+Connection: close
89
+Cache-control: private
90
+Content-Type: application/x-fossil; charset=US-ASCII
91
+Content-Length: 265
92
+
93
+<i>content...</i>
94
+</pre></blockquote>
95
+
96
+<p>The content type of the reply is always the same as the content type
97
+of the request.</p>
98
+
99
+<h2>2.0 Fossil Synchronization Content</h2>
100
+
101
+<p>A synchronization request between a client and server consists of
102
+one or more HTTP requests as described in the previous section. This
103
+section details the "x-fossil" content type.</p>
104
+
105
+<h3>2.1 Line-oriented Format</h3>
106
+
107
+<p>The x-fossil content type consists of zero or more "cards". Cards
108
+are separate by the newline character ("\n"). Leading and trailing
109
+whitespace on a card is ignored. Blank cards are ignored.</p>
110
+
111
+<p>Each card is divided into zero or more space separated tokens.
112
+The first token on each card is the operator. Subsequent tokens
113
+are arguments. The set of operators understood by servers is slightly
114
+different from the operators understood by clients, though the two
115
+are very similar.</p>
116
+
117
+<h3>2.2 Login Cards</h3>
118
+
119
+<p>Every message from client to server begins with one or more login
120
+cards. Each login card has the following format:</p>
121
+
122
+<blockquote>
123
+<b>login</b> <i>userid nonce signature</i>
124
+</blockquote>
125
+
126
+<p>The userid is the name of the user that is requesting service
127
+froma random oerminates the login card. The sicatenation of the nonce and the users password.</p>
128
+
129
+<p>For each login card, thehas never before been used. It then checks the
130
+ssage. It then checks the signasignature matches. If everything
131
+checks out, then the client is granted all privileges of the
132
+specified user.</p>
133
+
134
+<p>Privileges are cumulative. There can be multiple successful
135
+login cards. The session privileges are the bit-wise OR of the
136
+privileges of each individual login.</p>
137
+
138
+<h3>2.3 File Cards</h3>
139
+
140
+<p>Repository content records or files are transferred using
141
+a "file" card. File cards come in two different formats depending
142
+on whether the file is sent directly or as a delta from some
143
+other file.</p>
144
+
145
+<blockquote>
146
+<b>file</b> <i>uuid size</i> <b>\n</b> <i>content</i><br>
147
+<b>file</b> <i>uuid delta-uuid size</i> <b>\n</b> <i>content</i>
148
+</blockquote>
149
+
150
+<p>File cards are different from all other cards in that they
151
+followed by in-line "payload" data. The content of the file
152
+or the file delta consists of the first <i>size</i> bytes of the
153
+x-fossil content that immediately follow the newline that
154
+terminates the file card. No other cards have this characteristic.
155
+</p>
156
+
157
+<p>The first argument of a file card is the UUID of the file that
158
+is being transferred. The UUID is the lower-case hexadecimal
159
+representation of the SHA1 hash of the entire file content.
160
+The last argument of the file card is the number of bytes of
161
+payload that immediately follow the file card. If the file
162
+card has only two arguments, that means the payload is the
163
+complete content of the file. If the file card has three
164
+arguments, then the payload is a delta and second argument is
165
+the UUID of another file that is the source of the delta.</p>
166
+
167
+<p>File cards are sent in both directions: client to server and
168
+server to client. A delta might be sent before the source of
169
+the delta, so both client and server should remember deltas
170
+and be able to apply them when their source arrives.</p>
171
+
172
+<h3>2.4 Push and Pull Cards</h3>
173
+
174
+<p>Among of the first cards in a client-to-server message are
175
+the push and pull cards. The push card tell the server that
176
+the client is pushing content. The pull card tell the server
177
+that the client wants to pull content. In the event of a sync,
178
+both cards are sent. The format is as follows:</p>
179
+
180
+<blockquote>
181
+<b>push</b> <i>servercode projectcode</i><br>
182
+<b>pull</b> <i>servercode projectcode</i>
183
+</blockquote>
184
+
185
+<p>The <i>servercode</i> argument is the repository ID for the
186
+client. The server will only allow the transaction to proceed
187
+if the servercode is different from its own servercode. This
188
+prevents a sync-loop. The <i>projectcode</i> is the identifier
189
+of the software project that the client repository contains.
190
+The projectcode for the client and server must match in order
191
+for the transaction to proceed.</p>
192
+
193
+<p>The server will also send a push card back to the client
194
+during a clone. This is how the client determines what project
195
+code to put in the new repository it is constructing.</p>
196
+
197
+<h3>2.5 Clone Cards</h3>
198
+
199
+<p>A clone card works like a pull card in that it is sent from
200
+client to server in order to tell the server that the client
201
+wants to pull content. But unlike the pull card, the clone
202
+card has no arguments.</p>
203
+
204
+<blockquote>
205
+<b>clone</b>
206
+</blockquote>
207
+
208
+<p>In response to a clone message, the server also sends the client
209
+a push message so that the client can discover the projectcode for
210
+this project.</p>
211
+
212
+<h3>2.6 Igot Cards</h3>
213
+
214
+<p>An igot card can be sent from either client to server or from
215
+server to client in order to indicate that the sender holds a copy
216
+of a particular file. The format is:</p>
217
+
218
+<blockquote>
219
+<b>igot</b> <i>uuid</i>
220
+</blockquote>
221
+
222
+<p>The argument of the igot card is the UUID of the file that
223
+the sender possesses.
224
+The receiver of an igot card will typically check to see if
225
+it also holds the same file and if not it will request the file
226
+using a gimme card in either the reply or in the next message.</p>
227
+
228
+<h3>2.7 Gimme Cards</h3>
229
+
230
+<p>A gimme card is sent from either client to server or from server
231
+to client. The gimme card asks the receiver to send a particular
232
+file back to the sender. The format of a gimme card is this:</p>
233
+
234
+<blockquote>
235
+<b>gimme</b> <i>uuid</i>
236
+</blockquote>
237
+
238
+<p>The argument to the gimme card is the UUID of the file that
239
+the sender wants. The receiver will typically respond to a
240
+gimme card by sending a file card in its reply or in the next
241
+message.</p>
242
+
243
+<h3>2.8 Cookie Cards</h3>
244
+
245
+<p>A cookie card can be used by a server to record a small amount
246
+of state information on a client. The server sends a cookie to the
247
+client. The client sends the same cookie back to the server on
248
+its next request. The cookie card has a single argument which
249
+is its payload.</p>
250
+
251
+<blockquote>
252
+<b>cookie</b> <i>payload</i>
253
+</blockquote>
254
+
255
+<p>The client is not required to return the cookie to the server on
256
+its next request. Or the client might send a cookie from a different
257
+server on the next request. So the server must not depend on the
258
+cookie and the server must structure the cookie payload in such
259
+a way that it can tell if the cookie it sees is its own cookie or
260
+a cookie from another server. (Typically the server will embed
261
+its servercode as part of the cookie.)</p>
262
+
263
+<h3>2.9 Error Cards</h3>
264
+
265
+<p>If the server discovers anything wrong with a request, it generates
266
+an error card in its reply. When the client sees the error card,
267
+it displays an error message to the user and aborts the sync
268
+operation. An error card looks like this:</p>
269
+
270
+<blockquote>
271
+<b>error</b> <i>error-message</i>
272
+</blockquote>
273
+
274
+<p>The error message is English text that is encoded in order to
275
+be a single token.
276
+A space (ASCII 0x20) is represented as "\s" (ASCII 0x5C, 0x73). A
277
+newline (ASCII 0x0a) is "\n" (ASCII 0x6C, x6E). A backslash
278
+(ASCII 0x5C) is represented as two backslashes "\\". Apart from
279
+space and newline, no other whitespace characters nor any
280
+unprintable characters are allowed in
281
+the error message.</p>
282
+
283
+<h3>2.10 Unknown Cards</h3>
284
+
285
+<p>If either the client or the server sees a card that is not
286
+described above, then it generates an error and aborts.</p>
287
+
288
+<h2>3.0 Phantoms And Clusters</h2>
289
+
290
+<p>When a repository knows that a file exists and knows the UUID of
291
+that file, but it does not know the file content, then it stores that
292
+file as a "phantom". A repository will typically create a phantom when
293
+it receives an igot card for a file that it does not hold or when it
294
+receives a file card that references a delta source that it does not
295
+hold. When a server is generating its reply or when a client is
296
+generating a new request, it will usually send gimme cards for every
297
+phantom that it holds.</p>
298
+
299
+<p>A cluster is a special file that tells of the existence of other
300
+files. Any file in the repository that follows the syntactic rules
301
+of a cluster is considered a cluster.</p>
302
+
303
+<p>A cluster is a line oriented file. Each line of a cluster
304
+is a card. The cards are separated by the newline ("\n") character.
305
+Each card consists of a single character card type, a space, and a
306
+single argument. No extra whitespace and no trailing or leading
307
+whitespace is allowed. All cards in the cluster must occur in
308
+strict lexicographical order.</p>
309
+
310
+<p>A cluster consists of one or more "M" cards followed by a single
311
+"Z" card. Each M card holds an argument which is a UUID for a file
312
+in the repository. The Z card has a single argument which is the
313
+lower-case hexadecimal representation of the MD5 checksum of all
314
+preceding M cards up to and included the newline character that
315
+occurred just before the Z that starts the Z card.</p>
316
+
317
+<p>Any file that does not match the specifications of a cluster
318
+exactly is not a cluster. There must be no extra whitespace in
319
+the file. There must be one or more M cards. There must be a
320
+single Z card with a correct MD5 checksum. And all cards must
321
+be in strict lexicographical order.</p>
322
+
323
+<h3>3.1 The Unclustered Table</h3>
324
+
325
+<p>Every repository maintains a table named "<b>unclustered</b>"
326
+which records the identity of every file and phantom it holds that is not
327
+mentioned in a cluster. The entries in the unclustered table can
328
+be thought of as leaves on a tree of files. Some of the unclustered
329
+files will be clusters. Those clusters may contain other clusters,
330
+which might contain still more clusters, and so forth. Beginning
331
+with the files in the unclustered table, one can follow the chain
332
+of clusters to find every file in the repository.</p>
333
+
334
+<h2>4.0 Synchronization Strategies</h2>
335
+
336
+<h3>4.1 Pull</h3>
337
+
338
+<p>A typical pull operation proceeds as shown below. Details
339
+of the actual implementation may very slightly but the gist of
340
+a pull is captured in the following steps:</p>
341
+
342
+<ol>
343
+<li>The client sends login and pull cards.
344
+<li>The client sends a cookie card if it has previously received a cookie.
345
+<li>The client sends gimme cards for every phantom that it holds.
346
+<hr>
347
+<li>The server checks the login password and rejects the session if
348
+the user does not have permission to pull.
349
+<li>If the number entries in the unclustered table on the server is
350
+greater than 100, then the server constructs a new cluster file to
351
+cover all those unclustered entries.
352
+<li>The server sends file cards for every gimme card it received
353
+from the client.
354
+<li>The server sends ihave cards for every file in its unclustered
355
+table that is not a phantom.
356
+<hr>
357
+<li>The client adds the content of file cards to its repository.
358
+<li>The client creates a phantom for every ihave card in the server reply
359
+that mentions a file that the client does not possess.
360
+<li>The client creates a phantom for the delta source of file cards when
361
+the delta source is a file that the client does not possess.
362
+</ol>
363
+
364
+<p>These ten steps represent a single HTTP round-trip request.
365
+The first three steps are the processing that occurs on the client
366
+to generate the request. The middle four steps are processing
367
+that occurs on the server to interpret the request and generate a
368
+reply. And the last three steps are the processing that the
369
+client does to interpret the reply.</p>
370
+
371
+<p>During a pull, the client will keep sending HTTP requests
372
+until it holds all files that exist on the server.</p>
373
+
374
+<p>Note that the server tries
375
+to limit the size of its reply message to something reasonable
376
+(usually about 1MB) so that it might stop sending file cards as
377
+described in step (6) if the reply becomes too large.</p>
378
+
379
+<p>Step (5) is the only way in which new clusters can be created.
380
+By only creating clusters on the server, we hope to minimize the
381
+amount of overlap between clusters in the common configuration where
382
+there is a single server and many clients. The same synchronization
383
+protocol will continue to work even if there are multiple servers
384
+or if servers and clients sometimes change roles. The only negative
385
+effects of these unusual arrangements is that more than the minimum
386
+number of clusters might be generated.</p>
387
+
388
+<h3>4.2 Push</h3>
389
+
390
+<p>A typical push operation proceeds roughly as shown below. As
391
+with a pull, the actual implementation may vary slightly.</p>
392
+
393
+<ol>
394
+<li>The client sends login and push cards.
395
+<li>The client sends file cards for any files that it holds that have
396
+never before been pushed - files that come from local check-ins.
397
+<li>If this is the second or later cycle in a push, then the
398
+client sends file cards for any gimme cards that the server sent
399
+in the previous cycle.
400
+<li>The client sends igot cards for every file in its unclustered table
401
+that is not a phantom.
402
+<hr>
403
+<li>The server checks the login and push cards and issues an error if
404
+anything is amiss.
405
+<li>The server accepts file cards from the client and adds those files
406
+to its repository.
407
+<li>The server creates phantoms for igot cards that mention files it
408
+does not possess or for file cards that mention delta source files that
409
+it does not possess.
410
+<li>The server issues gimme cards for all phantoms.
411
+<hr>
412
+<li>The client remembers the gimme cards from the server so that it
413
+can generate file cards in reply on the next cycle.
414
+</ol>
415
+
416
+<p>As with a pull, the steps of a push operation repeat until the
417
+server knows all files that exist on the client. Also, as with
418
+pull, the client attempts to keep the size of the request from
419
+growing too large by suppressing file cards once the
420
+size of the request reaches 1MB.</p>
421
+
422
+<h3>4.3 Sync</h3>
423
+
424
+<p>A sync is just a pull and a push that happen at the same time.
425
+The first three steps of a pull are combined with the first five steps
426
+of a push. Steps (4) through (7) of a pull are combined with steps
427
+(5) through (8) of a push. And steps (8) through (10) of a pull
428
+are combined with step (9) of a push.</p>
429
+
430
+<h2>5.0 Summary</h2>
431
+
432
+<p>Here are the key points of the synchronization protocol:</p>
433
+
434
+<ol>
435
+<li>The client sends one or more PUSH HTTP requests to the server.
436
+ The request and reply content type is "application/x-fossil".
437
+<li>HTTP request content is compressed using zlib.
438
+<li>The content of request and reply consists of cards with one
439
+ card per line.
440
+<li>Card formats are:
441
+ <ul>
442
+ <li> <b>login</b> <i>userid nonce signature</i>
443
+ <li> <b>push</b> <i>servercode projectcode</i>
444
+ <li> <b>pull</b> <i>servercode projectcode</i>
445
+ <li> <b>clone</b>
446
+ <li> <b>file</b> <i>uuid size</i> <b>\n</b> <i>content</i>
447
+ <li> <b>file</b> <i>uuid delta-uuid size</i> <b>\n</b> <i>content</i>
448
+ <li> <b>igot</b> <i>uuid</i>
449
+ <li> <b>gimme</b> <i>uuid</i>
450
+ <li> <b>cookie</b> <i>cookie-text</i>
451
+ <li> <b>error</b> <i>error-message</i>
452
+ </ul>
453
+<li>Phantoms are files that a repository knows exist but does not possess.
454
+<li>Clusters are files that contain the UUIDs of other files.
455
+<li>Clusters are created automatically on the server during a pull.
456
+<li>Repositories keep track of all files that are not named in any
457
+cluster and send igot messages for those files.
458
+<li>Repositories keep track of all the phantoms they hold and send
459
+gimme messages for those files.
460
+</ol>
461
+
462
+</body>
463
+</html>
--- a/www/sync.html
+++ b/www/sync.html
@@ -0,0 +1,463 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/www/sync.html
+++ b/www/sync.html
@@ -0,0 +1,463 @@
1 <html>
2 <head>
3 <title>The Fossil Sync Protocol</title>
4 </head>
5 <body bgcolor="white">
6 <p>[ <a href="index.html">Index</a> ]</p>
7 <hr>
8 <h1 align="center">The Fossil Sync Protocol</h1>
9
10 <p>Fossil supports commands <b>push</b>, <b>pull</b>, and <b>sync</b>
11 for transferring information from one repository to another. The
12 command is run on the client repository. A URL for the server repository
13 is specified as part of the command. This document describes what happens
14 behind the scenes in order to synchronize the information on the two
15 repositories.</p>
16
17 <h2>1.0 Transport</h2>
18
19 <p>All communication between client and server is via HTTP requests.
20 The server is listening for incoming HTTP requests. The client
21 issues one or more HTTP requests and receives replies for each
22 request.</p>
23
24 <p>The server might be running as an independent server
25 using the <b>server</b> command, or it might be launched from
26 inetd or xinetd using the <b>http</b> command. Or the server might
27 be launched from CGI. The details of how the server is configured
28 to "listen" for incoming HTTP requests is immaterial. The important
29 point is that the server is listening for requests and the client
30 is the issuer of the requests.</p>
31
32 <p>A single push, pull, or sync might involve multiple HTTP requests.
33 The client maintains state between all requests. But on the server
34 side, each request is independent. The server does not preserve
35 any information about the client from one request to the next.</p>
36
37 <h3>1.1 Server Identification</h3>
38
39 <p>The server is identified by a URL argument that accompanies the
40 push, pull, or sync command on the client. (As a convenience to
41 users, the URL can be omitted on the client command and the same URL
42 from the most recent push, pull, or sync will be reused. This saves
43 typing in the common case where the client does multiple syncs to
44 the same server.)</p>
45
46 <p>The client modifies the URL by appending the method name "<b>/xfer</b>"
47 to the end. For example, if the URL specified on the client command
48 line is</p>
49
50 <blockquote>
51 http://fossil-scm.hwaci.com/fossil
52 </blockquote>
53
54 <p>Then the URL that is really used to do the synchronization will
55 be:</p>
56
57 <blockquote>
58 http://fossil-scm.hwaci.com/fossil/xfer
59 </blockquote>
60
61 <h3>1.2 HTTP Request Format</h3>
62
63 <p>The client always sends a POST request to the server. The
64 general format of the POST request is as follows:</p>
65
66 <blockquote><pre>
67 POST /fossil/xfer HTTP/1.0
68 Host: fossil-scm.hwaci.com:80
69 Content-Type: application/x-fossil
70 Content-Length: 4216
71
72 <i>content...</i>
73 </pre></blockquote>
74
75 <p>In the example above, the pathname given after the POST keyword
76 on the first line is a copy of the URL pathname. The Host: parameter
77 is also taken from the URL. The content type is always either
78 "application/x-fossil" or "application/x-fossil-debug". The "x-fossil"
79 content type is the default. The only difference is that "x-fossil"
80 content is compressed using zlib whereas "x-fossil-debug" is sent
81 uncompressed.</p>
82
83 <p>A typical reply from the server might look something like this:</p>
84
85 <blockquote><pre>
86 HTTP/1.0 200 OK
87 Date: Mon, 10 Sep 2007 12:21:01 GMT
88 Connection: close
89 Cache-control: private
90 Content-Type: application/x-fossil; charset=US-ASCII
91 Content-Length: 265
92
93 <i>content...</i>
94 </pre></blockquote>
95
96 <p>The content type of the reply is always the same as the content type
97 of the request.</p>
98
99 <h2>2.0 Fossil Synchronization Content</h2>
100
101 <p>A synchronization request between a client and server consists of
102 one or more HTTP requests as described in the previous section. This
103 section details the "x-fossil" content type.</p>
104
105 <h3>2.1 Line-oriented Format</h3>
106
107 <p>The x-fossil content type consists of zero or more "cards". Cards
108 are separate by the newline character ("\n"). Leading and trailing
109 whitespace on a card is ignored. Blank cards are ignored.</p>
110
111 <p>Each card is divided into zero or more space separated tokens.
112 The first token on each card is the operator. Subsequent tokens
113 are arguments. The set of operators understood by servers is slightly
114 different from the operators understood by clients, though the two
115 are very similar.</p>
116
117 <h3>2.2 Login Cards</h3>
118
119 <p>Every message from client to server begins with one or more login
120 cards. Each login card has the following format:</p>
121
122 <blockquote>
123 <b>login</b> <i>userid nonce signature</i>
124 </blockquote>
125
126 <p>The userid is the name of the user that is requesting service
127 froma random oerminates the login card. The sicatenation of the nonce and the users password.</p>
128
129 <p>For each login card, thehas never before been used. It then checks the
130 ssage. It then checks the signasignature matches. If everything
131 checks out, then the client is granted all privileges of the
132 specified user.</p>
133
134 <p>Privileges are cumulative. There can be multiple successful
135 login cards. The session privileges are the bit-wise OR of the
136 privileges of each individual login.</p>
137
138 <h3>2.3 File Cards</h3>
139
140 <p>Repository content records or files are transferred using
141 a "file" card. File cards come in two different formats depending
142 on whether the file is sent directly or as a delta from some
143 other file.</p>
144
145 <blockquote>
146 <b>file</b> <i>uuid size</i> <b>\n</b> <i>content</i><br>
147 <b>file</b> <i>uuid delta-uuid size</i> <b>\n</b> <i>content</i>
148 </blockquote>
149
150 <p>File cards are different from all other cards in that they
151 followed by in-line "payload" data. The content of the file
152 or the file delta consists of the first <i>size</i> bytes of the
153 x-fossil content that immediately follow the newline that
154 terminates the file card. No other cards have this characteristic.
155 </p>
156
157 <p>The first argument of a file card is the UUID of the file that
158 is being transferred. The UUID is the lower-case hexadecimal
159 representation of the SHA1 hash of the entire file content.
160 The last argument of the file card is the number of bytes of
161 payload that immediately follow the file card. If the file
162 card has only two arguments, that means the payload is the
163 complete content of the file. If the file card has three
164 arguments, then the payload is a delta and second argument is
165 the UUID of another file that is the source of the delta.</p>
166
167 <p>File cards are sent in both directions: client to server and
168 server to client. A delta might be sent before the source of
169 the delta, so both client and server should remember deltas
170 and be able to apply them when their source arrives.</p>
171
172 <h3>2.4 Push and Pull Cards</h3>
173
174 <p>Among of the first cards in a client-to-server message are
175 the push and pull cards. The push card tell the server that
176 the client is pushing content. The pull card tell the server
177 that the client wants to pull content. In the event of a sync,
178 both cards are sent. The format is as follows:</p>
179
180 <blockquote>
181 <b>push</b> <i>servercode projectcode</i><br>
182 <b>pull</b> <i>servercode projectcode</i>
183 </blockquote>
184
185 <p>The <i>servercode</i> argument is the repository ID for the
186 client. The server will only allow the transaction to proceed
187 if the servercode is different from its own servercode. This
188 prevents a sync-loop. The <i>projectcode</i> is the identifier
189 of the software project that the client repository contains.
190 The projectcode for the client and server must match in order
191 for the transaction to proceed.</p>
192
193 <p>The server will also send a push card back to the client
194 during a clone. This is how the client determines what project
195 code to put in the new repository it is constructing.</p>
196
197 <h3>2.5 Clone Cards</h3>
198
199 <p>A clone card works like a pull card in that it is sent from
200 client to server in order to tell the server that the client
201 wants to pull content. But unlike the pull card, the clone
202 card has no arguments.</p>
203
204 <blockquote>
205 <b>clone</b>
206 </blockquote>
207
208 <p>In response to a clone message, the server also sends the client
209 a push message so that the client can discover the projectcode for
210 this project.</p>
211
212 <h3>2.6 Igot Cards</h3>
213
214 <p>An igot card can be sent from either client to server or from
215 server to client in order to indicate that the sender holds a copy
216 of a particular file. The format is:</p>
217
218 <blockquote>
219 <b>igot</b> <i>uuid</i>
220 </blockquote>
221
222 <p>The argument of the igot card is the UUID of the file that
223 the sender possesses.
224 The receiver of an igot card will typically check to see if
225 it also holds the same file and if not it will request the file
226 using a gimme card in either the reply or in the next message.</p>
227
228 <h3>2.7 Gimme Cards</h3>
229
230 <p>A gimme card is sent from either client to server or from server
231 to client. The gimme card asks the receiver to send a particular
232 file back to the sender. The format of a gimme card is this:</p>
233
234 <blockquote>
235 <b>gimme</b> <i>uuid</i>
236 </blockquote>
237
238 <p>The argument to the gimme card is the UUID of the file that
239 the sender wants. The receiver will typically respond to a
240 gimme card by sending a file card in its reply or in the next
241 message.</p>
242
243 <h3>2.8 Cookie Cards</h3>
244
245 <p>A cookie card can be used by a server to record a small amount
246 of state information on a client. The server sends a cookie to the
247 client. The client sends the same cookie back to the server on
248 its next request. The cookie card has a single argument which
249 is its payload.</p>
250
251 <blockquote>
252 <b>cookie</b> <i>payload</i>
253 </blockquote>
254
255 <p>The client is not required to return the cookie to the server on
256 its next request. Or the client might send a cookie from a different
257 server on the next request. So the server must not depend on the
258 cookie and the server must structure the cookie payload in such
259 a way that it can tell if the cookie it sees is its own cookie or
260 a cookie from another server. (Typically the server will embed
261 its servercode as part of the cookie.)</p>
262
263 <h3>2.9 Error Cards</h3>
264
265 <p>If the server discovers anything wrong with a request, it generates
266 an error card in its reply. When the client sees the error card,
267 it displays an error message to the user and aborts the sync
268 operation. An error card looks like this:</p>
269
270 <blockquote>
271 <b>error</b> <i>error-message</i>
272 </blockquote>
273
274 <p>The error message is English text that is encoded in order to
275 be a single token.
276 A space (ASCII 0x20) is represented as "\s" (ASCII 0x5C, 0x73). A
277 newline (ASCII 0x0a) is "\n" (ASCII 0x6C, x6E). A backslash
278 (ASCII 0x5C) is represented as two backslashes "\\". Apart from
279 space and newline, no other whitespace characters nor any
280 unprintable characters are allowed in
281 the error message.</p>
282
283 <h3>2.10 Unknown Cards</h3>
284
285 <p>If either the client or the server sees a card that is not
286 described above, then it generates an error and aborts.</p>
287
288 <h2>3.0 Phantoms And Clusters</h2>
289
290 <p>When a repository knows that a file exists and knows the UUID of
291 that file, but it does not know the file content, then it stores that
292 file as a "phantom". A repository will typically create a phantom when
293 it receives an igot card for a file that it does not hold or when it
294 receives a file card that references a delta source that it does not
295 hold. When a server is generating its reply or when a client is
296 generating a new request, it will usually send gimme cards for every
297 phantom that it holds.</p>
298
299 <p>A cluster is a special file that tells of the existence of other
300 files. Any file in the repository that follows the syntactic rules
301 of a cluster is considered a cluster.</p>
302
303 <p>A cluster is a line oriented file. Each line of a cluster
304 is a card. The cards are separated by the newline ("\n") character.
305 Each card consists of a single character card type, a space, and a
306 single argument. No extra whitespace and no trailing or leading
307 whitespace is allowed. All cards in the cluster must occur in
308 strict lexicographical order.</p>
309
310 <p>A cluster consists of one or more "M" cards followed by a single
311 "Z" card. Each M card holds an argument which is a UUID for a file
312 in the repository. The Z card has a single argument which is the
313 lower-case hexadecimal representation of the MD5 checksum of all
314 preceding M cards up to and included the newline character that
315 occurred just before the Z that starts the Z card.</p>
316
317 <p>Any file that does not match the specifications of a cluster
318 exactly is not a cluster. There must be no extra whitespace in
319 the file. There must be one or more M cards. There must be a
320 single Z card with a correct MD5 checksum. And all cards must
321 be in strict lexicographical order.</p>
322
323 <h3>3.1 The Unclustered Table</h3>
324
325 <p>Every repository maintains a table named "<b>unclustered</b>"
326 which records the identity of every file and phantom it holds that is not
327 mentioned in a cluster. The entries in the unclustered table can
328 be thought of as leaves on a tree of files. Some of the unclustered
329 files will be clusters. Those clusters may contain other clusters,
330 which might contain still more clusters, and so forth. Beginning
331 with the files in the unclustered table, one can follow the chain
332 of clusters to find every file in the repository.</p>
333
334 <h2>4.0 Synchronization Strategies</h2>
335
336 <h3>4.1 Pull</h3>
337
338 <p>A typical pull operation proceeds as shown below. Details
339 of the actual implementation may very slightly but the gist of
340 a pull is captured in the following steps:</p>
341
342 <ol>
343 <li>The client sends login and pull cards.
344 <li>The client sends a cookie card if it has previously received a cookie.
345 <li>The client sends gimme cards for every phantom that it holds.
346 <hr>
347 <li>The server checks the login password and rejects the session if
348 the user does not have permission to pull.
349 <li>If the number entries in the unclustered table on the server is
350 greater than 100, then the server constructs a new cluster file to
351 cover all those unclustered entries.
352 <li>The server sends file cards for every gimme card it received
353 from the client.
354 <li>The server sends ihave cards for every file in its unclustered
355 table that is not a phantom.
356 <hr>
357 <li>The client adds the content of file cards to its repository.
358 <li>The client creates a phantom for every ihave card in the server reply
359 that mentions a file that the client does not possess.
360 <li>The client creates a phantom for the delta source of file cards when
361 the delta source is a file that the client does not possess.
362 </ol>
363
364 <p>These ten steps represent a single HTTP round-trip request.
365 The first three steps are the processing that occurs on the client
366 to generate the request. The middle four steps are processing
367 that occurs on the server to interpret the request and generate a
368 reply. And the last three steps are the processing that the
369 client does to interpret the reply.</p>
370
371 <p>During a pull, the client will keep sending HTTP requests
372 until it holds all files that exist on the server.</p>
373
374 <p>Note that the server tries
375 to limit the size of its reply message to something reasonable
376 (usually about 1MB) so that it might stop sending file cards as
377 described in step (6) if the reply becomes too large.</p>
378
379 <p>Step (5) is the only way in which new clusters can be created.
380 By only creating clusters on the server, we hope to minimize the
381 amount of overlap between clusters in the common configuration where
382 there is a single server and many clients. The same synchronization
383 protocol will continue to work even if there are multiple servers
384 or if servers and clients sometimes change roles. The only negative
385 effects of these unusual arrangements is that more than the minimum
386 number of clusters might be generated.</p>
387
388 <h3>4.2 Push</h3>
389
390 <p>A typical push operation proceeds roughly as shown below. As
391 with a pull, the actual implementation may vary slightly.</p>
392
393 <ol>
394 <li>The client sends login and push cards.
395 <li>The client sends file cards for any files that it holds that have
396 never before been pushed - files that come from local check-ins.
397 <li>If this is the second or later cycle in a push, then the
398 client sends file cards for any gimme cards that the server sent
399 in the previous cycle.
400 <li>The client sends igot cards for every file in its unclustered table
401 that is not a phantom.
402 <hr>
403 <li>The server checks the login and push cards and issues an error if
404 anything is amiss.
405 <li>The server accepts file cards from the client and adds those files
406 to its repository.
407 <li>The server creates phantoms for igot cards that mention files it
408 does not possess or for file cards that mention delta source files that
409 it does not possess.
410 <li>The server issues gimme cards for all phantoms.
411 <hr>
412 <li>The client remembers the gimme cards from the server so that it
413 can generate file cards in reply on the next cycle.
414 </ol>
415
416 <p>As with a pull, the steps of a push operation repeat until the
417 server knows all files that exist on the client. Also, as with
418 pull, the client attempts to keep the size of the request from
419 growing too large by suppressing file cards once the
420 size of the request reaches 1MB.</p>
421
422 <h3>4.3 Sync</h3>
423
424 <p>A sync is just a pull and a push that happen at the same time.
425 The first three steps of a pull are combined with the first five steps
426 of a push. Steps (4) through (7) of a pull are combined with steps
427 (5) through (8) of a push. And steps (8) through (10) of a pull
428 are combined with step (9) of a push.</p>
429
430 <h2>5.0 Summary</h2>
431
432 <p>Here are the key points of the synchronization protocol:</p>
433
434 <ol>
435 <li>The client sends one or more PUSH HTTP requests to the server.
436 The request and reply content type is "application/x-fossil".
437 <li>HTTP request content is compressed using zlib.
438 <li>The content of request and reply consists of cards with one
439 card per line.
440 <li>Card formats are:
441 <ul>
442 <li> <b>login</b> <i>userid nonce signature</i>
443 <li> <b>push</b> <i>servercode projectcode</i>
444 <li> <b>pull</b> <i>servercode projectcode</i>
445 <li> <b>clone</b>
446 <li> <b>file</b> <i>uuid size</i> <b>\n</b> <i>content</i>
447 <li> <b>file</b> <i>uuid delta-uuid size</i> <b>\n</b> <i>content</i>
448 <li> <b>igot</b> <i>uuid</i>
449 <li> <b>gimme</b> <i>uuid</i>
450 <li> <b>cookie</b> <i>cookie-text</i>
451 <li> <b>error</b> <i>error-message</i>
452 </ul>
453 <li>Phantoms are files that a repository knows exist but does not possess.
454 <li>Clusters are files that contain the UUIDs of other files.
455 <li>Clusters are created automatically on the server during a pull.
456 <li>Repositories keep track of all files that are not named in any
457 cluster and send igot messages for those files.
458 <li>Repositories keep track of all the phantoms they hold and send
459 gimme messages for those files.
460 </ol>
461
462 </body>
463 </html>

Keyboard Shortcuts

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