Fossil SCM

Improvements to artifact descriptions merged into trunk.

drh 2011-08-31 14:34 trunk merge
Commit 49402fc72296cc555f0467a42808b327a83f0ce5
1 file changed +40 -27
+40 -27
--- src/info.c
+++ src/info.c
@@ -776,53 +776,74 @@
776776
Stmt q;
777777
int cnt = 0;
778778
int nWiki = 0;
779779
char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
780780
781
+ char *prevName = 0;
782
+
781783
db_prepare(&q,
782784
"SELECT filename.name, datetime(event.mtime),"
783785
" coalesce(event.ecomment,event.comment),"
784786
" coalesce(event.euser,event.user),"
785
- " b.uuid"
787
+ " b.uuid,"
788
+ " coalesce((SELECT value FROM tagxref"
789
+ " WHERE tagid=%d AND tagtype>0 AND rid=mlink.mid),'trunk')"
786790
" FROM mlink, filename, event, blob a, blob b"
787791
" WHERE filename.fnid=mlink.fnid"
788792
" AND event.objid=mlink.mid"
789793
" AND a.rid=mlink.fid"
790794
" AND b.rid=mlink.mid"
791
- " AND mlink.fid=%d",
792
- rid
795
+ " AND mlink.fid=%d"
796
+ " ORDER BY filename.name, event.mtime",
797
+ TAG_BRANCH, rid
793798
);
799
+ @ <ul>
794800
while( db_step(&q)==SQLITE_ROW ){
795801
const char *zName = db_column_text(&q, 0);
796802
const char *zDate = db_column_text(&q, 1);
797803
const char *zCom = db_column_text(&q, 2);
798804
const char *zUser = db_column_text(&q, 3);
799805
const char *zVers = db_column_text(&q, 4);
800
- if( cnt>0 ){
801
- @ Also file
802
- }else{
803
- @ File
804
- }
805
- if( g.okHistory ){
806
- @ <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>
807
- }else{
808
- @ %h(zName)
809
- }
810
- @ part of check-in
806
+ const char *zBr = db_column_text(&q, 5);
807
+ if( !prevName || fossil_strcmp(zName, prevName) ) {
808
+ if( prevName ) {
809
+ @ </ul>
810
+ }
811
+ @ <li>File
812
+ if( g.okHistory ){
813
+ @ <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>
814
+ }else{
815
+ @ %h(zName)
816
+ }
817
+ @ <ul>
818
+ prevName = fossil_strdup(zName);
819
+ }
820
+ @ <li>
821
+ hyperlink_to_date(zDate,"");
822
+ @ - part of checkin
811823
hyperlink_to_uuid(zVers);
812
- @ - %w(zCom) by
813
- hyperlink_to_user(zUser,zDate," on");
814
- hyperlink_to_date(zDate,".");
824
+ if( zBr && zBr[0] ){
825
+ if( g.okHistory ){
826
+ @ on branch <a href="%s(g.zTop)/timeline?r=%T(zBr)">%h(zBr)</a>
827
+ }else{
828
+ @ on branch %h(zBr)
829
+ }
830
+ }
831
+ @ - %w(zCom) (user:
832
+ hyperlink_to_user(zUser,zDate,"");
833
+ @ )
815834
if( g.okHistory ){
816835
@ <a href="%s(g.zTop)/annotate?checkin=%S(zVers)&filename=%T(zName)">
817836
@ [annotate]</a>
818837
}
819838
cnt++;
820839
if( pDownloadName && blob_size(pDownloadName)==0 ){
821840
blob_append(pDownloadName, zName, -1);
822841
}
823842
}
843
+ @ </ul></ul>
844
+ free(prevName);
824845
db_finalize(&q);
825846
db_prepare(&q,
826847
"SELECT substr(tagname, 6, 10000), datetime(event.mtime),"
827848
" coalesce(event.euser, event.user)"
828849
" FROM tagxref, tag, event"
@@ -988,17 +1009,13 @@
9881009
style_header("Diff");
9891010
style_submenu_element("Patch", "Patch", "%s/fdiff?v1=%T&v2=%T&patch",
9901011
g.zTop, P("v1"), P("v2"));
9911012
@ <h2>Differences From
9921013
@ Artifact <a href="%s(g.zTop)/artifact/%S(zV1)">[%S(zV1)]</a>:</h2>
993
- @ <blockquote><p>
994
- object_description(v1, 1, 0);
995
- @ </p></blockquote>
1014
+ object_description(v1, 0, 0);
9961015
@ <h2>To Artifact <a href="%s(g.zTop)/artifact/%S(zV2)">[%S(zV2)]</a>:</h2>
997
- @ <blockquote><p>
998
- object_description(v2, 1, 0);
999
- @ </p></blockquote>
1016
+ object_description(v2, 0, 0);
10001017
@ <hr />
10011018
@ <blockquote><pre>
10021019
@ %h(blob_str(&diff))
10031020
@ </pre></blockquote>
10041021
blob_reset(&diff);
@@ -1107,16 +1124,14 @@
11071124
}
11081125
}
11091126
style_header("Hex Artifact Content");
11101127
zUuid = db_text("?","SELECT uuid FROM blob WHERE rid=%d", rid);
11111128
@ <h2>Artifact %s(zUuid):</h2>
1112
- @ <blockquote><p>
11131129
blob_zero(&downloadName);
11141130
object_description(rid, 0, &downloadName);
11151131
style_submenu_element("Download", "Download",
11161132
"%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
1117
- @ </p></blockquote>
11181133
@ <hr />
11191134
content_get(rid, &content);
11201135
@ <blockquote><pre>
11211136
hexdump(&content);
11221137
@ </pre></blockquote>
@@ -1256,11 +1271,10 @@
12561271
}
12571272
}
12581273
style_header("Artifact Content");
12591274
zUuid = db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid);
12601275
@ <h2>Artifact %s(zUuid)</h2>
1261
- @ <blockquote><p>
12621276
blob_zero(&downloadName);
12631277
object_description(rid, 0, &downloadName);
12641278
style_submenu_element("Download", "Download",
12651279
"%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
12661280
zMime = mimetype_from_name(blob_str(&downloadName));
@@ -1283,11 +1297,10 @@
12831297
style_submenu_element("Text", "Text",
12841298
"%s/artifact/%s?txt=1", g.zTop, zUuid);
12851299
}
12861300
}
12871301
}
1288
- @ </p></blockquote>
12891302
@ <hr />
12901303
content_get(rid, &content);
12911304
if( renderAsWiki ){
12921305
wiki_convert(&content, 0, 0);
12931306
}else if( renderAsHtml ){
12941307
--- src/info.c
+++ src/info.c
@@ -776,53 +776,74 @@
776 Stmt q;
777 int cnt = 0;
778 int nWiki = 0;
779 char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
780
 
 
781 db_prepare(&q,
782 "SELECT filename.name, datetime(event.mtime),"
783 " coalesce(event.ecomment,event.comment),"
784 " coalesce(event.euser,event.user),"
785 " b.uuid"
 
 
786 " FROM mlink, filename, event, blob a, blob b"
787 " WHERE filename.fnid=mlink.fnid"
788 " AND event.objid=mlink.mid"
789 " AND a.rid=mlink.fid"
790 " AND b.rid=mlink.mid"
791 " AND mlink.fid=%d",
792 rid
 
793 );
 
794 while( db_step(&q)==SQLITE_ROW ){
795 const char *zName = db_column_text(&q, 0);
796 const char *zDate = db_column_text(&q, 1);
797 const char *zCom = db_column_text(&q, 2);
798 const char *zUser = db_column_text(&q, 3);
799 const char *zVers = db_column_text(&q, 4);
800 if( cnt>0 ){
801 @ Also file
802 }else{
803 @ File
804 }
805 if( g.okHistory ){
806 @ <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>
807 }else{
808 @ %h(zName)
809 }
810 @ part of check-in
 
 
 
 
 
 
811 hyperlink_to_uuid(zVers);
812 @ - %w(zCom) by
813 hyperlink_to_user(zUser,zDate," on");
814 hyperlink_to_date(zDate,".");
 
 
 
 
 
 
 
815 if( g.okHistory ){
816 @ <a href="%s(g.zTop)/annotate?checkin=%S(zVers)&filename=%T(zName)">
817 @ [annotate]</a>
818 }
819 cnt++;
820 if( pDownloadName && blob_size(pDownloadName)==0 ){
821 blob_append(pDownloadName, zName, -1);
822 }
823 }
 
 
824 db_finalize(&q);
825 db_prepare(&q,
826 "SELECT substr(tagname, 6, 10000), datetime(event.mtime),"
827 " coalesce(event.euser, event.user)"
828 " FROM tagxref, tag, event"
@@ -988,17 +1009,13 @@
988 style_header("Diff");
989 style_submenu_element("Patch", "Patch", "%s/fdiff?v1=%T&v2=%T&patch",
990 g.zTop, P("v1"), P("v2"));
991 @ <h2>Differences From
992 @ Artifact <a href="%s(g.zTop)/artifact/%S(zV1)">[%S(zV1)]</a>:</h2>
993 @ <blockquote><p>
994 object_description(v1, 1, 0);
995 @ </p></blockquote>
996 @ <h2>To Artifact <a href="%s(g.zTop)/artifact/%S(zV2)">[%S(zV2)]</a>:</h2>
997 @ <blockquote><p>
998 object_description(v2, 1, 0);
999 @ </p></blockquote>
1000 @ <hr />
1001 @ <blockquote><pre>
1002 @ %h(blob_str(&diff))
1003 @ </pre></blockquote>
1004 blob_reset(&diff);
@@ -1107,16 +1124,14 @@
1107 }
1108 }
1109 style_header("Hex Artifact Content");
1110 zUuid = db_text("?","SELECT uuid FROM blob WHERE rid=%d", rid);
1111 @ <h2>Artifact %s(zUuid):</h2>
1112 @ <blockquote><p>
1113 blob_zero(&downloadName);
1114 object_description(rid, 0, &downloadName);
1115 style_submenu_element("Download", "Download",
1116 "%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
1117 @ </p></blockquote>
1118 @ <hr />
1119 content_get(rid, &content);
1120 @ <blockquote><pre>
1121 hexdump(&content);
1122 @ </pre></blockquote>
@@ -1256,11 +1271,10 @@
1256 }
1257 }
1258 style_header("Artifact Content");
1259 zUuid = db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid);
1260 @ <h2>Artifact %s(zUuid)</h2>
1261 @ <blockquote><p>
1262 blob_zero(&downloadName);
1263 object_description(rid, 0, &downloadName);
1264 style_submenu_element("Download", "Download",
1265 "%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
1266 zMime = mimetype_from_name(blob_str(&downloadName));
@@ -1283,11 +1297,10 @@
1283 style_submenu_element("Text", "Text",
1284 "%s/artifact/%s?txt=1", g.zTop, zUuid);
1285 }
1286 }
1287 }
1288 @ </p></blockquote>
1289 @ <hr />
1290 content_get(rid, &content);
1291 if( renderAsWiki ){
1292 wiki_convert(&content, 0, 0);
1293 }else if( renderAsHtml ){
1294
--- src/info.c
+++ src/info.c
@@ -776,53 +776,74 @@
776 Stmt q;
777 int cnt = 0;
778 int nWiki = 0;
779 char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
780
781 char *prevName = 0;
782
783 db_prepare(&q,
784 "SELECT filename.name, datetime(event.mtime),"
785 " coalesce(event.ecomment,event.comment),"
786 " coalesce(event.euser,event.user),"
787 " b.uuid,"
788 " coalesce((SELECT value FROM tagxref"
789 " WHERE tagid=%d AND tagtype>0 AND rid=mlink.mid),'trunk')"
790 " FROM mlink, filename, event, blob a, blob b"
791 " WHERE filename.fnid=mlink.fnid"
792 " AND event.objid=mlink.mid"
793 " AND a.rid=mlink.fid"
794 " AND b.rid=mlink.mid"
795 " AND mlink.fid=%d"
796 " ORDER BY filename.name, event.mtime",
797 TAG_BRANCH, rid
798 );
799 @ <ul>
800 while( db_step(&q)==SQLITE_ROW ){
801 const char *zName = db_column_text(&q, 0);
802 const char *zDate = db_column_text(&q, 1);
803 const char *zCom = db_column_text(&q, 2);
804 const char *zUser = db_column_text(&q, 3);
805 const char *zVers = db_column_text(&q, 4);
806 const char *zBr = db_column_text(&q, 5);
807 if( !prevName || fossil_strcmp(zName, prevName) ) {
808 if( prevName ) {
809 @ </ul>
810 }
811 @ <li>File
812 if( g.okHistory ){
813 @ <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>
814 }else{
815 @ %h(zName)
816 }
817 @ <ul>
818 prevName = fossil_strdup(zName);
819 }
820 @ <li>
821 hyperlink_to_date(zDate,"");
822 @ - part of checkin
823 hyperlink_to_uuid(zVers);
824 if( zBr && zBr[0] ){
825 if( g.okHistory ){
826 @ on branch <a href="%s(g.zTop)/timeline?r=%T(zBr)">%h(zBr)</a>
827 }else{
828 @ on branch %h(zBr)
829 }
830 }
831 @ - %w(zCom) (user:
832 hyperlink_to_user(zUser,zDate,"");
833 @ )
834 if( g.okHistory ){
835 @ <a href="%s(g.zTop)/annotate?checkin=%S(zVers)&filename=%T(zName)">
836 @ [annotate]</a>
837 }
838 cnt++;
839 if( pDownloadName && blob_size(pDownloadName)==0 ){
840 blob_append(pDownloadName, zName, -1);
841 }
842 }
843 @ </ul></ul>
844 free(prevName);
845 db_finalize(&q);
846 db_prepare(&q,
847 "SELECT substr(tagname, 6, 10000), datetime(event.mtime),"
848 " coalesce(event.euser, event.user)"
849 " FROM tagxref, tag, event"
@@ -988,17 +1009,13 @@
1009 style_header("Diff");
1010 style_submenu_element("Patch", "Patch", "%s/fdiff?v1=%T&v2=%T&patch",
1011 g.zTop, P("v1"), P("v2"));
1012 @ <h2>Differences From
1013 @ Artifact <a href="%s(g.zTop)/artifact/%S(zV1)">[%S(zV1)]</a>:</h2>
1014 object_description(v1, 0, 0);
 
 
1015 @ <h2>To Artifact <a href="%s(g.zTop)/artifact/%S(zV2)">[%S(zV2)]</a>:</h2>
1016 object_description(v2, 0, 0);
 
 
1017 @ <hr />
1018 @ <blockquote><pre>
1019 @ %h(blob_str(&diff))
1020 @ </pre></blockquote>
1021 blob_reset(&diff);
@@ -1107,16 +1124,14 @@
1124 }
1125 }
1126 style_header("Hex Artifact Content");
1127 zUuid = db_text("?","SELECT uuid FROM blob WHERE rid=%d", rid);
1128 @ <h2>Artifact %s(zUuid):</h2>
 
1129 blob_zero(&downloadName);
1130 object_description(rid, 0, &downloadName);
1131 style_submenu_element("Download", "Download",
1132 "%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
 
1133 @ <hr />
1134 content_get(rid, &content);
1135 @ <blockquote><pre>
1136 hexdump(&content);
1137 @ </pre></blockquote>
@@ -1256,11 +1271,10 @@
1271 }
1272 }
1273 style_header("Artifact Content");
1274 zUuid = db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid);
1275 @ <h2>Artifact %s(zUuid)</h2>
 
1276 blob_zero(&downloadName);
1277 object_description(rid, 0, &downloadName);
1278 style_submenu_element("Download", "Download",
1279 "%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
1280 zMime = mimetype_from_name(blob_str(&downloadName));
@@ -1283,11 +1297,10 @@
1297 style_submenu_element("Text", "Text",
1298 "%s/artifact/%s?txt=1", g.zTop, zUuid);
1299 }
1300 }
1301 }
 
1302 @ <hr />
1303 content_get(rid, &content);
1304 if( renderAsWiki ){
1305 wiki_convert(&content, 0, 0);
1306 }else if( renderAsHtml ){
1307

Keyboard Shortcuts

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