Fossil SCM
Enhance the /mlink page to handle the name= query parameter.
Commit
a1721621f6828f42e44aeef56ea60d577b07a4e7
Parent
fba948a391ff97a…
1 file changed
+77
-3
+77
-3
| --- src/finfo.c | ||
| +++ src/finfo.c | ||
| @@ -325,10 +325,13 @@ | ||
| 325 | 325 | if( fnid==0 ){ |
| 326 | 326 | @ No such file: %h(zFilename) |
| 327 | 327 | style_footer(); |
| 328 | 328 | return; |
| 329 | 329 | } |
| 330 | + if( g.perm.Admin ){ | |
| 331 | + style_submenu_element("MLink Table", "mtab", "%R/mlink?name=%t", zFilename); | |
| 332 | + } | |
| 330 | 333 | if( baseCheckin ){ |
| 331 | 334 | compute_direct_ancestors(baseCheckin); |
| 332 | 335 | } |
| 333 | 336 | url_add_parameter(&url, "name", zFilename); |
| 334 | 337 | blob_zero(&sql); |
| @@ -579,13 +582,84 @@ | ||
| 579 | 582 | if( zFName==0 && zCI==0 ){ |
| 580 | 583 | @ <span class='generalError'> |
| 581 | 584 | @ Requires either a name= or ci= query parameter |
| 582 | 585 | @ </span> |
| 583 | 586 | }else if( zFName ){ |
| 584 | - @ <span class='generalError'> | |
| 585 | - @ name= query parameter is not yet implemented. | |
| 586 | - @ </span> | |
| 587 | + int fnid = db_int(0,"SELECT fnid FROM filename WHERE name=%Q",zFName); | |
| 588 | + if( fnid<=0 ) fossil_fatal("no such file: \"%s\"", zFName); | |
| 589 | + db_prepare(&q, | |
| 590 | + "SELECT" | |
| 591 | + /* 0 */ " datetime(event.mtime,toLocal())," | |
| 592 | + /* 1 */ " (SELECT uuid FROM blob WHERE rid=mlink.mid)," | |
| 593 | + /* 2 */ " (SELECT uuid FROM blob WHERE rid=mlink.pmid)," | |
| 594 | + /* 3 */ " isaux," | |
| 595 | + /* 4 */ " (SELECT uuid FROM blob WHERE rid=mlink.fid)," | |
| 596 | + /* 5 */ " (SELECT uuid FROM blob WHERE rid=mlink.pid)," | |
| 597 | + /* 6 */ " mperm," | |
| 598 | + /* 7 */ " (SELECT name FROM filename WHERE fnid=mlink.pfnid)" | |
| 599 | + " FROM mlink, event" | |
| 600 | + " WHERE mlink.fnid=%d" | |
| 601 | + " AND event.objid=mlink.mid" | |
| 602 | + " ORDER BY 1 DESC", | |
| 603 | + fnid | |
| 604 | + ); | |
| 605 | + @ <h1>MLINK table for file | |
| 606 | + @ <a href='%R/finfo?name=%t(zFName)'>%h(zFName)</a></h1> | |
| 607 | + @ <div class='brlist'> | |
| 608 | + @ <table id='mlinktable'> | |
| 609 | + @ <thead><tr> | |
| 610 | + @ <th>Date</th> | |
| 611 | + @ <th>Check-in</th> | |
| 612 | + @ <th>Parent Check-in</th> | |
| 613 | + @ <th>Merge?</th> | |
| 614 | + @ <th>New</th> | |
| 615 | + @ <th>Old</th> | |
| 616 | + @ <th>Exe Bit?</th> | |
| 617 | + @ <th>Prior Name</th> | |
| 618 | + @ </tr></thead> | |
| 619 | + @ <tbody> | |
| 620 | + while( db_step(&q)==SQLITE_ROW ){ | |
| 621 | + const char *zDate = db_column_text(&q,0); | |
| 622 | + const char *zCkin = db_column_text(&q,1); | |
| 623 | + const char *zParent = db_column_text(&q,2); | |
| 624 | + int isMerge = db_column_int(&q,3); | |
| 625 | + const char *zFid = db_column_text(&q,4); | |
| 626 | + const char *zPid = db_column_text(&q,5); | |
| 627 | + int isExe = db_column_int(&q,6); | |
| 628 | + const char *zPrior = db_column_text(&q,7); | |
| 629 | + @ <tr> | |
| 630 | + @ <td><a href='%R/timeline?c=%!S(zCkin)'>%s(zDate)</a></td> | |
| 631 | + @ <td><a href='%R/info/%!S(zCkin)'>%S(zCkin)</a></td> | |
| 632 | + if( zParent ){ | |
| 633 | + @ <td><a href='%R/info/%!S(zPid)'>%S(zParent)</a></td> | |
| 634 | + }else{ | |
| 635 | + @ <td><i>(New)</i></td> | |
| 636 | + } | |
| 637 | + @ <td align='center'>%s(isMerge?"✓":"")</td> | |
| 638 | + if( zFid ){ | |
| 639 | + @ <td><a href='%R/info/%!S(zFid)'>%S(zFid)</a></td> | |
| 640 | + }else{ | |
| 641 | + @ <td><i>(Deleted)</i></td> | |
| 642 | + } | |
| 643 | + if( zPid ){ | |
| 644 | + @ <td><a href='%R/info/%!S(zPid)'>%S(zPid)</a> | |
| 645 | + }else{ | |
| 646 | + @ <td><i>(New)</i></td> | |
| 647 | + } | |
| 648 | + @ <td align='center'>%s(isExe?"✓":"")</td> | |
| 649 | + if( zPrior ){ | |
| 650 | + @ <td><a href='%R/finfo?name=%t(zPrior)'>%h(zPrior)</a></td> | |
| 651 | + }else{ | |
| 652 | + @ <td></td> | |
| 653 | + } | |
| 654 | + @ </tr> | |
| 655 | + } | |
| 656 | + db_finalize(&q); | |
| 657 | + @ </tbody> | |
| 658 | + @ </table> | |
| 659 | + @ </div> | |
| 660 | + output_table_sorting_javascript("mlinktable","tttxtttt",1); | |
| 587 | 661 | }else{ |
| 588 | 662 | int mid = name_to_rid_www("ci"); |
| 589 | 663 | db_prepare(&q, |
| 590 | 664 | "SELECT" |
| 591 | 665 | /* 0 */ " (SELECT name FROM filename WHERE fnid=mlink.fnid)," |
| 592 | 666 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -325,10 +325,13 @@ | |
| 325 | if( fnid==0 ){ |
| 326 | @ No such file: %h(zFilename) |
| 327 | style_footer(); |
| 328 | return; |
| 329 | } |
| 330 | if( baseCheckin ){ |
| 331 | compute_direct_ancestors(baseCheckin); |
| 332 | } |
| 333 | url_add_parameter(&url, "name", zFilename); |
| 334 | blob_zero(&sql); |
| @@ -579,13 +582,84 @@ | |
| 579 | if( zFName==0 && zCI==0 ){ |
| 580 | @ <span class='generalError'> |
| 581 | @ Requires either a name= or ci= query parameter |
| 582 | @ </span> |
| 583 | }else if( zFName ){ |
| 584 | @ <span class='generalError'> |
| 585 | @ name= query parameter is not yet implemented. |
| 586 | @ </span> |
| 587 | }else{ |
| 588 | int mid = name_to_rid_www("ci"); |
| 589 | db_prepare(&q, |
| 590 | "SELECT" |
| 591 | /* 0 */ " (SELECT name FROM filename WHERE fnid=mlink.fnid)," |
| 592 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -325,10 +325,13 @@ | |
| 325 | if( fnid==0 ){ |
| 326 | @ No such file: %h(zFilename) |
| 327 | style_footer(); |
| 328 | return; |
| 329 | } |
| 330 | if( g.perm.Admin ){ |
| 331 | style_submenu_element("MLink Table", "mtab", "%R/mlink?name=%t", zFilename); |
| 332 | } |
| 333 | if( baseCheckin ){ |
| 334 | compute_direct_ancestors(baseCheckin); |
| 335 | } |
| 336 | url_add_parameter(&url, "name", zFilename); |
| 337 | blob_zero(&sql); |
| @@ -579,13 +582,84 @@ | |
| 582 | if( zFName==0 && zCI==0 ){ |
| 583 | @ <span class='generalError'> |
| 584 | @ Requires either a name= or ci= query parameter |
| 585 | @ </span> |
| 586 | }else if( zFName ){ |
| 587 | int fnid = db_int(0,"SELECT fnid FROM filename WHERE name=%Q",zFName); |
| 588 | if( fnid<=0 ) fossil_fatal("no such file: \"%s\"", zFName); |
| 589 | db_prepare(&q, |
| 590 | "SELECT" |
| 591 | /* 0 */ " datetime(event.mtime,toLocal())," |
| 592 | /* 1 */ " (SELECT uuid FROM blob WHERE rid=mlink.mid)," |
| 593 | /* 2 */ " (SELECT uuid FROM blob WHERE rid=mlink.pmid)," |
| 594 | /* 3 */ " isaux," |
| 595 | /* 4 */ " (SELECT uuid FROM blob WHERE rid=mlink.fid)," |
| 596 | /* 5 */ " (SELECT uuid FROM blob WHERE rid=mlink.pid)," |
| 597 | /* 6 */ " mperm," |
| 598 | /* 7 */ " (SELECT name FROM filename WHERE fnid=mlink.pfnid)" |
| 599 | " FROM mlink, event" |
| 600 | " WHERE mlink.fnid=%d" |
| 601 | " AND event.objid=mlink.mid" |
| 602 | " ORDER BY 1 DESC", |
| 603 | fnid |
| 604 | ); |
| 605 | @ <h1>MLINK table for file |
| 606 | @ <a href='%R/finfo?name=%t(zFName)'>%h(zFName)</a></h1> |
| 607 | @ <div class='brlist'> |
| 608 | @ <table id='mlinktable'> |
| 609 | @ <thead><tr> |
| 610 | @ <th>Date</th> |
| 611 | @ <th>Check-in</th> |
| 612 | @ <th>Parent Check-in</th> |
| 613 | @ <th>Merge?</th> |
| 614 | @ <th>New</th> |
| 615 | @ <th>Old</th> |
| 616 | @ <th>Exe Bit?</th> |
| 617 | @ <th>Prior Name</th> |
| 618 | @ </tr></thead> |
| 619 | @ <tbody> |
| 620 | while( db_step(&q)==SQLITE_ROW ){ |
| 621 | const char *zDate = db_column_text(&q,0); |
| 622 | const char *zCkin = db_column_text(&q,1); |
| 623 | const char *zParent = db_column_text(&q,2); |
| 624 | int isMerge = db_column_int(&q,3); |
| 625 | const char *zFid = db_column_text(&q,4); |
| 626 | const char *zPid = db_column_text(&q,5); |
| 627 | int isExe = db_column_int(&q,6); |
| 628 | const char *zPrior = db_column_text(&q,7); |
| 629 | @ <tr> |
| 630 | @ <td><a href='%R/timeline?c=%!S(zCkin)'>%s(zDate)</a></td> |
| 631 | @ <td><a href='%R/info/%!S(zCkin)'>%S(zCkin)</a></td> |
| 632 | if( zParent ){ |
| 633 | @ <td><a href='%R/info/%!S(zPid)'>%S(zParent)</a></td> |
| 634 | }else{ |
| 635 | @ <td><i>(New)</i></td> |
| 636 | } |
| 637 | @ <td align='center'>%s(isMerge?"✓":"")</td> |
| 638 | if( zFid ){ |
| 639 | @ <td><a href='%R/info/%!S(zFid)'>%S(zFid)</a></td> |
| 640 | }else{ |
| 641 | @ <td><i>(Deleted)</i></td> |
| 642 | } |
| 643 | if( zPid ){ |
| 644 | @ <td><a href='%R/info/%!S(zPid)'>%S(zPid)</a> |
| 645 | }else{ |
| 646 | @ <td><i>(New)</i></td> |
| 647 | } |
| 648 | @ <td align='center'>%s(isExe?"✓":"")</td> |
| 649 | if( zPrior ){ |
| 650 | @ <td><a href='%R/finfo?name=%t(zPrior)'>%h(zPrior)</a></td> |
| 651 | }else{ |
| 652 | @ <td></td> |
| 653 | } |
| 654 | @ </tr> |
| 655 | } |
| 656 | db_finalize(&q); |
| 657 | @ </tbody> |
| 658 | @ </table> |
| 659 | @ </div> |
| 660 | output_table_sorting_javascript("mlinktable","tttxtttt",1); |
| 661 | }else{ |
| 662 | int mid = name_to_rid_www("ci"); |
| 663 | db_prepare(&q, |
| 664 | "SELECT" |
| 665 | /* 0 */ " (SELECT name FROM filename WHERE fnid=mlink.fnid)," |
| 666 |