Fossil SCM
On the check-in info page, offer a selection of nearby leaves to diff against.
Commit
238db72dc99a2a4f52127b1317794e127730af00
Parent
ac65f5bd54b7162…
1 file changed
+58
-1
+58
-1
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -464,11 +464,11 @@ | ||
| 464 | 464 | rid |
| 465 | 465 | ); |
| 466 | 466 | isLeaf = is_a_leaf(rid); |
| 467 | 467 | db_prepare(&q, |
| 468 | 468 | "SELECT uuid, datetime(mtime, 'localtime'), user, comment," |
| 469 | - " datetime(omtime, 'localtime')" | |
| 469 | + " datetime(omtime, 'localtime'), mtime" | |
| 470 | 470 | " FROM blob, event" |
| 471 | 471 | " WHERE blob.rid=%d" |
| 472 | 472 | " AND event.objid=%d", |
| 473 | 473 | rid, rid |
| 474 | 474 | ); |
| @@ -479,10 +479,14 @@ | ||
| 479 | 479 | char *zEUser, *zEComment; |
| 480 | 480 | const char *zUser; |
| 481 | 481 | const char *zComment; |
| 482 | 482 | const char *zDate; |
| 483 | 483 | const char *zOrigDate; |
| 484 | + char *zThisBranch; | |
| 485 | + double thisMtime; | |
| 486 | + int seenDiffTitle = 0; | |
| 487 | + | |
| 484 | 488 | style_header(zTitle); |
| 485 | 489 | login_anonymous_available(); |
| 486 | 490 | free(zTitle); |
| 487 | 491 | zEUser = db_text(0, |
| 488 | 492 | "SELECT value FROM tagxref WHERE tagid=%d AND rid=%d", |
| @@ -492,10 +496,11 @@ | ||
| 492 | 496 | TAG_COMMENT, rid); |
| 493 | 497 | zUser = db_column_text(&q, 2); |
| 494 | 498 | zComment = db_column_text(&q, 3); |
| 495 | 499 | zDate = db_column_text(&q,1); |
| 496 | 500 | zOrigDate = db_column_text(&q, 4); |
| 501 | + thisMtime = db_column_double(&q, 5); | |
| 497 | 502 | @ <div class="section">Overview</div> |
| 498 | 503 | @ <table class="label-value"> |
| 499 | 504 | @ <tr><th>SHA1 Hash:</th><td>%s(zUuid) |
| 500 | 505 | if( g.perm.Setup ){ |
| 501 | 506 | @ (Record ID: %d(rid)) |
| @@ -559,10 +564,62 @@ | ||
| 559 | 564 | while( db_step(&q)==SQLITE_ROW ){ |
| 560 | 565 | const char *zTagName = db_column_text(&q, 0); |
| 561 | 566 | @ | %z(href("%R/timeline?r=%T",zTagName))%h(zTagName)</a> |
| 562 | 567 | } |
| 563 | 568 | db_finalize(&q); |
| 569 | + | |
| 570 | + /* Select a few other branches to diff against */ | |
| 571 | + zThisBranch = db_text("trunk", "SELECT value FROM tagxref" | |
| 572 | + " WHERE tagid=%d AND tagtype>0" | |
| 573 | + " AND rid=%d", | |
| 574 | + TAG_BRANCH, rid); | |
| 575 | + | |
| 576 | + /* Find nearby leaves to offer to diff against */ | |
| 577 | + db_prepare(&q, | |
| 578 | + "SELECT tagxref.value, blob.uuid, min(%.17g-event.mtime)" | |
| 579 | + " FROM leaf, event, tagxref, blob" | |
| 580 | + " WHERE event.mtime BETWEEN %.17g AND %.17g" | |
| 581 | + " AND event.type='ci'" | |
| 582 | + " AND event.objid=leaf.rid" | |
| 583 | + " AND NOT %z" | |
| 584 | + " AND tagxref.rid=event.objid" | |
| 585 | + " AND tagxref.tagid=%d AND tagxref.tagtype>0" | |
| 586 | + " AND tagxref.value!=%Q" | |
| 587 | + " AND blob.rid=tagxref.rid" | |
| 588 | + " GROUP BY 1 ORDER BY 3", | |
| 589 | + thisMtime, thisMtime-7, thisMtime+7, | |
| 590 | + leaf_is_closed_sql("leaf.rid"), | |
| 591 | + TAG_BRANCH, zThisBranch | |
| 592 | + ); | |
| 593 | + while( db_step(&q)==SQLITE_ROW ){ | |
| 594 | + const char *zBr = db_column_text(&q, 0); | |
| 595 | + const char *zId = db_column_text(&q, 1); | |
| 596 | + if( !seenDiffTitle ){ | |
| 597 | + @ <tr><th valign="top">Diffs:</th><td valign="top"> | |
| 598 | + seenDiffTitle = 1; | |
| 599 | + }else{ | |
| 600 | + @ | | |
| 601 | + } | |
| 602 | + @ %z(href("%R/vdiff?from=%S&to=%S",zId, zUuid))%h(zBr)</a> | |
| 603 | + } | |
| 604 | + db_finalize(&q); | |
| 605 | + | |
| 606 | + if( fossil_strcmp(zThisBranch,"trunk")!=0 ){ | |
| 607 | + if( !seenDiffTitle ){ | |
| 608 | + @ <tr><th valign="top">Diffs:</th><td valign="top"> | |
| 609 | + seenDiffTitle = 1; | |
| 610 | + }else{ | |
| 611 | + @ | | |
| 612 | + } | |
| 613 | + @ %z(href("%R/vdiff?from=root:%S&to=%S",zUuid,zUuid))root of | |
| 614 | + @ this branch</a> | |
| 615 | + } | |
| 616 | + if( seenDiffTitle ){ | |
| 617 | + @ </td></tr> | |
| 618 | + } | |
| 619 | + | |
| 620 | + /* The Download: line */ | |
| 564 | 621 | if( g.perm.Zip ){ |
| 565 | 622 | char *zUrl = mprintf("%R/tarball/%s-%S.tar.gz?uuid=%s", |
| 566 | 623 | zProjName, zUuid, zUuid); |
| 567 | 624 | @ </td></tr> |
| 568 | 625 | @ <tr><th>Downloads:</th><td> |
| 569 | 626 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -464,11 +464,11 @@ | |
| 464 | rid |
| 465 | ); |
| 466 | isLeaf = is_a_leaf(rid); |
| 467 | db_prepare(&q, |
| 468 | "SELECT uuid, datetime(mtime, 'localtime'), user, comment," |
| 469 | " datetime(omtime, 'localtime')" |
| 470 | " FROM blob, event" |
| 471 | " WHERE blob.rid=%d" |
| 472 | " AND event.objid=%d", |
| 473 | rid, rid |
| 474 | ); |
| @@ -479,10 +479,14 @@ | |
| 479 | char *zEUser, *zEComment; |
| 480 | const char *zUser; |
| 481 | const char *zComment; |
| 482 | const char *zDate; |
| 483 | const char *zOrigDate; |
| 484 | style_header(zTitle); |
| 485 | login_anonymous_available(); |
| 486 | free(zTitle); |
| 487 | zEUser = db_text(0, |
| 488 | "SELECT value FROM tagxref WHERE tagid=%d AND rid=%d", |
| @@ -492,10 +496,11 @@ | |
| 492 | TAG_COMMENT, rid); |
| 493 | zUser = db_column_text(&q, 2); |
| 494 | zComment = db_column_text(&q, 3); |
| 495 | zDate = db_column_text(&q,1); |
| 496 | zOrigDate = db_column_text(&q, 4); |
| 497 | @ <div class="section">Overview</div> |
| 498 | @ <table class="label-value"> |
| 499 | @ <tr><th>SHA1 Hash:</th><td>%s(zUuid) |
| 500 | if( g.perm.Setup ){ |
| 501 | @ (Record ID: %d(rid)) |
| @@ -559,10 +564,62 @@ | |
| 559 | while( db_step(&q)==SQLITE_ROW ){ |
| 560 | const char *zTagName = db_column_text(&q, 0); |
| 561 | @ | %z(href("%R/timeline?r=%T",zTagName))%h(zTagName)</a> |
| 562 | } |
| 563 | db_finalize(&q); |
| 564 | if( g.perm.Zip ){ |
| 565 | char *zUrl = mprintf("%R/tarball/%s-%S.tar.gz?uuid=%s", |
| 566 | zProjName, zUuid, zUuid); |
| 567 | @ </td></tr> |
| 568 | @ <tr><th>Downloads:</th><td> |
| 569 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -464,11 +464,11 @@ | |
| 464 | rid |
| 465 | ); |
| 466 | isLeaf = is_a_leaf(rid); |
| 467 | db_prepare(&q, |
| 468 | "SELECT uuid, datetime(mtime, 'localtime'), user, comment," |
| 469 | " datetime(omtime, 'localtime'), mtime" |
| 470 | " FROM blob, event" |
| 471 | " WHERE blob.rid=%d" |
| 472 | " AND event.objid=%d", |
| 473 | rid, rid |
| 474 | ); |
| @@ -479,10 +479,14 @@ | |
| 479 | char *zEUser, *zEComment; |
| 480 | const char *zUser; |
| 481 | const char *zComment; |
| 482 | const char *zDate; |
| 483 | const char *zOrigDate; |
| 484 | char *zThisBranch; |
| 485 | double thisMtime; |
| 486 | int seenDiffTitle = 0; |
| 487 | |
| 488 | style_header(zTitle); |
| 489 | login_anonymous_available(); |
| 490 | free(zTitle); |
| 491 | zEUser = db_text(0, |
| 492 | "SELECT value FROM tagxref WHERE tagid=%d AND rid=%d", |
| @@ -492,10 +496,11 @@ | |
| 496 | TAG_COMMENT, rid); |
| 497 | zUser = db_column_text(&q, 2); |
| 498 | zComment = db_column_text(&q, 3); |
| 499 | zDate = db_column_text(&q,1); |
| 500 | zOrigDate = db_column_text(&q, 4); |
| 501 | thisMtime = db_column_double(&q, 5); |
| 502 | @ <div class="section">Overview</div> |
| 503 | @ <table class="label-value"> |
| 504 | @ <tr><th>SHA1 Hash:</th><td>%s(zUuid) |
| 505 | if( g.perm.Setup ){ |
| 506 | @ (Record ID: %d(rid)) |
| @@ -559,10 +564,62 @@ | |
| 564 | while( db_step(&q)==SQLITE_ROW ){ |
| 565 | const char *zTagName = db_column_text(&q, 0); |
| 566 | @ | %z(href("%R/timeline?r=%T",zTagName))%h(zTagName)</a> |
| 567 | } |
| 568 | db_finalize(&q); |
| 569 | |
| 570 | /* Select a few other branches to diff against */ |
| 571 | zThisBranch = db_text("trunk", "SELECT value FROM tagxref" |
| 572 | " WHERE tagid=%d AND tagtype>0" |
| 573 | " AND rid=%d", |
| 574 | TAG_BRANCH, rid); |
| 575 | |
| 576 | /* Find nearby leaves to offer to diff against */ |
| 577 | db_prepare(&q, |
| 578 | "SELECT tagxref.value, blob.uuid, min(%.17g-event.mtime)" |
| 579 | " FROM leaf, event, tagxref, blob" |
| 580 | " WHERE event.mtime BETWEEN %.17g AND %.17g" |
| 581 | " AND event.type='ci'" |
| 582 | " AND event.objid=leaf.rid" |
| 583 | " AND NOT %z" |
| 584 | " AND tagxref.rid=event.objid" |
| 585 | " AND tagxref.tagid=%d AND tagxref.tagtype>0" |
| 586 | " AND tagxref.value!=%Q" |
| 587 | " AND blob.rid=tagxref.rid" |
| 588 | " GROUP BY 1 ORDER BY 3", |
| 589 | thisMtime, thisMtime-7, thisMtime+7, |
| 590 | leaf_is_closed_sql("leaf.rid"), |
| 591 | TAG_BRANCH, zThisBranch |
| 592 | ); |
| 593 | while( db_step(&q)==SQLITE_ROW ){ |
| 594 | const char *zBr = db_column_text(&q, 0); |
| 595 | const char *zId = db_column_text(&q, 1); |
| 596 | if( !seenDiffTitle ){ |
| 597 | @ <tr><th valign="top">Diffs:</th><td valign="top"> |
| 598 | seenDiffTitle = 1; |
| 599 | }else{ |
| 600 | @ | |
| 601 | } |
| 602 | @ %z(href("%R/vdiff?from=%S&to=%S",zId, zUuid))%h(zBr)</a> |
| 603 | } |
| 604 | db_finalize(&q); |
| 605 | |
| 606 | if( fossil_strcmp(zThisBranch,"trunk")!=0 ){ |
| 607 | if( !seenDiffTitle ){ |
| 608 | @ <tr><th valign="top">Diffs:</th><td valign="top"> |
| 609 | seenDiffTitle = 1; |
| 610 | }else{ |
| 611 | @ | |
| 612 | } |
| 613 | @ %z(href("%R/vdiff?from=root:%S&to=%S",zUuid,zUuid))root of |
| 614 | @ this branch</a> |
| 615 | } |
| 616 | if( seenDiffTitle ){ |
| 617 | @ </td></tr> |
| 618 | } |
| 619 | |
| 620 | /* The Download: line */ |
| 621 | if( g.perm.Zip ){ |
| 622 | char *zUrl = mprintf("%R/tarball/%s-%S.tar.gz?uuid=%s", |
| 623 | zProjName, zUuid, zUuid); |
| 624 | @ </td></tr> |
| 625 | @ <tr><th>Downloads:</th><td> |
| 626 |