Fossil SCM

Adjust the graph display flags for various query parameters to /timeline.

drh 2019-05-17 01:42 graph-improvements
Commit 1695ddbdc16bfc225cc01d4f1f6824c0de44f092767682f74db69f3734672c51
3 files changed +2 -1 +1 -1 +14 -10
+2 -1
--- src/graph.js
+++ src/graph.js
@@ -255,11 +255,12 @@
255255
n.onclick = clickOnNode;
256256
n.style.zIndex = 10;
257257
if( !tx.omitDescenders ){
258258
if( p.u==0 ){
259259
if( p.hasOwnProperty('mo') && p.r==p.mo ){
260
- var top = tx.rowinfo[p.mu-tx.iTopRow]
260
+ var ix = p.hasOwnProperty('cu') ? p.cu : p.mu;
261
+ var top = tx.rowinfo[ix-tx.iTopRow]
261262
drawUpArrow(p,{x: p.x, y: top.y-node.h}, p.fg);
262263
}else if( p.y>100 ){
263264
drawUpArrow(p,{x: p.x, y: p.y-50}, p.fg);
264265
}else{
265266
drawUpArrow(p,{x: p.x, y: 0},p.fg);
266267
--- src/graph.js
+++ src/graph.js
@@ -255,11 +255,12 @@
255 n.onclick = clickOnNode;
256 n.style.zIndex = 10;
257 if( !tx.omitDescenders ){
258 if( p.u==0 ){
259 if( p.hasOwnProperty('mo') && p.r==p.mo ){
260 var top = tx.rowinfo[p.mu-tx.iTopRow]
 
261 drawUpArrow(p,{x: p.x, y: top.y-node.h}, p.fg);
262 }else if( p.y>100 ){
263 drawUpArrow(p,{x: p.x, y: p.y-50}, p.fg);
264 }else{
265 drawUpArrow(p,{x: p.x, y: 0},p.fg);
266
--- src/graph.js
+++ src/graph.js
@@ -255,11 +255,12 @@
255 n.onclick = clickOnNode;
256 n.style.zIndex = 10;
257 if( !tx.omitDescenders ){
258 if( p.u==0 ){
259 if( p.hasOwnProperty('mo') && p.r==p.mo ){
260 var ix = p.hasOwnProperty('cu') ? p.cu : p.mu;
261 var top = tx.rowinfo[ix-tx.iTopRow]
262 drawUpArrow(p,{x: p.x, y: top.y-node.h}, p.fg);
263 }else if( p.y>100 ){
264 drawUpArrow(p,{x: p.x, y: p.y-50}, p.fg);
265 }else{
266 drawUpArrow(p,{x: p.x, y: 0},p.fg);
267
+1 -1
--- src/tag.c
+++ src/tag.c
@@ -750,11 +750,11 @@
750750
}
751751
db_prepare(&q, "%s ORDER BY event.mtime DESC /*sort*/", blob_sql_text(&sql));
752752
blob_reset(&sql);
753753
/* Always specify TIMELINE_DISJOINT, or graph_finish() may fail because of too
754754
** many descenders to (off-screen) parents. */
755
- tmFlags = TIMELINE_DISJOINT | TIMELINE_NOSCROLL;
755
+ tmFlags = TIMELINE_XMERGE | TIMELINE_FILLGAPS | TIMELINE_NOSCROLL;
756756
if( PB("ng")==0 ) tmFlags |= TIMELINE_GRAPH;
757757
if( PB("brbg")!=0 ) tmFlags |= TIMELINE_BRCOLOR;
758758
if( PB("ubg")!=0 ) tmFlags |= TIMELINE_UCOLOR;
759759
www_print_timeline(&q, tmFlags, 0, 0, 0, 0);
760760
db_finalize(&q);
761761
--- src/tag.c
+++ src/tag.c
@@ -750,11 +750,11 @@
750 }
751 db_prepare(&q, "%s ORDER BY event.mtime DESC /*sort*/", blob_sql_text(&sql));
752 blob_reset(&sql);
753 /* Always specify TIMELINE_DISJOINT, or graph_finish() may fail because of too
754 ** many descenders to (off-screen) parents. */
755 tmFlags = TIMELINE_DISJOINT | TIMELINE_NOSCROLL;
756 if( PB("ng")==0 ) tmFlags |= TIMELINE_GRAPH;
757 if( PB("brbg")!=0 ) tmFlags |= TIMELINE_BRCOLOR;
758 if( PB("ubg")!=0 ) tmFlags |= TIMELINE_UCOLOR;
759 www_print_timeline(&q, tmFlags, 0, 0, 0, 0);
760 db_finalize(&q);
761
--- src/tag.c
+++ src/tag.c
@@ -750,11 +750,11 @@
750 }
751 db_prepare(&q, "%s ORDER BY event.mtime DESC /*sort*/", blob_sql_text(&sql));
752 blob_reset(&sql);
753 /* Always specify TIMELINE_DISJOINT, or graph_finish() may fail because of too
754 ** many descenders to (off-screen) parents. */
755 tmFlags = TIMELINE_XMERGE | TIMELINE_FILLGAPS | TIMELINE_NOSCROLL;
756 if( PB("ng")==0 ) tmFlags |= TIMELINE_GRAPH;
757 if( PB("brbg")!=0 ) tmFlags |= TIMELINE_BRCOLOR;
758 if( PB("ubg")!=0 ) tmFlags |= TIMELINE_UCOLOR;
759 www_print_timeline(&q, tmFlags, 0, 0, 0, 0);
760 db_finalize(&q);
761
+14 -10
--- src/timeline.c
+++ src/timeline.c
@@ -868,11 +868,12 @@
868868
** is iTopRow and numbers increase moving down the timeline.
869869
** bg: The background color for this row
870870
** r: The "rail" that the node for this row sits on. The left-most
871871
** rail is 0 and the number increases to the right.
872872
** d: If exists and true then there is a "descender" - an arrow
873
- ** coming from the bottom of the page straight up to this node.
873
+ ** coming from the bottom of the page or further down on the page
874
+ ** straight up to this node.
874875
** mo: "merge-out". If it exists, this is the rail position
875876
** for the upward portion of a merge arrow. The merge arrow goes as
876877
** a solid normal merge line up to the row identified by "mu" and
877878
** then as a dashed cherrypick merge line up further to "cu".
878879
** If this value is omitted if there are no merge children.
@@ -880,11 +881,12 @@
880881
** Only exists if "mo" exists.
881882
** cu: Extend the mu merge arrow up to this row as a cherrypick
882883
** merge line, if this value exists.
883884
** u: Draw a thick child-line out of the top of this node and up to
884885
** the node with an id equal to this value. 0 if it is straight to
885
- ** the top of the page, -1 if there is no thick-line riser.
886
+ ** the top of the page or just up a little wasy, -1 if there is
887
+ ** no thick-line riser (if the node is a leaf).
886888
** sb: Draw a dotted child-line out of the top of this node up to the
887889
** node with the id equal to the value. This is like "u" except
888890
** that the line is dotted instead of solid and has no arrow.
889891
** Mnemonic: "Same Branch".
890892
** f: 0x01: a leaf node.
@@ -1495,11 +1497,11 @@
14951497
** nd Do not highlight the focus check-in
14961498
** v Show details of files changed
14971499
** f=CHECKIN Show family (immediate parents and children) of CHECKIN
14981500
** from=CHECKIN Path from...
14991501
** to=CHECKIN ... to this
1500
-** shorest ... show only the shortest path
1502
+** shortest ... show only the shortest path
15011503
** rel ... also show related checkins
15021504
** uf=FILE_HASH Show only check-ins that contain the given file version
15031505
** chng=GLOBLIST Show only check-ins that involve changes to a file whose
15041506
** name matches one of the comma-separate GLOBLIST
15051507
** brbg Background color from branch name
@@ -1859,10 +1861,11 @@
18591861
db_multi_exec("INSERT OR IGNORE INTO pathnode SELECT x FROM related");
18601862
}
18611863
blob_append_sql(&sql, " AND event.objid IN pathnode");
18621864
addFileGlobExclusion(zChng, &sql);
18631865
tmFlags |= TIMELINE_DISJOINT;
1866
+ tmFlags &= ~TIMELINE_CHPICK;
18641867
db_multi_exec("%s", blob_sql_text(&sql));
18651868
if( advancedMenu ){
18661869
style_submenu_checkbox("v", "Files", (zType[0]!='a' && zType[0]!='c'),0);
18671870
}
18681871
blob_appendf(&desc, "%d check-ins going from ", nNodeOnPath);
@@ -1880,11 +1883,11 @@
18801883
}else if( (p_rid || d_rid) && g.perm.Read && zTagSql==0 ){
18811884
/* If p= or d= is present, ignore all other parameters other than n= */
18821885
char *zUuid;
18831886
int np, nd;
18841887
1885
- tmFlags |= TIMELINE_DISJOINT;
1888
+ tmFlags |= TIMELINE_XMERGE | TIMELINE_FILLGAPS;
18861889
if( p_rid && d_rid ){
18871890
if( p_rid!=d_rid ) p_rid = d_rid;
18881891
if( P("n")==0 ) nEntry = 10;
18891892
}
18901893
db_multi_exec(
@@ -1948,11 +1951,11 @@
19481951
db_multi_exec("%s", blob_sql_text(&sql));
19491952
if( useDividers ) selectedRid = f_rid;
19501953
blob_appendf(&desc, "Parents and children of check-in ");
19511954
zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", f_rid);
19521955
blob_appendf(&desc, "%z[%S]</a>", href("%R/info/%!S", zUuid), zUuid);
1953
- tmFlags |= TIMELINE_DISJOINT;
1956
+ tmFlags |= TIMELINE_XMERGE;
19541957
if( advancedMenu ){
19551958
style_submenu_checkbox("unhide", "Unhide", 0, 0);
19561959
style_submenu_checkbox("v", "Files", (zType[0]!='a' && zType[0]!='c'),0);
19571960
}
19581961
}else{
@@ -1960,13 +1963,14 @@
19601963
int n;
19611964
const char *zEType = "event";
19621965
char *zDate;
19631966
Blob cond;
19641967
blob_zero(&cond);
1968
+ tmFlags |= TIMELINE_FILLGAPS;
19651969
if( zChng && *zChng ){
19661970
addFileGlobExclusion(zChng, &cond);
1967
- tmFlags |= TIMELINE_DISJOINT;
1971
+ tmFlags |= TIMELINE_XMERGE;
19681972
}
19691973
if( zUses ){
19701974
blob_append_sql(&cond, " AND event.objid IN usesfile ");
19711975
}
19721976
if( renameOnly ){
@@ -2221,15 +2225,15 @@
22212225
}
22222226
if( zUses ){
22232227
char *zFilenames = names_of_file(zUses);
22242228
blob_appendf(&desc, " using file %s version %z%S</a>", zFilenames,
22252229
href("%R/artifact/%!S",zUses), zUses);
2226
- tmFlags |= TIMELINE_DISJOINT;
2230
+ tmFlags |= TIMELINE_XMERGE | TIMELINE_FILLGAPS;
22272231
}
22282232
if( renameOnly ){
22292233
blob_appendf(&desc, " that contain filename changes");
2230
- tmFlags |= TIMELINE_DISJOINT|TIMELINE_FRENAMES;
2234
+ tmFlags |= TIMELINE_XMERGE | TIMELINE_FILLGAPS;
22312235
}
22322236
if( forkOnly ){
22332237
blob_appendf(&desc, " associated with forks");
22342238
tmFlags |= TIMELINE_DISJOINT;
22352239
}
@@ -2241,11 +2245,11 @@
22412245
blob_appendf(&desc, " that participate in a cherrypick merge");
22422246
tmFlags |= TIMELINE_CHPICK|TIMELINE_DISJOINT;
22432247
}
22442248
if( zUser ){
22452249
blob_appendf(&desc, " by user %h", zUser);
2246
- tmFlags |= TIMELINE_DISJOINT;
2250
+ tmFlags |= TIMELINE_XMERGE | TIMELINE_FILLGAPS;
22472251
}
22482252
if( zTagSql ){
22492253
if( matchStyle==MS_EXACT ){
22502254
if( related ){
22512255
blob_appendf(&desc, " related to %h", zMatchDesc);
@@ -2257,11 +2261,11 @@
22572261
blob_appendf(&desc, " related to tags matching %h", zMatchDesc);
22582262
}else{
22592263
blob_appendf(&desc, " with tags matching %h", zMatchDesc);
22602264
}
22612265
}
2262
- if( !related ) tmFlags |= TIMELINE_DISJOINT;
2266
+ tmFlags |= TIMELINE_XMERGE | TIMELINE_FILLGAPS;
22632267
}
22642268
addFileGlobDescription(zChng, &desc);
22652269
if( rAfter>0.0 ){
22662270
if( rBefore>0.0 ){
22672271
blob_appendf(&desc, " occurring between %h and %h.<br />",
22682272
--- src/timeline.c
+++ src/timeline.c
@@ -868,11 +868,12 @@
868 ** is iTopRow and numbers increase moving down the timeline.
869 ** bg: The background color for this row
870 ** r: The "rail" that the node for this row sits on. The left-most
871 ** rail is 0 and the number increases to the right.
872 ** d: If exists and true then there is a "descender" - an arrow
873 ** coming from the bottom of the page straight up to this node.
 
874 ** mo: "merge-out". If it exists, this is the rail position
875 ** for the upward portion of a merge arrow. The merge arrow goes as
876 ** a solid normal merge line up to the row identified by "mu" and
877 ** then as a dashed cherrypick merge line up further to "cu".
878 ** If this value is omitted if there are no merge children.
@@ -880,11 +881,12 @@
880 ** Only exists if "mo" exists.
881 ** cu: Extend the mu merge arrow up to this row as a cherrypick
882 ** merge line, if this value exists.
883 ** u: Draw a thick child-line out of the top of this node and up to
884 ** the node with an id equal to this value. 0 if it is straight to
885 ** the top of the page, -1 if there is no thick-line riser.
 
886 ** sb: Draw a dotted child-line out of the top of this node up to the
887 ** node with the id equal to the value. This is like "u" except
888 ** that the line is dotted instead of solid and has no arrow.
889 ** Mnemonic: "Same Branch".
890 ** f: 0x01: a leaf node.
@@ -1495,11 +1497,11 @@
1495 ** nd Do not highlight the focus check-in
1496 ** v Show details of files changed
1497 ** f=CHECKIN Show family (immediate parents and children) of CHECKIN
1498 ** from=CHECKIN Path from...
1499 ** to=CHECKIN ... to this
1500 ** shorest ... show only the shortest path
1501 ** rel ... also show related checkins
1502 ** uf=FILE_HASH Show only check-ins that contain the given file version
1503 ** chng=GLOBLIST Show only check-ins that involve changes to a file whose
1504 ** name matches one of the comma-separate GLOBLIST
1505 ** brbg Background color from branch name
@@ -1859,10 +1861,11 @@
1859 db_multi_exec("INSERT OR IGNORE INTO pathnode SELECT x FROM related");
1860 }
1861 blob_append_sql(&sql, " AND event.objid IN pathnode");
1862 addFileGlobExclusion(zChng, &sql);
1863 tmFlags |= TIMELINE_DISJOINT;
 
1864 db_multi_exec("%s", blob_sql_text(&sql));
1865 if( advancedMenu ){
1866 style_submenu_checkbox("v", "Files", (zType[0]!='a' && zType[0]!='c'),0);
1867 }
1868 blob_appendf(&desc, "%d check-ins going from ", nNodeOnPath);
@@ -1880,11 +1883,11 @@
1880 }else if( (p_rid || d_rid) && g.perm.Read && zTagSql==0 ){
1881 /* If p= or d= is present, ignore all other parameters other than n= */
1882 char *zUuid;
1883 int np, nd;
1884
1885 tmFlags |= TIMELINE_DISJOINT;
1886 if( p_rid && d_rid ){
1887 if( p_rid!=d_rid ) p_rid = d_rid;
1888 if( P("n")==0 ) nEntry = 10;
1889 }
1890 db_multi_exec(
@@ -1948,11 +1951,11 @@
1948 db_multi_exec("%s", blob_sql_text(&sql));
1949 if( useDividers ) selectedRid = f_rid;
1950 blob_appendf(&desc, "Parents and children of check-in ");
1951 zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", f_rid);
1952 blob_appendf(&desc, "%z[%S]</a>", href("%R/info/%!S", zUuid), zUuid);
1953 tmFlags |= TIMELINE_DISJOINT;
1954 if( advancedMenu ){
1955 style_submenu_checkbox("unhide", "Unhide", 0, 0);
1956 style_submenu_checkbox("v", "Files", (zType[0]!='a' && zType[0]!='c'),0);
1957 }
1958 }else{
@@ -1960,13 +1963,14 @@
1960 int n;
1961 const char *zEType = "event";
1962 char *zDate;
1963 Blob cond;
1964 blob_zero(&cond);
 
1965 if( zChng && *zChng ){
1966 addFileGlobExclusion(zChng, &cond);
1967 tmFlags |= TIMELINE_DISJOINT;
1968 }
1969 if( zUses ){
1970 blob_append_sql(&cond, " AND event.objid IN usesfile ");
1971 }
1972 if( renameOnly ){
@@ -2221,15 +2225,15 @@
2221 }
2222 if( zUses ){
2223 char *zFilenames = names_of_file(zUses);
2224 blob_appendf(&desc, " using file %s version %z%S</a>", zFilenames,
2225 href("%R/artifact/%!S",zUses), zUses);
2226 tmFlags |= TIMELINE_DISJOINT;
2227 }
2228 if( renameOnly ){
2229 blob_appendf(&desc, " that contain filename changes");
2230 tmFlags |= TIMELINE_DISJOINT|TIMELINE_FRENAMES;
2231 }
2232 if( forkOnly ){
2233 blob_appendf(&desc, " associated with forks");
2234 tmFlags |= TIMELINE_DISJOINT;
2235 }
@@ -2241,11 +2245,11 @@
2241 blob_appendf(&desc, " that participate in a cherrypick merge");
2242 tmFlags |= TIMELINE_CHPICK|TIMELINE_DISJOINT;
2243 }
2244 if( zUser ){
2245 blob_appendf(&desc, " by user %h", zUser);
2246 tmFlags |= TIMELINE_DISJOINT;
2247 }
2248 if( zTagSql ){
2249 if( matchStyle==MS_EXACT ){
2250 if( related ){
2251 blob_appendf(&desc, " related to %h", zMatchDesc);
@@ -2257,11 +2261,11 @@
2257 blob_appendf(&desc, " related to tags matching %h", zMatchDesc);
2258 }else{
2259 blob_appendf(&desc, " with tags matching %h", zMatchDesc);
2260 }
2261 }
2262 if( !related ) tmFlags |= TIMELINE_DISJOINT;
2263 }
2264 addFileGlobDescription(zChng, &desc);
2265 if( rAfter>0.0 ){
2266 if( rBefore>0.0 ){
2267 blob_appendf(&desc, " occurring between %h and %h.<br />",
2268
--- src/timeline.c
+++ src/timeline.c
@@ -868,11 +868,12 @@
868 ** is iTopRow and numbers increase moving down the timeline.
869 ** bg: The background color for this row
870 ** r: The "rail" that the node for this row sits on. The left-most
871 ** rail is 0 and the number increases to the right.
872 ** d: If exists and true then there is a "descender" - an arrow
873 ** coming from the bottom of the page or further down on the page
874 ** straight up to this node.
875 ** mo: "merge-out". If it exists, this is the rail position
876 ** for the upward portion of a merge arrow. The merge arrow goes as
877 ** a solid normal merge line up to the row identified by "mu" and
878 ** then as a dashed cherrypick merge line up further to "cu".
879 ** If this value is omitted if there are no merge children.
@@ -880,11 +881,12 @@
881 ** Only exists if "mo" exists.
882 ** cu: Extend the mu merge arrow up to this row as a cherrypick
883 ** merge line, if this value exists.
884 ** u: Draw a thick child-line out of the top of this node and up to
885 ** the node with an id equal to this value. 0 if it is straight to
886 ** the top of the page or just up a little wasy, -1 if there is
887 ** no thick-line riser (if the node is a leaf).
888 ** sb: Draw a dotted child-line out of the top of this node up to the
889 ** node with the id equal to the value. This is like "u" except
890 ** that the line is dotted instead of solid and has no arrow.
891 ** Mnemonic: "Same Branch".
892 ** f: 0x01: a leaf node.
@@ -1495,11 +1497,11 @@
1497 ** nd Do not highlight the focus check-in
1498 ** v Show details of files changed
1499 ** f=CHECKIN Show family (immediate parents and children) of CHECKIN
1500 ** from=CHECKIN Path from...
1501 ** to=CHECKIN ... to this
1502 ** shortest ... show only the shortest path
1503 ** rel ... also show related checkins
1504 ** uf=FILE_HASH Show only check-ins that contain the given file version
1505 ** chng=GLOBLIST Show only check-ins that involve changes to a file whose
1506 ** name matches one of the comma-separate GLOBLIST
1507 ** brbg Background color from branch name
@@ -1859,10 +1861,11 @@
1861 db_multi_exec("INSERT OR IGNORE INTO pathnode SELECT x FROM related");
1862 }
1863 blob_append_sql(&sql, " AND event.objid IN pathnode");
1864 addFileGlobExclusion(zChng, &sql);
1865 tmFlags |= TIMELINE_DISJOINT;
1866 tmFlags &= ~TIMELINE_CHPICK;
1867 db_multi_exec("%s", blob_sql_text(&sql));
1868 if( advancedMenu ){
1869 style_submenu_checkbox("v", "Files", (zType[0]!='a' && zType[0]!='c'),0);
1870 }
1871 blob_appendf(&desc, "%d check-ins going from ", nNodeOnPath);
@@ -1880,11 +1883,11 @@
1883 }else if( (p_rid || d_rid) && g.perm.Read && zTagSql==0 ){
1884 /* If p= or d= is present, ignore all other parameters other than n= */
1885 char *zUuid;
1886 int np, nd;
1887
1888 tmFlags |= TIMELINE_XMERGE | TIMELINE_FILLGAPS;
1889 if( p_rid && d_rid ){
1890 if( p_rid!=d_rid ) p_rid = d_rid;
1891 if( P("n")==0 ) nEntry = 10;
1892 }
1893 db_multi_exec(
@@ -1948,11 +1951,11 @@
1951 db_multi_exec("%s", blob_sql_text(&sql));
1952 if( useDividers ) selectedRid = f_rid;
1953 blob_appendf(&desc, "Parents and children of check-in ");
1954 zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", f_rid);
1955 blob_appendf(&desc, "%z[%S]</a>", href("%R/info/%!S", zUuid), zUuid);
1956 tmFlags |= TIMELINE_XMERGE;
1957 if( advancedMenu ){
1958 style_submenu_checkbox("unhide", "Unhide", 0, 0);
1959 style_submenu_checkbox("v", "Files", (zType[0]!='a' && zType[0]!='c'),0);
1960 }
1961 }else{
@@ -1960,13 +1963,14 @@
1963 int n;
1964 const char *zEType = "event";
1965 char *zDate;
1966 Blob cond;
1967 blob_zero(&cond);
1968 tmFlags |= TIMELINE_FILLGAPS;
1969 if( zChng && *zChng ){
1970 addFileGlobExclusion(zChng, &cond);
1971 tmFlags |= TIMELINE_XMERGE;
1972 }
1973 if( zUses ){
1974 blob_append_sql(&cond, " AND event.objid IN usesfile ");
1975 }
1976 if( renameOnly ){
@@ -2221,15 +2225,15 @@
2225 }
2226 if( zUses ){
2227 char *zFilenames = names_of_file(zUses);
2228 blob_appendf(&desc, " using file %s version %z%S</a>", zFilenames,
2229 href("%R/artifact/%!S",zUses), zUses);
2230 tmFlags |= TIMELINE_XMERGE | TIMELINE_FILLGAPS;
2231 }
2232 if( renameOnly ){
2233 blob_appendf(&desc, " that contain filename changes");
2234 tmFlags |= TIMELINE_XMERGE | TIMELINE_FILLGAPS;
2235 }
2236 if( forkOnly ){
2237 blob_appendf(&desc, " associated with forks");
2238 tmFlags |= TIMELINE_DISJOINT;
2239 }
@@ -2241,11 +2245,11 @@
2245 blob_appendf(&desc, " that participate in a cherrypick merge");
2246 tmFlags |= TIMELINE_CHPICK|TIMELINE_DISJOINT;
2247 }
2248 if( zUser ){
2249 blob_appendf(&desc, " by user %h", zUser);
2250 tmFlags |= TIMELINE_XMERGE | TIMELINE_FILLGAPS;
2251 }
2252 if( zTagSql ){
2253 if( matchStyle==MS_EXACT ){
2254 if( related ){
2255 blob_appendf(&desc, " related to %h", zMatchDesc);
@@ -2257,11 +2261,11 @@
2261 blob_appendf(&desc, " related to tags matching %h", zMatchDesc);
2262 }else{
2263 blob_appendf(&desc, " with tags matching %h", zMatchDesc);
2264 }
2265 }
2266 tmFlags |= TIMELINE_XMERGE | TIMELINE_FILLGAPS;
2267 }
2268 addFileGlobDescription(zChng, &desc);
2269 if( rAfter>0.0 ){
2270 if( rBefore>0.0 ){
2271 blob_appendf(&desc, " occurring between %h and %h.<br />",
2272

Keyboard Shortcuts

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