Fossil SCM

Initial prototype of dir=... constraint for vdiff.

stephan 2014-01-21 18:13 UTC trunk
Commit 641c74187b8fec0e6fc9a51876bb0bf5585613d6
1 file changed +25 -2
+25 -2
--- src/info.c
+++ src/info.c
@@ -922,10 +922,11 @@
922922
** from=TAG
923923
** to=TAG
924924
** branch=TAG
925925
** v=BOOLEAN
926926
** sbs=BOOLEAN
927
+** dir=STRING: only diff files matching this prefix
927928
**
928929
**
929930
** Show all differences between two checkins.
930931
*/
931932
void vdiff_page(void){
@@ -938,12 +939,13 @@
938939
const char *zBranch;
939940
const char *zFrom;
940941
const char *zTo;
941942
const char *zRe;
942943
const char *zVerbose;
944
+ const char *zDir;
943945
ReCompiled *pRe = 0;
944
-
946
+ int nDir = 0;
945947
login_check_credentials();
946948
if( !g.perm.Read ){ login_needed(); return; }
947949
login_anonymous_available();
948950
949951
zRe = P("regex");
@@ -965,12 +967,16 @@
965967
if( !zVerbose ){
966968
zVerbose = P("detail"); /* deprecated */
967969
}
968970
verboseFlag = (zVerbose!=0) && !is_false(zVerbose);
969971
if( !verboseFlag && sideBySide ) verboseFlag = 1;
972
+ zDir = P("dir");
970973
zFrom = P("from");
971974
zTo = P("to");
975
+ if( zDir && *zDir ){
976
+ nDir = (int)strlen(zDir);
977
+ }
972978
if( sideBySide || verboseFlag ){
973979
style_submenu_element("Hide Diff", "hidediff",
974980
"%R/vdiff?from=%T&to=%T&sbs=0",
975981
zFrom, zTo);
976982
}
@@ -1004,10 +1010,28 @@
10041010
manifest_file_rewind(pTo);
10051011
pFileTo = manifest_file_next(pTo, 0);
10061012
diffFlags = construct_diff_flags(verboseFlag, sideBySide);
10071013
while( pFileFrom || pFileTo ){
10081014
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
+ }
10091033
if( pFileFrom==0 ){
10101034
cmp = +1;
10111035
}else if( pFileTo==0 ){
10121036
cmp = -1;
10131037
}else{
@@ -1021,11 +1045,10 @@
10211045
append_file_change_line(pFileTo->zName,
10221046
0, pFileTo->zUuid, 0, diffFlags, pRe,
10231047
manifest_file_mperm(pFileTo));
10241048
pFileTo = manifest_file_next(pTo, 0);
10251049
}else if( fossil_strcmp(pFileFrom->zUuid, pFileTo->zUuid)==0 ){
1026
- /* No changes */
10271050
pFileFrom = manifest_file_next(pFrom, 0);
10281051
pFileTo = manifest_file_next(pTo, 0);
10291052
}else{
10301053
append_file_change_line(pFileFrom->zName,
10311054
pFileFrom->zUuid,
10321055
--- 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

Keyboard Shortcuts

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