Fixed some patch fuzz.
[rsync/rsync-patches.git] / chmod-option.diff
index d05f546..4add86d 100644 (file)
@@ -4,9 +4,9 @@ command before "make":
     make proto
 
 
---- orig/Makefile.in   2004-11-02 16:47:15
+--- orig/Makefile.in   2005-07-07 23:11:07
 +++ Makefile.in        2004-07-03 20:13:41
-@@ -34,7 +34,7 @@ ZLIBOBJ=zlib/deflate.o zlib/infblock.o z
+@@ -33,7 +33,7 @@ ZLIBOBJ=zlib/deflate.o zlib/inffast.o zl
  OBJS1=rsync.o generator.o receiver.o cleanup.o sender.o exclude.o util.o \
        main.o checksum.o match.o syscall.o log.o backup.o
  OBJS2=options.o flist.o io.o compat.o hlink.o token.o uidlist.o socket.o \
@@ -15,11 +15,13 @@ command before "make":
  OBJS3=progress.o pipe.o
  DAEMON_OBJ = params.o loadparm.o clientserver.o access.o connection.o authenticate.o
  popt_OBJS=popt/findme.o  popt/popt.o  popt/poptconfig.o \
---- orig/chmod.c       2004-06-18 17:22:08
-+++ chmod.c    2004-06-18 17:22:08
-@@ -0,0 +1,184 @@
+--- orig/chmod.c       2005-07-09 16:09:14
++++ chmod.c    2005-07-09 16:09:14
+@@ -0,0 +1,195 @@
 +#include "rsync.h"
 +
++extern int orig_umask;
++
 +#define FLAG_X_KEEP (1<<0)
 +#define FLAG_DIRS_ONLY (1<<1)
 +#define FLAG_FILES_ONLY (1<<2)
@@ -50,6 +52,8 @@ command before "make":
 +
 +      while (state != STATE_ERROR) {
 +              if (!*modestr || *modestr == ',') {
++                      int bits;
++
 +                      if (!op) {
 +                              state = STATE_ERROR;
 +                              break;
@@ -62,18 +66,25 @@ command before "make":
 +                              first_mode = curr_mode;
 +                      curr_mode->next = NULL;
 +
++                      if (where)
++                              bits = where * what;
++                      else {
++                              where = 0111;
++                              bits = (where * what) & ~orig_umask;
++                      }
++
 +                      switch (op) {
 +                      case CHMOD_ADD:
 +                              curr_mode->ModeAND = 07777;
-+                              curr_mode->ModeOR  = (where * what) + topoct;
++                              curr_mode->ModeOR  = bits + topoct;
 +                              break;
 +                      case CHMOD_SUB:
-+                              curr_mode->ModeAND = 07777 - (where * what) - topoct;
++                              curr_mode->ModeAND = 07777 - bits - topoct;
 +                              curr_mode->ModeOR  = 0;
 +                              break;
 +                      case CHMOD_EQ:
-+                              curr_mode->ModeAND = 07777 - (where * 7);
-+                              curr_mode->ModeOR  = where * what - topoct;
++                              curr_mode->ModeAND = 07777 - (where * 7) - (topoct ? topbits : 0);
++                              curr_mode->ModeOR  = bits + topoct;
 +                              break;
 +                      }
 +
@@ -202,7 +213,7 @@ command before "make":
 +      }
 +      return 0;
 +}
---- orig/flist.c       2005-03-16 02:19:29
+--- orig/flist.c       2005-08-17 06:45:07
 +++ flist.c    2004-09-18 01:51:11
 @@ -62,6 +62,8 @@ extern struct file_list *the_file_list;
  
@@ -213,7 +224,7 @@ command before "make":
  extern struct filter_list_struct filter_list;
  extern struct filter_list_struct server_filter_list;
  
-@@ -879,7 +881,10 @@ skip_filters:
+@@ -883,7 +885,10 @@ skip_filters:
        file->flags = flags;
        file->modtime = st.st_mtime;
        file->length = st.st_size;
@@ -225,9 +236,9 @@ command before "make":
        file->uid = st.st_uid;
        file->gid = st.st_gid;
  
---- orig/options.c     2005-03-17 09:05:21
-+++ options.c  2005-03-01 01:26:56
-@@ -140,6 +140,7 @@ char *log_format = NULL;
+--- orig/options.c     2005-08-27 21:11:26
++++ options.c  2005-08-27 21:18:52
+@@ -141,6 +141,7 @@ char *log_format = NULL;
  char *password_file = NULL;
  char *rsync_path = RSYNC_PATH;
  char *backup_dir = NULL;
@@ -244,7 +255,7 @@ command before "make":
  static int daemon_opt;   /* sets am_daemon after option error-reporting */
  static int F_option_cnt = 0;
  static int modify_window_set;
-@@ -286,6 +289,7 @@ void usage(enum logcode F)
+@@ -289,6 +292,7 @@ void usage(enum logcode F)
    rprintf(F," -D, --devices               preserve devices (root only)\n");
    rprintf(F," -t, --times                 preserve times\n");
    rprintf(F," -O, --omit-dir-times        omit directories when preserving times\n");
@@ -252,15 +263,15 @@ command before "make":
    rprintf(F," -S, --sparse                handle sparse files efficiently\n");
    rprintf(F," -n, --dry-run               show what would have been transferred\n");
    rprintf(F," -W, --whole-file            copy files whole (without rsync algorithm)\n");
-@@ -406,6 +410,7 @@ static struct poptOption long_options[] 
-   {"perms",           'p', POPT_ARG_NONE,   &preserve_perms, 0, 0, 0 },
-   {"owner",           'o', POPT_ARG_NONE,   &preserve_uid, 0, 0, 0 },
-   {"group",           'g', POPT_ARG_NONE,   &preserve_gid, 0, 0, 0 },
+@@ -411,6 +415,7 @@ static struct poptOption long_options[] 
+   {"no-relative",      0,  POPT_ARG_VAL,    &relative_paths, 0, 0, 0 },
+   {"no-R",             0,  POPT_ARG_VAL,    &relative_paths, 0, 0, 0 },
+   {"no-implied-dirs",  0,  POPT_ARG_VAL,    &implied_dirs, 0, 0, 0 },
 +  {"chmod",            0,  POPT_ARG_STRING, &chmod_mode, 0, 0, 0 },
-   {"devices",         'D', POPT_ARG_NONE,   &preserve_devices, 0, 0, 0 },
-   {"times",           't', POPT_ARG_NONE,   &preserve_times, 0, 0, 0 },
-   {"omit-dir-times",  'O', POPT_ARG_VAL,    &omit_dir_times, 2, 0, 0 },
-@@ -1081,6 +1086,13 @@ int parse_arguments(int *argc, const cha
+   {"ignore-times",    'I', POPT_ARG_NONE,   &ignore_times, 0, 0, 0 },
+   {"size-only",        0,  POPT_ARG_NONE,   &size_only, 0, 0, 0 },
+   {"one-file-system", 'x', POPT_ARG_NONE,   &one_file_system, 0, 0, 0 },
+@@ -1122,6 +1127,13 @@ int parse_arguments(int *argc, const cha
        if (make_backups && !backup_dir)
                omit_dir_times = 1;
  
@@ -272,9 +283,9 @@ command before "make":
 +      }
 +
        if (log_format) {
-               if (strstr(log_format, "%i") != NULL)
+               if (log_format_has(log_format, 'i'))
                        log_format_has_i = 1;
-@@ -1443,6 +1455,11 @@ void server_options(char **args,int *arg
+@@ -1507,6 +1519,11 @@ void server_options(char **args,int *arg
                }
        }
  
@@ -286,9 +297,9 @@ command before "make":
        if (files_from && (!am_sender || filesfrom_host)) {
                if (filesfrom_host) {
                        args[ac++] = "--files-from";
---- orig/rsync.yo      2005-03-16 02:19:30
+--- orig/rsync.yo      2005-08-27 21:05:12
 +++ rsync.yo   2005-01-24 01:48:43
-@@ -321,6 +321,7 @@ to the detailed description below for a 
+@@ -323,6 +323,7 @@ to the detailed description below for a 
   -D, --devices               preserve devices (root only)
   -t, --times                 preserve times
   -O, --omit-dir-times        omit directories when preserving times
@@ -296,7 +307,7 @@ command before "make":
   -S, --sparse                handle sparse files efficiently
   -n, --dry-run               show what would have been transferred
   -W, --whole-file            copy files whole (without rsync algorithm)
-@@ -654,6 +655,14 @@ it is preserving modification times (see
+@@ -695,6 +696,14 @@ it is preserving modification times (see
  the directories on the receiving side, it is a good idea to use bf(-O).
  This option is inferred if you use bf(--backup) without bf(--backup-dir).
  
@@ -311,9 +322,9 @@ command before "make":
  dit(bf(-n, --dry-run)) This tells rsync to not do any file transfers,
  instead it will just report the actions it would have taken.
  
---- orig/testsuite/chmod-option.test   2004-06-18 17:22:09
-+++ testsuite/chmod-option.test        2004-06-18 17:22:09
-@@ -0,0 +1,43 @@
+--- orig/testsuite/chmod-option.test   2005-07-09 15:49:59
++++ testsuite/chmod-option.test        2005-07-09 15:49:59
+@@ -0,0 +1,44 @@
 +#! /bin/sh
 +
 +# Copyright (C) 2002 by Martin Pool <mbp@samba.org>
@@ -350,10 +361,11 @@ command before "make":
 +checkit "$RSYNC -avv \"$fromdir/\" \"$checkdir/\"" "$fromdir" "$checkdir"
 +
 +# And then manually make the changes which should occur 
++umask 002
 +chmod ug-s,a+rX "$checkdir"/*
-+chmod g+w "$checkdir" "$checkdir"/dir*
++chmod +w "$checkdir" "$checkdir"/dir*
 +
-+checkit "$RSYNC -avv --chmod ug-s,a+rX,Dg+w \"$fromdir/\" \"$todir/\"" "$checkdir" "$todir"
++checkit "$RSYNC -avv --chmod ug-s,a+rX,D+w \"$fromdir/\" \"$todir/\"" "$checkdir" "$todir"
 +
 +# The script would have aborted on error, so getting here means we've won.
 +exit 0