Fossil SCM

Add support for ETags cache control.

drh 2018-02-25 19:09 trunk merge
Commit 7383450dd58adf3150f8309fff0b4cef26e7a3ff5ae85eca32a7bee99c536f86
+10 -77
--- 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){
@@ -301,29 +249,28 @@
301249
if( iReplyStatus<=0 ){
302250
iReplyStatus = 200;
303251
zReplyStatus = "OK";
304252
}
305253
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
-
317254
if( g.fullHttpReply ){
318255
fprintf(g.httpOut, "HTTP/1.0 %d %s\r\n", iReplyStatus, zReplyStatus);
319256
fprintf(g.httpOut, "Date: %s\r\n", cgi_rfc822_datestamp(time(0)));
320257
fprintf(g.httpOut, "Connection: close\r\n");
321258
fprintf(g.httpOut, "X-UA-Compatible: IE=edge\r\n");
322259
}else{
323260
fprintf(g.httpOut, "Status: %d %s\r\n", iReplyStatus, zReplyStatus);
324261
}
262
+ if( g.isConst ){
263
+ /* isConst means that the reply is guaranteed to be invariant, even
264
+ ** after configuration changes and/or Fossil binary recompiles. */
265
+ fprintf(g.httpOut, "Cache-Control: max-age=31536000\r\n");
266
+ }else if( etag_tag()!=0 ){
267
+ fprintf(g.httpOut, "ETag: %s\r\n", etag_tag());
268
+ fprintf(g.httpOut, "Cache-Control: max-age=%d\r\n", etag_maxage());
269
+ }else{
270
+ fprintf(g.httpOut, "Cache-control: no-cache\r\n");
271
+ }
325272
326273
if( blob_size(&extraHeader)>0 ){
327274
fprintf(g.httpOut, "%s", blob_buffer(&extraHeader));
328275
}
329276
@@ -343,24 +290,10 @@
343290
**
344291
** These headers are probably best added by the web server hosting fossil as
345292
** a CGI script.
346293
*/
347294
348
- if( g.isConst ){
349
- /* constant means that the input URL will _never_ generate anything
350
- ** else. In the case of attachments, the contents won't change because
351
- ** an attempt to change them generates a new attachment number. In the
352
- ** case of most /getfile calls for specific versions, the only way the
353
- ** content changes is if someone breaks the SCM. And if that happens, a
354
- ** stale cache is the least of the problem. So we provide an Expires
355
- ** header set to a reasonable period (default: one week).
356
- */
357
- fprintf(g.httpOut, "Cache-control: max-age=28800\r\n");
358
- }else{
359
- fprintf(g.httpOut, "Cache-control: no-cache\r\n");
360
- }
361
-
362295
/* Content intended for logged in users should only be cached in
363296
** the browser, not some shared location.
364297
*/
365298
fprintf(g.httpOut, "Content-Type: %s; charset=utf-8\r\n", zContentType);
366299
if( fossil_strcmp(zContentType,"application/x-fossil")==0 ){
367300
--- 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){
@@ -301,29 +249,28 @@
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
@@ -343,24 +290,10 @@
343 **
344 ** These headers are probably best added by the web server hosting fossil as
345 ** a CGI script.
346 */
347
348 if( g.isConst ){
349 /* constant means that the input URL will _never_ generate anything
350 ** else. In the case of attachments, the contents won't change because
351 ** an attempt to change them generates a new attachment number. In the
352 ** case of most /getfile calls for specific versions, the only way the
353 ** content changes is if someone breaks the SCM. And if that happens, a
354 ** stale cache is the least of the problem. So we provide an Expires
355 ** header set to a reasonable period (default: one week).
356 */
357 fprintf(g.httpOut, "Cache-control: max-age=28800\r\n");
358 }else{
359 fprintf(g.httpOut, "Cache-control: no-cache\r\n");
360 }
361
362 /* Content intended for logged in users should only be cached in
363 ** the browser, not some shared location.
364 */
365 fprintf(g.httpOut, "Content-Type: %s; charset=utf-8\r\n", zContentType);
366 if( fossil_strcmp(zContentType,"application/x-fossil")==0 ){
367
--- 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){
@@ -301,29 +249,28 @@
249 if( iReplyStatus<=0 ){
250 iReplyStatus = 200;
251 zReplyStatus = "OK";
252 }
253
 
 
 
 
 
 
 
 
 
 
 
254 if( g.fullHttpReply ){
255 fprintf(g.httpOut, "HTTP/1.0 %d %s\r\n", iReplyStatus, zReplyStatus);
256 fprintf(g.httpOut, "Date: %s\r\n", cgi_rfc822_datestamp(time(0)));
257 fprintf(g.httpOut, "Connection: close\r\n");
258 fprintf(g.httpOut, "X-UA-Compatible: IE=edge\r\n");
259 }else{
260 fprintf(g.httpOut, "Status: %d %s\r\n", iReplyStatus, zReplyStatus);
261 }
262 if( g.isConst ){
263 /* isConst means that the reply is guaranteed to be invariant, even
264 ** after configuration changes and/or Fossil binary recompiles. */
265 fprintf(g.httpOut, "Cache-Control: max-age=31536000\r\n");
266 }else if( etag_tag()!=0 ){
267 fprintf(g.httpOut, "ETag: %s\r\n", etag_tag());
268 fprintf(g.httpOut, "Cache-Control: max-age=%d\r\n", etag_maxage());
269 }else{
270 fprintf(g.httpOut, "Cache-control: no-cache\r\n");
271 }
272
273 if( blob_size(&extraHeader)>0 ){
274 fprintf(g.httpOut, "%s", blob_buffer(&extraHeader));
275 }
276
@@ -343,24 +290,10 @@
290 **
291 ** These headers are probably best added by the web server hosting fossil as
292 ** a CGI script.
293 */
294
 
 
 
 
 
 
 
 
 
 
 
 
 
 
295 /* Content intended for logged in users should only be cached in
296 ** the browser, not some shared location.
297 */
298 fprintf(g.httpOut, "Content-Type: %s; charset=utf-8\r\n", zContentType);
299 if( fossil_strcmp(zContentType,"application/x-fossil")==0 ){
300
+10 -7
--- src/doc.c
+++ src/doc.c
@@ -639,15 +639,18 @@
639639
}else{
640640
goto doc_not_found;
641641
}
642642
}
643643
if( isUV ){
644
- if( db_table_exists("repository","unversioned")
645
- && unversioned_content(zName, &filebody)==0
646
- ){
647
- rid = 1;
648
- zDfltTitle = zName;
644
+ if( db_table_exists("repository","unversioned") ){
645
+ char *zHash;
646
+ zHash = db_text(0, "SELECT hash FROM unversioned WHERE name=%Q",zName);
647
+ etag_check(ETAG_HASH, zHash);
648
+ if( unversioned_content(zName, &filebody)==0 ){
649
+ rid = 1;
650
+ zDfltTitle = zName;
651
+ }
649652
}
650653
}else if( fossil_strcmp(zCheckin,"ckout")==0 ){
651654
/* Read from the local checkout */
652655
char *zFullpath;
653656
db_must_be_within_tree();
@@ -839,19 +842,19 @@
839842
*/
840843
void logo_page(void){
841844
Blob logo;
842845
char *zMime;
843846
847
+ etag_check(ETAG_CONFIG, 0);
844848
zMime = db_get("logo-mimetype", "image/gif");
845849
blob_zero(&logo);
846850
db_blob(&logo, "SELECT value FROM config WHERE name='logo-image'");
847851
if( blob_size(&logo)==0 ){
848852
blob_init(&logo, (char*)aLogo, sizeof(aLogo));
849853
}
850854
cgi_set_content_type(zMime);
851855
cgi_set_content(&logo);
852
- g.isConst = 1;
853856
}
854857
855858
/*
856859
** The default background image: a 16x16 white GIF
857860
*/
@@ -873,19 +876,19 @@
873876
*/
874877
void background_page(void){
875878
Blob bgimg;
876879
char *zMime;
877880
881
+ etag_check(ETAG_CONFIG, 0);
878882
zMime = db_get("background-mimetype", "image/gif");
879883
blob_zero(&bgimg);
880884
db_blob(&bgimg, "SELECT value FROM config WHERE name='background-image'");
881885
if( blob_size(&bgimg)==0 ){
882886
blob_init(&bgimg, (char*)aBackground, sizeof(aBackground));
883887
}
884888
cgi_set_content_type(zMime);
885889
cgi_set_content(&bgimg);
886
- g.isConst = 1;
887890
}
888891
889892
890893
/*
891894
** WEBPAGE: docsrch
892895
893896
ADDED src/etag.c
--- src/doc.c
+++ src/doc.c
@@ -639,15 +639,18 @@
639 }else{
640 goto doc_not_found;
641 }
642 }
643 if( isUV ){
644 if( db_table_exists("repository","unversioned")
645 && unversioned_content(zName, &filebody)==0
646 ){
647 rid = 1;
648 zDfltTitle = zName;
 
 
 
649 }
650 }else if( fossil_strcmp(zCheckin,"ckout")==0 ){
651 /* Read from the local checkout */
652 char *zFullpath;
653 db_must_be_within_tree();
@@ -839,19 +842,19 @@
839 */
840 void logo_page(void){
841 Blob logo;
842 char *zMime;
843
 
844 zMime = db_get("logo-mimetype", "image/gif");
845 blob_zero(&logo);
846 db_blob(&logo, "SELECT value FROM config WHERE name='logo-image'");
847 if( blob_size(&logo)==0 ){
848 blob_init(&logo, (char*)aLogo, sizeof(aLogo));
849 }
850 cgi_set_content_type(zMime);
851 cgi_set_content(&logo);
852 g.isConst = 1;
853 }
854
855 /*
856 ** The default background image: a 16x16 white GIF
857 */
@@ -873,19 +876,19 @@
873 */
874 void background_page(void){
875 Blob bgimg;
876 char *zMime;
877
 
878 zMime = db_get("background-mimetype", "image/gif");
879 blob_zero(&bgimg);
880 db_blob(&bgimg, "SELECT value FROM config WHERE name='background-image'");
881 if( blob_size(&bgimg)==0 ){
882 blob_init(&bgimg, (char*)aBackground, sizeof(aBackground));
883 }
884 cgi_set_content_type(zMime);
885 cgi_set_content(&bgimg);
886 g.isConst = 1;
887 }
888
889
890 /*
891 ** WEBPAGE: docsrch
892
893 DDED src/etag.c
--- src/doc.c
+++ src/doc.c
@@ -639,15 +639,18 @@
639 }else{
640 goto doc_not_found;
641 }
642 }
643 if( isUV ){
644 if( db_table_exists("repository","unversioned") ){
645 char *zHash;
646 zHash = db_text(0, "SELECT hash FROM unversioned WHERE name=%Q",zName);
647 etag_check(ETAG_HASH, zHash);
648 if( unversioned_content(zName, &filebody)==0 ){
649 rid = 1;
650 zDfltTitle = zName;
651 }
652 }
653 }else if( fossil_strcmp(zCheckin,"ckout")==0 ){
654 /* Read from the local checkout */
655 char *zFullpath;
656 db_must_be_within_tree();
@@ -839,19 +842,19 @@
842 */
843 void logo_page(void){
844 Blob logo;
845 char *zMime;
846
847 etag_check(ETAG_CONFIG, 0);
848 zMime = db_get("logo-mimetype", "image/gif");
849 blob_zero(&logo);
850 db_blob(&logo, "SELECT value FROM config WHERE name='logo-image'");
851 if( blob_size(&logo)==0 ){
852 blob_init(&logo, (char*)aLogo, sizeof(aLogo));
853 }
854 cgi_set_content_type(zMime);
855 cgi_set_content(&logo);
 
856 }
857
858 /*
859 ** The default background image: a 16x16 white GIF
860 */
@@ -873,19 +876,19 @@
876 */
877 void background_page(void){
878 Blob bgimg;
879 char *zMime;
880
881 etag_check(ETAG_CONFIG, 0);
882 zMime = db_get("background-mimetype", "image/gif");
883 blob_zero(&bgimg);
884 db_blob(&bgimg, "SELECT value FROM config WHERE name='background-image'");
885 if( blob_size(&bgimg)==0 ){
886 blob_init(&bgimg, (char*)aBackground, sizeof(aBackground));
887 }
888 cgi_set_content_type(zMime);
889 cgi_set_content(&bgimg);
 
890 }
891
892
893 /*
894 ** WEBPAGE: docsrch
895
896 DDED src/etag.c
+113
--- a/src/etag.c
+++ b/src/etag.c
@@ -0,0 +1,113 @@
1
+/*
2
+** Copyright (c) 2018 iMaxAge = 86400;MATCH");
3
+ if( zIfNoneMatch==0 ) return;
4
+ *
5
+** Copyright (c) 2018 D. Richard Hipp
6
+**
7
+** This program is free software; you can redistribute it and/or
8
+** modif Simplified BSD License (also
9
+** known as the "2-Clause License" or "FreeBSD License".)
10
+**
11
+** This program is distributed in the hope that it will be useful,
12
+** but without any warranty; without even the implied warranty of
13
+** merchantability or fitness for a particular purpose.
14
+**
15
+** Author contact information:
16
+** [email protected]
17
+** http://www.hwaci.com/drh/
18
+**
19
+*******************************************************************************
20
+**
21
+** This file implements ETags: cache control for Fossil
22
+**
23
+** An ETag is a hash that encodes attributes which must be the same for
24
+** the page to continue to be valid. Attributes that might be contained
25
+** in the ETag include:
26
+**
27
+** (1) The mtime on the Fossil executable
28
+** (2) The last change to the CONFIG table
29
+** (
30
+** Item in the ETag. The other7) The name user as determined by the login cookie
31
+**
32
+** Item (1) is always included in the ETag. The other elements are
33
+** optional. Bec**************************************
34
+**
35
+** This file implements ETags: casqlite3_int64 mtime; cache control for Fossil
36
+**
37
+** An ETag is a hash that encodes attributes which must be the same for
38
+** the page to continue to be valid. Attmtime of the executable as pa;
39
+mtime: %lld\n", mtime);
40
+zBuf, -can redistribute it and/or
41
+** modif Simplified BSD License (also
42
+** known as the "2-Clause License" or "FreeBSD License".)
43
+**
44
+** This program is distributed in the hope thMaxAelse) 2018 iMaxAge = 86400;MATCH");
45
+ if( zIfNoneMatch==0 ) return;
46
+ *
47
+** Copyright (c) 2018 D. Richard Hipp
48
+**
49
+** This program is free software; you can redistribute it and/or
50
+** modif Simplified BSD License (also
51
+** known as the "2-Clause License" or "/*
52
+** Copyright (c) 2018 iMaxAge = 86400;MATCH");
53
+ if( zIfNoneMatch==0 ) return;
54
+ *
55
+** Copyright (c) 2018 D. Richard Hipp
56
+**
57
+** This program is free software; you can redistribute it and/or
58
+** modif Simplified BSD License (also
59
+** known as the "2-Clause License" or "FreeBSD License".)
60
+**
61
+** This program is distributed in the hope that it will be useful,
62
+** but without any warranty; without even the implied warranty of
63
+** merchantability or fitness for a particular purpoaxAge = 86400;MATCH");
64
+ if( zIfNoneMatch==0 ) return;
65
+ *
66
+** Copyright (c) 2018 D. Richard Hipp
67
+**
68
+** This program is free software; you can redistribute it and/or
69
+** modif Simplified BSD License (also
70
+** known as the "2-Clause License" or "FreeBSD License".)
71
+**
72
+** This program is distributed in the hope that it will be useful,
73
+** but without any warranty; without even the implied warranty of
74
+** merchantability or fitness for a particular purpose.
75
+**
76
+** Author contact information:
77
+** [email protected]
78
+** http://www.hwaci.com/drh/
79
+**
80
+*******************************************************************************
81
+**
82
+** This file implements ETags: cache control for Fossil
83
+**
84
+** An ETag is a hash that encodes attributes which must be the same for
85
+** the page to continue to be valid. Attributes that might be contained
86
+** in the ETag include:
87
+**
88
+** (1) The mtime on the Fossil executable
89
+** (2) The last change to the CONFIG table
90
+** (
91
+** Item in the ETag. The other7) The name user as determined by the login cookie
92
+**
93
+** Item (1) is always included in the ETag. The other elements are
94
+** optional. Bec**************************************
95
+**
96
+** This file implements ETags: casqlite3_int64 mtime; cache control for Fossil
97
+**
98
+** An ETag is a hash that encodes attributes which must be the same for
99
+** the page to continue to be valid. Attmtime of the executable as pa;
100
+mtime: %lld\n", mtime);
101
+zBuf, -can redistribute it and/or
102
+** modif Simplified BSD License (also
103
+** known as the "2-Clause License" or "FreeBSD License".)
104
+**
105
+** This program is distributed in the hope thMaxAelse) 2018 iMaxAge = 86400;MATCH");
106
+ if( zIfNoneMatch==0 ) return;
107
+ *
108
+** Copyright (c) 2018 D. Richard Hipp
109
+**
110
+** This program is free software; you can redistribute it and/or
111
+** modif Simplified BSD License (also
112
+** known as the "2-Clause License" or "FreeBSD License".)
113
+**
--- a/src/etag.c
+++ b/src/etag.c
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/src/etag.c
+++ b/src/etag.c
@@ -0,0 +1,113 @@
1 /*
2 ** Copyright (c) 2018 iMaxAge = 86400;MATCH");
3 if( zIfNoneMatch==0 ) return;
4 *
5 ** Copyright (c) 2018 D. Richard Hipp
6 **
7 ** This program is free software; you can redistribute it and/or
8 ** modif Simplified BSD License (also
9 ** known as the "2-Clause License" or "FreeBSD License".)
10 **
11 ** This program is distributed in the hope that it will be useful,
12 ** but without any warranty; without even the implied warranty of
13 ** merchantability or fitness for a particular purpose.
14 **
15 ** Author contact information:
16 ** [email protected]
17 ** http://www.hwaci.com/drh/
18 **
19 *******************************************************************************
20 **
21 ** This file implements ETags: cache control for Fossil
22 **
23 ** An ETag is a hash that encodes attributes which must be the same for
24 ** the page to continue to be valid. Attributes that might be contained
25 ** in the ETag include:
26 **
27 ** (1) The mtime on the Fossil executable
28 ** (2) The last change to the CONFIG table
29 ** (
30 ** Item in the ETag. The other7) The name user as determined by the login cookie
31 **
32 ** Item (1) is always included in the ETag. The other elements are
33 ** optional. Bec**************************************
34 **
35 ** This file implements ETags: casqlite3_int64 mtime; cache control for Fossil
36 **
37 ** An ETag is a hash that encodes attributes which must be the same for
38 ** the page to continue to be valid. Attmtime of the executable as pa;
39 mtime: %lld\n", mtime);
40 zBuf, -can redistribute it and/or
41 ** modif Simplified BSD License (also
42 ** known as the "2-Clause License" or "FreeBSD License".)
43 **
44 ** This program is distributed in the hope thMaxAelse) 2018 iMaxAge = 86400;MATCH");
45 if( zIfNoneMatch==0 ) return;
46 *
47 ** Copyright (c) 2018 D. Richard Hipp
48 **
49 ** This program is free software; you can redistribute it and/or
50 ** modif Simplified BSD License (also
51 ** known as the "2-Clause License" or "/*
52 ** Copyright (c) 2018 iMaxAge = 86400;MATCH");
53 if( zIfNoneMatch==0 ) return;
54 *
55 ** Copyright (c) 2018 D. Richard Hipp
56 **
57 ** This program is free software; you can redistribute it and/or
58 ** modif Simplified BSD License (also
59 ** known as the "2-Clause License" or "FreeBSD License".)
60 **
61 ** This program is distributed in the hope that it will be useful,
62 ** but without any warranty; without even the implied warranty of
63 ** merchantability or fitness for a particular purpoaxAge = 86400;MATCH");
64 if( zIfNoneMatch==0 ) return;
65 *
66 ** Copyright (c) 2018 D. Richard Hipp
67 **
68 ** This program is free software; you can redistribute it and/or
69 ** modif Simplified BSD License (also
70 ** known as the "2-Clause License" or "FreeBSD License".)
71 **
72 ** This program is distributed in the hope that it will be useful,
73 ** but without any warranty; without even the implied warranty of
74 ** merchantability or fitness for a particular purpose.
75 **
76 ** Author contact information:
77 ** [email protected]
78 ** http://www.hwaci.com/drh/
79 **
80 *******************************************************************************
81 **
82 ** This file implements ETags: cache control for Fossil
83 **
84 ** An ETag is a hash that encodes attributes which must be the same for
85 ** the page to continue to be valid. Attributes that might be contained
86 ** in the ETag include:
87 **
88 ** (1) The mtime on the Fossil executable
89 ** (2) The last change to the CONFIG table
90 ** (
91 ** Item in the ETag. The other7) The name user as determined by the login cookie
92 **
93 ** Item (1) is always included in the ETag. The other elements are
94 ** optional. Bec**************************************
95 **
96 ** This file implements ETags: casqlite3_int64 mtime; cache control for Fossil
97 **
98 ** An ETag is a hash that encodes attributes which must be the same for
99 ** the page to continue to be valid. Attmtime of the executable as pa;
100 mtime: %lld\n", mtime);
101 zBuf, -can redistribute it and/or
102 ** modif Simplified BSD License (also
103 ** known as the "2-Clause License" or "FreeBSD License".)
104 **
105 ** This program is distributed in the hope thMaxAelse) 2018 iMaxAge = 86400;MATCH");
106 if( zIfNoneMatch==0 ) return;
107 *
108 ** Copyright (c) 2018 D. Richard Hipp
109 **
110 ** This program is free software; you can redistribute it and/or
111 ** modif Simplified BSD License (also
112 ** known as the "2-Clause License" or "FreeBSD License".)
113 **
+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
--- 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
+10 -1
--- src/style.c
+++ src/style.c
@@ -833,15 +833,20 @@
833833
** WEBPAGE: builtin
834834
** URL: builtin/FILENAME
835835
**
836836
** Return the built-in text given by FILENAME. This is used internally
837837
** by many Fossil web pages to load built-in javascript files.
838
+**
839
+** If the id= query parameter is present, then Fossil assumes that the
840
+** result is immutable and sets a very large cache retention time (1 year).
838841
*/
839842
void page_builtin_text(void){
840843
Blob out;
841844
const char *zName = P("name");
842845
const char *zTxt = 0;
846
+ const char *zId = P("id");
847
+ int nId;
843848
if( zName ) zTxt = builtin_text(zName);
844849
if( zTxt==0 ){
845850
cgi_set_status(404, "Not Found");
846851
@ File "%h(zName)" not found
847852
return;
@@ -848,14 +853,18 @@
848853
}
849854
if( sqlite3_strglob("*.js", zName)==0 ){
850855
cgi_set_content_type("application/javascript");
851856
}else{
852857
cgi_set_content_type("text/plain");
858
+ }
859
+ if( zId && (nId = (int)strlen(zId))>=8 && strncmp(zId,MANIFEST_UUID,nId)==0 ){
860
+ g.isConst = 1;
861
+ }else{
862
+ etag_check(0,0);
853863
}
854864
blob_init(&out, zTxt, -1);
855865
cgi_set_content(&out);
856
- g.isConst = 1;
857866
}
858867
859868
860869
/*
861870
** WEBPAGE: test_env
862871
--- src/style.c
+++ src/style.c
@@ -833,15 +833,20 @@
833 ** WEBPAGE: builtin
834 ** URL: builtin/FILENAME
835 **
836 ** Return the built-in text given by FILENAME. This is used internally
837 ** by many Fossil web pages to load built-in javascript files.
 
 
 
838 */
839 void page_builtin_text(void){
840 Blob out;
841 const char *zName = P("name");
842 const char *zTxt = 0;
 
 
843 if( zName ) zTxt = builtin_text(zName);
844 if( zTxt==0 ){
845 cgi_set_status(404, "Not Found");
846 @ File "%h(zName)" not found
847 return;
@@ -848,14 +853,18 @@
848 }
849 if( sqlite3_strglob("*.js", zName)==0 ){
850 cgi_set_content_type("application/javascript");
851 }else{
852 cgi_set_content_type("text/plain");
 
 
 
 
 
853 }
854 blob_init(&out, zTxt, -1);
855 cgi_set_content(&out);
856 g.isConst = 1;
857 }
858
859
860 /*
861 ** WEBPAGE: test_env
862
--- src/style.c
+++ src/style.c
@@ -833,15 +833,20 @@
833 ** WEBPAGE: builtin
834 ** URL: builtin/FILENAME
835 **
836 ** Return the built-in text given by FILENAME. This is used internally
837 ** by many Fossil web pages to load built-in javascript files.
838 **
839 ** If the id= query parameter is present, then Fossil assumes that the
840 ** result is immutable and sets a very large cache retention time (1 year).
841 */
842 void page_builtin_text(void){
843 Blob out;
844 const char *zName = P("name");
845 const char *zTxt = 0;
846 const char *zId = P("id");
847 int nId;
848 if( zName ) zTxt = builtin_text(zName);
849 if( zTxt==0 ){
850 cgi_set_status(404, "Not Found");
851 @ File "%h(zName)" not found
852 return;
@@ -848,14 +853,18 @@
853 }
854 if( sqlite3_strglob("*.js", zName)==0 ){
855 cgi_set_content_type("application/javascript");
856 }else{
857 cgi_set_content_type("text/plain");
858 }
859 if( zId && (nId = (int)strlen(zId))>=8 && strncmp(zId,MANIFEST_UUID,nId)==0 ){
860 g.isConst = 1;
861 }else{
862 etag_check(0,0);
863 }
864 blob_init(&out, zTxt, -1);
865 cgi_set_content(&out);
 
866 }
867
868
869 /*
870 ** WEBPAGE: test_env
871
+1
--- src/tar.c
+++ src/tar.c
@@ -731,10 +731,11 @@
731731
blob_appendf(&cacheKey, "/tarball/%z", rid_to_uuid(rid));
732732
blob_appendf(&cacheKey, "/%q", zName);
733733
if( zInclude ) blob_appendf(&cacheKey, ",in=%Q", zInclude);
734734
if( zExclude ) blob_appendf(&cacheKey, ",ex=%Q", zExclude);
735735
zKey = blob_str(&cacheKey);
736
+ etag_check(ETAG_HASH, zKey);
736737
737738
if( P("debug")!=0 ){
738739
style_header("Tarball Generator Debug Screen");
739740
@ zName = "%h(zName)"<br />
740741
@ rid = %d(rid)<br />
741742
--- src/tar.c
+++ src/tar.c
@@ -731,10 +731,11 @@
731 blob_appendf(&cacheKey, "/tarball/%z", rid_to_uuid(rid));
732 blob_appendf(&cacheKey, "/%q", zName);
733 if( zInclude ) blob_appendf(&cacheKey, ",in=%Q", zInclude);
734 if( zExclude ) blob_appendf(&cacheKey, ",ex=%Q", zExclude);
735 zKey = blob_str(&cacheKey);
 
736
737 if( P("debug")!=0 ){
738 style_header("Tarball Generator Debug Screen");
739 @ zName = "%h(zName)"<br />
740 @ rid = %d(rid)<br />
741
--- src/tar.c
+++ src/tar.c
@@ -731,10 +731,11 @@
731 blob_appendf(&cacheKey, "/tarball/%z", rid_to_uuid(rid));
732 blob_appendf(&cacheKey, "/%q", zName);
733 if( zInclude ) blob_appendf(&cacheKey, ",in=%Q", zInclude);
734 if( zExclude ) blob_appendf(&cacheKey, ",ex=%Q", zExclude);
735 zKey = blob_str(&cacheKey);
736 etag_check(ETAG_HASH, zKey);
737
738 if( P("debug")!=0 ){
739 style_header("Tarball Generator Debug Screen");
740 @ zName = "%h(zName)"<br />
741 @ rid = %d(rid)<br />
742
--- src/unversioned.c
+++ src/unversioned.c
@@ -153,11 +153,15 @@
153153
** 2: zName exists and is the same as zHash but has a older mtime
154154
** 3: zName exists and is identical to mtime/zHash in all respects.
155155
** 4: zName exists and is the same as zHash but has a newer mtime.
156156
** 5: zName exists and should override the mtime/zHash remote.
157157
*/
158
-int unversioned_status(const char *zName, sqlite3_int64 mtime, const char *zHash){
158
+int unversioned_status(
159
+ const char *zName,
160
+ sqlite3_int64 mtime,
161
+ const char *zHash
162
+){
159163
int iStatus = 0;
160164
Stmt q;
161165
db_prepare(&q, "SELECT mtime, hash FROM unversioned WHERE name=%Q", zName);
162166
if( db_step(&q)==SQLITE_ROW ){
163167
const char *zLocalHash = db_column_text(&q, 1);
164168
--- src/unversioned.c
+++ src/unversioned.c
@@ -153,11 +153,15 @@
153 ** 2: zName exists and is the same as zHash but has a older mtime
154 ** 3: zName exists and is identical to mtime/zHash in all respects.
155 ** 4: zName exists and is the same as zHash but has a newer mtime.
156 ** 5: zName exists and should override the mtime/zHash remote.
157 */
158 int unversioned_status(const char *zName, sqlite3_int64 mtime, const char *zHash){
 
 
 
 
159 int iStatus = 0;
160 Stmt q;
161 db_prepare(&q, "SELECT mtime, hash FROM unversioned WHERE name=%Q", zName);
162 if( db_step(&q)==SQLITE_ROW ){
163 const char *zLocalHash = db_column_text(&q, 1);
164
--- src/unversioned.c
+++ src/unversioned.c
@@ -153,11 +153,15 @@
153 ** 2: zName exists and is the same as zHash but has a older mtime
154 ** 3: zName exists and is identical to mtime/zHash in all respects.
155 ** 4: zName exists and is the same as zHash but has a newer mtime.
156 ** 5: zName exists and should override the mtime/zHash remote.
157 */
158 int unversioned_status(
159 const char *zName,
160 sqlite3_int64 mtime,
161 const char *zHash
162 ){
163 int iStatus = 0;
164 Stmt q;
165 db_prepare(&q, "SELECT mtime, hash FROM unversioned WHERE name=%Q", zName);
166 if( db_step(&q)==SQLITE_ROW ){
167 const char *zLocalHash = db_column_text(&q, 1);
168
+1
--- src/zip.c
+++ src/zip.c
@@ -932,10 +932,11 @@
932932
blob_appendf(&cacheKey, "/%s/%z", g.zPath, rid_to_uuid(rid));
933933
blob_appendf(&cacheKey, "/%q", zName);
934934
if( zInclude ) blob_appendf(&cacheKey, ",in=%Q", zInclude);
935935
if( zExclude ) blob_appendf(&cacheKey, ",ex=%Q", zExclude);
936936
zKey = blob_str(&cacheKey);
937
+ etag_check(ETAG_HASH, zKey);
937938
938939
if( P("debug")!=0 ){
939940
style_header("%s Archive Generator Debug Screen", zType);
940941
@ zName = "%h(zName)"<br />
941942
@ rid = %d(rid)<br />
942943
--- src/zip.c
+++ src/zip.c
@@ -932,10 +932,11 @@
932 blob_appendf(&cacheKey, "/%s/%z", g.zPath, rid_to_uuid(rid));
933 blob_appendf(&cacheKey, "/%q", zName);
934 if( zInclude ) blob_appendf(&cacheKey, ",in=%Q", zInclude);
935 if( zExclude ) blob_appendf(&cacheKey, ",ex=%Q", zExclude);
936 zKey = blob_str(&cacheKey);
 
937
938 if( P("debug")!=0 ){
939 style_header("%s Archive Generator Debug Screen", zType);
940 @ zName = "%h(zName)"<br />
941 @ rid = %d(rid)<br />
942
--- src/zip.c
+++ src/zip.c
@@ -932,10 +932,11 @@
932 blob_appendf(&cacheKey, "/%s/%z", g.zPath, rid_to_uuid(rid));
933 blob_appendf(&cacheKey, "/%q", zName);
934 if( zInclude ) blob_appendf(&cacheKey, ",in=%Q", zInclude);
935 if( zExclude ) blob_appendf(&cacheKey, ",ex=%Q", zExclude);
936 zKey = blob_str(&cacheKey);
937 etag_check(ETAG_HASH, zKey);
938
939 if( P("debug")!=0 ){
940 style_header("%s Archive Generator Debug Screen", zType);
941 @ zName = "%h(zName)"<br />
942 @ rid = %d(rid)<br />
943
+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