diff -rupN original/errcode.h new/errcode.h --- original/errcode.h 2014-01-26 18:29:15.000000000 +0100 +++ new/errcode.h 2014-05-16 10:05:53.020159810 +0200 @@ -43,7 +43,7 @@ #define RERR_PARTIAL 23 /* partial transfer */ #define RERR_VANISHED 24 /* file(s) vanished on sender side */ #define RERR_DEL_LIMIT 25 /* skipped some deletes due to --max-delete */ - +#define RERR_DEL_REMOTE 26 /* deletion or source files failed */ #define RERR_TIMEOUT 30 /* timeout in data send/receive */ #define RERR_CONTIMEOUT 35 /* timeout waiting for daemon connection */ diff -rupN original/log.c new/log.c --- original/log.c 2014-01-26 18:29:15.000000000 +0100 +++ new/log.c 2014-05-16 10:06:35.380158343 +0200 @@ -96,6 +96,7 @@ struct { { RERR_PARTIAL , "some files/attrs were not transferred (see previous errors)" }, { RERR_VANISHED , "some files vanished before they could be transferred" }, { RERR_DEL_LIMIT , "the --max-delete limit stopped deletions" }, + { RERR_DEL_REMOTE , "error deleting source files" }, { RERR_TIMEOUT , "timeout in data send/receive" }, { RERR_CONTIMEOUT , "timeout waiting for daemon connection" }, { RERR_CMD_FAILED , "remote shell failed" }, diff -rupN original/rsync.yo new/rsync.yo --- original/rsync.yo 2014-01-26 18:32:43.000000000 +0100 +++ new/rsync.yo 2014-05-16 10:09:45.996151744 +0200 @@ -3302,6 +3302,7 @@ dit(bf(22)) Error allocating core memory dit(bf(23)) Partial transfer due to error dit(bf(24)) Partial transfer due to vanished source files dit(bf(25)) The --max-delete limit stopped deletions +dit(bf(26)) Source files not deleted when requested by --remove-source-files dit(bf(30)) Timeout in data send/receive dit(bf(35)) Timeout waiting for daemon connection enddit() diff -rupN original/sender.c new/sender.c --- original/sender.c 2014-01-26 18:29:15.000000000 +0100 +++ new/sender.c 2014-05-16 10:04:14.296163226 +0200 @@ -156,8 +156,10 @@ void successful_send(int ndx) failed: if (errno == ENOENT) rprintf(FINFO, "sender file already removed: %s\n", fname); - else + else { rsyserr(FERROR, errno, "sender failed to %s %s", failed_op, fname); + if (remove_source_files) exit_cleanup(RERR_DEL_REMOTE); + } } else { if (INFO_GTE(REMOVE, 1)) rprintf(FINFO, "sender removed %s\n", fname);