add a --ignore-errors option
This commit is contained in:
3
flist.c
3
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 protocol version is >= 17 then recv the io_error flag */
|
||||||
if (f != -1 && remote_version >= 17) {
|
if (f != -1 && remote_version >= 17) {
|
||||||
extern int module_id;
|
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);
|
read_int(f);
|
||||||
} else {
|
} else {
|
||||||
io_error |= read_int(f);
|
io_error |= read_int(f);
|
||||||
|
|||||||
13
options.c
13
options.c
@@ -65,6 +65,7 @@ int size_only=0;
|
|||||||
int delete_after=0;
|
int delete_after=0;
|
||||||
int only_existing=0;
|
int only_existing=0;
|
||||||
int max_delete=0;
|
int max_delete=0;
|
||||||
|
int ignore_errors=0;
|
||||||
|
|
||||||
char *backup_suffix = BACKUP_SUFFIX;
|
char *backup_suffix = BACKUP_SUFFIX;
|
||||||
char *tmpdir = NULL;
|
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 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-excluded also delete excluded files on the receiving side\n");
|
||||||
rprintf(F," --delete-after delete after transferring, not before\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," --max-delete=NUM don't delete more than NUM files\n");
|
||||||
rprintf(F," --partial keep partially transferred files\n");
|
rprintf(F," --partial keep partially transferred files\n");
|
||||||
rprintf(F," --force force deletion of directories even if not empty\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_INCLUDE, OPT_INCLUDE_FROM, OPT_STATS, OPT_PARTIAL, OPT_PROGRESS,
|
||||||
OPT_COPY_UNSAFE_LINKS, OPT_SAFE_LINKS, OPT_COMPARE_DEST,
|
OPT_COPY_UNSAFE_LINKS, OPT_SAFE_LINKS, OPT_COMPARE_DEST,
|
||||||
OPT_LOG_FORMAT, OPT_PASSWORD_FILE, OPT_SIZE_ONLY, OPT_ADDRESS,
|
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";
|
static char *short_options = "oblLWHpguDCtcahvqrRIxnSe:B:T:zP";
|
||||||
|
|
||||||
@@ -228,6 +231,7 @@ static struct option long_options[] = {
|
|||||||
{"progress", 0, 0, OPT_PROGRESS},
|
{"progress", 0, 0, OPT_PROGRESS},
|
||||||
{"partial", 0, 0, OPT_PARTIAL},
|
{"partial", 0, 0, OPT_PARTIAL},
|
||||||
{"delete-after",0, 0, OPT_DELETE_AFTER},
|
{"delete-after",0, 0, OPT_DELETE_AFTER},
|
||||||
|
{"ignore-errors",0, 0, OPT_IGNORE_ERRORS},
|
||||||
{"config", 1, 0, OPT_CONFIG},
|
{"config", 1, 0, OPT_CONFIG},
|
||||||
{"port", 1, 0, OPT_PORT},
|
{"port", 1, 0, OPT_PORT},
|
||||||
{"log-format", 1, 0, OPT_LOG_FORMAT},
|
{"log-format", 1, 0, OPT_LOG_FORMAT},
|
||||||
@@ -528,6 +532,10 @@ int parse_arguments(int argc, char *argv[], int frommain)
|
|||||||
keep_partial = 1;
|
keep_partial = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case OPT_IGNORE_ERRORS:
|
||||||
|
ignore_errors = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'P':
|
case 'P':
|
||||||
do_progress = 1;
|
do_progress = 1;
|
||||||
keep_partial = 1;
|
keep_partial = 1;
|
||||||
@@ -670,6 +678,9 @@ void server_options(char **args,int *argc)
|
|||||||
if (delete_after)
|
if (delete_after)
|
||||||
args[ac++] = "--delete-after";
|
args[ac++] = "--delete-after";
|
||||||
|
|
||||||
|
if (ignore_errors)
|
||||||
|
args[ac++] = "--ignore-errors";
|
||||||
|
|
||||||
if (copy_unsafe_links)
|
if (copy_unsafe_links)
|
||||||
args[ac++] = "--copy-unsafe-links";
|
args[ac++] = "--copy-unsafe-links";
|
||||||
|
|
||||||
|
|||||||
@@ -108,13 +108,14 @@ void delete_files(struct file_list *flist)
|
|||||||
int i, j;
|
int i, j;
|
||||||
char *name;
|
char *name;
|
||||||
extern int module_id;
|
extern int module_id;
|
||||||
|
extern int ignore_errors;
|
||||||
extern int max_delete;
|
extern int max_delete;
|
||||||
static int deletion_count;
|
static int deletion_count;
|
||||||
|
|
||||||
if (cvs_exclude)
|
if (cvs_exclude)
|
||||||
add_cvs_excludes();
|
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");
|
rprintf(FINFO,"IO error encountered - skipping file deletion\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
1
rsync.yo
1
rsync.yo
@@ -248,6 +248,7 @@ verb(
|
|||||||
--delete delete files that don't exist on the sending side
|
--delete delete files that don't exist on the sending side
|
||||||
--delete-excluded also delete excluded files on the receiving side
|
--delete-excluded also delete excluded files on the receiving side
|
||||||
--delete-after delete after transferring, not before
|
--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
|
--max-delete=NUM don't delete more than NUM files
|
||||||
--partial keep partially transferred files
|
--partial keep partially transferred files
|
||||||
--force force deletion of directories even if not empty
|
--force force deletion of directories even if not empty
|
||||||
|
|||||||
Reference in New Issue
Block a user