Fossil SCM
Fixes to the "ancestry" links of /fdiff.
Commit
d4d6a8432b9bfe4d0ab1afca728ba4818dece611
Parent
a08d17563497338…
1 file changed
+23
-9
+23
-9
| --- src/finfo.c | ||
| +++ src/finfo.c | ||
| @@ -343,12 +343,22 @@ | ||
| 343 | 343 | " WHERE mlink.fnid=%d" |
| 344 | 344 | " AND event.objid=mlink.mid", |
| 345 | 345 | timeline_utc(), TAG_BRANCH, fnid |
| 346 | 346 | ); |
| 347 | 347 | if( baseCheckin ){ |
| 348 | - compute_direct_ancestors(baseCheckin, 10000000); | |
| 349 | - blob_append_sql(&sql," AND mlink.mid IN (SELECT rid FROM ancestor)"); | |
| 348 | + blob_append_sql(&sql, | |
| 349 | + " AND mlink.fid IN (" | |
| 350 | + " WITH RECURSIVE x(fid) AS (" | |
| 351 | + " SELECT mlink.fid FROM mlink" | |
| 352 | + " WHERE mlink.mid=%d AND mlink.fnid=%d" | |
| 353 | + " UNION" | |
| 354 | + " SELECT mlink.pid FROM mlink, x" | |
| 355 | + " WHERE mlink.fid=x.fid AND mlink.pid>0 AND +mlink.fnid=%d" | |
| 356 | + " ) SELECT fid FROM x)" | |
| 357 | + " AND event.mtime<=(SELECT mtime FROM event WHERE objid=%d)", | |
| 358 | + baseCheckin, fnid, fnid, baseCheckin | |
| 359 | + ); | |
| 350 | 360 | } |
| 351 | 361 | if( (zA = P("a"))!=0 ){ |
| 352 | 362 | blob_append_sql(&sql, " AND event.mtime>=julianday('%q')", zA); |
| 353 | 363 | url_add_parameter(&url, "a", zA); |
| 354 | 364 | } |
| @@ -373,17 +383,19 @@ | ||
| 373 | 383 | if( baseCheckin ){ |
| 374 | 384 | char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", baseCheckin); |
| 375 | 385 | char *zLink = href("%R/info/%s", zUuid); |
| 376 | 386 | blob_appendf(&title, "Ancestors of file "); |
| 377 | 387 | hyperlinked_path(zFilename, &title, zUuid, "tree", ""); |
| 388 | + if( fShowId ) blob_appendf(&title, " (%d)", fnid); | |
| 378 | 389 | blob_appendf(&title, " from check-in %z%S</a>", zLink, zUuid); |
| 390 | + if( fShowId ) blob_appendf(&title, " (%d)", baseCheckin); | |
| 379 | 391 | fossil_free(zUuid); |
| 380 | 392 | }else{ |
| 381 | 393 | blob_appendf(&title, "History of files named "); |
| 382 | 394 | hyperlinked_path(zFilename, &title, 0, "tree", ""); |
| 395 | + if( fShowId ) blob_appendf(&title, " (%d)", fnid); | |
| 383 | 396 | } |
| 384 | - if( fShowId ) blob_appendf(&title, " (%d)", fnid); | |
| 385 | 397 | @ <h2>%b(&title)</h2> |
| 386 | 398 | blob_reset(&title); |
| 387 | 399 | pGraph = graph_init(); |
| 388 | 400 | @ <div id="canvas" style="position:relative;width:1px;height:1px;" |
| 389 | 401 | @ onclick="clickOnGraph(event)"></div> |
| @@ -489,23 +501,25 @@ | ||
| 489 | 501 | if( fpid ){ |
| 490 | 502 | @ %z(href("%R/fdiff?sbs=1&v1=%s&v2=%s",zPUuid,zUuid))[diff]</a> |
| 491 | 503 | } |
| 492 | 504 | } |
| 493 | 505 | if( fDebug & FINFO_DEBUG_MLINK ){ |
| 494 | - int srcid = db_int(0, "SELECT srcid FROM delta WHERE rid=%d", frid); | |
| 495 | - int sz = db_int(0, "SELECT length(content) FROM blob WHERE rid=%d", frid); | |
| 496 | - @ <br>fid=%d(frid) pid=%d(fpid) mid=%d(fmid) sz=%d(sz) | |
| 497 | - if( srcid ){ | |
| 498 | - @ srcid=%d(srcid) | |
| 506 | + int ii; | |
| 507 | + @ <br>fid=%d(frid) pid=%d(fpid) mid=%d(fmid) | |
| 508 | + if( nParent>0 ){ | |
| 509 | + @ parents=%d(aParent[0]) | |
| 510 | + for(ii=1; ii<nParent; ii++){ | |
| 511 | + @ %d(aParent[ii]) | |
| 512 | + } | |
| 499 | 513 | } |
| 500 | 514 | } |
| 501 | 515 | tag_private_status(frid); |
| 502 | 516 | @ </td></tr> |
| 503 | 517 | } |
| 504 | 518 | db_finalize(&q); |
| 505 | 519 | if( pGraph ){ |
| 506 | - graph_finish(pGraph, 0); | |
| 520 | + graph_finish(pGraph, 1); | |
| 507 | 521 | if( pGraph->nErr ){ |
| 508 | 522 | graph_free(pGraph); |
| 509 | 523 | pGraph = 0; |
| 510 | 524 | }else{ |
| 511 | 525 | int w = (pGraph->mxRail+1)*pGraph->iRailPitch + 10; |
| 512 | 526 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -343,12 +343,22 @@ | |
| 343 | " WHERE mlink.fnid=%d" |
| 344 | " AND event.objid=mlink.mid", |
| 345 | timeline_utc(), TAG_BRANCH, fnid |
| 346 | ); |
| 347 | if( baseCheckin ){ |
| 348 | compute_direct_ancestors(baseCheckin, 10000000); |
| 349 | blob_append_sql(&sql," AND mlink.mid IN (SELECT rid FROM ancestor)"); |
| 350 | } |
| 351 | if( (zA = P("a"))!=0 ){ |
| 352 | blob_append_sql(&sql, " AND event.mtime>=julianday('%q')", zA); |
| 353 | url_add_parameter(&url, "a", zA); |
| 354 | } |
| @@ -373,17 +383,19 @@ | |
| 373 | if( baseCheckin ){ |
| 374 | char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", baseCheckin); |
| 375 | char *zLink = href("%R/info/%s", zUuid); |
| 376 | blob_appendf(&title, "Ancestors of file "); |
| 377 | hyperlinked_path(zFilename, &title, zUuid, "tree", ""); |
| 378 | blob_appendf(&title, " from check-in %z%S</a>", zLink, zUuid); |
| 379 | fossil_free(zUuid); |
| 380 | }else{ |
| 381 | blob_appendf(&title, "History of files named "); |
| 382 | hyperlinked_path(zFilename, &title, 0, "tree", ""); |
| 383 | } |
| 384 | if( fShowId ) blob_appendf(&title, " (%d)", fnid); |
| 385 | @ <h2>%b(&title)</h2> |
| 386 | blob_reset(&title); |
| 387 | pGraph = graph_init(); |
| 388 | @ <div id="canvas" style="position:relative;width:1px;height:1px;" |
| 389 | @ onclick="clickOnGraph(event)"></div> |
| @@ -489,23 +501,25 @@ | |
| 489 | if( fpid ){ |
| 490 | @ %z(href("%R/fdiff?sbs=1&v1=%s&v2=%s",zPUuid,zUuid))[diff]</a> |
| 491 | } |
| 492 | } |
| 493 | if( fDebug & FINFO_DEBUG_MLINK ){ |
| 494 | int srcid = db_int(0, "SELECT srcid FROM delta WHERE rid=%d", frid); |
| 495 | int sz = db_int(0, "SELECT length(content) FROM blob WHERE rid=%d", frid); |
| 496 | @ <br>fid=%d(frid) pid=%d(fpid) mid=%d(fmid) sz=%d(sz) |
| 497 | if( srcid ){ |
| 498 | @ srcid=%d(srcid) |
| 499 | } |
| 500 | } |
| 501 | tag_private_status(frid); |
| 502 | @ </td></tr> |
| 503 | } |
| 504 | db_finalize(&q); |
| 505 | if( pGraph ){ |
| 506 | graph_finish(pGraph, 0); |
| 507 | if( pGraph->nErr ){ |
| 508 | graph_free(pGraph); |
| 509 | pGraph = 0; |
| 510 | }else{ |
| 511 | int w = (pGraph->mxRail+1)*pGraph->iRailPitch + 10; |
| 512 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -343,12 +343,22 @@ | |
| 343 | " WHERE mlink.fnid=%d" |
| 344 | " AND event.objid=mlink.mid", |
| 345 | timeline_utc(), TAG_BRANCH, fnid |
| 346 | ); |
| 347 | if( baseCheckin ){ |
| 348 | blob_append_sql(&sql, |
| 349 | " AND mlink.fid IN (" |
| 350 | " WITH RECURSIVE x(fid) AS (" |
| 351 | " SELECT mlink.fid FROM mlink" |
| 352 | " WHERE mlink.mid=%d AND mlink.fnid=%d" |
| 353 | " UNION" |
| 354 | " SELECT mlink.pid FROM mlink, x" |
| 355 | " WHERE mlink.fid=x.fid AND mlink.pid>0 AND +mlink.fnid=%d" |
| 356 | " ) SELECT fid FROM x)" |
| 357 | " AND event.mtime<=(SELECT mtime FROM event WHERE objid=%d)", |
| 358 | baseCheckin, fnid, fnid, baseCheckin |
| 359 | ); |
| 360 | } |
| 361 | if( (zA = P("a"))!=0 ){ |
| 362 | blob_append_sql(&sql, " AND event.mtime>=julianday('%q')", zA); |
| 363 | url_add_parameter(&url, "a", zA); |
| 364 | } |
| @@ -373,17 +383,19 @@ | |
| 383 | if( baseCheckin ){ |
| 384 | char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", baseCheckin); |
| 385 | char *zLink = href("%R/info/%s", zUuid); |
| 386 | blob_appendf(&title, "Ancestors of file "); |
| 387 | hyperlinked_path(zFilename, &title, zUuid, "tree", ""); |
| 388 | if( fShowId ) blob_appendf(&title, " (%d)", fnid); |
| 389 | blob_appendf(&title, " from check-in %z%S</a>", zLink, zUuid); |
| 390 | if( fShowId ) blob_appendf(&title, " (%d)", baseCheckin); |
| 391 | fossil_free(zUuid); |
| 392 | }else{ |
| 393 | blob_appendf(&title, "History of files named "); |
| 394 | hyperlinked_path(zFilename, &title, 0, "tree", ""); |
| 395 | if( fShowId ) blob_appendf(&title, " (%d)", fnid); |
| 396 | } |
| 397 | @ <h2>%b(&title)</h2> |
| 398 | blob_reset(&title); |
| 399 | pGraph = graph_init(); |
| 400 | @ <div id="canvas" style="position:relative;width:1px;height:1px;" |
| 401 | @ onclick="clickOnGraph(event)"></div> |
| @@ -489,23 +501,25 @@ | |
| 501 | if( fpid ){ |
| 502 | @ %z(href("%R/fdiff?sbs=1&v1=%s&v2=%s",zPUuid,zUuid))[diff]</a> |
| 503 | } |
| 504 | } |
| 505 | if( fDebug & FINFO_DEBUG_MLINK ){ |
| 506 | int ii; |
| 507 | @ <br>fid=%d(frid) pid=%d(fpid) mid=%d(fmid) |
| 508 | if( nParent>0 ){ |
| 509 | @ parents=%d(aParent[0]) |
| 510 | for(ii=1; ii<nParent; ii++){ |
| 511 | @ %d(aParent[ii]) |
| 512 | } |
| 513 | } |
| 514 | } |
| 515 | tag_private_status(frid); |
| 516 | @ </td></tr> |
| 517 | } |
| 518 | db_finalize(&q); |
| 519 | if( pGraph ){ |
| 520 | graph_finish(pGraph, 1); |
| 521 | if( pGraph->nErr ){ |
| 522 | graph_free(pGraph); |
| 523 | pGraph = 0; |
| 524 | }else{ |
| 525 | int w = (pGraph->mxRail+1)*pGraph->iRailPitch + 10; |
| 526 |