Fossil SCM
Add the ci= query parameter to the finfo webpage, to trace the direct ancestors of a file from a particular check-in.
Commit
418ec701a347b27dd6bb69956d129dabec28a894
Parent
24e259da5aa399c…
1 file changed
+18
-2
+18
-2
| --- src/finfo.c | ||
| +++ src/finfo.c | ||
| @@ -256,19 +256,21 @@ | ||
| 256 | 256 | ** a=DATE Only show changes after DATE |
| 257 | 257 | ** b=DATE Only show changes before DATE |
| 258 | 258 | ** n=NUM Show the first NUM changes only |
| 259 | 259 | ** brbg Background color by branch name |
| 260 | 260 | ** ubg Background color by user name |
| 261 | +** ci=UUID Ancestors of a particular check-in | |
| 261 | 262 | ** fco=BOOL Show only first occurrence of each version if true (default) |
| 262 | 263 | */ |
| 263 | 264 | void finfo_page(void){ |
| 264 | 265 | Stmt q; |
| 265 | 266 | const char *zFilename; |
| 266 | 267 | char zPrevDate[20]; |
| 267 | 268 | const char *zA; |
| 268 | 269 | const char *zB; |
| 269 | 270 | int n; |
| 271 | + int baseCheckin; | |
| 270 | 272 | |
| 271 | 273 | Blob title; |
| 272 | 274 | Blob sql; |
| 273 | 275 | HQuery url; |
| 274 | 276 | GraphContext *pGraph; |
| @@ -283,10 +285,11 @@ | ||
| 283 | 285 | login_anonymous_available(); |
| 284 | 286 | url_initialize(&url, "finfo"); |
| 285 | 287 | if( brBg ) url_add_parameter(&url, "brbg", 0); |
| 286 | 288 | if( uBg ) url_add_parameter(&url, "ubg", 0); |
| 287 | 289 | if( firstChngOnly ) url_add_parameter(&url, "fco", "0"); |
| 290 | + baseCheckin = name_to_rid_www("ci"); | |
| 288 | 291 | |
| 289 | 292 | zPrevDate[0] = 0; |
| 290 | 293 | zFilename = PD("name",""); |
| 291 | 294 | url_add_parameter(&url, "name", zFilename); |
| 292 | 295 | blob_zero(&sql); |
| @@ -314,10 +317,14 @@ | ||
| 314 | 317 | " FROM mlink, event" |
| 315 | 318 | " WHERE mlink.fnid IN (SELECT fnid FROM filename WHERE name=%Q)" |
| 316 | 319 | " AND event.objid=mlink.mid", |
| 317 | 320 | zFilename |
| 318 | 321 | ); |
| 322 | + if( baseCheckin ){ | |
| 323 | + compute_direct_ancestors(baseCheckin, 10000000); | |
| 324 | + blob_appendf(&sql," AND mlink.mid IN (SELECT rid FROM ancestor)"); | |
| 325 | + } | |
| 319 | 326 | if( (zA = P("a"))!=0 ){ |
| 320 | 327 | blob_appendf(&sql, " AND event.mtime>=julianday('%q')", zA); |
| 321 | 328 | url_add_parameter(&url, "a", zA); |
| 322 | 329 | } |
| 323 | 330 | if( (zB = P("b"))!=0 ){ |
| @@ -340,12 +347,21 @@ | ||
| 340 | 347 | url_render(&url, "fco", "1", 0, 0)); |
| 341 | 348 | } |
| 342 | 349 | db_prepare(&q, blob_str(&sql)); |
| 343 | 350 | blob_reset(&sql); |
| 344 | 351 | blob_zero(&title); |
| 345 | - blob_appendf(&title, "History of "); | |
| 346 | - hyperlinked_path(zFilename, &title, 0); | |
| 352 | + if( baseCheckin ){ | |
| 353 | + char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", baseCheckin); | |
| 354 | + char *zLink = href("%R/info/%S", zUuid); | |
| 355 | + blob_appendf(&title, "Ancestry of "); | |
| 356 | + hyperlinked_path(zFilename, &title, 0); | |
| 357 | + blob_appendf(&title, " from check-in %z%.10s</a>", zLink, zUuid); | |
| 358 | + fossil_free(zUuid); | |
| 359 | + }else{ | |
| 360 | + blob_appendf(&title, "History of "); | |
| 361 | + hyperlinked_path(zFilename, &title, 0); | |
| 362 | + } | |
| 347 | 363 | @ <h2>%b(&title)</h2> |
| 348 | 364 | blob_reset(&title); |
| 349 | 365 | pGraph = graph_init(); |
| 350 | 366 | @ <div id="canvas" style="position:relative;width:1px;height:1px;" |
| 351 | 367 | @ onclick="clickOnGraph(event)"></div> |
| 352 | 368 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -256,19 +256,21 @@ | |
| 256 | ** a=DATE Only show changes after DATE |
| 257 | ** b=DATE Only show changes before DATE |
| 258 | ** n=NUM Show the first NUM changes only |
| 259 | ** brbg Background color by branch name |
| 260 | ** ubg Background color by user name |
| 261 | ** fco=BOOL Show only first occurrence of each version if true (default) |
| 262 | */ |
| 263 | void finfo_page(void){ |
| 264 | Stmt q; |
| 265 | const char *zFilename; |
| 266 | char zPrevDate[20]; |
| 267 | const char *zA; |
| 268 | const char *zB; |
| 269 | int n; |
| 270 | |
| 271 | Blob title; |
| 272 | Blob sql; |
| 273 | HQuery url; |
| 274 | GraphContext *pGraph; |
| @@ -283,10 +285,11 @@ | |
| 283 | login_anonymous_available(); |
| 284 | url_initialize(&url, "finfo"); |
| 285 | if( brBg ) url_add_parameter(&url, "brbg", 0); |
| 286 | if( uBg ) url_add_parameter(&url, "ubg", 0); |
| 287 | if( firstChngOnly ) url_add_parameter(&url, "fco", "0"); |
| 288 | |
| 289 | zPrevDate[0] = 0; |
| 290 | zFilename = PD("name",""); |
| 291 | url_add_parameter(&url, "name", zFilename); |
| 292 | blob_zero(&sql); |
| @@ -314,10 +317,14 @@ | |
| 314 | " FROM mlink, event" |
| 315 | " WHERE mlink.fnid IN (SELECT fnid FROM filename WHERE name=%Q)" |
| 316 | " AND event.objid=mlink.mid", |
| 317 | zFilename |
| 318 | ); |
| 319 | if( (zA = P("a"))!=0 ){ |
| 320 | blob_appendf(&sql, " AND event.mtime>=julianday('%q')", zA); |
| 321 | url_add_parameter(&url, "a", zA); |
| 322 | } |
| 323 | if( (zB = P("b"))!=0 ){ |
| @@ -340,12 +347,21 @@ | |
| 340 | url_render(&url, "fco", "1", 0, 0)); |
| 341 | } |
| 342 | db_prepare(&q, blob_str(&sql)); |
| 343 | blob_reset(&sql); |
| 344 | blob_zero(&title); |
| 345 | blob_appendf(&title, "History of "); |
| 346 | hyperlinked_path(zFilename, &title, 0); |
| 347 | @ <h2>%b(&title)</h2> |
| 348 | blob_reset(&title); |
| 349 | pGraph = graph_init(); |
| 350 | @ <div id="canvas" style="position:relative;width:1px;height:1px;" |
| 351 | @ onclick="clickOnGraph(event)"></div> |
| 352 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -256,19 +256,21 @@ | |
| 256 | ** a=DATE Only show changes after DATE |
| 257 | ** b=DATE Only show changes before DATE |
| 258 | ** n=NUM Show the first NUM changes only |
| 259 | ** brbg Background color by branch name |
| 260 | ** ubg Background color by user name |
| 261 | ** ci=UUID Ancestors of a particular check-in |
| 262 | ** fco=BOOL Show only first occurrence of each version if true (default) |
| 263 | */ |
| 264 | void finfo_page(void){ |
| 265 | Stmt q; |
| 266 | const char *zFilename; |
| 267 | char zPrevDate[20]; |
| 268 | const char *zA; |
| 269 | const char *zB; |
| 270 | int n; |
| 271 | int baseCheckin; |
| 272 | |
| 273 | Blob title; |
| 274 | Blob sql; |
| 275 | HQuery url; |
| 276 | GraphContext *pGraph; |
| @@ -283,10 +285,11 @@ | |
| 285 | login_anonymous_available(); |
| 286 | url_initialize(&url, "finfo"); |
| 287 | if( brBg ) url_add_parameter(&url, "brbg", 0); |
| 288 | if( uBg ) url_add_parameter(&url, "ubg", 0); |
| 289 | if( firstChngOnly ) url_add_parameter(&url, "fco", "0"); |
| 290 | baseCheckin = name_to_rid_www("ci"); |
| 291 | |
| 292 | zPrevDate[0] = 0; |
| 293 | zFilename = PD("name",""); |
| 294 | url_add_parameter(&url, "name", zFilename); |
| 295 | blob_zero(&sql); |
| @@ -314,10 +317,14 @@ | |
| 317 | " FROM mlink, event" |
| 318 | " WHERE mlink.fnid IN (SELECT fnid FROM filename WHERE name=%Q)" |
| 319 | " AND event.objid=mlink.mid", |
| 320 | zFilename |
| 321 | ); |
| 322 | if( baseCheckin ){ |
| 323 | compute_direct_ancestors(baseCheckin, 10000000); |
| 324 | blob_appendf(&sql," AND mlink.mid IN (SELECT rid FROM ancestor)"); |
| 325 | } |
| 326 | if( (zA = P("a"))!=0 ){ |
| 327 | blob_appendf(&sql, " AND event.mtime>=julianday('%q')", zA); |
| 328 | url_add_parameter(&url, "a", zA); |
| 329 | } |
| 330 | if( (zB = P("b"))!=0 ){ |
| @@ -340,12 +347,21 @@ | |
| 347 | url_render(&url, "fco", "1", 0, 0)); |
| 348 | } |
| 349 | db_prepare(&q, blob_str(&sql)); |
| 350 | blob_reset(&sql); |
| 351 | blob_zero(&title); |
| 352 | if( baseCheckin ){ |
| 353 | char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", baseCheckin); |
| 354 | char *zLink = href("%R/info/%S", zUuid); |
| 355 | blob_appendf(&title, "Ancestry of "); |
| 356 | hyperlinked_path(zFilename, &title, 0); |
| 357 | blob_appendf(&title, " from check-in %z%.10s</a>", zLink, zUuid); |
| 358 | fossil_free(zUuid); |
| 359 | }else{ |
| 360 | blob_appendf(&title, "History of "); |
| 361 | hyperlinked_path(zFilename, &title, 0); |
| 362 | } |
| 363 | @ <h2>%b(&title)</h2> |
| 364 | blob_reset(&title); |
| 365 | pGraph = graph_init(); |
| 366 | @ <div id="canvas" style="position:relative;width:1px;height:1px;" |
| 367 | @ onclick="clickOnGraph(event)"></div> |
| 368 |