Fossil SCM

Minor bug in handling of "fco" parameter in finfo page, only noticable with multiple buttons. Add more "Unhide" buttons to various timeline page variants. Add "unhide" options from various info page links, which could point to hidden information.

jan.nijtmans 2013-12-24 11:41 trunk
Commit 71aa33cd92f73853faa9a85c9f86f8fa9354f927
3 files changed +2 -2 +5 -5 +19 -3
+2 -2
--- src/finfo.c
+++ src/finfo.c
@@ -294,11 +294,11 @@
294294
url_initialize(&url, "finfo");
295295
if( brBg ) url_add_parameter(&url, "brbg", 0);
296296
if( uBg ) url_add_parameter(&url, "ubg", 0);
297297
baseCheckin = name_to_rid_www("ci");
298298
if( baseCheckin ) firstChngOnly = 1;
299
- if( firstChngOnly ) url_add_parameter(&url, "fco", "0");
299
+ if( !firstChngOnly ) url_add_parameter(&url, "fco", "0");
300300
301301
zPrevDate[0] = 0;
302302
zFilename = PD("name","");
303303
url_add_parameter(&url, "name", zFilename);
304304
blob_zero(&sql);
@@ -362,11 +362,11 @@
362362
style_submenu_element("Full", "Show all changes","%s",
363363
url_render(&url, "fco", "0", 0, 0));
364364
}else{
365365
style_submenu_element("Simplified",
366366
"Show only first use of a change","%s",
367
- url_render(&url, "fco", "1", 0, 0));
367
+ url_render(&url, "fco", 0, 0, 0));
368368
}
369369
}
370370
db_prepare(&q, blob_str(&sql));
371371
if( P("showsql")!=0 ){
372372
@ <p>SQL: %h(blob_str(&sql))</p>
373373
--- src/finfo.c
+++ src/finfo.c
@@ -294,11 +294,11 @@
294 url_initialize(&url, "finfo");
295 if( brBg ) url_add_parameter(&url, "brbg", 0);
296 if( uBg ) url_add_parameter(&url, "ubg", 0);
297 baseCheckin = name_to_rid_www("ci");
298 if( baseCheckin ) firstChngOnly = 1;
299 if( firstChngOnly ) url_add_parameter(&url, "fco", "0");
300
301 zPrevDate[0] = 0;
302 zFilename = PD("name","");
303 url_add_parameter(&url, "name", zFilename);
304 blob_zero(&sql);
@@ -362,11 +362,11 @@
362 style_submenu_element("Full", "Show all changes","%s",
363 url_render(&url, "fco", "0", 0, 0));
364 }else{
365 style_submenu_element("Simplified",
366 "Show only first use of a change","%s",
367 url_render(&url, "fco", "1", 0, 0));
368 }
369 }
370 db_prepare(&q, blob_str(&sql));
371 if( P("showsql")!=0 ){
372 @ <p>SQL: %h(blob_str(&sql))</p>
373
--- src/finfo.c
+++ src/finfo.c
@@ -294,11 +294,11 @@
294 url_initialize(&url, "finfo");
295 if( brBg ) url_add_parameter(&url, "brbg", 0);
296 if( uBg ) url_add_parameter(&url, "ubg", 0);
297 baseCheckin = name_to_rid_www("ci");
298 if( baseCheckin ) firstChngOnly = 1;
299 if( !firstChngOnly ) url_add_parameter(&url, "fco", "0");
300
301 zPrevDate[0] = 0;
302 zFilename = PD("name","");
303 url_add_parameter(&url, "name", zFilename);
304 blob_zero(&sql);
@@ -362,11 +362,11 @@
362 style_submenu_element("Full", "Show all changes","%s",
363 url_render(&url, "fco", "0", 0, 0));
364 }else{
365 style_submenu_element("Simplified",
366 "Show only first use of a change","%s",
367 url_render(&url, "fco", 0, 0, 0));
368 }
369 }
370 db_prepare(&q, blob_str(&sql));
371 if( P("showsql")!=0 ){
372 @ <p>SQL: %h(blob_str(&sql))</p>
373
+5 -5
--- src/info.c
+++ src/info.c
@@ -594,19 +594,19 @@
594594
if( (zPJ[jj]>0 && zPJ[jj]<' ') || strchr("\"*/:<>?\\|", zPJ[jj]) ){
595595
zPJ[jj] = '_';
596596
}
597597
}
598598
@ <tr><th>Timelines:</th><td>
599
- @ %z(href("%R/timeline?f=%S",zUuid))family</a>
599
+ @ %z(href("%R/timeline?f=%S&unhide",zUuid))family</a>
600600
if( zParent ){
601
- @ | %z(href("%R/timeline?p=%S",zUuid))ancestors</a>
601
+ @ | %z(href("%R/timeline?p=%S&unhide",zUuid))ancestors</a>
602602
}
603603
if( !isLeaf ){
604
- @ | %z(href("%R/timeline?d=%S",zUuid))descendants</a>
604
+ @ | %z(href("%R/timeline?d=%S&unhide",zUuid))descendants</a>
605605
}
606606
if( zParent && !isLeaf ){
607
- @ | %z(href("%R/timeline?dp=%S",zUuid))both</a>
607
+ @ | %z(href("%R/timeline?dp=%S&unhide",zUuid))both</a>
608608
}
609609
db_prepare(&q2,"SELECT substr(tag.tagname,5) FROM tagxref, tag "
610610
" WHERE rid=%d AND tagtype>0 "
611611
" AND tag.tagid=tagxref.tagid "
612612
" AND +tag.tagname GLOB 'sym-*'", rid);
@@ -1634,11 +1634,11 @@
16341634
objType = object_description(rid, 0, &downloadName);
16351635
style_submenu_element("Download", "Download",
16361636
"%R/raw/%T?name=%s", blob_str(&downloadName), zUuid);
16371637
if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){
16381638
style_submenu_element("Checkins Using", "Checkins Using",
1639
- "%R/timeline?uf=%s&n=200",zUuid);
1639
+ "%R/timeline?n=200&uf=%s",zUuid);
16401640
}
16411641
asText = P("txt")!=0;
16421642
zMime = mimetype_from_name(blob_str(&downloadName));
16431643
if( zMime ){
16441644
if( fossil_strcmp(zMime, "text/html")==0 ){
16451645
--- src/info.c
+++ src/info.c
@@ -594,19 +594,19 @@
594 if( (zPJ[jj]>0 && zPJ[jj]<' ') || strchr("\"*/:<>?\\|", zPJ[jj]) ){
595 zPJ[jj] = '_';
596 }
597 }
598 @ <tr><th>Timelines:</th><td>
599 @ %z(href("%R/timeline?f=%S",zUuid))family</a>
600 if( zParent ){
601 @ | %z(href("%R/timeline?p=%S",zUuid))ancestors</a>
602 }
603 if( !isLeaf ){
604 @ | %z(href("%R/timeline?d=%S",zUuid))descendants</a>
605 }
606 if( zParent && !isLeaf ){
607 @ | %z(href("%R/timeline?dp=%S",zUuid))both</a>
608 }
609 db_prepare(&q2,"SELECT substr(tag.tagname,5) FROM tagxref, tag "
610 " WHERE rid=%d AND tagtype>0 "
611 " AND tag.tagid=tagxref.tagid "
612 " AND +tag.tagname GLOB 'sym-*'", rid);
@@ -1634,11 +1634,11 @@
1634 objType = object_description(rid, 0, &downloadName);
1635 style_submenu_element("Download", "Download",
1636 "%R/raw/%T?name=%s", blob_str(&downloadName), zUuid);
1637 if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){
1638 style_submenu_element("Checkins Using", "Checkins Using",
1639 "%R/timeline?uf=%s&n=200",zUuid);
1640 }
1641 asText = P("txt")!=0;
1642 zMime = mimetype_from_name(blob_str(&downloadName));
1643 if( zMime ){
1644 if( fossil_strcmp(zMime, "text/html")==0 ){
1645
--- src/info.c
+++ src/info.c
@@ -594,19 +594,19 @@
594 if( (zPJ[jj]>0 && zPJ[jj]<' ') || strchr("\"*/:<>?\\|", zPJ[jj]) ){
595 zPJ[jj] = '_';
596 }
597 }
598 @ <tr><th>Timelines:</th><td>
599 @ %z(href("%R/timeline?f=%S&unhide",zUuid))family</a>
600 if( zParent ){
601 @ | %z(href("%R/timeline?p=%S&unhide",zUuid))ancestors</a>
602 }
603 if( !isLeaf ){
604 @ | %z(href("%R/timeline?d=%S&unhide",zUuid))descendants</a>
605 }
606 if( zParent && !isLeaf ){
607 @ | %z(href("%R/timeline?dp=%S&unhide",zUuid))both</a>
608 }
609 db_prepare(&q2,"SELECT substr(tag.tagname,5) FROM tagxref, tag "
610 " WHERE rid=%d AND tagtype>0 "
611 " AND tag.tagid=tagxref.tagid "
612 " AND +tag.tagname GLOB 'sym-*'", rid);
@@ -1634,11 +1634,11 @@
1634 objType = object_description(rid, 0, &downloadName);
1635 style_submenu_element("Download", "Download",
1636 "%R/raw/%T?name=%s", blob_str(&downloadName), zUuid);
1637 if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){
1638 style_submenu_element("Checkins Using", "Checkins Using",
1639 "%R/timeline?n=200&uf=%s",zUuid);
1640 }
1641 asText = P("txt")!=0;
1642 zMime = mimetype_from_name(blob_str(&downloadName));
1643 if( zMime ){
1644 if( fossil_strcmp(zMime, "text/html")==0 ){
1645
+19 -3
--- src/timeline.c
+++ src/timeline.c
@@ -1111,10 +1111,11 @@
11111111
if( zType[0]=='a' ){
11121112
tmFlags = TIMELINE_BRIEF | TIMELINE_GRAPH;
11131113
}else{
11141114
tmFlags = TIMELINE_GRAPH;
11151115
}
1116
+ url_add_parameter(&url, "n", mprintf("%d", nEntry));
11161117
if( P("ng")!=0 || zSearch!=0 ){
11171118
tmFlags &= ~TIMELINE_GRAPH;
11181119
url_add_parameter(&url, "ng", 0);
11191120
}
11201121
if( P("brbg")!=0 ){
@@ -1231,10 +1232,23 @@
12311232
}
12321233
if( d_rid==0 && useDividers ) timeline_add_dividers(0, p_rid);
12331234
}
12341235
blob_appendf(&desc, " of %z[%.10s]</a>",
12351236
href("%R/info/%s", zUuid), zUuid);
1237
+ if( (tmFlags & TIMELINE_UNHIDE)==0 ){
1238
+ if( p_rid ){
1239
+ url_add_parameter(&url, "p", zUuid);
1240
+ }
1241
+ if( d_rid ){
1242
+ if( p_rid ){
1243
+ /* If both p= and d= are set, we don't have the uuid of d yet. */
1244
+ zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", d_rid);
1245
+ }
1246
+ url_add_parameter(&url, "d", zUuid);
1247
+ }
1248
+ timeline_submenu(&url, "Unhide", "unhide", "", 0);
1249
+ }
12361250
}else if( f_rid && g.perm.Read ){
12371251
/* If f= is present, ignore all other parameters other than n= */
12381252
char *zUuid;
12391253
db_multi_exec(
12401254
"CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);"
@@ -1248,17 +1262,19 @@
12481262
if( useDividers ) timeline_add_dividers(0, f_rid);
12491263
blob_appendf(&desc, "Parents and children of check-in ");
12501264
zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", f_rid);
12511265
blob_appendf(&desc, "%z[%.10s]</a>", href("%R/info/%s", zUuid), zUuid);
12521266
tmFlags |= TIMELINE_DISJOINT;
1267
+ if( (tmFlags & TIMELINE_UNHIDE)==0 ){
1268
+ url_add_parameter(&url, "f", zUuid);
1269
+ timeline_submenu(&url, "Unhide", "unhide", "", 0);
1270
+ }
12531271
}else{
12541272
/* Otherwise, a timeline based on a span of time */
12551273
int n;
12561274
const char *zEType = "timeline item";
12571275
char *zDate;
1258
- char *zNEntry = mprintf("%d", nEntry);
1259
- url_add_parameter(&url, "n", zNEntry);
12601276
if( zUses ){
12611277
blob_appendf(&sql, " AND event.objid IN usesfile ");
12621278
}
12631279
if( renameOnly ){
12641280
blob_appendf(&sql, " AND event.objid IN rnfile ");
@@ -1944,11 +1960,11 @@
19441960
" AND blob.rid=c.cid"
19451961
);
19461962
while( db_step(&q)==SQLITE_ROW ){
19471963
const char *zUuid = db_column_text(&q, 0);
19481964
@ <li>
1949
- @ <a href="%s(g.zTop)/timeline?p=%S(zUuid)&amp;d=%S(zUuid)">%S(zUuid)</a>
1965
+ @ <a href="%s(g.zTop)/timeline?p=%S(zUuid)&amp;d=%S(zUuid)&amp;unhide">%S(zUuid)</a>
19501966
}
19511967
db_finalize(&q);
19521968
style_footer();
19531969
}
19541970
19551971
--- src/timeline.c
+++ src/timeline.c
@@ -1111,10 +1111,11 @@
1111 if( zType[0]=='a' ){
1112 tmFlags = TIMELINE_BRIEF | TIMELINE_GRAPH;
1113 }else{
1114 tmFlags = TIMELINE_GRAPH;
1115 }
 
1116 if( P("ng")!=0 || zSearch!=0 ){
1117 tmFlags &= ~TIMELINE_GRAPH;
1118 url_add_parameter(&url, "ng", 0);
1119 }
1120 if( P("brbg")!=0 ){
@@ -1231,10 +1232,23 @@
1231 }
1232 if( d_rid==0 && useDividers ) timeline_add_dividers(0, p_rid);
1233 }
1234 blob_appendf(&desc, " of %z[%.10s]</a>",
1235 href("%R/info/%s", zUuid), zUuid);
 
 
 
 
 
 
 
 
 
 
 
 
 
1236 }else if( f_rid && g.perm.Read ){
1237 /* If f= is present, ignore all other parameters other than n= */
1238 char *zUuid;
1239 db_multi_exec(
1240 "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);"
@@ -1248,17 +1262,19 @@
1248 if( useDividers ) timeline_add_dividers(0, f_rid);
1249 blob_appendf(&desc, "Parents and children of check-in ");
1250 zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", f_rid);
1251 blob_appendf(&desc, "%z[%.10s]</a>", href("%R/info/%s", zUuid), zUuid);
1252 tmFlags |= TIMELINE_DISJOINT;
 
 
 
 
1253 }else{
1254 /* Otherwise, a timeline based on a span of time */
1255 int n;
1256 const char *zEType = "timeline item";
1257 char *zDate;
1258 char *zNEntry = mprintf("%d", nEntry);
1259 url_add_parameter(&url, "n", zNEntry);
1260 if( zUses ){
1261 blob_appendf(&sql, " AND event.objid IN usesfile ");
1262 }
1263 if( renameOnly ){
1264 blob_appendf(&sql, " AND event.objid IN rnfile ");
@@ -1944,11 +1960,11 @@
1944 " AND blob.rid=c.cid"
1945 );
1946 while( db_step(&q)==SQLITE_ROW ){
1947 const char *zUuid = db_column_text(&q, 0);
1948 @ <li>
1949 @ <a href="%s(g.zTop)/timeline?p=%S(zUuid)&amp;d=%S(zUuid)">%S(zUuid)</a>
1950 }
1951 db_finalize(&q);
1952 style_footer();
1953 }
1954
1955
--- src/timeline.c
+++ src/timeline.c
@@ -1111,10 +1111,11 @@
1111 if( zType[0]=='a' ){
1112 tmFlags = TIMELINE_BRIEF | TIMELINE_GRAPH;
1113 }else{
1114 tmFlags = TIMELINE_GRAPH;
1115 }
1116 url_add_parameter(&url, "n", mprintf("%d", nEntry));
1117 if( P("ng")!=0 || zSearch!=0 ){
1118 tmFlags &= ~TIMELINE_GRAPH;
1119 url_add_parameter(&url, "ng", 0);
1120 }
1121 if( P("brbg")!=0 ){
@@ -1231,10 +1232,23 @@
1232 }
1233 if( d_rid==0 && useDividers ) timeline_add_dividers(0, p_rid);
1234 }
1235 blob_appendf(&desc, " of %z[%.10s]</a>",
1236 href("%R/info/%s", zUuid), zUuid);
1237 if( (tmFlags & TIMELINE_UNHIDE)==0 ){
1238 if( p_rid ){
1239 url_add_parameter(&url, "p", zUuid);
1240 }
1241 if( d_rid ){
1242 if( p_rid ){
1243 /* If both p= and d= are set, we don't have the uuid of d yet. */
1244 zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", d_rid);
1245 }
1246 url_add_parameter(&url, "d", zUuid);
1247 }
1248 timeline_submenu(&url, "Unhide", "unhide", "", 0);
1249 }
1250 }else if( f_rid && g.perm.Read ){
1251 /* If f= is present, ignore all other parameters other than n= */
1252 char *zUuid;
1253 db_multi_exec(
1254 "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);"
@@ -1248,17 +1262,19 @@
1262 if( useDividers ) timeline_add_dividers(0, f_rid);
1263 blob_appendf(&desc, "Parents and children of check-in ");
1264 zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", f_rid);
1265 blob_appendf(&desc, "%z[%.10s]</a>", href("%R/info/%s", zUuid), zUuid);
1266 tmFlags |= TIMELINE_DISJOINT;
1267 if( (tmFlags & TIMELINE_UNHIDE)==0 ){
1268 url_add_parameter(&url, "f", zUuid);
1269 timeline_submenu(&url, "Unhide", "unhide", "", 0);
1270 }
1271 }else{
1272 /* Otherwise, a timeline based on a span of time */
1273 int n;
1274 const char *zEType = "timeline item";
1275 char *zDate;
 
 
1276 if( zUses ){
1277 blob_appendf(&sql, " AND event.objid IN usesfile ");
1278 }
1279 if( renameOnly ){
1280 blob_appendf(&sql, " AND event.objid IN rnfile ");
@@ -1944,11 +1960,11 @@
1960 " AND blob.rid=c.cid"
1961 );
1962 while( db_step(&q)==SQLITE_ROW ){
1963 const char *zUuid = db_column_text(&q, 0);
1964 @ <li>
1965 @ <a href="%s(g.zTop)/timeline?p=%S(zUuid)&amp;d=%S(zUuid)&amp;unhide">%S(zUuid)</a>
1966 }
1967 db_finalize(&q);
1968 style_footer();
1969 }
1970
1971

Keyboard Shortcuts

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