Fossil SCM

More improvements to the /timeline display with p= and bt=.

drh 2020-06-18 19:04 trunk
Commit 048a74b6b78cff7781a70ff3b32d9a5660469372ebdbcd4e251117fd865edf16
2 files changed +8 -7 +16 -5
--- src/descendants.c
+++ src/descendants.c
@@ -198,14 +198,12 @@
198198
** (4) All ancestores of 1 and 2 but not of 3.
199199
*/
200200
double rLimitMtime = 0.0;
201201
if( ridBackTo ){
202202
rLimitMtime = db_double(0.0,
203
- "SELECT mtime FROM event"
204
- " WHERE objid=%d"
205
- " AND mtime<(SELECT mtime FROM event WHERE objid=%d)",
206
- ridBackTo, rid);
203
+ "SELECT mtime FROM event WHERE objid=%d",
204
+ ridBackTo);
207205
}
208206
db_multi_exec(
209207
"WITH RECURSIVE "
210208
" parent(pid,cid,isCP) AS ("
211209
" SELECT plink.pid, plink.cid, 0 AS xisCP FROM plink"
@@ -218,17 +216,20 @@
218216
" SELECT parent.pid, event.mtime, parent.isCP"
219217
" FROM ancestor, parent, event"
220218
" WHERE parent.cid=ancestor.rid"
221219
" AND event.objid=parent.pid"
222220
" AND NOT ancestor.isCP"
223
- " AND event.mtime>=%.17g"
221
+ " AND (event.mtime>=%.17g OR parent.pid=%d)"
224222
" ORDER BY mtime DESC LIMIT %d"
225223
" )"
226
- "INSERT INTO ok"
224
+ "INSERT OR IGNORE INTO ok"
227225
" SELECT rid FROM ancestor;",
228
- rid, rid, rLimitMtime, N
226
+ rid, rid, rLimitMtime, ridBackTo, N
229227
);
228
+ if( ridBackTo && db_changes()>1 ){
229
+ db_multi_exec("INSERT OR IGNORE INTO ok VALUES(%d)", ridBackTo);
230
+ }
230231
}
231232
}
232233
233234
/*
234235
** Compute the youngest ancestor of record ID rid that is a member of
235236
--- src/descendants.c
+++ src/descendants.c
@@ -198,14 +198,12 @@
198 ** (4) All ancestores of 1 and 2 but not of 3.
199 */
200 double rLimitMtime = 0.0;
201 if( ridBackTo ){
202 rLimitMtime = db_double(0.0,
203 "SELECT mtime FROM event"
204 " WHERE objid=%d"
205 " AND mtime<(SELECT mtime FROM event WHERE objid=%d)",
206 ridBackTo, rid);
207 }
208 db_multi_exec(
209 "WITH RECURSIVE "
210 " parent(pid,cid,isCP) AS ("
211 " SELECT plink.pid, plink.cid, 0 AS xisCP FROM plink"
@@ -218,17 +216,20 @@
218 " SELECT parent.pid, event.mtime, parent.isCP"
219 " FROM ancestor, parent, event"
220 " WHERE parent.cid=ancestor.rid"
221 " AND event.objid=parent.pid"
222 " AND NOT ancestor.isCP"
223 " AND event.mtime>=%.17g"
224 " ORDER BY mtime DESC LIMIT %d"
225 " )"
226 "INSERT INTO ok"
227 " SELECT rid FROM ancestor;",
228 rid, rid, rLimitMtime, N
229 );
 
 
 
230 }
231 }
232
233 /*
234 ** Compute the youngest ancestor of record ID rid that is a member of
235
--- src/descendants.c
+++ src/descendants.c
@@ -198,14 +198,12 @@
198 ** (4) All ancestores of 1 and 2 but not of 3.
199 */
200 double rLimitMtime = 0.0;
201 if( ridBackTo ){
202 rLimitMtime = db_double(0.0,
203 "SELECT mtime FROM event WHERE objid=%d",
204 ridBackTo);
 
 
205 }
206 db_multi_exec(
207 "WITH RECURSIVE "
208 " parent(pid,cid,isCP) AS ("
209 " SELECT plink.pid, plink.cid, 0 AS xisCP FROM plink"
@@ -218,17 +216,20 @@
216 " SELECT parent.pid, event.mtime, parent.isCP"
217 " FROM ancestor, parent, event"
218 " WHERE parent.cid=ancestor.rid"
219 " AND event.objid=parent.pid"
220 " AND NOT ancestor.isCP"
221 " AND (event.mtime>=%.17g OR parent.pid=%d)"
222 " ORDER BY mtime DESC LIMIT %d"
223 " )"
224 "INSERT OR IGNORE INTO ok"
225 " SELECT rid FROM ancestor;",
226 rid, rid, rLimitMtime, ridBackTo, N
227 );
228 if( ridBackTo && db_changes()>1 ){
229 db_multi_exec("INSERT OR IGNORE INTO ok VALUES(%d)", ridBackTo);
230 }
231 }
232 }
233
234 /*
235 ** Compute the youngest ancestor of record ID rid that is a member of
236
+16 -5
--- src/timeline.c
+++ src/timeline.c
@@ -2063,31 +2063,42 @@
20632063
nd = 0;
20642064
if( d_rid ){
20652065
compute_descendants(d_rid, nEntry==0 ? 0 : nEntry+1);
20662066
nd = db_int(0, "SELECT count(*)-1 FROM ok");
20672067
if( nd>=0 ) db_multi_exec("%s", blob_sql_text(&sql));
2068
- if( nd>0 ) blob_appendf(&desc, "%d descendant%s", nd,(1==nd)?"":"s");
2068
+ if( nd>0 || p_rid==0 ){
2069
+ blob_appendf(&desc, "%d descendant%s", nd,(1==nd)?"":"s");
2070
+ }
20692071
if( useDividers ) selectedRid = d_rid;
20702072
db_multi_exec("DELETE FROM ok");
20712073
}
20722074
if( p_rid ){
20732075
zBackTo = P("bt");
20742076
ridBackTo = zBackTo ? name_to_typed_rid(zBackTo,"ci") : 0;
20752077
compute_ancestors(p_rid, nEntry==0 ? 0 : nEntry+1, 0, ridBackTo);
20762078
np = db_int(0, "SELECT count(*)-1 FROM ok");
2077
- if( np>0 ){
2079
+ if( np>0 || nd==0 ){
20782080
if( nd>0 ) blob_appendf(&desc, " and ");
2079
- blob_appendf(&desc, "%d ancestors", np);
2081
+ blob_appendf(&desc, "%d ancestor%s", np, (1==np)?"":"s");
20802082
db_multi_exec("%s", blob_sql_text(&sql));
20812083
}
20822084
if( useDividers ) selectedRid = p_rid;
20832085
}
2086
+
20842087
blob_appendf(&desc, " of %z%h</a>",
20852088
href("%R/info?name=%h", zCiName), zCiName);
20862089
if( ridBackTo ){
2087
- blob_appendf(&desc, " back to %z%h</a>",
2088
- href("%R/info?name=%h",zBackTo), zBackTo);
2090
+ if( np==0 ){
2091
+ blob_reset(&desc);
2092
+ blob_appendf(&desc,
2093
+ "Check-in %z%h</a> only (%z%h</a> is not an ancestor)",
2094
+ href("%R/info?name=%h",zCiName), zCiName,
2095
+ href("%R/info?name=%h",zBackTo), zBackTo);
2096
+ }else{
2097
+ blob_appendf(&desc, " back to %z%h</a>",
2098
+ href("%R/info?name=%h",zBackTo), zBackTo);
2099
+ }
20892100
}
20902101
if( d_rid ){
20912102
if( p_rid ){
20922103
/* If both p= and d= are set, we don't have the uuid of d yet. */
20932104
zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", d_rid);
20942105
--- src/timeline.c
+++ src/timeline.c
@@ -2063,31 +2063,42 @@
2063 nd = 0;
2064 if( d_rid ){
2065 compute_descendants(d_rid, nEntry==0 ? 0 : nEntry+1);
2066 nd = db_int(0, "SELECT count(*)-1 FROM ok");
2067 if( nd>=0 ) db_multi_exec("%s", blob_sql_text(&sql));
2068 if( nd>0 ) blob_appendf(&desc, "%d descendant%s", nd,(1==nd)?"":"s");
 
 
2069 if( useDividers ) selectedRid = d_rid;
2070 db_multi_exec("DELETE FROM ok");
2071 }
2072 if( p_rid ){
2073 zBackTo = P("bt");
2074 ridBackTo = zBackTo ? name_to_typed_rid(zBackTo,"ci") : 0;
2075 compute_ancestors(p_rid, nEntry==0 ? 0 : nEntry+1, 0, ridBackTo);
2076 np = db_int(0, "SELECT count(*)-1 FROM ok");
2077 if( np>0 ){
2078 if( nd>0 ) blob_appendf(&desc, " and ");
2079 blob_appendf(&desc, "%d ancestors", np);
2080 db_multi_exec("%s", blob_sql_text(&sql));
2081 }
2082 if( useDividers ) selectedRid = p_rid;
2083 }
 
2084 blob_appendf(&desc, " of %z%h</a>",
2085 href("%R/info?name=%h", zCiName), zCiName);
2086 if( ridBackTo ){
2087 blob_appendf(&desc, " back to %z%h</a>",
2088 href("%R/info?name=%h",zBackTo), zBackTo);
 
 
 
 
 
 
 
 
2089 }
2090 if( d_rid ){
2091 if( p_rid ){
2092 /* If both p= and d= are set, we don't have the uuid of d yet. */
2093 zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", d_rid);
2094
--- src/timeline.c
+++ src/timeline.c
@@ -2063,31 +2063,42 @@
2063 nd = 0;
2064 if( d_rid ){
2065 compute_descendants(d_rid, nEntry==0 ? 0 : nEntry+1);
2066 nd = db_int(0, "SELECT count(*)-1 FROM ok");
2067 if( nd>=0 ) db_multi_exec("%s", blob_sql_text(&sql));
2068 if( nd>0 || p_rid==0 ){
2069 blob_appendf(&desc, "%d descendant%s", nd,(1==nd)?"":"s");
2070 }
2071 if( useDividers ) selectedRid = d_rid;
2072 db_multi_exec("DELETE FROM ok");
2073 }
2074 if( p_rid ){
2075 zBackTo = P("bt");
2076 ridBackTo = zBackTo ? name_to_typed_rid(zBackTo,"ci") : 0;
2077 compute_ancestors(p_rid, nEntry==0 ? 0 : nEntry+1, 0, ridBackTo);
2078 np = db_int(0, "SELECT count(*)-1 FROM ok");
2079 if( np>0 || nd==0 ){
2080 if( nd>0 ) blob_appendf(&desc, " and ");
2081 blob_appendf(&desc, "%d ancestor%s", np, (1==np)?"":"s");
2082 db_multi_exec("%s", blob_sql_text(&sql));
2083 }
2084 if( useDividers ) selectedRid = p_rid;
2085 }
2086
2087 blob_appendf(&desc, " of %z%h</a>",
2088 href("%R/info?name=%h", zCiName), zCiName);
2089 if( ridBackTo ){
2090 if( np==0 ){
2091 blob_reset(&desc);
2092 blob_appendf(&desc,
2093 "Check-in %z%h</a> only (%z%h</a> is not an ancestor)",
2094 href("%R/info?name=%h",zCiName), zCiName,
2095 href("%R/info?name=%h",zBackTo), zBackTo);
2096 }else{
2097 blob_appendf(&desc, " back to %z%h</a>",
2098 href("%R/info?name=%h",zBackTo), zBackTo);
2099 }
2100 }
2101 if( d_rid ){
2102 if( p_rid ){
2103 /* If both p= and d= are set, we don't have the uuid of d yet. */
2104 zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", d_rid);
2105

Keyboard Shortcuts

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