Fossil SCM

Include file modification times on the "All" /tree view of files.

drh 2014-12-17 00:54 trunk
Commit 9240905c978e1ce9161a8d3e085102c3be100b3e
1 file changed +32 -23
+32 -23
--- src/browse.c
+++ src/browse.c
@@ -591,12 +591,14 @@
591591
zNow = db_text("", "SELECT datetime(mtime,'localtime')"
592592
" FROM event WHERE objid=%d", rid);
593593
}else{
594594
zCI = 0;
595595
}
596
- }else{
597
- useMtime = 0;
596
+ }
597
+ if( zCI==0 ){
598
+ rNow = db_double(0.0, "SELECT max(mtime) FROM event");
599
+ zNow = db_text("", "SELECT datetime(max(mtime),'localtime') FROM event");
598600
}
599601
600602
/* Compute the title of the page */
601603
blob_zero(&dirname);
602604
if( zD ){
@@ -613,25 +615,25 @@
613615
}
614616
if( !showDirOnly ){
615617
style_submenu_element("Flat-View", "Flat-View", "%s",
616618
url_render(&sURI, "type", "flat", 0, 0));
617619
}
620
+ if( useMtime ){
621
+ style_submenu_element("Sort By Filename","Sort By Filename", "%s",
622
+ url_render(&sURI, 0, 0, 0, 0));
623
+ url_add_parameter(&sURI, "mtime", "1");
624
+ }else{
625
+ style_submenu_element("Sort By Time","Sort By Time", "%s",
626
+ url_render(&sURI, "mtime", "1", 0, 0));
627
+ }
618628
if( zCI ){
619629
style_submenu_element("All", "All", "%s",
620630
url_render(&sURI, "ci", 0, 0, 0));
621631
if( nD==0 && !showDirOnly ){
622632
style_submenu_element("File Ages", "File Ages", "%R/fileage?name=%s",
623633
zUuid);
624634
}
625
- if( useMtime ){
626
- style_submenu_element("Sort By Filename","Sort By Filename", "%s",
627
- url_render(&sURI, 0, 0, 0, 0));
628
- url_add_parameter(&sURI, "mtime", "1");
629
- }else{
630
- style_submenu_element("Sort By Time","Sort By Time", "%s",
631
- url_render(&sURI, "mtime", "1", 0, 0));
632
- }
633635
}
634636
if( linkTrunk ){
635637
style_submenu_element("Trunk", "Trunk", "%s",
636638
url_render(&sURI, "ci", "trunk", 0, 0));
637639
}
@@ -661,18 +663,26 @@
661663
nFile++;
662664
}
663665
db_finalize(&q);
664666
}else{
665667
Stmt q;
666
- db_prepare(&q, "SELECT name FROM filename ORDER BY name COLLATE nocase");
668
+ db_prepare(&q,
669
+ "SELECT filename.name, blob.uuid, max(event.mtime)\n"
670
+ " FROM filename, mlink, blob, event\n"
671
+ " WHERE mlink.fnid=filename.fnid\n"
672
+ " AND event.objid=mlink.mid\n"
673
+ " AND blob.rid=mlink.fid\n"
674
+ " GROUP BY 1 ORDER BY 1 COLLATE nocase");
667675
while( db_step(&q)==SQLITE_ROW ){
668
- const char *z = db_column_text(&q, 0);
669
- if( nD>0 && (fossil_strncmp(z, zD, nD-1)!=0 || z[nD-1]!='/') ){
676
+ const char *zName = db_column_text(&q, 0);
677
+ const char *zUuid = db_column_text(&q,1);
678
+ double mtime = db_column_double(&q,2);
679
+ if( nD>0 && (fossil_strncmp(zName, zD, nD-1)!=0 || zName[nD-1]!='/') ){
670680
continue;
671681
}
672
- if( pRE && re_match(pRE, (const u8*)z, -1)==0 ) continue;
673
- tree_add_node(&sTree, z, 0, 0.0);
682
+ if( pRE && re_match(pRE, (const u8*)zName, -1)==0 ) continue;
683
+ tree_add_node(&sTree, zName, zUuid, mtime);
674684
nFile++;
675685
}
676686
db_finalize(&q);
677687
}
678688
@@ -693,19 +703,18 @@
693703
@ <h2>%s(zObjType) from
694704
if( sqlite3_strnicmp(zCI, zUuid, (int)strlen(zCI))!=0 ){
695705
@ "%h(zCI)"
696706
}
697707
@ [%z(href("vinfo?name=%s",zUuid))%S(zUuid)</a>] %s(blob_str(&dirname))
698
- if( useMtime ){
699
- @ sorted by modification time</h2>
700
- }else{
701
- @ sorted by filename</h2>
702
- }
703708
}else{
704709
int n = db_int(0, "SELECT count(*) FROM plink");
705
- @ <h2>%s(zObjType) from all %d(n) check-ins
706
- @ %s(blob_str(&dirname))</h2>
710
+ @ <h2>%s(zObjType) from all %d(n) check-ins %s(blob_str(&dirname))
711
+ }
712
+ if( useMtime ){
713
+ @ sorted by modification time</h2>
714
+ }else{
715
+ @ sorted by filename</h2>
707716
}
708717
709718
710719
/* Generate tree of lists.
711720
**
@@ -729,11 +738,11 @@
729738
if( zNow ){
730739
@ <div class="filetreeage">%s(zNow)</div>
731740
}
732741
@ </div>
733742
@ <ul>
734
- if( zCI && useMtime ){
743
+ if( useMtime ){
735744
p = sortTreeByMtime(sTree.pFirst);
736745
memset(&sTree, 0, sizeof(sTree));
737746
relinkTree(&sTree, p);
738747
}
739748
for(p=sTree.pFirst, nDir=0; p; p=p->pNext){
740749
--- src/browse.c
+++ src/browse.c
@@ -591,12 +591,14 @@
591 zNow = db_text("", "SELECT datetime(mtime,'localtime')"
592 " FROM event WHERE objid=%d", rid);
593 }else{
594 zCI = 0;
595 }
596 }else{
597 useMtime = 0;
 
 
598 }
599
600 /* Compute the title of the page */
601 blob_zero(&dirname);
602 if( zD ){
@@ -613,25 +615,25 @@
613 }
614 if( !showDirOnly ){
615 style_submenu_element("Flat-View", "Flat-View", "%s",
616 url_render(&sURI, "type", "flat", 0, 0));
617 }
 
 
 
 
 
 
 
 
618 if( zCI ){
619 style_submenu_element("All", "All", "%s",
620 url_render(&sURI, "ci", 0, 0, 0));
621 if( nD==0 && !showDirOnly ){
622 style_submenu_element("File Ages", "File Ages", "%R/fileage?name=%s",
623 zUuid);
624 }
625 if( useMtime ){
626 style_submenu_element("Sort By Filename","Sort By Filename", "%s",
627 url_render(&sURI, 0, 0, 0, 0));
628 url_add_parameter(&sURI, "mtime", "1");
629 }else{
630 style_submenu_element("Sort By Time","Sort By Time", "%s",
631 url_render(&sURI, "mtime", "1", 0, 0));
632 }
633 }
634 if( linkTrunk ){
635 style_submenu_element("Trunk", "Trunk", "%s",
636 url_render(&sURI, "ci", "trunk", 0, 0));
637 }
@@ -661,18 +663,26 @@
661 nFile++;
662 }
663 db_finalize(&q);
664 }else{
665 Stmt q;
666 db_prepare(&q, "SELECT name FROM filename ORDER BY name COLLATE nocase");
 
 
 
 
 
 
667 while( db_step(&q)==SQLITE_ROW ){
668 const char *z = db_column_text(&q, 0);
669 if( nD>0 && (fossil_strncmp(z, zD, nD-1)!=0 || z[nD-1]!='/') ){
 
 
670 continue;
671 }
672 if( pRE && re_match(pRE, (const u8*)z, -1)==0 ) continue;
673 tree_add_node(&sTree, z, 0, 0.0);
674 nFile++;
675 }
676 db_finalize(&q);
677 }
678
@@ -693,19 +703,18 @@
693 @ <h2>%s(zObjType) from
694 if( sqlite3_strnicmp(zCI, zUuid, (int)strlen(zCI))!=0 ){
695 @ "%h(zCI)"
696 }
697 @ [%z(href("vinfo?name=%s",zUuid))%S(zUuid)</a>] %s(blob_str(&dirname))
698 if( useMtime ){
699 @ sorted by modification time</h2>
700 }else{
701 @ sorted by filename</h2>
702 }
703 }else{
704 int n = db_int(0, "SELECT count(*) FROM plink");
705 @ <h2>%s(zObjType) from all %d(n) check-ins
706 @ %s(blob_str(&dirname))</h2>
 
 
 
 
707 }
708
709
710 /* Generate tree of lists.
711 **
@@ -729,11 +738,11 @@
729 if( zNow ){
730 @ <div class="filetreeage">%s(zNow)</div>
731 }
732 @ </div>
733 @ <ul>
734 if( zCI && useMtime ){
735 p = sortTreeByMtime(sTree.pFirst);
736 memset(&sTree, 0, sizeof(sTree));
737 relinkTree(&sTree, p);
738 }
739 for(p=sTree.pFirst, nDir=0; p; p=p->pNext){
740
--- src/browse.c
+++ src/browse.c
@@ -591,12 +591,14 @@
591 zNow = db_text("", "SELECT datetime(mtime,'localtime')"
592 " FROM event WHERE objid=%d", rid);
593 }else{
594 zCI = 0;
595 }
596 }
597 if( zCI==0 ){
598 rNow = db_double(0.0, "SELECT max(mtime) FROM event");
599 zNow = db_text("", "SELECT datetime(max(mtime),'localtime') FROM event");
600 }
601
602 /* Compute the title of the page */
603 blob_zero(&dirname);
604 if( zD ){
@@ -613,25 +615,25 @@
615 }
616 if( !showDirOnly ){
617 style_submenu_element("Flat-View", "Flat-View", "%s",
618 url_render(&sURI, "type", "flat", 0, 0));
619 }
620 if( useMtime ){
621 style_submenu_element("Sort By Filename","Sort By Filename", "%s",
622 url_render(&sURI, 0, 0, 0, 0));
623 url_add_parameter(&sURI, "mtime", "1");
624 }else{
625 style_submenu_element("Sort By Time","Sort By Time", "%s",
626 url_render(&sURI, "mtime", "1", 0, 0));
627 }
628 if( zCI ){
629 style_submenu_element("All", "All", "%s",
630 url_render(&sURI, "ci", 0, 0, 0));
631 if( nD==0 && !showDirOnly ){
632 style_submenu_element("File Ages", "File Ages", "%R/fileage?name=%s",
633 zUuid);
634 }
 
 
 
 
 
 
 
 
635 }
636 if( linkTrunk ){
637 style_submenu_element("Trunk", "Trunk", "%s",
638 url_render(&sURI, "ci", "trunk", 0, 0));
639 }
@@ -661,18 +663,26 @@
663 nFile++;
664 }
665 db_finalize(&q);
666 }else{
667 Stmt q;
668 db_prepare(&q,
669 "SELECT filename.name, blob.uuid, max(event.mtime)\n"
670 " FROM filename, mlink, blob, event\n"
671 " WHERE mlink.fnid=filename.fnid\n"
672 " AND event.objid=mlink.mid\n"
673 " AND blob.rid=mlink.fid\n"
674 " GROUP BY 1 ORDER BY 1 COLLATE nocase");
675 while( db_step(&q)==SQLITE_ROW ){
676 const char *zName = db_column_text(&q, 0);
677 const char *zUuid = db_column_text(&q,1);
678 double mtime = db_column_double(&q,2);
679 if( nD>0 && (fossil_strncmp(zName, zD, nD-1)!=0 || zName[nD-1]!='/') ){
680 continue;
681 }
682 if( pRE && re_match(pRE, (const u8*)zName, -1)==0 ) continue;
683 tree_add_node(&sTree, zName, zUuid, mtime);
684 nFile++;
685 }
686 db_finalize(&q);
687 }
688
@@ -693,19 +703,18 @@
703 @ <h2>%s(zObjType) from
704 if( sqlite3_strnicmp(zCI, zUuid, (int)strlen(zCI))!=0 ){
705 @ "%h(zCI)"
706 }
707 @ [%z(href("vinfo?name=%s",zUuid))%S(zUuid)</a>] %s(blob_str(&dirname))
 
 
 
 
 
708 }else{
709 int n = db_int(0, "SELECT count(*) FROM plink");
710 @ <h2>%s(zObjType) from all %d(n) check-ins %s(blob_str(&dirname))
711 }
712 if( useMtime ){
713 @ sorted by modification time</h2>
714 }else{
715 @ sorted by filename</h2>
716 }
717
718
719 /* Generate tree of lists.
720 **
@@ -729,11 +738,11 @@
738 if( zNow ){
739 @ <div class="filetreeage">%s(zNow)</div>
740 }
741 @ </div>
742 @ <ul>
743 if( useMtime ){
744 p = sortTreeByMtime(sTree.pFirst);
745 memset(&sTree, 0, sizeof(sTree));
746 relinkTree(&sTree, p);
747 }
748 for(p=sTree.pFirst, nDir=0; p; p=p->pNext){
749

Keyboard Shortcuts

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