Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added some HLINK debugging output and enabled it for hardlink tests.
[rsync/rsync.git]
/
flist.c
diff --git
a/flist.c
b/flist.c
index
18b239e
..
109497d
100644
(file)
--- a/
flist.c
+++ b/
flist.c
@@
-25,14
+25,12
@@
#include "rounding.h"
#include "io.h"
#include "rounding.h"
#include "io.h"
-extern int verbose;
extern int am_root;
extern int am_server;
extern int am_daemon;
extern int am_sender;
extern int am_generator;
extern int inc_recurse;
extern int am_root;
extern int am_server;
extern int am_daemon;
extern int am_sender;
extern int am_generator;
extern int inc_recurse;
-extern int do_progress;
extern int always_checksum;
extern int module_id;
extern int ignore_errors;
extern int always_checksum;
extern int module_id;
extern int ignore_errors;
@@
-67,6
+65,7
@@
extern int protocol_version;
extern int sanitize_paths;
extern int munge_symlinks;
extern int need_unsorted_flist;
extern int sanitize_paths;
extern int munge_symlinks;
extern int need_unsorted_flist;
+extern int output_needs_newline;
extern int unsort_ndx;
extern struct stats stats;
extern char *filesfrom_host;
extern int unsort_ndx;
extern struct stats stats;
extern char *filesfrom_host;
@@
-129,7
+128,7
@@
static void output_flist(struct file_list *flist);
void init_flist(void)
{
void init_flist(void)
{
- if (
verbose > 4
) {
+ if (
DEBUG_GTE(FLIST, 4)
) {
rprintf(FINFO, "FILE_STRUCT_LEN=%d, EXTRA_LEN=%d\n",
(int)FILE_STRUCT_LEN, (int)EXTRA_LEN);
}
rprintf(FINFO, "FILE_STRUCT_LEN=%d, EXTRA_LEN=%d\n",
(int)FILE_STRUCT_LEN, (int)EXTRA_LEN);
}
@@
-140,14
+139,13
@@
void init_flist(void)
static int show_filelist_p(void)
{
static int show_filelist_p(void)
{
- return
verbose
&& xfer_dirs && !am_server && !inc_recurse;
+ return
INFO_GTE(FLIST, 1)
&& xfer_dirs && !am_server && !inc_recurse;
}
static void start_filelist_progress(char *kind)
{
rprintf(FCLIENT, "%s ... ", kind);
}
static void start_filelist_progress(char *kind)
{
rprintf(FCLIENT, "%s ... ", kind);
- if (verbose > 1 || do_progress)
- rprintf(FCLIENT, "\n");
+ output_needs_newline = 1;
rflush(FINFO);
}
rflush(FINFO);
}
@@
-158,18
+156,20
@@
static void emit_filelist_progress(int count)
static void maybe_emit_filelist_progress(int count)
{
static void maybe_emit_filelist_progress(int count)
{
- if (
do_progress
&& show_filelist_p() && (count % 100) == 0)
+ if (
INFO_GTE(FLIST, 2)
&& show_filelist_p() && (count % 100) == 0)
emit_filelist_progress(count);
}
static void finish_filelist_progress(const struct file_list *flist)
{
emit_filelist_progress(count);
}
static void finish_filelist_progress(const struct file_list *flist)
{
- if (
do_progress
) {
+ if (
INFO_GTE(FLIST, 2)
) {
/* This overwrites the progress line */
rprintf(FINFO, "%d file%sto consider\n",
flist->used, flist->used == 1 ? " " : "s ");
/* This overwrites the progress line */
rprintf(FINFO, "%d file%sto consider\n",
flist->used, flist->used == 1 ? " " : "s ");
- } else
+ } else {
+ output_needs_newline = 0;
rprintf(FINFO, "done\n");
rprintf(FINFO, "done\n");
+ }
}
void show_flist_stats(void)
}
void show_flist_stats(void)
@@
-196,7
+196,7
@@
static int readlink_stat(const char *path, STRUCT_STAT *stp, char *linkbuf)
return -1;
linkbuf[llen] = '\0';
if (copy_unsafe_links && unsafe_symlink(linkbuf, path)) {
return -1;
linkbuf[llen] = '\0';
if (copy_unsafe_links && unsafe_symlink(linkbuf, path)) {
- if (
verbose > 1
) {
+ if (
INFO_GTE(SYMSAFE, 1)
) {
rprintf(FINFO,"copying unsafe symlink \"%s\" -> \"%s\"\n",
path, linkbuf);
}
rprintf(FINFO,"copying unsafe symlink \"%s\" -> \"%s\"\n",
path, linkbuf);
}
@@
-316,10
+316,10
@@
static void flist_expand(struct file_list *flist, int extra)
new_ptr = realloc_array(flist->files, struct file_struct *,
flist->malloced);
new_ptr = realloc_array(flist->files, struct file_struct *,
flist->malloced);
- if (
verbose >= 2
&& flist->malloced != FLIST_START) {
- rprintf(FCLIENT, "[%s] expand file_list pointer array to %
.0f
bytes, did%s move\n",
+ if (
DEBUG_GTE(FLIST, 1)
&& flist->malloced != FLIST_START) {
+ rprintf(FCLIENT, "[%s] expand file_list pointer array to %
s
bytes, did%s move\n",
who_am_i(),
who_am_i(),
-
(double)sizeof flist->files[0] * flist->malloced
,
+
big_num(sizeof flist->files[0] * flist->malloced, 0)
,
(new_ptr == flist->files) ? " not" : "");
}
(new_ptr == flist->files) ? " not" : "");
}
@@
-399,7
+399,9
@@
static void send_file_entry(int f, const char *fname, struct file_struct *file,
static gid_t gid;
static const char *user_name, *group_name;
static char lastname[MAXPATHLEN];
static gid_t gid;
static const char *user_name, *group_name;
static char lastname[MAXPATHLEN];
+#ifdef SUPPORT_HARD_LINKS
int first_hlink_ndx = -1;
int first_hlink_ndx = -1;
+#endif
int l1, l2;
int xflags;
int l1, l2;
int xflags;
@@
-472,6
+474,12
@@
static void send_file_entry(int f, const char *fname, struct file_struct *file,
np->data = (void*)(long)(first_ndx + ndx + 1);
xflags |= XMIT_HLINK_FIRST;
}
np->data = (void*)(long)(first_ndx + ndx + 1);
xflags |= XMIT_HLINK_FIRST;
}
+ if (DEBUG_GTE(HLINK, 1)) {
+ rprintf(FINFO, "found %s dev:inode %s:%s (#%ld)\n",
+ xflags & XMIT_HLINK_FIRST ? "first" : "matching",
+ big_num(tmp_dev, 0), big_num(tmp_ino, 0),
+ (long)np->data - 1);
+ }
} else {
if (tmp_dev == dev) {
if (protocol_version >= 28)
} else {
if (tmp_dev == dev) {
if (protocol_version >= 28)
@@
-518,11
+526,16
@@
static void send_file_entry(int f, const char *fname, struct file_struct *file,
write_byte(f, l2);
write_buf(f, fname + l1, l2);
write_byte(f, l2);
write_buf(f, fname + l1, l2);
+#ifdef SUPPORT_HARD_LINKS
if (first_hlink_ndx >= 0) {
write_varint(f, first_hlink_ndx);
if (first_hlink_ndx >= 0) {
write_varint(f, first_hlink_ndx);
- if (first_hlink_ndx >= first_ndx)
+ if (first_hlink_ndx >= first_ndx) {
+ if (DEBUG_GTE(HLINK, 2))
+ rprintf(FINFO, "sending abbr. entry\n");
goto the_end;
goto the_end;
+ }
}
}
+#endif
write_varlong30(f, F_LENGTH(file), 3);
if (!(xflags & XMIT_SAME_TIME)) {
write_varlong30(f, F_LENGTH(file), 3);
if (!(xflags & XMIT_SAME_TIME)) {
@@
-609,7
+622,9
@@
static void send_file_entry(int f, const char *fname, struct file_struct *file,
write_buf(f, sum, checksum_len);
}
write_buf(f, sum, checksum_len);
}
+#ifdef SUPPORT_HARD_LINKS
the_end:
the_end:
+#endif
strlcpy(lastname, fname, MAXPATHLEN);
if (S_ISREG(mode) || S_ISLNK(mode))
strlcpy(lastname, fname, MAXPATHLEN);
if (S_ISREG(mode) || S_ISLNK(mode))
@@
-713,6
+728,11
@@
static struct file_struct *recv_file_entry(struct file_list *flist,
first_hlink_ndx, flist->ndx_start + flist->used);
exit_cleanup(RERR_PROTOCOL);
}
first_hlink_ndx, flist->ndx_start + flist->used);
exit_cleanup(RERR_PROTOCOL);
}
+ if (DEBUG_GTE(HLINK, 2)) {
+ rprintf(FINFO, "hard-link reference #%d (%sabbr.)\n",
+ first_hlink_ndx,
+ first_hlink_ndx >= flist->ndx_start ? "" : "un");
+ }
if (first_hlink_ndx >= flist->ndx_start) {
struct file_struct *first = flist->files[first_hlink_ndx - flist->ndx_start];
file_length = F_LENGTH(first);
if (first_hlink_ndx >= flist->ndx_start) {
struct file_struct *first = flist->files[first_hlink_ndx - flist->ndx_start];
file_length = F_LENGTH(first);
@@
-1110,7
+1130,7
@@
struct file_struct *make_file(const char *fname, struct file_list *flist,
if (one_file_system && st.st_dev != filesystem_dev
&& BITS_SETnUNSET(flags, FLAG_CONTENT_DIR, FLAG_TOP_DIR)) {
if (one_file_system > 1) {
if (one_file_system && st.st_dev != filesystem_dev
&& BITS_SETnUNSET(flags, FLAG_CONTENT_DIR, FLAG_TOP_DIR)) {
if (one_file_system > 1) {
- if (
verbose > 1
) {
+ if (
INFO_GTE(MOUNT, 1)
) {
rprintf(FINFO,
"[%s] skipping mount-point dir %s\n",
who_am_i(), thisname);
rprintf(FINFO,
"[%s] skipping mount-point dir %s\n",
who_am_i(), thisname);
@@
-1159,7
+1179,7
@@
struct file_struct *make_file(const char *fname, struct file_list *flist,
pool = NULL;
}
pool = NULL;
}
- if (
verbose > 2
) {
+ if (
DEBUG_GTE(FLIST, 2)
) {
rprintf(FINFO, "[%s] make_file(%s,*,%d)\n",
who_am_i(), thisname, filter_level);
}
rprintf(FINFO, "[%s] make_file(%s,*,%d)\n",
who_am_i(), thisname, filter_level);
}
@@
-1829,7
+1849,7
@@
void send_extra_file_list(int f, int at_least)
file_total += flist->used;
stats.flist_size += stats.total_written - start_write;
stats.num_files += flist->used;
file_total += flist->used;
stats.flist_size += stats.total_written - start_write;
stats.num_files += flist->used;
- if (
verbose > 3
)
+ if (
DEBUG_GTE(FLIST, 3)
)
output_flist(flist);
if (DIR_FIRST_CHILD(dp) >= 0) {
output_flist(flist);
if (DIR_FIRST_CHILD(dp) >= 0) {
@@
-1880,7
+1900,7
@@
struct file_list *send_file_list(int f, int argc, char *argv[])
rprintf(FLOG, "building file list\n");
if (show_filelist_p())
start_filelist_progress("building file list");
rprintf(FLOG, "building file list\n");
if (show_filelist_p())
start_filelist_progress("building file list");
- else if (inc_recurse &&
verbose
&& !am_server)
+ else if (inc_recurse &&
INFO_GTE(FLIST, 1)
&& !am_server)
rprintf(FCLIENT, "sending incremental file list\n");
start_write = stats.total_written;
rprintf(FCLIENT, "sending incremental file list\n");
start_write = stats.total_written;
@@
-2155,10
+2175,10
@@
struct file_list *send_file_list(int f, int argc, char *argv[])
stats.flist_size = stats.total_written - start_write;
stats.num_files = flist->used;
stats.flist_size = stats.total_written - start_write;
stats.num_files = flist->used;
- if (
verbose > 3
)
+ if (
DEBUG_GTE(FLIST, 3)
)
output_flist(flist);
output_flist(flist);
- if (
verbose > 2
)
+ if (
DEBUG_GTE(FLIST, 2)
)
rprintf(FINFO, "send_file_list done\n");
if (inc_recurse) {
rprintf(FINFO, "send_file_list done\n");
if (inc_recurse) {
@@
-2192,7
+2212,7
@@
struct file_list *recv_file_list(int f)
rprintf(FLOG, "receiving file list\n");
if (show_filelist_p())
start_filelist_progress("receiving file list");
rprintf(FLOG, "receiving file list\n");
if (show_filelist_p())
start_filelist_progress("receiving file list");
- else if (inc_recurse &&
verbose
&& !am_server && !first_flist)
+ else if (inc_recurse &&
INFO_GTE(FLIST, 1)
&& !am_server && !first_flist)
rprintf(FCLIENT, "receiving incremental file list\n");
start_read = stats.total_read;
rprintf(FCLIENT, "receiving incremental file list\n");
start_read = stats.total_read;
@@
-2231,14
+2251,14
@@
struct file_list *recv_file_list(int f)
maybe_emit_filelist_progress(flist->used);
maybe_emit_filelist_progress(flist->used);
- if (
verbose > 2
) {
+ if (
DEBUG_GTE(FLIST, 2)
) {
rprintf(FINFO, "recv_file_name(%s)\n",
f_name(file, NULL));
}
}
file_total += flist->used;
rprintf(FINFO, "recv_file_name(%s)\n",
f_name(file, NULL));
}
}
file_total += flist->used;
- if (
verbose > 2
)
+ if (
DEBUG_GTE(FLIST, 2)
)
rprintf(FINFO, "received %d names\n", flist->used);
if (show_filelist_p())
rprintf(FINFO, "received %d names\n", flist->used);
if (show_filelist_p())
@@
-2292,10
+2312,10
@@
struct file_list *recv_file_list(int f)
flist->parent_ndx = -1;
}
flist->parent_ndx = -1;
}
- if (
verbose > 3
)
+ if (
DEBUG_GTE(FLIST, 3)
)
output_flist(flist);
output_flist(flist);
- if (
verbose > 2
)
+ if (
DEBUG_GTE(FLIST, 2)
)
rprintf(FINFO, "recv_file_list done\n");
stats.flist_size += stats.total_read - start_read;
rprintf(FINFO, "recv_file_list done\n");
stats.flist_size += stats.total_read - start_read;
@@
-2323,7
+2343,7
@@
void recv_additional_file_list(int f)
NDX_FLIST_OFFSET - dir_flist->used + 1);
exit_cleanup(RERR_PROTOCOL);
}
NDX_FLIST_OFFSET - dir_flist->used + 1);
exit_cleanup(RERR_PROTOCOL);
}
- if (
verbose > 3
) {
+ if (
DEBUG_GTE(FLIST, 3)
) {
rprintf(FINFO, "[%s] receiving flist for dir %d\n",
who_am_i(), ndx);
}
rprintf(FINFO, "[%s] receiving flist for dir %d\n",
who_am_i(), ndx);
}
@@
-2545,7
+2565,7
@@
static void flist_sort_and_clean(struct file_list *flist, int strip_root)
keep = j, drop = i;
if (!am_sender) {
keep = j, drop = i;
if (!am_sender) {
- if (
verbose > 1
) {
+ if (
DEBUG_GTE(DUP, 1)
) {
rprintf(FINFO,
"removing duplicate name %s from file list (%d)\n",
f_name(file, fbuf), drop + flist->ndx_start);
rprintf(FINFO,
"removing duplicate name %s from file list (%d)\n",
f_name(file, fbuf), drop + flist->ndx_start);
@@
-2686,10
+2706,10
@@
static void output_flist(struct file_list *flist)
} else
root = dir = slash = name = trail = "";
rprintf(FINFO,
} else
root = dir = slash = name = trail = "";
rprintf(FINFO,
- "[%s] i=%d %s %s%s%s%s mode=0%o len=%
.0f
%s%s flags=%x\n",
+ "[%s] i=%d %s %s%s%s%s mode=0%o len=%
s
%s%s flags=%x\n",
who, i + flist->ndx_start,
root, dir, slash, name, trail,
who, i + flist->ndx_start,
root, dir, slash, name, trail,
- (int)file->mode,
(double)F_LENGTH(file
),
+ (int)file->mode,
big_num(F_LENGTH(file), 0
),
uidbuf, gidbuf, file->flags);
}
}
uidbuf, gidbuf, file->flags);
}
}
@@
-2903,7
+2923,7
@@
struct file_list *get_dirlist(char *dirname, int dlen, int ignore_filter_rules)
send_directory(ignore_filter_rules ? -2 : -1, dirlist, dirname, dlen, 0);
xfer_dirs = save_xfer_dirs;
recurse = save_recurse;
send_directory(ignore_filter_rules ? -2 : -1, dirlist, dirname, dlen, 0);
xfer_dirs = save_xfer_dirs;
recurse = save_recurse;
- if (
do_progress
)
+ if (
INFO_GTE(PROGRESS, 1)
)
flist_count_offset += dirlist->used;
prune_empty_dirs = 0;
flist_count_offset += dirlist->used;
prune_empty_dirs = 0;
@@
-2911,7
+2931,7
@@
struct file_list *get_dirlist(char *dirname, int dlen, int ignore_filter_rules)
flist_sort_and_clean(dirlist, 0);
prune_empty_dirs = save_prune_empty_dirs;
flist_sort_and_clean(dirlist, 0);
prune_empty_dirs = save_prune_empty_dirs;
- if (
verbose > 3
)
+ if (
DEBUG_GTE(FLIST, 3)
)
output_flist(dirlist);
return dirlist;
output_flist(dirlist);
return dirlist;