Got rid of failing or fuzzy hunks.
[rsync/rsync-patches.git] / ignore-case.diff
index 566aa10..7b317dd 100644 (file)
@@ -15,18 +15,16 @@ a while back to add an "--ignore-case" option just for this purpose.
 In our case it came up in the context of disting between NTFS and FAT
 remote systems.  I think we ended up not needing it, but it does make
 rsync match filenames in a case insensitive manner, so it might at
-least be worth trying to see if it resolves your issue. [NOTE: patch
-updated for latest CVS source way Wayne Davison, but UNTESTED!]
+least be worth trying to see if it resolves your issue.
 
 A few caveats - both ends have to support the option - I couldn't make
 it backwards compatible because both ends exchange information about a
 sorted file list that has to sort the same way on either side (which
 very subtly bit me when I first did this).  I also didn't bump the
 protocol in this patch (wasn't quite sure it was appropriate just for an
-incompatible command line option) since since it was for local use.
+incompatible command line option) since it was for local use.
 
-The patch is based on a 2.4.x series rsync, but if it doesn't apply
-cleanly to 2.5.x, it's should be simple enough to just apply manually.
+NOTE: patch updated for latest CVS source by Wayne Davison, but UNTESTED!
 
 -- David
 
@@ -38,26 +36,49 @@ cleanly to 2.5.x, it's should be simple enough to just apply manually.
 
          - - - - - - - - - - - - - - - - - - - - - - - - -
 
-Index: options.c
---- options.c  22 Feb 2004 08:56:43 -0000      1.139
-+++ options.c  23 Feb 2004 19:25:19 -0000
-@@ -87,6 +87,7 @@ int opt_ignore_existing = 0;
+--- orig/lib/wildmatch.c       2003-07-14 15:12:59
++++ lib/wildmatch.c    2004-06-18 17:27:00
+@@ -76,8 +76,20 @@ static int domatch(const unsigned char *
+           ch = *++p;
+           /* FALLTHROUGH */
+         default:
+-          if (*text != ch)
++          if (*text != ch) {
++              extern int ignore_case;
++              if (ignore_case) {
++                  if (ISUPPER(*text)) {
++                      if (tolower(*text) == ch)
++                          continue;
++                  }
++                  else if (ISUPPER(ch)) {
++                      if (*text == tolower(ch))
++                          continue;
++                  }
++              }
+               return FALSE;
++          }
+           continue;
+         case '?':
+           /* Match anything but '/'. */
+--- orig/options.c     2004-07-29 16:08:03
++++ options.c  2004-07-29 16:13:45
+@@ -92,6 +92,7 @@ int opt_ignore_existing = 0;
  int max_delete = 0;
  int ignore_errors = 0;
  int modify_window = 0;
 +int ignore_case = 0;
  int blocking_io = -1;
  int checksum_seed = 0;
unsigned int block_size = 0;
-@@ -273,6 +274,7 @@ void usage(enum logcode F)
int inplace = 0;
+@@ -288,6 +289,7 @@ void usage(enum logcode F)
    rprintf(F,"     --include-from=FILE     don't exclude patterns listed in FILE\n");
    rprintf(F,"     --files-from=FILE       read FILE for list of source-file names\n");
-   rprintf(F," -0  --from0                 all *-from file lists are delimited by nulls\n");
+   rprintf(F," -0, --from0                 all *-from file lists are delimited by nulls\n");
 +  rprintf(F,"     --ignore-case           ignore case when comparing filenames\n");
    rprintf(F,"     --version               print version number\n");
    rprintf(F,"     --daemon                run as an rsync daemon\n");
    rprintf(F,"     --no-detach             do not detach from the parent\n");
-@@ -327,6 +329,7 @@ static struct poptOption long_options[] 
+@@ -343,6 +345,7 @@ static struct poptOption long_options[] 
    {"include",          0,  POPT_ARG_STRING, 0,              OPT_INCLUDE, 0, 0 },
    {"exclude-from",     0,  POPT_ARG_STRING, 0,              OPT_EXCLUDE_FROM, 0, 0 },
    {"include-from",     0,  POPT_ARG_STRING, 0,              OPT_INCLUDE_FROM, 0, 0 },
@@ -65,20 +86,19 @@ Index: options.c
    {"safe-links",       0,  POPT_ARG_NONE,   &safe_symlinks, 0, 0, 0 },
    {"help",            'h', POPT_ARG_NONE,   0,              'h', 0, 0 },
    {"backup",          'b', POPT_ARG_NONE,   &make_backups, 0, 0, 0 },
-@@ -892,6 +895,9 @@ void server_options(char **args,int *arg
-                       goto oom;
+@@ -983,6 +986,9 @@ void server_options(char **args,int *arg
                args[ac++] = arg;
        }
-+
 +      if (ignore_case)
 +              args[ac++] = "--ignore-case";
-       if (keep_partial)
-               args[ac++] = "--partial";
-Index: util.c
---- util.c     17 Feb 2004 23:13:10 -0000      1.132
-+++ util.c     23 Feb 2004 19:25:20 -0000
-@@ -890,6 +890,19 @@ int u_strcmp(const char *cs1, const char
++
+       if (partial_dir && am_sender) {
+               args[ac++] = "--partial-dir";
+               args[ac++] = partial_dir;
+--- orig/util.c        2004-07-29 16:08:04
++++ util.c     2004-07-03 20:19:20
+@@ -1037,6 +1037,19 @@ int u_strcmp(const char *cs1, const char
  {
        const uchar *s1 = (const uchar *)cs1;
        const uchar *s2 = (const uchar *)cs2;
@@ -89,7 +109,7 @@ Index: util.c
 +                      uchar c1 = islower(*s1) ? toupper(*s1) : *s1;
 +                      uchar c2 = islower(*s2) ? toupper(*s2) : *s2;
 +                      if (c1 != c2)
-+                              return c1 - c2;
++                              return (int)c1 - (int)c2;
 +                      s1++; s2++;
 +              }
 +
@@ -98,28 +118,3 @@ Index: util.c
  
        while (*s1 && *s2 && (*s1 == *s2)) {
                s1++; s2++;
-Index: lib/wildmatch.c
---- lib/wildmatch.c    14 Jul 2003 15:12:59 -0000      1.12
-+++ lib/wildmatch.c    23 Feb 2004 19:25:20 -0000
-@@ -76,8 +76,20 @@ static int domatch(const unsigned char *
-           ch = *++p;
-           /* FALLTHROUGH */
-         default:
--          if (*text != ch)
-+          if (*text != ch) {
-+              extern int ignore_case;
-+              if (ignore_case) {
-+                  if (ISUPPER(*text)) {
-+                      if (tolower(*text) == ch)
-+                          continue;
-+                  }
-+                  else if (ISUPPER(ch)) {
-+                      if (*text == tolower(ch))
-+                          continue;
-+                  }
-+              }
-               return FALSE;
-+          }
-           continue;
-         case '?':
-           /* Match anything but '/'. */