mirror of
https://github.com/RsyncProject/rsync.git
synced 2026-05-14 09:55:51 -04:00
Fix %b and %c so that they count per-transfer bytes again.
This commit is contained in:
@@ -516,7 +516,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
|
||||
#endif
|
||||
} else if (ndx >= 0) {
|
||||
enum logcode code = logfile_format_has_i ? FINFO : FCLIENT;
|
||||
log_item(code, file, &stats, iflags, xname);
|
||||
log_item(code, file, iflags, xname);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
6
io.c
6
io.c
@@ -76,6 +76,9 @@ int kluge_around_eof = 0;
|
||||
int sock_f_in = -1;
|
||||
int sock_f_out = -1;
|
||||
|
||||
int64 total_data_read = 0;
|
||||
int64 total_data_written = 0;
|
||||
|
||||
static struct {
|
||||
xbuf in, out, msg;
|
||||
int in_fd;
|
||||
@@ -1578,6 +1581,7 @@ void read_buf(int f, char *buf, size_t len)
|
||||
|
||||
if (!IN_MULTIPLEXED) {
|
||||
memcpy(buf, perform_io(len, PIO_INPUT_AND_CONSUME), len);
|
||||
total_data_read += len;
|
||||
if (forward_flist_data)
|
||||
write_buf(iobuf.out_fd, buf, len);
|
||||
batch_copy:
|
||||
@@ -1601,6 +1605,7 @@ void read_buf(int f, char *buf, size_t len)
|
||||
/* The bytes at the "data" pointer will survive long
|
||||
* enough to make a copy, but not past future I/O. */
|
||||
memcpy(buf, data, siz);
|
||||
total_data_read += siz;
|
||||
|
||||
if (forward_flist_data)
|
||||
write_buf(iobuf.out_fd, buf, siz);
|
||||
@@ -1873,6 +1878,7 @@ void write_buf(int f, const char *buf, size_t len)
|
||||
memcpy(iobuf.out.buf + pos, buf, len);
|
||||
|
||||
iobuf.out.len += len;
|
||||
total_data_written += len;
|
||||
|
||||
batch_copy:
|
||||
if (f == write_batch_monitor_out)
|
||||
|
||||
64
log.c
64
log.c
@@ -44,6 +44,8 @@ extern int stdout_format_has_o_or_i;
|
||||
extern int logfile_format_has_i;
|
||||
extern int logfile_format_has_o_or_i;
|
||||
extern int receiver_symlink_times;
|
||||
extern int64 total_data_written;
|
||||
extern int64 total_data_read;
|
||||
extern mode_t orig_umask;
|
||||
extern char *auth_user;
|
||||
extern char *stdout_format;
|
||||
@@ -70,6 +72,9 @@ int got_xfer_error = 0;
|
||||
int output_needs_newline = 0;
|
||||
int send_msgs_to_gen = 0;
|
||||
|
||||
static int64 initial_data_written;
|
||||
static int64 initial_data_read;
|
||||
|
||||
struct {
|
||||
int code;
|
||||
char const *name;
|
||||
@@ -467,10 +472,15 @@ void rflush(enum logcode code)
|
||||
fflush(f);
|
||||
}
|
||||
|
||||
void remember_initial_stats(void)
|
||||
{
|
||||
initial_data_read = total_data_read;
|
||||
initial_data_written = total_data_written;
|
||||
}
|
||||
|
||||
/* A generic logging routine for send/recv, with parameter substitiution. */
|
||||
static void log_formatted(enum logcode code, const char *format, const char *op,
|
||||
struct file_struct *file, const char *fname,
|
||||
struct stats *initial_stats, int iflags,
|
||||
struct file_struct *file, const char *fname, int iflags,
|
||||
const char *hlink)
|
||||
{
|
||||
char buf[MAXPATHLEN+1024], buf2[MAXPATHLEN], fmt[32];
|
||||
@@ -640,26 +650,24 @@ static void log_formatted(enum logcode code, const char *format, const char *op,
|
||||
n = auth_user;
|
||||
break;
|
||||
case 'b':
|
||||
if (am_sender) {
|
||||
b = stats.total_written -
|
||||
initial_stats->total_written;
|
||||
} else {
|
||||
b = stats.total_read -
|
||||
initial_stats->total_read;
|
||||
}
|
||||
if (!(iflags & ITEM_TRANSFER))
|
||||
b = 0;
|
||||
else if (am_sender)
|
||||
b = total_data_written - initial_data_written;
|
||||
else
|
||||
b = total_data_read - initial_data_read;
|
||||
strlcat(fmt, "s", sizeof fmt);
|
||||
snprintf(buf2, sizeof buf2, fmt,
|
||||
do_big_num(b, humanize, NULL));
|
||||
n = buf2;
|
||||
break;
|
||||
case 'c':
|
||||
if (!am_sender) {
|
||||
b = stats.total_written -
|
||||
initial_stats->total_written;
|
||||
} else {
|
||||
b = stats.total_read -
|
||||
initial_stats->total_read;
|
||||
}
|
||||
if (!(iflags & ITEM_TRANSFER))
|
||||
b = 0;
|
||||
else if (!am_sender)
|
||||
b = total_data_written - initial_data_written;
|
||||
else
|
||||
b = total_data_read - initial_data_read;
|
||||
strlcat(fmt, "s", sizeof fmt);
|
||||
snprintf(buf2, sizeof buf2, fmt,
|
||||
do_big_num(b, humanize, NULL));
|
||||
@@ -802,19 +810,14 @@ int log_format_has(const char *format, char esc)
|
||||
/* Log the transfer of a file. If the code is FCLIENT, the output just goes
|
||||
* to stdout. If it is FLOG, it just goes to the log file. Otherwise we
|
||||
* output to both. */
|
||||
void log_item(enum logcode code, struct file_struct *file,
|
||||
struct stats *initial_stats, int iflags, const char *hlink)
|
||||
void log_item(enum logcode code, struct file_struct *file, int iflags, const char *hlink)
|
||||
{
|
||||
const char *s_or_r = am_sender ? "send" : "recv";
|
||||
|
||||
if (code != FLOG && stdout_format && !am_server) {
|
||||
log_formatted(FCLIENT, stdout_format, s_or_r,
|
||||
file, NULL, initial_stats, iflags, hlink);
|
||||
}
|
||||
if (code != FCLIENT && logfile_format && *logfile_format) {
|
||||
log_formatted(FLOG, logfile_format, s_or_r,
|
||||
file, NULL, initial_stats, iflags, hlink);
|
||||
}
|
||||
if (code != FLOG && stdout_format && !am_server)
|
||||
log_formatted(FCLIENT, stdout_format, s_or_r, file, NULL, iflags, hlink);
|
||||
if (code != FCLIENT && logfile_format && *logfile_format)
|
||||
log_formatted(FLOG, logfile_format, s_or_r, file, NULL, iflags, hlink);
|
||||
}
|
||||
|
||||
void maybe_log_item(struct file_struct *file, int iflags, int itemizing,
|
||||
@@ -827,11 +830,11 @@ void maybe_log_item(struct file_struct *file, int iflags, int itemizing,
|
||||
if (am_server) {
|
||||
if (logfile_name && !dry_run && see_item
|
||||
&& (significant_flags || logfile_format_has_i))
|
||||
log_item(FLOG, file, &stats, iflags, buf);
|
||||
log_item(FLOG, file, iflags, buf);
|
||||
} else if (see_item || local_change || *buf
|
||||
|| (S_ISDIR(file->mode) && significant_flags)) {
|
||||
enum logcode code = significant_flags || logfile_format_has_i ? FINFO : FCLIENT;
|
||||
log_item(code, file, &stats, iflags, buf);
|
||||
log_item(code, file, iflags, buf);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -854,15 +857,14 @@ void log_delete(const char *fname, int mode)
|
||||
send_msg(MSG_DELETED, fname, len, am_generator);
|
||||
} else {
|
||||
fmt = stdout_format_has_o_or_i ? stdout_format : "deleting %n";
|
||||
log_formatted(FCLIENT, fmt, "del.", &x.file, fname, &stats,
|
||||
ITEM_DELETED, NULL);
|
||||
log_formatted(FCLIENT, fmt, "del.", &x.file, fname, ITEM_DELETED, NULL);
|
||||
}
|
||||
|
||||
if (!logfile_name || dry_run || !logfile_format)
|
||||
return;
|
||||
|
||||
fmt = logfile_format_has_o_or_i ? logfile_format : "deleting %n";
|
||||
log_formatted(FLOG, fmt, "del.", &x.file, fname, &stats, ITEM_DELETED, NULL);
|
||||
log_formatted(FLOG, fmt, "del.", &x.file, fname, ITEM_DELETED, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
14
receiver.c
14
receiver.c
@@ -467,7 +467,6 @@ int recv_files(int f_in, int f_out, char *local_name)
|
||||
char fnamecmpbuf[MAXPATHLEN];
|
||||
uchar fnamecmp_type;
|
||||
struct file_struct *file;
|
||||
struct stats initial_stats;
|
||||
int itemizing = am_server ? logfile_format_has_i : stdout_format_has_i;
|
||||
enum logcode log_code = log_before_transfer ? FLOG : FINFO;
|
||||
int max_phase = protocol_version >= 29 ? 2 : 1;
|
||||
@@ -612,14 +611,17 @@ int recv_files(int f_in, int f_out, char *local_name)
|
||||
}
|
||||
}
|
||||
|
||||
if (!log_before_transfer)
|
||||
remember_initial_stats();
|
||||
|
||||
if (!do_xfers) { /* log the transfer */
|
||||
log_item(FCLIENT, file, &stats, iflags, NULL);
|
||||
log_item(FCLIENT, file, iflags, NULL);
|
||||
if (read_batch)
|
||||
discard_receive_data(f_in, F_LENGTH(file));
|
||||
continue;
|
||||
}
|
||||
if (write_batch < 0) {
|
||||
log_item(FCLIENT, file, &stats, iflags, NULL);
|
||||
log_item(FCLIENT, file, iflags, NULL);
|
||||
if (!am_server)
|
||||
discard_receive_data(f_in, F_LENGTH(file));
|
||||
continue;
|
||||
@@ -677,8 +679,6 @@ int recv_files(int f_in, int f_out, char *local_name)
|
||||
fnamecmp = fname;
|
||||
}
|
||||
|
||||
initial_stats = stats;
|
||||
|
||||
/* open the file */
|
||||
fd1 = do_open(fnamecmp, O_RDONLY, 0);
|
||||
|
||||
@@ -773,7 +773,7 @@ int recv_files(int f_in, int f_out, char *local_name)
|
||||
|
||||
/* log the transfer */
|
||||
if (log_before_transfer)
|
||||
log_item(FCLIENT, file, &initial_stats, iflags, NULL);
|
||||
log_item(FCLIENT, file, iflags, NULL);
|
||||
else if (!am_server && INFO_GTE(NAME, 1) && INFO_EQ(PROGRESS, 1))
|
||||
rprintf(FINFO, "%s\n", fname);
|
||||
|
||||
@@ -781,7 +781,7 @@ int recv_files(int f_in, int f_out, char *local_name)
|
||||
recv_ok = receive_data(f_in, fnamecmp, fd1, st.st_size,
|
||||
fname, fd2, F_LENGTH(file));
|
||||
|
||||
log_item(log_code, file, &initial_stats, iflags, NULL);
|
||||
log_item(log_code, file, iflags, NULL);
|
||||
|
||||
if (fd1 != -1)
|
||||
close(fd1);
|
||||
|
||||
12
sender.c
12
sender.c
@@ -171,7 +171,6 @@ void send_files(int f_in, int f_out)
|
||||
int iflags, xlen;
|
||||
struct file_struct *file;
|
||||
int phase = 0, max_phase = protocol_version >= 29 ? 2 : 1;
|
||||
struct stats initial_stats;
|
||||
int itemizing = am_server ? logfile_format_has_i : stdout_format_has_i;
|
||||
enum logcode log_code = log_before_transfer ? FLOG : FINFO;
|
||||
int f_xfer = write_batch < 0 ? batch_fd : f_out;
|
||||
@@ -291,15 +290,16 @@ void send_files(int f_in, int f_out)
|
||||
stats.xferred_files++;
|
||||
stats.total_transferred_size += F_LENGTH(file);
|
||||
|
||||
if (!log_before_transfer)
|
||||
remember_initial_stats();
|
||||
|
||||
if (!do_xfers) { /* log the transfer */
|
||||
log_item(FCLIENT, file, &stats, iflags, NULL);
|
||||
log_item(FCLIENT, file, iflags, NULL);
|
||||
write_ndx_and_attrs(f_out, ndx, iflags, fname, file,
|
||||
fnamecmp_type, xname, xlen);
|
||||
continue;
|
||||
}
|
||||
|
||||
initial_stats = stats;
|
||||
|
||||
if (!(s = receive_sums(f_in))) {
|
||||
io_error |= IOERR_GENERAL;
|
||||
rprintf(FERROR_XFER, "receive_sums failed\n");
|
||||
@@ -355,7 +355,7 @@ void send_files(int f_in, int f_out)
|
||||
rprintf(FINFO, "calling match_sums %s%s%s\n", path,slash,fname);
|
||||
|
||||
if (log_before_transfer)
|
||||
log_item(FCLIENT, file, &initial_stats, iflags, NULL);
|
||||
log_item(FCLIENT, file, iflags, NULL);
|
||||
else if (!am_server && INFO_GTE(NAME, 1) && INFO_EQ(PROGRESS, 1))
|
||||
rprintf(FCLIENT, "%s\n", fname);
|
||||
|
||||
@@ -365,7 +365,7 @@ void send_files(int f_in, int f_out)
|
||||
if (INFO_GTE(PROGRESS, 1))
|
||||
end_progress(st.st_size);
|
||||
|
||||
log_item(log_code, file, &initial_stats, iflags, NULL);
|
||||
log_item(log_code, file, iflags, NULL);
|
||||
|
||||
if (mbuf) {
|
||||
j = unmap_file(mbuf);
|
||||
|
||||
Reference in New Issue
Block a user