Fossil SCM
Merged vdiff-subdir feature branch into root.
Commit
9b1932f00e45c2ce48495b1b7ae18a0e9be56cef
Parent
d8a588ba765ae5b…
1 file changed
+42
-20
+42
-20
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -922,10 +922,11 @@ | ||
| 922 | 922 | ** from=TAG |
| 923 | 923 | ** to=TAG |
| 924 | 924 | ** branch=TAG |
| 925 | 925 | ** v=BOOLEAN |
| 926 | 926 | ** sbs=BOOLEAN |
| 927 | +** glob=STRING only diff files matching this glob | |
| 927 | 928 | ** |
| 928 | 929 | ** |
| 929 | 930 | ** Show all differences between two checkins. |
| 930 | 931 | */ |
| 931 | 932 | void vdiff_page(void){ |
| @@ -938,16 +939,15 @@ | ||
| 938 | 939 | const char *zBranch; |
| 939 | 940 | const char *zFrom; |
| 940 | 941 | const char *zTo; |
| 941 | 942 | const char *zRe; |
| 942 | 943 | const char *zVerbose; |
| 944 | + const char *zGlob; | |
| 943 | 945 | ReCompiled *pRe = 0; |
| 944 | - | |
| 945 | 946 | login_check_credentials(); |
| 946 | 947 | if( !g.perm.Read ){ login_needed(); return; } |
| 947 | 948 | login_anonymous_available(); |
| 948 | - | |
| 949 | 949 | zRe = P("regex"); |
| 950 | 950 | if( zRe ) re_compile(&pRe, zRe, 0); |
| 951 | 951 | zBranch = P("branch"); |
| 952 | 952 | if( zBranch && zBranch[0] ){ |
| 953 | 953 | cgi_replace_parameter("from", mprintf("root:%s", zBranch)); |
| @@ -965,30 +965,43 @@ | ||
| 965 | 965 | if( !zVerbose ){ |
| 966 | 966 | zVerbose = P("detail"); /* deprecated */ |
| 967 | 967 | } |
| 968 | 968 | verboseFlag = (zVerbose!=0) && !is_false(zVerbose); |
| 969 | 969 | if( !verboseFlag && sideBySide ) verboseFlag = 1; |
| 970 | + zGlob = P("glob"); | |
| 970 | 971 | zFrom = P("from"); |
| 971 | 972 | zTo = P("to"); |
| 973 | + if(zGlob && !*zGlob){ | |
| 974 | + zGlob = NULL; | |
| 975 | + } | |
| 972 | 976 | if( sideBySide || verboseFlag ){ |
| 973 | 977 | style_submenu_element("Hide Diff", "hidediff", |
| 974 | - "%R/vdiff?from=%T&to=%T&sbs=0", | |
| 975 | - zFrom, zTo); | |
| 978 | + "%R/vdiff?from=%T&to=%T&sbs=0%s%T", | |
| 979 | + zFrom, zTo, | |
| 980 | + zGlob ? "&glob=" : "", zGlob ? zGlob : ""); | |
| 976 | 981 | } |
| 977 | 982 | if( !sideBySide ){ |
| 978 | 983 | style_submenu_element("Side-by-side Diff", "sbsdiff", |
| 979 | - "%R/vdiff?from=%T&to=%T&sbs=1", | |
| 980 | - zFrom, zTo); | |
| 984 | + "%R/vdiff?from=%T&to=%T&sbs=1%s%T", | |
| 985 | + zFrom, zTo, | |
| 986 | + zGlob ? "&glob=" : "", zGlob ? zGlob : ""); | |
| 981 | 987 | } |
| 982 | 988 | if( sideBySide || !verboseFlag ) { |
| 983 | 989 | style_submenu_element("Unified Diff", "udiff", |
| 984 | - "%R/vdiff?from=%T&to=%T&sbs=0&v", | |
| 985 | - zFrom, zTo); | |
| 990 | + "%R/vdiff?from=%T&to=%T&sbs=0&v%s%T", | |
| 991 | + zFrom, zTo, | |
| 992 | + zGlob ? "&glob=" : "", zGlob ? zGlob : ""); | |
| 986 | 993 | } |
| 987 | 994 | style_submenu_element("Invert", "invert", |
| 988 | - "%R/vdiff?from=%T&to=%T&sbs=%d%s", zTo, zFrom, | |
| 989 | - sideBySide, (verboseFlag && !sideBySide)?"&v":""); | |
| 995 | + "%R/vdiff?from=%T&to=%T&sbs=%d%s%s%T", zTo, zFrom, | |
| 996 | + sideBySide, (verboseFlag && !sideBySide)?"&v":"", | |
| 997 | + zGlob ? "&glob=" : "", zGlob ? zGlob : ""); | |
| 998 | + if( zGlob ){ | |
| 999 | + style_submenu_element("Clear glob", "clearglob", | |
| 1000 | + "%R/vdiff?from=%T&to=%T&sbs=%d%s", zFrom, zTo, | |
| 1001 | + sideBySide, (verboseFlag && !sideBySide)?"&v":""); | |
| 1002 | + } | |
| 990 | 1003 | style_header("Check-in Differences"); |
| 991 | 1004 | @ <h2>Difference From:</h2><blockquote> |
| 992 | 1005 | checkin_description(ridFrom); |
| 993 | 1006 | @ </blockquote><h2>To:</h2><blockquote> |
| 994 | 1007 | checkin_description(ridTo); |
| @@ -995,10 +1008,13 @@ | ||
| 995 | 1008 | @ </blockquote> |
| 996 | 1009 | if( pRe ){ |
| 997 | 1010 | @ <p><b>Only differences that match regular expression "%h(zRe)" |
| 998 | 1011 | @ are shown.</b></p> |
| 999 | 1012 | } |
| 1013 | + if( zGlob ){ | |
| 1014 | + @ <p><b>Only files matching the glob "%h(zGlob)" are shown.</b></p> | |
| 1015 | + } | |
| 1000 | 1016 | @<hr /><p> |
| 1001 | 1017 | |
| 1002 | 1018 | manifest_file_rewind(pFrom); |
| 1003 | 1019 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1004 | 1020 | manifest_file_rewind(pTo); |
| @@ -1012,27 +1028,33 @@ | ||
| 1012 | 1028 | cmp = -1; |
| 1013 | 1029 | }else{ |
| 1014 | 1030 | cmp = fossil_strcmp(pFileFrom->zName, pFileTo->zName); |
| 1015 | 1031 | } |
| 1016 | 1032 | if( cmp<0 ){ |
| 1017 | - append_file_change_line(pFileFrom->zName, | |
| 1018 | - pFileFrom->zUuid, 0, 0, diffFlags, pRe, 0); | |
| 1033 | + if(!zGlob || strglob(zGlob, pFileFrom->zName)){ | |
| 1034 | + append_file_change_line(pFileFrom->zName, | |
| 1035 | + pFileFrom->zUuid, 0, 0, diffFlags, pRe, 0); | |
| 1036 | + } | |
| 1019 | 1037 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1020 | 1038 | }else if( cmp>0 ){ |
| 1021 | - append_file_change_line(pFileTo->zName, | |
| 1022 | - 0, pFileTo->zUuid, 0, diffFlags, pRe, | |
| 1023 | - manifest_file_mperm(pFileTo)); | |
| 1039 | + if(!zGlob || strglob(zGlob, pFileTo->zName)){ | |
| 1040 | + append_file_change_line(pFileTo->zName, | |
| 1041 | + 0, pFileTo->zUuid, 0, diffFlags, pRe, | |
| 1042 | + manifest_file_mperm(pFileTo)); | |
| 1043 | + } | |
| 1024 | 1044 | pFileTo = manifest_file_next(pTo, 0); |
| 1025 | 1045 | }else if( fossil_strcmp(pFileFrom->zUuid, pFileTo->zUuid)==0 ){ |
| 1026 | - /* No changes */ | |
| 1027 | 1046 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1028 | 1047 | pFileTo = manifest_file_next(pTo, 0); |
| 1029 | 1048 | }else{ |
| 1030 | - append_file_change_line(pFileFrom->zName, | |
| 1031 | - pFileFrom->zUuid, | |
| 1032 | - pFileTo->zUuid, 0, diffFlags, pRe, | |
| 1033 | - manifest_file_mperm(pFileTo)); | |
| 1049 | + if(!zGlob || (strglob(zGlob, pFileFrom->zName) | |
| 1050 | + || strglob(zGlob, pFileTo->zName))){ | |
| 1051 | + append_file_change_line(pFileFrom->zName, | |
| 1052 | + pFileFrom->zUuid, | |
| 1053 | + pFileTo->zUuid, 0, diffFlags, pRe, | |
| 1054 | + manifest_file_mperm(pFileTo)); | |
| 1055 | + } | |
| 1034 | 1056 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1035 | 1057 | pFileTo = manifest_file_next(pTo, 0); |
| 1036 | 1058 | } |
| 1037 | 1059 | } |
| 1038 | 1060 | manifest_destroy(pFrom); |
| 1039 | 1061 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -922,10 +922,11 @@ | |
| 922 | ** from=TAG |
| 923 | ** to=TAG |
| 924 | ** branch=TAG |
| 925 | ** v=BOOLEAN |
| 926 | ** sbs=BOOLEAN |
| 927 | ** |
| 928 | ** |
| 929 | ** Show all differences between two checkins. |
| 930 | */ |
| 931 | void vdiff_page(void){ |
| @@ -938,16 +939,15 @@ | |
| 938 | const char *zBranch; |
| 939 | const char *zFrom; |
| 940 | const char *zTo; |
| 941 | const char *zRe; |
| 942 | const char *zVerbose; |
| 943 | ReCompiled *pRe = 0; |
| 944 | |
| 945 | login_check_credentials(); |
| 946 | if( !g.perm.Read ){ login_needed(); return; } |
| 947 | login_anonymous_available(); |
| 948 | |
| 949 | zRe = P("regex"); |
| 950 | if( zRe ) re_compile(&pRe, zRe, 0); |
| 951 | zBranch = P("branch"); |
| 952 | if( zBranch && zBranch[0] ){ |
| 953 | cgi_replace_parameter("from", mprintf("root:%s", zBranch)); |
| @@ -965,30 +965,43 @@ | |
| 965 | if( !zVerbose ){ |
| 966 | zVerbose = P("detail"); /* deprecated */ |
| 967 | } |
| 968 | verboseFlag = (zVerbose!=0) && !is_false(zVerbose); |
| 969 | if( !verboseFlag && sideBySide ) verboseFlag = 1; |
| 970 | zFrom = P("from"); |
| 971 | zTo = P("to"); |
| 972 | if( sideBySide || verboseFlag ){ |
| 973 | style_submenu_element("Hide Diff", "hidediff", |
| 974 | "%R/vdiff?from=%T&to=%T&sbs=0", |
| 975 | zFrom, zTo); |
| 976 | } |
| 977 | if( !sideBySide ){ |
| 978 | style_submenu_element("Side-by-side Diff", "sbsdiff", |
| 979 | "%R/vdiff?from=%T&to=%T&sbs=1", |
| 980 | zFrom, zTo); |
| 981 | } |
| 982 | if( sideBySide || !verboseFlag ) { |
| 983 | style_submenu_element("Unified Diff", "udiff", |
| 984 | "%R/vdiff?from=%T&to=%T&sbs=0&v", |
| 985 | zFrom, zTo); |
| 986 | } |
| 987 | style_submenu_element("Invert", "invert", |
| 988 | "%R/vdiff?from=%T&to=%T&sbs=%d%s", zTo, zFrom, |
| 989 | sideBySide, (verboseFlag && !sideBySide)?"&v":""); |
| 990 | style_header("Check-in Differences"); |
| 991 | @ <h2>Difference From:</h2><blockquote> |
| 992 | checkin_description(ridFrom); |
| 993 | @ </blockquote><h2>To:</h2><blockquote> |
| 994 | checkin_description(ridTo); |
| @@ -995,10 +1008,13 @@ | |
| 995 | @ </blockquote> |
| 996 | if( pRe ){ |
| 997 | @ <p><b>Only differences that match regular expression "%h(zRe)" |
| 998 | @ are shown.</b></p> |
| 999 | } |
| 1000 | @<hr /><p> |
| 1001 | |
| 1002 | manifest_file_rewind(pFrom); |
| 1003 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1004 | manifest_file_rewind(pTo); |
| @@ -1012,27 +1028,33 @@ | |
| 1012 | cmp = -1; |
| 1013 | }else{ |
| 1014 | cmp = fossil_strcmp(pFileFrom->zName, pFileTo->zName); |
| 1015 | } |
| 1016 | if( cmp<0 ){ |
| 1017 | append_file_change_line(pFileFrom->zName, |
| 1018 | pFileFrom->zUuid, 0, 0, diffFlags, pRe, 0); |
| 1019 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1020 | }else if( cmp>0 ){ |
| 1021 | append_file_change_line(pFileTo->zName, |
| 1022 | 0, pFileTo->zUuid, 0, diffFlags, pRe, |
| 1023 | manifest_file_mperm(pFileTo)); |
| 1024 | pFileTo = manifest_file_next(pTo, 0); |
| 1025 | }else if( fossil_strcmp(pFileFrom->zUuid, pFileTo->zUuid)==0 ){ |
| 1026 | /* No changes */ |
| 1027 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1028 | pFileTo = manifest_file_next(pTo, 0); |
| 1029 | }else{ |
| 1030 | append_file_change_line(pFileFrom->zName, |
| 1031 | pFileFrom->zUuid, |
| 1032 | pFileTo->zUuid, 0, diffFlags, pRe, |
| 1033 | manifest_file_mperm(pFileTo)); |
| 1034 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1035 | pFileTo = manifest_file_next(pTo, 0); |
| 1036 | } |
| 1037 | } |
| 1038 | manifest_destroy(pFrom); |
| 1039 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -922,10 +922,11 @@ | |
| 922 | ** from=TAG |
| 923 | ** to=TAG |
| 924 | ** branch=TAG |
| 925 | ** v=BOOLEAN |
| 926 | ** sbs=BOOLEAN |
| 927 | ** glob=STRING only diff files matching this glob |
| 928 | ** |
| 929 | ** |
| 930 | ** Show all differences between two checkins. |
| 931 | */ |
| 932 | void vdiff_page(void){ |
| @@ -938,16 +939,15 @@ | |
| 939 | const char *zBranch; |
| 940 | const char *zFrom; |
| 941 | const char *zTo; |
| 942 | const char *zRe; |
| 943 | const char *zVerbose; |
| 944 | const char *zGlob; |
| 945 | ReCompiled *pRe = 0; |
| 946 | login_check_credentials(); |
| 947 | if( !g.perm.Read ){ login_needed(); return; } |
| 948 | login_anonymous_available(); |
| 949 | zRe = P("regex"); |
| 950 | if( zRe ) re_compile(&pRe, zRe, 0); |
| 951 | zBranch = P("branch"); |
| 952 | if( zBranch && zBranch[0] ){ |
| 953 | cgi_replace_parameter("from", mprintf("root:%s", zBranch)); |
| @@ -965,30 +965,43 @@ | |
| 965 | if( !zVerbose ){ |
| 966 | zVerbose = P("detail"); /* deprecated */ |
| 967 | } |
| 968 | verboseFlag = (zVerbose!=0) && !is_false(zVerbose); |
| 969 | if( !verboseFlag && sideBySide ) verboseFlag = 1; |
| 970 | zGlob = P("glob"); |
| 971 | zFrom = P("from"); |
| 972 | zTo = P("to"); |
| 973 | if(zGlob && !*zGlob){ |
| 974 | zGlob = NULL; |
| 975 | } |
| 976 | if( sideBySide || verboseFlag ){ |
| 977 | style_submenu_element("Hide Diff", "hidediff", |
| 978 | "%R/vdiff?from=%T&to=%T&sbs=0%s%T", |
| 979 | zFrom, zTo, |
| 980 | zGlob ? "&glob=" : "", zGlob ? zGlob : ""); |
| 981 | } |
| 982 | if( !sideBySide ){ |
| 983 | style_submenu_element("Side-by-side Diff", "sbsdiff", |
| 984 | "%R/vdiff?from=%T&to=%T&sbs=1%s%T", |
| 985 | zFrom, zTo, |
| 986 | zGlob ? "&glob=" : "", zGlob ? zGlob : ""); |
| 987 | } |
| 988 | if( sideBySide || !verboseFlag ) { |
| 989 | style_submenu_element("Unified Diff", "udiff", |
| 990 | "%R/vdiff?from=%T&to=%T&sbs=0&v%s%T", |
| 991 | zFrom, zTo, |
| 992 | zGlob ? "&glob=" : "", zGlob ? zGlob : ""); |
| 993 | } |
| 994 | style_submenu_element("Invert", "invert", |
| 995 | "%R/vdiff?from=%T&to=%T&sbs=%d%s%s%T", zTo, zFrom, |
| 996 | sideBySide, (verboseFlag && !sideBySide)?"&v":"", |
| 997 | zGlob ? "&glob=" : "", zGlob ? zGlob : ""); |
| 998 | if( zGlob ){ |
| 999 | style_submenu_element("Clear glob", "clearglob", |
| 1000 | "%R/vdiff?from=%T&to=%T&sbs=%d%s", zFrom, zTo, |
| 1001 | sideBySide, (verboseFlag && !sideBySide)?"&v":""); |
| 1002 | } |
| 1003 | style_header("Check-in Differences"); |
| 1004 | @ <h2>Difference From:</h2><blockquote> |
| 1005 | checkin_description(ridFrom); |
| 1006 | @ </blockquote><h2>To:</h2><blockquote> |
| 1007 | checkin_description(ridTo); |
| @@ -995,10 +1008,13 @@ | |
| 1008 | @ </blockquote> |
| 1009 | if( pRe ){ |
| 1010 | @ <p><b>Only differences that match regular expression "%h(zRe)" |
| 1011 | @ are shown.</b></p> |
| 1012 | } |
| 1013 | if( zGlob ){ |
| 1014 | @ <p><b>Only files matching the glob "%h(zGlob)" are shown.</b></p> |
| 1015 | } |
| 1016 | @<hr /><p> |
| 1017 | |
| 1018 | manifest_file_rewind(pFrom); |
| 1019 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1020 | manifest_file_rewind(pTo); |
| @@ -1012,27 +1028,33 @@ | |
| 1028 | cmp = -1; |
| 1029 | }else{ |
| 1030 | cmp = fossil_strcmp(pFileFrom->zName, pFileTo->zName); |
| 1031 | } |
| 1032 | if( cmp<0 ){ |
| 1033 | if(!zGlob || strglob(zGlob, pFileFrom->zName)){ |
| 1034 | append_file_change_line(pFileFrom->zName, |
| 1035 | pFileFrom->zUuid, 0, 0, diffFlags, pRe, 0); |
| 1036 | } |
| 1037 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1038 | }else if( cmp>0 ){ |
| 1039 | if(!zGlob || strglob(zGlob, pFileTo->zName)){ |
| 1040 | append_file_change_line(pFileTo->zName, |
| 1041 | 0, pFileTo->zUuid, 0, diffFlags, pRe, |
| 1042 | manifest_file_mperm(pFileTo)); |
| 1043 | } |
| 1044 | pFileTo = manifest_file_next(pTo, 0); |
| 1045 | }else if( fossil_strcmp(pFileFrom->zUuid, pFileTo->zUuid)==0 ){ |
| 1046 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1047 | pFileTo = manifest_file_next(pTo, 0); |
| 1048 | }else{ |
| 1049 | if(!zGlob || (strglob(zGlob, pFileFrom->zName) |
| 1050 | || strglob(zGlob, pFileTo->zName))){ |
| 1051 | append_file_change_line(pFileFrom->zName, |
| 1052 | pFileFrom->zUuid, |
| 1053 | pFileTo->zUuid, 0, diffFlags, pRe, |
| 1054 | manifest_file_mperm(pFileTo)); |
| 1055 | } |
| 1056 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1057 | pFileTo = manifest_file_next(pTo, 0); |
| 1058 | } |
| 1059 | } |
| 1060 | manifest_destroy(pFrom); |
| 1061 |