Fossil SCM

First cut at supporting ETags: and If-None-Match: for cache control.

drh 2018-02-24 00:39 UTC trunk
Commit 94c0b8ecd1bb745bdc5415e98166e3faa696fb7ff1d6a33d57708802a9b48726
+6 -63
--- src/cgi.c
+++ src/cgi.c
@@ -228,62 +228,10 @@
228228
"Set-Cookie: %s=%t; Path=%s; HttpOnly;%s Version=1\r\n",
229229
zName, zValue, zPath, zSecure);
230230
}
231231
}
232232
233
-#if 0
234
-/*
235
-** Add an ETag header line
236
-*/
237
-static char *cgi_add_etag(char *zTxt, int nLen){
238
- MD5Context ctx;
239
- unsigned char digest[16];
240
- int i, j;
241
- char zETag[64];
242
-
243
- MD5Init(&ctx);
244
- MD5Update(&ctx,zTxt,nLen);
245
- MD5Final(digest,&ctx);
246
- for(j=i=0; i<16; i++,j+=2){
247
- bprintf(&zETag[j],sizeof(zETag)-j,"%02x",(int)digest[i]);
248
- }
249
- blob_appendf(&extraHeader, "ETag: %s\r\n", zETag);
250
- return fossil_strdup(zETag);
251
-}
252
-
253
-/*
254
-** Do some cache control stuff. First, we generate an ETag and include it in
255
-** the response headers. Second, we do whatever is necessary to determine if
256
-** the request was asking about caching and whether we need to send back the
257
-** response body. If we shouldn't send a body, return non-zero.
258
-**
259
-** Currently, we just check the ETag against any If-None-Match header.
260
-**
261
-** FIXME: In some cases (attachments, file contents) we could check
262
-** If-Modified-Since headers and always include Last-Modified in responses.
263
-*/
264
-static int check_cache_control(void){
265
- /* FIXME: there's some gotchas wth cookies and some headers. */
266
- char *zETag = cgi_add_etag(blob_buffer(&cgiContent),blob_size(&cgiContent));
267
- char *zMatch = P("HTTP_IF_NONE_MATCH");
268
-
269
- if( zETag!=0 && zMatch!=0 ) {
270
- char *zBuf = fossil_strdup(zMatch);
271
- if( zBuf!=0 ){
272
- char *zTok = 0;
273
- char *zPos;
274
- for( zTok = strtok_r(zBuf, ",\"",&zPos);
275
- zTok && fossil_stricmp(zTok,zETag);
276
- zTok = strtok_r(0, ",\"",&zPos)){}
277
- fossil_free(zBuf);
278
- if(zTok) return 1;
279
- }
280
- }
281
-
282
- return 0;
283
-}
284
-#endif
285233
286234
/*
287235
** Return true if the response should be sent with Content-Encoding: gzip.
288236
*/
289237
static int is_gzippable(void){
@@ -296,34 +244,29 @@
296244
/*
297245
** Do a normal HTTP reply
298246
*/
299247
void cgi_reply(void){
300248
int total_size;
249
+ char *zETag;
301250
if( iReplyStatus<=0 ){
302251
iReplyStatus = 200;
303252
zReplyStatus = "OK";
304253
}
305254
306
-#if 0
307
- if( iReplyStatus==200 && check_cache_control() ) {
308
- /* change the status to "unchanged" and we can skip sending the
309
- ** actual response body. Obviously we only do this when we _have_ a
310
- ** body (code 200).
311
- */
312
- iReplyStatus = 304;
313
- zReplyStatus = "Not Modified";
314
- }
315
-#endif
316
-
317255
if( g.fullHttpReply ){
318256
fprintf(g.httpOut, "HTTP/1.0 %d %s\r\n", iReplyStatus, zReplyStatus);
319257
fprintf(g.httpOut, "Date: %s\r\n", cgi_rfc822_datestamp(time(0)));
320258
fprintf(g.httpOut, "Connection: close\r\n");
321259
fprintf(g.httpOut, "X-UA-Compatible: IE=edge\r\n");
322260
}else{
323261
fprintf(g.httpOut, "Status: %d %s\r\n", iReplyStatus, zReplyStatus);
324262
}
263
+ zETag = etag_generate(-1);
264
+ if( zETag ){
265
+ fprintf(g.httpOut, "ETag: %s\r\n", zETag);
266
+ fprintf(g.httpOut, "Cache-Control: max-age=%d\r\n", etag_maxage());
267
+ }
325268
326269
if( blob_size(&extraHeader)>0 ){
327270
fprintf(g.httpOut, "%s", blob_buffer(&extraHeader));
328271
}
329272
330273
--- src/cgi.c
+++ src/cgi.c
@@ -228,62 +228,10 @@
228 "Set-Cookie: %s=%t; Path=%s; HttpOnly;%s Version=1\r\n",
229 zName, zValue, zPath, zSecure);
230 }
231 }
232
233 #if 0
234 /*
235 ** Add an ETag header line
236 */
237 static char *cgi_add_etag(char *zTxt, int nLen){
238 MD5Context ctx;
239 unsigned char digest[16];
240 int i, j;
241 char zETag[64];
242
243 MD5Init(&ctx);
244 MD5Update(&ctx,zTxt,nLen);
245 MD5Final(digest,&ctx);
246 for(j=i=0; i<16; i++,j+=2){
247 bprintf(&zETag[j],sizeof(zETag)-j,"%02x",(int)digest[i]);
248 }
249 blob_appendf(&extraHeader, "ETag: %s\r\n", zETag);
250 return fossil_strdup(zETag);
251 }
252
253 /*
254 ** Do some cache control stuff. First, we generate an ETag and include it in
255 ** the response headers. Second, we do whatever is necessary to determine if
256 ** the request was asking about caching and whether we need to send back the
257 ** response body. If we shouldn't send a body, return non-zero.
258 **
259 ** Currently, we just check the ETag against any If-None-Match header.
260 **
261 ** FIXME: In some cases (attachments, file contents) we could check
262 ** If-Modified-Since headers and always include Last-Modified in responses.
263 */
264 static int check_cache_control(void){
265 /* FIXME: there's some gotchas wth cookies and some headers. */
266 char *zETag = cgi_add_etag(blob_buffer(&cgiContent),blob_size(&cgiContent));
267 char *zMatch = P("HTTP_IF_NONE_MATCH");
268
269 if( zETag!=0 && zMatch!=0 ) {
270 char *zBuf = fossil_strdup(zMatch);
271 if( zBuf!=0 ){
272 char *zTok = 0;
273 char *zPos;
274 for( zTok = strtok_r(zBuf, ",\"",&zPos);
275 zTok && fossil_stricmp(zTok,zETag);
276 zTok = strtok_r(0, ",\"",&zPos)){}
277 fossil_free(zBuf);
278 if(zTok) return 1;
279 }
280 }
281
282 return 0;
283 }
284 #endif
285
286 /*
287 ** Return true if the response should be sent with Content-Encoding: gzip.
288 */
289 static int is_gzippable(void){
@@ -296,34 +244,29 @@
296 /*
297 ** Do a normal HTTP reply
298 */
299 void cgi_reply(void){
300 int total_size;
 
301 if( iReplyStatus<=0 ){
302 iReplyStatus = 200;
303 zReplyStatus = "OK";
304 }
305
306 #if 0
307 if( iReplyStatus==200 && check_cache_control() ) {
308 /* change the status to "unchanged" and we can skip sending the
309 ** actual response body. Obviously we only do this when we _have_ a
310 ** body (code 200).
311 */
312 iReplyStatus = 304;
313 zReplyStatus = "Not Modified";
314 }
315 #endif
316
317 if( g.fullHttpReply ){
318 fprintf(g.httpOut, "HTTP/1.0 %d %s\r\n", iReplyStatus, zReplyStatus);
319 fprintf(g.httpOut, "Date: %s\r\n", cgi_rfc822_datestamp(time(0)));
320 fprintf(g.httpOut, "Connection: close\r\n");
321 fprintf(g.httpOut, "X-UA-Compatible: IE=edge\r\n");
322 }else{
323 fprintf(g.httpOut, "Status: %d %s\r\n", iReplyStatus, zReplyStatus);
324 }
 
 
 
 
 
325
326 if( blob_size(&extraHeader)>0 ){
327 fprintf(g.httpOut, "%s", blob_buffer(&extraHeader));
328 }
329
330
--- src/cgi.c
+++ src/cgi.c
@@ -228,62 +228,10 @@
228 "Set-Cookie: %s=%t; Path=%s; HttpOnly;%s Version=1\r\n",
229 zName, zValue, zPath, zSecure);
230 }
231 }
232
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
233
234 /*
235 ** Return true if the response should be sent with Content-Encoding: gzip.
236 */
237 static int is_gzippable(void){
@@ -296,34 +244,29 @@
244 /*
245 ** Do a normal HTTP reply
246 */
247 void cgi_reply(void){
248 int total_size;
249 char *zETag;
250 if( iReplyStatus<=0 ){
251 iReplyStatus = 200;
252 zReplyStatus = "OK";
253 }
254
 
 
 
 
 
 
 
 
 
 
 
255 if( g.fullHttpReply ){
256 fprintf(g.httpOut, "HTTP/1.0 %d %s\r\n", iReplyStatus, zReplyStatus);
257 fprintf(g.httpOut, "Date: %s\r\n", cgi_rfc822_datestamp(time(0)));
258 fprintf(g.httpOut, "Connection: close\r\n");
259 fprintf(g.httpOut, "X-UA-Compatible: IE=edge\r\n");
260 }else{
261 fprintf(g.httpOut, "Status: %d %s\r\n", iReplyStatus, zReplyStatus);
262 }
263 zETag = etag_generate(-1);
264 if( zETag ){
265 fprintf(g.httpOut, "ETag: %s\r\n", zETag);
266 fprintf(g.httpOut, "Cache-Control: max-age=%d\r\n", etag_maxage());
267 }
268
269 if( blob_size(&extraHeader)>0 ){
270 fprintf(g.httpOut, "%s", blob_buffer(&extraHeader));
271 }
272
273
--- src/cookies.c
+++ src/cookies.c
@@ -123,10 +123,11 @@
123123
const char *zQVal = P(zQP);
124124
int i;
125125
cookie_parse();
126126
for(i=0; i<cookies.nParam && strcmp(zPName,cookies.aParam[i].zPName); i++){}
127127
if( zQVal==0 && (flags & COOKIE_READ)!=0 && i<cookies.nParam ){
128
+ etag_require(ETAG_COOKIE);
128129
cgi_set_parameter_nocopy(zQP, cookies.aParam[i].zPValue, 1);
129130
return;
130131
}
131132
if( zQVal==0 ) zQVal = zDflt;
132133
if( (flags & COOKIE_WRITE)!=0
133134
134135
ADDED src/etag.c
--- src/cookies.c
+++ src/cookies.c
@@ -123,10 +123,11 @@
123 const char *zQVal = P(zQP);
124 int i;
125 cookie_parse();
126 for(i=0; i<cookies.nParam && strcmp(zPName,cookies.aParam[i].zPName); i++){}
127 if( zQVal==0 && (flags & COOKIE_READ)!=0 && i<cookies.nParam ){
 
128 cgi_set_parameter_nocopy(zQP, cookies.aParam[i].zPValue, 1);
129 return;
130 }
131 if( zQVal==0 ) zQVal = zDflt;
132 if( (flags & COOKIE_WRITE)!=0
133
134 DDED src/etag.c
--- src/cookies.c
+++ src/cookies.c
@@ -123,10 +123,11 @@
123 const char *zQVal = P(zQP);
124 int i;
125 cookie_parse();
126 for(i=0; i<cookies.nParam && strcmp(zPName,cookies.aParam[i].zPName); i++){}
127 if( zQVal==0 && (flags & COOKIE_READ)!=0 && i<cookies.nParam ){
128 etag_require(ETAG_COOKIE);
129 cgi_set_parameter_nocopy(zQP, cookies.aParam[i].zPValue, 1);
130 return;
131 }
132 if( zQVal==0 ) zQVal = zDflt;
133 if( (flags & COOKIE_WRITE)!=0
134
135 DDED src/etag.c
+16
--- a/src/etag.c
+++ b/src/etag.c
@@ -0,0 +1,16 @@
1
+/*
2
+** Copyright (c) 2018 iMaxAge = 86400;MATCH");
3
+ if( zIfNoneMatch==0 ) return;
4
+ *
5
+*(mEtag & code)==codeint mtimeDYNAMIC 0x08 return;
6
+ *
7
+*(mEtag & code)==codeint mtime/*
8
+** Copyright (c) 2018 iMaxAge = 86400;MATCH");
9
+ if( zIfNoneMatch==0 ) return;
10
+ *
11
+*(mEtag & code)==codeint mtimeTag;
12
+ *
13
+*(mEtag /*
14
+** CopyiKey
15
+*/
16
+|| zTag[0]>=5
--- a/src/etag.c
+++ b/src/etag.c
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/src/etag.c
+++ b/src/etag.c
@@ -0,0 +1,16 @@
1 /*
2 ** Copyright (c) 2018 iMaxAge = 86400;MATCH");
3 if( zIfNoneMatch==0 ) return;
4 *
5 *(mEtag & code)==codeint mtimeDYNAMIC 0x08 return;
6 *
7 *(mEtag & code)==codeint mtime/*
8 ** Copyright (c) 2018 iMaxAge = 86400;MATCH");
9 if( zIfNoneMatch==0 ) return;
10 *
11 *(mEtag & code)==codeint mtimeTag;
12 *
13 *(mEtag /*
14 ** CopyiKey
15 */
16 || zTag[0]>=5
+11
--- src/main.c
+++ src/main.c
@@ -1399,10 +1399,11 @@
13991399
const char *zPathInfo = PD("PATH_INFO", "");
14001400
char *zPath = NULL;
14011401
int i;
14021402
const CmdOrPage *pCmd = 0;
14031403
const char *zBase = g.zRepositoryName;
1404
+ const char *zETag = 0;
14041405
14051406
/* Handle universal query parameters */
14061407
if( PB("utc") ){
14071408
g.fTimeFormat = 1;
14081409
}else if( PB("localtime") ){
@@ -1627,10 +1628,19 @@
16271628
/* Special case: If the content mimetype shows that it is "fossil sync"
16281629
** payload, then pretend that the PATH_INFO is /xfer so that we always
16291630
** invoke the sync page. */
16301631
zPathInfo = "/xfer";
16311632
}
1633
+
1634
+ /* Check for an ETAG line
1635
+ */
1636
+ zETag = P("HTTP_IF_NONE_MATCH");
1637
+ if( etag_valid(zETag) ){
1638
+ cgi_set_status(304, "Not Modified");
1639
+ cgi_reply();
1640
+ return;
1641
+ }
16321642
16331643
/* Use the first element of PATH_INFO as the page name
16341644
** and deliver the appropriate page back to the user.
16351645
*/
16361646
set_base_url(0);
@@ -1764,10 +1774,11 @@
17641774
if( !g.fNoThHook ){
17651775
rc = Th_WebpageHook(pCmd->zName+1, pCmd->eCmdFlags);
17661776
}else{
17671777
rc = TH_OK;
17681778
}
1779
+ etag_require(CMDFLAG_TO_ETAG(pCmd->eType));
17691780
if( rc==TH_OK || rc==TH_RETURN || rc==TH_CONTINUE ){
17701781
if( rc==TH_OK || rc==TH_RETURN ){
17711782
#endif
17721783
pCmd->xFunc();
17731784
#ifdef FOSSIL_ENABLE_TH1_HOOKS
17741785
--- src/main.c
+++ src/main.c
@@ -1399,10 +1399,11 @@
1399 const char *zPathInfo = PD("PATH_INFO", "");
1400 char *zPath = NULL;
1401 int i;
1402 const CmdOrPage *pCmd = 0;
1403 const char *zBase = g.zRepositoryName;
 
1404
1405 /* Handle universal query parameters */
1406 if( PB("utc") ){
1407 g.fTimeFormat = 1;
1408 }else if( PB("localtime") ){
@@ -1627,10 +1628,19 @@
1627 /* Special case: If the content mimetype shows that it is "fossil sync"
1628 ** payload, then pretend that the PATH_INFO is /xfer so that we always
1629 ** invoke the sync page. */
1630 zPathInfo = "/xfer";
1631 }
 
 
 
 
 
 
 
 
 
1632
1633 /* Use the first element of PATH_INFO as the page name
1634 ** and deliver the appropriate page back to the user.
1635 */
1636 set_base_url(0);
@@ -1764,10 +1774,11 @@
1764 if( !g.fNoThHook ){
1765 rc = Th_WebpageHook(pCmd->zName+1, pCmd->eCmdFlags);
1766 }else{
1767 rc = TH_OK;
1768 }
 
1769 if( rc==TH_OK || rc==TH_RETURN || rc==TH_CONTINUE ){
1770 if( rc==TH_OK || rc==TH_RETURN ){
1771 #endif
1772 pCmd->xFunc();
1773 #ifdef FOSSIL_ENABLE_TH1_HOOKS
1774
--- src/main.c
+++ src/main.c
@@ -1399,10 +1399,11 @@
1399 const char *zPathInfo = PD("PATH_INFO", "");
1400 char *zPath = NULL;
1401 int i;
1402 const CmdOrPage *pCmd = 0;
1403 const char *zBase = g.zRepositoryName;
1404 const char *zETag = 0;
1405
1406 /* Handle universal query parameters */
1407 if( PB("utc") ){
1408 g.fTimeFormat = 1;
1409 }else if( PB("localtime") ){
@@ -1627,10 +1628,19 @@
1628 /* Special case: If the content mimetype shows that it is "fossil sync"
1629 ** payload, then pretend that the PATH_INFO is /xfer so that we always
1630 ** invoke the sync page. */
1631 zPathInfo = "/xfer";
1632 }
1633
1634 /* Check for an ETAG line
1635 */
1636 zETag = P("HTTP_IF_NONE_MATCH");
1637 if( etag_valid(zETag) ){
1638 cgi_set_status(304, "Not Modified");
1639 cgi_reply();
1640 return;
1641 }
1642
1643 /* Use the first element of PATH_INFO as the page name
1644 ** and deliver the appropriate page back to the user.
1645 */
1646 set_base_url(0);
@@ -1764,10 +1774,11 @@
1774 if( !g.fNoThHook ){
1775 rc = Th_WebpageHook(pCmd->zName+1, pCmd->eCmdFlags);
1776 }else{
1777 rc = TH_OK;
1778 }
1779 etag_require(CMDFLAG_TO_ETAG(pCmd->eType));
1780 if( rc==TH_OK || rc==TH_RETURN || rc==TH_CONTINUE ){
1781 if( rc==TH_OK || rc==TH_RETURN ){
1782 #endif
1783 pCmd->xFunc();
1784 #ifdef FOSSIL_ENABLE_TH1_HOOKS
1785
+12
--- src/main.mk
+++ src/main.mk
@@ -43,10 +43,11 @@
4343
$(SRCDIR)/diff.c \
4444
$(SRCDIR)/diffcmd.c \
4545
$(SRCDIR)/dispatch.c \
4646
$(SRCDIR)/doc.c \
4747
$(SRCDIR)/encode.c \
48
+ $(SRCDIR)/etag.c \
4849
$(SRCDIR)/event.c \
4950
$(SRCDIR)/export.c \
5051
$(SRCDIR)/file.c \
5152
$(SRCDIR)/finfo.c \
5253
$(SRCDIR)/foci.c \
@@ -243,10 +244,11 @@
243244
$(OBJDIR)/diff_.c \
244245
$(OBJDIR)/diffcmd_.c \
245246
$(OBJDIR)/dispatch_.c \
246247
$(OBJDIR)/doc_.c \
247248
$(OBJDIR)/encode_.c \
249
+ $(OBJDIR)/etag_.c \
248250
$(OBJDIR)/event_.c \
249251
$(OBJDIR)/export_.c \
250252
$(OBJDIR)/file_.c \
251253
$(OBJDIR)/finfo_.c \
252254
$(OBJDIR)/foci_.c \
@@ -372,10 +374,11 @@
372374
$(OBJDIR)/diff.o \
373375
$(OBJDIR)/diffcmd.o \
374376
$(OBJDIR)/dispatch.o \
375377
$(OBJDIR)/doc.o \
376378
$(OBJDIR)/encode.o \
379
+ $(OBJDIR)/etag.o \
377380
$(OBJDIR)/event.o \
378381
$(OBJDIR)/export.o \
379382
$(OBJDIR)/file.o \
380383
$(OBJDIR)/finfo.o \
381384
$(OBJDIR)/foci.o \
@@ -673,10 +676,11 @@
673676
$(OBJDIR)/diff_.c:$(OBJDIR)/diff.h \
674677
$(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h \
675678
$(OBJDIR)/dispatch_.c:$(OBJDIR)/dispatch.h \
676679
$(OBJDIR)/doc_.c:$(OBJDIR)/doc.h \
677680
$(OBJDIR)/encode_.c:$(OBJDIR)/encode.h \
681
+ $(OBJDIR)/etag_.c:$(OBJDIR)/etag.h \
678682
$(OBJDIR)/event_.c:$(OBJDIR)/event.h \
679683
$(OBJDIR)/export_.c:$(OBJDIR)/export.h \
680684
$(OBJDIR)/file_.c:$(OBJDIR)/file.h \
681685
$(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \
682686
$(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \
@@ -1016,10 +1020,18 @@
10161020
10171021
$(OBJDIR)/encode.o: $(OBJDIR)/encode_.c $(OBJDIR)/encode.h $(SRCDIR)/config.h
10181022
$(XTCC) -o $(OBJDIR)/encode.o -c $(OBJDIR)/encode_.c
10191023
10201024
$(OBJDIR)/encode.h: $(OBJDIR)/headers
1025
+
1026
+$(OBJDIR)/etag_.c: $(SRCDIR)/etag.c $(OBJDIR)/translate
1027
+ $(OBJDIR)/translate $(SRCDIR)/etag.c >$@
1028
+
1029
+$(OBJDIR)/etag.o: $(OBJDIR)/etag_.c $(OBJDIR)/etag.h $(SRCDIR)/config.h
1030
+ $(XTCC) -o $(OBJDIR)/etag.o -c $(OBJDIR)/etag_.c
1031
+
1032
+$(OBJDIR)/etag.h: $(OBJDIR)/headers
10211033
10221034
$(OBJDIR)/event_.c: $(SRCDIR)/event.c $(OBJDIR)/translate
10231035
$(OBJDIR)/translate $(SRCDIR)/event.c >$@
10241036
10251037
$(OBJDIR)/event.o: $(OBJDIR)/event_.c $(OBJDIR)/event.h $(SRCDIR)/config.h
10261038
--- src/main.mk
+++ src/main.mk
@@ -43,10 +43,11 @@
43 $(SRCDIR)/diff.c \
44 $(SRCDIR)/diffcmd.c \
45 $(SRCDIR)/dispatch.c \
46 $(SRCDIR)/doc.c \
47 $(SRCDIR)/encode.c \
 
48 $(SRCDIR)/event.c \
49 $(SRCDIR)/export.c \
50 $(SRCDIR)/file.c \
51 $(SRCDIR)/finfo.c \
52 $(SRCDIR)/foci.c \
@@ -243,10 +244,11 @@
243 $(OBJDIR)/diff_.c \
244 $(OBJDIR)/diffcmd_.c \
245 $(OBJDIR)/dispatch_.c \
246 $(OBJDIR)/doc_.c \
247 $(OBJDIR)/encode_.c \
 
248 $(OBJDIR)/event_.c \
249 $(OBJDIR)/export_.c \
250 $(OBJDIR)/file_.c \
251 $(OBJDIR)/finfo_.c \
252 $(OBJDIR)/foci_.c \
@@ -372,10 +374,11 @@
372 $(OBJDIR)/diff.o \
373 $(OBJDIR)/diffcmd.o \
374 $(OBJDIR)/dispatch.o \
375 $(OBJDIR)/doc.o \
376 $(OBJDIR)/encode.o \
 
377 $(OBJDIR)/event.o \
378 $(OBJDIR)/export.o \
379 $(OBJDIR)/file.o \
380 $(OBJDIR)/finfo.o \
381 $(OBJDIR)/foci.o \
@@ -673,10 +676,11 @@
673 $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h \
674 $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h \
675 $(OBJDIR)/dispatch_.c:$(OBJDIR)/dispatch.h \
676 $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h \
677 $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h \
 
678 $(OBJDIR)/event_.c:$(OBJDIR)/event.h \
679 $(OBJDIR)/export_.c:$(OBJDIR)/export.h \
680 $(OBJDIR)/file_.c:$(OBJDIR)/file.h \
681 $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \
682 $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \
@@ -1016,10 +1020,18 @@
1016
1017 $(OBJDIR)/encode.o: $(OBJDIR)/encode_.c $(OBJDIR)/encode.h $(SRCDIR)/config.h
1018 $(XTCC) -o $(OBJDIR)/encode.o -c $(OBJDIR)/encode_.c
1019
1020 $(OBJDIR)/encode.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
 
1021
1022 $(OBJDIR)/event_.c: $(SRCDIR)/event.c $(OBJDIR)/translate
1023 $(OBJDIR)/translate $(SRCDIR)/event.c >$@
1024
1025 $(OBJDIR)/event.o: $(OBJDIR)/event_.c $(OBJDIR)/event.h $(SRCDIR)/config.h
1026
--- src/main.mk
+++ src/main.mk
@@ -43,10 +43,11 @@
43 $(SRCDIR)/diff.c \
44 $(SRCDIR)/diffcmd.c \
45 $(SRCDIR)/dispatch.c \
46 $(SRCDIR)/doc.c \
47 $(SRCDIR)/encode.c \
48 $(SRCDIR)/etag.c \
49 $(SRCDIR)/event.c \
50 $(SRCDIR)/export.c \
51 $(SRCDIR)/file.c \
52 $(SRCDIR)/finfo.c \
53 $(SRCDIR)/foci.c \
@@ -243,10 +244,11 @@
244 $(OBJDIR)/diff_.c \
245 $(OBJDIR)/diffcmd_.c \
246 $(OBJDIR)/dispatch_.c \
247 $(OBJDIR)/doc_.c \
248 $(OBJDIR)/encode_.c \
249 $(OBJDIR)/etag_.c \
250 $(OBJDIR)/event_.c \
251 $(OBJDIR)/export_.c \
252 $(OBJDIR)/file_.c \
253 $(OBJDIR)/finfo_.c \
254 $(OBJDIR)/foci_.c \
@@ -372,10 +374,11 @@
374 $(OBJDIR)/diff.o \
375 $(OBJDIR)/diffcmd.o \
376 $(OBJDIR)/dispatch.o \
377 $(OBJDIR)/doc.o \
378 $(OBJDIR)/encode.o \
379 $(OBJDIR)/etag.o \
380 $(OBJDIR)/event.o \
381 $(OBJDIR)/export.o \
382 $(OBJDIR)/file.o \
383 $(OBJDIR)/finfo.o \
384 $(OBJDIR)/foci.o \
@@ -673,10 +676,11 @@
676 $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h \
677 $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h \
678 $(OBJDIR)/dispatch_.c:$(OBJDIR)/dispatch.h \
679 $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h \
680 $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h \
681 $(OBJDIR)/etag_.c:$(OBJDIR)/etag.h \
682 $(OBJDIR)/event_.c:$(OBJDIR)/event.h \
683 $(OBJDIR)/export_.c:$(OBJDIR)/export.h \
684 $(OBJDIR)/file_.c:$(OBJDIR)/file.h \
685 $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \
686 $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \
@@ -1016,10 +1020,18 @@
1020
1021 $(OBJDIR)/encode.o: $(OBJDIR)/encode_.c $(OBJDIR)/encode.h $(SRCDIR)/config.h
1022 $(XTCC) -o $(OBJDIR)/encode.o -c $(OBJDIR)/encode_.c
1023
1024 $(OBJDIR)/encode.h: $(OBJDIR)/headers
1025
1026 $(OBJDIR)/etag_.c: $(SRCDIR)/etag.c $(OBJDIR)/translate
1027 $(OBJDIR)/translate $(SRCDIR)/etag.c >$@
1028
1029 $(OBJDIR)/etag.o: $(OBJDIR)/etag_.c $(OBJDIR)/etag.h $(SRCDIR)/config.h
1030 $(XTCC) -o $(OBJDIR)/etag.o -c $(OBJDIR)/etag_.c
1031
1032 $(OBJDIR)/etag.h: $(OBJDIR)/headers
1033
1034 $(OBJDIR)/event_.c: $(SRCDIR)/event.c $(OBJDIR)/translate
1035 $(OBJDIR)/translate $(SRCDIR)/event.c >$@
1036
1037 $(OBJDIR)/event.o: $(OBJDIR)/event_.c $(OBJDIR)/event.h $(SRCDIR)/config.h
1038
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -55,10 +55,11 @@
5555
diff
5656
diffcmd
5757
dispatch
5858
doc
5959
encode
60
+ etag
6061
event
6162
export
6263
file
6364
finfo
6465
foci
6566
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -55,10 +55,11 @@
55 diff
56 diffcmd
57 dispatch
58 doc
59 encode
 
60 event
61 export
62 file
63 finfo
64 foci
65
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -55,10 +55,11 @@
55 diff
56 diffcmd
57 dispatch
58 doc
59 encode
60 etag
61 event
62 export
63 file
64 finfo
65 foci
66
+16 -1
--- src/mkindex.c
+++ src/mkindex.c
@@ -89,10 +89,16 @@
8989
#define CMDFLAG_COMMAND 0x0010 /* A command */
9090
#define CMDFLAG_SETTING 0x0020 /* A setting */
9191
#define CMDFLAG_VERSIONABLE 0x0040 /* A versionable setting */
9292
#define CMDFLAG_BLOCKTEXT 0x0080 /* Multi-line text setting */
9393
#define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */
94
+#define CMDFLAG_CONST 0x0000 /* ETAG_CONST */
95
+#define CMDFLAG_CONFIG 0x1000 /* ETAG_CONFIG */
96
+#define CMDFLAG_DATA 0x2000 /* ETAG_DATA */
97
+#define CMDFLAG_DYNAMIC 0x8000 /* ETAG_DYNAMIC - on by default */
98
+#define CMDFLAG_ETAG 0xf000 /* Mask of all ETAG entries */
99
+#define CMDFLAG_TO_ETAG(X) ((X)>>12)
94100
/**************************************************************************/
95101
96102
/*
97103
** Each entry looks like this:
98104
*/
@@ -198,11 +204,11 @@
198204
return;
199205
}
200206
while( fossil_isspace(zLine[i]) ){ i++; }
201207
if( zLine[i]=='/' ) i++;
202208
for(j=0; zLine[i+j] && !fossil_isspace(zLine[i+j]); j++){}
203
- aEntry[nUsed].eType = eType;
209
+ aEntry[nUsed].eType = eType | CMDFLAG_DYNAMIC;
204210
if( eType & CMDFLAG_WEBPAGE ){
205211
aEntry[nUsed].zPath = string_dup(&zLine[i-1], j+1);
206212
aEntry[nUsed].zPath[0] = '/';
207213
}else{
208214
aEntry[nUsed].zPath = string_dup(&zLine[i], j);
@@ -236,10 +242,19 @@
236242
aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_TEST);
237243
aEntry[nUsed].eType |= CMDFLAG_2ND_TIER;
238244
}else if( j==4 && strncmp(&zLine[i], "test", j)==0 ){
239245
aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_2ND_TIER);
240246
aEntry[nUsed].eType |= CMDFLAG_TEST;
247
+ }else if( j==5 && strncmp(&zLine[i], "const", j)==0 ){
248
+ aEntry[nUsed].eType &= ~CMDFLAG_ETAG;
249
+ aEntry[nUsed].eType |= CMDFLAG_CONST;
250
+ }else if( j==6 && strncmp(&zLine[i], "config", j)==0 ){
251
+ aEntry[nUsed].eType &= ~CMDFLAG_ETAG;
252
+ aEntry[nUsed].eType |= CMDFLAG_CONFIG;
253
+ }else if( j==4 && strncmp(&zLine[i], "data", j)==0 ){
254
+ aEntry[nUsed].eType &= ~CMDFLAG_ETAG;
255
+ aEntry[nUsed].eType |= CMDFLAG_DATA;
241256
}else if( j==7 && strncmp(&zLine[i], "boolean", j)==0 ){
242257
aEntry[nUsed].eType &= ~(CMDFLAG_BLOCKTEXT);
243258
aEntry[nUsed].iWidth = 0;
244259
aEntry[nUsed].eType |= CMDFLAG_BOOLEAN;
245260
}else if( j==10 && strncmp(&zLine[i], "block-text", j)==0 ){
246261
--- src/mkindex.c
+++ src/mkindex.c
@@ -89,10 +89,16 @@
89 #define CMDFLAG_COMMAND 0x0010 /* A command */
90 #define CMDFLAG_SETTING 0x0020 /* A setting */
91 #define CMDFLAG_VERSIONABLE 0x0040 /* A versionable setting */
92 #define CMDFLAG_BLOCKTEXT 0x0080 /* Multi-line text setting */
93 #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */
 
 
 
 
 
 
94 /**************************************************************************/
95
96 /*
97 ** Each entry looks like this:
98 */
@@ -198,11 +204,11 @@
198 return;
199 }
200 while( fossil_isspace(zLine[i]) ){ i++; }
201 if( zLine[i]=='/' ) i++;
202 for(j=0; zLine[i+j] && !fossil_isspace(zLine[i+j]); j++){}
203 aEntry[nUsed].eType = eType;
204 if( eType & CMDFLAG_WEBPAGE ){
205 aEntry[nUsed].zPath = string_dup(&zLine[i-1], j+1);
206 aEntry[nUsed].zPath[0] = '/';
207 }else{
208 aEntry[nUsed].zPath = string_dup(&zLine[i], j);
@@ -236,10 +242,19 @@
236 aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_TEST);
237 aEntry[nUsed].eType |= CMDFLAG_2ND_TIER;
238 }else if( j==4 && strncmp(&zLine[i], "test", j)==0 ){
239 aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_2ND_TIER);
240 aEntry[nUsed].eType |= CMDFLAG_TEST;
 
 
 
 
 
 
 
 
 
241 }else if( j==7 && strncmp(&zLine[i], "boolean", j)==0 ){
242 aEntry[nUsed].eType &= ~(CMDFLAG_BLOCKTEXT);
243 aEntry[nUsed].iWidth = 0;
244 aEntry[nUsed].eType |= CMDFLAG_BOOLEAN;
245 }else if( j==10 && strncmp(&zLine[i], "block-text", j)==0 ){
246
--- src/mkindex.c
+++ src/mkindex.c
@@ -89,10 +89,16 @@
89 #define CMDFLAG_COMMAND 0x0010 /* A command */
90 #define CMDFLAG_SETTING 0x0020 /* A setting */
91 #define CMDFLAG_VERSIONABLE 0x0040 /* A versionable setting */
92 #define CMDFLAG_BLOCKTEXT 0x0080 /* Multi-line text setting */
93 #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */
94 #define CMDFLAG_CONST 0x0000 /* ETAG_CONST */
95 #define CMDFLAG_CONFIG 0x1000 /* ETAG_CONFIG */
96 #define CMDFLAG_DATA 0x2000 /* ETAG_DATA */
97 #define CMDFLAG_DYNAMIC 0x8000 /* ETAG_DYNAMIC - on by default */
98 #define CMDFLAG_ETAG 0xf000 /* Mask of all ETAG entries */
99 #define CMDFLAG_TO_ETAG(X) ((X)>>12)
100 /**************************************************************************/
101
102 /*
103 ** Each entry looks like this:
104 */
@@ -198,11 +204,11 @@
204 return;
205 }
206 while( fossil_isspace(zLine[i]) ){ i++; }
207 if( zLine[i]=='/' ) i++;
208 for(j=0; zLine[i+j] && !fossil_isspace(zLine[i+j]); j++){}
209 aEntry[nUsed].eType = eType | CMDFLAG_DYNAMIC;
210 if( eType & CMDFLAG_WEBPAGE ){
211 aEntry[nUsed].zPath = string_dup(&zLine[i-1], j+1);
212 aEntry[nUsed].zPath[0] = '/';
213 }else{
214 aEntry[nUsed].zPath = string_dup(&zLine[i], j);
@@ -236,10 +242,19 @@
242 aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_TEST);
243 aEntry[nUsed].eType |= CMDFLAG_2ND_TIER;
244 }else if( j==4 && strncmp(&zLine[i], "test", j)==0 ){
245 aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_2ND_TIER);
246 aEntry[nUsed].eType |= CMDFLAG_TEST;
247 }else if( j==5 && strncmp(&zLine[i], "const", j)==0 ){
248 aEntry[nUsed].eType &= ~CMDFLAG_ETAG;
249 aEntry[nUsed].eType |= CMDFLAG_CONST;
250 }else if( j==6 && strncmp(&zLine[i], "config", j)==0 ){
251 aEntry[nUsed].eType &= ~CMDFLAG_ETAG;
252 aEntry[nUsed].eType |= CMDFLAG_CONFIG;
253 }else if( j==4 && strncmp(&zLine[i], "data", j)==0 ){
254 aEntry[nUsed].eType &= ~CMDFLAG_ETAG;
255 aEntry[nUsed].eType |= CMDFLAG_DATA;
256 }else if( j==7 && strncmp(&zLine[i], "boolean", j)==0 ){
257 aEntry[nUsed].eType &= ~(CMDFLAG_BLOCKTEXT);
258 aEntry[nUsed].iWidth = 0;
259 aEntry[nUsed].eType |= CMDFLAG_BOOLEAN;
260 }else if( j==10 && strncmp(&zLine[i], "block-text", j)==0 ){
261
+16
--- src/setup.c
+++ src/setup.c
@@ -18,10 +18,25 @@
1818
** Implementation of the Setup page
1919
*/
2020
#include "config.h"
2121
#include <assert.h>
2222
#include "setup.h"
23
+
24
+/*
25
+** Increment the "cfgcnt" variable, so that ETags will know that
26
+** the configuration has changed.
27
+*/
28
+void setup_incr_cfgcnt(void){
29
+ static int once = 1;
30
+ if( once ){
31
+ once = 0;
32
+ db_multi_exec("UPDATE config SET value=value+1 WHERE name='cfgcnt'");
33
+ if( db_changes()==0 ){
34
+ db_multi_exec("INSERT INTO config(name,value) VALUES('cfgcnt',1)");
35
+ }
36
+ }
37
+}
2338
2439
/*
2540
** Output a single entry for a menu generated using an HTML table.
2641
** If zLink is not NULL or an empty string, then it is the page that
2742
** the menu entry will hyperlink to. If zLink is NULL or "", then
@@ -496,10 +511,11 @@
496511
db_multi_exec(
497512
"REPLACE INTO user(uid,login,info,pw,cap,mtime) "
498513
"VALUES(nullif(%d,0),%Q,%Q,%Q,%Q,now())",
499514
uid, zLogin, P("info"), zPw, zCap
500515
);
516
+ setup_incr_cfgcnt();
501517
admin_log( "Updated user [%q] with capabilities [%q].",
502518
zLogin, zCap );
503519
if( atoi(PD("all","0"))>0 ){
504520
Blob sql;
505521
char *zErr = 0;
506522
--- src/setup.c
+++ src/setup.c
@@ -18,10 +18,25 @@
18 ** Implementation of the Setup page
19 */
20 #include "config.h"
21 #include <assert.h>
22 #include "setup.h"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
24 /*
25 ** Output a single entry for a menu generated using an HTML table.
26 ** If zLink is not NULL or an empty string, then it is the page that
27 ** the menu entry will hyperlink to. If zLink is NULL or "", then
@@ -496,10 +511,11 @@
496 db_multi_exec(
497 "REPLACE INTO user(uid,login,info,pw,cap,mtime) "
498 "VALUES(nullif(%d,0),%Q,%Q,%Q,%Q,now())",
499 uid, zLogin, P("info"), zPw, zCap
500 );
 
501 admin_log( "Updated user [%q] with capabilities [%q].",
502 zLogin, zCap );
503 if( atoi(PD("all","0"))>0 ){
504 Blob sql;
505 char *zErr = 0;
506
--- src/setup.c
+++ src/setup.c
@@ -18,10 +18,25 @@
18 ** Implementation of the Setup page
19 */
20 #include "config.h"
21 #include <assert.h>
22 #include "setup.h"
23
24 /*
25 ** Increment the "cfgcnt" variable, so that ETags will know that
26 ** the configuration has changed.
27 */
28 void setup_incr_cfgcnt(void){
29 static int once = 1;
30 if( once ){
31 once = 0;
32 db_multi_exec("UPDATE config SET value=value+1 WHERE name='cfgcnt'");
33 if( db_changes()==0 ){
34 db_multi_exec("INSERT INTO config(name,value) VALUES('cfgcnt',1)");
35 }
36 }
37 }
38
39 /*
40 ** Output a single entry for a menu generated using an HTML table.
41 ** If zLink is not NULL or an empty string, then it is the page that
42 ** the menu entry will hyperlink to. If zLink is NULL or "", then
@@ -496,10 +511,11 @@
511 db_multi_exec(
512 "REPLACE INTO user(uid,login,info,pw,cap,mtime) "
513 "VALUES(nullif(%d,0),%Q,%Q,%Q,%Q,now())",
514 uid, zLogin, P("info"), zPw, zCap
515 );
516 setup_incr_cfgcnt();
517 admin_log( "Updated user [%q] with capabilities [%q].",
518 zLogin, zCap );
519 if( atoi(PD("all","0"))>0 ){
520 Blob sql;
521 char *zErr = 0;
522
+2 -2
--- src/timeline.c
+++ src/timeline.c
@@ -1329,11 +1329,11 @@
13291329
/* If execution reaches this point, the pattern was empty. Return NULL. */
13301330
return 0;
13311331
}
13321332
13331333
/*
1334
-** WEBPAGE: timeline
1334
+** WEBPAGE: timeline data
13351335
**
13361336
** Query parameters:
13371337
**
13381338
** a=TIMEORTAG After this event
13391339
** b=TIMEORTAG Before this event
@@ -2510,11 +2510,11 @@
25102510
}
25112511
db_finalize(&q);
25122512
}
25132513
25142514
/*
2515
-** WEBPAGE: timewarps
2515
+** WEBPAGE: timewarps data
25162516
**
25172517
** Show all check-ins that are "timewarps". A timewarp is a
25182518
** check-in that occurs before its parent, according to the
25192519
** timestamp information on the check-in. This can only actually
25202520
** happen, of course, if a users system clock is set incorrectly.
25212521
--- src/timeline.c
+++ src/timeline.c
@@ -1329,11 +1329,11 @@
1329 /* If execution reaches this point, the pattern was empty. Return NULL. */
1330 return 0;
1331 }
1332
1333 /*
1334 ** WEBPAGE: timeline
1335 **
1336 ** Query parameters:
1337 **
1338 ** a=TIMEORTAG After this event
1339 ** b=TIMEORTAG Before this event
@@ -2510,11 +2510,11 @@
2510 }
2511 db_finalize(&q);
2512 }
2513
2514 /*
2515 ** WEBPAGE: timewarps
2516 **
2517 ** Show all check-ins that are "timewarps". A timewarp is a
2518 ** check-in that occurs before its parent, according to the
2519 ** timestamp information on the check-in. This can only actually
2520 ** happen, of course, if a users system clock is set incorrectly.
2521
--- src/timeline.c
+++ src/timeline.c
@@ -1329,11 +1329,11 @@
1329 /* If execution reaches this point, the pattern was empty. Return NULL. */
1330 return 0;
1331 }
1332
1333 /*
1334 ** WEBPAGE: timeline data
1335 **
1336 ** Query parameters:
1337 **
1338 ** a=TIMEORTAG After this event
1339 ** b=TIMEORTAG Before this event
@@ -2510,11 +2510,11 @@
2510 }
2511 db_finalize(&q);
2512 }
2513
2514 /*
2515 ** WEBPAGE: timewarps data
2516 **
2517 ** Show all check-ins that are "timewarps". A timewarp is a
2518 ** check-in that occurs before its parent, according to the
2519 ** timestamp information on the check-in. This can only actually
2520 ** happen, of course, if a users system clock is set incorrectly.
2521
+10 -4
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -28,13 +28,13 @@
2828
2929
SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_USE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB
3030
3131
SHELL_OPTIONS = -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=fossil_open -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
3232
33
-SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c foci_.c fshell_.c fusefs_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
33
+SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c encode_.c etag_.c event_.c export_.c file_.c finfo_.c foci_.c fshell_.c fusefs_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
3434
35
-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)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$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)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$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)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
35
+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)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$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)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$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)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
3636
3737
3838
RC=$(DMDIR)\bin\rcc
3939
RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
4040
@@ -49,11 +49,11 @@
4949
5050
$(OBJDIR)\fossil.res: $B\win\fossil.rc
5151
$(RC) $(RCFLAGS) -o$@ $**
5252
5353
$(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
54
- +echo add allrepo attach bag bisect blob branch browse builtin bundle cache captcha cgi checkin checkout clearsign clone comformat configure content cookies db delta deltacmd descendants diff diffcmd dispatch doc encode event export file finfo foci fshell fusefs glob graph gzip hname http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pivot popen pqueue printf publish purge rebuild regexp report rss schema search security_audit setup sha1 sha1hard sha3 shun sitemap skins sqlcmd stash stat statrep style sync tag tar th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@
54
+ +echo add allrepo attach bag bisect blob branch browse builtin bundle cache captcha cgi checkin checkout clearsign clone comformat configure content cookies db delta deltacmd descendants diff diffcmd dispatch doc encode etag event export file finfo foci fshell fusefs glob graph gzip hname http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pivot popen pqueue printf publish purge rebuild regexp report rss schema search security_audit setup sha1 sha1hard sha3 shun sitemap skins sqlcmd stash stat statrep style sync tag tar th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@
5555
+echo fossil >> $@
5656
+echo fossil >> $@
5757
+echo $(LIBS) >> $@
5858
+echo. >> $@
5959
+echo fossil >> $@
@@ -308,10 +308,16 @@
308308
$(OBJDIR)\encode$O : encode_.c encode.h
309309
$(TCC) -o$@ -c encode_.c
310310
311311
encode_.c : $(SRCDIR)\encode.c
312312
+translate$E $** > $@
313
+
314
+$(OBJDIR)\etag$O : etag_.c etag.h
315
+ $(TCC) -o$@ -c etag_.c
316
+
317
+etag_.c : $(SRCDIR)\etag.c
318
+ +translate$E $** > $@
313319
314320
$(OBJDIR)\event$O : event_.c event.h
315321
$(TCC) -o$@ -c event_.c
316322
317323
event_.c : $(SRCDIR)\event.c
@@ -892,7 +898,7 @@
892898
893899
zip_.c : $(SRCDIR)\zip.c
894900
+translate$E $** > $@
895901
896902
headers: makeheaders$E page_index.h builtin_data.h default_css.h VERSION.h
897
- +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 builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.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 cookies_.c:cookies.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 dispatch_.c:dispatch.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 foci_.c:foci.h fshell_.c:fshell.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.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 json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h piechart_.c:piechart.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.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 unicode_.c:unicode.h unversioned_.c:unversioned.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
903
+ +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 builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.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 cookies_.c:cookies.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 dispatch_.c:dispatch.h doc_.c:doc.h encode_.c:encode.h etag_.c:etag.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h foci_.c:foci.h fshell_.c:fshell.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.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 json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h piechart_.c:piechart.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.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 unicode_.c:unicode.h unversioned_.c:unversioned.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
898904
@copy /Y nul: headers
899905
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -28,13 +28,13 @@
28
29 SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_USE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB
30
31 SHELL_OPTIONS = -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=fossil_open -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
32
33 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c foci_.c fshell_.c fusefs_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
34
35 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)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$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)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$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)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
36
37
38 RC=$(DMDIR)\bin\rcc
39 RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
40
@@ -49,11 +49,11 @@
49
50 $(OBJDIR)\fossil.res: $B\win\fossil.rc
51 $(RC) $(RCFLAGS) -o$@ $**
52
53 $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
54 +echo add allrepo attach bag bisect blob branch browse builtin bundle cache captcha cgi checkin checkout clearsign clone comformat configure content cookies db delta deltacmd descendants diff diffcmd dispatch doc encode event export file finfo foci fshell fusefs glob graph gzip hname http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pivot popen pqueue printf publish purge rebuild regexp report rss schema search security_audit setup sha1 sha1hard sha3 shun sitemap skins sqlcmd stash stat statrep style sync tag tar th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@
55 +echo fossil >> $@
56 +echo fossil >> $@
57 +echo $(LIBS) >> $@
58 +echo. >> $@
59 +echo fossil >> $@
@@ -308,10 +308,16 @@
308 $(OBJDIR)\encode$O : encode_.c encode.h
309 $(TCC) -o$@ -c encode_.c
310
311 encode_.c : $(SRCDIR)\encode.c
312 +translate$E $** > $@
 
 
 
 
 
 
313
314 $(OBJDIR)\event$O : event_.c event.h
315 $(TCC) -o$@ -c event_.c
316
317 event_.c : $(SRCDIR)\event.c
@@ -892,7 +898,7 @@
892
893 zip_.c : $(SRCDIR)\zip.c
894 +translate$E $** > $@
895
896 headers: makeheaders$E page_index.h builtin_data.h default_css.h VERSION.h
897 +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 builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.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 cookies_.c:cookies.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 dispatch_.c:dispatch.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 foci_.c:foci.h fshell_.c:fshell.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.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 json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h piechart_.c:piechart.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.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 unicode_.c:unicode.h unversioned_.c:unversioned.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
898 @copy /Y nul: headers
899
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -28,13 +28,13 @@
28
29 SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_USE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB
30
31 SHELL_OPTIONS = -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=fossil_open -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
32
33 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c encode_.c etag_.c event_.c export_.c file_.c finfo_.c foci_.c fshell_.c fusefs_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
34
35 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)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$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)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$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)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
36
37
38 RC=$(DMDIR)\bin\rcc
39 RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
40
@@ -49,11 +49,11 @@
49
50 $(OBJDIR)\fossil.res: $B\win\fossil.rc
51 $(RC) $(RCFLAGS) -o$@ $**
52
53 $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
54 +echo add allrepo attach bag bisect blob branch browse builtin bundle cache captcha cgi checkin checkout clearsign clone comformat configure content cookies db delta deltacmd descendants diff diffcmd dispatch doc encode etag event export file finfo foci fshell fusefs glob graph gzip hname http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pivot popen pqueue printf publish purge rebuild regexp report rss schema search security_audit setup sha1 sha1hard sha3 shun sitemap skins sqlcmd stash stat statrep style sync tag tar th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@
55 +echo fossil >> $@
56 +echo fossil >> $@
57 +echo $(LIBS) >> $@
58 +echo. >> $@
59 +echo fossil >> $@
@@ -308,10 +308,16 @@
308 $(OBJDIR)\encode$O : encode_.c encode.h
309 $(TCC) -o$@ -c encode_.c
310
311 encode_.c : $(SRCDIR)\encode.c
312 +translate$E $** > $@
313
314 $(OBJDIR)\etag$O : etag_.c etag.h
315 $(TCC) -o$@ -c etag_.c
316
317 etag_.c : $(SRCDIR)\etag.c
318 +translate$E $** > $@
319
320 $(OBJDIR)\event$O : event_.c event.h
321 $(TCC) -o$@ -c event_.c
322
323 event_.c : $(SRCDIR)\event.c
@@ -892,7 +898,7 @@
898
899 zip_.c : $(SRCDIR)\zip.c
900 +translate$E $** > $@
901
902 headers: makeheaders$E page_index.h builtin_data.h default_css.h VERSION.h
903 +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 builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.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 cookies_.c:cookies.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 dispatch_.c:dispatch.h doc_.c:doc.h encode_.c:encode.h etag_.c:etag.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h foci_.c:foci.h fshell_.c:fshell.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.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 json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h piechart_.c:piechart.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.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 unicode_.c:unicode.h unversioned_.c:unversioned.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
904 @copy /Y nul: headers
905
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -452,10 +452,11 @@
452452
$(SRCDIR)/diff.c \
453453
$(SRCDIR)/diffcmd.c \
454454
$(SRCDIR)/dispatch.c \
455455
$(SRCDIR)/doc.c \
456456
$(SRCDIR)/encode.c \
457
+ $(SRCDIR)/etag.c \
457458
$(SRCDIR)/event.c \
458459
$(SRCDIR)/export.c \
459460
$(SRCDIR)/file.c \
460461
$(SRCDIR)/finfo.c \
461462
$(SRCDIR)/foci.c \
@@ -652,10 +653,11 @@
652653
$(OBJDIR)/diff_.c \
653654
$(OBJDIR)/diffcmd_.c \
654655
$(OBJDIR)/dispatch_.c \
655656
$(OBJDIR)/doc_.c \
656657
$(OBJDIR)/encode_.c \
658
+ $(OBJDIR)/etag_.c \
657659
$(OBJDIR)/event_.c \
658660
$(OBJDIR)/export_.c \
659661
$(OBJDIR)/file_.c \
660662
$(OBJDIR)/finfo_.c \
661663
$(OBJDIR)/foci_.c \
@@ -781,10 +783,11 @@
781783
$(OBJDIR)/diff.o \
782784
$(OBJDIR)/diffcmd.o \
783785
$(OBJDIR)/dispatch.o \
784786
$(OBJDIR)/doc.o \
785787
$(OBJDIR)/encode.o \
788
+ $(OBJDIR)/etag.o \
786789
$(OBJDIR)/event.o \
787790
$(OBJDIR)/export.o \
788791
$(OBJDIR)/file.o \
789792
$(OBJDIR)/finfo.o \
790793
$(OBJDIR)/foci.o \
@@ -1129,10 +1132,11 @@
11291132
$(OBJDIR)/diff_.c:$(OBJDIR)/diff.h \
11301133
$(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h \
11311134
$(OBJDIR)/dispatch_.c:$(OBJDIR)/dispatch.h \
11321135
$(OBJDIR)/doc_.c:$(OBJDIR)/doc.h \
11331136
$(OBJDIR)/encode_.c:$(OBJDIR)/encode.h \
1137
+ $(OBJDIR)/etag_.c:$(OBJDIR)/etag.h \
11341138
$(OBJDIR)/event_.c:$(OBJDIR)/event.h \
11351139
$(OBJDIR)/export_.c:$(OBJDIR)/export.h \
11361140
$(OBJDIR)/file_.c:$(OBJDIR)/file.h \
11371141
$(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \
11381142
$(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \
@@ -1474,10 +1478,18 @@
14741478
14751479
$(OBJDIR)/encode.o: $(OBJDIR)/encode_.c $(OBJDIR)/encode.h $(SRCDIR)/config.h
14761480
$(XTCC) -o $(OBJDIR)/encode.o -c $(OBJDIR)/encode_.c
14771481
14781482
$(OBJDIR)/encode.h: $(OBJDIR)/headers
1483
+
1484
+$(OBJDIR)/etag_.c: $(SRCDIR)/etag.c $(TRANSLATE)
1485
+ $(TRANSLATE) $(SRCDIR)/etag.c >$@
1486
+
1487
+$(OBJDIR)/etag.o: $(OBJDIR)/etag_.c $(OBJDIR)/etag.h $(SRCDIR)/config.h
1488
+ $(XTCC) -o $(OBJDIR)/etag.o -c $(OBJDIR)/etag_.c
1489
+
1490
+$(OBJDIR)/etag.h: $(OBJDIR)/headers
14791491
14801492
$(OBJDIR)/event_.c: $(SRCDIR)/event.c $(TRANSLATE)
14811493
$(TRANSLATE) $(SRCDIR)/event.c >$@
14821494
14831495
$(OBJDIR)/event.o: $(OBJDIR)/event_.c $(OBJDIR)/event.h $(SRCDIR)/config.h
14841496
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -452,10 +452,11 @@
452 $(SRCDIR)/diff.c \
453 $(SRCDIR)/diffcmd.c \
454 $(SRCDIR)/dispatch.c \
455 $(SRCDIR)/doc.c \
456 $(SRCDIR)/encode.c \
 
457 $(SRCDIR)/event.c \
458 $(SRCDIR)/export.c \
459 $(SRCDIR)/file.c \
460 $(SRCDIR)/finfo.c \
461 $(SRCDIR)/foci.c \
@@ -652,10 +653,11 @@
652 $(OBJDIR)/diff_.c \
653 $(OBJDIR)/diffcmd_.c \
654 $(OBJDIR)/dispatch_.c \
655 $(OBJDIR)/doc_.c \
656 $(OBJDIR)/encode_.c \
 
657 $(OBJDIR)/event_.c \
658 $(OBJDIR)/export_.c \
659 $(OBJDIR)/file_.c \
660 $(OBJDIR)/finfo_.c \
661 $(OBJDIR)/foci_.c \
@@ -781,10 +783,11 @@
781 $(OBJDIR)/diff.o \
782 $(OBJDIR)/diffcmd.o \
783 $(OBJDIR)/dispatch.o \
784 $(OBJDIR)/doc.o \
785 $(OBJDIR)/encode.o \
 
786 $(OBJDIR)/event.o \
787 $(OBJDIR)/export.o \
788 $(OBJDIR)/file.o \
789 $(OBJDIR)/finfo.o \
790 $(OBJDIR)/foci.o \
@@ -1129,10 +1132,11 @@
1129 $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h \
1130 $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h \
1131 $(OBJDIR)/dispatch_.c:$(OBJDIR)/dispatch.h \
1132 $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h \
1133 $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h \
 
1134 $(OBJDIR)/event_.c:$(OBJDIR)/event.h \
1135 $(OBJDIR)/export_.c:$(OBJDIR)/export.h \
1136 $(OBJDIR)/file_.c:$(OBJDIR)/file.h \
1137 $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \
1138 $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \
@@ -1474,10 +1478,18 @@
1474
1475 $(OBJDIR)/encode.o: $(OBJDIR)/encode_.c $(OBJDIR)/encode.h $(SRCDIR)/config.h
1476 $(XTCC) -o $(OBJDIR)/encode.o -c $(OBJDIR)/encode_.c
1477
1478 $(OBJDIR)/encode.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
 
1479
1480 $(OBJDIR)/event_.c: $(SRCDIR)/event.c $(TRANSLATE)
1481 $(TRANSLATE) $(SRCDIR)/event.c >$@
1482
1483 $(OBJDIR)/event.o: $(OBJDIR)/event_.c $(OBJDIR)/event.h $(SRCDIR)/config.h
1484
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -452,10 +452,11 @@
452 $(SRCDIR)/diff.c \
453 $(SRCDIR)/diffcmd.c \
454 $(SRCDIR)/dispatch.c \
455 $(SRCDIR)/doc.c \
456 $(SRCDIR)/encode.c \
457 $(SRCDIR)/etag.c \
458 $(SRCDIR)/event.c \
459 $(SRCDIR)/export.c \
460 $(SRCDIR)/file.c \
461 $(SRCDIR)/finfo.c \
462 $(SRCDIR)/foci.c \
@@ -652,10 +653,11 @@
653 $(OBJDIR)/diff_.c \
654 $(OBJDIR)/diffcmd_.c \
655 $(OBJDIR)/dispatch_.c \
656 $(OBJDIR)/doc_.c \
657 $(OBJDIR)/encode_.c \
658 $(OBJDIR)/etag_.c \
659 $(OBJDIR)/event_.c \
660 $(OBJDIR)/export_.c \
661 $(OBJDIR)/file_.c \
662 $(OBJDIR)/finfo_.c \
663 $(OBJDIR)/foci_.c \
@@ -781,10 +783,11 @@
783 $(OBJDIR)/diff.o \
784 $(OBJDIR)/diffcmd.o \
785 $(OBJDIR)/dispatch.o \
786 $(OBJDIR)/doc.o \
787 $(OBJDIR)/encode.o \
788 $(OBJDIR)/etag.o \
789 $(OBJDIR)/event.o \
790 $(OBJDIR)/export.o \
791 $(OBJDIR)/file.o \
792 $(OBJDIR)/finfo.o \
793 $(OBJDIR)/foci.o \
@@ -1129,10 +1132,11 @@
1132 $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h \
1133 $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h \
1134 $(OBJDIR)/dispatch_.c:$(OBJDIR)/dispatch.h \
1135 $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h \
1136 $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h \
1137 $(OBJDIR)/etag_.c:$(OBJDIR)/etag.h \
1138 $(OBJDIR)/event_.c:$(OBJDIR)/event.h \
1139 $(OBJDIR)/export_.c:$(OBJDIR)/export.h \
1140 $(OBJDIR)/file_.c:$(OBJDIR)/file.h \
1141 $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \
1142 $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \
@@ -1474,10 +1478,18 @@
1478
1479 $(OBJDIR)/encode.o: $(OBJDIR)/encode_.c $(OBJDIR)/encode.h $(SRCDIR)/config.h
1480 $(XTCC) -o $(OBJDIR)/encode.o -c $(OBJDIR)/encode_.c
1481
1482 $(OBJDIR)/encode.h: $(OBJDIR)/headers
1483
1484 $(OBJDIR)/etag_.c: $(SRCDIR)/etag.c $(TRANSLATE)
1485 $(TRANSLATE) $(SRCDIR)/etag.c >$@
1486
1487 $(OBJDIR)/etag.o: $(OBJDIR)/etag_.c $(OBJDIR)/etag.h $(SRCDIR)/config.h
1488 $(XTCC) -o $(OBJDIR)/etag.o -c $(OBJDIR)/etag_.c
1489
1490 $(OBJDIR)/etag.h: $(OBJDIR)/headers
1491
1492 $(OBJDIR)/event_.c: $(SRCDIR)/event.c $(TRANSLATE)
1493 $(TRANSLATE) $(SRCDIR)/event.c >$@
1494
1495 $(OBJDIR)/event.o: $(OBJDIR)/event_.c $(OBJDIR)/event.h $(SRCDIR)/config.h
1496
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -382,10 +382,11 @@
382382
diff_.c \
383383
diffcmd_.c \
384384
dispatch_.c \
385385
doc_.c \
386386
encode_.c \
387
+ etag_.c \
387388
event_.c \
388389
export_.c \
389390
file_.c \
390391
finfo_.c \
391392
foci_.c \
@@ -581,10 +582,11 @@
581582
$(OX)\diff$O \
582583
$(OX)\diffcmd$O \
583584
$(OX)\dispatch$O \
584585
$(OX)\doc$O \
585586
$(OX)\encode$O \
587
+ $(OX)\etag$O \
586588
$(OX)\event$O \
587589
$(OX)\export$O \
588590
$(OX)\file$O \
589591
$(OX)\finfo$O \
590592
$(OX)\foci$O \
@@ -769,10 +771,11 @@
769771
echo $(OX)\diff.obj >> $@
770772
echo $(OX)\diffcmd.obj >> $@
771773
echo $(OX)\dispatch.obj >> $@
772774
echo $(OX)\doc.obj >> $@
773775
echo $(OX)\encode.obj >> $@
776
+ echo $(OX)\etag.obj >> $@
774777
echo $(OX)\event.obj >> $@
775778
echo $(OX)\export.obj >> $@
776779
echo $(OX)\file.obj >> $@
777780
echo $(OX)\finfo.obj >> $@
778781
echo $(OX)\foci.obj >> $@
@@ -1168,10 +1171,16 @@
11681171
$(OX)\encode$O : encode_.c encode.h
11691172
$(TCC) /Fo$@ -c encode_.c
11701173
11711174
encode_.c : $(SRCDIR)\encode.c
11721175
translate$E $** > $@
1176
+
1177
+$(OX)\etag$O : etag_.c etag.h
1178
+ $(TCC) /Fo$@ -c etag_.c
1179
+
1180
+etag_.c : $(SRCDIR)\etag.c
1181
+ translate$E $** > $@
11731182
11741183
$(OX)\event$O : event_.c event.h
11751184
$(TCC) /Fo$@ -c event_.c
11761185
11771186
event_.c : $(SRCDIR)\event.c
@@ -1785,10 +1794,11 @@
17851794
diff_.c:diff.h \
17861795
diffcmd_.c:diffcmd.h \
17871796
dispatch_.c:dispatch.h \
17881797
doc_.c:doc.h \
17891798
encode_.c:encode.h \
1799
+ etag_.c:etag.h \
17901800
event_.c:event.h \
17911801
export_.c:export.h \
17921802
file_.c:file.h \
17931803
finfo_.c:finfo.h \
17941804
foci_.c:foci.h \
17951805
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -382,10 +382,11 @@
382 diff_.c \
383 diffcmd_.c \
384 dispatch_.c \
385 doc_.c \
386 encode_.c \
 
387 event_.c \
388 export_.c \
389 file_.c \
390 finfo_.c \
391 foci_.c \
@@ -581,10 +582,11 @@
581 $(OX)\diff$O \
582 $(OX)\diffcmd$O \
583 $(OX)\dispatch$O \
584 $(OX)\doc$O \
585 $(OX)\encode$O \
 
586 $(OX)\event$O \
587 $(OX)\export$O \
588 $(OX)\file$O \
589 $(OX)\finfo$O \
590 $(OX)\foci$O \
@@ -769,10 +771,11 @@
769 echo $(OX)\diff.obj >> $@
770 echo $(OX)\diffcmd.obj >> $@
771 echo $(OX)\dispatch.obj >> $@
772 echo $(OX)\doc.obj >> $@
773 echo $(OX)\encode.obj >> $@
 
774 echo $(OX)\event.obj >> $@
775 echo $(OX)\export.obj >> $@
776 echo $(OX)\file.obj >> $@
777 echo $(OX)\finfo.obj >> $@
778 echo $(OX)\foci.obj >> $@
@@ -1168,10 +1171,16 @@
1168 $(OX)\encode$O : encode_.c encode.h
1169 $(TCC) /Fo$@ -c encode_.c
1170
1171 encode_.c : $(SRCDIR)\encode.c
1172 translate$E $** > $@
 
 
 
 
 
 
1173
1174 $(OX)\event$O : event_.c event.h
1175 $(TCC) /Fo$@ -c event_.c
1176
1177 event_.c : $(SRCDIR)\event.c
@@ -1785,10 +1794,11 @@
1785 diff_.c:diff.h \
1786 diffcmd_.c:diffcmd.h \
1787 dispatch_.c:dispatch.h \
1788 doc_.c:doc.h \
1789 encode_.c:encode.h \
 
1790 event_.c:event.h \
1791 export_.c:export.h \
1792 file_.c:file.h \
1793 finfo_.c:finfo.h \
1794 foci_.c:foci.h \
1795
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -382,10 +382,11 @@
382 diff_.c \
383 diffcmd_.c \
384 dispatch_.c \
385 doc_.c \
386 encode_.c \
387 etag_.c \
388 event_.c \
389 export_.c \
390 file_.c \
391 finfo_.c \
392 foci_.c \
@@ -581,10 +582,11 @@
582 $(OX)\diff$O \
583 $(OX)\diffcmd$O \
584 $(OX)\dispatch$O \
585 $(OX)\doc$O \
586 $(OX)\encode$O \
587 $(OX)\etag$O \
588 $(OX)\event$O \
589 $(OX)\export$O \
590 $(OX)\file$O \
591 $(OX)\finfo$O \
592 $(OX)\foci$O \
@@ -769,10 +771,11 @@
771 echo $(OX)\diff.obj >> $@
772 echo $(OX)\diffcmd.obj >> $@
773 echo $(OX)\dispatch.obj >> $@
774 echo $(OX)\doc.obj >> $@
775 echo $(OX)\encode.obj >> $@
776 echo $(OX)\etag.obj >> $@
777 echo $(OX)\event.obj >> $@
778 echo $(OX)\export.obj >> $@
779 echo $(OX)\file.obj >> $@
780 echo $(OX)\finfo.obj >> $@
781 echo $(OX)\foci.obj >> $@
@@ -1168,10 +1171,16 @@
1171 $(OX)\encode$O : encode_.c encode.h
1172 $(TCC) /Fo$@ -c encode_.c
1173
1174 encode_.c : $(SRCDIR)\encode.c
1175 translate$E $** > $@
1176
1177 $(OX)\etag$O : etag_.c etag.h
1178 $(TCC) /Fo$@ -c etag_.c
1179
1180 etag_.c : $(SRCDIR)\etag.c
1181 translate$E $** > $@
1182
1183 $(OX)\event$O : event_.c event.h
1184 $(TCC) /Fo$@ -c event_.c
1185
1186 event_.c : $(SRCDIR)\event.c
@@ -1785,10 +1794,11 @@
1794 diff_.c:diff.h \
1795 diffcmd_.c:diffcmd.h \
1796 dispatch_.c:dispatch.h \
1797 doc_.c:doc.h \
1798 encode_.c:encode.h \
1799 etag_.c:etag.h \
1800 event_.c:event.h \
1801 export_.c:export.h \
1802 file_.c:file.h \
1803 finfo_.c:finfo.h \
1804 foci_.c:foci.h \
1805

Keyboard Shortcuts

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