Fossil SCM

Enhance the /mlink page to handle the name= query parameter.

drh 2015-12-24 20:25 trunk
Commit a1721621f6828f42e44aeef56ea60d577b07a4e7
1 file changed +77 -3
+77 -3
--- src/finfo.c
+++ src/finfo.c
@@ -325,10 +325,13 @@
325325
if( fnid==0 ){
326326
@ No such file: %h(zFilename)
327327
style_footer();
328328
return;
329329
}
330
+ if( g.perm.Admin ){
331
+ style_submenu_element("MLink Table", "mtab", "%R/mlink?name=%t", zFilename);
332
+ }
330333
if( baseCheckin ){
331334
compute_direct_ancestors(baseCheckin);
332335
}
333336
url_add_parameter(&url, "name", zFilename);
334337
blob_zero(&sql);
@@ -579,13 +582,84 @@
579582
if( zFName==0 && zCI==0 ){
580583
@ <span class='generalError'>
581584
@ Requires either a name= or ci= query parameter
582585
@ </span>
583586
}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?"&#x2713;":"")</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?"&#x2713;":"")</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);
587661
}else{
588662
int mid = name_to_rid_www("ci");
589663
db_prepare(&q,
590664
"SELECT"
591665
/* 0 */ " (SELECT name FROM filename WHERE fnid=mlink.fnid),"
592666
--- 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?"&#x2713;":"")</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?"&#x2713;":"")</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

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button