Fossil SCM
Initial prototype of dir=... constraint for vdiff.
Commit
641c74187b8fec0e6fc9a51876bb0bf5585613d6
Parent
4d910042718484b…
1 file changed
+25
-2
+25
-2
| --- 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 | +** dir=STRING: only diff files matching this prefix | |
| 927 | 928 | ** |
| 928 | 929 | ** |
| 929 | 930 | ** Show all differences between two checkins. |
| 930 | 931 | */ |
| 931 | 932 | void vdiff_page(void){ |
| @@ -938,12 +939,13 @@ | ||
| 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 *zDir; | |
| 943 | 945 | ReCompiled *pRe = 0; |
| 944 | - | |
| 946 | + int nDir = 0; | |
| 945 | 947 | login_check_credentials(); |
| 946 | 948 | if( !g.perm.Read ){ login_needed(); return; } |
| 947 | 949 | login_anonymous_available(); |
| 948 | 950 | |
| 949 | 951 | zRe = P("regex"); |
| @@ -965,12 +967,16 @@ | ||
| 965 | 967 | if( !zVerbose ){ |
| 966 | 968 | zVerbose = P("detail"); /* deprecated */ |
| 967 | 969 | } |
| 968 | 970 | verboseFlag = (zVerbose!=0) && !is_false(zVerbose); |
| 969 | 971 | if( !verboseFlag && sideBySide ) verboseFlag = 1; |
| 972 | + zDir = P("dir"); | |
| 970 | 973 | zFrom = P("from"); |
| 971 | 974 | zTo = P("to"); |
| 975 | + if( zDir && *zDir ){ | |
| 976 | + nDir = (int)strlen(zDir); | |
| 977 | + } | |
| 972 | 978 | if( sideBySide || verboseFlag ){ |
| 973 | 979 | style_submenu_element("Hide Diff", "hidediff", |
| 974 | 980 | "%R/vdiff?from=%T&to=%T&sbs=0", |
| 975 | 981 | zFrom, zTo); |
| 976 | 982 | } |
| @@ -1004,10 +1010,28 @@ | ||
| 1004 | 1010 | manifest_file_rewind(pTo); |
| 1005 | 1011 | pFileTo = manifest_file_next(pTo, 0); |
| 1006 | 1012 | diffFlags = construct_diff_flags(verboseFlag, sideBySide); |
| 1007 | 1013 | while( pFileFrom || pFileTo ){ |
| 1008 | 1014 | int cmp; |
| 1015 | + if( nDir>0 ){ | |
| 1016 | + int dirMatch = 0; | |
| 1017 | + if( pFileFrom && pFileFrom->zName ){ | |
| 1018 | + if( 0 == fossil_strncmp(pFileFrom->zName, zDir, nDir) ){ | |
| 1019 | + ++dirMatch; | |
| 1020 | + } | |
| 1021 | + } | |
| 1022 | + if( !dirMatch && pFileTo && pFileTo->zName ){ | |
| 1023 | + if( 0 == fossil_strncmp(pFileTo->zName, zDir, nDir) ){ | |
| 1024 | + ++dirMatch; | |
| 1025 | + } | |
| 1026 | + } | |
| 1027 | + if(!dirMatch){ | |
| 1028 | + pFileFrom = manifest_file_next(pFrom, 0); | |
| 1029 | + pFileTo = manifest_file_next(pTo, 0); | |
| 1030 | + continue; | |
| 1031 | + } | |
| 1032 | + } | |
| 1009 | 1033 | if( pFileFrom==0 ){ |
| 1010 | 1034 | cmp = +1; |
| 1011 | 1035 | }else if( pFileTo==0 ){ |
| 1012 | 1036 | cmp = -1; |
| 1013 | 1037 | }else{ |
| @@ -1021,11 +1045,10 @@ | ||
| 1021 | 1045 | append_file_change_line(pFileTo->zName, |
| 1022 | 1046 | 0, pFileTo->zUuid, 0, diffFlags, pRe, |
| 1023 | 1047 | manifest_file_mperm(pFileTo)); |
| 1024 | 1048 | pFileTo = manifest_file_next(pTo, 0); |
| 1025 | 1049 | }else if( fossil_strcmp(pFileFrom->zUuid, pFileTo->zUuid)==0 ){ |
| 1026 | - /* No changes */ | |
| 1027 | 1050 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1028 | 1051 | pFileTo = manifest_file_next(pTo, 0); |
| 1029 | 1052 | }else{ |
| 1030 | 1053 | append_file_change_line(pFileFrom->zName, |
| 1031 | 1054 | pFileFrom->zUuid, |
| 1032 | 1055 |
| --- 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,12 +939,13 @@ | |
| 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"); |
| @@ -965,12 +967,16 @@ | |
| 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 | } |
| @@ -1004,10 +1010,28 @@ | |
| 1004 | manifest_file_rewind(pTo); |
| 1005 | pFileTo = manifest_file_next(pTo, 0); |
| 1006 | diffFlags = construct_diff_flags(verboseFlag, sideBySide); |
| 1007 | while( pFileFrom || pFileTo ){ |
| 1008 | int cmp; |
| 1009 | if( pFileFrom==0 ){ |
| 1010 | cmp = +1; |
| 1011 | }else if( pFileTo==0 ){ |
| 1012 | cmp = -1; |
| 1013 | }else{ |
| @@ -1021,11 +1045,10 @@ | |
| 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 |
| --- 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 | ** dir=STRING: only diff files matching this prefix |
| 928 | ** |
| 929 | ** |
| 930 | ** Show all differences between two checkins. |
| 931 | */ |
| 932 | void vdiff_page(void){ |
| @@ -938,12 +939,13 @@ | |
| 939 | const char *zBranch; |
| 940 | const char *zFrom; |
| 941 | const char *zTo; |
| 942 | const char *zRe; |
| 943 | const char *zVerbose; |
| 944 | const char *zDir; |
| 945 | ReCompiled *pRe = 0; |
| 946 | int nDir = 0; |
| 947 | login_check_credentials(); |
| 948 | if( !g.perm.Read ){ login_needed(); return; } |
| 949 | login_anonymous_available(); |
| 950 | |
| 951 | zRe = P("regex"); |
| @@ -965,12 +967,16 @@ | |
| 967 | if( !zVerbose ){ |
| 968 | zVerbose = P("detail"); /* deprecated */ |
| 969 | } |
| 970 | verboseFlag = (zVerbose!=0) && !is_false(zVerbose); |
| 971 | if( !verboseFlag && sideBySide ) verboseFlag = 1; |
| 972 | zDir = P("dir"); |
| 973 | zFrom = P("from"); |
| 974 | zTo = P("to"); |
| 975 | if( zDir && *zDir ){ |
| 976 | nDir = (int)strlen(zDir); |
| 977 | } |
| 978 | if( sideBySide || verboseFlag ){ |
| 979 | style_submenu_element("Hide Diff", "hidediff", |
| 980 | "%R/vdiff?from=%T&to=%T&sbs=0", |
| 981 | zFrom, zTo); |
| 982 | } |
| @@ -1004,10 +1010,28 @@ | |
| 1010 | manifest_file_rewind(pTo); |
| 1011 | pFileTo = manifest_file_next(pTo, 0); |
| 1012 | diffFlags = construct_diff_flags(verboseFlag, sideBySide); |
| 1013 | while( pFileFrom || pFileTo ){ |
| 1014 | int cmp; |
| 1015 | if( nDir>0 ){ |
| 1016 | int dirMatch = 0; |
| 1017 | if( pFileFrom && pFileFrom->zName ){ |
| 1018 | if( 0 == fossil_strncmp(pFileFrom->zName, zDir, nDir) ){ |
| 1019 | ++dirMatch; |
| 1020 | } |
| 1021 | } |
| 1022 | if( !dirMatch && pFileTo && pFileTo->zName ){ |
| 1023 | if( 0 == fossil_strncmp(pFileTo->zName, zDir, nDir) ){ |
| 1024 | ++dirMatch; |
| 1025 | } |
| 1026 | } |
| 1027 | if(!dirMatch){ |
| 1028 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1029 | pFileTo = manifest_file_next(pTo, 0); |
| 1030 | continue; |
| 1031 | } |
| 1032 | } |
| 1033 | if( pFileFrom==0 ){ |
| 1034 | cmp = +1; |
| 1035 | }else if( pFileTo==0 ){ |
| 1036 | cmp = -1; |
| 1037 | }else{ |
| @@ -1021,11 +1045,10 @@ | |
| 1045 | append_file_change_line(pFileTo->zName, |
| 1046 | 0, pFileTo->zUuid, 0, diffFlags, pRe, |
| 1047 | manifest_file_mperm(pFileTo)); |
| 1048 | pFileTo = manifest_file_next(pTo, 0); |
| 1049 | }else if( fossil_strcmp(pFileFrom->zUuid, pFileTo->zUuid)==0 ){ |
| 1050 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1051 | pFileTo = manifest_file_next(pTo, 0); |
| 1052 | }else{ |
| 1053 | append_file_change_line(pFileFrom->zName, |
| 1054 | pFileFrom->zUuid, |
| 1055 |