Fossil SCM
Enhancements to the timeline labeling with the uf= option. New hyperlinks from the finfo page to timeline with uf=.
Commit
a9372c05f5937dd10cdeb41b14062f9c27f44c0e
Parent
eb3cc76d509d680…
2 files changed
+1
+26
-1
+1
| --- src/finfo.c | ||
| +++ src/finfo.c | ||
| @@ -371,10 +371,11 @@ | ||
| 371 | 371 | if( fpid ){ |
| 372 | 372 | @ %z(href("%R/fdiff?v1=%S&v2=%S",zPUuid,zUuid))[diff]</a> |
| 373 | 373 | } |
| 374 | 374 | @ %z(href("%R/annotate?checkin=%S&filename=%h",zCkin,z)) |
| 375 | 375 | @ [annotate]</a> |
| 376 | + @ %z(href("%R/timeline?n=200&uf=%S",zUuid))[checkins using]</a> | |
| 376 | 377 | } |
| 377 | 378 | if( fDebug & FINFO_DEBUG_MLINK ){ |
| 378 | 379 | @ fid=%d(frid), pid=%d(fpid), mid=%d(fmid) |
| 379 | 380 | } |
| 380 | 381 | @ </td></tr> |
| 381 | 382 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -371,10 +371,11 @@ | |
| 371 | if( fpid ){ |
| 372 | @ %z(href("%R/fdiff?v1=%S&v2=%S",zPUuid,zUuid))[diff]</a> |
| 373 | } |
| 374 | @ %z(href("%R/annotate?checkin=%S&filename=%h",zCkin,z)) |
| 375 | @ [annotate]</a> |
| 376 | } |
| 377 | if( fDebug & FINFO_DEBUG_MLINK ){ |
| 378 | @ fid=%d(frid), pid=%d(fpid), mid=%d(fmid) |
| 379 | } |
| 380 | @ </td></tr> |
| 381 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -371,10 +371,11 @@ | |
| 371 | if( fpid ){ |
| 372 | @ %z(href("%R/fdiff?v1=%S&v2=%S",zPUuid,zUuid))[diff]</a> |
| 373 | } |
| 374 | @ %z(href("%R/annotate?checkin=%S&filename=%h",zCkin,z)) |
| 375 | @ [annotate]</a> |
| 376 | @ %z(href("%R/timeline?n=200&uf=%S",zUuid))[checkins using]</a> |
| 377 | } |
| 378 | if( fDebug & FINFO_DEBUG_MLINK ){ |
| 379 | @ fid=%d(frid), pid=%d(fpid), mid=%d(fmid) |
| 380 | } |
| 381 | @ </td></tr> |
| 382 |
+26
-1
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -878,10 +878,34 @@ | ||
| 878 | 878 | rDate+ONE_SECOND |
| 879 | 879 | ); |
| 880 | 880 | fossil_free(zToDel); |
| 881 | 881 | } |
| 882 | 882 | |
| 883 | +/* | |
| 884 | +** Return all possible names for file zUuid. | |
| 885 | +*/ | |
| 886 | +char *names_of_file(const char *zUuid){ | |
| 887 | + Stmt q; | |
| 888 | + Blob out; | |
| 889 | + const char *zSep = ""; | |
| 890 | + db_prepare(&q, | |
| 891 | + "SELECT DISTINCT filename.name FROM mlink, filename" | |
| 892 | + " WHERE mlink.fid=(SELECT rid FROM blob WHERE uuid='%s')" | |
| 893 | + " AND filename.fnid=mlink.fnid", | |
| 894 | + zUuid | |
| 895 | + ); | |
| 896 | + blob_zero(&out); | |
| 897 | + while( db_step(&q)==SQLITE_ROW ){ | |
| 898 | + const char *zFN = db_column_text(&q, 0); | |
| 899 | + blob_appendf(&out, "%s%z%h</a>", zSep, | |
| 900 | + href("%R/finfo?name=%t", zFN), zFN); | |
| 901 | + zSep = " or "; | |
| 902 | + } | |
| 903 | + db_finalize(&q); | |
| 904 | + return blob_str(&out); | |
| 905 | +} | |
| 906 | + | |
| 883 | 907 | |
| 884 | 908 | /* |
| 885 | 909 | ** WEBPAGE: timeline |
| 886 | 910 | ** |
| 887 | 911 | ** Query parameters: |
| @@ -1237,11 +1261,12 @@ | ||
| 1237 | 1261 | blob_appendf(&desc, "%d most recent %ss", n, zEType); |
| 1238 | 1262 | }else{ |
| 1239 | 1263 | blob_appendf(&desc, "%d %ss", n, zEType); |
| 1240 | 1264 | } |
| 1241 | 1265 | if( zUses ){ |
| 1242 | - blob_appendf(&desc, " using file %z%S</a>", | |
| 1266 | + char *zFilenames = names_of_file(zUses); | |
| 1267 | + blob_appendf(&desc, " using file %s version %z%S</a>", zFilenames, | |
| 1243 | 1268 | href("%R/artifact/%S",zUses), zUses); |
| 1244 | 1269 | tmFlags |= TIMELINE_DISJOINT; |
| 1245 | 1270 | } |
| 1246 | 1271 | if( zUser ){ |
| 1247 | 1272 | blob_appendf(&desc, " by user %h", zUser); |
| 1248 | 1273 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -878,10 +878,34 @@ | |
| 878 | rDate+ONE_SECOND |
| 879 | ); |
| 880 | fossil_free(zToDel); |
| 881 | } |
| 882 | |
| 883 | |
| 884 | /* |
| 885 | ** WEBPAGE: timeline |
| 886 | ** |
| 887 | ** Query parameters: |
| @@ -1237,11 +1261,12 @@ | |
| 1237 | blob_appendf(&desc, "%d most recent %ss", n, zEType); |
| 1238 | }else{ |
| 1239 | blob_appendf(&desc, "%d %ss", n, zEType); |
| 1240 | } |
| 1241 | if( zUses ){ |
| 1242 | blob_appendf(&desc, " using file %z%S</a>", |
| 1243 | href("%R/artifact/%S",zUses), zUses); |
| 1244 | tmFlags |= TIMELINE_DISJOINT; |
| 1245 | } |
| 1246 | if( zUser ){ |
| 1247 | blob_appendf(&desc, " by user %h", zUser); |
| 1248 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -878,10 +878,34 @@ | |
| 878 | rDate+ONE_SECOND |
| 879 | ); |
| 880 | fossil_free(zToDel); |
| 881 | } |
| 882 | |
| 883 | /* |
| 884 | ** Return all possible names for file zUuid. |
| 885 | */ |
| 886 | char *names_of_file(const char *zUuid){ |
| 887 | Stmt q; |
| 888 | Blob out; |
| 889 | const char *zSep = ""; |
| 890 | db_prepare(&q, |
| 891 | "SELECT DISTINCT filename.name FROM mlink, filename" |
| 892 | " WHERE mlink.fid=(SELECT rid FROM blob WHERE uuid='%s')" |
| 893 | " AND filename.fnid=mlink.fnid", |
| 894 | zUuid |
| 895 | ); |
| 896 | blob_zero(&out); |
| 897 | while( db_step(&q)==SQLITE_ROW ){ |
| 898 | const char *zFN = db_column_text(&q, 0); |
| 899 | blob_appendf(&out, "%s%z%h</a>", zSep, |
| 900 | href("%R/finfo?name=%t", zFN), zFN); |
| 901 | zSep = " or "; |
| 902 | } |
| 903 | db_finalize(&q); |
| 904 | return blob_str(&out); |
| 905 | } |
| 906 | |
| 907 | |
| 908 | /* |
| 909 | ** WEBPAGE: timeline |
| 910 | ** |
| 911 | ** Query parameters: |
| @@ -1237,11 +1261,12 @@ | |
| 1261 | blob_appendf(&desc, "%d most recent %ss", n, zEType); |
| 1262 | }else{ |
| 1263 | blob_appendf(&desc, "%d %ss", n, zEType); |
| 1264 | } |
| 1265 | if( zUses ){ |
| 1266 | char *zFilenames = names_of_file(zUses); |
| 1267 | blob_appendf(&desc, " using file %s version %z%S</a>", zFilenames, |
| 1268 | href("%R/artifact/%S",zUses), zUses); |
| 1269 | tmFlags |= TIMELINE_DISJOINT; |
| 1270 | } |
| 1271 | if( zUser ){ |
| 1272 | blob_appendf(&desc, " by user %h", zUser); |
| 1273 |