Fossil SCM
Show RCVID values to administrators on the /bloblist page.
Commit
a0faf128db08cef59623b001f9b1506242611136072a06e524db8187ee735c06
Parent
1f7b409e876abe2…
1 file changed
+42
-27
+42
-27
| --- src/name.c | ||
| +++ src/name.c | ||
| @@ -962,10 +962,11 @@ | ||
| 962 | 962 | @ rid INTEGER PRIMARY KEY, -- RID of the object |
| 963 | 963 | @ uuid TEXT, -- hash of the object |
| 964 | 964 | @ ctime DATETIME, -- Time of creation |
| 965 | 965 | @ isPrivate BOOLEAN DEFAULT 0, -- True for unpublished artifacts |
| 966 | 966 | @ type TEXT, -- file, checkin, wiki, ticket, etc. |
| 967 | +@ rcvid INT, -- When the artifact was received | |
| 967 | 968 | @ summary TEXT, -- Summary comment for the object |
| 968 | 969 | @ detail TEXT -- File name, check-in comment, etc |
| 969 | 970 | @ ); |
| 970 | 971 | ; |
| 971 | 972 | |
| @@ -977,23 +978,24 @@ | ||
| 977 | 978 | void describe_artifacts(const char *zWhere){ |
| 978 | 979 | db_multi_exec("%s", zDescTab/*safe-for-%s*/); |
| 979 | 980 | |
| 980 | 981 | /* Describe check-ins */ |
| 981 | 982 | db_multi_exec( |
| 982 | - "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" | |
| 983 | - "SELECT blob.rid, blob.uuid, event.mtime, 'checkin',\n" | |
| 983 | + "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" | |
| 984 | + "SELECT blob.rid, blob.uuid, blob.rcvid, event.mtime, 'checkin',\n" | |
| 984 | 985 | " 'check-in on ' || strftime('%%Y-%%m-%%d %%H:%%M',event.mtime)\n" |
| 985 | 986 | " FROM event, blob\n" |
| 986 | 987 | " WHERE (event.objid %s) AND event.type='ci'\n" |
| 987 | 988 | " AND event.objid=blob.rid;", |
| 988 | 989 | zWhere /*safe-for-%s*/ |
| 989 | 990 | ); |
| 990 | 991 | |
| 991 | 992 | /* Describe files */ |
| 992 | 993 | db_multi_exec( |
| 993 | - "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" | |
| 994 | - "SELECT blob.rid, blob.uuid, event.mtime, 'file', 'file '||filename.name\n" | |
| 994 | + "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" | |
| 995 | + "SELECT blob.rid, blob.uuid, blob.rcvid, event.mtime," | |
| 996 | + " 'file', 'file '||filename.name\n" | |
| 995 | 997 | " FROM mlink, blob, event, filename\n" |
| 996 | 998 | " WHERE (mlink.fid %s)\n" |
| 997 | 999 | " AND mlink.mid=event.objid\n" |
| 998 | 1000 | " AND filename.fnid=mlink.fnid\n" |
| 999 | 1001 | " AND mlink.fid=blob.rid;", |
| @@ -1000,23 +1002,24 @@ | ||
| 1000 | 1002 | zWhere /*safe-for-%s*/ |
| 1001 | 1003 | ); |
| 1002 | 1004 | |
| 1003 | 1005 | /* Describe tags */ |
| 1004 | 1006 | db_multi_exec( |
| 1005 | - "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" | |
| 1006 | - "SELECT blob.rid, blob.uuid, tagxref.mtime, 'tag',\n" | |
| 1007 | + "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" | |
| 1008 | + "SELECT blob.rid, blob.uuid, blob.rcvid, tagxref.mtime, 'tag',\n" | |
| 1007 | 1009 | " 'tag '||substr((SELECT uuid FROM blob WHERE rid=tagxref.rid),1,16)\n" |
| 1008 | 1010 | " FROM tagxref, blob\n" |
| 1009 | 1011 | " WHERE (tagxref.srcid %s) AND tagxref.srcid!=tagxref.rid\n" |
| 1010 | 1012 | " AND tagxref.srcid=blob.rid;", |
| 1011 | 1013 | zWhere /*safe-for-%s*/ |
| 1012 | 1014 | ); |
| 1013 | 1015 | |
| 1014 | 1016 | /* Cluster artifacts */ |
| 1015 | 1017 | db_multi_exec( |
| 1016 | - "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" | |
| 1017 | - "SELECT blob.rid, blob.uuid, rcvfrom.mtime, 'cluster', 'cluster'\n" | |
| 1018 | + "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" | |
| 1019 | + "SELECT blob.rid, blob.uuid, blob.rcvid, rcvfrom.mtime," | |
| 1020 | + " 'cluster', 'cluster'\n" | |
| 1018 | 1021 | " FROM tagxref, blob, rcvfrom\n" |
| 1019 | 1022 | " WHERE (tagxref.rid %s)\n" |
| 1020 | 1023 | " AND tagxref.tagid=(SELECT tagid FROM tag WHERE tagname='cluster')\n" |
| 1021 | 1024 | " AND blob.rid=tagxref.rid" |
| 1022 | 1025 | " AND rcvfrom.rcvid=blob.rcvid;", |
| @@ -1023,12 +1026,12 @@ | ||
| 1023 | 1026 | zWhere /*safe-for-%s*/ |
| 1024 | 1027 | ); |
| 1025 | 1028 | |
| 1026 | 1029 | /* Ticket change artifacts */ |
| 1027 | 1030 | db_multi_exec( |
| 1028 | - "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" | |
| 1029 | - "SELECT blob.rid, blob.uuid, tagxref.mtime, 'ticket',\n" | |
| 1031 | + "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" | |
| 1032 | + "SELECT blob.rid, blob.uuid, blob.rcvid, tagxref.mtime, 'ticket',\n" | |
| 1030 | 1033 | " 'ticket '||substr(tag.tagname,5,21)\n" |
| 1031 | 1034 | " FROM tagxref, tag, blob\n" |
| 1032 | 1035 | " WHERE (tagxref.rid %s)\n" |
| 1033 | 1036 | " AND tag.tagid=tagxref.tagid\n" |
| 1034 | 1037 | " AND tag.tagname GLOB 'tkt-*'" |
| @@ -1036,12 +1039,12 @@ | ||
| 1036 | 1039 | zWhere /*safe-for-%s*/ |
| 1037 | 1040 | ); |
| 1038 | 1041 | |
| 1039 | 1042 | /* Wiki edit artifacts */ |
| 1040 | 1043 | db_multi_exec( |
| 1041 | - "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" | |
| 1042 | - "SELECT blob.rid, blob.uuid, tagxref.mtime, 'wiki',\n" | |
| 1044 | + "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" | |
| 1045 | + "SELECT blob.rid, blob.uuid, blob.rcvid, tagxref.mtime, 'wiki',\n" | |
| 1043 | 1046 | " printf('wiki \"%%s\"',substr(tag.tagname,6))\n" |
| 1044 | 1047 | " FROM tagxref, tag, blob\n" |
| 1045 | 1048 | " WHERE (tagxref.rid %s)\n" |
| 1046 | 1049 | " AND tag.tagid=tagxref.tagid\n" |
| 1047 | 1050 | " AND tag.tagname GLOB 'wiki-*'" |
| @@ -1049,12 +1052,12 @@ | ||
| 1049 | 1052 | zWhere /*safe-for-%s*/ |
| 1050 | 1053 | ); |
| 1051 | 1054 | |
| 1052 | 1055 | /* Event edit artifacts */ |
| 1053 | 1056 | db_multi_exec( |
| 1054 | - "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" | |
| 1055 | - "SELECT blob.rid, blob.uuid, tagxref.mtime, 'event',\n" | |
| 1057 | + "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" | |
| 1058 | + "SELECT blob.rid, blob.uuid, blob.rcvid, tagxref.mtime, 'event',\n" | |
| 1056 | 1059 | " 'event '||substr(tag.tagname,7)\n" |
| 1057 | 1060 | " FROM tagxref, tag, blob\n" |
| 1058 | 1061 | " WHERE (tagxref.rid %s)\n" |
| 1059 | 1062 | " AND tag.tagid=tagxref.tagid\n" |
| 1060 | 1063 | " AND tag.tagname GLOB 'event-*'" |
| @@ -1062,21 +1065,22 @@ | ||
| 1062 | 1065 | zWhere /*safe-for-%s*/ |
| 1063 | 1066 | ); |
| 1064 | 1067 | |
| 1065 | 1068 | /* Attachments */ |
| 1066 | 1069 | db_multi_exec( |
| 1067 | - "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" | |
| 1068 | - "SELECT blob.rid, blob.uuid, attachment.mtime, 'attach-control',\n" | |
| 1070 | + "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" | |
| 1071 | + "SELECT blob.rid, blob.uuid, blob.rcvid, attachment.mtime," | |
| 1072 | + " 'attach-control',\n" | |
| 1069 | 1073 | " 'attachment-control for '||attachment.filename\n" |
| 1070 | 1074 | " FROM attachment, blob\n" |
| 1071 | 1075 | " WHERE (attachment.attachid %s)\n" |
| 1072 | 1076 | " AND blob.rid=attachment.attachid", |
| 1073 | 1077 | zWhere /*safe-for-%s*/ |
| 1074 | 1078 | ); |
| 1075 | 1079 | db_multi_exec( |
| 1076 | - "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" | |
| 1077 | - "SELECT blob.rid, blob.uuid, attachment.mtime, 'attachment',\n" | |
| 1080 | + "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" | |
| 1081 | + "SELECT blob.rid, blob.uuid, blob.rcvid, attachment.mtime, 'attachment',\n" | |
| 1078 | 1082 | " 'attachment '||attachment.filename\n" |
| 1079 | 1083 | " FROM attachment, blob\n" |
| 1080 | 1084 | " WHERE (blob.rid %s)\n" |
| 1081 | 1085 | " AND blob.rid NOT IN (SELECT rid FROM description)\n" |
| 1082 | 1086 | " AND blob.uuid=attachment.src", |
| @@ -1084,12 +1088,13 @@ | ||
| 1084 | 1088 | ); |
| 1085 | 1089 | |
| 1086 | 1090 | /* Forum posts */ |
| 1087 | 1091 | if( db_table_exists("repository","forumpost") ){ |
| 1088 | 1092 | db_multi_exec( |
| 1089 | - "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" | |
| 1090 | - "SELECT postblob.rid, postblob.uuid, forumpost.fmtime, 'forumpost',\n" | |
| 1093 | + "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" | |
| 1094 | + "SELECT postblob.rid, postblob.uuid, postblob.rcvid," | |
| 1095 | + " forumpost.fmtime, 'forumpost',\n" | |
| 1091 | 1096 | " CASE WHEN fpid=froot THEN 'forum-post '\n" |
| 1092 | 1097 | " ELSE 'forum-reply-to ' END || substr(rootblob.uuid,1,14)\n" |
| 1093 | 1098 | " FROM forumpost, blob AS postblob, blob AS rootblob\n" |
| 1094 | 1099 | " WHERE (forumpost.fpid %s)\n" |
| 1095 | 1100 | " AND postblob.rid=forumpost.fpid" |
| @@ -1098,12 +1103,12 @@ | ||
| 1098 | 1103 | ); |
| 1099 | 1104 | } |
| 1100 | 1105 | |
| 1101 | 1106 | /* Everything else */ |
| 1102 | 1107 | db_multi_exec( |
| 1103 | - "INSERT OR IGNORE INTO description(rid,uuid,type,summary)\n" | |
| 1104 | - "SELECT blob.rid, blob.uuid," | |
| 1108 | + "INSERT OR IGNORE INTO description(rid,uuid,rcvid,type,summary)\n" | |
| 1109 | + "SELECT blob.rid, blob.uuid,blob.rcvid," | |
| 1105 | 1110 | " CASE WHEN blob.size<0 THEN 'phantom' ELSE '' END,\n" |
| 1106 | 1111 | " 'unknown'\n" |
| 1107 | 1112 | " FROM blob WHERE (blob.rid %s);", |
| 1108 | 1113 | zWhere /*safe-for-%s*/ |
| 1109 | 1114 | ); |
| @@ -1236,21 +1241,26 @@ | ||
| 1236 | 1241 | zRange = mprintf("BETWEEN %d AND %d", s, s+n-1); |
| 1237 | 1242 | } |
| 1238 | 1243 | describe_artifacts(zRange); |
| 1239 | 1244 | fossil_free(zRange); |
| 1240 | 1245 | db_prepare(&q, |
| 1241 | - "SELECT rid, uuid, summary, isPrivate, type='phantom'" | |
| 1246 | + "SELECT rid, uuid, summary, isPrivate, type='phantom', rcvid" | |
| 1242 | 1247 | " FROM description ORDER BY rid" |
| 1243 | 1248 | ); |
| 1244 | 1249 | if( skin_detail_boolean("white-foreground") ){ |
| 1245 | 1250 | zSha1Bg = "#714417"; |
| 1246 | 1251 | zSha3Bg = "#177117"; |
| 1247 | 1252 | }else{ |
| 1248 | 1253 | zSha1Bg = "#ebffb0"; |
| 1249 | 1254 | zSha3Bg = "#b0ffb0"; |
| 1250 | 1255 | } |
| 1251 | - @ <table cellpadding="0" cellspacing="0"> | |
| 1256 | + @ <table cellpadding="2" cellspacing="0" border="1"> | |
| 1257 | + if( g.perm.Admin ){ | |
| 1258 | + @ <tr><th>RID<th>Hash<th>Rcvid<th>Description<th>Remarks | |
| 1259 | + }else{ | |
| 1260 | + @ <tr><th>RID<th>Hash<th>Description<th>Remarks | |
| 1261 | + } | |
| 1252 | 1262 | while( db_step(&q)==SQLITE_ROW ){ |
| 1253 | 1263 | int rid = db_column_int(&q,0); |
| 1254 | 1264 | const char *zUuid = db_column_text(&q, 1); |
| 1255 | 1265 | const char *zDesc = db_column_text(&q, 2); |
| 1256 | 1266 | int isPriv = db_column_int(&q,3); |
| @@ -1268,19 +1278,24 @@ | ||
| 1268 | 1278 | @ <tr style='background-color:%s(zClr);'><td align="right">%d(rid)</td> |
| 1269 | 1279 | }else{ |
| 1270 | 1280 | @ <tr><td align="right">%d(rid)</td> |
| 1271 | 1281 | } |
| 1272 | 1282 | @ <td> %z(href("%R/info/%!S",zUuid))%S(zUuid)</a> </td> |
| 1283 | + if( g.perm.Admin ){ | |
| 1284 | + @ <td>%d(db_column_int(&q,5)) | |
| 1285 | + } | |
| 1273 | 1286 | @ <td align="left">%h(zDesc)</td> |
| 1274 | 1287 | if( isPriv || isPhantom ){ |
| 1275 | 1288 | if( isPriv==0 ){ |
| 1276 | - @ <td> (phantom)</td> | |
| 1289 | + @ <td>phantom</td> | |
| 1277 | 1290 | }else if( isPhantom==0 ){ |
| 1278 | - @ <td> (private)</td> | |
| 1291 | + @ <td>private</td> | |
| 1279 | 1292 | }else{ |
| 1280 | - @ <td> (private,phantom)</td> | |
| 1293 | + @ <td>private,phantom</td> | |
| 1281 | 1294 | } |
| 1295 | + }else{ | |
| 1296 | + @ <td> | |
| 1282 | 1297 | } |
| 1283 | 1298 | @ </tr> |
| 1284 | 1299 | } |
| 1285 | 1300 | @ </table> |
| 1286 | 1301 | db_finalize(&q); |
| 1287 | 1302 |
| --- src/name.c | |
| +++ src/name.c | |
| @@ -962,10 +962,11 @@ | |
| 962 | @ rid INTEGER PRIMARY KEY, -- RID of the object |
| 963 | @ uuid TEXT, -- hash of the object |
| 964 | @ ctime DATETIME, -- Time of creation |
| 965 | @ isPrivate BOOLEAN DEFAULT 0, -- True for unpublished artifacts |
| 966 | @ type TEXT, -- file, checkin, wiki, ticket, etc. |
| 967 | @ summary TEXT, -- Summary comment for the object |
| 968 | @ detail TEXT -- File name, check-in comment, etc |
| 969 | @ ); |
| 970 | ; |
| 971 | |
| @@ -977,23 +978,24 @@ | |
| 977 | void describe_artifacts(const char *zWhere){ |
| 978 | db_multi_exec("%s", zDescTab/*safe-for-%s*/); |
| 979 | |
| 980 | /* Describe check-ins */ |
| 981 | db_multi_exec( |
| 982 | "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" |
| 983 | "SELECT blob.rid, blob.uuid, event.mtime, 'checkin',\n" |
| 984 | " 'check-in on ' || strftime('%%Y-%%m-%%d %%H:%%M',event.mtime)\n" |
| 985 | " FROM event, blob\n" |
| 986 | " WHERE (event.objid %s) AND event.type='ci'\n" |
| 987 | " AND event.objid=blob.rid;", |
| 988 | zWhere /*safe-for-%s*/ |
| 989 | ); |
| 990 | |
| 991 | /* Describe files */ |
| 992 | db_multi_exec( |
| 993 | "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" |
| 994 | "SELECT blob.rid, blob.uuid, event.mtime, 'file', 'file '||filename.name\n" |
| 995 | " FROM mlink, blob, event, filename\n" |
| 996 | " WHERE (mlink.fid %s)\n" |
| 997 | " AND mlink.mid=event.objid\n" |
| 998 | " AND filename.fnid=mlink.fnid\n" |
| 999 | " AND mlink.fid=blob.rid;", |
| @@ -1000,23 +1002,24 @@ | |
| 1000 | zWhere /*safe-for-%s*/ |
| 1001 | ); |
| 1002 | |
| 1003 | /* Describe tags */ |
| 1004 | db_multi_exec( |
| 1005 | "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" |
| 1006 | "SELECT blob.rid, blob.uuid, tagxref.mtime, 'tag',\n" |
| 1007 | " 'tag '||substr((SELECT uuid FROM blob WHERE rid=tagxref.rid),1,16)\n" |
| 1008 | " FROM tagxref, blob\n" |
| 1009 | " WHERE (tagxref.srcid %s) AND tagxref.srcid!=tagxref.rid\n" |
| 1010 | " AND tagxref.srcid=blob.rid;", |
| 1011 | zWhere /*safe-for-%s*/ |
| 1012 | ); |
| 1013 | |
| 1014 | /* Cluster artifacts */ |
| 1015 | db_multi_exec( |
| 1016 | "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" |
| 1017 | "SELECT blob.rid, blob.uuid, rcvfrom.mtime, 'cluster', 'cluster'\n" |
| 1018 | " FROM tagxref, blob, rcvfrom\n" |
| 1019 | " WHERE (tagxref.rid %s)\n" |
| 1020 | " AND tagxref.tagid=(SELECT tagid FROM tag WHERE tagname='cluster')\n" |
| 1021 | " AND blob.rid=tagxref.rid" |
| 1022 | " AND rcvfrom.rcvid=blob.rcvid;", |
| @@ -1023,12 +1026,12 @@ | |
| 1023 | zWhere /*safe-for-%s*/ |
| 1024 | ); |
| 1025 | |
| 1026 | /* Ticket change artifacts */ |
| 1027 | db_multi_exec( |
| 1028 | "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" |
| 1029 | "SELECT blob.rid, blob.uuid, tagxref.mtime, 'ticket',\n" |
| 1030 | " 'ticket '||substr(tag.tagname,5,21)\n" |
| 1031 | " FROM tagxref, tag, blob\n" |
| 1032 | " WHERE (tagxref.rid %s)\n" |
| 1033 | " AND tag.tagid=tagxref.tagid\n" |
| 1034 | " AND tag.tagname GLOB 'tkt-*'" |
| @@ -1036,12 +1039,12 @@ | |
| 1036 | zWhere /*safe-for-%s*/ |
| 1037 | ); |
| 1038 | |
| 1039 | /* Wiki edit artifacts */ |
| 1040 | db_multi_exec( |
| 1041 | "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" |
| 1042 | "SELECT blob.rid, blob.uuid, tagxref.mtime, 'wiki',\n" |
| 1043 | " printf('wiki \"%%s\"',substr(tag.tagname,6))\n" |
| 1044 | " FROM tagxref, tag, blob\n" |
| 1045 | " WHERE (tagxref.rid %s)\n" |
| 1046 | " AND tag.tagid=tagxref.tagid\n" |
| 1047 | " AND tag.tagname GLOB 'wiki-*'" |
| @@ -1049,12 +1052,12 @@ | |
| 1049 | zWhere /*safe-for-%s*/ |
| 1050 | ); |
| 1051 | |
| 1052 | /* Event edit artifacts */ |
| 1053 | db_multi_exec( |
| 1054 | "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" |
| 1055 | "SELECT blob.rid, blob.uuid, tagxref.mtime, 'event',\n" |
| 1056 | " 'event '||substr(tag.tagname,7)\n" |
| 1057 | " FROM tagxref, tag, blob\n" |
| 1058 | " WHERE (tagxref.rid %s)\n" |
| 1059 | " AND tag.tagid=tagxref.tagid\n" |
| 1060 | " AND tag.tagname GLOB 'event-*'" |
| @@ -1062,21 +1065,22 @@ | |
| 1062 | zWhere /*safe-for-%s*/ |
| 1063 | ); |
| 1064 | |
| 1065 | /* Attachments */ |
| 1066 | db_multi_exec( |
| 1067 | "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" |
| 1068 | "SELECT blob.rid, blob.uuid, attachment.mtime, 'attach-control',\n" |
| 1069 | " 'attachment-control for '||attachment.filename\n" |
| 1070 | " FROM attachment, blob\n" |
| 1071 | " WHERE (attachment.attachid %s)\n" |
| 1072 | " AND blob.rid=attachment.attachid", |
| 1073 | zWhere /*safe-for-%s*/ |
| 1074 | ); |
| 1075 | db_multi_exec( |
| 1076 | "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" |
| 1077 | "SELECT blob.rid, blob.uuid, attachment.mtime, 'attachment',\n" |
| 1078 | " 'attachment '||attachment.filename\n" |
| 1079 | " FROM attachment, blob\n" |
| 1080 | " WHERE (blob.rid %s)\n" |
| 1081 | " AND blob.rid NOT IN (SELECT rid FROM description)\n" |
| 1082 | " AND blob.uuid=attachment.src", |
| @@ -1084,12 +1088,13 @@ | |
| 1084 | ); |
| 1085 | |
| 1086 | /* Forum posts */ |
| 1087 | if( db_table_exists("repository","forumpost") ){ |
| 1088 | db_multi_exec( |
| 1089 | "INSERT OR IGNORE INTO description(rid,uuid,ctime,type,summary)\n" |
| 1090 | "SELECT postblob.rid, postblob.uuid, forumpost.fmtime, 'forumpost',\n" |
| 1091 | " CASE WHEN fpid=froot THEN 'forum-post '\n" |
| 1092 | " ELSE 'forum-reply-to ' END || substr(rootblob.uuid,1,14)\n" |
| 1093 | " FROM forumpost, blob AS postblob, blob AS rootblob\n" |
| 1094 | " WHERE (forumpost.fpid %s)\n" |
| 1095 | " AND postblob.rid=forumpost.fpid" |
| @@ -1098,12 +1103,12 @@ | |
| 1098 | ); |
| 1099 | } |
| 1100 | |
| 1101 | /* Everything else */ |
| 1102 | db_multi_exec( |
| 1103 | "INSERT OR IGNORE INTO description(rid,uuid,type,summary)\n" |
| 1104 | "SELECT blob.rid, blob.uuid," |
| 1105 | " CASE WHEN blob.size<0 THEN 'phantom' ELSE '' END,\n" |
| 1106 | " 'unknown'\n" |
| 1107 | " FROM blob WHERE (blob.rid %s);", |
| 1108 | zWhere /*safe-for-%s*/ |
| 1109 | ); |
| @@ -1236,21 +1241,26 @@ | |
| 1236 | zRange = mprintf("BETWEEN %d AND %d", s, s+n-1); |
| 1237 | } |
| 1238 | describe_artifacts(zRange); |
| 1239 | fossil_free(zRange); |
| 1240 | db_prepare(&q, |
| 1241 | "SELECT rid, uuid, summary, isPrivate, type='phantom'" |
| 1242 | " FROM description ORDER BY rid" |
| 1243 | ); |
| 1244 | if( skin_detail_boolean("white-foreground") ){ |
| 1245 | zSha1Bg = "#714417"; |
| 1246 | zSha3Bg = "#177117"; |
| 1247 | }else{ |
| 1248 | zSha1Bg = "#ebffb0"; |
| 1249 | zSha3Bg = "#b0ffb0"; |
| 1250 | } |
| 1251 | @ <table cellpadding="0" cellspacing="0"> |
| 1252 | while( db_step(&q)==SQLITE_ROW ){ |
| 1253 | int rid = db_column_int(&q,0); |
| 1254 | const char *zUuid = db_column_text(&q, 1); |
| 1255 | const char *zDesc = db_column_text(&q, 2); |
| 1256 | int isPriv = db_column_int(&q,3); |
| @@ -1268,19 +1278,24 @@ | |
| 1268 | @ <tr style='background-color:%s(zClr);'><td align="right">%d(rid)</td> |
| 1269 | }else{ |
| 1270 | @ <tr><td align="right">%d(rid)</td> |
| 1271 | } |
| 1272 | @ <td> %z(href("%R/info/%!S",zUuid))%S(zUuid)</a> </td> |
| 1273 | @ <td align="left">%h(zDesc)</td> |
| 1274 | if( isPriv || isPhantom ){ |
| 1275 | if( isPriv==0 ){ |
| 1276 | @ <td> (phantom)</td> |
| 1277 | }else if( isPhantom==0 ){ |
| 1278 | @ <td> (private)</td> |
| 1279 | }else{ |
| 1280 | @ <td> (private,phantom)</td> |
| 1281 | } |
| 1282 | } |
| 1283 | @ </tr> |
| 1284 | } |
| 1285 | @ </table> |
| 1286 | db_finalize(&q); |
| 1287 |
| --- src/name.c | |
| +++ src/name.c | |
| @@ -962,10 +962,11 @@ | |
| 962 | @ rid INTEGER PRIMARY KEY, -- RID of the object |
| 963 | @ uuid TEXT, -- hash of the object |
| 964 | @ ctime DATETIME, -- Time of creation |
| 965 | @ isPrivate BOOLEAN DEFAULT 0, -- True for unpublished artifacts |
| 966 | @ type TEXT, -- file, checkin, wiki, ticket, etc. |
| 967 | @ rcvid INT, -- When the artifact was received |
| 968 | @ summary TEXT, -- Summary comment for the object |
| 969 | @ detail TEXT -- File name, check-in comment, etc |
| 970 | @ ); |
| 971 | ; |
| 972 | |
| @@ -977,23 +978,24 @@ | |
| 978 | void describe_artifacts(const char *zWhere){ |
| 979 | db_multi_exec("%s", zDescTab/*safe-for-%s*/); |
| 980 | |
| 981 | /* Describe check-ins */ |
| 982 | db_multi_exec( |
| 983 | "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" |
| 984 | "SELECT blob.rid, blob.uuid, blob.rcvid, event.mtime, 'checkin',\n" |
| 985 | " 'check-in on ' || strftime('%%Y-%%m-%%d %%H:%%M',event.mtime)\n" |
| 986 | " FROM event, blob\n" |
| 987 | " WHERE (event.objid %s) AND event.type='ci'\n" |
| 988 | " AND event.objid=blob.rid;", |
| 989 | zWhere /*safe-for-%s*/ |
| 990 | ); |
| 991 | |
| 992 | /* Describe files */ |
| 993 | db_multi_exec( |
| 994 | "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" |
| 995 | "SELECT blob.rid, blob.uuid, blob.rcvid, event.mtime," |
| 996 | " 'file', 'file '||filename.name\n" |
| 997 | " FROM mlink, blob, event, filename\n" |
| 998 | " WHERE (mlink.fid %s)\n" |
| 999 | " AND mlink.mid=event.objid\n" |
| 1000 | " AND filename.fnid=mlink.fnid\n" |
| 1001 | " AND mlink.fid=blob.rid;", |
| @@ -1000,23 +1002,24 @@ | |
| 1002 | zWhere /*safe-for-%s*/ |
| 1003 | ); |
| 1004 | |
| 1005 | /* Describe tags */ |
| 1006 | db_multi_exec( |
| 1007 | "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" |
| 1008 | "SELECT blob.rid, blob.uuid, blob.rcvid, tagxref.mtime, 'tag',\n" |
| 1009 | " 'tag '||substr((SELECT uuid FROM blob WHERE rid=tagxref.rid),1,16)\n" |
| 1010 | " FROM tagxref, blob\n" |
| 1011 | " WHERE (tagxref.srcid %s) AND tagxref.srcid!=tagxref.rid\n" |
| 1012 | " AND tagxref.srcid=blob.rid;", |
| 1013 | zWhere /*safe-for-%s*/ |
| 1014 | ); |
| 1015 | |
| 1016 | /* Cluster artifacts */ |
| 1017 | db_multi_exec( |
| 1018 | "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" |
| 1019 | "SELECT blob.rid, blob.uuid, blob.rcvid, rcvfrom.mtime," |
| 1020 | " 'cluster', 'cluster'\n" |
| 1021 | " FROM tagxref, blob, rcvfrom\n" |
| 1022 | " WHERE (tagxref.rid %s)\n" |
| 1023 | " AND tagxref.tagid=(SELECT tagid FROM tag WHERE tagname='cluster')\n" |
| 1024 | " AND blob.rid=tagxref.rid" |
| 1025 | " AND rcvfrom.rcvid=blob.rcvid;", |
| @@ -1023,12 +1026,12 @@ | |
| 1026 | zWhere /*safe-for-%s*/ |
| 1027 | ); |
| 1028 | |
| 1029 | /* Ticket change artifacts */ |
| 1030 | db_multi_exec( |
| 1031 | "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" |
| 1032 | "SELECT blob.rid, blob.uuid, blob.rcvid, tagxref.mtime, 'ticket',\n" |
| 1033 | " 'ticket '||substr(tag.tagname,5,21)\n" |
| 1034 | " FROM tagxref, tag, blob\n" |
| 1035 | " WHERE (tagxref.rid %s)\n" |
| 1036 | " AND tag.tagid=tagxref.tagid\n" |
| 1037 | " AND tag.tagname GLOB 'tkt-*'" |
| @@ -1036,12 +1039,12 @@ | |
| 1039 | zWhere /*safe-for-%s*/ |
| 1040 | ); |
| 1041 | |
| 1042 | /* Wiki edit artifacts */ |
| 1043 | db_multi_exec( |
| 1044 | "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" |
| 1045 | "SELECT blob.rid, blob.uuid, blob.rcvid, tagxref.mtime, 'wiki',\n" |
| 1046 | " printf('wiki \"%%s\"',substr(tag.tagname,6))\n" |
| 1047 | " FROM tagxref, tag, blob\n" |
| 1048 | " WHERE (tagxref.rid %s)\n" |
| 1049 | " AND tag.tagid=tagxref.tagid\n" |
| 1050 | " AND tag.tagname GLOB 'wiki-*'" |
| @@ -1049,12 +1052,12 @@ | |
| 1052 | zWhere /*safe-for-%s*/ |
| 1053 | ); |
| 1054 | |
| 1055 | /* Event edit artifacts */ |
| 1056 | db_multi_exec( |
| 1057 | "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" |
| 1058 | "SELECT blob.rid, blob.uuid, blob.rcvid, tagxref.mtime, 'event',\n" |
| 1059 | " 'event '||substr(tag.tagname,7)\n" |
| 1060 | " FROM tagxref, tag, blob\n" |
| 1061 | " WHERE (tagxref.rid %s)\n" |
| 1062 | " AND tag.tagid=tagxref.tagid\n" |
| 1063 | " AND tag.tagname GLOB 'event-*'" |
| @@ -1062,21 +1065,22 @@ | |
| 1065 | zWhere /*safe-for-%s*/ |
| 1066 | ); |
| 1067 | |
| 1068 | /* Attachments */ |
| 1069 | db_multi_exec( |
| 1070 | "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" |
| 1071 | "SELECT blob.rid, blob.uuid, blob.rcvid, attachment.mtime," |
| 1072 | " 'attach-control',\n" |
| 1073 | " 'attachment-control for '||attachment.filename\n" |
| 1074 | " FROM attachment, blob\n" |
| 1075 | " WHERE (attachment.attachid %s)\n" |
| 1076 | " AND blob.rid=attachment.attachid", |
| 1077 | zWhere /*safe-for-%s*/ |
| 1078 | ); |
| 1079 | db_multi_exec( |
| 1080 | "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" |
| 1081 | "SELECT blob.rid, blob.uuid, blob.rcvid, attachment.mtime, 'attachment',\n" |
| 1082 | " 'attachment '||attachment.filename\n" |
| 1083 | " FROM attachment, blob\n" |
| 1084 | " WHERE (blob.rid %s)\n" |
| 1085 | " AND blob.rid NOT IN (SELECT rid FROM description)\n" |
| 1086 | " AND blob.uuid=attachment.src", |
| @@ -1084,12 +1088,13 @@ | |
| 1088 | ); |
| 1089 | |
| 1090 | /* Forum posts */ |
| 1091 | if( db_table_exists("repository","forumpost") ){ |
| 1092 | db_multi_exec( |
| 1093 | "INSERT OR IGNORE INTO description(rid,uuid,rcvid,ctime,type,summary)\n" |
| 1094 | "SELECT postblob.rid, postblob.uuid, postblob.rcvid," |
| 1095 | " forumpost.fmtime, 'forumpost',\n" |
| 1096 | " CASE WHEN fpid=froot THEN 'forum-post '\n" |
| 1097 | " ELSE 'forum-reply-to ' END || substr(rootblob.uuid,1,14)\n" |
| 1098 | " FROM forumpost, blob AS postblob, blob AS rootblob\n" |
| 1099 | " WHERE (forumpost.fpid %s)\n" |
| 1100 | " AND postblob.rid=forumpost.fpid" |
| @@ -1098,12 +1103,12 @@ | |
| 1103 | ); |
| 1104 | } |
| 1105 | |
| 1106 | /* Everything else */ |
| 1107 | db_multi_exec( |
| 1108 | "INSERT OR IGNORE INTO description(rid,uuid,rcvid,type,summary)\n" |
| 1109 | "SELECT blob.rid, blob.uuid,blob.rcvid," |
| 1110 | " CASE WHEN blob.size<0 THEN 'phantom' ELSE '' END,\n" |
| 1111 | " 'unknown'\n" |
| 1112 | " FROM blob WHERE (blob.rid %s);", |
| 1113 | zWhere /*safe-for-%s*/ |
| 1114 | ); |
| @@ -1236,21 +1241,26 @@ | |
| 1241 | zRange = mprintf("BETWEEN %d AND %d", s, s+n-1); |
| 1242 | } |
| 1243 | describe_artifacts(zRange); |
| 1244 | fossil_free(zRange); |
| 1245 | db_prepare(&q, |
| 1246 | "SELECT rid, uuid, summary, isPrivate, type='phantom', rcvid" |
| 1247 | " FROM description ORDER BY rid" |
| 1248 | ); |
| 1249 | if( skin_detail_boolean("white-foreground") ){ |
| 1250 | zSha1Bg = "#714417"; |
| 1251 | zSha3Bg = "#177117"; |
| 1252 | }else{ |
| 1253 | zSha1Bg = "#ebffb0"; |
| 1254 | zSha3Bg = "#b0ffb0"; |
| 1255 | } |
| 1256 | @ <table cellpadding="2" cellspacing="0" border="1"> |
| 1257 | if( g.perm.Admin ){ |
| 1258 | @ <tr><th>RID<th>Hash<th>Rcvid<th>Description<th>Remarks |
| 1259 | }else{ |
| 1260 | @ <tr><th>RID<th>Hash<th>Description<th>Remarks |
| 1261 | } |
| 1262 | while( db_step(&q)==SQLITE_ROW ){ |
| 1263 | int rid = db_column_int(&q,0); |
| 1264 | const char *zUuid = db_column_text(&q, 1); |
| 1265 | const char *zDesc = db_column_text(&q, 2); |
| 1266 | int isPriv = db_column_int(&q,3); |
| @@ -1268,19 +1278,24 @@ | |
| 1278 | @ <tr style='background-color:%s(zClr);'><td align="right">%d(rid)</td> |
| 1279 | }else{ |
| 1280 | @ <tr><td align="right">%d(rid)</td> |
| 1281 | } |
| 1282 | @ <td> %z(href("%R/info/%!S",zUuid))%S(zUuid)</a> </td> |
| 1283 | if( g.perm.Admin ){ |
| 1284 | @ <td>%d(db_column_int(&q,5)) |
| 1285 | } |
| 1286 | @ <td align="left">%h(zDesc)</td> |
| 1287 | if( isPriv || isPhantom ){ |
| 1288 | if( isPriv==0 ){ |
| 1289 | @ <td>phantom</td> |
| 1290 | }else if( isPhantom==0 ){ |
| 1291 | @ <td>private</td> |
| 1292 | }else{ |
| 1293 | @ <td>private,phantom</td> |
| 1294 | } |
| 1295 | }else{ |
| 1296 | @ <td> |
| 1297 | } |
| 1298 | @ </tr> |
| 1299 | } |
| 1300 | @ </table> |
| 1301 | db_finalize(&q); |
| 1302 |