Fossil SCM

Merge improvements to artifact descriptions into symlinks branch. Also modify displaying of permissions: now web UI shows "File", "Executable file", or "Symbolic link" in file artifact description.

dmitry 2011-08-31 16:28 UTC symlinks merge
Commit 3115774ffe6e82d30f452eade3c6465c2e14b4ec
2 files changed +46 -32 +46 -32
+46 -32
--- src/info.c
+++ src/info.c
@@ -777,59 +777,81 @@
777777
Stmt q;
778778
int cnt = 0;
779779
int nWiki = 0;
780780
char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
781781
782
+ char *prevName = 0;
783
+
782784
db_prepare(&q,
783785
"SELECT filename.name, datetime(event.mtime),"
784786
" coalesce(event.ecomment,event.comment),"
785787
" coalesce(event.euser,event.user),"
786
- " b.uuid, mlink.mperm"
788
+ " b.uuid, mlink.mperm,"
789
+ " coalesce((SELECT value FROM tagxref"
790
+ " WHERE tagid=%d AND tagtype>0 AND rid=mlink.mid),'trunk')"
787791
" FROM mlink, filename, event, blob a, blob b"
788792
" WHERE filename.fnid=mlink.fnid"
789793
" AND event.objid=mlink.mid"
790794
" AND a.rid=mlink.fid"
791795
" AND b.rid=mlink.mid"
792
- " AND mlink.fid=%d",
793
- rid
796
+ " AND mlink.fid=%d"
797
+ " ORDER BY filename.name, event.mtime",
798
+ TAG_BRANCH, rid
794799
);
800
+ @ <ul>
795801
while( db_step(&q)==SQLITE_ROW ){
796802
const char *zName = db_column_text(&q, 0);
797803
const char *zDate = db_column_text(&q, 1);
798804
const char *zCom = db_column_text(&q, 2);
799805
const char *zUser = db_column_text(&q, 3);
800806
const char *zVers = db_column_text(&q, 4);
801807
int mPerm = db_column_int(&q, 5);
802
- if( cnt>0 ){
803
- @ Also file
804
- }else{
805
- @ File
806
- }
807
- if( g.okHistory ){
808
- @ <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>
809
- }else{
810
- @ %h(zName)
811
- }
812
- if( mPerm==PERM_LNK ){
813
- @ (symbolic link)
814
- }else if( mPerm==PERM_EXE ){
815
- @ (executable)
816
- }
817
- @ part of check-in
808
+ const char *zBr = db_column_text(&q, 6);
809
+ if( !prevName || fossil_strcmp(zName, prevName) ) {
810
+ if( prevName ) {
811
+ @ </ul>
812
+ }
813
+ if( mPerm==PERM_LNK ){
814
+ @ <li>Symbolic link
815
+ }else if( mPerm==PERM_EXE ){
816
+ @ <li>Executable file
817
+ }else{
818
+ @ <li>File
819
+ }
820
+ if( g.okHistory ){
821
+ @ <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>
822
+ }else{
823
+ @ %h(zName)
824
+ }
825
+ @ <ul>
826
+ prevName = fossil_strdup(zName);
827
+ }
828
+ @ <li>
829
+ hyperlink_to_date(zDate,"");
830
+ @ - part of checkin
818831
hyperlink_to_uuid(zVers);
819
- @ - %w(zCom) by
820
- hyperlink_to_user(zUser,zDate," on");
821
- hyperlink_to_date(zDate,".");
832
+ if( zBr && zBr[0] ){
833
+ if( g.okHistory ){
834
+ @ on branch <a href="%s(g.zTop)/timeline?r=%T(zBr)">%h(zBr)</a>
835
+ }else{
836
+ @ on branch %h(zBr)
837
+ }
838
+ }
839
+ @ - %w(zCom) (user:
840
+ hyperlink_to_user(zUser,zDate,"");
841
+ @ )
822842
if( g.okHistory ){
823843
@ <a href="%s(g.zTop)/annotate?checkin=%S(zVers)&filename=%T(zName)">
824844
@ [annotate]</a>
825845
}
826846
cnt++;
827847
if( pDownloadName && blob_size(pDownloadName)==0 ){
828848
blob_append(pDownloadName, zName, -1);
829849
}
830850
}
851
+ @ </ul></ul>
852
+ free(prevName);
831853
db_finalize(&q);
832854
db_prepare(&q,
833855
"SELECT substr(tagname, 6, 10000), datetime(event.mtime),"
834856
" coalesce(event.euser, event.user)"
835857
" FROM tagxref, tag, event"
@@ -995,17 +1017,13 @@
9951017
style_header("Diff");
9961018
style_submenu_element("Patch", "Patch", "%s/fdiff?v1=%T&v2=%T&patch",
9971019
g.zTop, P("v1"), P("v2"));
9981020
@ <h2>Differences From
9991021
@ Artifact <a href="%s(g.zTop)/artifact/%S(zV1)">[%S(zV1)]</a>:</h2>
1000
- @ <blockquote><p>
1001
- object_description(v1, 1, 0);
1002
- @ </p></blockquote>
1022
+ object_description(v1, 0, 0);
10031023
@ <h2>To Artifact <a href="%s(g.zTop)/artifact/%S(zV2)">[%S(zV2)]</a>:</h2>
1004
- @ <blockquote><p>
1005
- object_description(v2, 1, 0);
1006
- @ </p></blockquote>
1024
+ object_description(v2, 0, 0);
10071025
@ <hr />
10081026
@ <blockquote><pre>
10091027
@ %h(blob_str(&diff))
10101028
@ </pre></blockquote>
10111029
blob_reset(&diff);
@@ -1114,16 +1132,14 @@
11141132
}
11151133
}
11161134
style_header("Hex Artifact Content");
11171135
zUuid = db_text("?","SELECT uuid FROM blob WHERE rid=%d", rid);
11181136
@ <h2>Artifact %s(zUuid):</h2>
1119
- @ <blockquote><p>
11201137
blob_zero(&downloadName);
11211138
object_description(rid, 0, &downloadName);
11221139
style_submenu_element("Download", "Download",
11231140
"%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
1124
- @ </p></blockquote>
11251141
@ <hr />
11261142
content_get(rid, &content);
11271143
@ <blockquote><pre>
11281144
hexdump(&content);
11291145
@ </pre></blockquote>
@@ -1263,11 +1279,10 @@
12631279
}
12641280
}
12651281
style_header("Artifact Content");
12661282
zUuid = db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid);
12671283
@ <h2>Artifact %s(zUuid)</h2>
1268
- @ <blockquote><p>
12691284
blob_zero(&downloadName);
12701285
object_description(rid, 0, &downloadName);
12711286
style_submenu_element("Download", "Download",
12721287
"%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
12731288
zMime = mimetype_from_name(blob_str(&downloadName));
@@ -1290,11 +1305,10 @@
12901305
style_submenu_element("Text", "Text",
12911306
"%s/artifact/%s?txt=1", g.zTop, zUuid);
12921307
}
12931308
}
12941309
}
1295
- @ </p></blockquote>
12961310
@ <hr />
12971311
content_get(rid, &content);
12981312
if( renderAsWiki ){
12991313
wiki_convert(&content, 0, 0);
13001314
}else if( renderAsHtml ){
13011315
--- src/info.c
+++ src/info.c
@@ -777,59 +777,81 @@
777 Stmt q;
778 int cnt = 0;
779 int nWiki = 0;
780 char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
781
 
 
782 db_prepare(&q,
783 "SELECT filename.name, datetime(event.mtime),"
784 " coalesce(event.ecomment,event.comment),"
785 " coalesce(event.euser,event.user),"
786 " b.uuid, mlink.mperm"
 
 
787 " FROM mlink, filename, event, blob a, blob b"
788 " WHERE filename.fnid=mlink.fnid"
789 " AND event.objid=mlink.mid"
790 " AND a.rid=mlink.fid"
791 " AND b.rid=mlink.mid"
792 " AND mlink.fid=%d",
793 rid
 
794 );
 
795 while( db_step(&q)==SQLITE_ROW ){
796 const char *zName = db_column_text(&q, 0);
797 const char *zDate = db_column_text(&q, 1);
798 const char *zCom = db_column_text(&q, 2);
799 const char *zUser = db_column_text(&q, 3);
800 const char *zVers = db_column_text(&q, 4);
801 int mPerm = db_column_int(&q, 5);
802 if( cnt>0 ){
803 @ Also file
804 }else{
805 @ File
806 }
807 if( g.okHistory ){
808 @ <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>
809 }else{
810 @ %h(zName)
811 }
812 if( mPerm==PERM_LNK ){
813 @ (symbolic link)
814 }else if( mPerm==PERM_EXE ){
815 @ (executable)
816 }
817 @ part of check-in
 
 
 
 
 
 
 
818 hyperlink_to_uuid(zVers);
819 @ - %w(zCom) by
820 hyperlink_to_user(zUser,zDate," on");
821 hyperlink_to_date(zDate,".");
 
 
 
 
 
 
 
822 if( g.okHistory ){
823 @ <a href="%s(g.zTop)/annotate?checkin=%S(zVers)&filename=%T(zName)">
824 @ [annotate]</a>
825 }
826 cnt++;
827 if( pDownloadName && blob_size(pDownloadName)==0 ){
828 blob_append(pDownloadName, zName, -1);
829 }
830 }
 
 
831 db_finalize(&q);
832 db_prepare(&q,
833 "SELECT substr(tagname, 6, 10000), datetime(event.mtime),"
834 " coalesce(event.euser, event.user)"
835 " FROM tagxref, tag, event"
@@ -995,17 +1017,13 @@
995 style_header("Diff");
996 style_submenu_element("Patch", "Patch", "%s/fdiff?v1=%T&v2=%T&patch",
997 g.zTop, P("v1"), P("v2"));
998 @ <h2>Differences From
999 @ Artifact <a href="%s(g.zTop)/artifact/%S(zV1)">[%S(zV1)]</a>:</h2>
1000 @ <blockquote><p>
1001 object_description(v1, 1, 0);
1002 @ </p></blockquote>
1003 @ <h2>To Artifact <a href="%s(g.zTop)/artifact/%S(zV2)">[%S(zV2)]</a>:</h2>
1004 @ <blockquote><p>
1005 object_description(v2, 1, 0);
1006 @ </p></blockquote>
1007 @ <hr />
1008 @ <blockquote><pre>
1009 @ %h(blob_str(&diff))
1010 @ </pre></blockquote>
1011 blob_reset(&diff);
@@ -1114,16 +1132,14 @@
1114 }
1115 }
1116 style_header("Hex Artifact Content");
1117 zUuid = db_text("?","SELECT uuid FROM blob WHERE rid=%d", rid);
1118 @ <h2>Artifact %s(zUuid):</h2>
1119 @ <blockquote><p>
1120 blob_zero(&downloadName);
1121 object_description(rid, 0, &downloadName);
1122 style_submenu_element("Download", "Download",
1123 "%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
1124 @ </p></blockquote>
1125 @ <hr />
1126 content_get(rid, &content);
1127 @ <blockquote><pre>
1128 hexdump(&content);
1129 @ </pre></blockquote>
@@ -1263,11 +1279,10 @@
1263 }
1264 }
1265 style_header("Artifact Content");
1266 zUuid = db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid);
1267 @ <h2>Artifact %s(zUuid)</h2>
1268 @ <blockquote><p>
1269 blob_zero(&downloadName);
1270 object_description(rid, 0, &downloadName);
1271 style_submenu_element("Download", "Download",
1272 "%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
1273 zMime = mimetype_from_name(blob_str(&downloadName));
@@ -1290,11 +1305,10 @@
1290 style_submenu_element("Text", "Text",
1291 "%s/artifact/%s?txt=1", g.zTop, zUuid);
1292 }
1293 }
1294 }
1295 @ </p></blockquote>
1296 @ <hr />
1297 content_get(rid, &content);
1298 if( renderAsWiki ){
1299 wiki_convert(&content, 0, 0);
1300 }else if( renderAsHtml ){
1301
--- src/info.c
+++ src/info.c
@@ -777,59 +777,81 @@
777 Stmt q;
778 int cnt = 0;
779 int nWiki = 0;
780 char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
781
782 char *prevName = 0;
783
784 db_prepare(&q,
785 "SELECT filename.name, datetime(event.mtime),"
786 " coalesce(event.ecomment,event.comment),"
787 " coalesce(event.euser,event.user),"
788 " b.uuid, mlink.mperm,"
789 " coalesce((SELECT value FROM tagxref"
790 " WHERE tagid=%d AND tagtype>0 AND rid=mlink.mid),'trunk')"
791 " FROM mlink, filename, event, blob a, blob b"
792 " WHERE filename.fnid=mlink.fnid"
793 " AND event.objid=mlink.mid"
794 " AND a.rid=mlink.fid"
795 " AND b.rid=mlink.mid"
796 " AND mlink.fid=%d"
797 " ORDER BY filename.name, event.mtime",
798 TAG_BRANCH, rid
799 );
800 @ <ul>
801 while( db_step(&q)==SQLITE_ROW ){
802 const char *zName = db_column_text(&q, 0);
803 const char *zDate = db_column_text(&q, 1);
804 const char *zCom = db_column_text(&q, 2);
805 const char *zUser = db_column_text(&q, 3);
806 const char *zVers = db_column_text(&q, 4);
807 int mPerm = db_column_int(&q, 5);
808 const char *zBr = db_column_text(&q, 6);
809 if( !prevName || fossil_strcmp(zName, prevName) ) {
810 if( prevName ) {
811 @ </ul>
812 }
813 if( mPerm==PERM_LNK ){
814 @ <li>Symbolic link
815 }else if( mPerm==PERM_EXE ){
816 @ <li>Executable file
817 }else{
818 @ <li>File
819 }
820 if( g.okHistory ){
821 @ <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>
822 }else{
823 @ %h(zName)
824 }
825 @ <ul>
826 prevName = fossil_strdup(zName);
827 }
828 @ <li>
829 hyperlink_to_date(zDate,"");
830 @ - part of checkin
831 hyperlink_to_uuid(zVers);
832 if( zBr && zBr[0] ){
833 if( g.okHistory ){
834 @ on branch <a href="%s(g.zTop)/timeline?r=%T(zBr)">%h(zBr)</a>
835 }else{
836 @ on branch %h(zBr)
837 }
838 }
839 @ - %w(zCom) (user:
840 hyperlink_to_user(zUser,zDate,"");
841 @ )
842 if( g.okHistory ){
843 @ <a href="%s(g.zTop)/annotate?checkin=%S(zVers)&filename=%T(zName)">
844 @ [annotate]</a>
845 }
846 cnt++;
847 if( pDownloadName && blob_size(pDownloadName)==0 ){
848 blob_append(pDownloadName, zName, -1);
849 }
850 }
851 @ </ul></ul>
852 free(prevName);
853 db_finalize(&q);
854 db_prepare(&q,
855 "SELECT substr(tagname, 6, 10000), datetime(event.mtime),"
856 " coalesce(event.euser, event.user)"
857 " FROM tagxref, tag, event"
@@ -995,17 +1017,13 @@
1017 style_header("Diff");
1018 style_submenu_element("Patch", "Patch", "%s/fdiff?v1=%T&v2=%T&patch",
1019 g.zTop, P("v1"), P("v2"));
1020 @ <h2>Differences From
1021 @ Artifact <a href="%s(g.zTop)/artifact/%S(zV1)">[%S(zV1)]</a>:</h2>
1022 object_description(v1, 0, 0);
 
 
1023 @ <h2>To Artifact <a href="%s(g.zTop)/artifact/%S(zV2)">[%S(zV2)]</a>:</h2>
1024 object_description(v2, 0, 0);
 
 
1025 @ <hr />
1026 @ <blockquote><pre>
1027 @ %h(blob_str(&diff))
1028 @ </pre></blockquote>
1029 blob_reset(&diff);
@@ -1114,16 +1132,14 @@
1132 }
1133 }
1134 style_header("Hex Artifact Content");
1135 zUuid = db_text("?","SELECT uuid FROM blob WHERE rid=%d", rid);
1136 @ <h2>Artifact %s(zUuid):</h2>
 
1137 blob_zero(&downloadName);
1138 object_description(rid, 0, &downloadName);
1139 style_submenu_element("Download", "Download",
1140 "%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
 
1141 @ <hr />
1142 content_get(rid, &content);
1143 @ <blockquote><pre>
1144 hexdump(&content);
1145 @ </pre></blockquote>
@@ -1263,11 +1279,10 @@
1279 }
1280 }
1281 style_header("Artifact Content");
1282 zUuid = db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid);
1283 @ <h2>Artifact %s(zUuid)</h2>
 
1284 blob_zero(&downloadName);
1285 object_description(rid, 0, &downloadName);
1286 style_submenu_element("Download", "Download",
1287 "%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
1288 zMime = mimetype_from_name(blob_str(&downloadName));
@@ -1290,11 +1305,10 @@
1305 style_submenu_element("Text", "Text",
1306 "%s/artifact/%s?txt=1", g.zTop, zUuid);
1307 }
1308 }
1309 }
 
1310 @ <hr />
1311 content_get(rid, &content);
1312 if( renderAsWiki ){
1313 wiki_convert(&content, 0, 0);
1314 }else if( renderAsHtml ){
1315
+46 -32
--- src/info.c
+++ src/info.c
@@ -777,59 +777,81 @@
777777
Stmt q;
778778
int cnt = 0;
779779
int nWiki = 0;
780780
char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
781781
782
+ char *prevName = 0;
783
+
782784
db_prepare(&q,
783785
"SELECT filename.name, datetime(event.mtime),"
784786
" coalesce(event.ecomment,event.comment),"
785787
" coalesce(event.euser,event.user),"
786
- " b.uuid, mlink.mperm"
788
+ " b.uuid, mlink.mperm,"
789
+ " coalesce((SELECT value FROM tagxref"
790
+ " WHERE tagid=%d AND tagtype>0 AND rid=mlink.mid),'trunk')"
787791
" FROM mlink, filename, event, blob a, blob b"
788792
" WHERE filename.fnid=mlink.fnid"
789793
" AND event.objid=mlink.mid"
790794
" AND a.rid=mlink.fid"
791795
" AND b.rid=mlink.mid"
792
- " AND mlink.fid=%d",
793
- rid
796
+ " AND mlink.fid=%d"
797
+ " ORDER BY filename.name, event.mtime",
798
+ TAG_BRANCH, rid
794799
);
800
+ @ <ul>
795801
while( db_step(&q)==SQLITE_ROW ){
796802
const char *zName = db_column_text(&q, 0);
797803
const char *zDate = db_column_text(&q, 1);
798804
const char *zCom = db_column_text(&q, 2);
799805
const char *zUser = db_column_text(&q, 3);
800806
const char *zVers = db_column_text(&q, 4);
801807
int mPerm = db_column_int(&q, 5);
802
- if( cnt>0 ){
803
- @ Also file
804
- }else{
805
- @ File
806
- }
807
- if( g.okHistory ){
808
- @ <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>
809
- }else{
810
- @ %h(zName)
811
- }
812
- if( mPerm==PERM_LNK ){
813
- @ (symbolic link)
814
- }else if( mPerm==PERM_EXE ){
815
- @ (executable)
816
- }
817
- @ part of check-in
808
+ const char *zBr = db_column_text(&q, 6);
809
+ if( !prevName || fossil_strcmp(zName, prevName) ) {
810
+ if( prevName ) {
811
+ @ </ul>
812
+ }
813
+ if( mPerm==PERM_LNK ){
814
+ @ <li>Symbolic link
815
+ }else if( mPerm==PERM_EXE ){
816
+ @ <li>Executable file
817
+ }else{
818
+ @ <li>File
819
+ }
820
+ if( g.okHistory ){
821
+ @ <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>
822
+ }else{
823
+ @ %h(zName)
824
+ }
825
+ @ <ul>
826
+ prevName = fossil_strdup(zName);
827
+ }
828
+ @ <li>
829
+ hyperlink_to_date(zDate,"");
830
+ @ - part of checkin
818831
hyperlink_to_uuid(zVers);
819
- @ - %w(zCom) by
820
- hyperlink_to_user(zUser,zDate," on");
821
- hyperlink_to_date(zDate,".");
832
+ if( zBr && zBr[0] ){
833
+ if( g.okHistory ){
834
+ @ on branch <a href="%s(g.zTop)/timeline?r=%T(zBr)">%h(zBr)</a>
835
+ }else{
836
+ @ on branch %h(zBr)
837
+ }
838
+ }
839
+ @ - %w(zCom) (user:
840
+ hyperlink_to_user(zUser,zDate,"");
841
+ @ )
822842
if( g.okHistory ){
823843
@ <a href="%s(g.zTop)/annotate?checkin=%S(zVers)&filename=%T(zName)">
824844
@ [annotate]</a>
825845
}
826846
cnt++;
827847
if( pDownloadName && blob_size(pDownloadName)==0 ){
828848
blob_append(pDownloadName, zName, -1);
829849
}
830850
}
851
+ @ </ul></ul>
852
+ free(prevName);
831853
db_finalize(&q);
832854
db_prepare(&q,
833855
"SELECT substr(tagname, 6, 10000), datetime(event.mtime),"
834856
" coalesce(event.euser, event.user)"
835857
" FROM tagxref, tag, event"
@@ -995,17 +1017,13 @@
9951017
style_header("Diff");
9961018
style_submenu_element("Patch", "Patch", "%s/fdiff?v1=%T&v2=%T&patch",
9971019
g.zTop, P("v1"), P("v2"));
9981020
@ <h2>Differences From
9991021
@ Artifact <a href="%s(g.zTop)/artifact/%S(zV1)">[%S(zV1)]</a>:</h2>
1000
- @ <blockquote><p>
1001
- object_description(v1, 1, 0);
1002
- @ </p></blockquote>
1022
+ object_description(v1, 0, 0);
10031023
@ <h2>To Artifact <a href="%s(g.zTop)/artifact/%S(zV2)">[%S(zV2)]</a>:</h2>
1004
- @ <blockquote><p>
1005
- object_description(v2, 1, 0);
1006
- @ </p></blockquote>
1024
+ object_description(v2, 0, 0);
10071025
@ <hr />
10081026
@ <blockquote><pre>
10091027
@ %h(blob_str(&diff))
10101028
@ </pre></blockquote>
10111029
blob_reset(&diff);
@@ -1114,16 +1132,14 @@
11141132
}
11151133
}
11161134
style_header("Hex Artifact Content");
11171135
zUuid = db_text("?","SELECT uuid FROM blob WHERE rid=%d", rid);
11181136
@ <h2>Artifact %s(zUuid):</h2>
1119
- @ <blockquote><p>
11201137
blob_zero(&downloadName);
11211138
object_description(rid, 0, &downloadName);
11221139
style_submenu_element("Download", "Download",
11231140
"%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
1124
- @ </p></blockquote>
11251141
@ <hr />
11261142
content_get(rid, &content);
11271143
@ <blockquote><pre>
11281144
hexdump(&content);
11291145
@ </pre></blockquote>
@@ -1263,11 +1279,10 @@
12631279
}
12641280
}
12651281
style_header("Artifact Content");
12661282
zUuid = db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid);
12671283
@ <h2>Artifact %s(zUuid)</h2>
1268
- @ <blockquote><p>
12691284
blob_zero(&downloadName);
12701285
object_description(rid, 0, &downloadName);
12711286
style_submenu_element("Download", "Download",
12721287
"%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
12731288
zMime = mimetype_from_name(blob_str(&downloadName));
@@ -1290,11 +1305,10 @@
12901305
style_submenu_element("Text", "Text",
12911306
"%s/artifact/%s?txt=1", g.zTop, zUuid);
12921307
}
12931308
}
12941309
}
1295
- @ </p></blockquote>
12961310
@ <hr />
12971311
content_get(rid, &content);
12981312
if( renderAsWiki ){
12991313
wiki_convert(&content, 0, 0);
13001314
}else if( renderAsHtml ){
13011315
--- src/info.c
+++ src/info.c
@@ -777,59 +777,81 @@
777 Stmt q;
778 int cnt = 0;
779 int nWiki = 0;
780 char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
781
 
 
782 db_prepare(&q,
783 "SELECT filename.name, datetime(event.mtime),"
784 " coalesce(event.ecomment,event.comment),"
785 " coalesce(event.euser,event.user),"
786 " b.uuid, mlink.mperm"
 
 
787 " FROM mlink, filename, event, blob a, blob b"
788 " WHERE filename.fnid=mlink.fnid"
789 " AND event.objid=mlink.mid"
790 " AND a.rid=mlink.fid"
791 " AND b.rid=mlink.mid"
792 " AND mlink.fid=%d",
793 rid
 
794 );
 
795 while( db_step(&q)==SQLITE_ROW ){
796 const char *zName = db_column_text(&q, 0);
797 const char *zDate = db_column_text(&q, 1);
798 const char *zCom = db_column_text(&q, 2);
799 const char *zUser = db_column_text(&q, 3);
800 const char *zVers = db_column_text(&q, 4);
801 int mPerm = db_column_int(&q, 5);
802 if( cnt>0 ){
803 @ Also file
804 }else{
805 @ File
806 }
807 if( g.okHistory ){
808 @ <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>
809 }else{
810 @ %h(zName)
811 }
812 if( mPerm==PERM_LNK ){
813 @ (symbolic link)
814 }else if( mPerm==PERM_EXE ){
815 @ (executable)
816 }
817 @ part of check-in
 
 
 
 
 
 
 
818 hyperlink_to_uuid(zVers);
819 @ - %w(zCom) by
820 hyperlink_to_user(zUser,zDate," on");
821 hyperlink_to_date(zDate,".");
 
 
 
 
 
 
 
822 if( g.okHistory ){
823 @ <a href="%s(g.zTop)/annotate?checkin=%S(zVers)&filename=%T(zName)">
824 @ [annotate]</a>
825 }
826 cnt++;
827 if( pDownloadName && blob_size(pDownloadName)==0 ){
828 blob_append(pDownloadName, zName, -1);
829 }
830 }
 
 
831 db_finalize(&q);
832 db_prepare(&q,
833 "SELECT substr(tagname, 6, 10000), datetime(event.mtime),"
834 " coalesce(event.euser, event.user)"
835 " FROM tagxref, tag, event"
@@ -995,17 +1017,13 @@
995 style_header("Diff");
996 style_submenu_element("Patch", "Patch", "%s/fdiff?v1=%T&v2=%T&patch",
997 g.zTop, P("v1"), P("v2"));
998 @ <h2>Differences From
999 @ Artifact <a href="%s(g.zTop)/artifact/%S(zV1)">[%S(zV1)]</a>:</h2>
1000 @ <blockquote><p>
1001 object_description(v1, 1, 0);
1002 @ </p></blockquote>
1003 @ <h2>To Artifact <a href="%s(g.zTop)/artifact/%S(zV2)">[%S(zV2)]</a>:</h2>
1004 @ <blockquote><p>
1005 object_description(v2, 1, 0);
1006 @ </p></blockquote>
1007 @ <hr />
1008 @ <blockquote><pre>
1009 @ %h(blob_str(&diff))
1010 @ </pre></blockquote>
1011 blob_reset(&diff);
@@ -1114,16 +1132,14 @@
1114 }
1115 }
1116 style_header("Hex Artifact Content");
1117 zUuid = db_text("?","SELECT uuid FROM blob WHERE rid=%d", rid);
1118 @ <h2>Artifact %s(zUuid):</h2>
1119 @ <blockquote><p>
1120 blob_zero(&downloadName);
1121 object_description(rid, 0, &downloadName);
1122 style_submenu_element("Download", "Download",
1123 "%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
1124 @ </p></blockquote>
1125 @ <hr />
1126 content_get(rid, &content);
1127 @ <blockquote><pre>
1128 hexdump(&content);
1129 @ </pre></blockquote>
@@ -1263,11 +1279,10 @@
1263 }
1264 }
1265 style_header("Artifact Content");
1266 zUuid = db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid);
1267 @ <h2>Artifact %s(zUuid)</h2>
1268 @ <blockquote><p>
1269 blob_zero(&downloadName);
1270 object_description(rid, 0, &downloadName);
1271 style_submenu_element("Download", "Download",
1272 "%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
1273 zMime = mimetype_from_name(blob_str(&downloadName));
@@ -1290,11 +1305,10 @@
1290 style_submenu_element("Text", "Text",
1291 "%s/artifact/%s?txt=1", g.zTop, zUuid);
1292 }
1293 }
1294 }
1295 @ </p></blockquote>
1296 @ <hr />
1297 content_get(rid, &content);
1298 if( renderAsWiki ){
1299 wiki_convert(&content, 0, 0);
1300 }else if( renderAsHtml ){
1301
--- src/info.c
+++ src/info.c
@@ -777,59 +777,81 @@
777 Stmt q;
778 int cnt = 0;
779 int nWiki = 0;
780 char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
781
782 char *prevName = 0;
783
784 db_prepare(&q,
785 "SELECT filename.name, datetime(event.mtime),"
786 " coalesce(event.ecomment,event.comment),"
787 " coalesce(event.euser,event.user),"
788 " b.uuid, mlink.mperm,"
789 " coalesce((SELECT value FROM tagxref"
790 " WHERE tagid=%d AND tagtype>0 AND rid=mlink.mid),'trunk')"
791 " FROM mlink, filename, event, blob a, blob b"
792 " WHERE filename.fnid=mlink.fnid"
793 " AND event.objid=mlink.mid"
794 " AND a.rid=mlink.fid"
795 " AND b.rid=mlink.mid"
796 " AND mlink.fid=%d"
797 " ORDER BY filename.name, event.mtime",
798 TAG_BRANCH, rid
799 );
800 @ <ul>
801 while( db_step(&q)==SQLITE_ROW ){
802 const char *zName = db_column_text(&q, 0);
803 const char *zDate = db_column_text(&q, 1);
804 const char *zCom = db_column_text(&q, 2);
805 const char *zUser = db_column_text(&q, 3);
806 const char *zVers = db_column_text(&q, 4);
807 int mPerm = db_column_int(&q, 5);
808 const char *zBr = db_column_text(&q, 6);
809 if( !prevName || fossil_strcmp(zName, prevName) ) {
810 if( prevName ) {
811 @ </ul>
812 }
813 if( mPerm==PERM_LNK ){
814 @ <li>Symbolic link
815 }else if( mPerm==PERM_EXE ){
816 @ <li>Executable file
817 }else{
818 @ <li>File
819 }
820 if( g.okHistory ){
821 @ <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>
822 }else{
823 @ %h(zName)
824 }
825 @ <ul>
826 prevName = fossil_strdup(zName);
827 }
828 @ <li>
829 hyperlink_to_date(zDate,"");
830 @ - part of checkin
831 hyperlink_to_uuid(zVers);
832 if( zBr && zBr[0] ){
833 if( g.okHistory ){
834 @ on branch <a href="%s(g.zTop)/timeline?r=%T(zBr)">%h(zBr)</a>
835 }else{
836 @ on branch %h(zBr)
837 }
838 }
839 @ - %w(zCom) (user:
840 hyperlink_to_user(zUser,zDate,"");
841 @ )
842 if( g.okHistory ){
843 @ <a href="%s(g.zTop)/annotate?checkin=%S(zVers)&filename=%T(zName)">
844 @ [annotate]</a>
845 }
846 cnt++;
847 if( pDownloadName && blob_size(pDownloadName)==0 ){
848 blob_append(pDownloadName, zName, -1);
849 }
850 }
851 @ </ul></ul>
852 free(prevName);
853 db_finalize(&q);
854 db_prepare(&q,
855 "SELECT substr(tagname, 6, 10000), datetime(event.mtime),"
856 " coalesce(event.euser, event.user)"
857 " FROM tagxref, tag, event"
@@ -995,17 +1017,13 @@
1017 style_header("Diff");
1018 style_submenu_element("Patch", "Patch", "%s/fdiff?v1=%T&v2=%T&patch",
1019 g.zTop, P("v1"), P("v2"));
1020 @ <h2>Differences From
1021 @ Artifact <a href="%s(g.zTop)/artifact/%S(zV1)">[%S(zV1)]</a>:</h2>
1022 object_description(v1, 0, 0);
 
 
1023 @ <h2>To Artifact <a href="%s(g.zTop)/artifact/%S(zV2)">[%S(zV2)]</a>:</h2>
1024 object_description(v2, 0, 0);
 
 
1025 @ <hr />
1026 @ <blockquote><pre>
1027 @ %h(blob_str(&diff))
1028 @ </pre></blockquote>
1029 blob_reset(&diff);
@@ -1114,16 +1132,14 @@
1132 }
1133 }
1134 style_header("Hex Artifact Content");
1135 zUuid = db_text("?","SELECT uuid FROM blob WHERE rid=%d", rid);
1136 @ <h2>Artifact %s(zUuid):</h2>
 
1137 blob_zero(&downloadName);
1138 object_description(rid, 0, &downloadName);
1139 style_submenu_element("Download", "Download",
1140 "%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
 
1141 @ <hr />
1142 content_get(rid, &content);
1143 @ <blockquote><pre>
1144 hexdump(&content);
1145 @ </pre></blockquote>
@@ -1263,11 +1279,10 @@
1279 }
1280 }
1281 style_header("Artifact Content");
1282 zUuid = db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid);
1283 @ <h2>Artifact %s(zUuid)</h2>
 
1284 blob_zero(&downloadName);
1285 object_description(rid, 0, &downloadName);
1286 style_submenu_element("Download", "Download",
1287 "%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
1288 zMime = mimetype_from_name(blob_str(&downloadName));
@@ -1290,11 +1305,10 @@
1305 style_submenu_element("Text", "Text",
1306 "%s/artifact/%s?txt=1", g.zTop, zUuid);
1307 }
1308 }
1309 }
 
1310 @ <hr />
1311 content_get(rid, &content);
1312 if( renderAsWiki ){
1313 wiki_convert(&content, 0, 0);
1314 }else if( renderAsHtml ){
1315

Keyboard Shortcuts

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