Fossil SCM

Add a menu entry on /fdiff, /ci and /vdiff page to control the diff context (dc=<n>) query parameter. (pending review)

mgagnon 2015-03-20 04:35 UTC trunk
Commit eae6f32f1cffcd605d10b1c3c9554e69c89a6738
1 file changed +55 -33
+55 -33
--- src/info.c
+++ src/info.c
@@ -525,10 +525,11 @@
525525
const char *zRe; /* regex parameter */
526526
ReCompiled *pRe = 0; /* regex */
527527
const char *zW; /* URL param for ignoring whitespace */
528528
const char *zPage = "vinfo"; /* Page that shows diffs */
529529
const char *zPageHide = "ci"; /* Page that hides diffs */
530
+ const char *zDc;
530531
531532
login_check_credentials();
532533
if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
533534
zName = P("name");
534535
rid = name_to_rid_www("name");
@@ -697,39 +698,52 @@
697698
if( db_get_boolean("show-version-diffs", 0)==0 ){
698699
verboseFlag = !verboseFlag;
699700
zPage = "ci";
700701
zPageHide = "vinfo";
701702
}
703
+ zDc = mprintf("dc=%s", PD("dc","7"));
702704
diffFlags = construct_diff_flags(verboseFlag, sideBySide);
705
+ cgi_replace_query_parameter("dc", mprintf("%d", diffFlags&DIFF_CONTEXT_MASK));
703706
zW = (diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
704707
if( verboseFlag ){
705
- @ %z(xhref("class='button'","%R/%s/%T",zPageHide,zName))
708
+ @ <form id='f01' method='GET' action='%R/%s(zPage)/%T(zName)'>
709
+ @ <input type='hidden' name='sbs' value='%d(sideBySide)'>
710
+ @ %z(xhref("class='button'","%R/%s/%T?%s",zPageHide,zName,zDc))
706711
@ Hide&nbsp;Diffs</a>
707712
if( sideBySide ){
708
- @ %z(xhref("class='button'","%R/%s/%T?sbs=0%s",zPage,zName,zW))
713
+ @ %z(xhref("class='button'","%R/%s/%T?sbs=0%s&%s",zPage,zName,zW,zDc))
709714
@ Unified&nbsp;Diffs</a>
710715
}else{
711
- @ %z(xhref("class='button'","%R/%s/%T?sbs=1%s",zPage,zName,zW))
716
+ @ %z(xhref("class='button'","%R/%s/%T?sbs=1%s&%s",zPage,zName,zW,zDc))
712717
@ Side-by-Side&nbsp;Diffs</a>
713718
}
714719
if( *zW ){
715
- @ %z(xhref("class='button'","%R/%s/%T?sbs=%d",zPage,zName,sideBySide))
720
+ @ <input type='hidden' name='w'>
721
+ @ %z(xhref("class='button'","%R/%s/%T?sbs=%d&%s",zPage,zName,sideBySide,zDc))
716722
@ Show&nbsp;Whitespace&nbsp;Changes</a>
717723
}else{
718
- @ %z(xhref("class='button'","%R/%s/%T?sbs=%d&w",zPage,zName,sideBySide))
724
+ @ %z(xhref("class='button'","%R/%s/%T?sbs=%d&w&%s",zPage,zName,sideBySide,zDc))
719725
@ Ignore&nbsp;Whitespace</a>
720726
}
721727
}else{
722
- @ %z(xhref("class='button'","%R/%s/%T?sbs=0",zPage,zName))
728
+ @ %z(xhref("class='button'","%R/%s/%T?sbs=0&%s",zPage,zName, zDc))
723729
@ Show&nbsp;Unified&nbsp;Diffs</a>
724
- @ %z(xhref("class='button'","%R/%s/%T?sbs=1",zPage,zName))
730
+ @ %z(xhref("class='button'","%R/%s/%T?sbs=1&%s",zPage,zName, zDc))
725731
@ Show&nbsp;Side-by-Side&nbsp;Diffs</a>
726732
}
727733
if( zParent ){
728
- @ %z(xhref("class='button'","%R/vpatch?from=%!S&to=%!S",zParent,zUuid))
734
+ @ %z(xhref("class='button'","%R/vpatch?from=%!S&to=%!S&%s",zParent,zUuid,zDc))
729735
@ Patch</a>
730736
}
737
+ if( verboseFlag ){
738
+ int diffContext = diffFlags & DIFF_CONTEXT_MASK;
739
+ @ <span class='submenuctrl'>
740
+ @ &nbsp;Context:<input type='text' name='dc' size='4' maxlength='4'
741
+ @ value='%d(diffContext)'>
742
+ @ </span>
743
+ }
744
+ @ </form>
731745
@</div>
732746
if( pRe ){
733747
@ <p><b>Only differences that match regular expression "%h(zRe)"
734748
@ are shown.</b></p>
735749
}
@@ -992,10 +1006,11 @@
9921006
const char *zTo;
9931007
const char *zRe;
9941008
const char *zW;
9951009
const char *zVerbose;
9961010
const char *zGlob;
1011
+ const char *zDc;
9971012
ReCompiled *pRe = 0;
9981013
login_check_credentials();
9991014
if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
10001015
login_anonymous_available();
10011016
zRe = P("regex");
@@ -1023,55 +1038,58 @@
10231038
zFrom = P("from");
10241039
zTo = P("to");
10251040
if(zGlob && !*zGlob){
10261041
zGlob = NULL;
10271042
}
1043
+ zDc = mprintf("dc=%s", PD("dc","7"));
10281044
diffFlags = construct_diff_flags(verboseFlag, sideBySide);
1045
+ cgi_replace_query_parameter("dc", mprintf("%d", diffFlags&DIFF_CONTEXT_MASK));
10291046
zW = (diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
10301047
style_submenu_element("Path","path",
10311048
"%R/timeline?me=%T&you=%T", zFrom, zTo);
10321049
if( sideBySide || verboseFlag ){
10331050
style_submenu_element("Hide Diff", "hidediff",
1034
- "%R/vdiff?from=%T&to=%T&sbs=0%s%T%s",
1051
+ "%R/vdiff?from=%T&to=%T&sbs=0%s%T%s&%s",
10351052
zFrom, zTo,
1036
- zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
1053
+ zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW, zDc);
1054
+ style_submenu_entry("dc", "Context:", 4, 0);
10371055
}
10381056
if( !sideBySide ){
10391057
style_submenu_element("Side-by-Side Diff", "sbsdiff",
1040
- "%R/vdiff?from=%T&to=%T&sbs=1%s%T%s",
1058
+ "%R/vdiff?from=%T&to=%T&sbs=1%s%T%s&%s",
10411059
zFrom, zTo,
1042
- zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
1060
+ zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW, zDc);
10431061
}
10441062
if( sideBySide || !verboseFlag ) {
10451063
style_submenu_element("Unified Diff", "udiff",
1046
- "%R/vdiff?from=%T&to=%T&sbs=0&v%s%T%s",
1064
+ "%R/vdiff?from=%T&to=%T&sbs=0&v%s%T%s&%s",
10471065
zFrom, zTo,
1048
- zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
1066
+ zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW, zDc);
10491067
}
10501068
style_submenu_element("Invert", "invert",
1051
- "%R/vdiff?from=%T&to=%T&sbs=%d%s%s%T%s", zTo, zFrom,
1069
+ "%R/vdiff?from=%T&to=%T&sbs=%d%s%s%T%s&%s", zTo, zFrom,
10521070
sideBySide, (verboseFlag && !sideBySide)?"&v":"",
1053
- zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
1071
+ zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW, zDc);
10541072
if( zGlob ){
10551073
style_submenu_element("Clear glob", "clearglob",
1056
- "%R/vdiff?from=%T&to=%T&sbs=%d%s%s", zFrom, zTo,
1057
- sideBySide, (verboseFlag && !sideBySide)?"&v":"", zW);
1074
+ "%R/vdiff?from=%T&to=%T&sbs=%d%s%s&%s", zFrom, zTo,
1075
+ sideBySide, (verboseFlag && !sideBySide)?"&v":"", zW, zDc);
10581076
}else{
10591077
style_submenu_element("Patch", "patch",
1060
- "%R/vpatch?from=%T&to=%T%s", zFrom, zTo, zW);
1078
+ "%R/vpatch?from=%T&to=%T%s&%s", zFrom, zTo, zW, zDc);
10611079
}
10621080
if( sideBySide || verboseFlag ){
10631081
if( *zW ){
10641082
style_submenu_element("Show Whitespace Differences", "whitespace",
1065
- "%R/vdiff?from=%T&to=%T&sbs=%d%s%s%T", zFrom, zTo,
1083
+ "%R/vdiff?from=%T&to=%T&sbs=%d%s%s%T&%s", zFrom, zTo,
10661084
sideBySide, (verboseFlag && !sideBySide)?"&v":"",
1067
- zGlob ? "&glob=" : "", zGlob ? zGlob : "");
1085
+ zGlob ? "&glob=" : "", zGlob ? zGlob : "", zDc);
10681086
}else{
10691087
style_submenu_element("Ignore Whitespace", "ignorews",
1070
- "%R/vdiff?from=%T&to=%T&sbs=%d%s%s%T&w", zFrom, zTo,
1088
+ "%R/vdiff?from=%T&to=%T&sbs=%d%s%s%T&w&%s", zFrom, zTo,
10711089
sideBySide, (verboseFlag && !sideBySide)?"&v":"",
1072
- zGlob ? "&glob=" : "", zGlob ? zGlob : "");
1090
+ zGlob ? "&glob=" : "", zGlob ? zGlob : "", zDc);
10731091
}
10741092
}
10751093
style_header("Check-in Differences");
10761094
@ <h2>Difference From:</h2><blockquote>
10771095
checkin_description(ridFrom);
@@ -1419,10 +1437,11 @@
14191437
int sideBySide;
14201438
char *zV1;
14211439
char *zV2;
14221440
const char *zRe;
14231441
const char *zW; /* URL param for ignoring whitespace */
1442
+ const char *zDc;
14241443
ReCompiled *pRe = 0;
14251444
u64 diffFlags;
14261445
u32 objdescFlags = 0;
14271446
14281447
login_check_credentials();
@@ -1448,34 +1467,37 @@
14481467
}
14491468
14501469
sideBySide = !is_false(PD("sbs","1"));
14511470
zV1 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v1);
14521471
zV2 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v2);
1472
+ zDc = mprintf("dc=%s", PD("dc","7"));
14531473
diffFlags = construct_diff_flags(1, sideBySide) | DIFF_HTML;
1474
+ cgi_replace_query_parameter("dc", mprintf("%d", diffFlags&DIFF_CONTEXT_MASK));
14541475
14551476
style_header("Diff");
14561477
zW = (diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
14571478
if( *zW ){
14581479
style_submenu_element("Show Whitespace Changes", "Show Whitespace Changes",
1459
- "%s/fdiff?v1=%T&v2=%T&sbs=%d",
1460
- g.zTop, P("v1"), P("v2"), sideBySide);
1480
+ "%s/fdiff?v1=%T&v2=%T&sbs=%d&%s",
1481
+ g.zTop, P("v1"), P("v2"), sideBySide, zDc);
14611482
}else{
14621483
style_submenu_element("Ignore Whitespace", "Ignore Whitespace",
1463
- "%s/fdiff?v1=%T&v2=%T&sbs=%d&w",
1464
- g.zTop, P("v1"), P("v2"), sideBySide);
1484
+ "%s/fdiff?v1=%T&v2=%T&sbs=%d&w&%s",
1485
+ g.zTop, P("v1"), P("v2"), sideBySide, zDc);
14651486
}
1466
- style_submenu_element("Patch", "Patch", "%s/fdiff?v1=%T&v2=%T&patch",
1467
- g.zTop, P("v1"), P("v2"));
1487
+ style_submenu_element("Patch", "Patch", "%s/fdiff?v1=%T&v2=%T&patch&%s",
1488
+ g.zTop, P("v1"), P("v2"), zDc);
14681489
if( !sideBySide ){
14691490
style_submenu_element("Side-by-Side Diff", "sbsdiff",
1470
- "%s/fdiff?v1=%T&v2=%T&sbs=1%s",
1471
- g.zTop, P("v1"), P("v2"), zW);
1491
+ "%s/fdiff?v1=%T&v2=%T&sbs=1%s&%s",
1492
+ g.zTop, P("v1"), P("v2"), zW, zDc);
14721493
}else{
14731494
style_submenu_element("Unified Diff", "udiff",
1474
- "%s/fdiff?v1=%T&v2=%T&sbs=0%s",
1475
- g.zTop, P("v1"), P("v2"), zW);
1495
+ "%s/fdiff?v1=%T&v2=%T&sbs=0%s&%s",
1496
+ g.zTop, P("v1"), P("v2"), zW, zDc);
14761497
}
1498
+ style_submenu_entry("dc", "Context:", 4, 0);
14771499
14781500
if( P("smhdr")!=0 ){
14791501
@ <h2>Differences From Artifact
14801502
@ %z(href("%R/artifact/%!S",zV1))[%S(zV1)]</a> To
14811503
@ %z(href("%R/artifact/%!S",zV2))[%S(zV2)]</a>.</h2>
14821504
--- src/info.c
+++ src/info.c
@@ -525,10 +525,11 @@
525 const char *zRe; /* regex parameter */
526 ReCompiled *pRe = 0; /* regex */
527 const char *zW; /* URL param for ignoring whitespace */
528 const char *zPage = "vinfo"; /* Page that shows diffs */
529 const char *zPageHide = "ci"; /* Page that hides diffs */
 
530
531 login_check_credentials();
532 if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
533 zName = P("name");
534 rid = name_to_rid_www("name");
@@ -697,39 +698,52 @@
697 if( db_get_boolean("show-version-diffs", 0)==0 ){
698 verboseFlag = !verboseFlag;
699 zPage = "ci";
700 zPageHide = "vinfo";
701 }
 
702 diffFlags = construct_diff_flags(verboseFlag, sideBySide);
 
703 zW = (diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
704 if( verboseFlag ){
705 @ %z(xhref("class='button'","%R/%s/%T",zPageHide,zName))
 
 
706 @ Hide&nbsp;Diffs</a>
707 if( sideBySide ){
708 @ %z(xhref("class='button'","%R/%s/%T?sbs=0%s",zPage,zName,zW))
709 @ Unified&nbsp;Diffs</a>
710 }else{
711 @ %z(xhref("class='button'","%R/%s/%T?sbs=1%s",zPage,zName,zW))
712 @ Side-by-Side&nbsp;Diffs</a>
713 }
714 if( *zW ){
715 @ %z(xhref("class='button'","%R/%s/%T?sbs=%d",zPage,zName,sideBySide))
 
716 @ Show&nbsp;Whitespace&nbsp;Changes</a>
717 }else{
718 @ %z(xhref("class='button'","%R/%s/%T?sbs=%d&w",zPage,zName,sideBySide))
719 @ Ignore&nbsp;Whitespace</a>
720 }
721 }else{
722 @ %z(xhref("class='button'","%R/%s/%T?sbs=0",zPage,zName))
723 @ Show&nbsp;Unified&nbsp;Diffs</a>
724 @ %z(xhref("class='button'","%R/%s/%T?sbs=1",zPage,zName))
725 @ Show&nbsp;Side-by-Side&nbsp;Diffs</a>
726 }
727 if( zParent ){
728 @ %z(xhref("class='button'","%R/vpatch?from=%!S&to=%!S",zParent,zUuid))
729 @ Patch</a>
730 }
 
 
 
 
 
 
 
 
731 @</div>
732 if( pRe ){
733 @ <p><b>Only differences that match regular expression "%h(zRe)"
734 @ are shown.</b></p>
735 }
@@ -992,10 +1006,11 @@
992 const char *zTo;
993 const char *zRe;
994 const char *zW;
995 const char *zVerbose;
996 const char *zGlob;
 
997 ReCompiled *pRe = 0;
998 login_check_credentials();
999 if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
1000 login_anonymous_available();
1001 zRe = P("regex");
@@ -1023,55 +1038,58 @@
1023 zFrom = P("from");
1024 zTo = P("to");
1025 if(zGlob && !*zGlob){
1026 zGlob = NULL;
1027 }
 
1028 diffFlags = construct_diff_flags(verboseFlag, sideBySide);
 
1029 zW = (diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
1030 style_submenu_element("Path","path",
1031 "%R/timeline?me=%T&you=%T", zFrom, zTo);
1032 if( sideBySide || verboseFlag ){
1033 style_submenu_element("Hide Diff", "hidediff",
1034 "%R/vdiff?from=%T&to=%T&sbs=0%s%T%s",
1035 zFrom, zTo,
1036 zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
 
1037 }
1038 if( !sideBySide ){
1039 style_submenu_element("Side-by-Side Diff", "sbsdiff",
1040 "%R/vdiff?from=%T&to=%T&sbs=1%s%T%s",
1041 zFrom, zTo,
1042 zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
1043 }
1044 if( sideBySide || !verboseFlag ) {
1045 style_submenu_element("Unified Diff", "udiff",
1046 "%R/vdiff?from=%T&to=%T&sbs=0&v%s%T%s",
1047 zFrom, zTo,
1048 zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
1049 }
1050 style_submenu_element("Invert", "invert",
1051 "%R/vdiff?from=%T&to=%T&sbs=%d%s%s%T%s", zTo, zFrom,
1052 sideBySide, (verboseFlag && !sideBySide)?"&v":"",
1053 zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW);
1054 if( zGlob ){
1055 style_submenu_element("Clear glob", "clearglob",
1056 "%R/vdiff?from=%T&to=%T&sbs=%d%s%s", zFrom, zTo,
1057 sideBySide, (verboseFlag && !sideBySide)?"&v":"", zW);
1058 }else{
1059 style_submenu_element("Patch", "patch",
1060 "%R/vpatch?from=%T&to=%T%s", zFrom, zTo, zW);
1061 }
1062 if( sideBySide || verboseFlag ){
1063 if( *zW ){
1064 style_submenu_element("Show Whitespace Differences", "whitespace",
1065 "%R/vdiff?from=%T&to=%T&sbs=%d%s%s%T", zFrom, zTo,
1066 sideBySide, (verboseFlag && !sideBySide)?"&v":"",
1067 zGlob ? "&glob=" : "", zGlob ? zGlob : "");
1068 }else{
1069 style_submenu_element("Ignore Whitespace", "ignorews",
1070 "%R/vdiff?from=%T&to=%T&sbs=%d%s%s%T&w", zFrom, zTo,
1071 sideBySide, (verboseFlag && !sideBySide)?"&v":"",
1072 zGlob ? "&glob=" : "", zGlob ? zGlob : "");
1073 }
1074 }
1075 style_header("Check-in Differences");
1076 @ <h2>Difference From:</h2><blockquote>
1077 checkin_description(ridFrom);
@@ -1419,10 +1437,11 @@
1419 int sideBySide;
1420 char *zV1;
1421 char *zV2;
1422 const char *zRe;
1423 const char *zW; /* URL param for ignoring whitespace */
 
1424 ReCompiled *pRe = 0;
1425 u64 diffFlags;
1426 u32 objdescFlags = 0;
1427
1428 login_check_credentials();
@@ -1448,34 +1467,37 @@
1448 }
1449
1450 sideBySide = !is_false(PD("sbs","1"));
1451 zV1 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v1);
1452 zV2 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v2);
 
1453 diffFlags = construct_diff_flags(1, sideBySide) | DIFF_HTML;
 
1454
1455 style_header("Diff");
1456 zW = (diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
1457 if( *zW ){
1458 style_submenu_element("Show Whitespace Changes", "Show Whitespace Changes",
1459 "%s/fdiff?v1=%T&v2=%T&sbs=%d",
1460 g.zTop, P("v1"), P("v2"), sideBySide);
1461 }else{
1462 style_submenu_element("Ignore Whitespace", "Ignore Whitespace",
1463 "%s/fdiff?v1=%T&v2=%T&sbs=%d&w",
1464 g.zTop, P("v1"), P("v2"), sideBySide);
1465 }
1466 style_submenu_element("Patch", "Patch", "%s/fdiff?v1=%T&v2=%T&patch",
1467 g.zTop, P("v1"), P("v2"));
1468 if( !sideBySide ){
1469 style_submenu_element("Side-by-Side Diff", "sbsdiff",
1470 "%s/fdiff?v1=%T&v2=%T&sbs=1%s",
1471 g.zTop, P("v1"), P("v2"), zW);
1472 }else{
1473 style_submenu_element("Unified Diff", "udiff",
1474 "%s/fdiff?v1=%T&v2=%T&sbs=0%s",
1475 g.zTop, P("v1"), P("v2"), zW);
1476 }
 
1477
1478 if( P("smhdr")!=0 ){
1479 @ <h2>Differences From Artifact
1480 @ %z(href("%R/artifact/%!S",zV1))[%S(zV1)]</a> To
1481 @ %z(href("%R/artifact/%!S",zV2))[%S(zV2)]</a>.</h2>
1482
--- src/info.c
+++ src/info.c
@@ -525,10 +525,11 @@
525 const char *zRe; /* regex parameter */
526 ReCompiled *pRe = 0; /* regex */
527 const char *zW; /* URL param for ignoring whitespace */
528 const char *zPage = "vinfo"; /* Page that shows diffs */
529 const char *zPageHide = "ci"; /* Page that hides diffs */
530 const char *zDc;
531
532 login_check_credentials();
533 if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
534 zName = P("name");
535 rid = name_to_rid_www("name");
@@ -697,39 +698,52 @@
698 if( db_get_boolean("show-version-diffs", 0)==0 ){
699 verboseFlag = !verboseFlag;
700 zPage = "ci";
701 zPageHide = "vinfo";
702 }
703 zDc = mprintf("dc=%s", PD("dc","7"));
704 diffFlags = construct_diff_flags(verboseFlag, sideBySide);
705 cgi_replace_query_parameter("dc", mprintf("%d", diffFlags&DIFF_CONTEXT_MASK));
706 zW = (diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
707 if( verboseFlag ){
708 @ <form id='f01' method='GET' action='%R/%s(zPage)/%T(zName)'>
709 @ <input type='hidden' name='sbs' value='%d(sideBySide)'>
710 @ %z(xhref("class='button'","%R/%s/%T?%s",zPageHide,zName,zDc))
711 @ Hide&nbsp;Diffs</a>
712 if( sideBySide ){
713 @ %z(xhref("class='button'","%R/%s/%T?sbs=0%s&%s",zPage,zName,zW,zDc))
714 @ Unified&nbsp;Diffs</a>
715 }else{
716 @ %z(xhref("class='button'","%R/%s/%T?sbs=1%s&%s",zPage,zName,zW,zDc))
717 @ Side-by-Side&nbsp;Diffs</a>
718 }
719 if( *zW ){
720 @ <input type='hidden' name='w'>
721 @ %z(xhref("class='button'","%R/%s/%T?sbs=%d&%s",zPage,zName,sideBySide,zDc))
722 @ Show&nbsp;Whitespace&nbsp;Changes</a>
723 }else{
724 @ %z(xhref("class='button'","%R/%s/%T?sbs=%d&w&%s",zPage,zName,sideBySide,zDc))
725 @ Ignore&nbsp;Whitespace</a>
726 }
727 }else{
728 @ %z(xhref("class='button'","%R/%s/%T?sbs=0&%s",zPage,zName, zDc))
729 @ Show&nbsp;Unified&nbsp;Diffs</a>
730 @ %z(xhref("class='button'","%R/%s/%T?sbs=1&%s",zPage,zName, zDc))
731 @ Show&nbsp;Side-by-Side&nbsp;Diffs</a>
732 }
733 if( zParent ){
734 @ %z(xhref("class='button'","%R/vpatch?from=%!S&to=%!S&%s",zParent,zUuid,zDc))
735 @ Patch</a>
736 }
737 if( verboseFlag ){
738 int diffContext = diffFlags & DIFF_CONTEXT_MASK;
739 @ <span class='submenuctrl'>
740 @ &nbsp;Context:<input type='text' name='dc' size='4' maxlength='4'
741 @ value='%d(diffContext)'>
742 @ </span>
743 }
744 @ </form>
745 @</div>
746 if( pRe ){
747 @ <p><b>Only differences that match regular expression "%h(zRe)"
748 @ are shown.</b></p>
749 }
@@ -992,10 +1006,11 @@
1006 const char *zTo;
1007 const char *zRe;
1008 const char *zW;
1009 const char *zVerbose;
1010 const char *zGlob;
1011 const char *zDc;
1012 ReCompiled *pRe = 0;
1013 login_check_credentials();
1014 if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
1015 login_anonymous_available();
1016 zRe = P("regex");
@@ -1023,55 +1038,58 @@
1038 zFrom = P("from");
1039 zTo = P("to");
1040 if(zGlob && !*zGlob){
1041 zGlob = NULL;
1042 }
1043 zDc = mprintf("dc=%s", PD("dc","7"));
1044 diffFlags = construct_diff_flags(verboseFlag, sideBySide);
1045 cgi_replace_query_parameter("dc", mprintf("%d", diffFlags&DIFF_CONTEXT_MASK));
1046 zW = (diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
1047 style_submenu_element("Path","path",
1048 "%R/timeline?me=%T&you=%T", zFrom, zTo);
1049 if( sideBySide || verboseFlag ){
1050 style_submenu_element("Hide Diff", "hidediff",
1051 "%R/vdiff?from=%T&to=%T&sbs=0%s%T%s&%s",
1052 zFrom, zTo,
1053 zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW, zDc);
1054 style_submenu_entry("dc", "Context:", 4, 0);
1055 }
1056 if( !sideBySide ){
1057 style_submenu_element("Side-by-Side Diff", "sbsdiff",
1058 "%R/vdiff?from=%T&to=%T&sbs=1%s%T%s&%s",
1059 zFrom, zTo,
1060 zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW, zDc);
1061 }
1062 if( sideBySide || !verboseFlag ) {
1063 style_submenu_element("Unified Diff", "udiff",
1064 "%R/vdiff?from=%T&to=%T&sbs=0&v%s%T%s&%s",
1065 zFrom, zTo,
1066 zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW, zDc);
1067 }
1068 style_submenu_element("Invert", "invert",
1069 "%R/vdiff?from=%T&to=%T&sbs=%d%s%s%T%s&%s", zTo, zFrom,
1070 sideBySide, (verboseFlag && !sideBySide)?"&v":"",
1071 zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW, zDc);
1072 if( zGlob ){
1073 style_submenu_element("Clear glob", "clearglob",
1074 "%R/vdiff?from=%T&to=%T&sbs=%d%s%s&%s", zFrom, zTo,
1075 sideBySide, (verboseFlag && !sideBySide)?"&v":"", zW, zDc);
1076 }else{
1077 style_submenu_element("Patch", "patch",
1078 "%R/vpatch?from=%T&to=%T%s&%s", zFrom, zTo, zW, zDc);
1079 }
1080 if( sideBySide || verboseFlag ){
1081 if( *zW ){
1082 style_submenu_element("Show Whitespace Differences", "whitespace",
1083 "%R/vdiff?from=%T&to=%T&sbs=%d%s%s%T&%s", zFrom, zTo,
1084 sideBySide, (verboseFlag && !sideBySide)?"&v":"",
1085 zGlob ? "&glob=" : "", zGlob ? zGlob : "", zDc);
1086 }else{
1087 style_submenu_element("Ignore Whitespace", "ignorews",
1088 "%R/vdiff?from=%T&to=%T&sbs=%d%s%s%T&w&%s", zFrom, zTo,
1089 sideBySide, (verboseFlag && !sideBySide)?"&v":"",
1090 zGlob ? "&glob=" : "", zGlob ? zGlob : "", zDc);
1091 }
1092 }
1093 style_header("Check-in Differences");
1094 @ <h2>Difference From:</h2><blockquote>
1095 checkin_description(ridFrom);
@@ -1419,10 +1437,11 @@
1437 int sideBySide;
1438 char *zV1;
1439 char *zV2;
1440 const char *zRe;
1441 const char *zW; /* URL param for ignoring whitespace */
1442 const char *zDc;
1443 ReCompiled *pRe = 0;
1444 u64 diffFlags;
1445 u32 objdescFlags = 0;
1446
1447 login_check_credentials();
@@ -1448,34 +1467,37 @@
1467 }
1468
1469 sideBySide = !is_false(PD("sbs","1"));
1470 zV1 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v1);
1471 zV2 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v2);
1472 zDc = mprintf("dc=%s", PD("dc","7"));
1473 diffFlags = construct_diff_flags(1, sideBySide) | DIFF_HTML;
1474 cgi_replace_query_parameter("dc", mprintf("%d", diffFlags&DIFF_CONTEXT_MASK));
1475
1476 style_header("Diff");
1477 zW = (diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
1478 if( *zW ){
1479 style_submenu_element("Show Whitespace Changes", "Show Whitespace Changes",
1480 "%s/fdiff?v1=%T&v2=%T&sbs=%d&%s",
1481 g.zTop, P("v1"), P("v2"), sideBySide, zDc);
1482 }else{
1483 style_submenu_element("Ignore Whitespace", "Ignore Whitespace",
1484 "%s/fdiff?v1=%T&v2=%T&sbs=%d&w&%s",
1485 g.zTop, P("v1"), P("v2"), sideBySide, zDc);
1486 }
1487 style_submenu_element("Patch", "Patch", "%s/fdiff?v1=%T&v2=%T&patch&%s",
1488 g.zTop, P("v1"), P("v2"), zDc);
1489 if( !sideBySide ){
1490 style_submenu_element("Side-by-Side Diff", "sbsdiff",
1491 "%s/fdiff?v1=%T&v2=%T&sbs=1%s&%s",
1492 g.zTop, P("v1"), P("v2"), zW, zDc);
1493 }else{
1494 style_submenu_element("Unified Diff", "udiff",
1495 "%s/fdiff?v1=%T&v2=%T&sbs=0%s&%s",
1496 g.zTop, P("v1"), P("v2"), zW, zDc);
1497 }
1498 style_submenu_entry("dc", "Context:", 4, 0);
1499
1500 if( P("smhdr")!=0 ){
1501 @ <h2>Differences From Artifact
1502 @ %z(href("%R/artifact/%!S",zV1))[%S(zV1)]</a> To
1503 @ %z(href("%R/artifact/%!S",zV2))[%S(zV2)]</a>.</h2>
1504

Keyboard Shortcuts

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