X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/b33b791e6ba823589bdee416b91ad9278cb36ef2..1347d5126a4d89718544d976f64943dfa93dd8c4:/options.c diff --git a/options.c b/options.c index 3b94533a..e4924bf7 100644 --- a/options.c +++ b/options.c @@ -55,7 +55,6 @@ int am_server = 0; int am_sender=0; int recurse = 0; int am_daemon=0; -int am_client=0; int do_stats=0; int do_progress=0; int keep_partial=0; @@ -63,6 +62,8 @@ int safe_symlinks=0; int copy_unsafe_links=0; int block_size=BLOCK_SIZE; int size_only=0; +int delete_after=0; +int only_existing=0; char *backup_suffix = BACKUP_SUFFIX; char *tmpdir = NULL; @@ -79,6 +80,8 @@ int quiet = 0; int always_checksum = 0; int list_only = 0; +struct in_addr socket_address = {INADDR_ANY}; + void usage(int F) { rprintf(F,"rsync version %s Copyright Andrew Tridgell and Paul Mackerras\n\n", @@ -123,8 +126,10 @@ void usage(int F) rprintf(F," -e, --rsh=COMMAND specify rsh replacement\n"); rprintf(F," --rsync-path=PATH specify path to rsync on the remote machine\n"); rprintf(F," -C, --cvs-exclude auto ignore files in the same way CVS does\n"); + rprintf(F," --existing only update files that already exist\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-after delete after transferring, not before\n"); rprintf(F," --partial keep partially transferred files\n"); rprintf(F," --force force deletion of directories even if not empty\n"); rprintf(F," --numeric-ids don't map uid/gid values by user/group name\n"); @@ -133,6 +138,7 @@ void usage(int F) rprintf(F," --size-only only use file size when determining if a file should be transferred\n"); rprintf(F," -T --temp-dir=DIR create temporary files in directory DIR\n"); rprintf(F," --compare-dest=DIR also compare destination files relative to DIR\n"); + rprintf(F," -P equivalent to --partial --progress\n"); rprintf(F," -z, --compress compress file data\n"); rprintf(F," --exclude=PATTERN exclude files matching PATTERN\n"); rprintf(F," --exclude-from=FILE exclude patterns listed in FILE\n"); @@ -140,6 +146,7 @@ void usage(int F) rprintf(F," --include-from=FILE don't exclude patterns listed in FILE\n"); rprintf(F," --version print version number\n"); rprintf(F," --daemon run as a rsync daemon\n"); + rprintf(F," --address bind to the specified address\n"); rprintf(F," --config=FILE specify alternate rsyncd.conf file\n"); rprintf(F," --port=PORT specify alternate rsyncd port number\n"); rprintf(F," --stats give some file transfer stats\n"); @@ -159,14 +166,16 @@ enum {OPT_VERSION, OPT_SUFFIX, OPT_SENDER, OPT_SERVER, OPT_EXCLUDE, OPT_RSYNC_PATH, OPT_FORCE, OPT_TIMEOUT, OPT_DAEMON, OPT_CONFIG, OPT_PORT, 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_LOG_FORMAT, OPT_PASSWORD_FILE, OPT_SIZE_ONLY, OPT_ADDRESS, + OPT_DELETE_AFTER, OPT_EXISTING}; -static char *short_options = "oblLWHpguDCtcahvqrRIxnSe:B:T:z"; +static char *short_options = "oblLWHpguDCtcahvqrRIxnSe:B:T:zP"; static struct option long_options[] = { {"version", 0, 0, OPT_VERSION}, {"server", 0, 0, OPT_SERVER}, {"sender", 0, 0, OPT_SENDER}, + {"existing", 0, 0, OPT_EXISTING}, {"delete", 0, 0, OPT_DELETE}, {"delete-excluded", 0, 0, OPT_DELETE_EXCLUDED}, {"force", 0, 0, OPT_FORCE}, @@ -214,9 +223,11 @@ static struct option long_options[] = { {"stats", 0, 0, OPT_STATS}, {"progress", 0, 0, OPT_PROGRESS}, {"partial", 0, 0, OPT_PARTIAL}, + {"delete-after",0, 0, OPT_DELETE_AFTER}, {"config", 1, 0, OPT_CONFIG}, {"port", 1, 0, OPT_PORT}, {"log-format", 1, 0, OPT_LOG_FORMAT}, + {"address", 1, 0, OPT_ADDRESS}, {0,0,0,0}}; @@ -312,6 +323,14 @@ int parse_arguments(int argc, char *argv[], int frommain) delete_mode = 1; break; + case OPT_EXISTING: + only_existing = 1; + break; + + case OPT_DELETE_AFTER: + delete_after = 1; + break; + case OPT_DELETE_EXCLUDED: delete_excluded = 1; delete_mode = 1; @@ -501,6 +520,11 @@ int parse_arguments(int argc, char *argv[], int frommain) keep_partial = 1; break; + case 'P': + do_progress = 1; + keep_partial = 1; + break; + case OPT_CONFIG: config_file = optarg; break; @@ -513,6 +537,15 @@ int parse_arguments(int argc, char *argv[], int frommain) log_format = optarg; break; + case OPT_ADDRESS: + { + struct in_addr *ia; + if ((ia = ip_address(optarg))) { + socket_address = *ia; + } + } + break; + default: slprintf(err_buf,sizeof(err_buf),"unrecognised option\n"); return 0; @@ -614,6 +647,9 @@ void server_options(char **args,int *argc) if (force_delete) args[ac++] = "--force"; + if (delete_after) + args[ac++] = "--delete-after"; + if (copy_unsafe_links) args[ac++] = "--copy-unsafe-links"; @@ -623,6 +659,9 @@ void server_options(char **args,int *argc) if (numeric_ids) args[ac++] = "--numeric-ids"; + if (only_existing) + args[ac++] = "--existing"; + if (tmpdir) { args[ac++] = "--temp-dir"; args[ac++] = tmpdir;