Geesh, I forgot the attachment, (again).

On Wed, Jul 21, 2004 at 03:54:11PM -0400, Chris Shoemaker wrote:
> On Tue, Jul 20, 2004 at 09:10:22AM -0700, Wayne Davison wrote:
> > On Mon, Jul 19, 2004 at 06:18:49PM -0400, Chris Shoemaker wrote:
> 
> > avoid this and also to separate the post-generator processing (the
> > directory tweaks) would have to be delayed until after the receiver
> > post-processing had finished (the --delete-after handling).  I think
> > I'd like to avoid that.
> 
> Ah, I see what you mean about the directory tweaks.  AFAICT, this is
> really easy to fix, though.  I think it's nicer to break that tweaking
> loop into its own function anyway, (independent of solving the read-batch
> gen/recv sync problem.)  I'm attaching a version of this gen/recv
> serialization concept patch with the directory tweak in its own
> function.
> 
> -chris
> 
Index: generator.c
===================================================================
RCS file: /cvsroot/rsync/generator.c,v
retrieving revision 1.102
diff -d -u -r1.102 generator.c
--- generator.c 21 Jul 2004 23:59:25 -0000      1.102
+++ generator.c 22 Jul 2004 00:21:23 -0000
@@ -596,6 +596,14 @@
        if (preserve_hard_links)
                do_hard_links();
 
+       if (verbose > 2)
+               rprintf(FINFO,"generate_files finished\n");
+}
+
+void restore_directory_perms(struct file_list *flist, char *local_name)
+{
+       int i;
+
        /* now we need to fix any directory permissions that were
         * modified during the transfer */
        for (i = 0; i < flist->count; i++) {
@@ -606,6 +614,4 @@
                               file, i, -1);
        }
 
-       if (verbose > 2)
-               rprintf(FINFO,"generate_files finished\n");
 }
Index: main.c
===================================================================
RCS file: /cvsroot/rsync/main.c,v
retrieving revision 1.210
diff -d -u -r1.210 main.c
--- main.c      21 Jul 2004 23:59:31 -0000      1.210
+++ main.c      22 Jul 2004 00:21:24 -0000
@@ -473,6 +473,19 @@
 
        io_flush(NORMAL_FLUSH);
 
+       if (read_batch) {
+               io_start_buffering_out();
+               set_msg_fd_in(error_pipe[0]);
+               set_msg_fd_out(error_pipe[1]);
+               send_msg(MSG_DONE, "", 0);
+               generate_files(f_out, flist, local_name);
+               recv_files(f_in, flist, local_name);
+               restore_directory_perms(flist, local_name);
+               io_flush(FULL_FLUSH);
+               report(f_in);
+               return 0;
+       }
+       
        if ((pid = do_fork()) == 0) {
                close(error_pipe[0]);
                if (f_in != f_out)
@@ -510,6 +523,7 @@
        set_msg_fd_in(error_pipe[0]);
 
        generate_files(f_out, flist, local_name);
+       restore_directory_perms(flist, local_name);
 
        get_redo_num(); /* Read final MSG_DONE and any prior messages. */
        report(-1);
-- 
To unsubscribe or change options: http://lists.samba.org/mailman/listinfo/rsync
Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html

Reply via email to