Fossil SCM
Add a menu entry on /fdiff, /ci and /vdiff page to control the diff context (dc=<n>) query parameter. (pending review)
Commit
eae6f32f1cffcd605d10b1c3c9554e69c89a6738
Parent
dabb08e9b31bb0b…
1 file changed
+55
-33
+55
-33
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -525,10 +525,11 @@ | ||
| 525 | 525 | const char *zRe; /* regex parameter */ |
| 526 | 526 | ReCompiled *pRe = 0; /* regex */ |
| 527 | 527 | const char *zW; /* URL param for ignoring whitespace */ |
| 528 | 528 | const char *zPage = "vinfo"; /* Page that shows diffs */ |
| 529 | 529 | const char *zPageHide = "ci"; /* Page that hides diffs */ |
| 530 | + const char *zDc; | |
| 530 | 531 | |
| 531 | 532 | login_check_credentials(); |
| 532 | 533 | if( !g.perm.Read ){ login_needed(g.anon.Read); return; } |
| 533 | 534 | zName = P("name"); |
| 534 | 535 | rid = name_to_rid_www("name"); |
| @@ -697,39 +698,52 @@ | ||
| 697 | 698 | if( db_get_boolean("show-version-diffs", 0)==0 ){ |
| 698 | 699 | verboseFlag = !verboseFlag; |
| 699 | 700 | zPage = "ci"; |
| 700 | 701 | zPageHide = "vinfo"; |
| 701 | 702 | } |
| 703 | + zDc = mprintf("dc=%s", PD("dc","7")); | |
| 702 | 704 | diffFlags = construct_diff_flags(verboseFlag, sideBySide); |
| 705 | + cgi_replace_query_parameter("dc", mprintf("%d", diffFlags&DIFF_CONTEXT_MASK)); | |
| 703 | 706 | zW = (diffFlags&DIFF_IGNORE_ALLWS)?"&w":""; |
| 704 | 707 | 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)) | |
| 706 | 711 | @ Hide Diffs</a> |
| 707 | 712 | 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)) | |
| 709 | 714 | @ Unified Diffs</a> |
| 710 | 715 | }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)) | |
| 712 | 717 | @ Side-by-Side Diffs</a> |
| 713 | 718 | } |
| 714 | 719 | 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)) | |
| 716 | 722 | @ Show Whitespace Changes</a> |
| 717 | 723 | }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)) | |
| 719 | 725 | @ Ignore Whitespace</a> |
| 720 | 726 | } |
| 721 | 727 | }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)) | |
| 723 | 729 | @ Show Unified 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)) | |
| 725 | 731 | @ Show Side-by-Side Diffs</a> |
| 726 | 732 | } |
| 727 | 733 | 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)) | |
| 729 | 735 | @ Patch</a> |
| 730 | 736 | } |
| 737 | + if( verboseFlag ){ | |
| 738 | + int diffContext = diffFlags & DIFF_CONTEXT_MASK; | |
| 739 | + @ <span class='submenuctrl'> | |
| 740 | + @ Context:<input type='text' name='dc' size='4' maxlength='4' | |
| 741 | + @ value='%d(diffContext)'> | |
| 742 | + @ </span> | |
| 743 | + } | |
| 744 | + @ </form> | |
| 731 | 745 | @</div> |
| 732 | 746 | if( pRe ){ |
| 733 | 747 | @ <p><b>Only differences that match regular expression "%h(zRe)" |
| 734 | 748 | @ are shown.</b></p> |
| 735 | 749 | } |
| @@ -992,10 +1006,11 @@ | ||
| 992 | 1006 | const char *zTo; |
| 993 | 1007 | const char *zRe; |
| 994 | 1008 | const char *zW; |
| 995 | 1009 | const char *zVerbose; |
| 996 | 1010 | const char *zGlob; |
| 1011 | + const char *zDc; | |
| 997 | 1012 | ReCompiled *pRe = 0; |
| 998 | 1013 | login_check_credentials(); |
| 999 | 1014 | if( !g.perm.Read ){ login_needed(g.anon.Read); return; } |
| 1000 | 1015 | login_anonymous_available(); |
| 1001 | 1016 | zRe = P("regex"); |
| @@ -1023,55 +1038,58 @@ | ||
| 1023 | 1038 | zFrom = P("from"); |
| 1024 | 1039 | zTo = P("to"); |
| 1025 | 1040 | if(zGlob && !*zGlob){ |
| 1026 | 1041 | zGlob = NULL; |
| 1027 | 1042 | } |
| 1043 | + zDc = mprintf("dc=%s", PD("dc","7")); | |
| 1028 | 1044 | diffFlags = construct_diff_flags(verboseFlag, sideBySide); |
| 1045 | + cgi_replace_query_parameter("dc", mprintf("%d", diffFlags&DIFF_CONTEXT_MASK)); | |
| 1029 | 1046 | zW = (diffFlags&DIFF_IGNORE_ALLWS)?"&w":""; |
| 1030 | 1047 | style_submenu_element("Path","path", |
| 1031 | 1048 | "%R/timeline?me=%T&you=%T", zFrom, zTo); |
| 1032 | 1049 | if( sideBySide || verboseFlag ){ |
| 1033 | 1050 | 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", | |
| 1035 | 1052 | zFrom, zTo, |
| 1036 | - zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW); | |
| 1053 | + zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW, zDc); | |
| 1054 | + style_submenu_entry("dc", "Context:", 4, 0); | |
| 1037 | 1055 | } |
| 1038 | 1056 | if( !sideBySide ){ |
| 1039 | 1057 | 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", | |
| 1041 | 1059 | zFrom, zTo, |
| 1042 | - zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW); | |
| 1060 | + zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW, zDc); | |
| 1043 | 1061 | } |
| 1044 | 1062 | if( sideBySide || !verboseFlag ) { |
| 1045 | 1063 | 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", | |
| 1047 | 1065 | zFrom, zTo, |
| 1048 | - zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW); | |
| 1066 | + zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW, zDc); | |
| 1049 | 1067 | } |
| 1050 | 1068 | 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, | |
| 1052 | 1070 | sideBySide, (verboseFlag && !sideBySide)?"&v":"", |
| 1053 | - zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW); | |
| 1071 | + zGlob ? "&glob=" : "", zGlob ? zGlob : "", zW, zDc); | |
| 1054 | 1072 | if( zGlob ){ |
| 1055 | 1073 | 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); | |
| 1058 | 1076 | }else{ |
| 1059 | 1077 | 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); | |
| 1061 | 1079 | } |
| 1062 | 1080 | if( sideBySide || verboseFlag ){ |
| 1063 | 1081 | if( *zW ){ |
| 1064 | 1082 | 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, | |
| 1066 | 1084 | sideBySide, (verboseFlag && !sideBySide)?"&v":"", |
| 1067 | - zGlob ? "&glob=" : "", zGlob ? zGlob : ""); | |
| 1085 | + zGlob ? "&glob=" : "", zGlob ? zGlob : "", zDc); | |
| 1068 | 1086 | }else{ |
| 1069 | 1087 | 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, | |
| 1071 | 1089 | sideBySide, (verboseFlag && !sideBySide)?"&v":"", |
| 1072 | - zGlob ? "&glob=" : "", zGlob ? zGlob : ""); | |
| 1090 | + zGlob ? "&glob=" : "", zGlob ? zGlob : "", zDc); | |
| 1073 | 1091 | } |
| 1074 | 1092 | } |
| 1075 | 1093 | style_header("Check-in Differences"); |
| 1076 | 1094 | @ <h2>Difference From:</h2><blockquote> |
| 1077 | 1095 | checkin_description(ridFrom); |
| @@ -1419,10 +1437,11 @@ | ||
| 1419 | 1437 | int sideBySide; |
| 1420 | 1438 | char *zV1; |
| 1421 | 1439 | char *zV2; |
| 1422 | 1440 | const char *zRe; |
| 1423 | 1441 | const char *zW; /* URL param for ignoring whitespace */ |
| 1442 | + const char *zDc; | |
| 1424 | 1443 | ReCompiled *pRe = 0; |
| 1425 | 1444 | u64 diffFlags; |
| 1426 | 1445 | u32 objdescFlags = 0; |
| 1427 | 1446 | |
| 1428 | 1447 | login_check_credentials(); |
| @@ -1448,34 +1467,37 @@ | ||
| 1448 | 1467 | } |
| 1449 | 1468 | |
| 1450 | 1469 | sideBySide = !is_false(PD("sbs","1")); |
| 1451 | 1470 | zV1 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v1); |
| 1452 | 1471 | zV2 = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", v2); |
| 1472 | + zDc = mprintf("dc=%s", PD("dc","7")); | |
| 1453 | 1473 | diffFlags = construct_diff_flags(1, sideBySide) | DIFF_HTML; |
| 1474 | + cgi_replace_query_parameter("dc", mprintf("%d", diffFlags&DIFF_CONTEXT_MASK)); | |
| 1454 | 1475 | |
| 1455 | 1476 | style_header("Diff"); |
| 1456 | 1477 | zW = (diffFlags&DIFF_IGNORE_ALLWS)?"&w":""; |
| 1457 | 1478 | if( *zW ){ |
| 1458 | 1479 | 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); | |
| 1461 | 1482 | }else{ |
| 1462 | 1483 | 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); | |
| 1465 | 1486 | } |
| 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); | |
| 1468 | 1489 | if( !sideBySide ){ |
| 1469 | 1490 | 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); | |
| 1472 | 1493 | }else{ |
| 1473 | 1494 | 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); | |
| 1476 | 1497 | } |
| 1498 | + style_submenu_entry("dc", "Context:", 4, 0); | |
| 1477 | 1499 | |
| 1478 | 1500 | if( P("smhdr")!=0 ){ |
| 1479 | 1501 | @ <h2>Differences From Artifact |
| 1480 | 1502 | @ %z(href("%R/artifact/%!S",zV1))[%S(zV1)]</a> To |
| 1481 | 1503 | @ %z(href("%R/artifact/%!S",zV2))[%S(zV2)]</a>.</h2> |
| 1482 | 1504 |
| --- 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 Diffs</a> |
| 707 | if( sideBySide ){ |
| 708 | @ %z(xhref("class='button'","%R/%s/%T?sbs=0%s",zPage,zName,zW)) |
| 709 | @ Unified Diffs</a> |
| 710 | }else{ |
| 711 | @ %z(xhref("class='button'","%R/%s/%T?sbs=1%s",zPage,zName,zW)) |
| 712 | @ Side-by-Side Diffs</a> |
| 713 | } |
| 714 | if( *zW ){ |
| 715 | @ %z(xhref("class='button'","%R/%s/%T?sbs=%d",zPage,zName,sideBySide)) |
| 716 | @ Show Whitespace Changes</a> |
| 717 | }else{ |
| 718 | @ %z(xhref("class='button'","%R/%s/%T?sbs=%d&w",zPage,zName,sideBySide)) |
| 719 | @ Ignore Whitespace</a> |
| 720 | } |
| 721 | }else{ |
| 722 | @ %z(xhref("class='button'","%R/%s/%T?sbs=0",zPage,zName)) |
| 723 | @ Show Unified Diffs</a> |
| 724 | @ %z(xhref("class='button'","%R/%s/%T?sbs=1",zPage,zName)) |
| 725 | @ Show Side-by-Side 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 Diffs</a> |
| 712 | if( sideBySide ){ |
| 713 | @ %z(xhref("class='button'","%R/%s/%T?sbs=0%s&%s",zPage,zName,zW,zDc)) |
| 714 | @ Unified Diffs</a> |
| 715 | }else{ |
| 716 | @ %z(xhref("class='button'","%R/%s/%T?sbs=1%s&%s",zPage,zName,zW,zDc)) |
| 717 | @ Side-by-Side 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 Whitespace Changes</a> |
| 723 | }else{ |
| 724 | @ %z(xhref("class='button'","%R/%s/%T?sbs=%d&w&%s",zPage,zName,sideBySide,zDc)) |
| 725 | @ Ignore Whitespace</a> |
| 726 | } |
| 727 | }else{ |
| 728 | @ %z(xhref("class='button'","%R/%s/%T?sbs=0&%s",zPage,zName, zDc)) |
| 729 | @ Show Unified Diffs</a> |
| 730 | @ %z(xhref("class='button'","%R/%s/%T?sbs=1&%s",zPage,zName, zDc)) |
| 731 | @ Show Side-by-Side 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 | @ 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 |