Fossil SCM

Switch to time based color hash generation for other pages (brlist, finfo, and info).

andybradford 2025-09-27 16:26 datetime-color-hash
Commit 4a90f3352dc7f49c9b2a69ff6b14685785449a6954369f36c34187f86a585687
3 files changed +6 -2 +5 -2 +2 -1
+6 -2
--- src/branch.c
+++ src/branch.c
@@ -226,10 +226,11 @@
226226
** mergeto Another branch this branch was merged into
227227
** nckin Number of checkins on this branch
228228
** ckin Hash of the last check-in on this branch
229229
** isprivate True if the branch is private
230230
** bgclr Background color for this branch
231
+** rid RID of the last check-in on this branch
231232
*/
232233
static const char createBrlistQuery[] =
233234
@ CREATE TEMP TABLE IF NOT EXISTS tmp_brlist AS
234235
@ SELECT
235236
@ tagxref.value AS name,
@@ -245,11 +246,12 @@
245246
@ AND tagxref.tagid=(SELECT tagid FROM tag WHERE tagname='branch')
246247
@ AND tagtype>0) AS mergeto,
247248
@ count(*) AS nckin,
248249
@ (SELECT uuid FROM blob WHERE rid=tagxref.rid) AS ckin,
249250
@ event.bgcolor AS bgclr,
250
-@ EXISTS(SELECT 1 FROM private WHERE rid=tagxref.rid) AS isprivate
251
+@ EXISTS(SELECT 1 FROM private WHERE rid=tagxref.rid) AS isprivate,
252
+@ event.objid AS rid
251253
@ FROM tagxref, tag, event
252254
@ WHERE tagxref.tagid=tag.tagid
253255
@ AND tagxref.tagtype>0
254256
@ AND tag.tagname='branch'
255257
@ AND event.objid=tagxref.rid
@@ -865,19 +867,21 @@
865867
int isClosed = db_column_int(&q, 2);
866868
const char *zMergeTo = db_column_text(&q, 3);
867869
int nCkin = db_column_int(&q, 4);
868870
const char *zLastCkin = db_column_text(&q, 5);
869871
const char *zBgClr = db_column_text(&q, 6);
872
+ int rid = db_column_int(&q, 8);
873
+ const char *zBrDate = datetime_of_rid(start_of_branch(rid,1));
870874
char *zAge = human_readable_age(rNow - rMtime);
871875
sqlite3_int64 iMtime = (sqlite3_int64)(rMtime*86400.0);
872876
if( zMergeTo && zMergeTo[0]==0 ) zMergeTo = 0;
873877
if( zBgClr ) zBgClr = reasonable_bg_color(zBgClr, 0);
874878
if( zBgClr==0 ){
875879
if( zBranch==0 || strcmp(zBranch,"trunk")==0 ){
876880
zBgClr = 0;
877881
}else{
878
- zBgClr = hash_color(zBranch);
882
+ zBgClr = hash_color(zBrDate);
879883
}
880884
}
881885
if( zBgClr && zBgClr[0] && show_colors ){
882886
@ <tr style="background-color:%s(zBgClr)">
883887
}else{
884888
--- src/branch.c
+++ src/branch.c
@@ -226,10 +226,11 @@
226 ** mergeto Another branch this branch was merged into
227 ** nckin Number of checkins on this branch
228 ** ckin Hash of the last check-in on this branch
229 ** isprivate True if the branch is private
230 ** bgclr Background color for this branch
 
231 */
232 static const char createBrlistQuery[] =
233 @ CREATE TEMP TABLE IF NOT EXISTS tmp_brlist AS
234 @ SELECT
235 @ tagxref.value AS name,
@@ -245,11 +246,12 @@
245 @ AND tagxref.tagid=(SELECT tagid FROM tag WHERE tagname='branch')
246 @ AND tagtype>0) AS mergeto,
247 @ count(*) AS nckin,
248 @ (SELECT uuid FROM blob WHERE rid=tagxref.rid) AS ckin,
249 @ event.bgcolor AS bgclr,
250 @ EXISTS(SELECT 1 FROM private WHERE rid=tagxref.rid) AS isprivate
 
251 @ FROM tagxref, tag, event
252 @ WHERE tagxref.tagid=tag.tagid
253 @ AND tagxref.tagtype>0
254 @ AND tag.tagname='branch'
255 @ AND event.objid=tagxref.rid
@@ -865,19 +867,21 @@
865 int isClosed = db_column_int(&q, 2);
866 const char *zMergeTo = db_column_text(&q, 3);
867 int nCkin = db_column_int(&q, 4);
868 const char *zLastCkin = db_column_text(&q, 5);
869 const char *zBgClr = db_column_text(&q, 6);
 
 
870 char *zAge = human_readable_age(rNow - rMtime);
871 sqlite3_int64 iMtime = (sqlite3_int64)(rMtime*86400.0);
872 if( zMergeTo && zMergeTo[0]==0 ) zMergeTo = 0;
873 if( zBgClr ) zBgClr = reasonable_bg_color(zBgClr, 0);
874 if( zBgClr==0 ){
875 if( zBranch==0 || strcmp(zBranch,"trunk")==0 ){
876 zBgClr = 0;
877 }else{
878 zBgClr = hash_color(zBranch);
879 }
880 }
881 if( zBgClr && zBgClr[0] && show_colors ){
882 @ <tr style="background-color:%s(zBgClr)">
883 }else{
884
--- src/branch.c
+++ src/branch.c
@@ -226,10 +226,11 @@
226 ** mergeto Another branch this branch was merged into
227 ** nckin Number of checkins on this branch
228 ** ckin Hash of the last check-in on this branch
229 ** isprivate True if the branch is private
230 ** bgclr Background color for this branch
231 ** rid RID of the last check-in on this branch
232 */
233 static const char createBrlistQuery[] =
234 @ CREATE TEMP TABLE IF NOT EXISTS tmp_brlist AS
235 @ SELECT
236 @ tagxref.value AS name,
@@ -245,11 +246,12 @@
246 @ AND tagxref.tagid=(SELECT tagid FROM tag WHERE tagname='branch')
247 @ AND tagtype>0) AS mergeto,
248 @ count(*) AS nckin,
249 @ (SELECT uuid FROM blob WHERE rid=tagxref.rid) AS ckin,
250 @ event.bgcolor AS bgclr,
251 @ EXISTS(SELECT 1 FROM private WHERE rid=tagxref.rid) AS isprivate,
252 @ event.objid AS rid
253 @ FROM tagxref, tag, event
254 @ WHERE tagxref.tagid=tag.tagid
255 @ AND tagxref.tagtype>0
256 @ AND tag.tagname='branch'
257 @ AND event.objid=tagxref.rid
@@ -865,19 +867,21 @@
867 int isClosed = db_column_int(&q, 2);
868 const char *zMergeTo = db_column_text(&q, 3);
869 int nCkin = db_column_int(&q, 4);
870 const char *zLastCkin = db_column_text(&q, 5);
871 const char *zBgClr = db_column_text(&q, 6);
872 int rid = db_column_int(&q, 8);
873 const char *zBrDate = datetime_of_rid(start_of_branch(rid,1));
874 char *zAge = human_readable_age(rNow - rMtime);
875 sqlite3_int64 iMtime = (sqlite3_int64)(rMtime*86400.0);
876 if( zMergeTo && zMergeTo[0]==0 ) zMergeTo = 0;
877 if( zBgClr ) zBgClr = reasonable_bg_color(zBgClr, 0);
878 if( zBgClr==0 ){
879 if( zBranch==0 || strcmp(zBranch,"trunk")==0 ){
880 zBgClr = 0;
881 }else{
882 zBgClr = hash_color(zBrDate);
883 }
884 }
885 if( zBgClr && zBgClr[0] && show_colors ){
886 @ <tr style="background-color:%s(zBgClr)">
887 }else{
888
+5 -2
--- src/finfo.c
+++ src/finfo.c
@@ -488,11 +488,12 @@
488488
" AND tagxref.rid=mlink.mid),\n" /* Branchname */
489489
" mlink.mid,\n" /* check-in ID */
490490
" mlink.pfnid,\n" /* Previous filename */
491491
" blob.size,\n" /* File size */
492492
" mlink.fnid,\n" /* Current filename */
493
- " filename.name\n" /* Current filename */
493
+ " filename.name,\n" /* Current filename */
494
+ " event.objid AS rid\n" /* RID for event */
494495
"FROM clade CROSS JOIN mlink, event"
495496
" LEFT JOIN blob ON blob.rid=clade.fid"
496497
" LEFT JOIN filename ON filename.fnid=clade.fnid\n"
497498
"WHERE mlink.fnid=clade.fnid AND mlink.fid=clade.fid\n"
498499
" AND event.objid=mlink.mid\n",
@@ -617,10 +618,12 @@
617618
int fmid = db_column_int(&q, 10);
618619
int pfnid = db_column_int(&q, 11);
619620
int szFile = db_column_int(&q, 12);
620621
int fnid = db_column_int(&q, 13);
621622
const char *zFName = db_column_text(&q,14);
623
+ int rid = db_column_int(&q, 15);
624
+ const char *zBrDate = datetime_of_rid(start_of_branch(rid,1));
622625
int gidx;
623626
char zTime[10];
624627
int nParent = 0;
625628
int bIsModified = 0;
626629
GraphRowId aParent[GR_MAX_RAIL];
@@ -635,11 +638,11 @@
635638
db_reset(&qparent);
636639
if( zBr==0 ) zBr = "trunk";
637640
if( uBg ){
638641
zBgClr = user_color(zUser);
639642
}else if( brBg || zBgClr==0 || zBgClr[0]==0 ){
640
- zBgClr = strcmp(zBr,"trunk")==0 ? "" : hash_color(zBr);
643
+ zBgClr = strcmp(zBr,"trunk")==0 ? "" : hash_color(zBrDate);
641644
}else if( zBgClr ){
642645
zBgClr = reasonable_bg_color(zBgClr,0);
643646
}
644647
gidx = graph_add_row(pGraph,
645648
frid>0 ? (GraphRowId)frid*(mxfnid+1)+fnid : fpid+1000000000,
646649
--- src/finfo.c
+++ src/finfo.c
@@ -488,11 +488,12 @@
488 " AND tagxref.rid=mlink.mid),\n" /* Branchname */
489 " mlink.mid,\n" /* check-in ID */
490 " mlink.pfnid,\n" /* Previous filename */
491 " blob.size,\n" /* File size */
492 " mlink.fnid,\n" /* Current filename */
493 " filename.name\n" /* Current filename */
 
494 "FROM clade CROSS JOIN mlink, event"
495 " LEFT JOIN blob ON blob.rid=clade.fid"
496 " LEFT JOIN filename ON filename.fnid=clade.fnid\n"
497 "WHERE mlink.fnid=clade.fnid AND mlink.fid=clade.fid\n"
498 " AND event.objid=mlink.mid\n",
@@ -617,10 +618,12 @@
617 int fmid = db_column_int(&q, 10);
618 int pfnid = db_column_int(&q, 11);
619 int szFile = db_column_int(&q, 12);
620 int fnid = db_column_int(&q, 13);
621 const char *zFName = db_column_text(&q,14);
 
 
622 int gidx;
623 char zTime[10];
624 int nParent = 0;
625 int bIsModified = 0;
626 GraphRowId aParent[GR_MAX_RAIL];
@@ -635,11 +638,11 @@
635 db_reset(&qparent);
636 if( zBr==0 ) zBr = "trunk";
637 if( uBg ){
638 zBgClr = user_color(zUser);
639 }else if( brBg || zBgClr==0 || zBgClr[0]==0 ){
640 zBgClr = strcmp(zBr,"trunk")==0 ? "" : hash_color(zBr);
641 }else if( zBgClr ){
642 zBgClr = reasonable_bg_color(zBgClr,0);
643 }
644 gidx = graph_add_row(pGraph,
645 frid>0 ? (GraphRowId)frid*(mxfnid+1)+fnid : fpid+1000000000,
646
--- src/finfo.c
+++ src/finfo.c
@@ -488,11 +488,12 @@
488 " AND tagxref.rid=mlink.mid),\n" /* Branchname */
489 " mlink.mid,\n" /* check-in ID */
490 " mlink.pfnid,\n" /* Previous filename */
491 " blob.size,\n" /* File size */
492 " mlink.fnid,\n" /* Current filename */
493 " filename.name,\n" /* Current filename */
494 " event.objid AS rid\n" /* RID for event */
495 "FROM clade CROSS JOIN mlink, event"
496 " LEFT JOIN blob ON blob.rid=clade.fid"
497 " LEFT JOIN filename ON filename.fnid=clade.fnid\n"
498 "WHERE mlink.fnid=clade.fnid AND mlink.fid=clade.fid\n"
499 " AND event.objid=mlink.mid\n",
@@ -617,10 +618,12 @@
618 int fmid = db_column_int(&q, 10);
619 int pfnid = db_column_int(&q, 11);
620 int szFile = db_column_int(&q, 12);
621 int fnid = db_column_int(&q, 13);
622 const char *zFName = db_column_text(&q,14);
623 int rid = db_column_int(&q, 15);
624 const char *zBrDate = datetime_of_rid(start_of_branch(rid,1));
625 int gidx;
626 char zTime[10];
627 int nParent = 0;
628 int bIsModified = 0;
629 GraphRowId aParent[GR_MAX_RAIL];
@@ -635,11 +638,11 @@
638 db_reset(&qparent);
639 if( zBr==0 ) zBr = "trunk";
640 if( uBg ){
641 zBgClr = user_color(zUser);
642 }else if( brBg || zBgClr==0 || zBgClr[0]==0 ){
643 zBgClr = strcmp(zBr,"trunk")==0 ? "" : hash_color(zBrDate);
644 }else if( zBgClr ){
645 zBgClr = reasonable_bg_color(zBgClr,0);
646 }
647 gidx = graph_add_row(pGraph,
648 frid>0 ? (GraphRowId)frid*(mxfnid+1)+fnid : fpid+1000000000,
649
+2 -1
--- src/info.c
+++ src/info.c
@@ -3728,10 +3728,11 @@
37283728
style_header("Edit Check-in [%s]", zUuid);
37293729
if( P("preview") ){
37303730
Blob suffix;
37313731
int nTag = 0;
37323732
const char *zDplyBr; /* Branch name used to determine BG color */
3733
+ const char *zBrDate = datetime_of_rid(start_of_branch(rid,1));
37333734
if( zNewBrFlag[0] && zNewBranch[0] ){
37343735
zDplyBr = zNewBranch;
37353736
}else{
37363737
zDplyBr = zBranchName;
37373738
}
@@ -3741,11 +3742,11 @@
37413742
if( zNewColorFlag[0] && zNewColor && zNewColor[0] ){
37423743
@ <tr><td style="background-color:%h(reasonable_bg_color(zNewColor,0));">
37433744
}else if( zColor[0] ){
37443745
@ <tr><td style="background-color:%h(reasonable_bg_color(zColor,0));">
37453746
}else if( zDplyBr && fossil_strcmp(zDplyBr,"trunk")!=0 ){
3746
- @ <tr><td style="background-color:%h(hash_color(zDplyBr));">
3747
+ @ <tr><td style="background-color:%h(hash_color(zBrDate));">
37473748
}else{
37483749
@ <tr><td>
37493750
}
37503751
@ %!W(blob_str(&comment))
37513752
blob_zero(&suffix);
37523753
--- src/info.c
+++ src/info.c
@@ -3728,10 +3728,11 @@
3728 style_header("Edit Check-in [%s]", zUuid);
3729 if( P("preview") ){
3730 Blob suffix;
3731 int nTag = 0;
3732 const char *zDplyBr; /* Branch name used to determine BG color */
 
3733 if( zNewBrFlag[0] && zNewBranch[0] ){
3734 zDplyBr = zNewBranch;
3735 }else{
3736 zDplyBr = zBranchName;
3737 }
@@ -3741,11 +3742,11 @@
3741 if( zNewColorFlag[0] && zNewColor && zNewColor[0] ){
3742 @ <tr><td style="background-color:%h(reasonable_bg_color(zNewColor,0));">
3743 }else if( zColor[0] ){
3744 @ <tr><td style="background-color:%h(reasonable_bg_color(zColor,0));">
3745 }else if( zDplyBr && fossil_strcmp(zDplyBr,"trunk")!=0 ){
3746 @ <tr><td style="background-color:%h(hash_color(zDplyBr));">
3747 }else{
3748 @ <tr><td>
3749 }
3750 @ %!W(blob_str(&comment))
3751 blob_zero(&suffix);
3752
--- src/info.c
+++ src/info.c
@@ -3728,10 +3728,11 @@
3728 style_header("Edit Check-in [%s]", zUuid);
3729 if( P("preview") ){
3730 Blob suffix;
3731 int nTag = 0;
3732 const char *zDplyBr; /* Branch name used to determine BG color */
3733 const char *zBrDate = datetime_of_rid(start_of_branch(rid,1));
3734 if( zNewBrFlag[0] && zNewBranch[0] ){
3735 zDplyBr = zNewBranch;
3736 }else{
3737 zDplyBr = zBranchName;
3738 }
@@ -3741,11 +3742,11 @@
3742 if( zNewColorFlag[0] && zNewColor && zNewColor[0] ){
3743 @ <tr><td style="background-color:%h(reasonable_bg_color(zNewColor,0));">
3744 }else if( zColor[0] ){
3745 @ <tr><td style="background-color:%h(reasonable_bg_color(zColor,0));">
3746 }else if( zDplyBr && fossil_strcmp(zDplyBr,"trunk")!=0 ){
3747 @ <tr><td style="background-color:%h(hash_color(zBrDate));">
3748 }else{
3749 @ <tr><td>
3750 }
3751 @ %!W(blob_str(&comment))
3752 blob_zero(&suffix);
3753

Keyboard Shortcuts

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