Fossil SCM

The /timeline supports 4 sticky viewing modes: Modern, Verbose, Compact, and Columnar. The new cookie.c module supports sticky user viewing preferences.

drh 2017-11-29 14:05 trunk merge
Commit c94f6085489effe641aa8dc32bed76d4af55f61e90ba7d4374edcc0c193636a4
+1 -1
--- src/content.c
+++ src/content.c
@@ -2,11 +2,11 @@
22
** Copyright (c) 2006 D. Richard Hipp
33
**
44
** This program is free software; you can redistribute it and/or
55
** modify it under the terms of the Simplified BSD License (also
66
** known as the "2-Clause License" or "FreeBSD License".)
7
-
7
+**
88
** This program is distributed in the hope that it will be useful,
99
** but without any warranty; without even the implied warranty of
1010
** merchantability or fitness for a particular purpose.
1111
**
1212
** Author contact information:
1313
1414
ADDED src/cookies.c
--- src/content.c
+++ src/content.c
@@ -2,11 +2,11 @@
2 ** Copyright (c) 2006 D. Richard Hipp
3 **
4 ** This program is free software; you can redistribute it and/or
5 ** modify it under the terms of the Simplified BSD License (also
6 ** known as the "2-Clause License" or "FreeBSD License".)
7
8 ** This program is distributed in the hope that it will be useful,
9 ** but without any warranty; without even the implied warranty of
10 ** merchantability or fitness for a particular purpose.
11 **
12 ** Author contact information:
13
14 DDED src/cookies.c
--- src/content.c
+++ src/content.c
@@ -2,11 +2,11 @@
2 ** Copyright (c) 2006 D. Richard Hipp
3 **
4 ** This program is free software; you can redistribute it and/or
5 ** modify it under the terms of the Simplified BSD License (also
6 ** known as the "2-Clause License" or "FreeBSD License".)
7 **
8 ** This program is distributed in the hope that it will be useful,
9 ** but without any warranty; without even the implied warranty of
10 ** merchantability or fitness for a particular purpose.
11 **
12 ** Author contact information:
13
14 DDED src/cookies.c
+171
--- a/src/cookies.c
+++ b/src/cookies.c
@@ -0,0 +1,171 @@
1
+/*
2
+** Copyright (c) 2017 D. Richard Hipp
3
+**
4
+** This program is free software; you can redistribute it and/or
5
+** modify it under the terms of the Simplified BSD License (also
6
+** known as the "2-Clause License" or "FreeBSD License".)
7
+**
8
+** This program is distributed in the hope that it will be useful,
9
+** but without any warranty; without even the implied warranty of
10
+** merchantability or fitness for a particular purpose.
11
+**
12
+** Author contact information:
13
+** [email protected]
14
+** http://www.hwaci.com/drh/
15
+**
16
+*******************************************************************************
17
+**
18
+** This file contains code used to manage a cookie that stores user-specific
19
+** display preferences for the web interface.
20
+**
21
+** cookie_parse(void);
22
+**
23
+** Read and parse the display preferences cookie.
24
+**
25
+** cookie_read_parameter(zQP, zPName);
26
+**
27
+** If query parameter zQP does not exist but zPName does exist in
28
+** the parsed cookie, then initialize zQP to hold the same value
29
+** as the zPName element in the parsed cookie.
30
+**
31
+** cookie_write_parameter(zQP, zPName, zDefault);
32
+**
33
+** If query parameter zQP exists and if it has a different value from
34
+** the zPName parameter in the parsed cookie, then repzCookieName
35
+*/
36
+void cookielue of
37
+** zPName with the value of zQP. If zQP exists but zPName does not
38
+** exist, then zPName is created. If zQP does not exist or if it has
39
+** the same value as zPName, then this romprintf("%s", op.
40
+**
41
+** cookie_link_parameter(zQP, zPName, zDefault);
42
+**
43
+** This does both cookie_read_parameter() and cookie_write_parameter()
44
+** all at once.
45
+**
46
+** cookie_render();
47
+**
48
+** If any prior calls to cookie_write_parameter() have changed the
49
+** value of the user preferences cookie, this routine will cause the
50
+** new cookie value to be included in the HTTP header for the current
51
+** web page. This routine is a destructor for this module and should
52
+** be called once.
53
+**
54
+** char *cookie_value(zPName, zDefault);
55
+**
56
+** Look up the value of a cookie parameter zPName. Return zDefault if
57
+** there is no display preferences cookie or if zPName does not exist.
58
+*/
59
+#include "coude "config.h"
60
+#include "cookies.h"
61
+#include <assert.h>
62
+#include <string.h>
63
+
64
+#if INTERFACE
65
+/* the standard name of the display settings cookie for fossil */
66
+# define DISPLAY_SETTINGS_COOKIE "fossil_display_settings"
67
+#endif
68
+
69
+
70
+/*
71
+** State information private to this module
72
+*/
73
+#define COOKIE_NPARAM 10
74
+static struct {
75
+ char *zCookieValue; /* Value of the user preferences cookie */
76
+ int bChanged; /* True if any value has changed */
77
+ int bIsInit; /* True after initialization */
78
+ int nParam; /* Number of parameters in the cookie */
79
+ struct {
80
+ const char *zPName; /* Name of a parameter */
81
+ char *zPValue; /* Value of that parameter */
82
+ } aParam[COOKIE_NPARAM];
83
+} cookies;
84
+
85
+/* Initialize this module by parsing the content of the cookie named
86
+** by DISPLAY_SETTINGS_COOKIE
87
+*/
88
+void cookie_parse(void){
89
+ char *z;
90
+ if( cookies.bIsInit ) return;
91
+ z = (char*)P(DISPLAY_SETTINGS_COOKIE);
92
+ if( z==0 ) z = "";
93
+ cookies.zCookieValue = z = fossil_strdup(z);
94
+ cookies.bIsInit = 1;
95
+ while( cookies.nParam<COOKIE_NPARAM ){
96
+ while( fossil_isspace(z[0]) ) z++;
97
+ if( z[0]==0 ) break;
98
+ cookies.aParam[cookies.nParam].zPName = z;
99
+ while( *z && *z!='=' && *z!=',' ){ z++; }
100
+ if( *z=='=' ){
101
+ *z = 0;
102
+ z++;
103
+ cookies.aParam[cookies.nParam].zPValue = z;
104
+ while( *z && *z!=',' ){ z++; }
105
+ if( *z ){
106
+ *z = 0;
107
+ z++;
108
+ }
109
+ dehttpize(cookies.aParam[cookies.nParam].zPValue);
110
+ }else{
111
+ if( *z ){ *z++ = 0; }
112
+ cookies.aParam[cookies.nParam].zPValue = "";
113
+ }
114
+ cookies.nParam++;
115
+ }
116
+}
117
+
118
+#define COOKIE_READ 1
119
+#define COOKIE_WRITE 2
120
+static void cookie_readwrite(
121
+ const char *zQP, /* Name of the query parameter */
122
+ const char *zPName, /* Name of the cooking setting */
123
+ const char *zDflt, /* Def this
124
+** module*
125
+** Copyright (c) 2017 D. Richard Hipp
126
+**
127
+** This program is free software; you can redistribute it and/or
128
+** modify it under the terms of the Simplified BSD License (also
129
+** known as the "2-Clause License" or "FreeBSD License".)
130
+**
131
+** This program is distributed in the hope that it will be useful,
132
+** but without any warranty; without even the impli zQVal = zDflt;.
133
+**
134
+** Author contact information:
135
+** [email protected]
136
+** http://www.hwaci.com/drh/
137
+**
138
+*******************************************************************************
139
+**
140
+** This file contains code used to manage a cookie that stores user-specific
141
+** display preferences for the web interface.
142
+**
143
+** cookie_parse(vood);
144
+**
145
+** Read and parse the display preferences cookie.
146
+**
147
+** cookie_read_parameter(zQP, zPName);
148
+**
149
+** If *
150
+** Copyright (c)**
151
+** This program *
152
+** Author contact inf, "", 0, 1);*
153
+** Author contact inf, "");
154
+ }r *zDflt
155
+){
156
+ cookie_style_header("User Preference Cookie Values");
157
+ if( cookies.nParam ){
158
+ style_submenu_element("Clear", "%R/cookies?clear");
159
+ }
160
+ @ <p>The following are user preference settings held in the
161
+ @/*
162
+** Copyright (c) 2017 D(c) 2017 D. Richard Hipp "%h(PD(P@1lc,6:,""))"S@1hz,8:; i++){
163
+S@1xq,D:i].zPName): "I@1x~,p:i].zPValue)"
164
+ }
165
+ @ </ul>
166
+ style_finish_page();
167
+}
168
+21XC~e;"cookies");
169
+}
170
+ooter();
171
+}
--- a/src/cookies.c
+++ b/src/cookies.c
@@ -0,0 +1,171 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/src/cookies.c
+++ b/src/cookies.c
@@ -0,0 +1,171 @@
1 /*
2 ** Copyright (c) 2017 D. Richard Hipp
3 **
4 ** This program is free software; you can redistribute it and/or
5 ** modify it under the terms of the Simplified BSD License (also
6 ** known as the "2-Clause License" or "FreeBSD License".)
7 **
8 ** This program is distributed in the hope that it will be useful,
9 ** but without any warranty; without even the implied warranty of
10 ** merchantability or fitness for a particular purpose.
11 **
12 ** Author contact information:
13 ** [email protected]
14 ** http://www.hwaci.com/drh/
15 **
16 *******************************************************************************
17 **
18 ** This file contains code used to manage a cookie that stores user-specific
19 ** display preferences for the web interface.
20 **
21 ** cookie_parse(void);
22 **
23 ** Read and parse the display preferences cookie.
24 **
25 ** cookie_read_parameter(zQP, zPName);
26 **
27 ** If query parameter zQP does not exist but zPName does exist in
28 ** the parsed cookie, then initialize zQP to hold the same value
29 ** as the zPName element in the parsed cookie.
30 **
31 ** cookie_write_parameter(zQP, zPName, zDefault);
32 **
33 ** If query parameter zQP exists and if it has a different value from
34 ** the zPName parameter in the parsed cookie, then repzCookieName
35 */
36 void cookielue of
37 ** zPName with the value of zQP. If zQP exists but zPName does not
38 ** exist, then zPName is created. If zQP does not exist or if it has
39 ** the same value as zPName, then this romprintf("%s", op.
40 **
41 ** cookie_link_parameter(zQP, zPName, zDefault);
42 **
43 ** This does both cookie_read_parameter() and cookie_write_parameter()
44 ** all at once.
45 **
46 ** cookie_render();
47 **
48 ** If any prior calls to cookie_write_parameter() have changed the
49 ** value of the user preferences cookie, this routine will cause the
50 ** new cookie value to be included in the HTTP header for the current
51 ** web page. This routine is a destructor for this module and should
52 ** be called once.
53 **
54 ** char *cookie_value(zPName, zDefault);
55 **
56 ** Look up the value of a cookie parameter zPName. Return zDefault if
57 ** there is no display preferences cookie or if zPName does not exist.
58 */
59 #include "coude "config.h"
60 #include "cookies.h"
61 #include <assert.h>
62 #include <string.h>
63
64 #if INTERFACE
65 /* the standard name of the display settings cookie for fossil */
66 # define DISPLAY_SETTINGS_COOKIE "fossil_display_settings"
67 #endif
68
69
70 /*
71 ** State information private to this module
72 */
73 #define COOKIE_NPARAM 10
74 static struct {
75 char *zCookieValue; /* Value of the user preferences cookie */
76 int bChanged; /* True if any value has changed */
77 int bIsInit; /* True after initialization */
78 int nParam; /* Number of parameters in the cookie */
79 struct {
80 const char *zPName; /* Name of a parameter */
81 char *zPValue; /* Value of that parameter */
82 } aParam[COOKIE_NPARAM];
83 } cookies;
84
85 /* Initialize this module by parsing the content of the cookie named
86 ** by DISPLAY_SETTINGS_COOKIE
87 */
88 void cookie_parse(void){
89 char *z;
90 if( cookies.bIsInit ) return;
91 z = (char*)P(DISPLAY_SETTINGS_COOKIE);
92 if( z==0 ) z = "";
93 cookies.zCookieValue = z = fossil_strdup(z);
94 cookies.bIsInit = 1;
95 while( cookies.nParam<COOKIE_NPARAM ){
96 while( fossil_isspace(z[0]) ) z++;
97 if( z[0]==0 ) break;
98 cookies.aParam[cookies.nParam].zPName = z;
99 while( *z && *z!='=' && *z!=',' ){ z++; }
100 if( *z=='=' ){
101 *z = 0;
102 z++;
103 cookies.aParam[cookies.nParam].zPValue = z;
104 while( *z && *z!=',' ){ z++; }
105 if( *z ){
106 *z = 0;
107 z++;
108 }
109 dehttpize(cookies.aParam[cookies.nParam].zPValue);
110 }else{
111 if( *z ){ *z++ = 0; }
112 cookies.aParam[cookies.nParam].zPValue = "";
113 }
114 cookies.nParam++;
115 }
116 }
117
118 #define COOKIE_READ 1
119 #define COOKIE_WRITE 2
120 static void cookie_readwrite(
121 const char *zQP, /* Name of the query parameter */
122 const char *zPName, /* Name of the cooking setting */
123 const char *zDflt, /* Def this
124 ** module*
125 ** Copyright (c) 2017 D. Richard Hipp
126 **
127 ** This program is free software; you can redistribute it and/or
128 ** modify it under the terms of the Simplified BSD License (also
129 ** known as the "2-Clause License" or "FreeBSD License".)
130 **
131 ** This program is distributed in the hope that it will be useful,
132 ** but without any warranty; without even the impli zQVal = zDflt;.
133 **
134 ** Author contact information:
135 ** [email protected]
136 ** http://www.hwaci.com/drh/
137 **
138 *******************************************************************************
139 **
140 ** This file contains code used to manage a cookie that stores user-specific
141 ** display preferences for the web interface.
142 **
143 ** cookie_parse(vood);
144 **
145 ** Read and parse the display preferences cookie.
146 **
147 ** cookie_read_parameter(zQP, zPName);
148 **
149 ** If *
150 ** Copyright (c)**
151 ** This program *
152 ** Author contact inf, "", 0, 1);*
153 ** Author contact inf, "");
154 }r *zDflt
155 ){
156 cookie_style_header("User Preference Cookie Values");
157 if( cookies.nParam ){
158 style_submenu_element("Clear", "%R/cookies?clear");
159 }
160 @ <p>The following are user preference settings held in the
161 @/*
162 ** Copyright (c) 2017 D(c) 2017 D. Richard Hipp "%h(PD(P@1lc,6:,""))"S@1hz,8:; i++){
163 S@1xq,D:i].zPName): "I@1x~,p:i].zPValue)"
164 }
165 @ </ul>
166 style_finish_page();
167 }
168 21XC~e;"cookies");
169 }
170 ooter();
171 }
+95 -75
--- src/finfo.c
+++ src/finfo.c
@@ -314,34 +314,48 @@
314314
int fDebug = atoi(PD("debug","0"));
315315
int fShowId = P("showid")!=0;
316316
Stmt qparent;
317317
int iTableId = timeline_tableid();
318318
int bHashBeforeComment = 0; /* Show hash before the comment */
319
- int bHashAfterComment = 0; /* Show hash after the comment */
320319
int bHashInDetail = 0; /* Show the hash inside the detail section */
321320
int bShowDetail; /* Show the detail section */
322321
int bSeparateDetail; /* Detail section in a separate column */
323322
int eCommentFormat; /* value for timeline-comment-format */
323
+ int tmFlags = 0; /* Viewing mode */
324
+ const char *zStyle; /* Viewing mode name */
324325
325326
login_check_credentials();
326327
if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
327328
style_header("File History");
328329
login_anonymous_available();
330
+ tmFlags = timeline_ss_submenu();
331
+ if( tmFlags & TIMELINE_COLUMNAR ){
332
+ zStyle = "Columnar";
333
+ }else if( tmFlags & TIMELINE_COMPACT ){
334
+ zStyle = "Compact";
335
+ }else if( tmFlags & TIMELINE_VERBOSE ){
336
+ zStyle = "Verbose";
337
+ }else{
338
+ zStyle = "Modern";
339
+ }
329340
url_initialize(&url, "finfo");
330341
if( brBg ) url_add_parameter(&url, "brbg", 0);
331342
if( uBg ) url_add_parameter(&url, "ubg", 0);
332343
baseCheckin = name_to_rid_www("ci");
333344
zPrevDate[0] = 0;
334345
zFilename = PD("name","");
346
+ cookie_render();
347
+#if 0
335348
eCommentFormat = db_get_int("timeline-comment-format", 4);
336349
bShowDetail = (eCommentFormat & 1)==0; /* Bit 0 suppresses the comment */
337350
bSeparateDetail = (eCommentFormat & 8)!=0;
338351
switch( (eCommentFormat>>1)&3 ){
339352
case 1: bHashAfterComment = 1; break;
340353
case 2: bHashInDetail = 1; break;
341354
default: bHashBeforeComment = 1; break;
342355
}
356
+#endif
343357
fnid = db_int(0, "SELECT fnid FROM filename WHERE name=%Q", zFilename);
344358
if( fnid==0 ){
345359
@ No such file: %h(zFilename)
346360
style_footer();
347361
return;
@@ -445,12 +459,10 @@
445459
}else{
446460
blob_appendf(&title, "History of ");
447461
hyperlinked_path(zFilename, &title, 0, "tree", "");
448462
if( fShowId ) blob_appendf(&title, " (%d)", fnid);
449463
}
450
- style_submenu_jsbutton("Advanced", STYLE_BASIC, "reclutter()");
451
- style_submenu_jsbutton("Basic", STYLE_CLUTTER, "declutter()");
452464
@ <h2>%b(&title)</h2>
453465
blob_reset(&title);
454466
pGraph = graph_init();
455467
@ <table id="timelineTable%d(iTableId)" class="timelineTable">
456468
if( baseCheckin ){
@@ -514,81 +526,86 @@
514526
@ <tr><td class="timelineTime">
515527
@ %z(href("%R/artifact/%!S",zUuid))%s(zTime)</a></td>
516528
@ <td class="timelineGraph"><div id="m%d(gidx)" class="tl-nodemark"></div>
517529
@ </td>
518530
if( zBgClr && zBgClr[0] ){
519
- @ <td class="timelineTableCell" style="background-color: %h(zBgClr);">
520
- }else{
521
- @ <td class="timelineTableCell">
522
- }
523
- if( bHashBeforeComment && zUuid ){
524
- hyperlink_to_uuid(zUuid);
525
- }
526
- @ <span class="timelineComment timelineCheckinComment" \
527
- @ onclick='toggleDetail(%d(frid))'>
528
- @ %W(zCom)</span>
529
- if( bHashAfterComment && zUuid ){
530
- hyperlink_to_uuid(zUuid);
531
- }
532
- if( bShowDetail ){
533
- @ <span class='timelineEllipsis anticlutter' id='ellipsis-%d(frid)' \
534
- @ onclick='toggleDetail(%d(frid))'>...</span>
535
- if( bSeparateDetail ){
536
- if( zBgClr && zBgClr[0] ){
537
- @ <td class="timelineTableCell timelineDetailCell"
538
- @ style="background-color: %h(zBgClr);">
539
- }else{
540
- @ <td class="timelineTableCell timelineDetailCell">
541
- }
542
- }
543
- cgi_printf("<span class='clutter' id='detail-%d'>", frid);
544
- cgi_printf("<span class='timelineDetail timelineCheckinDetail'>(");
545
- if( zUuid && bHashInDetail ){
546
- @ file: %z(href("%R/artifact/%!S",zUuid))[%S(zUuid)]</a>
547
- if( fShowId ){
548
- int srcId = delta_source_rid(frid);
549
- if( srcId>0 ){
550
- @ id: %d(frid)&larr;%d(srcId)
551
- }else{
552
- @ id: %d(frid)
553
- }
554
- }
555
- }
556
- @ check-in:
557
- hyperlink_to_uuid(zCkin);
558
- if( fShowId ){
559
- @ (%d(fmid))
560
- }
561
- @ user:
562
- hyperlink_to_user(zUser, zDate, ",");
563
- @ branch: %z(href("%R/timeline?t=%T&n=200",zBr))%h(zBr)</a>,
564
- @ size: %d(szFile))
565
- if( zUuid && origCheckin==0 ){
566
- if( nParent==0 ){
567
- @ <b>Added</b>
568
- }else if( pfnid ){
569
- char *zPrevName = db_text(0,"SELECT name FROM filename WHERE fnid=%d",
570
- pfnid);
571
- @ <b>Renamed</b> from
572
- @ %z(href("%R/finfo?name=%t", zPrevName))%h(zPrevName)</a>
573
- }
574
- }
575
- if( zUuid==0 ){
576
- char *zNewName;
577
- zNewName = db_text(0,
578
- "SELECT name FROM filename WHERE fnid = "
579
- " (SELECT fnid FROM mlink"
580
- " WHERE mid=%d"
581
- " AND pfnid IN (SELECT fnid FROM filename WHERE name=%Q))",
582
- fmid, zFilename);
583
- if( zNewName ){
584
- @ <b>Renamed</b> to
585
- @ %z(href("%R/finfo?name=%t",zNewName))%h(zNewName)</a>
586
- fossil_free(zNewName);
587
- }else{
588
- @ <b>Deleted</b>
589
- }
531
+ @ <td class="timeline%s(zStyle)Cell" \
532
+ @ style="background-color: %h(zBgClr);">
533
+ }else{
534
+ @ <td class="timeline%s(zStyle)Cell">
535
+ }
536
+ if( tmFlags & TIMELINE_COMPACT ){
537
+ @ <span class='timelineCompactComment' onclick='toggleDetail(%d(frid))'>
538
+ }else{
539
+ @ <span class='timeline%s(zStyle)Comment'>
540
+ if( (tmFlags & TIMELINE_VERBOSE)!=0 && zUuid ){
541
+ hyperlink_to_uuid(zUuid);
542
+ @ part of check-in \
543
+ hyperlink_to_uuid(zCkin);
544
+ }
545
+ }
546
+ @ %W(zCom)</span>
547
+ if( (tmFlags & TIMELINE_COMPACT)!=0 ){
548
+ @ <span class='timelineEllipsis anticlutter' id='ellipsis-%d(frid)' \
549
+ @ onclick='toggleDetail(%d(frid))'>...</span>
550
+ @ <span class='clutter timelineCompactDetail'
551
+ }
552
+ if( tmFlags & TIMELINE_COLUMNAR ){
553
+ if( zBgClr && zBgClr[0] ){
554
+ @ <td class="timelineDetailCell" style="background-color: %h(zBgClr);">
555
+ }else{
556
+ @ <td class="timelineDetailCell">
557
+ }
558
+ }
559
+ if( tmFlags & TIMELINE_COMPACT ){
560
+ cgi_printf("<span class='clutter' id='detail-%d'>",frid);
561
+ }
562
+ cgi_printf("<span class='timeline%sDetail'>", zStyle);
563
+ if( zUuid && (tmFlags & TIMELINE_VERBOSE)==0 ){
564
+ @ file:&nbsp;%z(href("%R/artifact/%!S",zUuid))[%S(zUuid)]</a>
565
+ if( fShowId ){
566
+ int srcId = delta_source_rid(frid);
567
+ if( srcId>0 ){
568
+ @ id:&nbsp;%d(frid)&larr;%d(srcId)
569
+ }else{
570
+ @ id:&nbsp;%d(frid)
571
+ }
572
+ }
573
+ }
574
+ @ check-in:&nbsp;\
575
+ hyperlink_to_uuid(zCkin);
576
+ if( fShowId ){
577
+ @ (%d(fmid))
578
+ }
579
+ @ user:&nbsp;\
580
+ hyperlink_to_user(zUser, zDate, ",");
581
+ @ branch:&nbsp;%z(href("%R/timeline?t=%T&n=200",zBr))%h(zBr)</a>,
582
+ @ size:&nbsp;%d(szFile))
583
+ if( zUuid && origCheckin==0 ){
584
+ if( nParent==0 ){
585
+ @ <b>Added</b>
586
+ }else if( pfnid ){
587
+ char *zPrevName = db_text(0,"SELECT name FROM filename WHERE fnid=%d",
588
+ pfnid);
589
+ @ <b>Renamed</b> from
590
+ @ %z(href("%R/finfo?name=%t", zPrevName))%h(zPrevName)</a>
591
+ }
592
+ }
593
+ if( zUuid==0 ){
594
+ char *zNewName;
595
+ zNewName = db_text(0,
596
+ "SELECT name FROM filename WHERE fnid = "
597
+ " (SELECT fnid FROM mlink"
598
+ " WHERE mid=%d"
599
+ " AND pfnid IN (SELECT fnid FROM filename WHERE name=%Q))",
600
+ fmid, zFilename);
601
+ if( zNewName ){
602
+ @ <b>Renamed</b> to
603
+ @ %z(href("%R/finfo?name=%t",zNewName))%h(zNewName)</a>
604
+ fossil_free(zNewName);
605
+ }else{
606
+ @ <b>Deleted</b>
590607
}
591608
}
592609
if( g.perm.Hyperlink && zUuid ){
593610
const char *z = zFilename;
594611
@ <span id='links-%d(frid)'><span class='timelineExtraLinks'>
@@ -614,12 +631,15 @@
614631
}
615632
zAncLink = href("%R/finfo?name=%T&ci=%!S&debug=1",zFilename,zCkin);
616633
@ %z(zAncLink)[ancestry]</a>
617634
}
618635
tag_private_status(frid);
619
- if( bShowDetail ){
636
+ /* End timelineDetail */
637
+ if( tmFlags & TIMELINE_COMPACT ){
620638
@ </span></span>
639
+ }else{
640
+ @ </span>
621641
}
622642
@ </td></tr>
623643
}
624644
db_finalize(&q);
625645
db_finalize(&qparent);
626646
--- src/finfo.c
+++ src/finfo.c
@@ -314,34 +314,48 @@
314 int fDebug = atoi(PD("debug","0"));
315 int fShowId = P("showid")!=0;
316 Stmt qparent;
317 int iTableId = timeline_tableid();
318 int bHashBeforeComment = 0; /* Show hash before the comment */
319 int bHashAfterComment = 0; /* Show hash after the comment */
320 int bHashInDetail = 0; /* Show the hash inside the detail section */
321 int bShowDetail; /* Show the detail section */
322 int bSeparateDetail; /* Detail section in a separate column */
323 int eCommentFormat; /* value for timeline-comment-format */
 
 
324
325 login_check_credentials();
326 if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
327 style_header("File History");
328 login_anonymous_available();
 
 
 
 
 
 
 
 
 
 
329 url_initialize(&url, "finfo");
330 if( brBg ) url_add_parameter(&url, "brbg", 0);
331 if( uBg ) url_add_parameter(&url, "ubg", 0);
332 baseCheckin = name_to_rid_www("ci");
333 zPrevDate[0] = 0;
334 zFilename = PD("name","");
 
 
335 eCommentFormat = db_get_int("timeline-comment-format", 4);
336 bShowDetail = (eCommentFormat & 1)==0; /* Bit 0 suppresses the comment */
337 bSeparateDetail = (eCommentFormat & 8)!=0;
338 switch( (eCommentFormat>>1)&3 ){
339 case 1: bHashAfterComment = 1; break;
340 case 2: bHashInDetail = 1; break;
341 default: bHashBeforeComment = 1; break;
342 }
 
343 fnid = db_int(0, "SELECT fnid FROM filename WHERE name=%Q", zFilename);
344 if( fnid==0 ){
345 @ No such file: %h(zFilename)
346 style_footer();
347 return;
@@ -445,12 +459,10 @@
445 }else{
446 blob_appendf(&title, "History of ");
447 hyperlinked_path(zFilename, &title, 0, "tree", "");
448 if( fShowId ) blob_appendf(&title, " (%d)", fnid);
449 }
450 style_submenu_jsbutton("Advanced", STYLE_BASIC, "reclutter()");
451 style_submenu_jsbutton("Basic", STYLE_CLUTTER, "declutter()");
452 @ <h2>%b(&title)</h2>
453 blob_reset(&title);
454 pGraph = graph_init();
455 @ <table id="timelineTable%d(iTableId)" class="timelineTable">
456 if( baseCheckin ){
@@ -514,81 +526,86 @@
514 @ <tr><td class="timelineTime">
515 @ %z(href("%R/artifact/%!S",zUuid))%s(zTime)</a></td>
516 @ <td class="timelineGraph"><div id="m%d(gidx)" class="tl-nodemark"></div>
517 @ </td>
518 if( zBgClr && zBgClr[0] ){
519 @ <td class="timelineTableCell" style="background-color: %h(zBgClr);">
520 }else{
521 @ <td class="timelineTableCell">
522 }
523 if( bHashBeforeComment && zUuid ){
524 hyperlink_to_uuid(zUuid);
525 }
526 @ <span class="timelineComment timelineCheckinComment" \
527 @ onclick='toggleDetail(%d(frid))'>
528 @ %W(zCom)</span>
529 if( bHashAfterComment && zUuid ){
530 hyperlink_to_uuid(zUuid);
531 }
532 if( bShowDetail ){
533 @ <span class='timelineEllipsis anticlutter' id='ellipsis-%d(frid)' \
534 @ onclick='toggleDetail(%d(frid))'>...</span>
535 if( bSeparateDetail ){
536 if( zBgClr && zBgClr[0] ){
537 @ <td class="timelineTableCell timelineDetailCell"
538 @ style="background-color: %h(zBgClr);">
539 }else{
540 @ <td class="timelineTableCell timelineDetailCell">
541 }
542 }
543 cgi_printf("<span class='clutter' id='detail-%d'>", frid);
544 cgi_printf("<span class='timelineDetail timelineCheckinDetail'>(");
545 if( zUuid && bHashInDetail ){
546 @ file: %z(href("%R/artifact/%!S",zUuid))[%S(zUuid)]</a>
547 if( fShowId ){
548 int srcId = delta_source_rid(frid);
549 if( srcId>0 ){
550 @ id: %d(frid)&larr;%d(srcId)
551 }else{
552 @ id: %d(frid)
553 }
554 }
555 }
556 @ check-in:
557 hyperlink_to_uuid(zCkin);
558 if( fShowId ){
559 @ (%d(fmid))
560 }
561 @ user:
562 hyperlink_to_user(zUser, zDate, ",");
563 @ branch: %z(href("%R/timeline?t=%T&n=200",zBr))%h(zBr)</a>,
564 @ size: %d(szFile))
565 if( zUuid && origCheckin==0 ){
566 if( nParent==0 ){
567 @ <b>Added</b>
568 }else if( pfnid ){
569 char *zPrevName = db_text(0,"SELECT name FROM filename WHERE fnid=%d",
570 pfnid);
571 @ <b>Renamed</b> from
572 @ %z(href("%R/finfo?name=%t", zPrevName))%h(zPrevName)</a>
573 }
574 }
575 if( zUuid==0 ){
576 char *zNewName;
577 zNewName = db_text(0,
578 "SELECT name FROM filename WHERE fnid = "
579 " (SELECT fnid FROM mlink"
580 " WHERE mid=%d"
581 " AND pfnid IN (SELECT fnid FROM filename WHERE name=%Q))",
582 fmid, zFilename);
583 if( zNewName ){
584 @ <b>Renamed</b> to
585 @ %z(href("%R/finfo?name=%t",zNewName))%h(zNewName)</a>
586 fossil_free(zNewName);
587 }else{
588 @ <b>Deleted</b>
589 }
 
 
 
 
 
590 }
591 }
592 if( g.perm.Hyperlink && zUuid ){
593 const char *z = zFilename;
594 @ <span id='links-%d(frid)'><span class='timelineExtraLinks'>
@@ -614,12 +631,15 @@
614 }
615 zAncLink = href("%R/finfo?name=%T&ci=%!S&debug=1",zFilename,zCkin);
616 @ %z(zAncLink)[ancestry]</a>
617 }
618 tag_private_status(frid);
619 if( bShowDetail ){
 
620 @ </span></span>
 
 
621 }
622 @ </td></tr>
623 }
624 db_finalize(&q);
625 db_finalize(&qparent);
626
--- src/finfo.c
+++ src/finfo.c
@@ -314,34 +314,48 @@
314 int fDebug = atoi(PD("debug","0"));
315 int fShowId = P("showid")!=0;
316 Stmt qparent;
317 int iTableId = timeline_tableid();
318 int bHashBeforeComment = 0; /* Show hash before the comment */
 
319 int bHashInDetail = 0; /* Show the hash inside the detail section */
320 int bShowDetail; /* Show the detail section */
321 int bSeparateDetail; /* Detail section in a separate column */
322 int eCommentFormat; /* value for timeline-comment-format */
323 int tmFlags = 0; /* Viewing mode */
324 const char *zStyle; /* Viewing mode name */
325
326 login_check_credentials();
327 if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
328 style_header("File History");
329 login_anonymous_available();
330 tmFlags = timeline_ss_submenu();
331 if( tmFlags & TIMELINE_COLUMNAR ){
332 zStyle = "Columnar";
333 }else if( tmFlags & TIMELINE_COMPACT ){
334 zStyle = "Compact";
335 }else if( tmFlags & TIMELINE_VERBOSE ){
336 zStyle = "Verbose";
337 }else{
338 zStyle = "Modern";
339 }
340 url_initialize(&url, "finfo");
341 if( brBg ) url_add_parameter(&url, "brbg", 0);
342 if( uBg ) url_add_parameter(&url, "ubg", 0);
343 baseCheckin = name_to_rid_www("ci");
344 zPrevDate[0] = 0;
345 zFilename = PD("name","");
346 cookie_render();
347 #if 0
348 eCommentFormat = db_get_int("timeline-comment-format", 4);
349 bShowDetail = (eCommentFormat & 1)==0; /* Bit 0 suppresses the comment */
350 bSeparateDetail = (eCommentFormat & 8)!=0;
351 switch( (eCommentFormat>>1)&3 ){
352 case 1: bHashAfterComment = 1; break;
353 case 2: bHashInDetail = 1; break;
354 default: bHashBeforeComment = 1; break;
355 }
356 #endif
357 fnid = db_int(0, "SELECT fnid FROM filename WHERE name=%Q", zFilename);
358 if( fnid==0 ){
359 @ No such file: %h(zFilename)
360 style_footer();
361 return;
@@ -445,12 +459,10 @@
459 }else{
460 blob_appendf(&title, "History of ");
461 hyperlinked_path(zFilename, &title, 0, "tree", "");
462 if( fShowId ) blob_appendf(&title, " (%d)", fnid);
463 }
 
 
464 @ <h2>%b(&title)</h2>
465 blob_reset(&title);
466 pGraph = graph_init();
467 @ <table id="timelineTable%d(iTableId)" class="timelineTable">
468 if( baseCheckin ){
@@ -514,81 +526,86 @@
526 @ <tr><td class="timelineTime">
527 @ %z(href("%R/artifact/%!S",zUuid))%s(zTime)</a></td>
528 @ <td class="timelineGraph"><div id="m%d(gidx)" class="tl-nodemark"></div>
529 @ </td>
530 if( zBgClr && zBgClr[0] ){
531 @ <td class="timeline%s(zStyle)Cell" \
532 @ style="background-color: %h(zBgClr);">
533 }else{
534 @ <td class="timeline%s(zStyle)Cell">
535 }
536 if( tmFlags & TIMELINE_COMPACT ){
537 @ <span class='timelineCompactComment' onclick='toggleDetail(%d(frid))'>
538 }else{
539 @ <span class='timeline%s(zStyle)Comment'>
540 if( (tmFlags & TIMELINE_VERBOSE)!=0 && zUuid ){
541 hyperlink_to_uuid(zUuid);
542 @ part of check-in \
543 hyperlink_to_uuid(zCkin);
544 }
545 }
546 @ %W(zCom)</span>
547 if( (tmFlags & TIMELINE_COMPACT)!=0 ){
548 @ <span class='timelineEllipsis anticlutter' id='ellipsis-%d(frid)' \
549 @ onclick='toggleDetail(%d(frid))'>...</span>
550 @ <span class='clutter timelineCompactDetail'
551 }
552 if( tmFlags & TIMELINE_COLUMNAR ){
553 if( zBgClr && zBgClr[0] ){
554 @ <td class="timelineDetailCell" style="background-color: %h(zBgClr);">
555 }else{
556 @ <td class="timelineDetailCell">
557 }
558 }
559 if( tmFlags & TIMELINE_COMPACT ){
560 cgi_printf("<span class='clutter' id='detail-%d'>",frid);
561 }
562 cgi_printf("<span class='timeline%sDetail'>", zStyle);
563 if( zUuid && (tmFlags & TIMELINE_VERBOSE)==0 ){
564 @ file:&nbsp;%z(href("%R/artifact/%!S",zUuid))[%S(zUuid)]</a>
565 if( fShowId ){
566 int srcId = delta_source_rid(frid);
567 if( srcId>0 ){
568 @ id:&nbsp;%d(frid)&larr;%d(srcId)
569 }else{
570 @ id:&nbsp;%d(frid)
571 }
572 }
573 }
574 @ check-in:&nbsp;\
575 hyperlink_to_uuid(zCkin);
576 if( fShowId ){
577 @ (%d(fmid))
578 }
579 @ user:&nbsp;\
580 hyperlink_to_user(zUser, zDate, ",");
581 @ branch:&nbsp;%z(href("%R/timeline?t=%T&n=200",zBr))%h(zBr)</a>,
582 @ size:&nbsp;%d(szFile))
583 if( zUuid && origCheckin==0 ){
584 if( nParent==0 ){
585 @ <b>Added</b>
586 }else if( pfnid ){
587 char *zPrevName = db_text(0,"SELECT name FROM filename WHERE fnid=%d",
588 pfnid);
589 @ <b>Renamed</b> from
590 @ %z(href("%R/finfo?name=%t", zPrevName))%h(zPrevName)</a>
591 }
592 }
593 if( zUuid==0 ){
594 char *zNewName;
595 zNewName = db_text(0,
596 "SELECT name FROM filename WHERE fnid = "
597 " (SELECT fnid FROM mlink"
598 " WHERE mid=%d"
599 " AND pfnid IN (SELECT fnid FROM filename WHERE name=%Q))",
600 fmid, zFilename);
601 if( zNewName ){
602 @ <b>Renamed</b> to
603 @ %z(href("%R/finfo?name=%t",zNewName))%h(zNewName)</a>
604 fossil_free(zNewName);
605 }else{
606 @ <b>Deleted</b>
607 }
608 }
609 if( g.perm.Hyperlink && zUuid ){
610 const char *z = zFilename;
611 @ <span id='links-%d(frid)'><span class='timelineExtraLinks'>
@@ -614,12 +631,15 @@
631 }
632 zAncLink = href("%R/finfo?name=%T&ci=%!S&debug=1",zFilename,zCkin);
633 @ %z(zAncLink)[ancestry]</a>
634 }
635 tag_private_status(frid);
636 /* End timelineDetail */
637 if( tmFlags & TIMELINE_COMPACT ){
638 @ </span></span>
639 }else{
640 @ </span>
641 }
642 @ </td></tr>
643 }
644 db_finalize(&q);
645 db_finalize(&qparent);
646
+12
--- src/main.mk
+++ src/main.mk
@@ -33,10 +33,11 @@
3333
$(SRCDIR)/clearsign.c \
3434
$(SRCDIR)/clone.c \
3535
$(SRCDIR)/comformat.c \
3636
$(SRCDIR)/configure.c \
3737
$(SRCDIR)/content.c \
38
+ $(SRCDIR)/cookies.c \
3839
$(SRCDIR)/db.c \
3940
$(SRCDIR)/delta.c \
4041
$(SRCDIR)/deltacmd.c \
4142
$(SRCDIR)/descendants.c \
4243
$(SRCDIR)/diff.c \
@@ -217,10 +218,11 @@
217218
$(OBJDIR)/clearsign_.c \
218219
$(OBJDIR)/clone_.c \
219220
$(OBJDIR)/comformat_.c \
220221
$(OBJDIR)/configure_.c \
221222
$(OBJDIR)/content_.c \
223
+ $(OBJDIR)/cookies_.c \
222224
$(OBJDIR)/db_.c \
223225
$(OBJDIR)/delta_.c \
224226
$(OBJDIR)/deltacmd_.c \
225227
$(OBJDIR)/descendants_.c \
226228
$(OBJDIR)/diff_.c \
@@ -345,10 +347,11 @@
345347
$(OBJDIR)/clearsign.o \
346348
$(OBJDIR)/clone.o \
347349
$(OBJDIR)/comformat.o \
348350
$(OBJDIR)/configure.o \
349351
$(OBJDIR)/content.o \
352
+ $(OBJDIR)/cookies.o \
350353
$(OBJDIR)/db.o \
351354
$(OBJDIR)/delta.o \
352355
$(OBJDIR)/deltacmd.o \
353356
$(OBJDIR)/descendants.o \
354357
$(OBJDIR)/diff.o \
@@ -636,10 +639,11 @@
636639
$(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h \
637640
$(OBJDIR)/clone_.c:$(OBJDIR)/clone.h \
638641
$(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h \
639642
$(OBJDIR)/configure_.c:$(OBJDIR)/configure.h \
640643
$(OBJDIR)/content_.c:$(OBJDIR)/content.h \
644
+ $(OBJDIR)/cookies_.c:$(OBJDIR)/cookies.h \
641645
$(OBJDIR)/db_.c:$(OBJDIR)/db.h \
642646
$(OBJDIR)/delta_.c:$(OBJDIR)/delta.h \
643647
$(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h \
644648
$(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h \
645649
$(OBJDIR)/diff_.c:$(OBJDIR)/diff.h \
@@ -908,10 +912,18 @@
908912
909913
$(OBJDIR)/content.o: $(OBJDIR)/content_.c $(OBJDIR)/content.h $(SRCDIR)/config.h
910914
$(XTCC) -o $(OBJDIR)/content.o -c $(OBJDIR)/content_.c
911915
912916
$(OBJDIR)/content.h: $(OBJDIR)/headers
917
+
918
+$(OBJDIR)/cookies_.c: $(SRCDIR)/cookies.c $(OBJDIR)/translate
919
+ $(OBJDIR)/translate $(SRCDIR)/cookies.c >$@
920
+
921
+$(OBJDIR)/cookies.o: $(OBJDIR)/cookies_.c $(OBJDIR)/cookies.h $(SRCDIR)/config.h
922
+ $(XTCC) -o $(OBJDIR)/cookies.o -c $(OBJDIR)/cookies_.c
923
+
924
+$(OBJDIR)/cookies.h: $(OBJDIR)/headers
913925
914926
$(OBJDIR)/db_.c: $(SRCDIR)/db.c $(OBJDIR)/translate
915927
$(OBJDIR)/translate $(SRCDIR)/db.c >$@
916928
917929
$(OBJDIR)/db.o: $(OBJDIR)/db_.c $(OBJDIR)/db.h $(SRCDIR)/config.h
918930
--- src/main.mk
+++ src/main.mk
@@ -33,10 +33,11 @@
33 $(SRCDIR)/clearsign.c \
34 $(SRCDIR)/clone.c \
35 $(SRCDIR)/comformat.c \
36 $(SRCDIR)/configure.c \
37 $(SRCDIR)/content.c \
 
38 $(SRCDIR)/db.c \
39 $(SRCDIR)/delta.c \
40 $(SRCDIR)/deltacmd.c \
41 $(SRCDIR)/descendants.c \
42 $(SRCDIR)/diff.c \
@@ -217,10 +218,11 @@
217 $(OBJDIR)/clearsign_.c \
218 $(OBJDIR)/clone_.c \
219 $(OBJDIR)/comformat_.c \
220 $(OBJDIR)/configure_.c \
221 $(OBJDIR)/content_.c \
 
222 $(OBJDIR)/db_.c \
223 $(OBJDIR)/delta_.c \
224 $(OBJDIR)/deltacmd_.c \
225 $(OBJDIR)/descendants_.c \
226 $(OBJDIR)/diff_.c \
@@ -345,10 +347,11 @@
345 $(OBJDIR)/clearsign.o \
346 $(OBJDIR)/clone.o \
347 $(OBJDIR)/comformat.o \
348 $(OBJDIR)/configure.o \
349 $(OBJDIR)/content.o \
 
350 $(OBJDIR)/db.o \
351 $(OBJDIR)/delta.o \
352 $(OBJDIR)/deltacmd.o \
353 $(OBJDIR)/descendants.o \
354 $(OBJDIR)/diff.o \
@@ -636,10 +639,11 @@
636 $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h \
637 $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h \
638 $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h \
639 $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h \
640 $(OBJDIR)/content_.c:$(OBJDIR)/content.h \
 
641 $(OBJDIR)/db_.c:$(OBJDIR)/db.h \
642 $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h \
643 $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h \
644 $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h \
645 $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h \
@@ -908,10 +912,18 @@
908
909 $(OBJDIR)/content.o: $(OBJDIR)/content_.c $(OBJDIR)/content.h $(SRCDIR)/config.h
910 $(XTCC) -o $(OBJDIR)/content.o -c $(OBJDIR)/content_.c
911
912 $(OBJDIR)/content.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
 
913
914 $(OBJDIR)/db_.c: $(SRCDIR)/db.c $(OBJDIR)/translate
915 $(OBJDIR)/translate $(SRCDIR)/db.c >$@
916
917 $(OBJDIR)/db.o: $(OBJDIR)/db_.c $(OBJDIR)/db.h $(SRCDIR)/config.h
918
--- src/main.mk
+++ src/main.mk
@@ -33,10 +33,11 @@
33 $(SRCDIR)/clearsign.c \
34 $(SRCDIR)/clone.c \
35 $(SRCDIR)/comformat.c \
36 $(SRCDIR)/configure.c \
37 $(SRCDIR)/content.c \
38 $(SRCDIR)/cookies.c \
39 $(SRCDIR)/db.c \
40 $(SRCDIR)/delta.c \
41 $(SRCDIR)/deltacmd.c \
42 $(SRCDIR)/descendants.c \
43 $(SRCDIR)/diff.c \
@@ -217,10 +218,11 @@
218 $(OBJDIR)/clearsign_.c \
219 $(OBJDIR)/clone_.c \
220 $(OBJDIR)/comformat_.c \
221 $(OBJDIR)/configure_.c \
222 $(OBJDIR)/content_.c \
223 $(OBJDIR)/cookies_.c \
224 $(OBJDIR)/db_.c \
225 $(OBJDIR)/delta_.c \
226 $(OBJDIR)/deltacmd_.c \
227 $(OBJDIR)/descendants_.c \
228 $(OBJDIR)/diff_.c \
@@ -345,10 +347,11 @@
347 $(OBJDIR)/clearsign.o \
348 $(OBJDIR)/clone.o \
349 $(OBJDIR)/comformat.o \
350 $(OBJDIR)/configure.o \
351 $(OBJDIR)/content.o \
352 $(OBJDIR)/cookies.o \
353 $(OBJDIR)/db.o \
354 $(OBJDIR)/delta.o \
355 $(OBJDIR)/deltacmd.o \
356 $(OBJDIR)/descendants.o \
357 $(OBJDIR)/diff.o \
@@ -636,10 +639,11 @@
639 $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h \
640 $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h \
641 $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h \
642 $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h \
643 $(OBJDIR)/content_.c:$(OBJDIR)/content.h \
644 $(OBJDIR)/cookies_.c:$(OBJDIR)/cookies.h \
645 $(OBJDIR)/db_.c:$(OBJDIR)/db.h \
646 $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h \
647 $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h \
648 $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h \
649 $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h \
@@ -908,10 +912,18 @@
912
913 $(OBJDIR)/content.o: $(OBJDIR)/content_.c $(OBJDIR)/content.h $(SRCDIR)/config.h
914 $(XTCC) -o $(OBJDIR)/content.o -c $(OBJDIR)/content_.c
915
916 $(OBJDIR)/content.h: $(OBJDIR)/headers
917
918 $(OBJDIR)/cookies_.c: $(SRCDIR)/cookies.c $(OBJDIR)/translate
919 $(OBJDIR)/translate $(SRCDIR)/cookies.c >$@
920
921 $(OBJDIR)/cookies.o: $(OBJDIR)/cookies_.c $(OBJDIR)/cookies.h $(SRCDIR)/config.h
922 $(XTCC) -o $(OBJDIR)/cookies.o -c $(OBJDIR)/cookies_.c
923
924 $(OBJDIR)/cookies.h: $(OBJDIR)/headers
925
926 $(OBJDIR)/db_.c: $(SRCDIR)/db.c $(OBJDIR)/translate
927 $(OBJDIR)/translate $(SRCDIR)/db.c >$@
928
929 $(OBJDIR)/db.o: $(OBJDIR)/db_.c $(OBJDIR)/db.h $(SRCDIR)/config.h
930
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -45,10 +45,11 @@
4545
clearsign
4646
clone
4747
comformat
4848
configure
4949
content
50
+ cookies
5051
db
5152
delta
5253
deltacmd
5354
descendants
5455
diff
5556
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -45,10 +45,11 @@
45 clearsign
46 clone
47 comformat
48 configure
49 content
 
50 db
51 delta
52 deltacmd
53 descendants
54 diff
55
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -45,10 +45,11 @@
45 clearsign
46 clone
47 comformat
48 configure
49 content
50 cookies
51 db
52 delta
53 deltacmd
54 descendants
55 diff
56
--- src/rebuild.c
+++ src/rebuild.c
@@ -163,10 +163,16 @@
163163
break;
164164
}
165165
}
166166
fossil_free(z);
167167
}
168
+ db_multi_exec(
169
+ "CREATE VIEW IF NOT EXISTS "
170
+ " repository.artifact(rid,rcvid,size,atype,srcid,hash,content) AS "
171
+ " SELECT blob.rid,rcvid,size,1,srcid,uuid,content"
172
+ " FROM blob LEFT JOIN delta ON (blob.rid=delta.rid);"
173
+ );
168174
}
169175
170176
/*
171177
** Variables used to store state information about an on-going "rebuild"
172178
** or "deconstruct".
173179
--- src/rebuild.c
+++ src/rebuild.c
@@ -163,10 +163,16 @@
163 break;
164 }
165 }
166 fossil_free(z);
167 }
 
 
 
 
 
 
168 }
169
170 /*
171 ** Variables used to store state information about an on-going "rebuild"
172 ** or "deconstruct".
173
--- src/rebuild.c
+++ src/rebuild.c
@@ -163,10 +163,16 @@
163 break;
164 }
165 }
166 fossil_free(z);
167 }
168 db_multi_exec(
169 "CREATE VIEW IF NOT EXISTS "
170 " repository.artifact(rid,rcvid,size,atype,srcid,hash,content) AS "
171 " SELECT blob.rid,rcvid,size,1,srcid,uuid,content"
172 " FROM blob LEFT JOIN delta ON (blob.rid=delta.rid);"
173 );
174 }
175
176 /*
177 ** Variables used to store state information about an on-going "rebuild"
178 ** or "deconstruct".
179
+19 -17
--- src/style.c
+++ src/style.c
@@ -782,24 +782,10 @@
782782
{ "span.timelineDisabled",
783783
"The suppressed duplicates lines in timeline, ..",
784784
@ font-style: italic;
785785
@ font-size: small;
786786
},
787
- { "table.timelineTable",
788
- "the format for the timeline data table",
789
- @ border: 0;
790
- @ border-collapse: collapse;
791
- },
792
- { "td.timelineTableCell",
793
- "the format for the timeline data cells",
794
- @ vertical-align: top;
795
- @ text-align: left;
796
- },
797
- { "td.timelineDetailCell",
798
- "the format for the timeline data cells for the detail column",
799
- @ padding-left: 2em;
800
- },
801787
{ "tr.timelineCurrent",
802788
"the format for the timeline data cell of the current checkout",
803789
@ padding: .1em .2em;
804790
@ border: 1px dashed #446979;
805791
@ box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.5);
@@ -837,17 +823,33 @@
837823
"the format for the graph placeholder cells in timelines",
838824
@ width: 20px;
839825
@ text-align: left;
840826
@ vertical-align: top;
841827
},
842
- { "span.timelineComment",
843
- "The check-in comment text in a timeline",
828
+ { "span.timelineCompactComment",
829
+ "The check-in comment text in Compact mode",
844830
@ cursor: pointer;
845831
},
846832
{ "span.timelineEllipsis",
847
- "The ellipsis mark at the end of a check-in comment in a timeline",
833
+ "The ellipsis mark at the end of a compact comment in a timeline",
848834
@ cursor: pointer;
835
+ },
836
+ { ".timelineModernCell, .timelineColumnarCell, .timelineDetailCell",
837
+ "The entry details for a normal timeline",
838
+ @ vertical-align: top;
839
+ @ text-align: left;
840
+ @ padding: 0.75em;
841
+ @ border: 1px #ccc solid;
842
+ @ border-radius: 1em;
843
+ },
844
+ { ".timelineModernDetail",
845
+ "Detail text for a normal timeline display",
846
+ @ font-size: 80%;
847
+ @ text-align: right;
848
+ @ float: right;
849
+ @ opacity: 0.75;
850
+ @ margin-top: 0.5em;
849851
},
850852
{ "td.timelineGraph",
851853
"the format for the graph placeholder cells in timelines",
852854
@ width: 20px;
853855
@ text-align: left;
854856
--- src/style.c
+++ src/style.c
@@ -782,24 +782,10 @@
782 { "span.timelineDisabled",
783 "The suppressed duplicates lines in timeline, ..",
784 @ font-style: italic;
785 @ font-size: small;
786 },
787 { "table.timelineTable",
788 "the format for the timeline data table",
789 @ border: 0;
790 @ border-collapse: collapse;
791 },
792 { "td.timelineTableCell",
793 "the format for the timeline data cells",
794 @ vertical-align: top;
795 @ text-align: left;
796 },
797 { "td.timelineDetailCell",
798 "the format for the timeline data cells for the detail column",
799 @ padding-left: 2em;
800 },
801 { "tr.timelineCurrent",
802 "the format for the timeline data cell of the current checkout",
803 @ padding: .1em .2em;
804 @ border: 1px dashed #446979;
805 @ box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.5);
@@ -837,17 +823,33 @@
837 "the format for the graph placeholder cells in timelines",
838 @ width: 20px;
839 @ text-align: left;
840 @ vertical-align: top;
841 },
842 { "span.timelineComment",
843 "The check-in comment text in a timeline",
844 @ cursor: pointer;
845 },
846 { "span.timelineEllipsis",
847 "The ellipsis mark at the end of a check-in comment in a timeline",
848 @ cursor: pointer;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
849 },
850 { "td.timelineGraph",
851 "the format for the graph placeholder cells in timelines",
852 @ width: 20px;
853 @ text-align: left;
854
--- src/style.c
+++ src/style.c
@@ -782,24 +782,10 @@
782 { "span.timelineDisabled",
783 "The suppressed duplicates lines in timeline, ..",
784 @ font-style: italic;
785 @ font-size: small;
786 },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
787 { "tr.timelineCurrent",
788 "the format for the timeline data cell of the current checkout",
789 @ padding: .1em .2em;
790 @ border: 1px dashed #446979;
791 @ box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.5);
@@ -837,17 +823,33 @@
823 "the format for the graph placeholder cells in timelines",
824 @ width: 20px;
825 @ text-align: left;
826 @ vertical-align: top;
827 },
828 { "span.timelineCompactComment",
829 "The check-in comment text in Compact mode",
830 @ cursor: pointer;
831 },
832 { "span.timelineEllipsis",
833 "The ellipsis mark at the end of a compact comment in a timeline",
834 @ cursor: pointer;
835 },
836 { ".timelineModernCell, .timelineColumnarCell, .timelineDetailCell",
837 "The entry details for a normal timeline",
838 @ vertical-align: top;
839 @ text-align: left;
840 @ padding: 0.75em;
841 @ border: 1px #ccc solid;
842 @ border-radius: 1em;
843 },
844 { ".timelineModernDetail",
845 "Detail text for a normal timeline display",
846 @ font-size: 80%;
847 @ text-align: right;
848 @ float: right;
849 @ opacity: 0.75;
850 @ margin-top: 0.5em;
851 },
852 { "td.timelineGraph",
853 "the format for the graph placeholder cells in timelines",
854 @ width: 20px;
855 @ text-align: left;
856
+169 -158
--- src/timeline.c
+++ src/timeline.c
@@ -103,10 +103,15 @@
103103
#define TIMELINE_UCOLOR 0x0080 /* Background color by user */
104104
#define TIMELINE_FRENAMES 0x0100 /* Detail only file name changes */
105105
#define TIMELINE_UNHIDE 0x0200 /* Unhide check-ins with "hidden" tag */
106106
#define TIMELINE_SHOWRID 0x0400 /* Show RID values in addition to UUIDs */
107107
#define TIMELINE_BISECT 0x0800 /* Show supplimental bisect information */
108
+#define TIMELINE_COMPACT 0x1000 /* Use the "compact" view style */
109
+#define TIMELINE_VERBOSE 0x2000 /* Use the "detailed" view style */
110
+#define TIMELINE_MODERN 0x4000 /* Use the "modern" view style */
111
+#define TIMELINE_COLUMNAR 0x8000 /* Use the "columns view style */
112
+#define TIMELINE_VIEWS 0xf000 /* Mask for all of the view styles */
108113
#endif
109114
110115
/*
111116
** Hash a string and use the hash to determine a background color.
112117
*/
@@ -248,16 +253,11 @@
248253
static Stmt qbranch;
249254
int pendingEndTr = 0; /* True if a </td></tr> is needed */
250255
int vid = 0; /* Current checkout version */
251256
int dateFormat = 0; /* 0: HH:MM (default) */
252257
int bCommentGitStyle = 0; /* Only show comments through first blank line */
253
- int bHashBeforeComment = 0; /* Show hash before the comment */
254
- int bHashAfterComment = 0; /* Show hash after the comment */
255
- int bHashInDetail = 0; /* Show the hash inside the detail section */
256
- int bShowDetail; /* Show the detail section */
257
- int bSeparateDetail; /* Detail in a separate column */
258
- int eCommentFormat; /* value for timeline-comment-format */
258
+ const char *zStyle; /* Sub-name for classes for the style */
259259
const char *zDateFmt;
260260
int iTableId = timeline_tableid();
261261
262262
if( fossil_strcmp(g.zIpAddr, "127.0.0.1")==0 && db_open_local(0) ){
263263
vid = db_lget_int("checkout", 0);
@@ -264,22 +264,21 @@
264264
}
265265
zPrevDate[0] = 0;
266266
mxWikiLen = db_get_int("timeline-max-comment", 0);
267267
dateFormat = db_get_int("timeline-date-format", 0);
268268
bCommentGitStyle = db_get_int("timeline-truncate-at-blank", 0);
269
- {
270
- /* Undocumented query parameter commentformat=N takes a numeric parameter to
271
- ** adjust the comment-format for testing purposes. */
272
- const char *z = P("commentformat");
273
- eCommentFormat = z ? atoi(z) : db_get_int("timeline-comment-format", 4);
274
- }
275
- bShowDetail = (eCommentFormat & 1)==0; /* Bit 0 suppresses the comment */
276
- bSeparateDetail = (eCommentFormat & 8)!=0; /* Bit 3 turns on the detail column */
277
- switch( (eCommentFormat>>1)&3 ){
278
- case 1: bHashAfterComment = 1; break;
279
- case 2: bHashInDetail = 1; break;
280
- default: bHashBeforeComment = 1; break;
269
+ if( (tmFlags & TIMELINE_VIEWS)==0 ){
270
+ tmFlags |= timeline_ss_cookie();
271
+ }
272
+ if( tmFlags & TIMELINE_COLUMNAR ){
273
+ zStyle = "Columnar";
274
+ }else if( tmFlags & TIMELINE_COMPACT ){
275
+ zStyle = "Compact";
276
+ }else if( tmFlags & TIMELINE_VERBOSE ){
277
+ zStyle = "Verbose";
278
+ }else{
279
+ zStyle = "Modern";
281280
}
282281
zDateFmt = P("datefmt");
283282
if( zDateFmt ) dateFormat = atoi(zDateFmt);
284283
if( tmFlags & TIMELINE_GRAPH ){
285284
pGraph = graph_init();
@@ -304,11 +303,11 @@
304303
const char *zDispUser = zUser && zUser[0] ? zUser : "anonymous";
305304
const char *zBr = 0; /* Branch */
306305
int commentColumn = 3; /* Column containing comment text */
307306
int modPending; /* Pending moderation */
308307
char *zDateLink; /* URL for the link on the timestamp */
309
- int drawDetailEllipsis = 1; /* True to show ellipsis in place of detail */
308
+ int drawDetailEllipsis; /* True to show ellipsis in place of detail */
310309
char zTime[20];
311310
312311
if( zDate==0 ){
313312
zDate = "YYYY-MM-DD HH:MM:SS"; /* Something wrong with the repo */
314313
}
@@ -441,13 +440,13 @@
441440
db_reset(&qbranch);
442441
@ <div id="m%d(gidx)" class="tl-nodemark"></div>
443442
}
444443
@</td>
445444
if( zBgClr && zBgClr[0] && rid!=selectedRid ){
446
- @ <td class="timelineTableCell" style="background-color: %h(zBgClr);">
445
+ @ <td class="timeline%s(zStyle)Cell" style="background-color: %h(zBgClr);">
447446
}else{
448
- @ <td class="timelineTableCell">
447
+ @ <td class="timeline%s(zStyle)Cell">
449448
}
450449
if( pGraph && zType[0]!='c' ){
451450
@ &bull;
452451
}
453452
if( modPending ){
@@ -461,11 +460,18 @@
461460
@ <b>%s(db_column_text(&bisectQuery,1))</b>
462461
@ (%d(db_column_int(&bisectQuery,0)))
463462
}
464463
db_reset(&bisectQuery);
465464
}
466
- if( bHashBeforeComment ){
465
+ drawDetailEllipsis = (tmFlags & TIMELINE_COMPACT)!=0;
466
+ db_column_blob(pQuery, commentColumn, &comment);
467
+ if( tmFlags & TIMELINE_COMPACT ){
468
+ @ <span class='timelineCompactComment' onclick='toggleDetail(%d(rid))'>
469
+ }else{
470
+ @ <span class='timeline%s(zStyle)Comment'>
471
+ }
472
+ if( (tmFlags & TIMELINE_VERBOSE)!=0 ){
467473
if( zType[0]=='c' ){
468474
hyperlink_to_uuid(zUuid);
469475
if( isLeaf ){
470476
if( db_exists("SELECT 1 FROM tagxref"
471477
" WHERE rid=%d AND tagid=%d AND tagtype>0",
@@ -487,20 +493,15 @@
487493
}else{
488494
@ (%d(rid))
489495
}
490496
}
491497
}
492
- db_column_blob(pQuery, commentColumn, &comment);
493498
if( zType[0]!='c' ){
494499
/* Comments for anything other than a check-in are generated by
495500
** "fossil rebuild" and expect to be rendered as text/x-fossil-wiki */
496
- @ <span class='timelineComment' onclick='toggleDetail(%d(rid))'>
497501
wiki_convert(&comment, 0, WIKI_INLINE);
498
- @ </span>
499502
}else{
500
- @ <span class='timelineComment timelineCheckinComment' \
501
- @ onclick='toggleDetail(%d(rid))'>
502503
if( bCommentGitStyle ){
503504
/* Truncate comment at first blank line */
504505
int ii, jj;
505506
int n = blob_size(&comment);
506507
char *z = blob_str(&comment);
@@ -521,141 +522,109 @@
521522
blob_reset(&truncated);
522523
drawDetailEllipsis = 0;
523524
}else{
524525
cgi_printf("%W",blob_str(&comment));
525526
}
526
- @ </span>
527
- }
528
- blob_reset(&comment);
529
-
530
- if( bHashAfterComment ){
531
- if( zType[0]=='c' ){
532
- hyperlink_to_uuid(zUuid);
533
- if( isLeaf ){
534
- if( db_exists("SELECT 1 FROM tagxref"
535
- " WHERE rid=%d AND tagid=%d AND tagtype>0",
536
- rid, TAG_CLOSED) ){
537
- @ <span class="timelineLeaf">Closed-Leaf</span>
538
- }else{
539
- @ <span class="timelineLeaf">Leaf</span>
540
- }
541
- }
542
- }else if( zType[0]=='e' && tagid ){
543
- hyperlink_to_event_tagid(tagid<0?-tagid:tagid);
544
- }else if( (tmFlags & TIMELINE_ARTID)!=0 ){
545
- hyperlink_to_uuid(zUuid);
546
- }
547
- if( tmFlags & TIMELINE_SHOWRID ){
548
- int srcId = delta_source_rid(rid);
549
- if( srcId ){
550
- @ (%d(rid)&larr;%d(srcId))
551
- }else{
552
- @ (%d(rid))
553
- }
554
- }
555
- drawDetailEllipsis = 1;
556
- }
557
-
527
+ }
528
+ @ </span>
529
+ blob_reset(&comment);
558530
559531
/* Generate extra information and hyperlinks to follow the comment.
560532
** Example: "(check-in: [abcdefg], user: drh, tags: trunk)"
561533
*/
562
- if( bShowDetail ){
563
- if( drawDetailEllipsis ){
564
- @ <span class='timelineEllipsis anticlutter' id='ellipsis-%d(rid)' \
565
- @ onclick='toggleDetail(%d(rid))'>...</span>
566
- }
567
- if( bSeparateDetail ){
568
- if( zBgClr && zBgClr[0] && rid!=selectedRid ){
569
- @ <td class="timelineTableCell timelineDetailCell"
570
- @ style="background-color: %h(zBgClr);">
571
- }else{
572
- @ <td class="timelineTableCell timelineDetailCell">
573
- }
574
- }
575
- cgi_printf("<span class='clutter' id='detail-%d'>", rid);
576
- if( zType[0]=='c' ){
577
- cgi_printf("<span class='timelineDetail timelineCheckinDetail'>(");
578
- }else{
579
- cgi_printf("<span class='timelineDetail'>(");
580
- }
581
-
582
- if( bHashInDetail ){
583
- if( zType[0]=='c' ){
584
- if( isLeaf ){
585
- if( db_exists("SELECT 1 FROM tagxref"
586
- " WHERE rid=%d AND tagid=%d AND tagtype>0",
587
- rid, TAG_CLOSED) ){
588
- @ <span class='timelineLeaf'>Closed-Leaf</span>
589
- }else{
590
- @ <span class='timelineLeaf'>Leaf</span>
591
- }
592
- }
593
- cgi_printf("check-in: ");
594
- hyperlink_to_uuid(zUuid);
595
- }else if( zType[0]=='e' && tagid ){
596
- cgi_printf("technote: ");
597
- hyperlink_to_event_tagid(tagid<0?-tagid:tagid);
598
- }else{
599
- cgi_printf("artifact: ");
600
- hyperlink_to_uuid(zUuid);
601
- }
602
- }
603
-
604
- if( g.perm.Hyperlink && fossil_strcmp(zDispUser, zThisUser)!=0 ){
605
- char *zLink = mprintf("%R/timeline?u=%h&c=%t&nd&n=200", zDispUser, zDate);
606
- cgi_printf("user: %z%h</a>", href("%z",zLink), zDispUser);
607
- }else{
608
- cgi_printf("user: %h", zDispUser);
609
- }
610
-
611
- /* Generate the "tags: TAGLIST" at the end of the comment, together
612
- ** with hyperlinks to the tag list.
613
- */
614
- if( zTagList && zTagList[0]==0 ) zTagList = 0;
615
- if( zTagList ){
616
- if( g.perm.Hyperlink ){
617
- int i;
618
- const char *z = zTagList;
619
- Blob links;
620
- blob_zero(&links);
621
- while( z && z[0] ){
622
- for(i=0; z[i] && (z[i]!=',' || z[i+1]!=' '); i++){}
623
- if( zThisTag==0 || memcmp(z, zThisTag, i)!=0 || zThisTag[i]!=0 ){
624
- blob_appendf(&links,
625
- "%z%#h</a>%.2s",
626
- href("%R/timeline?r=%#t&nd&c=%t&n=200",i,z,zDate), i,z, &z[i]
627
- );
628
- }else{
629
- blob_appendf(&links, "%#h", i+2, z);
630
- }
631
- if( z[i]==0 ) break;
632
- z += i+2;
633
- }
634
- cgi_printf(" tags: %s", blob_str(&links));
635
- blob_reset(&links);
636
- }else{
637
- cgi_printf(" tags: %h", zTagList);
638
- }
639
- }
640
-
641
- if( tmFlags & TIMELINE_SHOWRID ){
642
- int srcId = delta_source_rid(rid);
643
- if( srcId ){
644
- cgi_printf(" id: %d&larr;%d", rid, srcId);
645
- }else{
646
- cgi_printf(" id: %d", rid);
647
- }
648
- }
649
- cgi_printf(")</span></span>\n"); /* End of the details section */
650
- }
651
-
652
- tag_private_status(rid);
653
-
654
- /* Generate extra hyperlinks at the end of the comment */
534
+ if( drawDetailEllipsis ){
535
+ @ <span class='timelineEllipsis anticlutter' id='ellipsis-%d(rid)' \
536
+ @ onclick='toggleDetail(%d(rid))'>...</span>
537
+ }
538
+ if( tmFlags & TIMELINE_COLUMNAR ){
539
+ if( zBgClr && zBgClr[0] && rid!=selectedRid ){
540
+ @ <td class="timelineDetailCell" style="background-color: %h(zBgClr);">
541
+ }else{
542
+ @ <td class="timelineDetailCell">
543
+ }
544
+ }
545
+ if( tmFlags & TIMELINE_COMPACT ){
546
+ cgi_printf("<span class='clutter' id='detail-%d'>",rid);
547
+ }
548
+ cgi_printf("<span class='timeline%sDetail'>", zStyle);
549
+
550
+ if( (tmFlags & TIMELINE_VERBOSE)==0 ){
551
+ if( zType[0]=='c' ){
552
+ if( isLeaf ){
553
+ if( db_exists("SELECT 1 FROM tagxref"
554
+ " WHERE rid=%d AND tagid=%d AND tagtype>0",
555
+ rid, TAG_CLOSED) ){
556
+ @ <span class='timelineLeaf'>Closed-Leaf</span>
557
+ }else{
558
+ @ <span class='timelineLeaf'>Leaf</span>
559
+ }
560
+ }
561
+ cgi_printf("check-in:&nbsp;");
562
+ hyperlink_to_uuid(zUuid);
563
+ }else if( zType[0]=='e' && tagid ){
564
+ cgi_printf("technote:&nbsp;");
565
+ hyperlink_to_event_tagid(tagid<0?-tagid:tagid);
566
+ }else{
567
+ cgi_printf("artifact:&nbsp;");
568
+ hyperlink_to_uuid(zUuid);
569
+ }
570
+ }
571
+
572
+ if( g.perm.Hyperlink && fossil_strcmp(zDispUser, zThisUser)!=0 ){
573
+ char *zLink = mprintf("%R/timeline?u=%h&c=%t&nd&n=200", zDispUser, zDate);
574
+ cgi_printf("user:&nbsp;%z%h</a>", href("%z",zLink), zDispUser);
575
+ }else{
576
+ cgi_printf("user:&nbsp;%h", zDispUser);
577
+ }
578
+
579
+ /* Generate the "tags: TAGLIST" at the end of the comment, together
580
+ ** with hyperlinks to the tag list.
581
+ */
582
+ if( zTagList && zTagList[0]==0 ) zTagList = 0;
583
+ if( zTagList ){
584
+ if( g.perm.Hyperlink ){
585
+ int i;
586
+ const char *z = zTagList;
587
+ Blob links;
588
+ blob_zero(&links);
589
+ while( z && z[0] ){
590
+ for(i=0; z[i] && (z[i]!=',' || z[i+1]!=' '); i++){}
591
+ if( zThisTag==0 || memcmp(z, zThisTag, i)!=0 || zThisTag[i]!=0 ){
592
+ blob_appendf(&links,
593
+ "%z%#h</a>%.2s",
594
+ href("%R/timeline?r=%#t&nd&c=%t&n=200",i,z,zDate), i,z, &z[i]
595
+ );
596
+ }else{
597
+ blob_appendf(&links, "%#h", i+2, z);
598
+ }
599
+ if( z[i]==0 ) break;
600
+ z += i+2;
601
+ }
602
+ cgi_printf(" tags:&nbsp;%s", blob_str(&links));
603
+ blob_reset(&links);
604
+ }else{
605
+ cgi_printf(" tags:&nbsp;%h", zTagList);
606
+ }
607
+ }
608
+
609
+ if( tmFlags & TIMELINE_SHOWRID ){
610
+ int srcId = delta_source_rid(rid);
611
+ if( srcId ){
612
+ cgi_printf(" id:&nbsp;%d&larr;%d", rid, srcId);
613
+ }else{
614
+ cgi_printf(" id:&nbsp;%d", rid);
615
+ }
616
+ }
617
+ tag_private_status(rid);
655618
if( xExtra ){
656619
xExtra(rid);
620
+ }
621
+ /* End timelineDetail */
622
+ if( tmFlags & TIMELINE_COMPACT ){
623
+ @ </span></span>
624
+ }else{
625
+ @ </span>
657626
}
658627
659628
/* Generate the file-change list if requested */
660629
if( (tmFlags & (TIMELINE_FCHANGES|TIMELINE_FRENAMES))!=0
661630
&& zType[0]=='c' && g.perm.Hyperlink
@@ -1356,13 +1325,45 @@
13561325
az[i++] = "Wiki";
13571326
}
13581327
assert( i<=count(az) );
13591328
}
13601329
if( i>2 ){
1361
- style_submenu_multichoice("y", i/2, az, isDisabled|STYLE_CLUTTER);
1330
+ style_submenu_multichoice("y", i/2, az, isDisabled);
13621331
}
13631332
}
1333
+
1334
+/*
1335
+** Convert the current "ss" display preferences cookie into an appropriate TIMELINE_* flag
1336
+*/
1337
+int timeline_ss_cookie(void){
1338
+ int tmFlags;
1339
+ switch( cookie_value("ss","m")[0] ){
1340
+ case 'c': tmFlags = TIMELINE_COMPACT; break;
1341
+ case 'v': tmFlags = TIMELINE_VERBOSE; break;
1342
+ case 'j': tmFlags = TIMELINE_COLUMNAR; break;
1343
+ default: tmFlags = TIMELINE_MODERN; break;
1344
+ }
1345
+ return tmFlags;
1346
+}
1347
+
1348
+/*
1349
+** Add the select/option box to the timeline submenu that is used to
1350
+** set the ss= parameter that determines the viewing mode.
1351
+**
1352
+** Return the TIMELINE_* value appropriate for the view-style.
1353
+*/
1354
+int timeline_ss_submenu(void){
1355
+ static const char *azViewStyles[] = {
1356
+ "m", "Modern View",
1357
+ "c", "Compact View",
1358
+ "v", "Verbose View",
1359
+ "j", "Columnar View",
1360
+ };
1361
+ cookie_link_parameter("ss","ss","m");
1362
+ style_submenu_multichoice("ss", 4, azViewStyles, 0);
1363
+ return timeline_ss_cookie();
1364
+}
13641365
13651366
/*
13661367
** If the zChng string is not NULL, then it should be a comma-separated
13671368
** list of glob patterns for filenames. Add an term to the WHERE clause
13681369
** for the SQL statement under construction that excludes any check-in that
@@ -1618,13 +1619,14 @@
16181619
** dp=CHECKIN The same as d=CHECKIN&p=CHECKIN
16191620
** t=TAG Show only check-ins with the given TAG
16201621
** r=TAG Show check-ins related to TAG, equivalent to t=TAG&rel
16211622
** rel Show related check-ins as well as those matching t=TAG
16221623
** mionly Limit rel to show ancestors but not descendants
1623
-** ms=STYLE Set tag match style to EXACT, GLOB, LIKE, REGEXP
1624
+** ms=MATCHSTYLE Set tag match style to EXACT, GLOB, LIKE, REGEXP
16241625
** u=USER Only show items associated with USER
1625
-** y=TYPE 'ci', 'w', 't', 'e', or 'all'. 'ci' is the default.
1626
+** y=TYPE 'ci', 'w', 't', 'e', or 'all'.
1627
+** ss=VIEWSTYLE c: "Compact" v: "Verbose" m: "Modern" j: "Columnar"
16261628
** ng No Graph.
16271629
** nd Do not highlight the focus check-in
16281630
** v Show details of files changed
16291631
** f=CHECKIN Show family (immediate parents and children) of CHECKIN
16301632
** from=CHECKIN Path from...
@@ -1701,26 +1703,30 @@
17011703
char *zNewerButton = 0; /* URL for Newer button at the top */
17021704
int selectedRid = -9999999; /* Show a highlight on this RID */
17031705
int disableY = 0; /* Disable type selector on submenu */
17041706
17051707
/* Set number of rows to display */
1708
+ cookie_read_parameter("n","n");
17061709
z = P("n");
17071710
if( z==0 ) z = db_get("timeline-default-length",0);
17081711
if( z ){
17091712
if( fossil_strcmp(z,"all")==0 ){
17101713
nEntry = 0;
17111714
}else{
17121715
nEntry = atoi(z);
17131716
if( nEntry<=0 ){
1714
- cgi_replace_query_parameter("n","10");
1717
+ z = "10";
17151718
nEntry = 10;
17161719
}
17171720
}
17181721
}else{
1719
- cgi_replace_query_parameter("n","50");
1722
+ z = "50";
17201723
nEntry = 50;
17211724
}
1725
+ cgi_replace_query_parameter("n",z);
1726
+ cookie_write_parameter("n","n",0);
1727
+ tmFlags |= timeline_ss_submenu();
17221728
17231729
/* To view the timeline, must have permission to read project data.
17241730
*/
17251731
pd_rid = name_to_typed_rid(P("dp"),"ci");
17261732
if( pd_rid ){
@@ -1731,15 +1737,20 @@
17311737
|| (bisectOnly && !g.perm.Setup)
17321738
){
17331739
login_needed(g.anon.Read && g.anon.RdTkt && g.anon.RdWiki);
17341740
return;
17351741
}
1742
+ cookie_read_parameter("y","y");
17361743
zType = P("y");
17371744
if( zType==0 ){
17381745
zType = g.perm.Read ? "ci" : "all";
17391746
cgi_set_parameter("y", zType);
17401747
}
1748
+ if( zType[0]=='a' || zType[0]=='c' ){
1749
+ cookie_write_parameter("y","y",zType);
1750
+ }
1751
+ cookie_render();
17411752
url_initialize(&url, "timeline");
17421753
cgi_query_parameters_to_url(&url);
17431754
17441755
/* Convert r=TAG to t=TAG&rel. */
17451756
if( zBrName && !related ){
@@ -2258,11 +2269,11 @@
22582269
}
22592270
if( zType[0]=='a' || zType[0]=='c' ){
22602271
style_submenu_checkbox("unhide", "Unhide", STYLE_CLUTTER, 0);
22612272
}
22622273
style_submenu_checkbox("v", "Files", (zType[0]!='a' && zType[0]!='c')|STYLE_CLUTTER,0);
2263
- style_submenu_entry("n","Max:",4,STYLE_CLUTTER);
2274
+ style_submenu_entry("n","Max:",4,0);
22642275
timeline_y_submenu(disableY);
22652276
style_submenu_entry("t", "Tag Filter:", -8, STYLE_CLUTTER);
22662277
style_submenu_multichoice("ms", count(azMatchStyles)/2, azMatchStyles, STYLE_CLUTTER);
22672278
}
22682279
blob_zero(&cond);
22692280
--- src/timeline.c
+++ src/timeline.c
@@ -103,10 +103,15 @@
103 #define TIMELINE_UCOLOR 0x0080 /* Background color by user */
104 #define TIMELINE_FRENAMES 0x0100 /* Detail only file name changes */
105 #define TIMELINE_UNHIDE 0x0200 /* Unhide check-ins with "hidden" tag */
106 #define TIMELINE_SHOWRID 0x0400 /* Show RID values in addition to UUIDs */
107 #define TIMELINE_BISECT 0x0800 /* Show supplimental bisect information */
 
 
 
 
 
108 #endif
109
110 /*
111 ** Hash a string and use the hash to determine a background color.
112 */
@@ -248,16 +253,11 @@
248 static Stmt qbranch;
249 int pendingEndTr = 0; /* True if a </td></tr> is needed */
250 int vid = 0; /* Current checkout version */
251 int dateFormat = 0; /* 0: HH:MM (default) */
252 int bCommentGitStyle = 0; /* Only show comments through first blank line */
253 int bHashBeforeComment = 0; /* Show hash before the comment */
254 int bHashAfterComment = 0; /* Show hash after the comment */
255 int bHashInDetail = 0; /* Show the hash inside the detail section */
256 int bShowDetail; /* Show the detail section */
257 int bSeparateDetail; /* Detail in a separate column */
258 int eCommentFormat; /* value for timeline-comment-format */
259 const char *zDateFmt;
260 int iTableId = timeline_tableid();
261
262 if( fossil_strcmp(g.zIpAddr, "127.0.0.1")==0 && db_open_local(0) ){
263 vid = db_lget_int("checkout", 0);
@@ -264,22 +264,21 @@
264 }
265 zPrevDate[0] = 0;
266 mxWikiLen = db_get_int("timeline-max-comment", 0);
267 dateFormat = db_get_int("timeline-date-format", 0);
268 bCommentGitStyle = db_get_int("timeline-truncate-at-blank", 0);
269 {
270 /* Undocumented query parameter commentformat=N takes a numeric parameter to
271 ** adjust the comment-format for testing purposes. */
272 const char *z = P("commentformat");
273 eCommentFormat = z ? atoi(z) : db_get_int("timeline-comment-format", 4);
274 }
275 bShowDetail = (eCommentFormat & 1)==0; /* Bit 0 suppresses the comment */
276 bSeparateDetail = (eCommentFormat & 8)!=0; /* Bit 3 turns on the detail column */
277 switch( (eCommentFormat>>1)&3 ){
278 case 1: bHashAfterComment = 1; break;
279 case 2: bHashInDetail = 1; break;
280 default: bHashBeforeComment = 1; break;
281 }
282 zDateFmt = P("datefmt");
283 if( zDateFmt ) dateFormat = atoi(zDateFmt);
284 if( tmFlags & TIMELINE_GRAPH ){
285 pGraph = graph_init();
@@ -304,11 +303,11 @@
304 const char *zDispUser = zUser && zUser[0] ? zUser : "anonymous";
305 const char *zBr = 0; /* Branch */
306 int commentColumn = 3; /* Column containing comment text */
307 int modPending; /* Pending moderation */
308 char *zDateLink; /* URL for the link on the timestamp */
309 int drawDetailEllipsis = 1; /* True to show ellipsis in place of detail */
310 char zTime[20];
311
312 if( zDate==0 ){
313 zDate = "YYYY-MM-DD HH:MM:SS"; /* Something wrong with the repo */
314 }
@@ -441,13 +440,13 @@
441 db_reset(&qbranch);
442 @ <div id="m%d(gidx)" class="tl-nodemark"></div>
443 }
444 @</td>
445 if( zBgClr && zBgClr[0] && rid!=selectedRid ){
446 @ <td class="timelineTableCell" style="background-color: %h(zBgClr);">
447 }else{
448 @ <td class="timelineTableCell">
449 }
450 if( pGraph && zType[0]!='c' ){
451 @ &bull;
452 }
453 if( modPending ){
@@ -461,11 +460,18 @@
461 @ <b>%s(db_column_text(&bisectQuery,1))</b>
462 @ (%d(db_column_int(&bisectQuery,0)))
463 }
464 db_reset(&bisectQuery);
465 }
466 if( bHashBeforeComment ){
 
 
 
 
 
 
 
467 if( zType[0]=='c' ){
468 hyperlink_to_uuid(zUuid);
469 if( isLeaf ){
470 if( db_exists("SELECT 1 FROM tagxref"
471 " WHERE rid=%d AND tagid=%d AND tagtype>0",
@@ -487,20 +493,15 @@
487 }else{
488 @ (%d(rid))
489 }
490 }
491 }
492 db_column_blob(pQuery, commentColumn, &comment);
493 if( zType[0]!='c' ){
494 /* Comments for anything other than a check-in are generated by
495 ** "fossil rebuild" and expect to be rendered as text/x-fossil-wiki */
496 @ <span class='timelineComment' onclick='toggleDetail(%d(rid))'>
497 wiki_convert(&comment, 0, WIKI_INLINE);
498 @ </span>
499 }else{
500 @ <span class='timelineComment timelineCheckinComment' \
501 @ onclick='toggleDetail(%d(rid))'>
502 if( bCommentGitStyle ){
503 /* Truncate comment at first blank line */
504 int ii, jj;
505 int n = blob_size(&comment);
506 char *z = blob_str(&comment);
@@ -521,141 +522,109 @@
521 blob_reset(&truncated);
522 drawDetailEllipsis = 0;
523 }else{
524 cgi_printf("%W",blob_str(&comment));
525 }
526 @ </span>
527 }
528 blob_reset(&comment);
529
530 if( bHashAfterComment ){
531 if( zType[0]=='c' ){
532 hyperlink_to_uuid(zUuid);
533 if( isLeaf ){
534 if( db_exists("SELECT 1 FROM tagxref"
535 " WHERE rid=%d AND tagid=%d AND tagtype>0",
536 rid, TAG_CLOSED) ){
537 @ <span class="timelineLeaf">Closed-Leaf</span>
538 }else{
539 @ <span class="timelineLeaf">Leaf</span>
540 }
541 }
542 }else if( zType[0]=='e' && tagid ){
543 hyperlink_to_event_tagid(tagid<0?-tagid:tagid);
544 }else if( (tmFlags & TIMELINE_ARTID)!=0 ){
545 hyperlink_to_uuid(zUuid);
546 }
547 if( tmFlags & TIMELINE_SHOWRID ){
548 int srcId = delta_source_rid(rid);
549 if( srcId ){
550 @ (%d(rid)&larr;%d(srcId))
551 }else{
552 @ (%d(rid))
553 }
554 }
555 drawDetailEllipsis = 1;
556 }
557
558
559 /* Generate extra information and hyperlinks to follow the comment.
560 ** Example: "(check-in: [abcdefg], user: drh, tags: trunk)"
561 */
562 if( bShowDetail ){
563 if( drawDetailEllipsis ){
564 @ <span class='timelineEllipsis anticlutter' id='ellipsis-%d(rid)' \
565 @ onclick='toggleDetail(%d(rid))'>...</span>
566 }
567 if( bSeparateDetail ){
568 if( zBgClr && zBgClr[0] && rid!=selectedRid ){
569 @ <td class="timelineTableCell timelineDetailCell"
570 @ style="background-color: %h(zBgClr);">
571 }else{
572 @ <td class="timelineTableCell timelineDetailCell">
573 }
574 }
575 cgi_printf("<span class='clutter' id='detail-%d'>", rid);
576 if( zType[0]=='c' ){
577 cgi_printf("<span class='timelineDetail timelineCheckinDetail'>(");
578 }else{
579 cgi_printf("<span class='timelineDetail'>(");
580 }
581
582 if( bHashInDetail ){
583 if( zType[0]=='c' ){
584 if( isLeaf ){
585 if( db_exists("SELECT 1 FROM tagxref"
586 " WHERE rid=%d AND tagid=%d AND tagtype>0",
587 rid, TAG_CLOSED) ){
588 @ <span class='timelineLeaf'>Closed-Leaf</span>
589 }else{
590 @ <span class='timelineLeaf'>Leaf</span>
591 }
592 }
593 cgi_printf("check-in: ");
594 hyperlink_to_uuid(zUuid);
595 }else if( zType[0]=='e' && tagid ){
596 cgi_printf("technote: ");
597 hyperlink_to_event_tagid(tagid<0?-tagid:tagid);
598 }else{
599 cgi_printf("artifact: ");
600 hyperlink_to_uuid(zUuid);
601 }
602 }
603
604 if( g.perm.Hyperlink && fossil_strcmp(zDispUser, zThisUser)!=0 ){
605 char *zLink = mprintf("%R/timeline?u=%h&c=%t&nd&n=200", zDispUser, zDate);
606 cgi_printf("user: %z%h</a>", href("%z",zLink), zDispUser);
607 }else{
608 cgi_printf("user: %h", zDispUser);
609 }
610
611 /* Generate the "tags: TAGLIST" at the end of the comment, together
612 ** with hyperlinks to the tag list.
613 */
614 if( zTagList && zTagList[0]==0 ) zTagList = 0;
615 if( zTagList ){
616 if( g.perm.Hyperlink ){
617 int i;
618 const char *z = zTagList;
619 Blob links;
620 blob_zero(&links);
621 while( z && z[0] ){
622 for(i=0; z[i] && (z[i]!=',' || z[i+1]!=' '); i++){}
623 if( zThisTag==0 || memcmp(z, zThisTag, i)!=0 || zThisTag[i]!=0 ){
624 blob_appendf(&links,
625 "%z%#h</a>%.2s",
626 href("%R/timeline?r=%#t&nd&c=%t&n=200",i,z,zDate), i,z, &z[i]
627 );
628 }else{
629 blob_appendf(&links, "%#h", i+2, z);
630 }
631 if( z[i]==0 ) break;
632 z += i+2;
633 }
634 cgi_printf(" tags: %s", blob_str(&links));
635 blob_reset(&links);
636 }else{
637 cgi_printf(" tags: %h", zTagList);
638 }
639 }
640
641 if( tmFlags & TIMELINE_SHOWRID ){
642 int srcId = delta_source_rid(rid);
643 if( srcId ){
644 cgi_printf(" id: %d&larr;%d", rid, srcId);
645 }else{
646 cgi_printf(" id: %d", rid);
647 }
648 }
649 cgi_printf(")</span></span>\n"); /* End of the details section */
650 }
651
652 tag_private_status(rid);
653
654 /* Generate extra hyperlinks at the end of the comment */
655 if( xExtra ){
656 xExtra(rid);
 
 
 
 
 
 
657 }
658
659 /* Generate the file-change list if requested */
660 if( (tmFlags & (TIMELINE_FCHANGES|TIMELINE_FRENAMES))!=0
661 && zType[0]=='c' && g.perm.Hyperlink
@@ -1356,13 +1325,45 @@
1356 az[i++] = "Wiki";
1357 }
1358 assert( i<=count(az) );
1359 }
1360 if( i>2 ){
1361 style_submenu_multichoice("y", i/2, az, isDisabled|STYLE_CLUTTER);
1362 }
1363 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1364
1365 /*
1366 ** If the zChng string is not NULL, then it should be a comma-separated
1367 ** list of glob patterns for filenames. Add an term to the WHERE clause
1368 ** for the SQL statement under construction that excludes any check-in that
@@ -1618,13 +1619,14 @@
1618 ** dp=CHECKIN The same as d=CHECKIN&p=CHECKIN
1619 ** t=TAG Show only check-ins with the given TAG
1620 ** r=TAG Show check-ins related to TAG, equivalent to t=TAG&rel
1621 ** rel Show related check-ins as well as those matching t=TAG
1622 ** mionly Limit rel to show ancestors but not descendants
1623 ** ms=STYLE Set tag match style to EXACT, GLOB, LIKE, REGEXP
1624 ** u=USER Only show items associated with USER
1625 ** y=TYPE 'ci', 'w', 't', 'e', or 'all'. 'ci' is the default.
 
1626 ** ng No Graph.
1627 ** nd Do not highlight the focus check-in
1628 ** v Show details of files changed
1629 ** f=CHECKIN Show family (immediate parents and children) of CHECKIN
1630 ** from=CHECKIN Path from...
@@ -1701,26 +1703,30 @@
1701 char *zNewerButton = 0; /* URL for Newer button at the top */
1702 int selectedRid = -9999999; /* Show a highlight on this RID */
1703 int disableY = 0; /* Disable type selector on submenu */
1704
1705 /* Set number of rows to display */
 
1706 z = P("n");
1707 if( z==0 ) z = db_get("timeline-default-length",0);
1708 if( z ){
1709 if( fossil_strcmp(z,"all")==0 ){
1710 nEntry = 0;
1711 }else{
1712 nEntry = atoi(z);
1713 if( nEntry<=0 ){
1714 cgi_replace_query_parameter("n","10");
1715 nEntry = 10;
1716 }
1717 }
1718 }else{
1719 cgi_replace_query_parameter("n","50");
1720 nEntry = 50;
1721 }
 
 
 
1722
1723 /* To view the timeline, must have permission to read project data.
1724 */
1725 pd_rid = name_to_typed_rid(P("dp"),"ci");
1726 if( pd_rid ){
@@ -1731,15 +1737,20 @@
1731 || (bisectOnly && !g.perm.Setup)
1732 ){
1733 login_needed(g.anon.Read && g.anon.RdTkt && g.anon.RdWiki);
1734 return;
1735 }
 
1736 zType = P("y");
1737 if( zType==0 ){
1738 zType = g.perm.Read ? "ci" : "all";
1739 cgi_set_parameter("y", zType);
1740 }
 
 
 
 
1741 url_initialize(&url, "timeline");
1742 cgi_query_parameters_to_url(&url);
1743
1744 /* Convert r=TAG to t=TAG&rel. */
1745 if( zBrName && !related ){
@@ -2258,11 +2269,11 @@
2258 }
2259 if( zType[0]=='a' || zType[0]=='c' ){
2260 style_submenu_checkbox("unhide", "Unhide", STYLE_CLUTTER, 0);
2261 }
2262 style_submenu_checkbox("v", "Files", (zType[0]!='a' && zType[0]!='c')|STYLE_CLUTTER,0);
2263 style_submenu_entry("n","Max:",4,STYLE_CLUTTER);
2264 timeline_y_submenu(disableY);
2265 style_submenu_entry("t", "Tag Filter:", -8, STYLE_CLUTTER);
2266 style_submenu_multichoice("ms", count(azMatchStyles)/2, azMatchStyles, STYLE_CLUTTER);
2267 }
2268 blob_zero(&cond);
2269
--- src/timeline.c
+++ src/timeline.c
@@ -103,10 +103,15 @@
103 #define TIMELINE_UCOLOR 0x0080 /* Background color by user */
104 #define TIMELINE_FRENAMES 0x0100 /* Detail only file name changes */
105 #define TIMELINE_UNHIDE 0x0200 /* Unhide check-ins with "hidden" tag */
106 #define TIMELINE_SHOWRID 0x0400 /* Show RID values in addition to UUIDs */
107 #define TIMELINE_BISECT 0x0800 /* Show supplimental bisect information */
108 #define TIMELINE_COMPACT 0x1000 /* Use the "compact" view style */
109 #define TIMELINE_VERBOSE 0x2000 /* Use the "detailed" view style */
110 #define TIMELINE_MODERN 0x4000 /* Use the "modern" view style */
111 #define TIMELINE_COLUMNAR 0x8000 /* Use the "columns view style */
112 #define TIMELINE_VIEWS 0xf000 /* Mask for all of the view styles */
113 #endif
114
115 /*
116 ** Hash a string and use the hash to determine a background color.
117 */
@@ -248,16 +253,11 @@
253 static Stmt qbranch;
254 int pendingEndTr = 0; /* True if a </td></tr> is needed */
255 int vid = 0; /* Current checkout version */
256 int dateFormat = 0; /* 0: HH:MM (default) */
257 int bCommentGitStyle = 0; /* Only show comments through first blank line */
258 const char *zStyle; /* Sub-name for classes for the style */
 
 
 
 
 
259 const char *zDateFmt;
260 int iTableId = timeline_tableid();
261
262 if( fossil_strcmp(g.zIpAddr, "127.0.0.1")==0 && db_open_local(0) ){
263 vid = db_lget_int("checkout", 0);
@@ -264,22 +264,21 @@
264 }
265 zPrevDate[0] = 0;
266 mxWikiLen = db_get_int("timeline-max-comment", 0);
267 dateFormat = db_get_int("timeline-date-format", 0);
268 bCommentGitStyle = db_get_int("timeline-truncate-at-blank", 0);
269 if( (tmFlags & TIMELINE_VIEWS)==0 ){
270 tmFlags |= timeline_ss_cookie();
271 }
272 if( tmFlags & TIMELINE_COLUMNAR ){
273 zStyle = "Columnar";
274 }else if( tmFlags & TIMELINE_COMPACT ){
275 zStyle = "Compact";
276 }else if( tmFlags & TIMELINE_VERBOSE ){
277 zStyle = "Verbose";
278 }else{
279 zStyle = "Modern";
 
280 }
281 zDateFmt = P("datefmt");
282 if( zDateFmt ) dateFormat = atoi(zDateFmt);
283 if( tmFlags & TIMELINE_GRAPH ){
284 pGraph = graph_init();
@@ -304,11 +303,11 @@
303 const char *zDispUser = zUser && zUser[0] ? zUser : "anonymous";
304 const char *zBr = 0; /* Branch */
305 int commentColumn = 3; /* Column containing comment text */
306 int modPending; /* Pending moderation */
307 char *zDateLink; /* URL for the link on the timestamp */
308 int drawDetailEllipsis; /* True to show ellipsis in place of detail */
309 char zTime[20];
310
311 if( zDate==0 ){
312 zDate = "YYYY-MM-DD HH:MM:SS"; /* Something wrong with the repo */
313 }
@@ -441,13 +440,13 @@
440 db_reset(&qbranch);
441 @ <div id="m%d(gidx)" class="tl-nodemark"></div>
442 }
443 @</td>
444 if( zBgClr && zBgClr[0] && rid!=selectedRid ){
445 @ <td class="timeline%s(zStyle)Cell" style="background-color: %h(zBgClr);">
446 }else{
447 @ <td class="timeline%s(zStyle)Cell">
448 }
449 if( pGraph && zType[0]!='c' ){
450 @ &bull;
451 }
452 if( modPending ){
@@ -461,11 +460,18 @@
460 @ <b>%s(db_column_text(&bisectQuery,1))</b>
461 @ (%d(db_column_int(&bisectQuery,0)))
462 }
463 db_reset(&bisectQuery);
464 }
465 drawDetailEllipsis = (tmFlags & TIMELINE_COMPACT)!=0;
466 db_column_blob(pQuery, commentColumn, &comment);
467 if( tmFlags & TIMELINE_COMPACT ){
468 @ <span class='timelineCompactComment' onclick='toggleDetail(%d(rid))'>
469 }else{
470 @ <span class='timeline%s(zStyle)Comment'>
471 }
472 if( (tmFlags & TIMELINE_VERBOSE)!=0 ){
473 if( zType[0]=='c' ){
474 hyperlink_to_uuid(zUuid);
475 if( isLeaf ){
476 if( db_exists("SELECT 1 FROM tagxref"
477 " WHERE rid=%d AND tagid=%d AND tagtype>0",
@@ -487,20 +493,15 @@
493 }else{
494 @ (%d(rid))
495 }
496 }
497 }
 
498 if( zType[0]!='c' ){
499 /* Comments for anything other than a check-in are generated by
500 ** "fossil rebuild" and expect to be rendered as text/x-fossil-wiki */
 
501 wiki_convert(&comment, 0, WIKI_INLINE);
 
502 }else{
 
 
503 if( bCommentGitStyle ){
504 /* Truncate comment at first blank line */
505 int ii, jj;
506 int n = blob_size(&comment);
507 char *z = blob_str(&comment);
@@ -521,141 +522,109 @@
522 blob_reset(&truncated);
523 drawDetailEllipsis = 0;
524 }else{
525 cgi_printf("%W",blob_str(&comment));
526 }
527 }
528 @ </span>
529 blob_reset(&comment);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
530
531 /* Generate extra information and hyperlinks to follow the comment.
532 ** Example: "(check-in: [abcdefg], user: drh, tags: trunk)"
533 */
534 if( drawDetailEllipsis ){
535 @ <span class='timelineEllipsis anticlutter' id='ellipsis-%d(rid)' \
536 @ onclick='toggleDetail(%d(rid))'>...</span>
537 }
538 if( tmFlags & TIMELINE_COLUMNAR ){
539 if( zBgClr && zBgClr[0] && rid!=selectedRid ){
540 @ <td class="timelineDetailCell" style="background-color: %h(zBgClr);">
541 }else{
542 @ <td class="timelineDetailCell">
543 }
544 }
545 if( tmFlags & TIMELINE_COMPACT ){
546 cgi_printf("<span class='clutter' id='detail-%d'>",rid);
547 }
548 cgi_printf("<span class='timeline%sDetail'>", zStyle);
549
550 if( (tmFlags & TIMELINE_VERBOSE)==0 ){
551 if( zType[0]=='c' ){
552 if( isLeaf ){
553 if( db_exists("SELECT 1 FROM tagxref"
554 " WHERE rid=%d AND tagid=%d AND tagtype>0",
555 rid, TAG_CLOSED) ){
556 @ <span class='timelineLeaf'>Closed-Leaf</span>
557 }else{
558 @ <span class='timelineLeaf'>Leaf</span>
559 }
560 }
561 cgi_printf("check-in:&nbsp;");
562 hyperlink_to_uuid(zUuid);
563 }else if( zType[0]=='e' && tagid ){
564 cgi_printf("technote:&nbsp;");
565 hyperlink_to_event_tagid(tagid<0?-tagid:tagid);
566 }else{
567 cgi_printf("artifact:&nbsp;");
568 hyperlink_to_uuid(zUuid);
569 }
570 }
571
572 if( g.perm.Hyperlink && fossil_strcmp(zDispUser, zThisUser)!=0 ){
573 char *zLink = mprintf("%R/timeline?u=%h&c=%t&nd&n=200", zDispUser, zDate);
574 cgi_printf("user:&nbsp;%z%h</a>", href("%z",zLink), zDispUser);
575 }else{
576 cgi_printf("user:&nbsp;%h", zDispUser);
577 }
578
579 /* Generate the "tags: TAGLIST" at the end of the comment, together
580 ** with hyperlinks to the tag list.
581 */
582 if( zTagList && zTagList[0]==0 ) zTagList = 0;
583 if( zTagList ){
584 if( g.perm.Hyperlink ){
585 int i;
586 const char *z = zTagList;
587 Blob links;
588 blob_zero(&links);
589 while( z && z[0] ){
590 for(i=0; z[i] && (z[i]!=',' || z[i+1]!=' '); i++){}
591 if( zThisTag==0 || memcmp(z, zThisTag, i)!=0 || zThisTag[i]!=0 ){
592 blob_appendf(&links,
593 "%z%#h</a>%.2s",
594 href("%R/timeline?r=%#t&nd&c=%t&n=200",i,z,zDate), i,z, &z[i]
595 );
596 }else{
597 blob_appendf(&links, "%#h", i+2, z);
598 }
599 if( z[i]==0 ) break;
600 z += i+2;
601 }
602 cgi_printf(" tags:&nbsp;%s", blob_str(&links));
603 blob_reset(&links);
604 }else{
605 cgi_printf(" tags:&nbsp;%h", zTagList);
606 }
607 }
608
609 if( tmFlags & TIMELINE_SHOWRID ){
610 int srcId = delta_source_rid(rid);
611 if( srcId ){
612 cgi_printf(" id:&nbsp;%d&larr;%d", rid, srcId);
613 }else{
614 cgi_printf(" id:&nbsp;%d", rid);
615 }
616 }
617 tag_private_status(rid);
 
 
 
 
 
 
 
 
 
618 if( xExtra ){
619 xExtra(rid);
620 }
621 /* End timelineDetail */
622 if( tmFlags & TIMELINE_COMPACT ){
623 @ </span></span>
624 }else{
625 @ </span>
626 }
627
628 /* Generate the file-change list if requested */
629 if( (tmFlags & (TIMELINE_FCHANGES|TIMELINE_FRENAMES))!=0
630 && zType[0]=='c' && g.perm.Hyperlink
@@ -1356,13 +1325,45 @@
1325 az[i++] = "Wiki";
1326 }
1327 assert( i<=count(az) );
1328 }
1329 if( i>2 ){
1330 style_submenu_multichoice("y", i/2, az, isDisabled);
1331 }
1332 }
1333
1334 /*
1335 ** Convert the current "ss" display preferences cookie into an appropriate TIMELINE_* flag
1336 */
1337 int timeline_ss_cookie(void){
1338 int tmFlags;
1339 switch( cookie_value("ss","m")[0] ){
1340 case 'c': tmFlags = TIMELINE_COMPACT; break;
1341 case 'v': tmFlags = TIMELINE_VERBOSE; break;
1342 case 'j': tmFlags = TIMELINE_COLUMNAR; break;
1343 default: tmFlags = TIMELINE_MODERN; break;
1344 }
1345 return tmFlags;
1346 }
1347
1348 /*
1349 ** Add the select/option box to the timeline submenu that is used to
1350 ** set the ss= parameter that determines the viewing mode.
1351 **
1352 ** Return the TIMELINE_* value appropriate for the view-style.
1353 */
1354 int timeline_ss_submenu(void){
1355 static const char *azViewStyles[] = {
1356 "m", "Modern View",
1357 "c", "Compact View",
1358 "v", "Verbose View",
1359 "j", "Columnar View",
1360 };
1361 cookie_link_parameter("ss","ss","m");
1362 style_submenu_multichoice("ss", 4, azViewStyles, 0);
1363 return timeline_ss_cookie();
1364 }
1365
1366 /*
1367 ** If the zChng string is not NULL, then it should be a comma-separated
1368 ** list of glob patterns for filenames. Add an term to the WHERE clause
1369 ** for the SQL statement under construction that excludes any check-in that
@@ -1618,13 +1619,14 @@
1619 ** dp=CHECKIN The same as d=CHECKIN&p=CHECKIN
1620 ** t=TAG Show only check-ins with the given TAG
1621 ** r=TAG Show check-ins related to TAG, equivalent to t=TAG&rel
1622 ** rel Show related check-ins as well as those matching t=TAG
1623 ** mionly Limit rel to show ancestors but not descendants
1624 ** ms=MATCHSTYLE Set tag match style to EXACT, GLOB, LIKE, REGEXP
1625 ** u=USER Only show items associated with USER
1626 ** y=TYPE 'ci', 'w', 't', 'e', or 'all'.
1627 ** ss=VIEWSTYLE c: "Compact" v: "Verbose" m: "Modern" j: "Columnar"
1628 ** ng No Graph.
1629 ** nd Do not highlight the focus check-in
1630 ** v Show details of files changed
1631 ** f=CHECKIN Show family (immediate parents and children) of CHECKIN
1632 ** from=CHECKIN Path from...
@@ -1701,26 +1703,30 @@
1703 char *zNewerButton = 0; /* URL for Newer button at the top */
1704 int selectedRid = -9999999; /* Show a highlight on this RID */
1705 int disableY = 0; /* Disable type selector on submenu */
1706
1707 /* Set number of rows to display */
1708 cookie_read_parameter("n","n");
1709 z = P("n");
1710 if( z==0 ) z = db_get("timeline-default-length",0);
1711 if( z ){
1712 if( fossil_strcmp(z,"all")==0 ){
1713 nEntry = 0;
1714 }else{
1715 nEntry = atoi(z);
1716 if( nEntry<=0 ){
1717 z = "10";
1718 nEntry = 10;
1719 }
1720 }
1721 }else{
1722 z = "50";
1723 nEntry = 50;
1724 }
1725 cgi_replace_query_parameter("n",z);
1726 cookie_write_parameter("n","n",0);
1727 tmFlags |= timeline_ss_submenu();
1728
1729 /* To view the timeline, must have permission to read project data.
1730 */
1731 pd_rid = name_to_typed_rid(P("dp"),"ci");
1732 if( pd_rid ){
@@ -1731,15 +1737,20 @@
1737 || (bisectOnly && !g.perm.Setup)
1738 ){
1739 login_needed(g.anon.Read && g.anon.RdTkt && g.anon.RdWiki);
1740 return;
1741 }
1742 cookie_read_parameter("y","y");
1743 zType = P("y");
1744 if( zType==0 ){
1745 zType = g.perm.Read ? "ci" : "all";
1746 cgi_set_parameter("y", zType);
1747 }
1748 if( zType[0]=='a' || zType[0]=='c' ){
1749 cookie_write_parameter("y","y",zType);
1750 }
1751 cookie_render();
1752 url_initialize(&url, "timeline");
1753 cgi_query_parameters_to_url(&url);
1754
1755 /* Convert r=TAG to t=TAG&rel. */
1756 if( zBrName && !related ){
@@ -2258,11 +2269,11 @@
2269 }
2270 if( zType[0]=='a' || zType[0]=='c' ){
2271 style_submenu_checkbox("unhide", "Unhide", STYLE_CLUTTER, 0);
2272 }
2273 style_submenu_checkbox("v", "Files", (zType[0]!='a' && zType[0]!='c')|STYLE_CLUTTER,0);
2274 style_submenu_entry("n","Max:",4,0);
2275 timeline_y_submenu(disableY);
2276 style_submenu_entry("t", "Tag Filter:", -8, STYLE_CLUTTER);
2277 style_submenu_multichoice("ms", count(azMatchStyles)/2, azMatchStyles, STYLE_CLUTTER);
2278 }
2279 blob_zero(&cond);
2280
+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
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 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 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)\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)\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 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 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 >> $@
@@ -242,10 +242,16 @@
242242
$(OBJDIR)\content$O : content_.c content.h
243243
$(TCC) -o$@ -c content_.c
244244
245245
content_.c : $(SRCDIR)\content.c
246246
+translate$E $** > $@
247
+
248
+$(OBJDIR)\cookies$O : cookies_.c cookies.h
249
+ $(TCC) -o$@ -c cookies_.c
250
+
251
+cookies_.c : $(SRCDIR)\cookies.c
252
+ +translate$E $** > $@
247253
248254
$(OBJDIR)\db$O : db_.c db.h
249255
$(TCC) -o$@ -c db_.c
250256
251257
db_.c : $(SRCDIR)\db.c
@@ -880,7 +886,7 @@
880886
881887
zip_.c : $(SRCDIR)\zip.c
882888
+translate$E $** > $@
883889
884890
headers: makeheaders$E page_index.h builtin_data.h VERSION.h
885
- +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 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
891
+ +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
886892
@copy /Y nul: headers
887893
--- 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
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 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)\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 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 >> $@
@@ -242,10 +242,16 @@
242 $(OBJDIR)\content$O : content_.c content.h
243 $(TCC) -o$@ -c content_.c
244
245 content_.c : $(SRCDIR)\content.c
246 +translate$E $** > $@
 
 
 
 
 
 
247
248 $(OBJDIR)\db$O : db_.c db.h
249 $(TCC) -o$@ -c db_.c
250
251 db_.c : $(SRCDIR)\db.c
@@ -880,7 +886,7 @@
880
881 zip_.c : $(SRCDIR)\zip.c
882 +translate$E $** > $@
883
884 headers: makeheaders$E page_index.h builtin_data.h VERSION.h
885 +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 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
886 @copy /Y nul: headers
887
--- 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
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 >> $@
@@ -242,10 +242,16 @@
242 $(OBJDIR)\content$O : content_.c content.h
243 $(TCC) -o$@ -c content_.c
244
245 content_.c : $(SRCDIR)\content.c
246 +translate$E $** > $@
247
248 $(OBJDIR)\cookies$O : cookies_.c cookies.h
249 $(TCC) -o$@ -c cookies_.c
250
251 cookies_.c : $(SRCDIR)\cookies.c
252 +translate$E $** > $@
253
254 $(OBJDIR)\db$O : db_.c db.h
255 $(TCC) -o$@ -c db_.c
256
257 db_.c : $(SRCDIR)\db.c
@@ -880,7 +886,7 @@
886
887 zip_.c : $(SRCDIR)\zip.c
888 +translate$E $** > $@
889
890 headers: makeheaders$E page_index.h builtin_data.h VERSION.h
891 +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
892 @copy /Y nul: headers
893
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -442,10 +442,11 @@
442442
$(SRCDIR)/clearsign.c \
443443
$(SRCDIR)/clone.c \
444444
$(SRCDIR)/comformat.c \
445445
$(SRCDIR)/configure.c \
446446
$(SRCDIR)/content.c \
447
+ $(SRCDIR)/cookies.c \
447448
$(SRCDIR)/db.c \
448449
$(SRCDIR)/delta.c \
449450
$(SRCDIR)/deltacmd.c \
450451
$(SRCDIR)/descendants.c \
451452
$(SRCDIR)/diff.c \
@@ -626,10 +627,11 @@
626627
$(OBJDIR)/clearsign_.c \
627628
$(OBJDIR)/clone_.c \
628629
$(OBJDIR)/comformat_.c \
629630
$(OBJDIR)/configure_.c \
630631
$(OBJDIR)/content_.c \
632
+ $(OBJDIR)/cookies_.c \
631633
$(OBJDIR)/db_.c \
632634
$(OBJDIR)/delta_.c \
633635
$(OBJDIR)/deltacmd_.c \
634636
$(OBJDIR)/descendants_.c \
635637
$(OBJDIR)/diff_.c \
@@ -754,10 +756,11 @@
754756
$(OBJDIR)/clearsign.o \
755757
$(OBJDIR)/clone.o \
756758
$(OBJDIR)/comformat.o \
757759
$(OBJDIR)/configure.o \
758760
$(OBJDIR)/content.o \
761
+ $(OBJDIR)/cookies.o \
759762
$(OBJDIR)/db.o \
760763
$(OBJDIR)/delta.o \
761764
$(OBJDIR)/deltacmd.o \
762765
$(OBJDIR)/descendants.o \
763766
$(OBJDIR)/diff.o \
@@ -1093,10 +1096,11 @@
10931096
$(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h \
10941097
$(OBJDIR)/clone_.c:$(OBJDIR)/clone.h \
10951098
$(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h \
10961099
$(OBJDIR)/configure_.c:$(OBJDIR)/configure.h \
10971100
$(OBJDIR)/content_.c:$(OBJDIR)/content.h \
1101
+ $(OBJDIR)/cookies_.c:$(OBJDIR)/cookies.h \
10981102
$(OBJDIR)/db_.c:$(OBJDIR)/db.h \
10991103
$(OBJDIR)/delta_.c:$(OBJDIR)/delta.h \
11001104
$(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h \
11011105
$(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h \
11021106
$(OBJDIR)/diff_.c:$(OBJDIR)/diff.h \
@@ -1367,10 +1371,18 @@
13671371
13681372
$(OBJDIR)/content.o: $(OBJDIR)/content_.c $(OBJDIR)/content.h $(SRCDIR)/config.h
13691373
$(XTCC) -o $(OBJDIR)/content.o -c $(OBJDIR)/content_.c
13701374
13711375
$(OBJDIR)/content.h: $(OBJDIR)/headers
1376
+
1377
+$(OBJDIR)/cookies_.c: $(SRCDIR)/cookies.c $(TRANSLATE)
1378
+ $(TRANSLATE) $(SRCDIR)/cookies.c >$@
1379
+
1380
+$(OBJDIR)/cookies.o: $(OBJDIR)/cookies_.c $(OBJDIR)/cookies.h $(SRCDIR)/config.h
1381
+ $(XTCC) -o $(OBJDIR)/cookies.o -c $(OBJDIR)/cookies_.c
1382
+
1383
+$(OBJDIR)/cookies.h: $(OBJDIR)/headers
13721384
13731385
$(OBJDIR)/db_.c: $(SRCDIR)/db.c $(TRANSLATE)
13741386
$(TRANSLATE) $(SRCDIR)/db.c >$@
13751387
13761388
$(OBJDIR)/db.o: $(OBJDIR)/db_.c $(OBJDIR)/db.h $(SRCDIR)/config.h
13771389
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -442,10 +442,11 @@
442 $(SRCDIR)/clearsign.c \
443 $(SRCDIR)/clone.c \
444 $(SRCDIR)/comformat.c \
445 $(SRCDIR)/configure.c \
446 $(SRCDIR)/content.c \
 
447 $(SRCDIR)/db.c \
448 $(SRCDIR)/delta.c \
449 $(SRCDIR)/deltacmd.c \
450 $(SRCDIR)/descendants.c \
451 $(SRCDIR)/diff.c \
@@ -626,10 +627,11 @@
626 $(OBJDIR)/clearsign_.c \
627 $(OBJDIR)/clone_.c \
628 $(OBJDIR)/comformat_.c \
629 $(OBJDIR)/configure_.c \
630 $(OBJDIR)/content_.c \
 
631 $(OBJDIR)/db_.c \
632 $(OBJDIR)/delta_.c \
633 $(OBJDIR)/deltacmd_.c \
634 $(OBJDIR)/descendants_.c \
635 $(OBJDIR)/diff_.c \
@@ -754,10 +756,11 @@
754 $(OBJDIR)/clearsign.o \
755 $(OBJDIR)/clone.o \
756 $(OBJDIR)/comformat.o \
757 $(OBJDIR)/configure.o \
758 $(OBJDIR)/content.o \
 
759 $(OBJDIR)/db.o \
760 $(OBJDIR)/delta.o \
761 $(OBJDIR)/deltacmd.o \
762 $(OBJDIR)/descendants.o \
763 $(OBJDIR)/diff.o \
@@ -1093,10 +1096,11 @@
1093 $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h \
1094 $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h \
1095 $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h \
1096 $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h \
1097 $(OBJDIR)/content_.c:$(OBJDIR)/content.h \
 
1098 $(OBJDIR)/db_.c:$(OBJDIR)/db.h \
1099 $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h \
1100 $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h \
1101 $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h \
1102 $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h \
@@ -1367,10 +1371,18 @@
1367
1368 $(OBJDIR)/content.o: $(OBJDIR)/content_.c $(OBJDIR)/content.h $(SRCDIR)/config.h
1369 $(XTCC) -o $(OBJDIR)/content.o -c $(OBJDIR)/content_.c
1370
1371 $(OBJDIR)/content.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
 
1372
1373 $(OBJDIR)/db_.c: $(SRCDIR)/db.c $(TRANSLATE)
1374 $(TRANSLATE) $(SRCDIR)/db.c >$@
1375
1376 $(OBJDIR)/db.o: $(OBJDIR)/db_.c $(OBJDIR)/db.h $(SRCDIR)/config.h
1377
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -442,10 +442,11 @@
442 $(SRCDIR)/clearsign.c \
443 $(SRCDIR)/clone.c \
444 $(SRCDIR)/comformat.c \
445 $(SRCDIR)/configure.c \
446 $(SRCDIR)/content.c \
447 $(SRCDIR)/cookies.c \
448 $(SRCDIR)/db.c \
449 $(SRCDIR)/delta.c \
450 $(SRCDIR)/deltacmd.c \
451 $(SRCDIR)/descendants.c \
452 $(SRCDIR)/diff.c \
@@ -626,10 +627,11 @@
627 $(OBJDIR)/clearsign_.c \
628 $(OBJDIR)/clone_.c \
629 $(OBJDIR)/comformat_.c \
630 $(OBJDIR)/configure_.c \
631 $(OBJDIR)/content_.c \
632 $(OBJDIR)/cookies_.c \
633 $(OBJDIR)/db_.c \
634 $(OBJDIR)/delta_.c \
635 $(OBJDIR)/deltacmd_.c \
636 $(OBJDIR)/descendants_.c \
637 $(OBJDIR)/diff_.c \
@@ -754,10 +756,11 @@
756 $(OBJDIR)/clearsign.o \
757 $(OBJDIR)/clone.o \
758 $(OBJDIR)/comformat.o \
759 $(OBJDIR)/configure.o \
760 $(OBJDIR)/content.o \
761 $(OBJDIR)/cookies.o \
762 $(OBJDIR)/db.o \
763 $(OBJDIR)/delta.o \
764 $(OBJDIR)/deltacmd.o \
765 $(OBJDIR)/descendants.o \
766 $(OBJDIR)/diff.o \
@@ -1093,10 +1096,11 @@
1096 $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h \
1097 $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h \
1098 $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h \
1099 $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h \
1100 $(OBJDIR)/content_.c:$(OBJDIR)/content.h \
1101 $(OBJDIR)/cookies_.c:$(OBJDIR)/cookies.h \
1102 $(OBJDIR)/db_.c:$(OBJDIR)/db.h \
1103 $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h \
1104 $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h \
1105 $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h \
1106 $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h \
@@ -1367,10 +1371,18 @@
1371
1372 $(OBJDIR)/content.o: $(OBJDIR)/content_.c $(OBJDIR)/content.h $(SRCDIR)/config.h
1373 $(XTCC) -o $(OBJDIR)/content.o -c $(OBJDIR)/content_.c
1374
1375 $(OBJDIR)/content.h: $(OBJDIR)/headers
1376
1377 $(OBJDIR)/cookies_.c: $(SRCDIR)/cookies.c $(TRANSLATE)
1378 $(TRANSLATE) $(SRCDIR)/cookies.c >$@
1379
1380 $(OBJDIR)/cookies.o: $(OBJDIR)/cookies_.c $(OBJDIR)/cookies.h $(SRCDIR)/config.h
1381 $(XTCC) -o $(OBJDIR)/cookies.o -c $(OBJDIR)/cookies_.c
1382
1383 $(OBJDIR)/cookies.h: $(OBJDIR)/headers
1384
1385 $(OBJDIR)/db_.c: $(SRCDIR)/db.c $(TRANSLATE)
1386 $(TRANSLATE) $(SRCDIR)/db.c >$@
1387
1388 $(OBJDIR)/db.o: $(OBJDIR)/db_.c $(OBJDIR)/db.h $(SRCDIR)/config.h
1389
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -369,10 +369,11 @@
369369
clearsign_.c \
370370
clone_.c \
371371
comformat_.c \
372372
configure_.c \
373373
content_.c \
374
+ cookies_.c \
374375
db_.c \
375376
delta_.c \
376377
deltacmd_.c \
377378
descendants_.c \
378379
diff_.c \
@@ -551,10 +552,11 @@
551552
$(OX)\clearsign$O \
552553
$(OX)\clone$O \
553554
$(OX)\comformat$O \
554555
$(OX)\configure$O \
555556
$(OX)\content$O \
557
+ $(OX)\cookies$O \
556558
$(OX)\cson_amalgamation$O \
557559
$(OX)\db$O \
558560
$(OX)\delta$O \
559561
$(OX)\deltacmd$O \
560562
$(OX)\descendants$O \
@@ -738,10 +740,11 @@
738740
echo $(OX)\clearsign.obj >> $@
739741
echo $(OX)\clone.obj >> $@
740742
echo $(OX)\comformat.obj >> $@
741743
echo $(OX)\configure.obj >> $@
742744
echo $(OX)\content.obj >> $@
745
+ echo $(OX)\cookies.obj >> $@
743746
echo $(OX)\cson_amalgamation.obj >> $@
744747
echo $(OX)\db.obj >> $@
745748
echo $(OX)\delta.obj >> $@
746749
echo $(OX)\deltacmd.obj >> $@
747750
echo $(OX)\descendants.obj >> $@
@@ -1078,10 +1081,16 @@
10781081
$(OX)\content$O : content_.c content.h
10791082
$(TCC) /Fo$@ -c content_.c
10801083
10811084
content_.c : $(SRCDIR)\content.c
10821085
translate$E $** > $@
1086
+
1087
+$(OX)\cookies$O : cookies_.c cookies.h
1088
+ $(TCC) /Fo$@ -c cookies_.c
1089
+
1090
+cookies_.c : $(SRCDIR)\cookies.c
1091
+ translate$E $** > $@
10831092
10841093
$(OX)\db$O : db_.c db.h
10851094
$(TCC) /Fo$@ -c db_.c
10861095
10871096
db_.c : $(SRCDIR)\db.c
@@ -1739,10 +1748,11 @@
17391748
clearsign_.c:clearsign.h \
17401749
clone_.c:clone.h \
17411750
comformat_.c:comformat.h \
17421751
configure_.c:configure.h \
17431752
content_.c:content.h \
1753
+ cookies_.c:cookies.h \
17441754
db_.c:db.h \
17451755
delta_.c:delta.h \
17461756
deltacmd_.c:deltacmd.h \
17471757
descendants_.c:descendants.h \
17481758
diff_.c:diff.h \
17491759
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -369,10 +369,11 @@
369 clearsign_.c \
370 clone_.c \
371 comformat_.c \
372 configure_.c \
373 content_.c \
 
374 db_.c \
375 delta_.c \
376 deltacmd_.c \
377 descendants_.c \
378 diff_.c \
@@ -551,10 +552,11 @@
551 $(OX)\clearsign$O \
552 $(OX)\clone$O \
553 $(OX)\comformat$O \
554 $(OX)\configure$O \
555 $(OX)\content$O \
 
556 $(OX)\cson_amalgamation$O \
557 $(OX)\db$O \
558 $(OX)\delta$O \
559 $(OX)\deltacmd$O \
560 $(OX)\descendants$O \
@@ -738,10 +740,11 @@
738 echo $(OX)\clearsign.obj >> $@
739 echo $(OX)\clone.obj >> $@
740 echo $(OX)\comformat.obj >> $@
741 echo $(OX)\configure.obj >> $@
742 echo $(OX)\content.obj >> $@
 
743 echo $(OX)\cson_amalgamation.obj >> $@
744 echo $(OX)\db.obj >> $@
745 echo $(OX)\delta.obj >> $@
746 echo $(OX)\deltacmd.obj >> $@
747 echo $(OX)\descendants.obj >> $@
@@ -1078,10 +1081,16 @@
1078 $(OX)\content$O : content_.c content.h
1079 $(TCC) /Fo$@ -c content_.c
1080
1081 content_.c : $(SRCDIR)\content.c
1082 translate$E $** > $@
 
 
 
 
 
 
1083
1084 $(OX)\db$O : db_.c db.h
1085 $(TCC) /Fo$@ -c db_.c
1086
1087 db_.c : $(SRCDIR)\db.c
@@ -1739,10 +1748,11 @@
1739 clearsign_.c:clearsign.h \
1740 clone_.c:clone.h \
1741 comformat_.c:comformat.h \
1742 configure_.c:configure.h \
1743 content_.c:content.h \
 
1744 db_.c:db.h \
1745 delta_.c:delta.h \
1746 deltacmd_.c:deltacmd.h \
1747 descendants_.c:descendants.h \
1748 diff_.c:diff.h \
1749
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -369,10 +369,11 @@
369 clearsign_.c \
370 clone_.c \
371 comformat_.c \
372 configure_.c \
373 content_.c \
374 cookies_.c \
375 db_.c \
376 delta_.c \
377 deltacmd_.c \
378 descendants_.c \
379 diff_.c \
@@ -551,10 +552,11 @@
552 $(OX)\clearsign$O \
553 $(OX)\clone$O \
554 $(OX)\comformat$O \
555 $(OX)\configure$O \
556 $(OX)\content$O \
557 $(OX)\cookies$O \
558 $(OX)\cson_amalgamation$O \
559 $(OX)\db$O \
560 $(OX)\delta$O \
561 $(OX)\deltacmd$O \
562 $(OX)\descendants$O \
@@ -738,10 +740,11 @@
740 echo $(OX)\clearsign.obj >> $@
741 echo $(OX)\clone.obj >> $@
742 echo $(OX)\comformat.obj >> $@
743 echo $(OX)\configure.obj >> $@
744 echo $(OX)\content.obj >> $@
745 echo $(OX)\cookies.obj >> $@
746 echo $(OX)\cson_amalgamation.obj >> $@
747 echo $(OX)\db.obj >> $@
748 echo $(OX)\delta.obj >> $@
749 echo $(OX)\deltacmd.obj >> $@
750 echo $(OX)\descendants.obj >> $@
@@ -1078,10 +1081,16 @@
1081 $(OX)\content$O : content_.c content.h
1082 $(TCC) /Fo$@ -c content_.c
1083
1084 content_.c : $(SRCDIR)\content.c
1085 translate$E $** > $@
1086
1087 $(OX)\cookies$O : cookies_.c cookies.h
1088 $(TCC) /Fo$@ -c cookies_.c
1089
1090 cookies_.c : $(SRCDIR)\cookies.c
1091 translate$E $** > $@
1092
1093 $(OX)\db$O : db_.c db.h
1094 $(TCC) /Fo$@ -c db_.c
1095
1096 db_.c : $(SRCDIR)\db.c
@@ -1739,10 +1748,11 @@
1748 clearsign_.c:clearsign.h \
1749 clone_.c:clone.h \
1750 comformat_.c:comformat.h \
1751 configure_.c:configure.h \
1752 content_.c:content.h \
1753 cookies_.c:cookies.h \
1754 db_.c:db.h \
1755 delta_.c:delta.h \
1756 deltacmd_.c:deltacmd.h \
1757 descendants_.c:descendants.h \
1758 diff_.c:diff.h \
1759

Keyboard Shortcuts

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