Fossil SCM

Use long UUID's in more hyperlinks, without affecting UI display.

jan.nijtmans 2014-03-31 10:30 trunk
Commit b0d9468bff8fbfca8dbb883622915840453c68e3
2 files changed +6 -10 +28 -28
+6 -10
--- src/finfo.c
+++ src/finfo.c
@@ -374,11 +374,11 @@
374374
}
375375
blob_reset(&sql);
376376
blob_zero(&title);
377377
if( baseCheckin ){
378378
char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", baseCheckin);
379
- char *zLink = href("%R/info/%S", zUuid);
379
+ char *zLink = href("%R/info/%s", zUuid);
380380
blob_appendf(&title, "Ancestors of file ");
381381
hyperlinked_path(zFilename, &title, zUuid, "tree", "");
382382
blob_appendf(&title, " from check-in %z%.10s</a>", zLink, zUuid);
383383
fossil_free(zUuid);
384384
}else{
@@ -404,12 +404,10 @@
404404
const char *zBr = db_column_text(&q, 9);
405405
int fmid = db_column_int(&q, 10);
406406
int pfnid = db_column_int(&q, 11);
407407
int gidx;
408408
char zTime[10];
409
- char zShort[20];
410
- char zShortCkin[20];
411409
if( zBr==0 ) zBr = "trunk";
412410
if( uBg ){
413411
zBgClr = hash_color(zUser);
414412
}else if( brBg || zBgClr==0 || zBgClr[0]==0 ){
415413
zBgClr = strcmp(zBr,"trunk")==0 ? "" : hash_color(zBr);
@@ -430,12 +428,10 @@
430428
if( zBgClr && zBgClr[0] ){
431429
@ <td class="timelineTableCell" style="background-color: %h(zBgClr);">
432430
}else{
433431
@ <td class="timelineTableCell">
434432
}
435
- sqlite3_snprintf(sizeof(zShort), zShort, "%.10s", zUuid);
436
- sqlite3_snprintf(sizeof(zShortCkin), zShortCkin, "%.10s", zCkin);
437433
if( zUuid ){
438434
if( fpid==0 ){
439435
@ <b>Added</b>
440436
}else if( pfnid ){
441437
char *zPrevName = db_text(0, "SELECT name FROM filename WHERE fnid=%d",
@@ -458,23 +454,23 @@
458454
fossil_free(zNewName);
459455
}else{
460456
@ <b>Deleted</b> by check-in
461457
}
462458
}
463
- hyperlink_to_uuid(zShortCkin);
459
+ hyperlink_to_uuid(zCkin);
464460
@ %w(zCom) (user:
465461
hyperlink_to_user(zUser, zDate, "");
466462
@ branch: %h(zBr))
467463
if( g.perm.Hyperlink && zUuid ){
468464
const char *z = zFilename;
469
- @ %z(href("%R/annotate?checkin=%S&filename=%h",zCkin,z))
465
+ @ %z(href("%R/annotate?filename=%h&checkin=%s",z,zCkin))
470466
@ [annotate]</a>
471
- @ %z(href("%R/blame?checkin=%S&filename=%h",zCkin,z))
467
+ @ %z(href("%R/blame?filename=%h&checkin=%s",z,zCkin))
472468
@ [blame]</a>
473
- @ %z(href("%R/timeline?n=200&uf=%S",zUuid))[checkins&nbsp;using]</a>
469
+ @ %z(href("%R/timeline?n=200&uf=%s",zUuid))[checkins&nbsp;using]</a>
474470
if( fpid ){
475
- @ %z(href("%R/fdiff?v1=%S&v2=%S&sbs=1",zPUuid,zUuid))[diff]</a>
471
+ @ %z(href("%R/fdiff?sbs=1&v1=%s&v2=%s",zPUuid,zUuid))[diff]</a>
476472
}
477473
}
478474
if( fDebug & FINFO_DEBUG_MLINK ){
479475
int srcid = db_int(0, "SELECT srcid FROM delta WHERE rid=%d", frid);
480476
int sz = db_int(0, "SELECT length(content) FROM blob WHERE rid=%d", frid);
481477
--- src/finfo.c
+++ src/finfo.c
@@ -374,11 +374,11 @@
374 }
375 blob_reset(&sql);
376 blob_zero(&title);
377 if( baseCheckin ){
378 char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", baseCheckin);
379 char *zLink = href("%R/info/%S", zUuid);
380 blob_appendf(&title, "Ancestors of file ");
381 hyperlinked_path(zFilename, &title, zUuid, "tree", "");
382 blob_appendf(&title, " from check-in %z%.10s</a>", zLink, zUuid);
383 fossil_free(zUuid);
384 }else{
@@ -404,12 +404,10 @@
404 const char *zBr = db_column_text(&q, 9);
405 int fmid = db_column_int(&q, 10);
406 int pfnid = db_column_int(&q, 11);
407 int gidx;
408 char zTime[10];
409 char zShort[20];
410 char zShortCkin[20];
411 if( zBr==0 ) zBr = "trunk";
412 if( uBg ){
413 zBgClr = hash_color(zUser);
414 }else if( brBg || zBgClr==0 || zBgClr[0]==0 ){
415 zBgClr = strcmp(zBr,"trunk")==0 ? "" : hash_color(zBr);
@@ -430,12 +428,10 @@
430 if( zBgClr && zBgClr[0] ){
431 @ <td class="timelineTableCell" style="background-color: %h(zBgClr);">
432 }else{
433 @ <td class="timelineTableCell">
434 }
435 sqlite3_snprintf(sizeof(zShort), zShort, "%.10s", zUuid);
436 sqlite3_snprintf(sizeof(zShortCkin), zShortCkin, "%.10s", zCkin);
437 if( zUuid ){
438 if( fpid==0 ){
439 @ <b>Added</b>
440 }else if( pfnid ){
441 char *zPrevName = db_text(0, "SELECT name FROM filename WHERE fnid=%d",
@@ -458,23 +454,23 @@
458 fossil_free(zNewName);
459 }else{
460 @ <b>Deleted</b> by check-in
461 }
462 }
463 hyperlink_to_uuid(zShortCkin);
464 @ %w(zCom) (user:
465 hyperlink_to_user(zUser, zDate, "");
466 @ branch: %h(zBr))
467 if( g.perm.Hyperlink && zUuid ){
468 const char *z = zFilename;
469 @ %z(href("%R/annotate?checkin=%S&filename=%h",zCkin,z))
470 @ [annotate]</a>
471 @ %z(href("%R/blame?checkin=%S&filename=%h",zCkin,z))
472 @ [blame]</a>
473 @ %z(href("%R/timeline?n=200&uf=%S",zUuid))[checkins&nbsp;using]</a>
474 if( fpid ){
475 @ %z(href("%R/fdiff?v1=%S&v2=%S&sbs=1",zPUuid,zUuid))[diff]</a>
476 }
477 }
478 if( fDebug & FINFO_DEBUG_MLINK ){
479 int srcid = db_int(0, "SELECT srcid FROM delta WHERE rid=%d", frid);
480 int sz = db_int(0, "SELECT length(content) FROM blob WHERE rid=%d", frid);
481
--- src/finfo.c
+++ src/finfo.c
@@ -374,11 +374,11 @@
374 }
375 blob_reset(&sql);
376 blob_zero(&title);
377 if( baseCheckin ){
378 char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", baseCheckin);
379 char *zLink = href("%R/info/%s", zUuid);
380 blob_appendf(&title, "Ancestors of file ");
381 hyperlinked_path(zFilename, &title, zUuid, "tree", "");
382 blob_appendf(&title, " from check-in %z%.10s</a>", zLink, zUuid);
383 fossil_free(zUuid);
384 }else{
@@ -404,12 +404,10 @@
404 const char *zBr = db_column_text(&q, 9);
405 int fmid = db_column_int(&q, 10);
406 int pfnid = db_column_int(&q, 11);
407 int gidx;
408 char zTime[10];
 
 
409 if( zBr==0 ) zBr = "trunk";
410 if( uBg ){
411 zBgClr = hash_color(zUser);
412 }else if( brBg || zBgClr==0 || zBgClr[0]==0 ){
413 zBgClr = strcmp(zBr,"trunk")==0 ? "" : hash_color(zBr);
@@ -430,12 +428,10 @@
428 if( zBgClr && zBgClr[0] ){
429 @ <td class="timelineTableCell" style="background-color: %h(zBgClr);">
430 }else{
431 @ <td class="timelineTableCell">
432 }
 
 
433 if( zUuid ){
434 if( fpid==0 ){
435 @ <b>Added</b>
436 }else if( pfnid ){
437 char *zPrevName = db_text(0, "SELECT name FROM filename WHERE fnid=%d",
@@ -458,23 +454,23 @@
454 fossil_free(zNewName);
455 }else{
456 @ <b>Deleted</b> by check-in
457 }
458 }
459 hyperlink_to_uuid(zCkin);
460 @ %w(zCom) (user:
461 hyperlink_to_user(zUser, zDate, "");
462 @ branch: %h(zBr))
463 if( g.perm.Hyperlink && zUuid ){
464 const char *z = zFilename;
465 @ %z(href("%R/annotate?filename=%h&checkin=%s",z,zCkin))
466 @ [annotate]</a>
467 @ %z(href("%R/blame?filename=%h&checkin=%s",z,zCkin))
468 @ [blame]</a>
469 @ %z(href("%R/timeline?n=200&uf=%s",zUuid))[checkins&nbsp;using]</a>
470 if( fpid ){
471 @ %z(href("%R/fdiff?sbs=1&v1=%s&v2=%s",zPUuid,zUuid))[diff]</a>
472 }
473 }
474 if( fDebug & FINFO_DEBUG_MLINK ){
475 int srcid = db_int(0, "SELECT srcid FROM delta WHERE rid=%d", frid);
476 int sz = db_int(0, "SELECT length(content) FROM blob WHERE rid=%d", frid);
477
+28 -28
--- src/info.c
+++ src/info.c
@@ -399,11 +399,11 @@
399399
}
400400
if( diffFlags ){
401401
append_diff(zOld, zNew, diffFlags, pRe);
402402
}else if( zOld && zNew && fossil_strcmp(zOld,zNew)!=0 ){
403403
@ &nbsp;&nbsp;
404
- @ %z(href("%R/fdiff?v1=%S&v2=%S&sbs=1",zOld,zNew))[diff]</a>
404
+ @ %z(href("%R/fdiff?v1=%s&v2=%s&sbs=1",zOld,zNew))[diff]</a>
405405
}
406406
}
407407
}
408408
409409
/*
@@ -612,19 +612,19 @@
612612
if( (zPJ[jj]>0 && zPJ[jj]<' ') || strchr("\"*/:<>?\\|", zPJ[jj]) ){
613613
zPJ[jj] = '_';
614614
}
615615
}
616616
@ <tr><th>Timelines:</th><td>
617
- @ %z(href("%R/timeline?f=%S&unhide",zUuid))family</a>
617
+ @ %z(href("%R/timeline?f=%s&unhide",zUuid))family</a>
618618
if( zParent ){
619
- @ | %z(href("%R/timeline?p=%S&unhide",zUuid))ancestors</a>
619
+ @ | %z(href("%R/timeline?p=%s&unhide",zUuid))ancestors</a>
620620
}
621621
if( !isLeaf ){
622
- @ | %z(href("%R/timeline?d=%S&unhide",zUuid))descendants</a>
622
+ @ | %z(href("%R/timeline?d=%s&unhide",zUuid))descendants</a>
623623
}
624624
if( zParent && !isLeaf ){
625
- @ | %z(href("%R/timeline?dp=%S&unhide",zUuid))both</a>
625
+ @ | %z(href("%R/timeline?dp=%s&unhide",zUuid))both</a>
626626
}
627627
db_prepare(&q2,"SELECT substr(tag.tagname,5) FROM tagxref, tag "
628628
" WHERE rid=%d AND tagtype>0 "
629629
" AND tag.tagid=tagxref.tagid "
630630
" AND +tag.tagname GLOB 'sym-*'", rid);
@@ -647,16 +647,16 @@
647647
fossil_free(zUrl);
648648
}
649649
@ </td></tr>
650650
@ <tr><th>Other&nbsp;Links:</th>
651651
@ <td>
652
- @ %z(href("%R/tree?ci=%S",zUuid))files</a>
653
- @ | %z(href("%R/fileage?name=%S",zUuid))file ages</a>
654
- @ | %z(href("%R/tree?ci=%S&nofiles",zUuid))folders</a>
655
- @ | %z(href("%R/artifact/%S",zUuid))manifest</a>
652
+ @ %z(href("%R/tree?ci=%s",zUuid))files</a>
653
+ @ | %z(href("%R/fileage?name=%s",zUuid))file ages</a>
654
+ @ | %z(href("%R/tree?ci=%s&nofiles",zUuid))folders</a>
655
+ @ | %z(href("%R/artifact/%s",zUuid))manifest</a>
656656
if( g.perm.Write ){
657
- @ | %z(href("%R/ci_edit?r=%S",zUuid))edit</a>
657
+ @ | %z(href("%R/ci_edit?r=%s",zUuid))edit</a>
658658
}
659659
@ </td>
660660
@ </tr>
661661
blob_reset(&projName);
662662
}
@@ -699,11 +699,11 @@
699699
@ Show&nbsp;Unified&nbsp;Diffs</a>
700700
@ %z(xhref("class='button'","%R/%s/%T?sbs=1",zPage,zName))
701701
@ Show&nbsp;Side-by-Side&nbsp;Diffs</a>
702702
}
703703
if( zParent ){
704
- @ %z(xhref("class='button'","%R/vpatch?from=%S&to=%S",zParent,zUuid))
704
+ @ %z(xhref("class='button'","%R/vpatch?from=%s&to=%s",zParent,zUuid))
705705
@ Patch</a>
706706
}
707707
@</div>
708708
if( pRe ){
709709
@ <p><b>Only differences that match regular expression "%h(zRe)"
@@ -770,11 +770,11 @@
770770
}
771771
}
772772
style_header("Update of \"%h\"", pWiki->zWikiTitle);
773773
zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
774774
zDate = db_text(0, "SELECT datetime(%.17g)", pWiki->rDate);
775
- style_submenu_element("Raw", "Raw", "artifact/%S", zUuid);
775
+ style_submenu_element("Raw", "Raw", "artifact/%s", zUuid);
776776
style_submenu_element("History", "History", "whistory?name=%t",
777777
pWiki->zWikiTitle);
778778
style_submenu_element("Page", "Page", "wiki?name=%t",
779779
pWiki->zWikiTitle);
780780
login_anonymous_available();
@@ -798,11 +798,11 @@
798798
if( pWiki->nParent>0 ){
799799
int i;
800800
@ <tr><th>Parent%s(pWiki->nParent==1?"":"s"):</th><td>
801801
for(i=0; i<pWiki->nParent; i++){
802802
char *zParent = pWiki->azParent[i];
803
- @ %z(href("info/%S",zParent))%s(zParent)</a>
803
+ @ %z(href("info/%s",zParent))%s(zParent)</a>
804804
}
805805
@ </td></tr>
806806
}
807807
@ </table>
808808
@@ -1188,14 +1188,14 @@
11881188
@ on branch %z(href("%R/timeline?r=%T",zBr))%h(zBr)</a>
11891189
}
11901190
@ - %!w(zCom) (user:
11911191
hyperlink_to_user(zUser,zDate,")");
11921192
if( g.perm.Hyperlink ){
1193
- @ %z(href("%R/finfo?name=%T&ci=%S",zName,zVers))[ancestry]</a>
1194
- @ %z(href("%R/annotate?checkin=%S&filename=%T",zVers,zName))
1193
+ @ %z(href("%R/finfo?name=%T&ci=%s",zName,zVers))[ancestry]</a>
1194
+ @ %z(href("%R/annotate?checkin=%s&filename=%T",zVers,zName))
11951195
@ [annotate]</a>
1196
- @ %z(href("%R/blame?checkin=%S&filename=%T",zVers,zName))
1196
+ @ %z(href("%R/blame?filename=%T&checkin=%s",zName,zVers))
11971197
@ [blame]</a>
11981198
}
11991199
cnt++;
12001200
if( pDownloadName && blob_size(pDownloadName)==0 ){
12011201
blob_append(pDownloadName, zName, -1);
@@ -1302,11 +1302,11 @@
13021302
@ Attachment "%h(zFilename)" to
13031303
}
13041304
objType |= OBJTYPE_ATTACHMENT;
13051305
if( strlen(zTarget)==UUID_SIZE && validate16(zTarget,UUID_SIZE) ){
13061306
if( g.perm.Hyperlink && g.perm.RdTkt ){
1307
- @ ticket [%z(href("%R/tktview?name=%S",zTarget))%S(zTarget)</a>]
1307
+ @ ticket [%z(href("%R/tktview?name=%s",zTarget))%S(zTarget)</a>]
13081308
}else{
13091309
@ ticket [%S(zTarget)]
13101310
}
13111311
}else{
13121312
if( g.perm.Hyperlink && g.perm.RdWiki ){
@@ -1328,11 +1328,11 @@
13281328
@ Control artifact.
13291329
if( pDownloadName && blob_size(pDownloadName)==0 ){
13301330
blob_appendf(pDownloadName, "%.10s.txt", zUuid);
13311331
}
13321332
}else if( linkToView && g.perm.Hyperlink ){
1333
- @ %z(href("%R/artifact/%S",zUuid))[view]</a>
1333
+ @ %z(href("%R/artifact/%s",zUuid))[view]</a>
13341334
}
13351335
return objType;
13361336
}
13371337
13381338
@@ -1404,17 +1404,17 @@
14041404
g.zTop, P("v1"), P("v2"), zW);
14051405
}
14061406
14071407
if( P("smhdr")!=0 ){
14081408
@ <h2>Differences From Artifact
1409
- @ %z(href("%R/artifact/%S",zV1))[%S(zV1)]</a> To
1410
- @ %z(href("%R/artifact/%S",zV2))[%S(zV2)]</a>.</h2>
1409
+ @ %z(href("%R/artifact/%s",zV1))[%S(zV1)]</a> To
1410
+ @ %z(href("%R/artifact/%s",zV2))[%S(zV2)]</a>.</h2>
14111411
}else{
14121412
@ <h2>Differences From
1413
- @ Artifact %z(href("%R/artifact/%S",zV1))[%S(zV1)]</a>:</h2>
1413
+ @ Artifact %z(href("%R/artifact/%s",zV1))[%S(zV1)]</a>:</h2>
14141414
object_description(v1, 0, 0);
1415
- @ <h2>To Artifact %z(href("%R/artifact/%S",zV2))[%S(zV2)]</a>:</h2>
1415
+ @ <h2>To Artifact %z(href("%R/artifact/%s",zV2))[%S(zV2)]</a>:</h2>
14161416
object_description(v2, 0, 0);
14171417
}
14181418
if( pRe ){
14191419
@ <b>Only differences that match regular expression "%h(zRe)"
14201420
@ are shown.</b>
@@ -1761,13 +1761,13 @@
17611761
@ <pre>
17621762
@ %h(z)
17631763
@ </pre>
17641764
}
17651765
}else if( strncmp(zMime, "image/", 6)==0 ){
1766
- @ <img src="%R/raw/%S(zUuid)?m=%s(zMime)" />
1766
+ @ <img src="%R/raw/%s(zUuid)?m=%s(zMime)" />
17671767
style_submenu_element("Image", "Image",
1768
- "%R/raw/%S?m=%s", zUuid, zMime);
1768
+ "%R/raw/%s?m=%s", zUuid, zMime);
17691769
}else{
17701770
@ <i>(file is %d(blob_size(&content)) bytes of binary data)</i>
17711771
}
17721772
@ </blockquote>
17731773
}
@@ -1819,19 +1819,19 @@
18191819
}
18201820
zTktTitle = db_table_has_column( "ticket", "title" )
18211821
? db_text("(No title)", "SELECT title FROM ticket WHERE tkt_uuid=%Q", zTktName)
18221822
: 0;
18231823
style_header("Ticket Change Details");
1824
- style_submenu_element("Raw", "Raw", "%R/artifact/%S", zUuid);
1824
+ style_submenu_element("Raw", "Raw", "%R/artifact/%s", zUuid);
18251825
style_submenu_element("History", "History", "%R/tkthistory/%s", zTktName);
18261826
style_submenu_element("Page", "Page", "%R/tktview/%t", zTktName);
18271827
style_submenu_element("Timeline", "Timeline", "%R/tkttimeline/%t", zTktName);
18281828
if( P("plaintext") ){
1829
- style_submenu_element("Formatted", "Formatted", "%R/info/%S", zUuid);
1829
+ style_submenu_element("Formatted", "Formatted", "%R/info/%s", zUuid);
18301830
}else{
18311831
style_submenu_element("Plaintext", "Plaintext",
1832
- "%R/info/%S?plaintext", zUuid);
1832
+ "%R/info/%s?plaintext", zUuid);
18331833
}
18341834
18351835
@ <div class="section">Overview</div>
18361836
@ <p><table class="label-value">
18371837
@ <tr><th>Artifact&nbsp;ID:</th>
@@ -2341,11 +2341,11 @@
23412341
}
23422342
@ <p>Make changes to attributes of check-in
23432343
@ [%z(href("%R/ci/%s",zUuid))%s(zUuid)</a>]:</p>
23442344
form_begin(0, "%R/ci_edit");
23452345
login_insert_csrf_secret();
2346
- @ <div><input type="hidden" name="r" value="%S(zUuid)" />
2346
+ @ <div><input type="hidden" name="r" value="%s(zUuid)" />
23472347
@ <table border="0" cellspacing="10">
23482348
23492349
@ <tr><th align="right" valign="top">User:</th>
23502350
@ <td valign="top">
23512351
@ <input type="text" name="u" size="20" value="%h(zNewUser)" />
23522352
--- src/info.c
+++ src/info.c
@@ -399,11 +399,11 @@
399 }
400 if( diffFlags ){
401 append_diff(zOld, zNew, diffFlags, pRe);
402 }else if( zOld && zNew && fossil_strcmp(zOld,zNew)!=0 ){
403 @ &nbsp;&nbsp;
404 @ %z(href("%R/fdiff?v1=%S&v2=%S&sbs=1",zOld,zNew))[diff]</a>
405 }
406 }
407 }
408
409 /*
@@ -612,19 +612,19 @@
612 if( (zPJ[jj]>0 && zPJ[jj]<' ') || strchr("\"*/:<>?\\|", zPJ[jj]) ){
613 zPJ[jj] = '_';
614 }
615 }
616 @ <tr><th>Timelines:</th><td>
617 @ %z(href("%R/timeline?f=%S&unhide",zUuid))family</a>
618 if( zParent ){
619 @ | %z(href("%R/timeline?p=%S&unhide",zUuid))ancestors</a>
620 }
621 if( !isLeaf ){
622 @ | %z(href("%R/timeline?d=%S&unhide",zUuid))descendants</a>
623 }
624 if( zParent && !isLeaf ){
625 @ | %z(href("%R/timeline?dp=%S&unhide",zUuid))both</a>
626 }
627 db_prepare(&q2,"SELECT substr(tag.tagname,5) FROM tagxref, tag "
628 " WHERE rid=%d AND tagtype>0 "
629 " AND tag.tagid=tagxref.tagid "
630 " AND +tag.tagname GLOB 'sym-*'", rid);
@@ -647,16 +647,16 @@
647 fossil_free(zUrl);
648 }
649 @ </td></tr>
650 @ <tr><th>Other&nbsp;Links:</th>
651 @ <td>
652 @ %z(href("%R/tree?ci=%S",zUuid))files</a>
653 @ | %z(href("%R/fileage?name=%S",zUuid))file ages</a>
654 @ | %z(href("%R/tree?ci=%S&nofiles",zUuid))folders</a>
655 @ | %z(href("%R/artifact/%S",zUuid))manifest</a>
656 if( g.perm.Write ){
657 @ | %z(href("%R/ci_edit?r=%S",zUuid))edit</a>
658 }
659 @ </td>
660 @ </tr>
661 blob_reset(&projName);
662 }
@@ -699,11 +699,11 @@
699 @ Show&nbsp;Unified&nbsp;Diffs</a>
700 @ %z(xhref("class='button'","%R/%s/%T?sbs=1",zPage,zName))
701 @ Show&nbsp;Side-by-Side&nbsp;Diffs</a>
702 }
703 if( zParent ){
704 @ %z(xhref("class='button'","%R/vpatch?from=%S&to=%S",zParent,zUuid))
705 @ Patch</a>
706 }
707 @</div>
708 if( pRe ){
709 @ <p><b>Only differences that match regular expression "%h(zRe)"
@@ -770,11 +770,11 @@
770 }
771 }
772 style_header("Update of \"%h\"", pWiki->zWikiTitle);
773 zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
774 zDate = db_text(0, "SELECT datetime(%.17g)", pWiki->rDate);
775 style_submenu_element("Raw", "Raw", "artifact/%S", zUuid);
776 style_submenu_element("History", "History", "whistory?name=%t",
777 pWiki->zWikiTitle);
778 style_submenu_element("Page", "Page", "wiki?name=%t",
779 pWiki->zWikiTitle);
780 login_anonymous_available();
@@ -798,11 +798,11 @@
798 if( pWiki->nParent>0 ){
799 int i;
800 @ <tr><th>Parent%s(pWiki->nParent==1?"":"s"):</th><td>
801 for(i=0; i<pWiki->nParent; i++){
802 char *zParent = pWiki->azParent[i];
803 @ %z(href("info/%S",zParent))%s(zParent)</a>
804 }
805 @ </td></tr>
806 }
807 @ </table>
808
@@ -1188,14 +1188,14 @@
1188 @ on branch %z(href("%R/timeline?r=%T",zBr))%h(zBr)</a>
1189 }
1190 @ - %!w(zCom) (user:
1191 hyperlink_to_user(zUser,zDate,")");
1192 if( g.perm.Hyperlink ){
1193 @ %z(href("%R/finfo?name=%T&ci=%S",zName,zVers))[ancestry]</a>
1194 @ %z(href("%R/annotate?checkin=%S&filename=%T",zVers,zName))
1195 @ [annotate]</a>
1196 @ %z(href("%R/blame?checkin=%S&filename=%T",zVers,zName))
1197 @ [blame]</a>
1198 }
1199 cnt++;
1200 if( pDownloadName && blob_size(pDownloadName)==0 ){
1201 blob_append(pDownloadName, zName, -1);
@@ -1302,11 +1302,11 @@
1302 @ Attachment "%h(zFilename)" to
1303 }
1304 objType |= OBJTYPE_ATTACHMENT;
1305 if( strlen(zTarget)==UUID_SIZE && validate16(zTarget,UUID_SIZE) ){
1306 if( g.perm.Hyperlink && g.perm.RdTkt ){
1307 @ ticket [%z(href("%R/tktview?name=%S",zTarget))%S(zTarget)</a>]
1308 }else{
1309 @ ticket [%S(zTarget)]
1310 }
1311 }else{
1312 if( g.perm.Hyperlink && g.perm.RdWiki ){
@@ -1328,11 +1328,11 @@
1328 @ Control artifact.
1329 if( pDownloadName && blob_size(pDownloadName)==0 ){
1330 blob_appendf(pDownloadName, "%.10s.txt", zUuid);
1331 }
1332 }else if( linkToView && g.perm.Hyperlink ){
1333 @ %z(href("%R/artifact/%S",zUuid))[view]</a>
1334 }
1335 return objType;
1336 }
1337
1338
@@ -1404,17 +1404,17 @@
1404 g.zTop, P("v1"), P("v2"), zW);
1405 }
1406
1407 if( P("smhdr")!=0 ){
1408 @ <h2>Differences From Artifact
1409 @ %z(href("%R/artifact/%S",zV1))[%S(zV1)]</a> To
1410 @ %z(href("%R/artifact/%S",zV2))[%S(zV2)]</a>.</h2>
1411 }else{
1412 @ <h2>Differences From
1413 @ Artifact %z(href("%R/artifact/%S",zV1))[%S(zV1)]</a>:</h2>
1414 object_description(v1, 0, 0);
1415 @ <h2>To Artifact %z(href("%R/artifact/%S",zV2))[%S(zV2)]</a>:</h2>
1416 object_description(v2, 0, 0);
1417 }
1418 if( pRe ){
1419 @ <b>Only differences that match regular expression "%h(zRe)"
1420 @ are shown.</b>
@@ -1761,13 +1761,13 @@
1761 @ <pre>
1762 @ %h(z)
1763 @ </pre>
1764 }
1765 }else if( strncmp(zMime, "image/", 6)==0 ){
1766 @ <img src="%R/raw/%S(zUuid)?m=%s(zMime)" />
1767 style_submenu_element("Image", "Image",
1768 "%R/raw/%S?m=%s", zUuid, zMime);
1769 }else{
1770 @ <i>(file is %d(blob_size(&content)) bytes of binary data)</i>
1771 }
1772 @ </blockquote>
1773 }
@@ -1819,19 +1819,19 @@
1819 }
1820 zTktTitle = db_table_has_column( "ticket", "title" )
1821 ? db_text("(No title)", "SELECT title FROM ticket WHERE tkt_uuid=%Q", zTktName)
1822 : 0;
1823 style_header("Ticket Change Details");
1824 style_submenu_element("Raw", "Raw", "%R/artifact/%S", zUuid);
1825 style_submenu_element("History", "History", "%R/tkthistory/%s", zTktName);
1826 style_submenu_element("Page", "Page", "%R/tktview/%t", zTktName);
1827 style_submenu_element("Timeline", "Timeline", "%R/tkttimeline/%t", zTktName);
1828 if( P("plaintext") ){
1829 style_submenu_element("Formatted", "Formatted", "%R/info/%S", zUuid);
1830 }else{
1831 style_submenu_element("Plaintext", "Plaintext",
1832 "%R/info/%S?plaintext", zUuid);
1833 }
1834
1835 @ <div class="section">Overview</div>
1836 @ <p><table class="label-value">
1837 @ <tr><th>Artifact&nbsp;ID:</th>
@@ -2341,11 +2341,11 @@
2341 }
2342 @ <p>Make changes to attributes of check-in
2343 @ [%z(href("%R/ci/%s",zUuid))%s(zUuid)</a>]:</p>
2344 form_begin(0, "%R/ci_edit");
2345 login_insert_csrf_secret();
2346 @ <div><input type="hidden" name="r" value="%S(zUuid)" />
2347 @ <table border="0" cellspacing="10">
2348
2349 @ <tr><th align="right" valign="top">User:</th>
2350 @ <td valign="top">
2351 @ <input type="text" name="u" size="20" value="%h(zNewUser)" />
2352
--- src/info.c
+++ src/info.c
@@ -399,11 +399,11 @@
399 }
400 if( diffFlags ){
401 append_diff(zOld, zNew, diffFlags, pRe);
402 }else if( zOld && zNew && fossil_strcmp(zOld,zNew)!=0 ){
403 @ &nbsp;&nbsp;
404 @ %z(href("%R/fdiff?v1=%s&v2=%s&sbs=1",zOld,zNew))[diff]</a>
405 }
406 }
407 }
408
409 /*
@@ -612,19 +612,19 @@
612 if( (zPJ[jj]>0 && zPJ[jj]<' ') || strchr("\"*/:<>?\\|", zPJ[jj]) ){
613 zPJ[jj] = '_';
614 }
615 }
616 @ <tr><th>Timelines:</th><td>
617 @ %z(href("%R/timeline?f=%s&unhide",zUuid))family</a>
618 if( zParent ){
619 @ | %z(href("%R/timeline?p=%s&unhide",zUuid))ancestors</a>
620 }
621 if( !isLeaf ){
622 @ | %z(href("%R/timeline?d=%s&unhide",zUuid))descendants</a>
623 }
624 if( zParent && !isLeaf ){
625 @ | %z(href("%R/timeline?dp=%s&unhide",zUuid))both</a>
626 }
627 db_prepare(&q2,"SELECT substr(tag.tagname,5) FROM tagxref, tag "
628 " WHERE rid=%d AND tagtype>0 "
629 " AND tag.tagid=tagxref.tagid "
630 " AND +tag.tagname GLOB 'sym-*'", rid);
@@ -647,16 +647,16 @@
647 fossil_free(zUrl);
648 }
649 @ </td></tr>
650 @ <tr><th>Other&nbsp;Links:</th>
651 @ <td>
652 @ %z(href("%R/tree?ci=%s",zUuid))files</a>
653 @ | %z(href("%R/fileage?name=%s",zUuid))file ages</a>
654 @ | %z(href("%R/tree?ci=%s&nofiles",zUuid))folders</a>
655 @ | %z(href("%R/artifact/%s",zUuid))manifest</a>
656 if( g.perm.Write ){
657 @ | %z(href("%R/ci_edit?r=%s",zUuid))edit</a>
658 }
659 @ </td>
660 @ </tr>
661 blob_reset(&projName);
662 }
@@ -699,11 +699,11 @@
699 @ Show&nbsp;Unified&nbsp;Diffs</a>
700 @ %z(xhref("class='button'","%R/%s/%T?sbs=1",zPage,zName))
701 @ Show&nbsp;Side-by-Side&nbsp;Diffs</a>
702 }
703 if( zParent ){
704 @ %z(xhref("class='button'","%R/vpatch?from=%s&to=%s",zParent,zUuid))
705 @ Patch</a>
706 }
707 @</div>
708 if( pRe ){
709 @ <p><b>Only differences that match regular expression "%h(zRe)"
@@ -770,11 +770,11 @@
770 }
771 }
772 style_header("Update of \"%h\"", pWiki->zWikiTitle);
773 zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
774 zDate = db_text(0, "SELECT datetime(%.17g)", pWiki->rDate);
775 style_submenu_element("Raw", "Raw", "artifact/%s", zUuid);
776 style_submenu_element("History", "History", "whistory?name=%t",
777 pWiki->zWikiTitle);
778 style_submenu_element("Page", "Page", "wiki?name=%t",
779 pWiki->zWikiTitle);
780 login_anonymous_available();
@@ -798,11 +798,11 @@
798 if( pWiki->nParent>0 ){
799 int i;
800 @ <tr><th>Parent%s(pWiki->nParent==1?"":"s"):</th><td>
801 for(i=0; i<pWiki->nParent; i++){
802 char *zParent = pWiki->azParent[i];
803 @ %z(href("info/%s",zParent))%s(zParent)</a>
804 }
805 @ </td></tr>
806 }
807 @ </table>
808
@@ -1188,14 +1188,14 @@
1188 @ on branch %z(href("%R/timeline?r=%T",zBr))%h(zBr)</a>
1189 }
1190 @ - %!w(zCom) (user:
1191 hyperlink_to_user(zUser,zDate,")");
1192 if( g.perm.Hyperlink ){
1193 @ %z(href("%R/finfo?name=%T&ci=%s",zName,zVers))[ancestry]</a>
1194 @ %z(href("%R/annotate?checkin=%s&filename=%T",zVers,zName))
1195 @ [annotate]</a>
1196 @ %z(href("%R/blame?filename=%T&checkin=%s",zName,zVers))
1197 @ [blame]</a>
1198 }
1199 cnt++;
1200 if( pDownloadName && blob_size(pDownloadName)==0 ){
1201 blob_append(pDownloadName, zName, -1);
@@ -1302,11 +1302,11 @@
1302 @ Attachment "%h(zFilename)" to
1303 }
1304 objType |= OBJTYPE_ATTACHMENT;
1305 if( strlen(zTarget)==UUID_SIZE && validate16(zTarget,UUID_SIZE) ){
1306 if( g.perm.Hyperlink && g.perm.RdTkt ){
1307 @ ticket [%z(href("%R/tktview?name=%s",zTarget))%S(zTarget)</a>]
1308 }else{
1309 @ ticket [%S(zTarget)]
1310 }
1311 }else{
1312 if( g.perm.Hyperlink && g.perm.RdWiki ){
@@ -1328,11 +1328,11 @@
1328 @ Control artifact.
1329 if( pDownloadName && blob_size(pDownloadName)==0 ){
1330 blob_appendf(pDownloadName, "%.10s.txt", zUuid);
1331 }
1332 }else if( linkToView && g.perm.Hyperlink ){
1333 @ %z(href("%R/artifact/%s",zUuid))[view]</a>
1334 }
1335 return objType;
1336 }
1337
1338
@@ -1404,17 +1404,17 @@
1404 g.zTop, P("v1"), P("v2"), zW);
1405 }
1406
1407 if( P("smhdr")!=0 ){
1408 @ <h2>Differences From Artifact
1409 @ %z(href("%R/artifact/%s",zV1))[%S(zV1)]</a> To
1410 @ %z(href("%R/artifact/%s",zV2))[%S(zV2)]</a>.</h2>
1411 }else{
1412 @ <h2>Differences From
1413 @ Artifact %z(href("%R/artifact/%s",zV1))[%S(zV1)]</a>:</h2>
1414 object_description(v1, 0, 0);
1415 @ <h2>To Artifact %z(href("%R/artifact/%s",zV2))[%S(zV2)]</a>:</h2>
1416 object_description(v2, 0, 0);
1417 }
1418 if( pRe ){
1419 @ <b>Only differences that match regular expression "%h(zRe)"
1420 @ are shown.</b>
@@ -1761,13 +1761,13 @@
1761 @ <pre>
1762 @ %h(z)
1763 @ </pre>
1764 }
1765 }else if( strncmp(zMime, "image/", 6)==0 ){
1766 @ <img src="%R/raw/%s(zUuid)?m=%s(zMime)" />
1767 style_submenu_element("Image", "Image",
1768 "%R/raw/%s?m=%s", zUuid, zMime);
1769 }else{
1770 @ <i>(file is %d(blob_size(&content)) bytes of binary data)</i>
1771 }
1772 @ </blockquote>
1773 }
@@ -1819,19 +1819,19 @@
1819 }
1820 zTktTitle = db_table_has_column( "ticket", "title" )
1821 ? db_text("(No title)", "SELECT title FROM ticket WHERE tkt_uuid=%Q", zTktName)
1822 : 0;
1823 style_header("Ticket Change Details");
1824 style_submenu_element("Raw", "Raw", "%R/artifact/%s", zUuid);
1825 style_submenu_element("History", "History", "%R/tkthistory/%s", zTktName);
1826 style_submenu_element("Page", "Page", "%R/tktview/%t", zTktName);
1827 style_submenu_element("Timeline", "Timeline", "%R/tkttimeline/%t", zTktName);
1828 if( P("plaintext") ){
1829 style_submenu_element("Formatted", "Formatted", "%R/info/%s", zUuid);
1830 }else{
1831 style_submenu_element("Plaintext", "Plaintext",
1832 "%R/info/%s?plaintext", zUuid);
1833 }
1834
1835 @ <div class="section">Overview</div>
1836 @ <p><table class="label-value">
1837 @ <tr><th>Artifact&nbsp;ID:</th>
@@ -2341,11 +2341,11 @@
2341 }
2342 @ <p>Make changes to attributes of check-in
2343 @ [%z(href("%R/ci/%s",zUuid))%s(zUuid)</a>]:</p>
2344 form_begin(0, "%R/ci_edit");
2345 login_insert_csrf_secret();
2346 @ <div><input type="hidden" name="r" value="%s(zUuid)" />
2347 @ <table border="0" cellspacing="10">
2348
2349 @ <tr><th align="right" valign="top">User:</th>
2350 @ <td valign="top">
2351 @ <input type="text" name="u" size="20" value="%h(zNewUser)" />
2352

Keyboard Shortcuts

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