extern int preserve_uid;
extern int preserve_gid;
extern int always_checksum;
+extern int do_compression;
extern int protocol_version;
extern char *batch_name;
extern struct filter_list_struct filter_list;
static int *flag_ptr[] = {
- &recurse,
- &preserve_uid,
- &preserve_gid,
- &preserve_links,
- &preserve_devices,
- &preserve_hard_links,
- &always_checksum,
+ &recurse, /* 0 */
+ &preserve_uid, /* 1 */
+ &preserve_gid, /* 2 */
+ &preserve_links, /* 3 */
+ &preserve_devices, /* 4 */
+ &preserve_hard_links, /* 5 */
+ &always_checksum, /* 6 */
+ &xfer_dirs, /* 7 (protocol 29) */
+ &do_compression, /* 8 (protocol 29) */
NULL
};
"--hard-links (-H)",
"--checksum (-c)",
"--dirs (-d)",
+ "--compress (-z)",
NULL
};
/* Start the batch file with a bitmap of data-stream-affecting
* flags. */
+ if (protocol_version < 29)
+ flag_ptr[7] = NULL;
for (i = 0, flags = 0; flag_ptr[i]; i++) {
if (*flag_ptr[i])
flags |= 1 << i;
int i, flags;
if (protocol_version < 29)
- xfer_dirs = 0;
+ flag_ptr[7] = NULL;
for (i = 0, flags = read_int(fd); flag_ptr[i]; i++) {
int set = flags & (1 << i) ? 1 : 0;
if (*flag_ptr[i] != set) {
*flag_ptr[i] = set;
}
}
- if (protocol_version < 29)
- xfer_dirs = recurse ? 1 : 0;
+ if (protocol_version < 29) {
+ if (recurse)
+ xfer_dirs |= 1;
+ else if (xfer_dirs < 2)
+ xfer_dirs = 0;
+ }
}
static void write_arg(int fd, char *arg)
* (hopefully) work. */
void write_batch_shell_file(int argc, char *argv[], int file_arg_cnt)
{
- int fd, i;
+ int fd, i, len;
char *p, filename[MAXPATHLEN];
stringjoin(filename, sizeof filename,
continue;
}
write(fd, " ", 1);
- if (strncmp(p, "--write-batch", 13) == 0) {
+ if (strncmp(p, "--write-batch", len = 13) == 0
+ || strncmp(p, "--only-write-batch", len = 18) == 0) {
write(fd, "--read-batch", 12);
- if (p[13] == '=') {
+ if (p[len] == '=') {
write(fd, "=", 1);
- write_arg(fd, p + 14);
+ write_arg(fd, p + len + 1);
}
} else
write_arg(fd, p);