Fossil SCM

Add the "unclustered" query parameter to /bloblist.

drh 2024-12-20 19:07 trunk
Commit 9859eb0308cf63cfab44a95fde71d43a3108e0f0dff44d764a7ec0677a04c3b3
1 file changed +13 -2
+13 -2
--- src/name.c
+++ src/name.c
@@ -1687,10 +1687,11 @@
16871687
int mx = db_int(0, "SELECT max(rid) FROM blob");
16881688
int privOnly = PB("priv");
16891689
int phantomOnly = PB("phan");
16901690
int hashClr = PB("hclr");
16911691
int bRecent = PB("recent");
1692
+ int bUnclst = PB("unclustered");
16921693
char *zRange;
16931694
char *zSha1Bg;
16941695
char *zSha3Bg;
16951696
16961697
login_check_credentials();
@@ -1699,10 +1700,13 @@
16991700
style_header("List Of Artifacts");
17001701
style_submenu_element("250 Largest", "bigbloblist");
17011702
if( bRecent==0 || n!=250 ){
17021703
style_submenu_element("Recent","bloblist?n=250&recent");
17031704
}
1705
+ if( bUnclst==0 ){
1706
+ style_submenu_element("Unclustered","bloblist?unclustered");
1707
+ }
17041708
if( g.perm.Admin ){
17051709
style_submenu_element("Artifact Log", "rcvfromlist");
17061710
}
17071711
if( !phantomOnly ){
17081712
style_submenu_element("Phantoms", "bloblist?phan");
@@ -1716,31 +1720,38 @@
17161720
privOnly = 0;
17171721
}
17181722
if( g.perm.Write ){
17191723
style_submenu_element("Artifact Stats", "artifact_stats");
17201724
}
1721
- if( !privOnly && !phantomOnly && mx>n && P("s")==0 && !bRecent ){
1725
+ if( !privOnly && !phantomOnly && mx>n && P("s")==0 && !bRecent && !bUnclst ){
17221726
int i;
17231727
@ <p>Select a range of artifacts to view:</p>
17241728
@ <ul>
17251729
for(i=1; i<=mx; i+=n){
17261730
@ <li> %z(href("%R/bloblist?s=%d&n=%d",i,n))
17271731
@ %d(i)..%d(i+n-1<mx?i+n-1:mx)</a>
17281732
}
17291733
@ <li> %z(href("%R/bloblist?n=250&recent"))250 most recent</a>
1734
+ @ <li> %z(href("%R/bloblist?unclustered"))All unclustered</a>
17301735
@ </ul>
17311736
style_finish_page();
17321737
return;
17331738
}
17341739
if( phantomOnly || privOnly || mx>n ){
17351740
style_submenu_element("Index", "bloblist");
17361741
}
17371742
if( privOnly ){
1743
+ @ <h2>Private Artifacts</h2>
17381744
zRange = mprintf("IN private");
17391745
}else if( phantomOnly ){
1746
+ @ <h2>Phantom Artifacts</h2>
17401747
zRange = mprintf("IN phantom");
1748
+ }else if( bUnclst ){
1749
+ @ <h2>Unclustered Artifacts</h2>
1750
+ zRange = mprintf("IN unclustered");
17411751
}else if( bRecent ){
1752
+ @ <h2>%d(n) Most Recent Artifacts</h2>
17421753
zRange = mprintf(">=(SELECT rid FROM blob"
17431754
" ORDER BY rid DESC LIMIT 1 OFFSET %d)",n);
17441755
}else{
17451756
zRange = mprintf("BETWEEN %d AND %d", s, s+n-1);
17461757
}
@@ -1747,11 +1758,11 @@
17471758
describe_artifacts(zRange);
17481759
fossil_free(zRange);
17491760
db_prepare(&q,
17501761
"SELECT rid, uuid, summary, isPrivate, type='phantom', rcvid, ref"
17511762
" FROM description ORDER BY rid %s",
1752
- (bRecent?"DESC":"ASC")/*safe-for-%s*/
1763
+ ((bRecent||bUnclst)?"DESC":"ASC")/*safe-for-%s*/
17531764
);
17541765
if( skin_detail_boolean("white-foreground") ){
17551766
zSha1Bg = "#714417";
17561767
zSha3Bg = "#177117";
17571768
}else{
17581769
--- 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

Keyboard Shortcuts

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