Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add the bid= query parameter to the /timeline page. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
8cb1b231dc1cfe6c5ecb914fa1338331 |
User & Date: | drh 2019-01-17 00:20:20 |
Context
2019-01-17
| ||
19:58 | Extended the repo/checkout fingerprint mismatch warning to offer an interim workaround, per forumpost/5f9d4cef56. ... (check-in: bf7c2e94 user: stephan tags: trunk) | |
00:20 | Add the bid= query parameter to the /timeline page. ... (check-in: 8cb1b231 user: drh tags: trunk) | |
2019-01-16
| ||
01:01 | Add an option to preserve newlines as hard line breaks on the www timeline display. ... (check-in: 8af02551 user: drh tags: trunk) | |
Changes
Changes to src/bisect.c.
︙ | ︙ | |||
170 171 172 173 174 175 176 | " || '%d')", rid); } /* ** Create a TEMP table named "bilog" that contains the complete history ** of the current bisect. */ | | | > > > > > > > > > > > > > > > > > > > > > > > | > | 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 | " || '%d')", rid); } /* ** Create a TEMP table named "bilog" that contains the complete history ** of the current bisect. */ int bisect_create_bilog_table(int iCurrent, const char *zDesc){ char *zLog; Blob log, id; Stmt q; int cnt = 0; if( zDesc!=0 ){ blob_init(&log, 0, 0); while( zDesc[0]=='y' || zDesc[0]=='n' ){ int i; char c; int rid; if( blob_size(&log) ) blob_append(&log, " ", 1); if( zDesc[0]=='n' ) blob_append(&log, "-", 1); for(i=1; ((c = zDesc[i])>='0' && c<='9') || (c>='a' && c<='f'); i++){} if( i==1 ) break; rid = db_int(0, "SELECT rid FROM blob" " WHERE uuid LIKE '%.*q%%'" " AND EXISTS(SELECT 1 FROM plink WHERE cid=rid)", i-1, zDesc+1 ); if( rid==0 ) break; blob_appendf(&log, "%d", rid); zDesc += i; } }else{ zLog = db_lget("bisect-log",""); blob_init(&log, zLog, -1); } db_multi_exec( "CREATE TEMP TABLE bilog(" " seq INTEGER PRIMARY KEY," /* Sequence of events */ " stat TEXT," /* Type of occurrence */ " rid INTEGER UNIQUE" /* Check-in number */ ");" ); |
︙ | ︙ | |||
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 | if( iCurrent>0 ){ db_bind_int(&q, ":seq", ++cnt); db_bind_text(&q, ":stat", "CURRENT"); db_bind_int(&q, ":rid", iCurrent); db_step(&q); } db_finalize(&q); } /* ** Show a chart of bisect "good" and "bad" versions. The chart can be ** sorted either chronologically by bisect time, or by check-in time. */ static void bisect_chart(int sortByCkinTime){ Stmt q; int iCurrent = db_lget_int("checkout",0); | > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | if( iCurrent>0 ){ db_bind_int(&q, ":seq", ++cnt); db_bind_text(&q, ":stat", "CURRENT"); db_bind_int(&q, ":rid", iCurrent); db_step(&q); } db_finalize(&q); return 1; } /* Return a permalink description of a bisect. Space is obtained from ** fossil_malloc() and should be freed by the caller. ** ** A bisect description consists of characters 'y' and 'n' and lowercase ** hex digits. Each term begins with 'y' or 'n' (success or failure) and ** is followed by a hash prefix in lowercase hex. */ char *bisect_permalink(void){ char *zLog = db_lget("bisect-log",""); char *zResult; Blob log; Blob link = BLOB_INITIALIZER; Blob id; blob_init(&log, zLog, -1); while( blob_token(&log, &id) ){ int rid = atoi(blob_str(&id)); char *zUuid = db_text(0,"SELECT lower(uuid) FROM blob WHERE rid=%d", rid<0 ? -rid : rid); blob_appendf(&link, "%c%.10s", rid<0 ? 'n' : 'y', zUuid); } zResult = mprintf("%s", blob_str(&link)); blob_reset(&link); blob_reset(&log); blob_reset(&id); return zResult; } /* ** Show a chart of bisect "good" and "bad" versions. The chart can be ** sorted either chronologically by bisect time, or by check-in time. */ static void bisect_chart(int sortByCkinTime){ Stmt q; int iCurrent = db_lget_int("checkout",0); bisect_create_bilog_table(iCurrent, 0); db_prepare(&q, "SELECT bilog.seq, bilog.stat," " substr(blob.uuid,1,16), datetime(event.mtime)," " blob.rid==%d" " FROM bilog, blob, event" " WHERE blob.rid=bilog.rid AND event.objid=bilog.rid" " AND event.type='ci'" |
︙ | ︙ |
Changes to src/timeline.c.
︙ | ︙ | |||
1496 1497 1498 1499 1500 1501 1502 | const char *zDay = P("ymd"); /* Check-ins for the day YYYY-MM-DD */ const char *zNDays = P("days"); /* Show events over the previous N days */ int nDays = 0; /* Numeric value for zNDays */ const char *zChng = P("chng"); /* List of GLOBs for files that changed */ int useDividers = P("nd")==0; /* Show dividers if "nd" is missing */ int renameOnly = P("namechng")!=0; /* Show only check-ins that rename files */ int forkOnly = PB("forks"); /* Show only forks and their children */ | | > | 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 | const char *zDay = P("ymd"); /* Check-ins for the day YYYY-MM-DD */ const char *zNDays = P("days"); /* Show events over the previous N days */ int nDays = 0; /* Numeric value for zNDays */ const char *zChng = P("chng"); /* List of GLOBs for files that changed */ int useDividers = P("nd")==0; /* Show dividers if "nd" is missing */ int renameOnly = P("namechng")!=0; /* Show only check-ins that rename files */ int forkOnly = PB("forks"); /* Show only forks and their children */ int bisectLocal = PB("bisect"); /* Show the check-ins of the bisect */ const char *zBisect = P("bid"); /* Bisect description */ int cpOnly = PB("cherrypicks"); /* Show all cherrypick checkins */ int tmFlags = 0; /* Timeline flags */ const char *zThisTag = 0; /* Suppress links to this tag */ const char *zThisUser = 0; /* Suppress links to this user */ HQuery url; /* URL for various branch links */ int from_rid = name_to_typed_rid(P("from"),"ci"); /* from= for paths */ int to_rid = name_to_typed_rid(P("to"),"ci"); /* to= for path timelines */ |
︙ | ︙ | |||
1556 1557 1558 1559 1560 1561 1562 | */ pd_rid = name_to_typed_rid(P("dp"),"ci"); if( pd_rid ){ p_rid = d_rid = pd_rid; } login_check_credentials(); if( (!g.perm.Read && !g.perm.RdTkt && !g.perm.RdWiki && !g.perm.RdForum) | | | 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 | */ pd_rid = name_to_typed_rid(P("dp"),"ci"); if( pd_rid ){ p_rid = d_rid = pd_rid; } login_check_credentials(); if( (!g.perm.Read && !g.perm.RdTkt && !g.perm.RdWiki && !g.perm.RdForum) || (bisectLocal && !g.perm.Setup) ){ login_needed(g.anon.Read && g.anon.RdTkt && g.anon.RdWiki); return; } cookie_read_parameter("y","y"); zType = P("y"); if( zType==0 ){ |
︙ | ︙ | |||
1684 1685 1686 1687 1688 1689 1690 | " AND pid IN rnfork;", TAG_BRANCH, TAG_BRANCH, TAG_BRANCH, TAG_BRANCH ); tmFlags |= TIMELINE_UNHIDE; zType = "ci"; disableY = 1; } | | > | > > > > > > > > | | 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 | " AND pid IN rnfork;", TAG_BRANCH, TAG_BRANCH, TAG_BRANCH, TAG_BRANCH ); tmFlags |= TIMELINE_UNHIDE; zType = "ci"; disableY = 1; } if( bisectLocal && fossil_strcmp(g.zIpAddr,"127.0.0.1")==0 && db_open_local(0) ){ int iCurrent = db_lget_int("checkout",0); char *zPerm = bisect_permalink(); bisect_create_bilog_table(iCurrent, 0); tmFlags |= TIMELINE_UNHIDE | TIMELINE_BISECT; zType = "ci"; disableY = 1; style_submenu_element("Permalink", "%R/timeline?bid=%z", zPerm); }else{ bisectLocal = 0; } if( zBisect!=0 && bisect_create_bilog_table(0, zBisect) ){ tmFlags |= TIMELINE_UNHIDE | TIMELINE_BISECT; zType = "ci"; disableY = 1; }else{ zBisect = 0; } style_header("Timeline"); if( advancedMenu ){ style_submenu_element("Help", "%R/help?cmd=/timeline"); } login_anonymous_available(); |
︙ | ︙ | |||
1906 1907 1908 1909 1910 1911 1912 | db_multi_exec( "CREATE TABLE IF NOT EXISTS cpnodes(rid INTEGER PRIMARY KEY);" "INSERT OR IGNORE INTO cpnodes SELECT childid FROM cherrypick;" "INSERT OR IGNORE INTO cpnodes SELECT parentid FROM cherrypick;" ); blob_append_sql(&cond, " AND event.objid IN cpnodes "); } | | | 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 | db_multi_exec( "CREATE TABLE IF NOT EXISTS cpnodes(rid INTEGER PRIMARY KEY);" "INSERT OR IGNORE INTO cpnodes SELECT childid FROM cherrypick;" "INSERT OR IGNORE INTO cpnodes SELECT parentid FROM cherrypick;" ); blob_append_sql(&cond, " AND event.objid IN cpnodes "); } if( bisectLocal || zBisect!=0 ){ blob_append_sql(&cond, " AND event.objid IN (SELECT rid FROM bilog) "); } if( zYearMonth ){ blob_append_sql(&cond, " AND %Q=strftime('%%Y-%%m',event.mtime) ", zYearMonth); } else if( zYearWeek ){ |
︙ | ︙ | |||
2153 2154 2155 2156 2157 2158 2159 | blob_appendf(&desc, " that contain filename changes"); tmFlags |= TIMELINE_DISJOINT|TIMELINE_FRENAMES; } if( forkOnly ){ blob_appendf(&desc, " associated with forks"); tmFlags |= TIMELINE_DISJOINT; } | | | | 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 | blob_appendf(&desc, " that contain filename changes"); tmFlags |= TIMELINE_DISJOINT|TIMELINE_FRENAMES; } if( forkOnly ){ blob_appendf(&desc, " associated with forks"); tmFlags |= TIMELINE_DISJOINT; } if( bisectLocal || zBisect!=0 ){ blob_appendf(&desc, " in a bisect"); tmFlags |= TIMELINE_DISJOINT; } if( cpOnly && showCherrypicks ){ blob_appendf(&desc, " that participate in a cherrypick merge"); tmFlags |= TIMELINE_CHPICK|TIMELINE_DISJOINT; } if( zUser ){ |
︙ | ︙ |