summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2000-03-21 04:06:04 +0000
committerAndrew Tridgell <tridge@samba.org>2000-03-21 04:06:04 +0000
commitef55c686bcb61d8c83e79eb73ed15639e4345d5c (patch)
tree38ff474d99b511b36ac7e6de8d8f3abcdddcd79a
parent5f7ce2041c2a3514c6c1bad903c8dffb9bca2467 (diff)
downloadrsync-ef55c686bcb61d8c83e79eb73ed15639e4345d5c.tar.gz
add a --ignore-errors option
-rw-r--r--flist.c3
-rw-r--r--options.c13
-rw-r--r--receiver.c3
-rw-r--r--rsync.yo1
4 files changed, 17 insertions, 3 deletions
diff --git a/flist.c b/flist.c
index 17402099..f12bf893 100644
--- a/flist.c
+++ b/flist.c
@@ -862,7 +862,8 @@ struct file_list *recv_file_list(int f)
/* if protocol version is >= 17 then recv the io_error flag */
if (f != -1 && remote_version >= 17) {
extern int module_id;
- if (lp_ignore_errors(module_id)) {
+ extern int ignore_errors;
+ if (lp_ignore_errors(module_id) || ignore_errors) {
read_int(f);
} else {
io_error |= read_int(f);
diff --git a/options.c b/options.c
index ca849d51..6009e8da 100644
--- a/options.c
+++ b/options.c
@@ -65,6 +65,7 @@ int size_only=0;
int delete_after=0;
int only_existing=0;
int max_delete=0;
+int ignore_errors=0;
char *backup_suffix = BACKUP_SUFFIX;
char *tmpdir = NULL;
@@ -133,6 +134,7 @@ void usage(enum logcode F)
rprintf(F," --delete delete files that don't exist on the sending side\n");
rprintf(F," --delete-excluded also delete excluded files on the receiving side\n");
rprintf(F," --delete-after delete after transferring, not before\n");
+ rprintf(F," --ignore-errors delete even if there are IO errors\n");
rprintf(F," --max-delete=NUM don't delete more than NUM files\n");
rprintf(F," --partial keep partially transferred files\n");
rprintf(F," --force force deletion of directories even if not empty\n");
@@ -171,7 +173,8 @@ enum {OPT_VERSION, OPT_SUFFIX, OPT_SENDER, OPT_SERVER, OPT_EXCLUDE,
OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_STATS, OPT_PARTIAL, OPT_PROGRESS,
OPT_COPY_UNSAFE_LINKS, OPT_SAFE_LINKS, OPT_COMPARE_DEST,
OPT_LOG_FORMAT, OPT_PASSWORD_FILE, OPT_SIZE_ONLY, OPT_ADDRESS,
- OPT_DELETE_AFTER, OPT_EXISTING, OPT_MAX_DELETE, OPT_BACKUP_DIR};
+ OPT_DELETE_AFTER, OPT_EXISTING, OPT_MAX_DELETE, OPT_BACKUP_DIR,
+ OPT_IGNORE_ERRORS};
static char *short_options = "oblLWHpguDCtcahvqrRIxnSe:B:T:zP";
@@ -228,6 +231,7 @@ static struct option long_options[] = {
{"progress", 0, 0, OPT_PROGRESS},
{"partial", 0, 0, OPT_PARTIAL},
{"delete-after",0, 0, OPT_DELETE_AFTER},
+ {"ignore-errors",0, 0, OPT_IGNORE_ERRORS},
{"config", 1, 0, OPT_CONFIG},
{"port", 1, 0, OPT_PORT},
{"log-format", 1, 0, OPT_LOG_FORMAT},
@@ -528,6 +532,10 @@ int parse_arguments(int argc, char *argv[], int frommain)
keep_partial = 1;
break;
+ case OPT_IGNORE_ERRORS:
+ ignore_errors = 1;
+ break;
+
case 'P':
do_progress = 1;
keep_partial = 1;
@@ -670,6 +678,9 @@ void server_options(char **args,int *argc)
if (delete_after)
args[ac++] = "--delete-after";
+ if (ignore_errors)
+ args[ac++] = "--ignore-errors";
+
if (copy_unsafe_links)
args[ac++] = "--copy-unsafe-links";
diff --git a/receiver.c b/receiver.c
index b9199f2b..b10f7c61 100644
--- a/receiver.c
+++ b/receiver.c
@@ -108,13 +108,14 @@ void delete_files(struct file_list *flist)
int i, j;
char *name;
extern int module_id;
+ extern int ignore_errors;
extern int max_delete;
static int deletion_count;
if (cvs_exclude)
add_cvs_excludes();
- if (io_error && !lp_ignore_errors(module_id)) {
+ if (io_error && !(lp_ignore_errors(module_id) || ignore_errors)) {
rprintf(FINFO,"IO error encountered - skipping file deletion\n");
return;
}
diff --git a/rsync.yo b/rsync.yo
index f7e7b25b..7991f4c3 100644
--- a/rsync.yo
+++ b/rsync.yo
@@ -248,6 +248,7 @@ verb(
--delete delete files that don't exist on the sending side
--delete-excluded also delete excluded files on the receiving side
--delete-after delete after transferring, not before
+ --ignore-errors delete even if there are IO errors
--max-delete=NUM don't delete more than NUM files
--partial keep partially transferred files
--force force deletion of directories even if not empty