Fossil SCM
In a /timeline with me=AAA and you=BBB and rel, omit nodes that are not ancestors of BBB. This helps to better convey the changes from AAA to BBB.
Commit
54e4222237ad4f6d418f61fcb1cd584e4e37506a27221604a648bc9f257dd600
Parent
5f8721753c268a7…
1 file changed
+28
-3
+28
-3
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -2207,10 +2207,12 @@ | ||
| 2207 | 2207 | PathNode *p = 0; |
| 2208 | 2208 | const char *zFrom = 0; |
| 2209 | 2209 | const char *zTo = 0; |
| 2210 | 2210 | Blob ins; |
| 2211 | 2211 | int nNodeOnPath = 0; |
| 2212 | + int commonAncs = 0; /* Common ancestors of me_rid and you_rid. */ | |
| 2213 | + int earlierRid = 0, laterRid = 0; | |
| 2212 | 2214 | |
| 2213 | 2215 | if( from_rid && to_rid ){ |
| 2214 | 2216 | if( from_to_mode==0 ){ |
| 2215 | 2217 | p = path_shortest(from_rid, to_rid, noMerge, 0, 0); |
| 2216 | 2218 | }else if( from_to_mode==1 ){ |
| @@ -2219,15 +2221,25 @@ | ||
| 2219 | 2221 | p = path_shortest(to_rid, from_rid, 0, 1, 0); |
| 2220 | 2222 | } |
| 2221 | 2223 | zFrom = P("from"); |
| 2222 | 2224 | zTo = zTo2 ? zTo2 : P("to"); |
| 2223 | 2225 | }else{ |
| 2224 | - if( path_common_ancestor(me_rid, you_rid) ){ | |
| 2226 | + commonAncs = path_common_ancestor(me_rid, you_rid); | |
| 2227 | + if( commonAncs!=0 ){ | |
| 2225 | 2228 | p = path_first(); |
| 2226 | 2229 | } |
| 2227 | - zFrom = P("me"); | |
| 2228 | - zTo = P("you"); | |
| 2230 | + if( commonAncs==you_rid ){ | |
| 2231 | + zFrom = P("you"); | |
| 2232 | + zTo = P("me"); | |
| 2233 | + earlierRid = you_rid; | |
| 2234 | + laterRid = me_rid; | |
| 2235 | + }else{ | |
| 2236 | + zFrom = P("me"); | |
| 2237 | + zTo = P("you"); | |
| 2238 | + earlierRid = me_rid; | |
| 2239 | + laterRid = you_rid; | |
| 2240 | + } | |
| 2229 | 2241 | } |
| 2230 | 2242 | blob_init(&ins, 0, 0); |
| 2231 | 2243 | db_multi_exec( |
| 2232 | 2244 | "CREATE TABLE IF NOT EXISTS temp.pathnode(x INTEGER PRIMARY KEY);" |
| 2233 | 2245 | ); |
| @@ -2266,10 +2278,23 @@ | ||
| 2266 | 2278 | " SELECT childid FROM cherrypick WHERE parentid IN pathnode;" |
| 2267 | 2279 | ); |
| 2268 | 2280 | } |
| 2269 | 2281 | } |
| 2270 | 2282 | db_multi_exec("INSERT OR IGNORE INTO pathnode SELECT x FROM related"); |
| 2283 | + if( earlierRid && laterRid && commonAncs==earlierRid ){ | |
| 2284 | + /* On a query with me=XXX, you=YYY, and rel, omit all nodes that | |
| 2285 | + ** are not ancestors of either XXX or YYY, as those nodes tend to | |
| 2286 | + ** be extraneous */ | |
| 2287 | + db_multi_exec( | |
| 2288 | + "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY)" | |
| 2289 | + ); | |
| 2290 | + compute_ancestors(laterRid, 0, 0, earlierRid); | |
| 2291 | + db_multi_exec( | |
| 2292 | + "DELETE FROM related WHERE x NOT IN ok;" | |
| 2293 | + "DELETE FROM pathnode WHERE x NOT IN ok;" | |
| 2294 | + ); | |
| 2295 | + } | |
| 2271 | 2296 | } |
| 2272 | 2297 | blob_append_sql(&sql, " AND event.objid IN pathnode"); |
| 2273 | 2298 | if( zChng && zChng[0] ){ |
| 2274 | 2299 | db_multi_exec( |
| 2275 | 2300 | "DELETE FROM pathnode " |
| 2276 | 2301 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -2207,10 +2207,12 @@ | |
| 2207 | PathNode *p = 0; |
| 2208 | const char *zFrom = 0; |
| 2209 | const char *zTo = 0; |
| 2210 | Blob ins; |
| 2211 | int nNodeOnPath = 0; |
| 2212 | |
| 2213 | if( from_rid && to_rid ){ |
| 2214 | if( from_to_mode==0 ){ |
| 2215 | p = path_shortest(from_rid, to_rid, noMerge, 0, 0); |
| 2216 | }else if( from_to_mode==1 ){ |
| @@ -2219,15 +2221,25 @@ | |
| 2219 | p = path_shortest(to_rid, from_rid, 0, 1, 0); |
| 2220 | } |
| 2221 | zFrom = P("from"); |
| 2222 | zTo = zTo2 ? zTo2 : P("to"); |
| 2223 | }else{ |
| 2224 | if( path_common_ancestor(me_rid, you_rid) ){ |
| 2225 | p = path_first(); |
| 2226 | } |
| 2227 | zFrom = P("me"); |
| 2228 | zTo = P("you"); |
| 2229 | } |
| 2230 | blob_init(&ins, 0, 0); |
| 2231 | db_multi_exec( |
| 2232 | "CREATE TABLE IF NOT EXISTS temp.pathnode(x INTEGER PRIMARY KEY);" |
| 2233 | ); |
| @@ -2266,10 +2278,23 @@ | |
| 2266 | " SELECT childid FROM cherrypick WHERE parentid IN pathnode;" |
| 2267 | ); |
| 2268 | } |
| 2269 | } |
| 2270 | db_multi_exec("INSERT OR IGNORE INTO pathnode SELECT x FROM related"); |
| 2271 | } |
| 2272 | blob_append_sql(&sql, " AND event.objid IN pathnode"); |
| 2273 | if( zChng && zChng[0] ){ |
| 2274 | db_multi_exec( |
| 2275 | "DELETE FROM pathnode " |
| 2276 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -2207,10 +2207,12 @@ | |
| 2207 | PathNode *p = 0; |
| 2208 | const char *zFrom = 0; |
| 2209 | const char *zTo = 0; |
| 2210 | Blob ins; |
| 2211 | int nNodeOnPath = 0; |
| 2212 | int commonAncs = 0; /* Common ancestors of me_rid and you_rid. */ |
| 2213 | int earlierRid = 0, laterRid = 0; |
| 2214 | |
| 2215 | if( from_rid && to_rid ){ |
| 2216 | if( from_to_mode==0 ){ |
| 2217 | p = path_shortest(from_rid, to_rid, noMerge, 0, 0); |
| 2218 | }else if( from_to_mode==1 ){ |
| @@ -2219,15 +2221,25 @@ | |
| 2221 | p = path_shortest(to_rid, from_rid, 0, 1, 0); |
| 2222 | } |
| 2223 | zFrom = P("from"); |
| 2224 | zTo = zTo2 ? zTo2 : P("to"); |
| 2225 | }else{ |
| 2226 | commonAncs = path_common_ancestor(me_rid, you_rid); |
| 2227 | if( commonAncs!=0 ){ |
| 2228 | p = path_first(); |
| 2229 | } |
| 2230 | if( commonAncs==you_rid ){ |
| 2231 | zFrom = P("you"); |
| 2232 | zTo = P("me"); |
| 2233 | earlierRid = you_rid; |
| 2234 | laterRid = me_rid; |
| 2235 | }else{ |
| 2236 | zFrom = P("me"); |
| 2237 | zTo = P("you"); |
| 2238 | earlierRid = me_rid; |
| 2239 | laterRid = you_rid; |
| 2240 | } |
| 2241 | } |
| 2242 | blob_init(&ins, 0, 0); |
| 2243 | db_multi_exec( |
| 2244 | "CREATE TABLE IF NOT EXISTS temp.pathnode(x INTEGER PRIMARY KEY);" |
| 2245 | ); |
| @@ -2266,10 +2278,23 @@ | |
| 2278 | " SELECT childid FROM cherrypick WHERE parentid IN pathnode;" |
| 2279 | ); |
| 2280 | } |
| 2281 | } |
| 2282 | db_multi_exec("INSERT OR IGNORE INTO pathnode SELECT x FROM related"); |
| 2283 | if( earlierRid && laterRid && commonAncs==earlierRid ){ |
| 2284 | /* On a query with me=XXX, you=YYY, and rel, omit all nodes that |
| 2285 | ** are not ancestors of either XXX or YYY, as those nodes tend to |
| 2286 | ** be extraneous */ |
| 2287 | db_multi_exec( |
| 2288 | "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY)" |
| 2289 | ); |
| 2290 | compute_ancestors(laterRid, 0, 0, earlierRid); |
| 2291 | db_multi_exec( |
| 2292 | "DELETE FROM related WHERE x NOT IN ok;" |
| 2293 | "DELETE FROM pathnode WHERE x NOT IN ok;" |
| 2294 | ); |
| 2295 | } |
| 2296 | } |
| 2297 | blob_append_sql(&sql, " AND event.objid IN pathnode"); |
| 2298 | if( zChng && zChng[0] ){ |
| 2299 | db_multi_exec( |
| 2300 | "DELETE FROM pathnode " |
| 2301 |