X-Git-Url: https://mattmccutchen.net/rsync/rsync-patches.git/blobdiff_plain/ab74148ede3e5b9ba396d2bffaaa4ae0156fc6a8..c1ff70aa47e11c5b37634479a0facee775a7b6d9:/time-limit.diff diff --git a/time-limit.diff b/time-limit.diff index f71e9f2..1ec9c19 100644 --- a/time-limit.diff +++ b/time-limit.diff @@ -3,80 +3,83 @@ to be simpler and more efficient by Wayne Davison. Do we need configure support for mktime()? ---- io.c 15 May 2004 19:31:10 -0000 1.121 -+++ io.c 22 May 2004 19:33:07 -0000 -@@ -44,6 +44,7 @@ static int io_multiplexing_in; - static int multiplex_in_fd = -1; - static int multiplex_out_fd = -1; - static time_t last_io; +To use this patch, run these commands for a successful build: + + patch -p1 = stop_at_utime) { + rprintf(FERROR, "run-time limit exceeded\n"); + exit_cleanup(RERR_TIMEOUT); + } + - if (!last_io) { -- last_io = time(NULL); -+ last_io = t; - return; - } - -- t = time(NULL); -- - if (last_io && io_timeout && (t-last_io) >= io_timeout) { - if (!am_server && !am_daemon) { - rprintf(FERROR, "io timeout after %d seconds - exiting\n", ---- options.c 22 May 2004 06:09:22 -0000 1.151 -+++ options.c 22 May 2004 19:33:07 -0000 -@@ -92,6 +92,7 @@ int modify_window = 0; - int blocking_io = -1; - int checksum_seed = 0; - unsigned int block_size = 0; ++ if (!io_timeout || am_receiver) ++ return; ++ + if (allow_keepalive && we_send_keepalive_messages) { + /* This may put data into iobuf.msg w/o flushing. */ + maybe_send_keepalive(t, False); +diff --git a/options.c b/options.c +--- a/options.c ++++ b/options.c +@@ -112,6 +112,7 @@ size_t bwlimit_writemax = 0; + int ignore_existing = 0; + int ignore_non_existing = 0; + int need_messages_from_generator = 0; +time_t stop_at_utime = 0; - - - /** Network address family. **/ -@@ -288,6 +289,8 @@ void usage(enum logcode F) - rprintf(F," --log-format=FORMAT log file transfers using specified format\n"); - rprintf(F," --password-file=FILE get password from FILE\n"); - rprintf(F," --bwlimit=KBPS limit I/O bandwidth, KBytes per second\n"); + int max_delete = INT_MIN; + OFF_T max_size = 0; + OFF_T min_size = 0; +@@ -776,6 +777,8 @@ void usage(enum logcode F) + rprintf(F," --password-file=FILE read daemon-access password from FILE\n"); + rprintf(F," --list-only list the files instead of copying them\n"); + rprintf(F," --bwlimit=RATE limit socket I/O bandwidth\n"); + rprintf(F," --stop-at=y-m-dTh:m Stop rsync at year-month-dayThour:minute\n"); + rprintf(F," --time-limit=MINS Stop rsync after MINS minutes have elapsed\n"); - rprintf(F," --write-batch=PREFIX write batch fileset starting with PREFIX\n"); - rprintf(F," --read-batch=PREFIX read batch fileset starting with PREFIX\n"); - rprintf(F," --checksum-seed=NUM set block/file checksum seed\n"); -@@ -306,7 +309,7 @@ void usage(enum logcode F) - enum {OPT_VERSION = 1000, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM, - OPT_DELETE_AFTER, OPT_DELETE_EXCLUDED, OPT_LINK_DEST, - OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, -- OPT_READ_BATCH, OPT_WRITE_BATCH, -+ OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_STOP_AT, OPT_TIME_LIMIT, - OPT_REFUSED_BASE = 9000}; + rprintf(F," --write-batch=FILE write a batched update to FILE\n"); + rprintf(F," --only-write-batch=FILE like --write-batch but w/o updating destination\n"); + rprintf(F," --read-batch=FILE read a batched update from FILE\n"); +@@ -800,6 +803,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM, + OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE, + OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG, + OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT, ++ OPT_STOP_AT, OPT_TIME_LIMIT, + OPT_SERVER, OPT_REFUSED_BASE = 9000}; static struct poptOption long_options[] = { -@@ -378,6 +381,8 @@ static struct poptOption long_options[] - {"port", 0, POPT_ARG_INT, &rsync_port, 0, 0, 0 }, - {"log-format", 0, POPT_ARG_STRING, &log_format, 0, 0, 0 }, - {"bwlimit", 0, POPT_ARG_INT, &bwlimit, 0, 0, 0 }, +@@ -989,6 +993,8 @@ static struct poptOption long_options[] = { + {"no-timeout", 0, POPT_ARG_VAL, &io_timeout, 0, 0, 0 }, + {"contimeout", 0, POPT_ARG_INT, &connect_timeout, 0, 0, 0 }, + {"no-contimeout", 0, POPT_ARG_VAL, &connect_timeout, 0, 0, 0 }, + {"stop-at", 0, POPT_ARG_STRING, 0, OPT_STOP_AT, 0, 0 }, + {"time-limit", 0, POPT_ARG_STRING, 0, OPT_TIME_LIMIT, 0, 0 }, - {"address", 0, POPT_ARG_STRING, &bind_address, 0, 0, 0 }, - {"backup-dir", 0, POPT_ARG_STRING, &backup_dir, 0, 0, 0 }, - {"hard-links", 'H', POPT_ARG_NONE, &preserve_hard_links, 0, 0, 0 }, -@@ -587,6 +592,36 @@ int parse_arguments(int *argc, const cha + {"rsh", 'e', POPT_ARG_STRING, &shell_cmd, 0, 0, 0 }, + {"rsync-path", 0, POPT_ARG_STRING, &rsync_path, 0, 0, 0 }, + {"temp-dir", 'T', POPT_ARG_STRING, &tmpdir, 0, 0, 0 }, +@@ -1764,6 +1770,36 @@ int parse_arguments(int *argc_p, const char ***argv_p) return 0; #endif @@ -112,8 +115,8 @@ Do we need configure support for mktime()? + default: /* A large opt value means that set_refuse_options() - * turned this option off (opt-BASE is its index). */ -@@ -886,6 +921,15 @@ void server_options(char **args,int *arg + * turned this option off. */ +@@ -2480,6 +2516,15 @@ void server_options(char **args, int *argc_p) args[ac++] = arg; } @@ -129,20 +132,21 @@ Do we need configure support for mktime()? if (backup_dir) { args[ac++] = "--backup-dir"; args[ac++] = backup_dir; ---- rsync.yo 21 May 2004 09:44:32 -0000 1.170 -+++ rsync.yo 22 May 2004 19:33:08 -0000 -@@ -346,6 +346,8 @@ verb( - --log-format=FORMAT log file transfers using specified format - --password-file=FILE get password from FILE - --bwlimit=KBPS limit I/O bandwidth, KBytes per second +diff --git a/rsync.yo b/rsync.yo +--- a/rsync.yo ++++ b/rsync.yo +@@ -431,6 +431,8 @@ to the detailed description below for a complete description. verb( + --password-file=FILE read daemon-access password from FILE + --list-only list the files instead of copying them + --bwlimit=RATE limit socket I/O bandwidth + --stop-at=y-m-dTh:m Stop rsync at year-month-dayThour:minute + --time-limit=MINS Stop rsync after MINS minutes have elapsed - --write-batch=PREFIX write batch fileset starting with PREFIX - --read-batch=PREFIX read batch fileset starting with PREFIX - --checksum-seed=NUM set block/file checksum seed -@@ -892,6 +894,19 @@ transfer was too fast, it will wait befo - result is an average transfer rate equaling the specified limit. A value - of zero specifies no limit. + --write-batch=FILE write a batched update to FILE + --only-write-batch=FILE like --write-batch but w/o updating dest + --read-batch=FILE read a batched update from FILE +@@ -2309,6 +2311,19 @@ files can show up as being rapidly sent when the data is quickly buffered, + while other can show up as very slow when the flushing of the output buffer + occurs. This may be fixed in a future version. +dit(bf(--stop-at=y-m-dTh:m)) This option allows you to specify at what +time to stop rsync, in year-month-dayThour:minute numeric format (e.g. @@ -157,12 +161,13 @@ Do we need configure support for mktime()? +dit(bf(--time-limit=MINS)) This option allows you to specify the maximum +number of minutes rsync will run for. + - dit(bf(--write-batch=PREFIX)) Generate a set of files that can be - transferred as a batch update. Each filename in the set starts with - PREFIX. See the "BATCH MODE" section for details. ---- util.c 21 May 2004 08:40:25 -0000 1.144 -+++ util.c 22 May 2004 19:33:08 -0000 -@@ -125,6 +125,132 @@ void overflow(char *str) + dit(bf(--write-batch=FILE)) Record a file that can later be applied to + another identical destination with bf(--read-batch). See the "BATCH MODE" + section for details, and also the bf(--only-write-batch) option. +diff --git a/util.c b/util.c +--- a/util.c ++++ b/util.c +@@ -123,6 +123,133 @@ NORETURN void overflow_exit(const char *str) exit_cleanup(RERR_MALLOC); } @@ -190,13 +195,13 @@ Do we need configure support for mktime()? + } else + in_date = 1; + for ( ; ; cp++) { -+ if (!isdigit(*cp)) ++ if (!isDigit(cp)) + return -1; + + n = 0; + do { + n = n * 10 + *cp++ - '0'; -+ } while (isdigit(*cp)); ++ } while (isDigit(cp)); + + if (*cp == ':') + in_date = 0; @@ -292,6 +297,7 @@ Do we need configure support for mktime()? + } + return val; +} - - - int set_modtime(char *fname, time_t modtime) ++ + int set_modtime(const char *fname, time_t modtime, uint32 mod_nsec, mode_t mode) + { + #ifndef CAN_SET_SYMLINK_TIMES