Fossil SCM

Merge the path-refactor changes into trunk. Refactoring is not complete, but it appears to be stable.

drh 2011-03-14 12:42 trunk merge
Commit e5121b4762eea033e6b4ece93cb2cf1cb7bcd3d3
+12 -318
--- src/bisect.c
+++ src/bisect.c
@@ -21,198 +21,23 @@
2121
*/
2222
#include "config.h"
2323
#include "bisect.h"
2424
#include <assert.h>
2525
26
-#if INTERFACE
27
-/* Nodes for the shortest path algorithm.
28
-*/
29
-struct BisectNode {
30
- int rid; /* ID for this node */
31
- int fromIsParent; /* True if pFrom is the parent of rid */
32
- BisectNode *pFrom; /* Node we came from */
33
- union {
34
- BisectNode *pPeer; /* List of nodes of the same generation */
35
- BisectNode *pTo; /* Next on path from beginning to end */
36
- } u;
37
- BisectNode *pAll; /* List of all nodes */
38
-};
39
-#endif
40
-
4126
/*
4227
** Local variables for this module
4328
*/
4429
static struct {
45
- BisectNode *pCurrent; /* Current generation of nodes */
46
- BisectNode *pAll; /* All nodes */
47
- Bag seen; /* Nodes seen before */
4830
int bad; /* The bad version */
4931
int good; /* The good version */
50
- int nStep; /* Number of steps from good to bad */
51
- BisectNode *pStart; /* Earliest node (bad) */
52
- BisectNode *pEnd; /* Most recent (good) */
5332
} bisect;
5433
55
-/*
56
-** Create a new node
57
-*/
58
-static BisectNode *bisect_new_node(int rid, BisectNode *pFrom, int isParent){
59
- BisectNode *p;
60
-
61
- p = fossil_malloc( sizeof(*p) );
62
- p->rid = rid;
63
- p->fromIsParent = isParent;
64
- p->pFrom = pFrom;
65
- p->u.pPeer = bisect.pCurrent;
66
- bisect.pCurrent = p;
67
- p->pAll = bisect.pAll;
68
- bisect.pAll = p;
69
- bisect.pEnd = p;
70
- bag_insert(&bisect.seen, rid);
71
- return p;
72
-}
73
-
74
-/*
75
-** Reset memory used by the shortest path algorithm.
76
-*/
77
-void bisect_reset(void){
78
- BisectNode *p;
79
- while( bisect.pAll ){
80
- p = bisect.pAll;
81
- bisect.pAll = p->pAll;
82
- fossil_free(p);
83
- }
84
- bag_clear(&bisect.seen);
85
- bisect.pCurrent = 0;
86
- bisect.pAll = 0;
87
- bisect.pEnd = 0;
88
- bisect.nStep = 0;
89
-}
90
-
91
-/*
92
-** Compute the shortest path from iFrom to iTo
93
-**
94
-** If directOnly is true, then use only the "primary" links from parent to
95
-** child. In other words, ignore merges.
96
-*/
97
-BisectNode *bisect_shortest_path(int iFrom, int iTo, int directOnly){
98
- Stmt s;
99
- BisectNode *pPrev;
100
- BisectNode *p;
101
-
102
- bisect_reset();
103
- bisect.pStart = bisect_new_node(iFrom, 0, 0);
104
- if( iTo==iFrom ) return bisect.pStart;
105
- if( directOnly ){
106
- db_prepare(&s,
107
- "SELECT cid, 1 FROM plink WHERE pid=:pid AND isprim "
108
- "UNION ALL "
109
- "SELECT pid, 0 FROM plink WHERE cid=:pid AND isprim"
110
- );
111
- }else{
112
- db_prepare(&s,
113
- "SELECT cid, 1 FROM plink WHERE pid=:pid "
114
- "UNION ALL "
115
- "SELECT pid, 0 FROM plink WHERE cid=:pid"
116
- );
117
- }
118
- while( bisect.pCurrent ){
119
- bisect.nStep++;
120
- pPrev = bisect.pCurrent;
121
- bisect.pCurrent = 0;
122
- while( pPrev ){
123
- db_bind_int(&s, ":pid", pPrev->rid);
124
- while( db_step(&s)==SQLITE_ROW ){
125
- int cid = db_column_int(&s, 0);
126
- int isParent = db_column_int(&s, 1);
127
- if( bag_find(&bisect.seen, cid) ) continue;
128
- p = bisect_new_node(cid, pPrev, isParent);
129
- if( cid==iTo ){
130
- db_finalize(&s);
131
- return p;
132
- }
133
- }
134
- db_reset(&s);
135
- pPrev = pPrev->u.pPeer;
136
- }
137
- }
138
- bisect_reset();
139
- return 0;
140
-}
141
-
142
-/*
143
-** Construct the path from bisect.pStart to bisect.pEnd in the u.pTo fields.
144
-*/
145
-BisectNode *bisect_reverse_path(void){
146
- BisectNode *p;
147
- for(p=bisect.pEnd; p && p->pFrom; p = p->pFrom){
148
- p->pFrom->u.pTo = p;
149
- }
150
- bisect.pEnd->u.pTo = 0;
151
- assert( p==bisect.pStart );
152
- return p;
153
-}
154
-
155
-/*
156
-** COMMAND: test-shortest-path
157
-**
158
-** Usage: %fossil test-shortest-path ?--no-merge? VERSION1 VERSION2
159
-**
160
-** Report the shortest path between two checkins. If the --no-merge flag
161
-** is used, follow only direct parent-child paths and omit merge links.
162
-*/
163
-void shortest_path_test_cmd(void){
164
- int iFrom;
165
- int iTo;
166
- BisectNode *p;
167
- int n;
168
- int directOnly;
169
-
170
- db_find_and_open_repository(0,0);
171
- directOnly = find_option("no-merge",0,0)!=0;
172
- if( g.argc!=4 ) usage("VERSION1 VERSION2");
173
- iFrom = name_to_rid(g.argv[2]);
174
- iTo = name_to_rid(g.argv[3]);
175
- p = bisect_shortest_path(iFrom, iTo, directOnly);
176
- if( p==0 ){
177
- fossil_fatal("no path from %s to %s", g.argv[1], g.argv[2]);
178
- }
179
- bisect_reverse_path();
180
- for(n=1, p=bisect.pStart; p; p=p->u.pTo, n++){
181
- char *z;
182
- z = db_text(0,
183
- "SELECT substr(uuid,1,12) || ' ' || datetime(mtime)"
184
- " FROM blob, event"
185
- " WHERE blob.rid=%d AND event.objid=%d AND event.type='ci'",
186
- p->rid, p->rid);
187
- printf("%4d: %s", n, z);
188
- fossil_free(z);
189
- if( p->u.pTo ){
190
- printf(" is a %s of\n", p->u.pTo->fromIsParent ? "parent" : "child");
191
- }else{
192
- printf("\n");
193
- }
194
- }
195
-}
196
-
197
-/*
198
-** WEBPAGE: path
199
-**
200
-** example: /path?from=trunk&to=experimental&nomerge
201
-**
202
-** Show a timeline of all changes along a path between two versions.
203
-*/
204
-void path_page(void){
205
- login_check_credentials();
206
- if( !g.okRead ){ login_needed(); return; }
207
-}
208
-
20934
/*
21035
** Find the shortest path between bad and good.
21136
*/
212
-static BisectNode *bisect_path(void){
213
- BisectNode *p;
37
+void bisect_path(void){
38
+ PathNode *p;
21439
bisect.bad = db_lget_int("bisect-bad", 0);
21540
if( bisect.bad==0 ){
21641
bisect.bad = db_int(0, "SELECT cid FROM plink ORDER BY mtime DESC LIMIT 1");
21742
db_lset_int("bisect-bad", bisect.bad);
21843
}
@@ -219,21 +44,18 @@
21944
bisect.good = db_lget_int("bisect-good", 0);
22045
if( bisect.good==0 ){
22146
bisect.good = db_int(0,"SELECT pid FROM plink ORDER BY mtime LIMIT 1");
22247
db_lset_int("bisect-good", bisect.good);
22348
}
224
- p = bisect_shortest_path(bisect.good, bisect.bad, 0);
49
+ p = path_shortest(bisect.good, bisect.bad, 0);
22550
if( p==0 ){
22651
char *zBad = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", bisect.bad);
22752
char *zGood = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", bisect.good);
22853
fossil_fatal("no path from good ([%S]) to bad ([%S]) or back",
22954
zGood, zBad);
23055
}
231
- return p;
23256
}
233
-
234
-
23557
23658
/*
23759
** COMMAND: bisect
23860
**
23961
** Usage: %fossil bisect SUBCOMMAND ...
@@ -286,19 +108,18 @@
286108
}else{
287109
ridGood = name_to_rid(g.argv[3]);
288110
}
289111
db_lset_int("bisect-good", ridGood);
290112
}else if( memcmp(zCmd, "next", n)==0 ){
291
- BisectNode *p;
292
- int n;
113
+ PathNode *pMid;
293114
bisect_path();
294
- if( bisect.nStep<2 ){
115
+ pMid = path_midpoint();
116
+ if( pMid==0 ){
295117
fossil_fatal("bisect is done - there are no more intermediate versions");
296118
}
297
- for(p=bisect.pEnd, n=0; p && n<bisect.nStep/2; p=p->pFrom, n++){}
298119
g.argv[1] = "update";
299
- g.argv[2] = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", p->rid);
120
+ g.argv[2] = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", pMid->rid);
300121
g.argc = 3;
301122
g.fNoSync = 1;
302123
update_cmd();
303124
}else if( memcmp(zCmd, "reset", n)==0 ){
304125
db_multi_exec(
@@ -306,162 +127,35 @@
306127
" SELECT 'bisect-good', pid FROM plink ORDER BY mtime LIMIT 1;"
307128
"REPLACE INTO vvar(name, value) "
308129
" SELECT 'bisect-bad', cid FROM plink ORDER BY mtime DESC LIMIT 1;"
309130
);
310131
}else if( memcmp(zCmd, "vlist", n)==0 ){
311
- BisectNode *p;
132
+ PathNode *p;
312133
int vid = db_lget_int("checkout", 0);
313134
int n;
314135
Stmt s;
136
+ int nStep;
315137
bisect_path();
316138
db_prepare(&s, "SELECT substr(blob.uuid,1,20) || ' ' || "
317139
" datetime(event.mtime) FROM blob, event"
318140
" WHERE blob.rid=:rid AND event.objid=:rid"
319141
" AND event.type='ci'");
320
- for(p=bisect.pEnd, n=0; p; p=p->pFrom, n++){
142
+ nStep = path_length();
143
+ for(p=path_last(), n=0; p; p=p->pFrom, n++){
321144
const char *z;
322145
db_bind_int(&s, ":rid", p->rid);
323146
if( db_step(&s)==SQLITE_ROW ){
324147
z = db_column_text(&s, 0);
325148
printf("%s", z);
326149
if( p->rid==bisect.good ) printf(" GOOD");
327150
if( p->rid==bisect.bad ) printf(" BAD");
328151
if( p->rid==vid ) printf(" CURRENT");
329
- if( bisect.nStep>1 && n==bisect.nStep/2 ) printf(" NEXT");
152
+ if( nStep>1 && n==nStep/2 ) printf(" NEXT");
330153
printf("\n");
331154
}
332155
db_reset(&s);
333156
}
334157
db_finalize(&s);
335158
}else{
336159
usage("bad|good|next|reset|vlist ...");
337160
}
338161
}
339
-
340
-/*
341
-** A record of a file rename operation.
342
-*/
343
-typedef struct NameChange NameChange;
344
-struct NameChange {
345
- int origName; /* Original name of file */
346
- int curName; /* Current name of the file */
347
- int newName; /* Name of file in next version */
348
- NameChange *pNext; /* List of all name changes */
349
-};
350
-
351
-/*
352
-** Compute all file name changes that occur going from checkin iFrom
353
-** to checkin iTo.
354
-**
355
-** The number of name changes is written into *pnChng. For each name
356
-** change, two integers are allocated for *piChng. The first is the
357
-** filename.fnid for the original name and the second is for new name.
358
-** Space to hold *piChng is obtained from fossil_malloc() and should
359
-** be released by the caller.
360
-**
361
-** This routine really has nothing to do with bisection. It is located
362
-** in this bisect.c module in order to leverage some of the bisect
363
-** infrastructure.
364
-*/
365
-void find_filename_changes(
366
- int iFrom,
367
- int iTo,
368
- int *pnChng,
369
- int **aiChng
370
-){
371
- BisectNode *p; /* For looping over path from iFrom to iTo */
372
- NameChange *pAll = 0; /* List of all name changes seen so far */
373
- NameChange *pChng; /* For looping through the name change list */
374
- int nChng = 0; /* Number of files whose names have changed */
375
- int *aChng; /* Two integers per name change */
376
- int i; /* Loop counter */
377
- Stmt q1; /* Query of name changes */
378
-
379
- *pnChng = 0;
380
- *aiChng = 0;
381
- bisect_reset();
382
- p = bisect_shortest_path(iFrom, iTo, 0);
383
- if( p==0 ) return;
384
- bisect_reverse_path();
385
- db_prepare(&q1,
386
- "SELECT pfnid, fnid FROM mlink WHERE mid=:mid AND pfnid>0"
387
- );
388
- for(p=bisect.pStart; p; p=p->u.pTo){
389
- int fnid, pfnid;
390
- if( !p->fromIsParent && (p->u.pTo==0 || p->u.pTo->fromIsParent) ){
391
- /* Skip nodes where the parent is not on the path */
392
- continue;
393
- }
394
- db_bind_int(&q1, ":mid", p->rid);
395
- while( db_step(&q1)==SQLITE_ROW ){
396
- if( p->fromIsParent ){
397
- fnid = db_column_int(&q1, 1);
398
- pfnid = db_column_int(&q1, 0);
399
- }else{
400
- fnid = db_column_int(&q1, 0);
401
- pfnid = db_column_int(&q1, 1);
402
- }
403
- for(pChng=pAll; pChng; pChng=pChng->pNext){
404
- if( pChng->curName==pfnid ){
405
- pChng->newName = fnid;
406
- break;
407
- }
408
- }
409
- if( pChng==0 ){
410
- pChng = fossil_malloc( sizeof(*pChng) );
411
- pChng->pNext = pAll;
412
- pAll = pChng;
413
- pChng->origName = pfnid;
414
- pChng->curName = pfnid;
415
- pChng->newName = fnid;
416
- nChng++;
417
- }
418
- }
419
- for(pChng=pAll; pChng; pChng=pChng->pNext) pChng->curName = pChng->newName;
420
- db_reset(&q1);
421
- }
422
- db_finalize(&q1);
423
- if( nChng ){
424
- *pnChng = nChng;
425
- aChng = *aiChng = fossil_malloc( nChng*2*sizeof(int) );
426
- for(pChng=pAll, i=0; pChng; pChng=pChng->pNext, i+=2){
427
- aChng[i] = pChng->origName;
428
- aChng[i+1] = pChng->newName;
429
- }
430
- while( pAll ){
431
- pChng = pAll;
432
- pAll = pAll->pNext;
433
- fossil_free(pChng);
434
- }
435
- }
436
-}
437
-
438
-/*
439
-** COMMAND: test-name-changes
440
-**
441
-** Usage: %fossil test-name-changes VERSION1 VERSION2
442
-**
443
-** Show all filename changes that occur going from VERSION1 to VERSION2
444
-*/
445
-void test_name_change(void){
446
- int iFrom;
447
- int iTo;
448
- int *aChng;
449
- int nChng;
450
- int i;
451
-
452
- db_find_and_open_repository(0,0);
453
- if( g.argc!=4 ) usage("VERSION1 VERSION2");
454
- iFrom = name_to_rid(g.argv[2]);
455
- iTo = name_to_rid(g.argv[3]);
456
- find_filename_changes(iFrom, iTo, &nChng, &aChng);
457
- for(i=0; i<nChng; i++){
458
- char *zFrom, *zTo;
459
-
460
- zFrom = db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i*2]);
461
- zTo = db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i*2+1]);
462
- printf("[%s] -> [%s]\n", zFrom, zTo);
463
- fossil_free(zFrom);
464
- fossil_free(zTo);
465
- }
466
- fossil_free(aChng);
467
-}
468162
--- src/bisect.c
+++ src/bisect.c
@@ -21,198 +21,23 @@
21 */
22 #include "config.h"
23 #include "bisect.h"
24 #include <assert.h>
25
26 #if INTERFACE
27 /* Nodes for the shortest path algorithm.
28 */
29 struct BisectNode {
30 int rid; /* ID for this node */
31 int fromIsParent; /* True if pFrom is the parent of rid */
32 BisectNode *pFrom; /* Node we came from */
33 union {
34 BisectNode *pPeer; /* List of nodes of the same generation */
35 BisectNode *pTo; /* Next on path from beginning to end */
36 } u;
37 BisectNode *pAll; /* List of all nodes */
38 };
39 #endif
40
41 /*
42 ** Local variables for this module
43 */
44 static struct {
45 BisectNode *pCurrent; /* Current generation of nodes */
46 BisectNode *pAll; /* All nodes */
47 Bag seen; /* Nodes seen before */
48 int bad; /* The bad version */
49 int good; /* The good version */
50 int nStep; /* Number of steps from good to bad */
51 BisectNode *pStart; /* Earliest node (bad) */
52 BisectNode *pEnd; /* Most recent (good) */
53 } bisect;
54
55 /*
56 ** Create a new node
57 */
58 static BisectNode *bisect_new_node(int rid, BisectNode *pFrom, int isParent){
59 BisectNode *p;
60
61 p = fossil_malloc( sizeof(*p) );
62 p->rid = rid;
63 p->fromIsParent = isParent;
64 p->pFrom = pFrom;
65 p->u.pPeer = bisect.pCurrent;
66 bisect.pCurrent = p;
67 p->pAll = bisect.pAll;
68 bisect.pAll = p;
69 bisect.pEnd = p;
70 bag_insert(&bisect.seen, rid);
71 return p;
72 }
73
74 /*
75 ** Reset memory used by the shortest path algorithm.
76 */
77 void bisect_reset(void){
78 BisectNode *p;
79 while( bisect.pAll ){
80 p = bisect.pAll;
81 bisect.pAll = p->pAll;
82 fossil_free(p);
83 }
84 bag_clear(&bisect.seen);
85 bisect.pCurrent = 0;
86 bisect.pAll = 0;
87 bisect.pEnd = 0;
88 bisect.nStep = 0;
89 }
90
91 /*
92 ** Compute the shortest path from iFrom to iTo
93 **
94 ** If directOnly is true, then use only the "primary" links from parent to
95 ** child. In other words, ignore merges.
96 */
97 BisectNode *bisect_shortest_path(int iFrom, int iTo, int directOnly){
98 Stmt s;
99 BisectNode *pPrev;
100 BisectNode *p;
101
102 bisect_reset();
103 bisect.pStart = bisect_new_node(iFrom, 0, 0);
104 if( iTo==iFrom ) return bisect.pStart;
105 if( directOnly ){
106 db_prepare(&s,
107 "SELECT cid, 1 FROM plink WHERE pid=:pid AND isprim "
108 "UNION ALL "
109 "SELECT pid, 0 FROM plink WHERE cid=:pid AND isprim"
110 );
111 }else{
112 db_prepare(&s,
113 "SELECT cid, 1 FROM plink WHERE pid=:pid "
114 "UNION ALL "
115 "SELECT pid, 0 FROM plink WHERE cid=:pid"
116 );
117 }
118 while( bisect.pCurrent ){
119 bisect.nStep++;
120 pPrev = bisect.pCurrent;
121 bisect.pCurrent = 0;
122 while( pPrev ){
123 db_bind_int(&s, ":pid", pPrev->rid);
124 while( db_step(&s)==SQLITE_ROW ){
125 int cid = db_column_int(&s, 0);
126 int isParent = db_column_int(&s, 1);
127 if( bag_find(&bisect.seen, cid) ) continue;
128 p = bisect_new_node(cid, pPrev, isParent);
129 if( cid==iTo ){
130 db_finalize(&s);
131 return p;
132 }
133 }
134 db_reset(&s);
135 pPrev = pPrev->u.pPeer;
136 }
137 }
138 bisect_reset();
139 return 0;
140 }
141
142 /*
143 ** Construct the path from bisect.pStart to bisect.pEnd in the u.pTo fields.
144 */
145 BisectNode *bisect_reverse_path(void){
146 BisectNode *p;
147 for(p=bisect.pEnd; p && p->pFrom; p = p->pFrom){
148 p->pFrom->u.pTo = p;
149 }
150 bisect.pEnd->u.pTo = 0;
151 assert( p==bisect.pStart );
152 return p;
153 }
154
155 /*
156 ** COMMAND: test-shortest-path
157 **
158 ** Usage: %fossil test-shortest-path ?--no-merge? VERSION1 VERSION2
159 **
160 ** Report the shortest path between two checkins. If the --no-merge flag
161 ** is used, follow only direct parent-child paths and omit merge links.
162 */
163 void shortest_path_test_cmd(void){
164 int iFrom;
165 int iTo;
166 BisectNode *p;
167 int n;
168 int directOnly;
169
170 db_find_and_open_repository(0,0);
171 directOnly = find_option("no-merge",0,0)!=0;
172 if( g.argc!=4 ) usage("VERSION1 VERSION2");
173 iFrom = name_to_rid(g.argv[2]);
174 iTo = name_to_rid(g.argv[3]);
175 p = bisect_shortest_path(iFrom, iTo, directOnly);
176 if( p==0 ){
177 fossil_fatal("no path from %s to %s", g.argv[1], g.argv[2]);
178 }
179 bisect_reverse_path();
180 for(n=1, p=bisect.pStart; p; p=p->u.pTo, n++){
181 char *z;
182 z = db_text(0,
183 "SELECT substr(uuid,1,12) || ' ' || datetime(mtime)"
184 " FROM blob, event"
185 " WHERE blob.rid=%d AND event.objid=%d AND event.type='ci'",
186 p->rid, p->rid);
187 printf("%4d: %s", n, z);
188 fossil_free(z);
189 if( p->u.pTo ){
190 printf(" is a %s of\n", p->u.pTo->fromIsParent ? "parent" : "child");
191 }else{
192 printf("\n");
193 }
194 }
195 }
196
197 /*
198 ** WEBPAGE: path
199 **
200 ** example: /path?from=trunk&to=experimental&nomerge
201 **
202 ** Show a timeline of all changes along a path between two versions.
203 */
204 void path_page(void){
205 login_check_credentials();
206 if( !g.okRead ){ login_needed(); return; }
207 }
208
209 /*
210 ** Find the shortest path between bad and good.
211 */
212 static BisectNode *bisect_path(void){
213 BisectNode *p;
214 bisect.bad = db_lget_int("bisect-bad", 0);
215 if( bisect.bad==0 ){
216 bisect.bad = db_int(0, "SELECT cid FROM plink ORDER BY mtime DESC LIMIT 1");
217 db_lset_int("bisect-bad", bisect.bad);
218 }
@@ -219,21 +44,18 @@
219 bisect.good = db_lget_int("bisect-good", 0);
220 if( bisect.good==0 ){
221 bisect.good = db_int(0,"SELECT pid FROM plink ORDER BY mtime LIMIT 1");
222 db_lset_int("bisect-good", bisect.good);
223 }
224 p = bisect_shortest_path(bisect.good, bisect.bad, 0);
225 if( p==0 ){
226 char *zBad = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", bisect.bad);
227 char *zGood = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", bisect.good);
228 fossil_fatal("no path from good ([%S]) to bad ([%S]) or back",
229 zGood, zBad);
230 }
231 return p;
232 }
233
234
235
236 /*
237 ** COMMAND: bisect
238 **
239 ** Usage: %fossil bisect SUBCOMMAND ...
@@ -286,19 +108,18 @@
286 }else{
287 ridGood = name_to_rid(g.argv[3]);
288 }
289 db_lset_int("bisect-good", ridGood);
290 }else if( memcmp(zCmd, "next", n)==0 ){
291 BisectNode *p;
292 int n;
293 bisect_path();
294 if( bisect.nStep<2 ){
 
295 fossil_fatal("bisect is done - there are no more intermediate versions");
296 }
297 for(p=bisect.pEnd, n=0; p && n<bisect.nStep/2; p=p->pFrom, n++){}
298 g.argv[1] = "update";
299 g.argv[2] = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", p->rid);
300 g.argc = 3;
301 g.fNoSync = 1;
302 update_cmd();
303 }else if( memcmp(zCmd, "reset", n)==0 ){
304 db_multi_exec(
@@ -306,162 +127,35 @@
306 " SELECT 'bisect-good', pid FROM plink ORDER BY mtime LIMIT 1;"
307 "REPLACE INTO vvar(name, value) "
308 " SELECT 'bisect-bad', cid FROM plink ORDER BY mtime DESC LIMIT 1;"
309 );
310 }else if( memcmp(zCmd, "vlist", n)==0 ){
311 BisectNode *p;
312 int vid = db_lget_int("checkout", 0);
313 int n;
314 Stmt s;
 
315 bisect_path();
316 db_prepare(&s, "SELECT substr(blob.uuid,1,20) || ' ' || "
317 " datetime(event.mtime) FROM blob, event"
318 " WHERE blob.rid=:rid AND event.objid=:rid"
319 " AND event.type='ci'");
320 for(p=bisect.pEnd, n=0; p; p=p->pFrom, n++){
 
321 const char *z;
322 db_bind_int(&s, ":rid", p->rid);
323 if( db_step(&s)==SQLITE_ROW ){
324 z = db_column_text(&s, 0);
325 printf("%s", z);
326 if( p->rid==bisect.good ) printf(" GOOD");
327 if( p->rid==bisect.bad ) printf(" BAD");
328 if( p->rid==vid ) printf(" CURRENT");
329 if( bisect.nStep>1 && n==bisect.nStep/2 ) printf(" NEXT");
330 printf("\n");
331 }
332 db_reset(&s);
333 }
334 db_finalize(&s);
335 }else{
336 usage("bad|good|next|reset|vlist ...");
337 }
338 }
339
340 /*
341 ** A record of a file rename operation.
342 */
343 typedef struct NameChange NameChange;
344 struct NameChange {
345 int origName; /* Original name of file */
346 int curName; /* Current name of the file */
347 int newName; /* Name of file in next version */
348 NameChange *pNext; /* List of all name changes */
349 };
350
351 /*
352 ** Compute all file name changes that occur going from checkin iFrom
353 ** to checkin iTo.
354 **
355 ** The number of name changes is written into *pnChng. For each name
356 ** change, two integers are allocated for *piChng. The first is the
357 ** filename.fnid for the original name and the second is for new name.
358 ** Space to hold *piChng is obtained from fossil_malloc() and should
359 ** be released by the caller.
360 **
361 ** This routine really has nothing to do with bisection. It is located
362 ** in this bisect.c module in order to leverage some of the bisect
363 ** infrastructure.
364 */
365 void find_filename_changes(
366 int iFrom,
367 int iTo,
368 int *pnChng,
369 int **aiChng
370 ){
371 BisectNode *p; /* For looping over path from iFrom to iTo */
372 NameChange *pAll = 0; /* List of all name changes seen so far */
373 NameChange *pChng; /* For looping through the name change list */
374 int nChng = 0; /* Number of files whose names have changed */
375 int *aChng; /* Two integers per name change */
376 int i; /* Loop counter */
377 Stmt q1; /* Query of name changes */
378
379 *pnChng = 0;
380 *aiChng = 0;
381 bisect_reset();
382 p = bisect_shortest_path(iFrom, iTo, 0);
383 if( p==0 ) return;
384 bisect_reverse_path();
385 db_prepare(&q1,
386 "SELECT pfnid, fnid FROM mlink WHERE mid=:mid AND pfnid>0"
387 );
388 for(p=bisect.pStart; p; p=p->u.pTo){
389 int fnid, pfnid;
390 if( !p->fromIsParent && (p->u.pTo==0 || p->u.pTo->fromIsParent) ){
391 /* Skip nodes where the parent is not on the path */
392 continue;
393 }
394 db_bind_int(&q1, ":mid", p->rid);
395 while( db_step(&q1)==SQLITE_ROW ){
396 if( p->fromIsParent ){
397 fnid = db_column_int(&q1, 1);
398 pfnid = db_column_int(&q1, 0);
399 }else{
400 fnid = db_column_int(&q1, 0);
401 pfnid = db_column_int(&q1, 1);
402 }
403 for(pChng=pAll; pChng; pChng=pChng->pNext){
404 if( pChng->curName==pfnid ){
405 pChng->newName = fnid;
406 break;
407 }
408 }
409 if( pChng==0 ){
410 pChng = fossil_malloc( sizeof(*pChng) );
411 pChng->pNext = pAll;
412 pAll = pChng;
413 pChng->origName = pfnid;
414 pChng->curName = pfnid;
415 pChng->newName = fnid;
416 nChng++;
417 }
418 }
419 for(pChng=pAll; pChng; pChng=pChng->pNext) pChng->curName = pChng->newName;
420 db_reset(&q1);
421 }
422 db_finalize(&q1);
423 if( nChng ){
424 *pnChng = nChng;
425 aChng = *aiChng = fossil_malloc( nChng*2*sizeof(int) );
426 for(pChng=pAll, i=0; pChng; pChng=pChng->pNext, i+=2){
427 aChng[i] = pChng->origName;
428 aChng[i+1] = pChng->newName;
429 }
430 while( pAll ){
431 pChng = pAll;
432 pAll = pAll->pNext;
433 fossil_free(pChng);
434 }
435 }
436 }
437
438 /*
439 ** COMMAND: test-name-changes
440 **
441 ** Usage: %fossil test-name-changes VERSION1 VERSION2
442 **
443 ** Show all filename changes that occur going from VERSION1 to VERSION2
444 */
445 void test_name_change(void){
446 int iFrom;
447 int iTo;
448 int *aChng;
449 int nChng;
450 int i;
451
452 db_find_and_open_repository(0,0);
453 if( g.argc!=4 ) usage("VERSION1 VERSION2");
454 iFrom = name_to_rid(g.argv[2]);
455 iTo = name_to_rid(g.argv[3]);
456 find_filename_changes(iFrom, iTo, &nChng, &aChng);
457 for(i=0; i<nChng; i++){
458 char *zFrom, *zTo;
459
460 zFrom = db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i*2]);
461 zTo = db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i*2+1]);
462 printf("[%s] -> [%s]\n", zFrom, zTo);
463 fossil_free(zFrom);
464 fossil_free(zTo);
465 }
466 fossil_free(aChng);
467 }
468
--- src/bisect.c
+++ src/bisect.c
@@ -21,198 +21,23 @@
21 */
22 #include "config.h"
23 #include "bisect.h"
24 #include <assert.h>
25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26 /*
27 ** Local variables for this module
28 */
29 static struct {
 
 
 
30 int bad; /* The bad version */
31 int good; /* The good version */
 
 
 
32 } bisect;
33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34 /*
35 ** Find the shortest path between bad and good.
36 */
37 void bisect_path(void){
38 PathNode *p;
39 bisect.bad = db_lget_int("bisect-bad", 0);
40 if( bisect.bad==0 ){
41 bisect.bad = db_int(0, "SELECT cid FROM plink ORDER BY mtime DESC LIMIT 1");
42 db_lset_int("bisect-bad", bisect.bad);
43 }
@@ -219,21 +44,18 @@
44 bisect.good = db_lget_int("bisect-good", 0);
45 if( bisect.good==0 ){
46 bisect.good = db_int(0,"SELECT pid FROM plink ORDER BY mtime LIMIT 1");
47 db_lset_int("bisect-good", bisect.good);
48 }
49 p = path_shortest(bisect.good, bisect.bad, 0);
50 if( p==0 ){
51 char *zBad = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", bisect.bad);
52 char *zGood = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", bisect.good);
53 fossil_fatal("no path from good ([%S]) to bad ([%S]) or back",
54 zGood, zBad);
55 }
 
56 }
 
 
57
58 /*
59 ** COMMAND: bisect
60 **
61 ** Usage: %fossil bisect SUBCOMMAND ...
@@ -286,19 +108,18 @@
108 }else{
109 ridGood = name_to_rid(g.argv[3]);
110 }
111 db_lset_int("bisect-good", ridGood);
112 }else if( memcmp(zCmd, "next", n)==0 ){
113 PathNode *pMid;
 
114 bisect_path();
115 pMid = path_midpoint();
116 if( pMid==0 ){
117 fossil_fatal("bisect is done - there are no more intermediate versions");
118 }
 
119 g.argv[1] = "update";
120 g.argv[2] = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", pMid->rid);
121 g.argc = 3;
122 g.fNoSync = 1;
123 update_cmd();
124 }else if( memcmp(zCmd, "reset", n)==0 ){
125 db_multi_exec(
@@ -306,162 +127,35 @@
127 " SELECT 'bisect-good', pid FROM plink ORDER BY mtime LIMIT 1;"
128 "REPLACE INTO vvar(name, value) "
129 " SELECT 'bisect-bad', cid FROM plink ORDER BY mtime DESC LIMIT 1;"
130 );
131 }else if( memcmp(zCmd, "vlist", n)==0 ){
132 PathNode *p;
133 int vid = db_lget_int("checkout", 0);
134 int n;
135 Stmt s;
136 int nStep;
137 bisect_path();
138 db_prepare(&s, "SELECT substr(blob.uuid,1,20) || ' ' || "
139 " datetime(event.mtime) FROM blob, event"
140 " WHERE blob.rid=:rid AND event.objid=:rid"
141 " AND event.type='ci'");
142 nStep = path_length();
143 for(p=path_last(), n=0; p; p=p->pFrom, n++){
144 const char *z;
145 db_bind_int(&s, ":rid", p->rid);
146 if( db_step(&s)==SQLITE_ROW ){
147 z = db_column_text(&s, 0);
148 printf("%s", z);
149 if( p->rid==bisect.good ) printf(" GOOD");
150 if( p->rid==bisect.bad ) printf(" BAD");
151 if( p->rid==vid ) printf(" CURRENT");
152 if( nStep>1 && n==nStep/2 ) printf(" NEXT");
153 printf("\n");
154 }
155 db_reset(&s);
156 }
157 db_finalize(&s);
158 }else{
159 usage("bad|good|next|reset|vlist ...");
160 }
161 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
--- src/descendants.c
+++ src/descendants.c
@@ -162,12 +162,12 @@
162162
Bag seen;
163163
PQueue queue;
164164
bag_init(&seen);
165165
pqueue_init(&queue);
166166
bag_insert(&seen, rid);
167
- pqueue_insert(&queue, rid, 0.0);
168
- while( (N--)>0 && (rid = pqueue_extract(&queue))!=0 ){
167
+ pqueue_insert(&queue, rid, 0.0, 0);
168
+ while( (N--)>0 && (rid = pqueue_extract(&queue, 0))!=0 ){
169169
Stmt q;
170170
db_multi_exec("INSERT OR IGNORE INTO ok VALUES(%d)", rid);
171171
db_prepare(&q,
172172
"SELECT a.pid, b.mtime FROM plink a LEFT JOIN plink b ON b.cid=a.pid"
173173
" WHERE a.cid=%d", rid
@@ -174,11 +174,11 @@
174174
);
175175
while( db_step(&q)==SQLITE_ROW ){
176176
int pid = db_column_int(&q, 0);
177177
double mtime = db_column_double(&q, 1);
178178
if( bag_insert(&seen, pid) ){
179
- pqueue_insert(&queue, pid, -mtime);
179
+ pqueue_insert(&queue, pid, -mtime, 0);
180180
}
181181
}
182182
db_finalize(&q);
183183
}
184184
bag_clear(&seen);
@@ -193,20 +193,20 @@
193193
Bag seen;
194194
PQueue queue;
195195
bag_init(&seen);
196196
pqueue_init(&queue);
197197
bag_insert(&seen, rid);
198
- pqueue_insert(&queue, rid, 0.0);
199
- while( (N--)>0 && (rid = pqueue_extract(&queue))!=0 ){
198
+ pqueue_insert(&queue, rid, 0.0, 0);
199
+ while( (N--)>0 && (rid = pqueue_extract(&queue, 0))!=0 ){
200200
Stmt q;
201201
db_multi_exec("INSERT OR IGNORE INTO ok VALUES(%d)", rid);
202202
db_prepare(&q,"SELECT cid, mtime FROM plink WHERE pid=%d", rid);
203203
while( db_step(&q)==SQLITE_ROW ){
204204
int pid = db_column_int(&q, 0);
205205
double mtime = db_column_double(&q, 1);
206206
if( bag_insert(&seen, pid) ){
207
- pqueue_insert(&queue, pid, mtime);
207
+ pqueue_insert(&queue, pid, mtime, 0);
208208
}
209209
}
210210
db_finalize(&q);
211211
}
212212
bag_clear(&seen);
213213
--- src/descendants.c
+++ src/descendants.c
@@ -162,12 +162,12 @@
162 Bag seen;
163 PQueue queue;
164 bag_init(&seen);
165 pqueue_init(&queue);
166 bag_insert(&seen, rid);
167 pqueue_insert(&queue, rid, 0.0);
168 while( (N--)>0 && (rid = pqueue_extract(&queue))!=0 ){
169 Stmt q;
170 db_multi_exec("INSERT OR IGNORE INTO ok VALUES(%d)", rid);
171 db_prepare(&q,
172 "SELECT a.pid, b.mtime FROM plink a LEFT JOIN plink b ON b.cid=a.pid"
173 " WHERE a.cid=%d", rid
@@ -174,11 +174,11 @@
174 );
175 while( db_step(&q)==SQLITE_ROW ){
176 int pid = db_column_int(&q, 0);
177 double mtime = db_column_double(&q, 1);
178 if( bag_insert(&seen, pid) ){
179 pqueue_insert(&queue, pid, -mtime);
180 }
181 }
182 db_finalize(&q);
183 }
184 bag_clear(&seen);
@@ -193,20 +193,20 @@
193 Bag seen;
194 PQueue queue;
195 bag_init(&seen);
196 pqueue_init(&queue);
197 bag_insert(&seen, rid);
198 pqueue_insert(&queue, rid, 0.0);
199 while( (N--)>0 && (rid = pqueue_extract(&queue))!=0 ){
200 Stmt q;
201 db_multi_exec("INSERT OR IGNORE INTO ok VALUES(%d)", rid);
202 db_prepare(&q,"SELECT cid, mtime FROM plink WHERE pid=%d", rid);
203 while( db_step(&q)==SQLITE_ROW ){
204 int pid = db_column_int(&q, 0);
205 double mtime = db_column_double(&q, 1);
206 if( bag_insert(&seen, pid) ){
207 pqueue_insert(&queue, pid, mtime);
208 }
209 }
210 db_finalize(&q);
211 }
212 bag_clear(&seen);
213
--- src/descendants.c
+++ src/descendants.c
@@ -162,12 +162,12 @@
162 Bag seen;
163 PQueue queue;
164 bag_init(&seen);
165 pqueue_init(&queue);
166 bag_insert(&seen, rid);
167 pqueue_insert(&queue, rid, 0.0, 0);
168 while( (N--)>0 && (rid = pqueue_extract(&queue, 0))!=0 ){
169 Stmt q;
170 db_multi_exec("INSERT OR IGNORE INTO ok VALUES(%d)", rid);
171 db_prepare(&q,
172 "SELECT a.pid, b.mtime FROM plink a LEFT JOIN plink b ON b.cid=a.pid"
173 " WHERE a.cid=%d", rid
@@ -174,11 +174,11 @@
174 );
175 while( db_step(&q)==SQLITE_ROW ){
176 int pid = db_column_int(&q, 0);
177 double mtime = db_column_double(&q, 1);
178 if( bag_insert(&seen, pid) ){
179 pqueue_insert(&queue, pid, -mtime, 0);
180 }
181 }
182 db_finalize(&q);
183 }
184 bag_clear(&seen);
@@ -193,20 +193,20 @@
193 Bag seen;
194 PQueue queue;
195 bag_init(&seen);
196 pqueue_init(&queue);
197 bag_insert(&seen, rid);
198 pqueue_insert(&queue, rid, 0.0, 0);
199 while( (N--)>0 && (rid = pqueue_extract(&queue, 0))!=0 ){
200 Stmt q;
201 db_multi_exec("INSERT OR IGNORE INTO ok VALUES(%d)", rid);
202 db_prepare(&q,"SELECT cid, mtime FROM plink WHERE pid=%d", rid);
203 while( db_step(&q)==SQLITE_ROW ){
204 int pid = db_column_int(&q, 0);
205 double mtime = db_column_double(&q, 1);
206 if( bag_insert(&seen, pid) ){
207 pqueue_insert(&queue, pid, mtime, 0);
208 }
209 }
210 db_finalize(&q);
211 }
212 bag_clear(&seen);
213
+11 -1
--- src/main.mk
+++ src/main.mk
@@ -54,10 +54,11 @@
5454
$(SRCDIR)/manifest.c \
5555
$(SRCDIR)/md5.c \
5656
$(SRCDIR)/merge.c \
5757
$(SRCDIR)/merge3.c \
5858
$(SRCDIR)/name.c \
59
+ $(SRCDIR)/path.c \
5960
$(SRCDIR)/pivot.c \
6061
$(SRCDIR)/popen.c \
6162
$(SRCDIR)/pqueue.c \
6263
$(SRCDIR)/printf.c \
6364
$(SRCDIR)/rebuild.c \
@@ -136,10 +137,11 @@
136137
$(OBJDIR)/manifest_.c \
137138
$(OBJDIR)/md5_.c \
138139
$(OBJDIR)/merge_.c \
139140
$(OBJDIR)/merge3_.c \
140141
$(OBJDIR)/name_.c \
142
+ $(OBJDIR)/path_.c \
141143
$(OBJDIR)/pivot_.c \
142144
$(OBJDIR)/popen_.c \
143145
$(OBJDIR)/pqueue_.c \
144146
$(OBJDIR)/printf_.c \
145147
$(OBJDIR)/rebuild_.c \
@@ -218,10 +220,11 @@
218220
$(OBJDIR)/manifest.o \
219221
$(OBJDIR)/md5.o \
220222
$(OBJDIR)/merge.o \
221223
$(OBJDIR)/merge3.o \
222224
$(OBJDIR)/name.o \
225
+ $(OBJDIR)/path.o \
223226
$(OBJDIR)/pivot.o \
224227
$(OBJDIR)/popen.o \
225228
$(OBJDIR)/pqueue.o \
226229
$(OBJDIR)/printf.o \
227230
$(OBJDIR)/rebuild.o \
@@ -304,11 +307,11 @@
304307
305308
306309
$(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
307310
$(OBJDIR)/mkindex $(TRANS_SRC) >$@
308311
$(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
309
- $(OBJDIR)/makeheaders $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h
312
+ $(OBJDIR)/makeheaders $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/path_.c:$(OBJDIR)/path.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h
310313
touch $(OBJDIR)/headers
311314
$(OBJDIR)/headers: Makefile
312315
Makefile:
313316
$(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
314317
$(OBJDIR)/translate $(SRCDIR)/add.c >$(OBJDIR)/add_.c
@@ -623,10 +626,17 @@
623626
624627
$(OBJDIR)/name.o: $(OBJDIR)/name_.c $(OBJDIR)/name.h $(SRCDIR)/config.h
625628
$(XTCC) -o $(OBJDIR)/name.o -c $(OBJDIR)/name_.c
626629
627630
$(OBJDIR)/name.h: $(OBJDIR)/headers
631
+$(OBJDIR)/path_.c: $(SRCDIR)/path.c $(OBJDIR)/translate
632
+ $(OBJDIR)/translate $(SRCDIR)/path.c >$(OBJDIR)/path_.c
633
+
634
+$(OBJDIR)/path.o: $(OBJDIR)/path_.c $(OBJDIR)/path.h $(SRCDIR)/config.h
635
+ $(XTCC) -o $(OBJDIR)/path.o -c $(OBJDIR)/path_.c
636
+
637
+$(OBJDIR)/path.h: $(OBJDIR)/headers
628638
$(OBJDIR)/pivot_.c: $(SRCDIR)/pivot.c $(OBJDIR)/translate
629639
$(OBJDIR)/translate $(SRCDIR)/pivot.c >$(OBJDIR)/pivot_.c
630640
631641
$(OBJDIR)/pivot.o: $(OBJDIR)/pivot_.c $(OBJDIR)/pivot.h $(SRCDIR)/config.h
632642
$(XTCC) -o $(OBJDIR)/pivot.o -c $(OBJDIR)/pivot_.c
633643
--- src/main.mk
+++ src/main.mk
@@ -54,10 +54,11 @@
54 $(SRCDIR)/manifest.c \
55 $(SRCDIR)/md5.c \
56 $(SRCDIR)/merge.c \
57 $(SRCDIR)/merge3.c \
58 $(SRCDIR)/name.c \
 
59 $(SRCDIR)/pivot.c \
60 $(SRCDIR)/popen.c \
61 $(SRCDIR)/pqueue.c \
62 $(SRCDIR)/printf.c \
63 $(SRCDIR)/rebuild.c \
@@ -136,10 +137,11 @@
136 $(OBJDIR)/manifest_.c \
137 $(OBJDIR)/md5_.c \
138 $(OBJDIR)/merge_.c \
139 $(OBJDIR)/merge3_.c \
140 $(OBJDIR)/name_.c \
 
141 $(OBJDIR)/pivot_.c \
142 $(OBJDIR)/popen_.c \
143 $(OBJDIR)/pqueue_.c \
144 $(OBJDIR)/printf_.c \
145 $(OBJDIR)/rebuild_.c \
@@ -218,10 +220,11 @@
218 $(OBJDIR)/manifest.o \
219 $(OBJDIR)/md5.o \
220 $(OBJDIR)/merge.o \
221 $(OBJDIR)/merge3.o \
222 $(OBJDIR)/name.o \
 
223 $(OBJDIR)/pivot.o \
224 $(OBJDIR)/popen.o \
225 $(OBJDIR)/pqueue.o \
226 $(OBJDIR)/printf.o \
227 $(OBJDIR)/rebuild.o \
@@ -304,11 +307,11 @@
304
305
306 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
307 $(OBJDIR)/mkindex $(TRANS_SRC) >$@
308 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
309 $(OBJDIR)/makeheaders $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h
310 touch $(OBJDIR)/headers
311 $(OBJDIR)/headers: Makefile
312 Makefile:
313 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
314 $(OBJDIR)/translate $(SRCDIR)/add.c >$(OBJDIR)/add_.c
@@ -623,10 +626,17 @@
623
624 $(OBJDIR)/name.o: $(OBJDIR)/name_.c $(OBJDIR)/name.h $(SRCDIR)/config.h
625 $(XTCC) -o $(OBJDIR)/name.o -c $(OBJDIR)/name_.c
626
627 $(OBJDIR)/name.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
628 $(OBJDIR)/pivot_.c: $(SRCDIR)/pivot.c $(OBJDIR)/translate
629 $(OBJDIR)/translate $(SRCDIR)/pivot.c >$(OBJDIR)/pivot_.c
630
631 $(OBJDIR)/pivot.o: $(OBJDIR)/pivot_.c $(OBJDIR)/pivot.h $(SRCDIR)/config.h
632 $(XTCC) -o $(OBJDIR)/pivot.o -c $(OBJDIR)/pivot_.c
633
--- src/main.mk
+++ src/main.mk
@@ -54,10 +54,11 @@
54 $(SRCDIR)/manifest.c \
55 $(SRCDIR)/md5.c \
56 $(SRCDIR)/merge.c \
57 $(SRCDIR)/merge3.c \
58 $(SRCDIR)/name.c \
59 $(SRCDIR)/path.c \
60 $(SRCDIR)/pivot.c \
61 $(SRCDIR)/popen.c \
62 $(SRCDIR)/pqueue.c \
63 $(SRCDIR)/printf.c \
64 $(SRCDIR)/rebuild.c \
@@ -136,10 +137,11 @@
137 $(OBJDIR)/manifest_.c \
138 $(OBJDIR)/md5_.c \
139 $(OBJDIR)/merge_.c \
140 $(OBJDIR)/merge3_.c \
141 $(OBJDIR)/name_.c \
142 $(OBJDIR)/path_.c \
143 $(OBJDIR)/pivot_.c \
144 $(OBJDIR)/popen_.c \
145 $(OBJDIR)/pqueue_.c \
146 $(OBJDIR)/printf_.c \
147 $(OBJDIR)/rebuild_.c \
@@ -218,10 +220,11 @@
220 $(OBJDIR)/manifest.o \
221 $(OBJDIR)/md5.o \
222 $(OBJDIR)/merge.o \
223 $(OBJDIR)/merge3.o \
224 $(OBJDIR)/name.o \
225 $(OBJDIR)/path.o \
226 $(OBJDIR)/pivot.o \
227 $(OBJDIR)/popen.o \
228 $(OBJDIR)/pqueue.o \
229 $(OBJDIR)/printf.o \
230 $(OBJDIR)/rebuild.o \
@@ -304,11 +307,11 @@
307
308
309 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
310 $(OBJDIR)/mkindex $(TRANS_SRC) >$@
311 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
312 $(OBJDIR)/makeheaders $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/path_.c:$(OBJDIR)/path.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h
313 touch $(OBJDIR)/headers
314 $(OBJDIR)/headers: Makefile
315 Makefile:
316 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
317 $(OBJDIR)/translate $(SRCDIR)/add.c >$(OBJDIR)/add_.c
@@ -623,10 +626,17 @@
626
627 $(OBJDIR)/name.o: $(OBJDIR)/name_.c $(OBJDIR)/name.h $(SRCDIR)/config.h
628 $(XTCC) -o $(OBJDIR)/name.o -c $(OBJDIR)/name_.c
629
630 $(OBJDIR)/name.h: $(OBJDIR)/headers
631 $(OBJDIR)/path_.c: $(SRCDIR)/path.c $(OBJDIR)/translate
632 $(OBJDIR)/translate $(SRCDIR)/path.c >$(OBJDIR)/path_.c
633
634 $(OBJDIR)/path.o: $(OBJDIR)/path_.c $(OBJDIR)/path.h $(SRCDIR)/config.h
635 $(XTCC) -o $(OBJDIR)/path.o -c $(OBJDIR)/path_.c
636
637 $(OBJDIR)/path.h: $(OBJDIR)/headers
638 $(OBJDIR)/pivot_.c: $(SRCDIR)/pivot.c $(OBJDIR)/translate
639 $(OBJDIR)/translate $(SRCDIR)/pivot.c >$(OBJDIR)/pivot_.c
640
641 $(OBJDIR)/pivot.o: $(OBJDIR)/pivot_.c $(OBJDIR)/pivot.h $(SRCDIR)/config.h
642 $(XTCC) -o $(OBJDIR)/pivot.o -c $(OBJDIR)/pivot_.c
643
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -60,10 +60,11 @@
6060
manifest
6161
md5
6262
merge
6363
merge3
6464
name
65
+ path
6566
pivot
6667
popen
6768
pqueue
6869
printf
6970
rebuild
7071
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -60,10 +60,11 @@
60 manifest
61 md5
62 merge
63 merge3
64 name
 
65 pivot
66 popen
67 pqueue
68 printf
69 rebuild
70
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -60,10 +60,11 @@
60 manifest
61 md5
62 merge
63 merge3
64 name
65 path
66 pivot
67 popen
68 pqueue
69 printf
70 rebuild
71
+2 -2
--- src/name.c
+++ src/name.c
@@ -147,11 +147,11 @@
147147
int vid;
148148
char *zUuid =
149149
db_text(0,
150150
"SELECT blob.uuid"
151151
" FROM tag, tagxref, event, blob"
152
- " WHERE tag.tagname='sym-'||%Q "
152
+ " WHERE tag.tagname='sym-%q' "
153153
" AND tagxref.tagid=tag.tagid AND tagxref.tagtype>0 "
154154
" AND event.objid=tagxref.rid "
155155
" AND blob.rid=event.objid "
156156
" ORDER BY event.mtime DESC ",
157157
zTag
@@ -171,11 +171,11 @@
171171
useUtc = 1;
172172
}
173173
zUuid = db_text(0,
174174
"SELECT blob.uuid"
175175
" FROM tag, tagxref, event, blob"
176
- " WHERE tag.tagname='sym-'||%Q "
176
+ " WHERE tag.tagname='sym-%q' "
177177
" AND tagxref.tagid=tag.tagid AND tagxref.tagtype>0 "
178178
" AND event.objid=tagxref.rid "
179179
" AND blob.rid=event.objid "
180180
" AND event.mtime<=julianday(%Q %s)"
181181
" ORDER BY event.mtime DESC ",
182182
183183
ADDED src/path.c
--- src/name.c
+++ src/name.c
@@ -147,11 +147,11 @@
147 int vid;
148 char *zUuid =
149 db_text(0,
150 "SELECT blob.uuid"
151 " FROM tag, tagxref, event, blob"
152 " WHERE tag.tagname='sym-'||%Q "
153 " AND tagxref.tagid=tag.tagid AND tagxref.tagtype>0 "
154 " AND event.objid=tagxref.rid "
155 " AND blob.rid=event.objid "
156 " ORDER BY event.mtime DESC ",
157 zTag
@@ -171,11 +171,11 @@
171 useUtc = 1;
172 }
173 zUuid = db_text(0,
174 "SELECT blob.uuid"
175 " FROM tag, tagxref, event, blob"
176 " WHERE tag.tagname='sym-'||%Q "
177 " AND tagxref.tagid=tag.tagid AND tagxref.tagtype>0 "
178 " AND event.objid=tagxref.rid "
179 " AND blob.rid=event.objid "
180 " AND event.mtime<=julianday(%Q %s)"
181 " ORDER BY event.mtime DESC ",
182
183 DDED src/path.c
--- src/name.c
+++ src/name.c
@@ -147,11 +147,11 @@
147 int vid;
148 char *zUuid =
149 db_text(0,
150 "SELECT blob.uuid"
151 " FROM tag, tagxref, event, blob"
152 " WHERE tag.tagname='sym-%q' "
153 " AND tagxref.tagid=tag.tagid AND tagxref.tagtype>0 "
154 " AND event.objid=tagxref.rid "
155 " AND blob.rid=event.objid "
156 " ORDER BY event.mtime DESC ",
157 zTag
@@ -171,11 +171,11 @@
171 useUtc = 1;
172 }
173 zUuid = db_text(0,
174 "SELECT blob.uuid"
175 " FROM tag, tagxref, event, blob"
176 " WHERE tag.tagname='sym-%q' "
177 " AND tagxref.tagid=tag.tagid AND tagxref.tagtype>0 "
178 " AND event.objid=tagxref.rid "
179 " AND blob.rid=event.objid "
180 " AND event.mtime<=julianday(%Q %s)"
181 " ORDER BY event.mtime DESC ",
182
183 DDED src/path.c
+1
--- a/src/path.c
+++ b/src/path.c
@@ -0,0 +1 @@
1
+ r
--- a/src/path.c
+++ b/src/path.c
@@ -0,0 +1 @@
 
--- a/src/path.c
+++ b/src/path.c
@@ -0,0 +1 @@
1 r
+6 -2
--- src/pqueue.c
+++ src/pqueue.c
@@ -38,10 +38,11 @@
3838
struct PQueue {
3939
int cnt; /* Number of entries in the queue */
4040
int sz; /* Number of slots in a[] */
4141
struct QueueElement {
4242
int id; /* ID of the element */
43
+ void *p; /* Content pointer */
4344
double value; /* Value of element. Kept in ascending order */
4445
} *a;
4546
};
4647
#endif
4748
@@ -69,11 +70,11 @@
6970
}
7071
7172
/*
7273
** Insert element e into the queue.
7374
*/
74
-void pqueue_insert(PQueue *p, int e, double v){
75
+void pqueue_insert(PQueue *p, int e, double v, void *pData){
7576
int i, j;
7677
if( p->cnt+1>p->sz ){
7778
pqueue_resize(p, p->cnt+5);
7879
}
7980
for(i=0; i<p->cnt; i++){
@@ -83,26 +84,29 @@
8384
}
8485
break;
8586
}
8687
}
8788
p->a[i].id = e;
89
+ p->a[i].p = pData;
8890
p->a[i].value = v;
8991
p->cnt++;
9092
}
9193
9294
/*
9395
** Extract the first element from the queue (the element with
9496
** the smallest value) and return its ID. Return 0 if the queue
9597
** is empty.
9698
*/
97
-int pqueue_extract(PQueue *p){
99
+int pqueue_extract(PQueue *p, void **pp){
98100
int e, i;
99101
if( p->cnt==0 ){
102
+ if( pp ) *pp = 0;
100103
return 0;
101104
}
102105
e = p->a[0].id;
106
+ if( pp ) *pp = p->a[0].p;
103107
for(i=0; i<p->cnt-1; i++){
104108
p->a[i] = p->a[i+1];
105109
}
106110
p->cnt--;
107111
return e;
108112
}
109113
--- src/pqueue.c
+++ src/pqueue.c
@@ -38,10 +38,11 @@
38 struct PQueue {
39 int cnt; /* Number of entries in the queue */
40 int sz; /* Number of slots in a[] */
41 struct QueueElement {
42 int id; /* ID of the element */
 
43 double value; /* Value of element. Kept in ascending order */
44 } *a;
45 };
46 #endif
47
@@ -69,11 +70,11 @@
69 }
70
71 /*
72 ** Insert element e into the queue.
73 */
74 void pqueue_insert(PQueue *p, int e, double v){
75 int i, j;
76 if( p->cnt+1>p->sz ){
77 pqueue_resize(p, p->cnt+5);
78 }
79 for(i=0; i<p->cnt; i++){
@@ -83,26 +84,29 @@
83 }
84 break;
85 }
86 }
87 p->a[i].id = e;
 
88 p->a[i].value = v;
89 p->cnt++;
90 }
91
92 /*
93 ** Extract the first element from the queue (the element with
94 ** the smallest value) and return its ID. Return 0 if the queue
95 ** is empty.
96 */
97 int pqueue_extract(PQueue *p){
98 int e, i;
99 if( p->cnt==0 ){
 
100 return 0;
101 }
102 e = p->a[0].id;
 
103 for(i=0; i<p->cnt-1; i++){
104 p->a[i] = p->a[i+1];
105 }
106 p->cnt--;
107 return e;
108 }
109
--- src/pqueue.c
+++ src/pqueue.c
@@ -38,10 +38,11 @@
38 struct PQueue {
39 int cnt; /* Number of entries in the queue */
40 int sz; /* Number of slots in a[] */
41 struct QueueElement {
42 int id; /* ID of the element */
43 void *p; /* Content pointer */
44 double value; /* Value of element. Kept in ascending order */
45 } *a;
46 };
47 #endif
48
@@ -69,11 +70,11 @@
70 }
71
72 /*
73 ** Insert element e into the queue.
74 */
75 void pqueue_insert(PQueue *p, int e, double v, void *pData){
76 int i, j;
77 if( p->cnt+1>p->sz ){
78 pqueue_resize(p, p->cnt+5);
79 }
80 for(i=0; i<p->cnt; i++){
@@ -83,26 +84,29 @@
84 }
85 break;
86 }
87 }
88 p->a[i].id = e;
89 p->a[i].p = pData;
90 p->a[i].value = v;
91 p->cnt++;
92 }
93
94 /*
95 ** Extract the first element from the queue (the element with
96 ** the smallest value) and return its ID. Return 0 if the queue
97 ** is empty.
98 */
99 int pqueue_extract(PQueue *p, void **pp){
100 int e, i;
101 if( p->cnt==0 ){
102 if( pp ) *pp = 0;
103 return 0;
104 }
105 e = p->a[0].id;
106 if( pp ) *pp = p->a[0].p;
107 for(i=0; i<p->cnt-1; i++){
108 p->a[i] = p->a[i+1];
109 }
110 p->cnt--;
111 return e;
112 }
113
+3 -3
--- src/tag.c
+++ src/tag.c
@@ -44,11 +44,11 @@
4444
Stmt ins; /* INSERT INTO tagxref */
4545
Stmt eventupdate; /* UPDATE event */
4646
4747
assert( tagType==0 || tagType==2 );
4848
pqueue_init(&queue);
49
- pqueue_insert(&queue, pid, 0.0);
49
+ pqueue_insert(&queue, pid, 0.0, 0);
5050
5151
/* Query for children of :pid to which to propagate the tag.
5252
** Three returns: (1) rid of the child. (2) timestamp of child.
5353
** (3) True to propagate or false to block.
5454
*/
@@ -79,18 +79,18 @@
7979
if( tagid==TAG_BGCOLOR ){
8080
db_prepare(&eventupdate,
8181
"UPDATE event SET bgcolor=%Q WHERE objid=:rid", zValue
8282
);
8383
}
84
- while( (pid = pqueue_extract(&queue))!=0 ){
84
+ while( (pid = pqueue_extract(&queue, 0))!=0 ){
8585
db_bind_int(&s, ":pid", pid);
8686
while( db_step(&s)==SQLITE_ROW ){
8787
int doit = db_column_int(&s, 2);
8888
if( doit ){
8989
int cid = db_column_int(&s, 0);
9090
double mtime = db_column_double(&s, 1);
91
- pqueue_insert(&queue, cid, mtime);
91
+ pqueue_insert(&queue, cid, mtime, 0);
9292
db_bind_int(&ins, ":rid", cid);
9393
db_step(&ins);
9494
db_reset(&ins);
9595
if( tagid==TAG_BGCOLOR ){
9696
db_bind_int(&eventupdate, ":rid", cid);
9797
--- src/tag.c
+++ src/tag.c
@@ -44,11 +44,11 @@
44 Stmt ins; /* INSERT INTO tagxref */
45 Stmt eventupdate; /* UPDATE event */
46
47 assert( tagType==0 || tagType==2 );
48 pqueue_init(&queue);
49 pqueue_insert(&queue, pid, 0.0);
50
51 /* Query for children of :pid to which to propagate the tag.
52 ** Three returns: (1) rid of the child. (2) timestamp of child.
53 ** (3) True to propagate or false to block.
54 */
@@ -79,18 +79,18 @@
79 if( tagid==TAG_BGCOLOR ){
80 db_prepare(&eventupdate,
81 "UPDATE event SET bgcolor=%Q WHERE objid=:rid", zValue
82 );
83 }
84 while( (pid = pqueue_extract(&queue))!=0 ){
85 db_bind_int(&s, ":pid", pid);
86 while( db_step(&s)==SQLITE_ROW ){
87 int doit = db_column_int(&s, 2);
88 if( doit ){
89 int cid = db_column_int(&s, 0);
90 double mtime = db_column_double(&s, 1);
91 pqueue_insert(&queue, cid, mtime);
92 db_bind_int(&ins, ":rid", cid);
93 db_step(&ins);
94 db_reset(&ins);
95 if( tagid==TAG_BGCOLOR ){
96 db_bind_int(&eventupdate, ":rid", cid);
97
--- src/tag.c
+++ src/tag.c
@@ -44,11 +44,11 @@
44 Stmt ins; /* INSERT INTO tagxref */
45 Stmt eventupdate; /* UPDATE event */
46
47 assert( tagType==0 || tagType==2 );
48 pqueue_init(&queue);
49 pqueue_insert(&queue, pid, 0.0, 0);
50
51 /* Query for children of :pid to which to propagate the tag.
52 ** Three returns: (1) rid of the child. (2) timestamp of child.
53 ** (3) True to propagate or false to block.
54 */
@@ -79,18 +79,18 @@
79 if( tagid==TAG_BGCOLOR ){
80 db_prepare(&eventupdate,
81 "UPDATE event SET bgcolor=%Q WHERE objid=:rid", zValue
82 );
83 }
84 while( (pid = pqueue_extract(&queue, 0))!=0 ){
85 db_bind_int(&s, ":pid", pid);
86 while( db_step(&s)==SQLITE_ROW ){
87 int doit = db_column_int(&s, 2);
88 if( doit ){
89 int cid = db_column_int(&s, 0);
90 double mtime = db_column_double(&s, 1);
91 pqueue_insert(&queue, cid, mtime, 0);
92 db_bind_int(&ins, ":rid", cid);
93 db_step(&ins);
94 db_reset(&ins);
95 if( tagid==TAG_BGCOLOR ){
96 db_bind_int(&eventupdate, ":rid", cid);
97
+22 -12
--- src/timeline.c
+++ src/timeline.c
@@ -763,10 +763,12 @@
763763
const char *zThisUser = 0; /* Suppress links to this user */
764764
HQuery url; /* URL for various branch links */
765765
int from_rid = name_to_rid(P("from")); /* from= for path timelines */
766766
int to_rid = name_to_rid(P("to")); /* to= for path timelines */
767767
int noMerge = P("nomerge")!=0; /* Do not follow merge links */
768
+ int me_rid = name_to_rid(P("me")); /* me= for common ancestory path */
769
+ int you_rid = name_to_rid(P("you"));/* you= for common ancst path */
768770
769771
/* To view the timeline, must have permission to read project data.
770772
*/
771773
login_check_credentials();
772774
if( !g.okRead && !g.okRdTkt && !g.okRdWiki ){ login_needed(); return; }
@@ -795,38 +797,46 @@
795797
blob_zero(&desc);
796798
blob_append(&sql, "INSERT OR IGNORE INTO timeline ", -1);
797799
blob_append(&sql, timeline_query_for_www(), -1);
798800
url_initialize(&url, "timeline");
799801
if( !useDividers ) url_add_parameter(&url, "nd", 0);
800
- if( from_rid && to_rid && g.okRead ){
802
+ if( ((from_rid && to_rid) || (me_rid && you_rid)) && g.okRead ){
801803
/* If from= and to= are present, display all nodes on a path connecting
802804
** the two */
803
- BisectNode *p;
804
- const char *z;
805
+ PathNode *p = 0;
806
+ const char *zFrom = 0;
807
+ const char *zTo = 0;
805808
806
- bisect_shortest_path(from_rid, to_rid, noMerge);
807
- p = bisect_reverse_path();
809
+ if( from_rid && to_rid ){
810
+ p = path_shortest(from_rid, to_rid, noMerge);
811
+ zFrom = P("from");
812
+ zTo = P("to");
813
+ }else{
814
+ if( path_common_ancestor(me_rid, you_rid) ){
815
+ p = path_first();
816
+ }
817
+ zFrom = P("me");
818
+ zTo = P("you");
819
+ }
808820
blob_append(&sql, " AND event.objid IN (0", -1);
809821
while( p ){
810822
blob_appendf(&sql, ",%d", p->rid);
811823
p = p->u.pTo;
812824
}
813825
blob_append(&sql, ")", -1);
814
- bisect_reset();
826
+ path_reset();
815827
blob_append(&desc, "All nodes on the path from ", -1);
816
- z = P("from");
817828
if( g.okHistory ){
818
- blob_appendf(&desc, "<a href='%s/info/%h'>[%h]</a>", g.zTop, z, z);
829
+ blob_appendf(&desc, "<a href='%s/info/%h'>[%h]</a>", g.zTop,zFrom,zFrom);
819830
}else{
820
- blob_appendf(&desc, "[%h]", z);
831
+ blob_appendf(&desc, "[%h]", zFrom);
821832
}
822833
blob_append(&desc, " and ", -1);
823
- z = P("to");
824834
if( g.okHistory ){
825
- blob_appendf(&desc, "<a href='%s/info/%h'>[%h]</a>.", g.zTop, z, z);
835
+ blob_appendf(&desc, "<a href='%s/info/%h'>[%h]</a>.", g.zTop, zTo, zTo);
826836
}else{
827
- blob_appendf(&desc, "[%h].", z);
837
+ blob_appendf(&desc, "[%h].", zTo);
828838
}
829839
tmFlags |= TIMELINE_DISJOINT;
830840
db_multi_exec("%s", blob_str(&sql));
831841
}else if( (p_rid || d_rid) && g.okRead ){
832842
/* If p= or d= is present, ignore all other parameters other than n= */
833843
--- src/timeline.c
+++ src/timeline.c
@@ -763,10 +763,12 @@
763 const char *zThisUser = 0; /* Suppress links to this user */
764 HQuery url; /* URL for various branch links */
765 int from_rid = name_to_rid(P("from")); /* from= for path timelines */
766 int to_rid = name_to_rid(P("to")); /* to= for path timelines */
767 int noMerge = P("nomerge")!=0; /* Do not follow merge links */
 
 
768
769 /* To view the timeline, must have permission to read project data.
770 */
771 login_check_credentials();
772 if( !g.okRead && !g.okRdTkt && !g.okRdWiki ){ login_needed(); return; }
@@ -795,38 +797,46 @@
795 blob_zero(&desc);
796 blob_append(&sql, "INSERT OR IGNORE INTO timeline ", -1);
797 blob_append(&sql, timeline_query_for_www(), -1);
798 url_initialize(&url, "timeline");
799 if( !useDividers ) url_add_parameter(&url, "nd", 0);
800 if( from_rid && to_rid && g.okRead ){
801 /* If from= and to= are present, display all nodes on a path connecting
802 ** the two */
803 BisectNode *p;
804 const char *z;
 
805
806 bisect_shortest_path(from_rid, to_rid, noMerge);
807 p = bisect_reverse_path();
 
 
 
 
 
 
 
 
 
808 blob_append(&sql, " AND event.objid IN (0", -1);
809 while( p ){
810 blob_appendf(&sql, ",%d", p->rid);
811 p = p->u.pTo;
812 }
813 blob_append(&sql, ")", -1);
814 bisect_reset();
815 blob_append(&desc, "All nodes on the path from ", -1);
816 z = P("from");
817 if( g.okHistory ){
818 blob_appendf(&desc, "<a href='%s/info/%h'>[%h]</a>", g.zTop, z, z);
819 }else{
820 blob_appendf(&desc, "[%h]", z);
821 }
822 blob_append(&desc, " and ", -1);
823 z = P("to");
824 if( g.okHistory ){
825 blob_appendf(&desc, "<a href='%s/info/%h'>[%h]</a>.", g.zTop, z, z);
826 }else{
827 blob_appendf(&desc, "[%h].", z);
828 }
829 tmFlags |= TIMELINE_DISJOINT;
830 db_multi_exec("%s", blob_str(&sql));
831 }else if( (p_rid || d_rid) && g.okRead ){
832 /* If p= or d= is present, ignore all other parameters other than n= */
833
--- src/timeline.c
+++ src/timeline.c
@@ -763,10 +763,12 @@
763 const char *zThisUser = 0; /* Suppress links to this user */
764 HQuery url; /* URL for various branch links */
765 int from_rid = name_to_rid(P("from")); /* from= for path timelines */
766 int to_rid = name_to_rid(P("to")); /* to= for path timelines */
767 int noMerge = P("nomerge")!=0; /* Do not follow merge links */
768 int me_rid = name_to_rid(P("me")); /* me= for common ancestory path */
769 int you_rid = name_to_rid(P("you"));/* you= for common ancst path */
770
771 /* To view the timeline, must have permission to read project data.
772 */
773 login_check_credentials();
774 if( !g.okRead && !g.okRdTkt && !g.okRdWiki ){ login_needed(); return; }
@@ -795,38 +797,46 @@
797 blob_zero(&desc);
798 blob_append(&sql, "INSERT OR IGNORE INTO timeline ", -1);
799 blob_append(&sql, timeline_query_for_www(), -1);
800 url_initialize(&url, "timeline");
801 if( !useDividers ) url_add_parameter(&url, "nd", 0);
802 if( ((from_rid && to_rid) || (me_rid && you_rid)) && g.okRead ){
803 /* If from= and to= are present, display all nodes on a path connecting
804 ** the two */
805 PathNode *p = 0;
806 const char *zFrom = 0;
807 const char *zTo = 0;
808
809 if( from_rid && to_rid ){
810 p = path_shortest(from_rid, to_rid, noMerge);
811 zFrom = P("from");
812 zTo = P("to");
813 }else{
814 if( path_common_ancestor(me_rid, you_rid) ){
815 p = path_first();
816 }
817 zFrom = P("me");
818 zTo = P("you");
819 }
820 blob_append(&sql, " AND event.objid IN (0", -1);
821 while( p ){
822 blob_appendf(&sql, ",%d", p->rid);
823 p = p->u.pTo;
824 }
825 blob_append(&sql, ")", -1);
826 path_reset();
827 blob_append(&desc, "All nodes on the path from ", -1);
 
828 if( g.okHistory ){
829 blob_appendf(&desc, "<a href='%s/info/%h'>[%h]</a>", g.zTop,zFrom,zFrom);
830 }else{
831 blob_appendf(&desc, "[%h]", zFrom);
832 }
833 blob_append(&desc, " and ", -1);
 
834 if( g.okHistory ){
835 blob_appendf(&desc, "<a href='%s/info/%h'>[%h]</a>.", g.zTop, zTo, zTo);
836 }else{
837 blob_appendf(&desc, "[%h].", zTo);
838 }
839 tmFlags |= TIMELINE_DISJOINT;
840 db_multi_exec("%s", blob_str(&sql));
841 }else if( (p_rid || d_rid) && g.okRead ){
842 /* If p= or d= is present, ignore all other parameters other than n= */
843
+10 -4
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -24,13 +24,13 @@
2424
TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(I18N) $(SSL) $(INCL)
2525
LIBS = $(DMDIR)\extra\lib\ zlib wsock32
2626
2727
SQLITE_OPTIONS = -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT2 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0
2828
29
-SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
29
+SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
3030
31
-OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\name$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\xfer$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
31
+OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\xfer$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
3232
3333
3434
RC=$(DMDIR)\bin\rcc
3535
RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
3636
@@ -44,11 +44,11 @@
4444
4545
$(OBJDIR)\fossil.res: $B\win\fossil.rc
4646
$(RC) $(RCFLAGS) -o$@ $**
4747
4848
$(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
49
- +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo graph gzip http http_socket http_ssl http_transport import info leaf login main manifest md5 merge merge3 name pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp xfer zip shell sqlite3 th th_lang > $@
49
+ +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo graph gzip http http_socket http_ssl http_transport import info leaf login main manifest md5 merge merge3 name path pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp xfer zip shell sqlite3 th th_lang > $@
5050
+echo fossil >> $@
5151
+echo fossil >> $@
5252
+echo $(LIBS) >> $@
5353
+echo. >> $@
5454
+echo fossil >> $@
@@ -358,10 +358,16 @@
358358
$(OBJDIR)\name$O : name_.c name.h
359359
$(TCC) -o$@ -c name_.c
360360
361361
name_.c : $(SRCDIR)\name.c
362362
+translate$E $** > $@
363
+
364
+$(OBJDIR)\path$O : path_.c path.h
365
+ $(TCC) -o$@ -c path_.c
366
+
367
+path_.c : $(SRCDIR)\path.c
368
+ +translate$E $** > $@
363369
364370
$(OBJDIR)\pivot$O : pivot_.c pivot.h
365371
$(TCC) -o$@ -c pivot_.c
366372
367373
pivot_.c : $(SRCDIR)\pivot.c
@@ -570,7 +576,7 @@
570576
571577
zip_.c : $(SRCDIR)\zip.c
572578
+translate$E $** > $@
573579
574580
headers: makeheaders$E page_index.h VERSION.h
575
- +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.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 configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h leaf_.c:leaf.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 popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.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 winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h
581
+ +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.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 configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h leaf_.c:leaf.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 path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.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 winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h
576582
@copy /Y nul: headers
577583
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -24,13 +24,13 @@
24 TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(I18N) $(SSL) $(INCL)
25 LIBS = $(DMDIR)\extra\lib\ zlib wsock32
26
27 SQLITE_OPTIONS = -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT2 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0
28
29 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
30
31 OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\name$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\xfer$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
32
33
34 RC=$(DMDIR)\bin\rcc
35 RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
36
@@ -44,11 +44,11 @@
44
45 $(OBJDIR)\fossil.res: $B\win\fossil.rc
46 $(RC) $(RCFLAGS) -o$@ $**
47
48 $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
49 +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo graph gzip http http_socket http_ssl http_transport import info leaf login main manifest md5 merge merge3 name pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp xfer zip shell sqlite3 th th_lang > $@
50 +echo fossil >> $@
51 +echo fossil >> $@
52 +echo $(LIBS) >> $@
53 +echo. >> $@
54 +echo fossil >> $@
@@ -358,10 +358,16 @@
358 $(OBJDIR)\name$O : name_.c name.h
359 $(TCC) -o$@ -c name_.c
360
361 name_.c : $(SRCDIR)\name.c
362 +translate$E $** > $@
 
 
 
 
 
 
363
364 $(OBJDIR)\pivot$O : pivot_.c pivot.h
365 $(TCC) -o$@ -c pivot_.c
366
367 pivot_.c : $(SRCDIR)\pivot.c
@@ -570,7 +576,7 @@
570
571 zip_.c : $(SRCDIR)\zip.c
572 +translate$E $** > $@
573
574 headers: makeheaders$E page_index.h VERSION.h
575 +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.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 configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h leaf_.c:leaf.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 popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.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 winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h
576 @copy /Y nul: headers
577
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -24,13 +24,13 @@
24 TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(I18N) $(SSL) $(INCL)
25 LIBS = $(DMDIR)\extra\lib\ zlib wsock32
26
27 SQLITE_OPTIONS = -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT2 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0
28
29 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
30
31 OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\xfer$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
32
33
34 RC=$(DMDIR)\bin\rcc
35 RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
36
@@ -44,11 +44,11 @@
44
45 $(OBJDIR)\fossil.res: $B\win\fossil.rc
46 $(RC) $(RCFLAGS) -o$@ $**
47
48 $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
49 +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo graph gzip http http_socket http_ssl http_transport import info leaf login main manifest md5 merge merge3 name path pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp xfer zip shell sqlite3 th th_lang > $@
50 +echo fossil >> $@
51 +echo fossil >> $@
52 +echo $(LIBS) >> $@
53 +echo. >> $@
54 +echo fossil >> $@
@@ -358,10 +358,16 @@
358 $(OBJDIR)\name$O : name_.c name.h
359 $(TCC) -o$@ -c name_.c
360
361 name_.c : $(SRCDIR)\name.c
362 +translate$E $** > $@
363
364 $(OBJDIR)\path$O : path_.c path.h
365 $(TCC) -o$@ -c path_.c
366
367 path_.c : $(SRCDIR)\path.c
368 +translate$E $** > $@
369
370 $(OBJDIR)\pivot$O : pivot_.c pivot.h
371 $(TCC) -o$@ -c pivot_.c
372
373 pivot_.c : $(SRCDIR)\pivot.c
@@ -570,7 +576,7 @@
576
577 zip_.c : $(SRCDIR)\zip.c
578 +translate$E $** > $@
579
580 headers: makeheaders$E page_index.h VERSION.h
581 +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.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 configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h leaf_.c:leaf.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 path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.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 winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h
582 @copy /Y nul: headers
583
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -117,10 +117,11 @@
117117
$(SRCDIR)/manifest.c \
118118
$(SRCDIR)/md5.c \
119119
$(SRCDIR)/merge.c \
120120
$(SRCDIR)/merge3.c \
121121
$(SRCDIR)/name.c \
122
+ $(SRCDIR)/path.c \
122123
$(SRCDIR)/pivot.c \
123124
$(SRCDIR)/popen.c \
124125
$(SRCDIR)/pqueue.c \
125126
$(SRCDIR)/printf.c \
126127
$(SRCDIR)/rebuild.c \
@@ -199,10 +200,11 @@
199200
$(OBJDIR)/manifest_.c \
200201
$(OBJDIR)/md5_.c \
201202
$(OBJDIR)/merge_.c \
202203
$(OBJDIR)/merge3_.c \
203204
$(OBJDIR)/name_.c \
205
+ $(OBJDIR)/path_.c \
204206
$(OBJDIR)/pivot_.c \
205207
$(OBJDIR)/popen_.c \
206208
$(OBJDIR)/pqueue_.c \
207209
$(OBJDIR)/printf_.c \
208210
$(OBJDIR)/rebuild_.c \
@@ -281,10 +283,11 @@
281283
$(OBJDIR)/manifest.o \
282284
$(OBJDIR)/md5.o \
283285
$(OBJDIR)/merge.o \
284286
$(OBJDIR)/merge3.o \
285287
$(OBJDIR)/name.o \
288
+ $(OBJDIR)/path.o \
286289
$(OBJDIR)/pivot.o \
287290
$(OBJDIR)/popen.o \
288291
$(OBJDIR)/pqueue.o \
289292
$(OBJDIR)/printf.o \
290293
$(OBJDIR)/rebuild.o \
@@ -382,11 +385,11 @@
382385
383386
384387
$(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
385388
$(MKINDEX) $(TRANS_SRC) >$@
386389
$(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
387
- $(MAKEHEADERS) $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h
390
+ $(MAKEHEADERS) $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/path_.c:$(OBJDIR)/path.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h
388391
echo Done >$(OBJDIR)/headers
389392
390393
$(OBJDIR)/headers: Makefile
391394
Makefile:
392395
$(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
@@ -702,10 +705,17 @@
702705
703706
$(OBJDIR)/name.o: $(OBJDIR)/name_.c $(OBJDIR)/name.h $(SRCDIR)/config.h
704707
$(XTCC) -o $(OBJDIR)/name.o -c $(OBJDIR)/name_.c
705708
706709
name.h: $(OBJDIR)/headers
710
+$(OBJDIR)/path_.c: $(SRCDIR)/path.c $(OBJDIR)/translate
711
+ $(TRANSLATE) $(SRCDIR)/path.c >$(OBJDIR)/path_.c
712
+
713
+$(OBJDIR)/path.o: $(OBJDIR)/path_.c $(OBJDIR)/path.h $(SRCDIR)/config.h
714
+ $(XTCC) -o $(OBJDIR)/path.o -c $(OBJDIR)/path_.c
715
+
716
+path.h: $(OBJDIR)/headers
707717
$(OBJDIR)/pivot_.c: $(SRCDIR)/pivot.c $(OBJDIR)/translate
708718
$(TRANSLATE) $(SRCDIR)/pivot.c >$(OBJDIR)/pivot_.c
709719
710720
$(OBJDIR)/pivot.o: $(OBJDIR)/pivot_.c $(OBJDIR)/pivot.h $(SRCDIR)/config.h
711721
$(XTCC) -o $(OBJDIR)/pivot.o -c $(OBJDIR)/pivot_.c
712722
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -117,10 +117,11 @@
117 $(SRCDIR)/manifest.c \
118 $(SRCDIR)/md5.c \
119 $(SRCDIR)/merge.c \
120 $(SRCDIR)/merge3.c \
121 $(SRCDIR)/name.c \
 
122 $(SRCDIR)/pivot.c \
123 $(SRCDIR)/popen.c \
124 $(SRCDIR)/pqueue.c \
125 $(SRCDIR)/printf.c \
126 $(SRCDIR)/rebuild.c \
@@ -199,10 +200,11 @@
199 $(OBJDIR)/manifest_.c \
200 $(OBJDIR)/md5_.c \
201 $(OBJDIR)/merge_.c \
202 $(OBJDIR)/merge3_.c \
203 $(OBJDIR)/name_.c \
 
204 $(OBJDIR)/pivot_.c \
205 $(OBJDIR)/popen_.c \
206 $(OBJDIR)/pqueue_.c \
207 $(OBJDIR)/printf_.c \
208 $(OBJDIR)/rebuild_.c \
@@ -281,10 +283,11 @@
281 $(OBJDIR)/manifest.o \
282 $(OBJDIR)/md5.o \
283 $(OBJDIR)/merge.o \
284 $(OBJDIR)/merge3.o \
285 $(OBJDIR)/name.o \
 
286 $(OBJDIR)/pivot.o \
287 $(OBJDIR)/popen.o \
288 $(OBJDIR)/pqueue.o \
289 $(OBJDIR)/printf.o \
290 $(OBJDIR)/rebuild.o \
@@ -382,11 +385,11 @@
382
383
384 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
385 $(MKINDEX) $(TRANS_SRC) >$@
386 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
387 $(MAKEHEADERS) $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h
388 echo Done >$(OBJDIR)/headers
389
390 $(OBJDIR)/headers: Makefile
391 Makefile:
392 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
@@ -702,10 +705,17 @@
702
703 $(OBJDIR)/name.o: $(OBJDIR)/name_.c $(OBJDIR)/name.h $(SRCDIR)/config.h
704 $(XTCC) -o $(OBJDIR)/name.o -c $(OBJDIR)/name_.c
705
706 name.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
707 $(OBJDIR)/pivot_.c: $(SRCDIR)/pivot.c $(OBJDIR)/translate
708 $(TRANSLATE) $(SRCDIR)/pivot.c >$(OBJDIR)/pivot_.c
709
710 $(OBJDIR)/pivot.o: $(OBJDIR)/pivot_.c $(OBJDIR)/pivot.h $(SRCDIR)/config.h
711 $(XTCC) -o $(OBJDIR)/pivot.o -c $(OBJDIR)/pivot_.c
712
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -117,10 +117,11 @@
117 $(SRCDIR)/manifest.c \
118 $(SRCDIR)/md5.c \
119 $(SRCDIR)/merge.c \
120 $(SRCDIR)/merge3.c \
121 $(SRCDIR)/name.c \
122 $(SRCDIR)/path.c \
123 $(SRCDIR)/pivot.c \
124 $(SRCDIR)/popen.c \
125 $(SRCDIR)/pqueue.c \
126 $(SRCDIR)/printf.c \
127 $(SRCDIR)/rebuild.c \
@@ -199,10 +200,11 @@
200 $(OBJDIR)/manifest_.c \
201 $(OBJDIR)/md5_.c \
202 $(OBJDIR)/merge_.c \
203 $(OBJDIR)/merge3_.c \
204 $(OBJDIR)/name_.c \
205 $(OBJDIR)/path_.c \
206 $(OBJDIR)/pivot_.c \
207 $(OBJDIR)/popen_.c \
208 $(OBJDIR)/pqueue_.c \
209 $(OBJDIR)/printf_.c \
210 $(OBJDIR)/rebuild_.c \
@@ -281,10 +283,11 @@
283 $(OBJDIR)/manifest.o \
284 $(OBJDIR)/md5.o \
285 $(OBJDIR)/merge.o \
286 $(OBJDIR)/merge3.o \
287 $(OBJDIR)/name.o \
288 $(OBJDIR)/path.o \
289 $(OBJDIR)/pivot.o \
290 $(OBJDIR)/popen.o \
291 $(OBJDIR)/pqueue.o \
292 $(OBJDIR)/printf.o \
293 $(OBJDIR)/rebuild.o \
@@ -382,11 +385,11 @@
385
386
387 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
388 $(MKINDEX) $(TRANS_SRC) >$@
389 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
390 $(MAKEHEADERS) $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/path_.c:$(OBJDIR)/path.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h
391 echo Done >$(OBJDIR)/headers
392
393 $(OBJDIR)/headers: Makefile
394 Makefile:
395 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
@@ -702,10 +705,17 @@
705
706 $(OBJDIR)/name.o: $(OBJDIR)/name_.c $(OBJDIR)/name.h $(SRCDIR)/config.h
707 $(XTCC) -o $(OBJDIR)/name.o -c $(OBJDIR)/name_.c
708
709 name.h: $(OBJDIR)/headers
710 $(OBJDIR)/path_.c: $(SRCDIR)/path.c $(OBJDIR)/translate
711 $(TRANSLATE) $(SRCDIR)/path.c >$(OBJDIR)/path_.c
712
713 $(OBJDIR)/path.o: $(OBJDIR)/path_.c $(OBJDIR)/path.h $(SRCDIR)/config.h
714 $(XTCC) -o $(OBJDIR)/path.o -c $(OBJDIR)/path_.c
715
716 path.h: $(OBJDIR)/headers
717 $(OBJDIR)/pivot_.c: $(SRCDIR)/pivot.c $(OBJDIR)/translate
718 $(TRANSLATE) $(SRCDIR)/pivot.c >$(OBJDIR)/pivot_.c
719
720 $(OBJDIR)/pivot.o: $(OBJDIR)/pivot_.c $(OBJDIR)/pivot.h $(SRCDIR)/config.h
721 $(XTCC) -o $(OBJDIR)/pivot.o -c $(OBJDIR)/pivot_.c
722
+10 -4
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -38,13 +38,13 @@
3838
LIBS = $(ZLIB) ws2_32.lib $(SSLLIB)
3939
LIBDIR = -LIBPATH:$(MSCDIR)\extra\lib -LIBPATH:$(ZLIBDIR)
4040
4141
SQLITE_OPTIONS = /DSQLITE_OMIT_LOAD_EXTENSION=1 /DSQLITE_THREADSAFE=0 /DSQLITE_DEFAULT_FILE_FORMAT=4 /DSQLITE_ENABLE_STAT2 /Dlocaltime=fossil_localtime /DSQLITE_ENABLE_LOCKING_STYLE=0
4242
43
-SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
43
+SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
4444
45
-OBJ = $(OX)\add$O $(OX)\allrepo$O $(OX)\attach$O $(OX)\bag$O $(OX)\bisect$O $(OX)\blob$O $(OX)\branch$O $(OX)\browse$O $(OX)\captcha$O $(OX)\cgi$O $(OX)\checkin$O $(OX)\checkout$O $(OX)\clearsign$O $(OX)\clone$O $(OX)\comformat$O $(OX)\configure$O $(OX)\content$O $(OX)\db$O $(OX)\delta$O $(OX)\deltacmd$O $(OX)\descendants$O $(OX)\diff$O $(OX)\diffcmd$O $(OX)\doc$O $(OX)\encode$O $(OX)\event$O $(OX)\export$O $(OX)\file$O $(OX)\finfo$O $(OX)\graph$O $(OX)\gzip$O $(OX)\http$O $(OX)\http_socket$O $(OX)\http_ssl$O $(OX)\http_transport$O $(OX)\import$O $(OX)\info$O $(OX)\leaf$O $(OX)\login$O $(OX)\main$O $(OX)\manifest$O $(OX)\md5$O $(OX)\merge$O $(OX)\merge3$O $(OX)\name$O $(OX)\pivot$O $(OX)\popen$O $(OX)\pqueue$O $(OX)\printf$O $(OX)\rebuild$O $(OX)\report$O $(OX)\rss$O $(OX)\schema$O $(OX)\search$O $(OX)\setup$O $(OX)\sha1$O $(OX)\shun$O $(OX)\skins$O $(OX)\sqlcmd$O $(OX)\stash$O $(OX)\stat$O $(OX)\style$O $(OX)\sync$O $(OX)\tag$O $(OX)\tar$O $(OX)\th_main$O $(OX)\timeline$O $(OX)\tkt$O $(OX)\tktsetup$O $(OX)\undo$O $(OX)\update$O $(OX)\url$O $(OX)\user$O $(OX)\verify$O $(OX)\vfile$O $(OX)\wiki$O $(OX)\wikiformat$O $(OX)\winhttp$O $(OX)\xfer$O $(OX)\zip$O $(OX)\shell$O $(OX)\sqlite3$O $(OX)\th$O $(OX)\th_lang$O
45
+OBJ = $(OX)\add$O $(OX)\allrepo$O $(OX)\attach$O $(OX)\bag$O $(OX)\bisect$O $(OX)\blob$O $(OX)\branch$O $(OX)\browse$O $(OX)\captcha$O $(OX)\cgi$O $(OX)\checkin$O $(OX)\checkout$O $(OX)\clearsign$O $(OX)\clone$O $(OX)\comformat$O $(OX)\configure$O $(OX)\content$O $(OX)\db$O $(OX)\delta$O $(OX)\deltacmd$O $(OX)\descendants$O $(OX)\diff$O $(OX)\diffcmd$O $(OX)\doc$O $(OX)\encode$O $(OX)\event$O $(OX)\export$O $(OX)\file$O $(OX)\finfo$O $(OX)\graph$O $(OX)\gzip$O $(OX)\http$O $(OX)\http_socket$O $(OX)\http_ssl$O $(OX)\http_transport$O $(OX)\import$O $(OX)\info$O $(OX)\leaf$O $(OX)\login$O $(OX)\main$O $(OX)\manifest$O $(OX)\md5$O $(OX)\merge$O $(OX)\merge3$O $(OX)\name$O $(OX)\path$O $(OX)\pivot$O $(OX)\popen$O $(OX)\pqueue$O $(OX)\printf$O $(OX)\rebuild$O $(OX)\report$O $(OX)\rss$O $(OX)\schema$O $(OX)\search$O $(OX)\setup$O $(OX)\sha1$O $(OX)\shun$O $(OX)\skins$O $(OX)\sqlcmd$O $(OX)\stash$O $(OX)\stat$O $(OX)\style$O $(OX)\sync$O $(OX)\tag$O $(OX)\tar$O $(OX)\th_main$O $(OX)\timeline$O $(OX)\tkt$O $(OX)\tktsetup$O $(OX)\undo$O $(OX)\update$O $(OX)\url$O $(OX)\user$O $(OX)\verify$O $(OX)\vfile$O $(OX)\wiki$O $(OX)\wikiformat$O $(OX)\winhttp$O $(OX)\xfer$O $(OX)\zip$O $(OX)\shell$O $(OX)\sqlite3$O $(OX)\th$O $(OX)\th_lang$O
4646
4747
4848
APPNAME = $(OX)\fossil$(E)
4949
5050
all: $(OX) $(APPNAME)
@@ -52,11 +52,11 @@
5252
$(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OX)\linkopts
5353
cd $(OX)
5454
link -LINK -OUT:$@ $(LIBDIR) @linkopts
5555
5656
$(OX)\linkopts: $B\win\Makefile.msc
57
- echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo graph gzip http http_socket http_ssl http_transport import info leaf login main manifest md5 merge merge3 name pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp xfer zip sqlite3 th th_lang > $@
57
+ echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo graph gzip http http_socket http_ssl http_transport import info leaf login main manifest md5 merge merge3 name path pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp xfer zip sqlite3 th th_lang > $@
5858
echo $(LIBS) >> $@
5959
6060
6161
6262
@@ -369,10 +369,16 @@
369369
$(OX)\name$O : name_.c name.h
370370
$(TCC) /Fo$@ -c name_.c
371371
372372
name_.c : $(SRCDIR)\name.c
373373
translate$E $** > $@
374
+
375
+$(OX)\path$O : path_.c path.h
376
+ $(TCC) /Fo$@ -c path_.c
377
+
378
+path_.c : $(SRCDIR)\path.c
379
+ translate$E $** > $@
374380
375381
$(OX)\pivot$O : pivot_.c pivot.h
376382
$(TCC) /Fo$@ -c pivot_.c
377383
378384
pivot_.c : $(SRCDIR)\pivot.c
@@ -581,7 +587,7 @@
581587
582588
zip_.c : $(SRCDIR)\zip.c
583589
translate$E $** > $@
584590
585591
headers: makeheaders$E page_index.h VERSION.h
586
- makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.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 configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h leaf_.c:leaf.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 popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.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 winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h
592
+ makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.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 configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h leaf_.c:leaf.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 path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.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 winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h
587593
@copy /Y nul: headers
588594
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -38,13 +38,13 @@
38 LIBS = $(ZLIB) ws2_32.lib $(SSLLIB)
39 LIBDIR = -LIBPATH:$(MSCDIR)\extra\lib -LIBPATH:$(ZLIBDIR)
40
41 SQLITE_OPTIONS = /DSQLITE_OMIT_LOAD_EXTENSION=1 /DSQLITE_THREADSAFE=0 /DSQLITE_DEFAULT_FILE_FORMAT=4 /DSQLITE_ENABLE_STAT2 /Dlocaltime=fossil_localtime /DSQLITE_ENABLE_LOCKING_STYLE=0
42
43 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
44
45 OBJ = $(OX)\add$O $(OX)\allrepo$O $(OX)\attach$O $(OX)\bag$O $(OX)\bisect$O $(OX)\blob$O $(OX)\branch$O $(OX)\browse$O $(OX)\captcha$O $(OX)\cgi$O $(OX)\checkin$O $(OX)\checkout$O $(OX)\clearsign$O $(OX)\clone$O $(OX)\comformat$O $(OX)\configure$O $(OX)\content$O $(OX)\db$O $(OX)\delta$O $(OX)\deltacmd$O $(OX)\descendants$O $(OX)\diff$O $(OX)\diffcmd$O $(OX)\doc$O $(OX)\encode$O $(OX)\event$O $(OX)\export$O $(OX)\file$O $(OX)\finfo$O $(OX)\graph$O $(OX)\gzip$O $(OX)\http$O $(OX)\http_socket$O $(OX)\http_ssl$O $(OX)\http_transport$O $(OX)\import$O $(OX)\info$O $(OX)\leaf$O $(OX)\login$O $(OX)\main$O $(OX)\manifest$O $(OX)\md5$O $(OX)\merge$O $(OX)\merge3$O $(OX)\name$O $(OX)\pivot$O $(OX)\popen$O $(OX)\pqueue$O $(OX)\printf$O $(OX)\rebuild$O $(OX)\report$O $(OX)\rss$O $(OX)\schema$O $(OX)\search$O $(OX)\setup$O $(OX)\sha1$O $(OX)\shun$O $(OX)\skins$O $(OX)\sqlcmd$O $(OX)\stash$O $(OX)\stat$O $(OX)\style$O $(OX)\sync$O $(OX)\tag$O $(OX)\tar$O $(OX)\th_main$O $(OX)\timeline$O $(OX)\tkt$O $(OX)\tktsetup$O $(OX)\undo$O $(OX)\update$O $(OX)\url$O $(OX)\user$O $(OX)\verify$O $(OX)\vfile$O $(OX)\wiki$O $(OX)\wikiformat$O $(OX)\winhttp$O $(OX)\xfer$O $(OX)\zip$O $(OX)\shell$O $(OX)\sqlite3$O $(OX)\th$O $(OX)\th_lang$O
46
47
48 APPNAME = $(OX)\fossil$(E)
49
50 all: $(OX) $(APPNAME)
@@ -52,11 +52,11 @@
52 $(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OX)\linkopts
53 cd $(OX)
54 link -LINK -OUT:$@ $(LIBDIR) @linkopts
55
56 $(OX)\linkopts: $B\win\Makefile.msc
57 echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo graph gzip http http_socket http_ssl http_transport import info leaf login main manifest md5 merge merge3 name pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp xfer zip sqlite3 th th_lang > $@
58 echo $(LIBS) >> $@
59
60
61
62
@@ -369,10 +369,16 @@
369 $(OX)\name$O : name_.c name.h
370 $(TCC) /Fo$@ -c name_.c
371
372 name_.c : $(SRCDIR)\name.c
373 translate$E $** > $@
 
 
 
 
 
 
374
375 $(OX)\pivot$O : pivot_.c pivot.h
376 $(TCC) /Fo$@ -c pivot_.c
377
378 pivot_.c : $(SRCDIR)\pivot.c
@@ -581,7 +587,7 @@
581
582 zip_.c : $(SRCDIR)\zip.c
583 translate$E $** > $@
584
585 headers: makeheaders$E page_index.h VERSION.h
586 makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.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 configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h leaf_.c:leaf.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 popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.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 winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h
587 @copy /Y nul: headers
588
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -38,13 +38,13 @@
38 LIBS = $(ZLIB) ws2_32.lib $(SSLLIB)
39 LIBDIR = -LIBPATH:$(MSCDIR)\extra\lib -LIBPATH:$(ZLIBDIR)
40
41 SQLITE_OPTIONS = /DSQLITE_OMIT_LOAD_EXTENSION=1 /DSQLITE_THREADSAFE=0 /DSQLITE_DEFAULT_FILE_FORMAT=4 /DSQLITE_ENABLE_STAT2 /Dlocaltime=fossil_localtime /DSQLITE_ENABLE_LOCKING_STYLE=0
42
43 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
44
45 OBJ = $(OX)\add$O $(OX)\allrepo$O $(OX)\attach$O $(OX)\bag$O $(OX)\bisect$O $(OX)\blob$O $(OX)\branch$O $(OX)\browse$O $(OX)\captcha$O $(OX)\cgi$O $(OX)\checkin$O $(OX)\checkout$O $(OX)\clearsign$O $(OX)\clone$O $(OX)\comformat$O $(OX)\configure$O $(OX)\content$O $(OX)\db$O $(OX)\delta$O $(OX)\deltacmd$O $(OX)\descendants$O $(OX)\diff$O $(OX)\diffcmd$O $(OX)\doc$O $(OX)\encode$O $(OX)\event$O $(OX)\export$O $(OX)\file$O $(OX)\finfo$O $(OX)\graph$O $(OX)\gzip$O $(OX)\http$O $(OX)\http_socket$O $(OX)\http_ssl$O $(OX)\http_transport$O $(OX)\import$O $(OX)\info$O $(OX)\leaf$O $(OX)\login$O $(OX)\main$O $(OX)\manifest$O $(OX)\md5$O $(OX)\merge$O $(OX)\merge3$O $(OX)\name$O $(OX)\path$O $(OX)\pivot$O $(OX)\popen$O $(OX)\pqueue$O $(OX)\printf$O $(OX)\rebuild$O $(OX)\report$O $(OX)\rss$O $(OX)\schema$O $(OX)\search$O $(OX)\setup$O $(OX)\sha1$O $(OX)\shun$O $(OX)\skins$O $(OX)\sqlcmd$O $(OX)\stash$O $(OX)\stat$O $(OX)\style$O $(OX)\sync$O $(OX)\tag$O $(OX)\tar$O $(OX)\th_main$O $(OX)\timeline$O $(OX)\tkt$O $(OX)\tktsetup$O $(OX)\undo$O $(OX)\update$O $(OX)\url$O $(OX)\user$O $(OX)\verify$O $(OX)\vfile$O $(OX)\wiki$O $(OX)\wikiformat$O $(OX)\winhttp$O $(OX)\xfer$O $(OX)\zip$O $(OX)\shell$O $(OX)\sqlite3$O $(OX)\th$O $(OX)\th_lang$O
46
47
48 APPNAME = $(OX)\fossil$(E)
49
50 all: $(OX) $(APPNAME)
@@ -52,11 +52,11 @@
52 $(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OX)\linkopts
53 cd $(OX)
54 link -LINK -OUT:$@ $(LIBDIR) @linkopts
55
56 $(OX)\linkopts: $B\win\Makefile.msc
57 echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo graph gzip http http_socket http_ssl http_transport import info leaf login main manifest md5 merge merge3 name path pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp xfer zip sqlite3 th th_lang > $@
58 echo $(LIBS) >> $@
59
60
61
62
@@ -369,10 +369,16 @@
369 $(OX)\name$O : name_.c name.h
370 $(TCC) /Fo$@ -c name_.c
371
372 name_.c : $(SRCDIR)\name.c
373 translate$E $** > $@
374
375 $(OX)\path$O : path_.c path.h
376 $(TCC) /Fo$@ -c path_.c
377
378 path_.c : $(SRCDIR)\path.c
379 translate$E $** > $@
380
381 $(OX)\pivot$O : pivot_.c pivot.h
382 $(TCC) /Fo$@ -c pivot_.c
383
384 pivot_.c : $(SRCDIR)\pivot.c
@@ -581,7 +587,7 @@
587
588 zip_.c : $(SRCDIR)\zip.c
589 translate$E $** > $@
590
591 headers: makeheaders$E page_index.h VERSION.h
592 makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.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 configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h leaf_.c:leaf.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 path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.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 winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h
593 @copy /Y nul: headers
594

Keyboard Shortcuts

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