Fossil SCM
Add the "unclustered" query parameter to /bloblist.
Commit
9859eb0308cf63cfab44a95fde71d43a3108e0f0dff44d764a7ec0677a04c3b3
Parent
64ab7d7f2888a27…
1 file changed
+13
-2
+13
-2
| --- src/name.c | ||
| +++ src/name.c | ||
| @@ -1687,10 +1687,11 @@ | ||
| 1687 | 1687 | int mx = db_int(0, "SELECT max(rid) FROM blob"); |
| 1688 | 1688 | int privOnly = PB("priv"); |
| 1689 | 1689 | int phantomOnly = PB("phan"); |
| 1690 | 1690 | int hashClr = PB("hclr"); |
| 1691 | 1691 | int bRecent = PB("recent"); |
| 1692 | + int bUnclst = PB("unclustered"); | |
| 1692 | 1693 | char *zRange; |
| 1693 | 1694 | char *zSha1Bg; |
| 1694 | 1695 | char *zSha3Bg; |
| 1695 | 1696 | |
| 1696 | 1697 | login_check_credentials(); |
| @@ -1699,10 +1700,13 @@ | ||
| 1699 | 1700 | style_header("List Of Artifacts"); |
| 1700 | 1701 | style_submenu_element("250 Largest", "bigbloblist"); |
| 1701 | 1702 | if( bRecent==0 || n!=250 ){ |
| 1702 | 1703 | style_submenu_element("Recent","bloblist?n=250&recent"); |
| 1703 | 1704 | } |
| 1705 | + if( bUnclst==0 ){ | |
| 1706 | + style_submenu_element("Unclustered","bloblist?unclustered"); | |
| 1707 | + } | |
| 1704 | 1708 | if( g.perm.Admin ){ |
| 1705 | 1709 | style_submenu_element("Artifact Log", "rcvfromlist"); |
| 1706 | 1710 | } |
| 1707 | 1711 | if( !phantomOnly ){ |
| 1708 | 1712 | style_submenu_element("Phantoms", "bloblist?phan"); |
| @@ -1716,31 +1720,38 @@ | ||
| 1716 | 1720 | privOnly = 0; |
| 1717 | 1721 | } |
| 1718 | 1722 | if( g.perm.Write ){ |
| 1719 | 1723 | style_submenu_element("Artifact Stats", "artifact_stats"); |
| 1720 | 1724 | } |
| 1721 | - if( !privOnly && !phantomOnly && mx>n && P("s")==0 && !bRecent ){ | |
| 1725 | + if( !privOnly && !phantomOnly && mx>n && P("s")==0 && !bRecent && !bUnclst ){ | |
| 1722 | 1726 | int i; |
| 1723 | 1727 | @ <p>Select a range of artifacts to view:</p> |
| 1724 | 1728 | @ <ul> |
| 1725 | 1729 | for(i=1; i<=mx; i+=n){ |
| 1726 | 1730 | @ <li> %z(href("%R/bloblist?s=%d&n=%d",i,n)) |
| 1727 | 1731 | @ %d(i)..%d(i+n-1<mx?i+n-1:mx)</a> |
| 1728 | 1732 | } |
| 1729 | 1733 | @ <li> %z(href("%R/bloblist?n=250&recent"))250 most recent</a> |
| 1734 | + @ <li> %z(href("%R/bloblist?unclustered"))All unclustered</a> | |
| 1730 | 1735 | @ </ul> |
| 1731 | 1736 | style_finish_page(); |
| 1732 | 1737 | return; |
| 1733 | 1738 | } |
| 1734 | 1739 | if( phantomOnly || privOnly || mx>n ){ |
| 1735 | 1740 | style_submenu_element("Index", "bloblist"); |
| 1736 | 1741 | } |
| 1737 | 1742 | if( privOnly ){ |
| 1743 | + @ <h2>Private Artifacts</h2> | |
| 1738 | 1744 | zRange = mprintf("IN private"); |
| 1739 | 1745 | }else if( phantomOnly ){ |
| 1746 | + @ <h2>Phantom Artifacts</h2> | |
| 1740 | 1747 | zRange = mprintf("IN phantom"); |
| 1748 | + }else if( bUnclst ){ | |
| 1749 | + @ <h2>Unclustered Artifacts</h2> | |
| 1750 | + zRange = mprintf("IN unclustered"); | |
| 1741 | 1751 | }else if( bRecent ){ |
| 1752 | + @ <h2>%d(n) Most Recent Artifacts</h2> | |
| 1742 | 1753 | zRange = mprintf(">=(SELECT rid FROM blob" |
| 1743 | 1754 | " ORDER BY rid DESC LIMIT 1 OFFSET %d)",n); |
| 1744 | 1755 | }else{ |
| 1745 | 1756 | zRange = mprintf("BETWEEN %d AND %d", s, s+n-1); |
| 1746 | 1757 | } |
| @@ -1747,11 +1758,11 @@ | ||
| 1747 | 1758 | describe_artifacts(zRange); |
| 1748 | 1759 | fossil_free(zRange); |
| 1749 | 1760 | db_prepare(&q, |
| 1750 | 1761 | "SELECT rid, uuid, summary, isPrivate, type='phantom', rcvid, ref" |
| 1751 | 1762 | " FROM description ORDER BY rid %s", |
| 1752 | - (bRecent?"DESC":"ASC")/*safe-for-%s*/ | |
| 1763 | + ((bRecent||bUnclst)?"DESC":"ASC")/*safe-for-%s*/ | |
| 1753 | 1764 | ); |
| 1754 | 1765 | if( skin_detail_boolean("white-foreground") ){ |
| 1755 | 1766 | zSha1Bg = "#714417"; |
| 1756 | 1767 | zSha3Bg = "#177117"; |
| 1757 | 1768 | }else{ |
| 1758 | 1769 |
| --- src/name.c | |
| +++ src/name.c | |
| @@ -1687,10 +1687,11 @@ | |
| 1687 | int mx = db_int(0, "SELECT max(rid) FROM blob"); |
| 1688 | int privOnly = PB("priv"); |
| 1689 | int phantomOnly = PB("phan"); |
| 1690 | int hashClr = PB("hclr"); |
| 1691 | int bRecent = PB("recent"); |
| 1692 | char *zRange; |
| 1693 | char *zSha1Bg; |
| 1694 | char *zSha3Bg; |
| 1695 | |
| 1696 | login_check_credentials(); |
| @@ -1699,10 +1700,13 @@ | |
| 1699 | style_header("List Of Artifacts"); |
| 1700 | style_submenu_element("250 Largest", "bigbloblist"); |
| 1701 | if( bRecent==0 || n!=250 ){ |
| 1702 | style_submenu_element("Recent","bloblist?n=250&recent"); |
| 1703 | } |
| 1704 | if( g.perm.Admin ){ |
| 1705 | style_submenu_element("Artifact Log", "rcvfromlist"); |
| 1706 | } |
| 1707 | if( !phantomOnly ){ |
| 1708 | style_submenu_element("Phantoms", "bloblist?phan"); |
| @@ -1716,31 +1720,38 @@ | |
| 1716 | privOnly = 0; |
| 1717 | } |
| 1718 | if( g.perm.Write ){ |
| 1719 | style_submenu_element("Artifact Stats", "artifact_stats"); |
| 1720 | } |
| 1721 | if( !privOnly && !phantomOnly && mx>n && P("s")==0 && !bRecent ){ |
| 1722 | int i; |
| 1723 | @ <p>Select a range of artifacts to view:</p> |
| 1724 | @ <ul> |
| 1725 | for(i=1; i<=mx; i+=n){ |
| 1726 | @ <li> %z(href("%R/bloblist?s=%d&n=%d",i,n)) |
| 1727 | @ %d(i)..%d(i+n-1<mx?i+n-1:mx)</a> |
| 1728 | } |
| 1729 | @ <li> %z(href("%R/bloblist?n=250&recent"))250 most recent</a> |
| 1730 | @ </ul> |
| 1731 | style_finish_page(); |
| 1732 | return; |
| 1733 | } |
| 1734 | if( phantomOnly || privOnly || mx>n ){ |
| 1735 | style_submenu_element("Index", "bloblist"); |
| 1736 | } |
| 1737 | if( privOnly ){ |
| 1738 | zRange = mprintf("IN private"); |
| 1739 | }else if( phantomOnly ){ |
| 1740 | zRange = mprintf("IN phantom"); |
| 1741 | }else if( bRecent ){ |
| 1742 | zRange = mprintf(">=(SELECT rid FROM blob" |
| 1743 | " ORDER BY rid DESC LIMIT 1 OFFSET %d)",n); |
| 1744 | }else{ |
| 1745 | zRange = mprintf("BETWEEN %d AND %d", s, s+n-1); |
| 1746 | } |
| @@ -1747,11 +1758,11 @@ | |
| 1747 | describe_artifacts(zRange); |
| 1748 | fossil_free(zRange); |
| 1749 | db_prepare(&q, |
| 1750 | "SELECT rid, uuid, summary, isPrivate, type='phantom', rcvid, ref" |
| 1751 | " FROM description ORDER BY rid %s", |
| 1752 | (bRecent?"DESC":"ASC")/*safe-for-%s*/ |
| 1753 | ); |
| 1754 | if( skin_detail_boolean("white-foreground") ){ |
| 1755 | zSha1Bg = "#714417"; |
| 1756 | zSha3Bg = "#177117"; |
| 1757 | }else{ |
| 1758 |
| --- src/name.c | |
| +++ src/name.c | |
| @@ -1687,10 +1687,11 @@ | |
| 1687 | int mx = db_int(0, "SELECT max(rid) FROM blob"); |
| 1688 | int privOnly = PB("priv"); |
| 1689 | int phantomOnly = PB("phan"); |
| 1690 | int hashClr = PB("hclr"); |
| 1691 | int bRecent = PB("recent"); |
| 1692 | int bUnclst = PB("unclustered"); |
| 1693 | char *zRange; |
| 1694 | char *zSha1Bg; |
| 1695 | char *zSha3Bg; |
| 1696 | |
| 1697 | login_check_credentials(); |
| @@ -1699,10 +1700,13 @@ | |
| 1700 | style_header("List Of Artifacts"); |
| 1701 | style_submenu_element("250 Largest", "bigbloblist"); |
| 1702 | if( bRecent==0 || n!=250 ){ |
| 1703 | style_submenu_element("Recent","bloblist?n=250&recent"); |
| 1704 | } |
| 1705 | if( bUnclst==0 ){ |
| 1706 | style_submenu_element("Unclustered","bloblist?unclustered"); |
| 1707 | } |
| 1708 | if( g.perm.Admin ){ |
| 1709 | style_submenu_element("Artifact Log", "rcvfromlist"); |
| 1710 | } |
| 1711 | if( !phantomOnly ){ |
| 1712 | style_submenu_element("Phantoms", "bloblist?phan"); |
| @@ -1716,31 +1720,38 @@ | |
| 1720 | privOnly = 0; |
| 1721 | } |
| 1722 | if( g.perm.Write ){ |
| 1723 | style_submenu_element("Artifact Stats", "artifact_stats"); |
| 1724 | } |
| 1725 | if( !privOnly && !phantomOnly && mx>n && P("s")==0 && !bRecent && !bUnclst ){ |
| 1726 | int i; |
| 1727 | @ <p>Select a range of artifacts to view:</p> |
| 1728 | @ <ul> |
| 1729 | for(i=1; i<=mx; i+=n){ |
| 1730 | @ <li> %z(href("%R/bloblist?s=%d&n=%d",i,n)) |
| 1731 | @ %d(i)..%d(i+n-1<mx?i+n-1:mx)</a> |
| 1732 | } |
| 1733 | @ <li> %z(href("%R/bloblist?n=250&recent"))250 most recent</a> |
| 1734 | @ <li> %z(href("%R/bloblist?unclustered"))All unclustered</a> |
| 1735 | @ </ul> |
| 1736 | style_finish_page(); |
| 1737 | return; |
| 1738 | } |
| 1739 | if( phantomOnly || privOnly || mx>n ){ |
| 1740 | style_submenu_element("Index", "bloblist"); |
| 1741 | } |
| 1742 | if( privOnly ){ |
| 1743 | @ <h2>Private Artifacts</h2> |
| 1744 | zRange = mprintf("IN private"); |
| 1745 | }else if( phantomOnly ){ |
| 1746 | @ <h2>Phantom Artifacts</h2> |
| 1747 | zRange = mprintf("IN phantom"); |
| 1748 | }else if( bUnclst ){ |
| 1749 | @ <h2>Unclustered Artifacts</h2> |
| 1750 | zRange = mprintf("IN unclustered"); |
| 1751 | }else if( bRecent ){ |
| 1752 | @ <h2>%d(n) Most Recent Artifacts</h2> |
| 1753 | zRange = mprintf(">=(SELECT rid FROM blob" |
| 1754 | " ORDER BY rid DESC LIMIT 1 OFFSET %d)",n); |
| 1755 | }else{ |
| 1756 | zRange = mprintf("BETWEEN %d AND %d", s, s+n-1); |
| 1757 | } |
| @@ -1747,11 +1758,11 @@ | |
| 1758 | describe_artifacts(zRange); |
| 1759 | fossil_free(zRange); |
| 1760 | db_prepare(&q, |
| 1761 | "SELECT rid, uuid, summary, isPrivate, type='phantom', rcvid, ref" |
| 1762 | " FROM description ORDER BY rid %s", |
| 1763 | ((bRecent||bUnclst)?"DESC":"ASC")/*safe-for-%s*/ |
| 1764 | ); |
| 1765 | if( skin_detail_boolean("white-foreground") ){ |
| 1766 | zSha1Bg = "#714417"; |
| 1767 | zSha3Bg = "#177117"; |
| 1768 | }else{ |
| 1769 |