[SCM] The rsync repository. - branch master updated

Rsync CVS commit messages rsync-cvs at lists.samba.org
Mon Jul 4 17:17:19 MDT 2011


The branch, master has been updated
       via  03cd1ae Handle FES_NO_SEND properly on a hard-linked file. Fixes bug 8246.
      from  01580c7 Fix #ifdef in unchanged_attrs(). Fixes bug 8268.

;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 03cd1ae4fadb716dd1fb67971cb82bd432988fe8
Author: Wayne Davison <wayned at samba.org>
Date:   Mon Jul 4 16:02:12 2011 -0700

    Handle FES_NO_SEND properly on a hard-linked file.
    Fixes bug 8246.

-----------------------------------------------------------------------

Summary of changes:
 generator.c |    8 +++++++-
 io.c        |    8 ++++++--
 2 files changed, 13 insertions(+), 3 deletions(-)


Changeset truncated at 500 lines:

diff --git a/generator.c b/generator.c
index e24f20f..631a559 100644
--- a/generator.c
+++ b/generator.c
@@ -2009,10 +2009,16 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo)
 	while (1) {
 #ifdef SUPPORT_HARD_LINKS
 		if (preserve_hard_links && (ndx = get_hlink_num()) != -1) {
+			int send_failed = (ndx == -2);
+			if (send_failed)
+				ndx = get_hlink_num();
 			flist = flist_for_ndx(ndx, "check_for_finished_files.1");
 			file = flist->files[ndx - flist->ndx_start];
 			assert(file->flags & FLAG_HLINKED);
-			finish_hard_link(file, f_name(file, fbuf), ndx, NULL, itemizing, code, -1);
+			if (send_failed)
+				handle_skipped_hlink(file, itemizing, code, sock_f_out);
+			else
+				finish_hard_link(file, f_name(file, fbuf), ndx, NULL, itemizing, code, -1);
 			flist->in_progress--;
 			continue;
 		}
diff --git a/io.c b/io.c
index 63dff83..4fb78aa 100644
--- a/io.c
+++ b/io.c
@@ -1032,13 +1032,19 @@ static void got_flist_entry_status(enum festatus status, int ndx)
 	case FES_SUCCESS:
 		if (remove_source_files)
 			send_msg_int(MSG_SUCCESS, ndx);
+		/* FALL THROUGH */
+	case FES_NO_SEND:
+#ifdef SUPPORT_HARD_LINKS
 		if (preserve_hard_links) {
 			struct file_struct *file = flist->files[ndx - flist->ndx_start];
 			if (F_IS_HLINKED(file)) {
+				if (status == FES_NO_SEND)
+					flist_ndx_push(&hlink_list, -2); /* indicates a failure follows */
 				flist_ndx_push(&hlink_list, ndx);
 				flist->in_progress++;
 			}
 		}
+#endif
 		break;
 	case FES_REDO:
 		if (read_batch) {
@@ -1050,8 +1056,6 @@ static void got_flist_entry_status(enum festatus status, int ndx)
 			flist->to_redo++;
 		flist_ndx_push(&redo_list, ndx);
 		break;
-	case FES_NO_SEND:
-		break;
 	}
 }
 


-- 
The rsync repository.


More information about the rsync-cvs mailing list