Fossil SCM
Add the "Referenced By" section to the /info page.
Commit
fae745cf0fb5188e131c8c745e5a74f988ff78cdca21e5612b8683863510fe33
Parent
9d7ef44fb6a373c…
1 file changed
+29
+29
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -316,10 +316,11 @@ | ||
| 316 | 316 | Stmt q; |
| 317 | 317 | blob_zero(&sql); |
| 318 | 318 | blob_append(&sql, timeline_query_for_www(), -1); |
| 319 | 319 | db_multi_exec( |
| 320 | 320 | "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);" |
| 321 | + "DELETE FROM ok;" | |
| 321 | 322 | "INSERT INTO ok VALUES(%d);" |
| 322 | 323 | "INSERT OR IGNORE INTO ok SELECT pid FROM plink WHERE cid=%d;", |
| 323 | 324 | rid, rid |
| 324 | 325 | ); |
| 325 | 326 | if( !parentsOnly ){ |
| @@ -330,10 +331,37 @@ | ||
| 330 | 331 | blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC"); |
| 331 | 332 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 332 | 333 | www_print_timeline(&q, TIMELINE_DISJOINT|TIMELINE_GRAPH, 0, 0, rid, 0); |
| 333 | 334 | db_finalize(&q); |
| 334 | 335 | } |
| 336 | + | |
| 337 | +/* | |
| 338 | +** Show a graph all wiki, tickets, and check-ins that refer to object zUuid. | |
| 339 | +*/ | |
| 340 | +void render_backlink_graph(const char *zUuid){ | |
| 341 | + Blob sql; | |
| 342 | + Stmt q; | |
| 343 | + char *zGlob; | |
| 344 | + zGlob = mprintf("%.5s*", zUuid); | |
| 345 | + db_multi_exec( | |
| 346 | + "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);" | |
| 347 | + "DELETE FROM ok;" | |
| 348 | + "INSERT OR IGNORE INTO ok" | |
| 349 | + " SELECT srcid FROM backlink" | |
| 350 | + " WHERE target GLOB %Q" | |
| 351 | + " AND %Q GLOB (target || '*');", | |
| 352 | + zGlob, zUuid | |
| 353 | + ); | |
| 354 | + if( !db_exists("SELECT 1 FROM ok") ) return; | |
| 355 | + @ <div class="section">Referenced By</div> | |
| 356 | + blob_zero(&sql); | |
| 357 | + blob_append(&sql, timeline_query_for_www(), -1); | |
| 358 | + blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC"); | |
| 359 | + db_prepare(&q, "%s", blob_sql_text(&sql)); | |
| 360 | + www_print_timeline(&q, TIMELINE_DISJOINT|TIMELINE_GRAPH, 0, 0, 0, 0); | |
| 361 | + db_finalize(&q); | |
| 362 | +} | |
| 335 | 363 | |
| 336 | 364 | |
| 337 | 365 | /* |
| 338 | 366 | ** Append the difference between artifacts to the output |
| 339 | 367 | */ |
| @@ -710,10 +738,11 @@ | ||
| 710 | 738 | } |
| 711 | 739 | db_finalize(&q1); |
| 712 | 740 | showTags(rid); |
| 713 | 741 | @ <div class="section">Context</div> |
| 714 | 742 | render_checkin_context(rid, 0); |
| 743 | + render_backlink_graph(zUuid); | |
| 715 | 744 | @ <div class="section">Changes</div> |
| 716 | 745 | @ <div class="sectionmenu"> |
| 717 | 746 | verboseFlag = g.zPath[0]!='c'; |
| 718 | 747 | if( db_get_boolean("show-version-diffs", 0)==0 ){ |
| 719 | 748 | verboseFlag = !verboseFlag; |
| 720 | 749 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -316,10 +316,11 @@ | |
| 316 | Stmt q; |
| 317 | blob_zero(&sql); |
| 318 | blob_append(&sql, timeline_query_for_www(), -1); |
| 319 | db_multi_exec( |
| 320 | "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);" |
| 321 | "INSERT INTO ok VALUES(%d);" |
| 322 | "INSERT OR IGNORE INTO ok SELECT pid FROM plink WHERE cid=%d;", |
| 323 | rid, rid |
| 324 | ); |
| 325 | if( !parentsOnly ){ |
| @@ -330,10 +331,37 @@ | |
| 330 | blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC"); |
| 331 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 332 | www_print_timeline(&q, TIMELINE_DISJOINT|TIMELINE_GRAPH, 0, 0, rid, 0); |
| 333 | db_finalize(&q); |
| 334 | } |
| 335 | |
| 336 | |
| 337 | /* |
| 338 | ** Append the difference between artifacts to the output |
| 339 | */ |
| @@ -710,10 +738,11 @@ | |
| 710 | } |
| 711 | db_finalize(&q1); |
| 712 | showTags(rid); |
| 713 | @ <div class="section">Context</div> |
| 714 | render_checkin_context(rid, 0); |
| 715 | @ <div class="section">Changes</div> |
| 716 | @ <div class="sectionmenu"> |
| 717 | verboseFlag = g.zPath[0]!='c'; |
| 718 | if( db_get_boolean("show-version-diffs", 0)==0 ){ |
| 719 | verboseFlag = !verboseFlag; |
| 720 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -316,10 +316,11 @@ | |
| 316 | Stmt q; |
| 317 | blob_zero(&sql); |
| 318 | blob_append(&sql, timeline_query_for_www(), -1); |
| 319 | db_multi_exec( |
| 320 | "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);" |
| 321 | "DELETE FROM ok;" |
| 322 | "INSERT INTO ok VALUES(%d);" |
| 323 | "INSERT OR IGNORE INTO ok SELECT pid FROM plink WHERE cid=%d;", |
| 324 | rid, rid |
| 325 | ); |
| 326 | if( !parentsOnly ){ |
| @@ -330,10 +331,37 @@ | |
| 331 | blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC"); |
| 332 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 333 | www_print_timeline(&q, TIMELINE_DISJOINT|TIMELINE_GRAPH, 0, 0, rid, 0); |
| 334 | db_finalize(&q); |
| 335 | } |
| 336 | |
| 337 | /* |
| 338 | ** Show a graph all wiki, tickets, and check-ins that refer to object zUuid. |
| 339 | */ |
| 340 | void render_backlink_graph(const char *zUuid){ |
| 341 | Blob sql; |
| 342 | Stmt q; |
| 343 | char *zGlob; |
| 344 | zGlob = mprintf("%.5s*", zUuid); |
| 345 | db_multi_exec( |
| 346 | "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);" |
| 347 | "DELETE FROM ok;" |
| 348 | "INSERT OR IGNORE INTO ok" |
| 349 | " SELECT srcid FROM backlink" |
| 350 | " WHERE target GLOB %Q" |
| 351 | " AND %Q GLOB (target || '*');", |
| 352 | zGlob, zUuid |
| 353 | ); |
| 354 | if( !db_exists("SELECT 1 FROM ok") ) return; |
| 355 | @ <div class="section">Referenced By</div> |
| 356 | blob_zero(&sql); |
| 357 | blob_append(&sql, timeline_query_for_www(), -1); |
| 358 | blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC"); |
| 359 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 360 | www_print_timeline(&q, TIMELINE_DISJOINT|TIMELINE_GRAPH, 0, 0, 0, 0); |
| 361 | db_finalize(&q); |
| 362 | } |
| 363 | |
| 364 | |
| 365 | /* |
| 366 | ** Append the difference between artifacts to the output |
| 367 | */ |
| @@ -710,10 +738,11 @@ | |
| 738 | } |
| 739 | db_finalize(&q1); |
| 740 | showTags(rid); |
| 741 | @ <div class="section">Context</div> |
| 742 | render_checkin_context(rid, 0); |
| 743 | render_backlink_graph(zUuid); |
| 744 | @ <div class="section">Changes</div> |
| 745 | @ <div class="sectionmenu"> |
| 746 | verboseFlag = g.zPath[0]!='c'; |
| 747 | if( db_get_boolean("show-version-diffs", 0)==0 ){ |
| 748 | verboseFlag = !verboseFlag; |
| 749 |