Fossil SCM
On the /artifact page, provide an improved description of cluster artifacts. Also show the rcvfrom information on all artifacts to Admin and Setup users.
Commit
8b2d32cc9df1e2c16ada5d2f3be955207112b4f0
Parent
f98264231599088…
1 file changed
+24
-3
+24
-3
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -1331,15 +1331,15 @@ | ||
| 1331 | 1331 | objType |= OBJTYPE_TICKET; |
| 1332 | 1332 | }else if( zType[0]=='c' ){ |
| 1333 | 1333 | @ Manifest of check-in |
| 1334 | 1334 | objType |= OBJTYPE_CHECKIN; |
| 1335 | 1335 | }else if( zType[0]=='e' ){ |
| 1336 | - @ Instance of event | |
| 1336 | + @ Instance of technote | |
| 1337 | 1337 | objType |= OBJTYPE_EVENT; |
| 1338 | 1338 | hyperlink_to_event_tagid(db_column_int(&q, 5)); |
| 1339 | 1339 | }else{ |
| 1340 | - @ Control file referencing | |
| 1340 | + @ Tag referencing | |
| 1341 | 1341 | } |
| 1342 | 1342 | if( zType[0]!='e' ){ |
| 1343 | 1343 | hyperlink_to_uuid(zUuid); |
| 1344 | 1344 | } |
| 1345 | 1345 | @ - %!W(zCom) by |
| @@ -1393,12 +1393,17 @@ | ||
| 1393 | 1393 | blob_append(pDownloadName, zFilename, -1); |
| 1394 | 1394 | } |
| 1395 | 1395 | tag_private_status(rid); |
| 1396 | 1396 | } |
| 1397 | 1397 | db_finalize(&q); |
| 1398 | + if( db_exists("SELECT 1 FROM tagxref WHERE rid=%d AND tagid=%d", | |
| 1399 | + rid, TAG_CLUSTER) ){ | |
| 1400 | + @ Cluster | |
| 1401 | + cnt++; | |
| 1402 | + } | |
| 1398 | 1403 | if( cnt==0 ){ |
| 1399 | - @ Control artifact. | |
| 1404 | + @ Unrecognized artifact | |
| 1400 | 1405 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 1401 | 1406 | blob_appendf(pDownloadName, "%S.txt", zUuid); |
| 1402 | 1407 | } |
| 1403 | 1408 | tag_private_status(rid); |
| 1404 | 1409 | } |
| @@ -1849,10 +1854,26 @@ | ||
| 1849 | 1854 | }else{ |
| 1850 | 1855 | @ <h2>Artifact %s(zUuid):</h2> |
| 1851 | 1856 | } |
| 1852 | 1857 | blob_zero(&downloadName); |
| 1853 | 1858 | objType = object_description(rid, objdescFlags, &downloadName); |
| 1859 | + if( g.perm.Admin ){ | |
| 1860 | + Stmt q; | |
| 1861 | + db_prepare(&q, | |
| 1862 | + "SELECT coalesce(user.login,rcvfrom.uid)," | |
| 1863 | + " datetime(rcvfrom.mtime), rcvfrom.ipaddr" | |
| 1864 | + " FROM blob, rcvfrom LEFT JOIN user ON user.uid=rcvfrom.uid" | |
| 1865 | + " WHERE blob.rid=%d" | |
| 1866 | + " AND rcvfrom.rcvid=blob.rcvid;", rid); | |
| 1867 | + while( db_step(&q)==SQLITE_ROW ){ | |
| 1868 | + const char *zUser = db_column_text(&q,0); | |
| 1869 | + const char *zDate = db_column_text(&q,1); | |
| 1870 | + const char *zIp = db_column_text(&q,2); | |
| 1871 | + @ <p>Received on %s(zDate) from %h(zUser) at %h(zIp).</p> | |
| 1872 | + } | |
| 1873 | + db_finalize(&q); | |
| 1874 | + } | |
| 1854 | 1875 | style_submenu_element("Download", "Download", |
| 1855 | 1876 | "%R/raw/%T?name=%s", blob_str(&downloadName), zUuid); |
| 1856 | 1877 | if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){ |
| 1857 | 1878 | style_submenu_element("Check-ins Using", "Check-ins Using", |
| 1858 | 1879 | "%R/timeline?n=200&uf=%s",zUuid); |
| 1859 | 1880 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -1331,15 +1331,15 @@ | |
| 1331 | objType |= OBJTYPE_TICKET; |
| 1332 | }else if( zType[0]=='c' ){ |
| 1333 | @ Manifest of check-in |
| 1334 | objType |= OBJTYPE_CHECKIN; |
| 1335 | }else if( zType[0]=='e' ){ |
| 1336 | @ Instance of event |
| 1337 | objType |= OBJTYPE_EVENT; |
| 1338 | hyperlink_to_event_tagid(db_column_int(&q, 5)); |
| 1339 | }else{ |
| 1340 | @ Control file referencing |
| 1341 | } |
| 1342 | if( zType[0]!='e' ){ |
| 1343 | hyperlink_to_uuid(zUuid); |
| 1344 | } |
| 1345 | @ - %!W(zCom) by |
| @@ -1393,12 +1393,17 @@ | |
| 1393 | blob_append(pDownloadName, zFilename, -1); |
| 1394 | } |
| 1395 | tag_private_status(rid); |
| 1396 | } |
| 1397 | db_finalize(&q); |
| 1398 | if( cnt==0 ){ |
| 1399 | @ Control artifact. |
| 1400 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 1401 | blob_appendf(pDownloadName, "%S.txt", zUuid); |
| 1402 | } |
| 1403 | tag_private_status(rid); |
| 1404 | } |
| @@ -1849,10 +1854,26 @@ | |
| 1849 | }else{ |
| 1850 | @ <h2>Artifact %s(zUuid):</h2> |
| 1851 | } |
| 1852 | blob_zero(&downloadName); |
| 1853 | objType = object_description(rid, objdescFlags, &downloadName); |
| 1854 | style_submenu_element("Download", "Download", |
| 1855 | "%R/raw/%T?name=%s", blob_str(&downloadName), zUuid); |
| 1856 | if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){ |
| 1857 | style_submenu_element("Check-ins Using", "Check-ins Using", |
| 1858 | "%R/timeline?n=200&uf=%s",zUuid); |
| 1859 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -1331,15 +1331,15 @@ | |
| 1331 | objType |= OBJTYPE_TICKET; |
| 1332 | }else if( zType[0]=='c' ){ |
| 1333 | @ Manifest of check-in |
| 1334 | objType |= OBJTYPE_CHECKIN; |
| 1335 | }else if( zType[0]=='e' ){ |
| 1336 | @ Instance of technote |
| 1337 | objType |= OBJTYPE_EVENT; |
| 1338 | hyperlink_to_event_tagid(db_column_int(&q, 5)); |
| 1339 | }else{ |
| 1340 | @ Tag referencing |
| 1341 | } |
| 1342 | if( zType[0]!='e' ){ |
| 1343 | hyperlink_to_uuid(zUuid); |
| 1344 | } |
| 1345 | @ - %!W(zCom) by |
| @@ -1393,12 +1393,17 @@ | |
| 1393 | blob_append(pDownloadName, zFilename, -1); |
| 1394 | } |
| 1395 | tag_private_status(rid); |
| 1396 | } |
| 1397 | db_finalize(&q); |
| 1398 | if( db_exists("SELECT 1 FROM tagxref WHERE rid=%d AND tagid=%d", |
| 1399 | rid, TAG_CLUSTER) ){ |
| 1400 | @ Cluster |
| 1401 | cnt++; |
| 1402 | } |
| 1403 | if( cnt==0 ){ |
| 1404 | @ Unrecognized artifact |
| 1405 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 1406 | blob_appendf(pDownloadName, "%S.txt", zUuid); |
| 1407 | } |
| 1408 | tag_private_status(rid); |
| 1409 | } |
| @@ -1849,10 +1854,26 @@ | |
| 1854 | }else{ |
| 1855 | @ <h2>Artifact %s(zUuid):</h2> |
| 1856 | } |
| 1857 | blob_zero(&downloadName); |
| 1858 | objType = object_description(rid, objdescFlags, &downloadName); |
| 1859 | if( g.perm.Admin ){ |
| 1860 | Stmt q; |
| 1861 | db_prepare(&q, |
| 1862 | "SELECT coalesce(user.login,rcvfrom.uid)," |
| 1863 | " datetime(rcvfrom.mtime), rcvfrom.ipaddr" |
| 1864 | " FROM blob, rcvfrom LEFT JOIN user ON user.uid=rcvfrom.uid" |
| 1865 | " WHERE blob.rid=%d" |
| 1866 | " AND rcvfrom.rcvid=blob.rcvid;", rid); |
| 1867 | while( db_step(&q)==SQLITE_ROW ){ |
| 1868 | const char *zUser = db_column_text(&q,0); |
| 1869 | const char *zDate = db_column_text(&q,1); |
| 1870 | const char *zIp = db_column_text(&q,2); |
| 1871 | @ <p>Received on %s(zDate) from %h(zUser) at %h(zIp).</p> |
| 1872 | } |
| 1873 | db_finalize(&q); |
| 1874 | } |
| 1875 | style_submenu_element("Download", "Download", |
| 1876 | "%R/raw/%T?name=%s", blob_str(&downloadName), zUuid); |
| 1877 | if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){ |
| 1878 | style_submenu_element("Check-ins Using", "Check-ins Using", |
| 1879 | "%R/timeline?n=200&uf=%s",zUuid); |
| 1880 |