Fossil SCM
Replaced dir=... with glob=... and fixed (i think) the traversal of pFileTo/From.
Commit
fa16c3a72bb4d1c661063db76372d2286da96aef
Parent
641c74187b8fec0…
1 file changed
+19
-32
+19
-32
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -939,13 +939,12 @@ | ||
| 939 | 939 | const char *zBranch; |
| 940 | 940 | const char *zFrom; |
| 941 | 941 | const char *zTo; |
| 942 | 942 | const char *zRe; |
| 943 | 943 | const char *zVerbose; |
| 944 | - const char *zDir; | |
| 944 | + const char *zGlob; | |
| 945 | 945 | ReCompiled *pRe = 0; |
| 946 | - int nDir = 0; | |
| 947 | 946 | login_check_credentials(); |
| 948 | 947 | if( !g.perm.Read ){ login_needed(); return; } |
| 949 | 948 | login_anonymous_available(); |
| 950 | 949 | |
| 951 | 950 | zRe = P("regex"); |
| @@ -967,15 +966,15 @@ | ||
| 967 | 966 | if( !zVerbose ){ |
| 968 | 967 | zVerbose = P("detail"); /* deprecated */ |
| 969 | 968 | } |
| 970 | 969 | verboseFlag = (zVerbose!=0) && !is_false(zVerbose); |
| 971 | 970 | if( !verboseFlag && sideBySide ) verboseFlag = 1; |
| 972 | - zDir = P("dir"); | |
| 971 | + zGlob = P("glob"); | |
| 973 | 972 | zFrom = P("from"); |
| 974 | 973 | zTo = P("to"); |
| 975 | - if( zDir && *zDir ){ | |
| 976 | - nDir = (int)strlen(zDir); | |
| 974 | + if(zGlob && !*zGlob){ | |
| 975 | + zGlob = NULL; | |
| 977 | 976 | } |
| 978 | 977 | if( sideBySide || verboseFlag ){ |
| 979 | 978 | style_submenu_element("Hide Diff", "hidediff", |
| 980 | 979 | "%R/vdiff?from=%T&to=%T&sbs=0", |
| 981 | 980 | zFrom, zTo); |
| @@ -1010,52 +1009,40 @@ | ||
| 1010 | 1009 | manifest_file_rewind(pTo); |
| 1011 | 1010 | pFileTo = manifest_file_next(pTo, 0); |
| 1012 | 1011 | diffFlags = construct_diff_flags(verboseFlag, sideBySide); |
| 1013 | 1012 | while( pFileFrom || pFileTo ){ |
| 1014 | 1013 | 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 | 1014 | if( pFileFrom==0 ){ |
| 1034 | 1015 | cmp = +1; |
| 1035 | 1016 | }else if( pFileTo==0 ){ |
| 1036 | 1017 | cmp = -1; |
| 1037 | 1018 | }else{ |
| 1038 | 1019 | cmp = fossil_strcmp(pFileFrom->zName, pFileTo->zName); |
| 1039 | 1020 | } |
| 1040 | 1021 | if( cmp<0 ){ |
| 1041 | - append_file_change_line(pFileFrom->zName, | |
| 1042 | - pFileFrom->zUuid, 0, 0, diffFlags, pRe, 0); | |
| 1022 | + if(!zGlob || strglob(zGlob, pFileFrom->zName)){ | |
| 1023 | + append_file_change_line(pFileFrom->zName, | |
| 1024 | + pFileFrom->zUuid, 0, 0, diffFlags, pRe, 0); | |
| 1025 | + } | |
| 1043 | 1026 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1044 | 1027 | }else if( cmp>0 ){ |
| 1045 | - append_file_change_line(pFileTo->zName, | |
| 1046 | - 0, pFileTo->zUuid, 0, diffFlags, pRe, | |
| 1047 | - manifest_file_mperm(pFileTo)); | |
| 1028 | + if(!zGlob || strglob(zGlob, pFileTo->zName)){ | |
| 1029 | + append_file_change_line(pFileTo->zName, | |
| 1030 | + 0, pFileTo->zUuid, 0, diffFlags, pRe, | |
| 1031 | + manifest_file_mperm(pFileTo)); | |
| 1032 | + } | |
| 1048 | 1033 | pFileTo = manifest_file_next(pTo, 0); |
| 1049 | 1034 | }else if( fossil_strcmp(pFileFrom->zUuid, pFileTo->zUuid)==0 ){ |
| 1050 | 1035 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1051 | 1036 | pFileTo = manifest_file_next(pTo, 0); |
| 1052 | 1037 | }else{ |
| 1053 | - append_file_change_line(pFileFrom->zName, | |
| 1054 | - pFileFrom->zUuid, | |
| 1055 | - pFileTo->zUuid, 0, diffFlags, pRe, | |
| 1056 | - manifest_file_mperm(pFileTo)); | |
| 1038 | + if(!zGlob || (strglob(zGlob, pFileFrom->zName) || strglob(zGlob, pFileTo->zName))){ | |
| 1039 | + append_file_change_line(pFileFrom->zName, | |
| 1040 | + pFileFrom->zUuid, | |
| 1041 | + pFileTo->zUuid, 0, diffFlags, pRe, | |
| 1042 | + manifest_file_mperm(pFileTo)); | |
| 1043 | + } | |
| 1057 | 1044 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1058 | 1045 | pFileTo = manifest_file_next(pTo, 0); |
| 1059 | 1046 | } |
| 1060 | 1047 | } |
| 1061 | 1048 | manifest_destroy(pFrom); |
| 1062 | 1049 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -939,13 +939,12 @@ | |
| 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"); |
| @@ -967,15 +966,15 @@ | |
| 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); |
| @@ -1010,52 +1009,40 @@ | |
| 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{ |
| 1038 | cmp = fossil_strcmp(pFileFrom->zName, pFileTo->zName); |
| 1039 | } |
| 1040 | if( cmp<0 ){ |
| 1041 | append_file_change_line(pFileFrom->zName, |
| 1042 | pFileFrom->zUuid, 0, 0, diffFlags, pRe, 0); |
| 1043 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1044 | }else if( cmp>0 ){ |
| 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 | pFileTo->zUuid, 0, diffFlags, pRe, |
| 1056 | manifest_file_mperm(pFileTo)); |
| 1057 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1058 | pFileTo = manifest_file_next(pTo, 0); |
| 1059 | } |
| 1060 | } |
| 1061 | manifest_destroy(pFrom); |
| 1062 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -939,13 +939,12 @@ | |
| 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 | |
| 950 | zRe = P("regex"); |
| @@ -967,15 +966,15 @@ | |
| 966 | if( !zVerbose ){ |
| 967 | zVerbose = P("detail"); /* deprecated */ |
| 968 | } |
| 969 | verboseFlag = (zVerbose!=0) && !is_false(zVerbose); |
| 970 | if( !verboseFlag && sideBySide ) verboseFlag = 1; |
| 971 | zGlob = P("glob"); |
| 972 | zFrom = P("from"); |
| 973 | zTo = P("to"); |
| 974 | if(zGlob && !*zGlob){ |
| 975 | zGlob = NULL; |
| 976 | } |
| 977 | if( sideBySide || verboseFlag ){ |
| 978 | style_submenu_element("Hide Diff", "hidediff", |
| 979 | "%R/vdiff?from=%T&to=%T&sbs=0", |
| 980 | zFrom, zTo); |
| @@ -1010,52 +1009,40 @@ | |
| 1009 | manifest_file_rewind(pTo); |
| 1010 | pFileTo = manifest_file_next(pTo, 0); |
| 1011 | diffFlags = construct_diff_flags(verboseFlag, sideBySide); |
| 1012 | while( pFileFrom || pFileTo ){ |
| 1013 | int cmp; |
| 1014 | if( pFileFrom==0 ){ |
| 1015 | cmp = +1; |
| 1016 | }else if( pFileTo==0 ){ |
| 1017 | cmp = -1; |
| 1018 | }else{ |
| 1019 | cmp = fossil_strcmp(pFileFrom->zName, pFileTo->zName); |
| 1020 | } |
| 1021 | if( cmp<0 ){ |
| 1022 | if(!zGlob || strglob(zGlob, pFileFrom->zName)){ |
| 1023 | append_file_change_line(pFileFrom->zName, |
| 1024 | pFileFrom->zUuid, 0, 0, diffFlags, pRe, 0); |
| 1025 | } |
| 1026 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1027 | }else if( cmp>0 ){ |
| 1028 | if(!zGlob || strglob(zGlob, pFileTo->zName)){ |
| 1029 | append_file_change_line(pFileTo->zName, |
| 1030 | 0, pFileTo->zUuid, 0, diffFlags, pRe, |
| 1031 | manifest_file_mperm(pFileTo)); |
| 1032 | } |
| 1033 | pFileTo = manifest_file_next(pTo, 0); |
| 1034 | }else if( fossil_strcmp(pFileFrom->zUuid, pFileTo->zUuid)==0 ){ |
| 1035 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1036 | pFileTo = manifest_file_next(pTo, 0); |
| 1037 | }else{ |
| 1038 | if(!zGlob || (strglob(zGlob, pFileFrom->zName) || strglob(zGlob, pFileTo->zName))){ |
| 1039 | append_file_change_line(pFileFrom->zName, |
| 1040 | pFileFrom->zUuid, |
| 1041 | pFileTo->zUuid, 0, diffFlags, pRe, |
| 1042 | manifest_file_mperm(pFileTo)); |
| 1043 | } |
| 1044 | pFileFrom = manifest_file_next(pFrom, 0); |
| 1045 | pFileTo = manifest_file_next(pTo, 0); |
| 1046 | } |
| 1047 | } |
| 1048 | manifest_destroy(pFrom); |
| 1049 |