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
Changed "char" to "uchar" in delayed_bits's new_array() call.
[rsync/rsync.git]
/
flist.c
diff --git
a/flist.c
b/flist.c
index
c607d73
..
bc247a8
100644
(file)
--- a/
flist.c
+++ b/
flist.c
@@
-70,8
+70,8
@@
extern int max_delete;
extern int orig_umask;
extern int list_only;
extern int orig_umask;
extern int list_only;
-extern struct
exclude_list_struct exclude
_list;
-extern struct
exclude_list_struct server_exclude
_list;
+extern struct
filter_list_struct filter
_list;
+extern struct
filter_list_struct server_filter
_list;
int io_error;
int io_error;
@@
-220,15
+220,13
@@
int link_stat(const char *path, STRUCT_STAT *buffer, int follow_dirlinks)
#endif
}
#endif
}
-/*
- * This function is used to check if a file should be included/excluded
+/* This function is used to check if a file should be included/excluded
* from the list of files based on its name and type etc. The value of
* from the list of files based on its name and type etc. The value of
- * exclude_level is set to either SERVER_EXCLUDES or ALL_EXCLUDES.
- */
-static int check_exclude_file(char *fname, int is_dir, int exclude_level)
+ * filter_level is set to either SERVER_FILTERS or ALL_FILTERS. */
+static int is_excluded(char *fname, int is_dir, int filter_level)
{
#if 0 /* This currently never happens, so avoid a useless compare. */
{
#if 0 /* This currently never happens, so avoid a useless compare. */
- if (
exclude_level == NO_EXCLUDE
S)
+ if (
filter_level == NO_FILTER
S)
return 0;
#endif
if (fname) {
return 0;
#endif
if (fname) {
@@
-242,13
+240,13
@@
static int check_exclude_file(char *fname, int is_dir, int exclude_level)
return 0;
}
}
return 0;
}
}
- if (server_
exclude
_list.head
- && check_
exclude(&server_exclude
_list, fname, is_dir) < 0)
+ if (server_
filter
_list.head
+ && check_
filter(&server_filter
_list, fname, is_dir) < 0)
return 1;
return 1;
- if (
exclude_level != ALL_EXCLUDE
S)
+ if (
filter_level != ALL_FILTER
S)
return 0;
return 0;
- if (
exclude
_list.head
- && check_
exclude(&exclude
_list, fname, is_dir) < 0)
+ if (
filter
_list.head
+ && check_
filter(&filter
_list, fname, is_dir) < 0)
return 1;
return 0;
}
return 1;
return 0;
}
@@
-758,7
+756,7
@@
void receive_file_entry(struct file_struct **fptr, unsigned short flags,
* important case. Some systems may not have d_type.
**/
struct file_struct *make_file(char *fname, struct file_list *flist,
* important case. Some systems may not have d_type.
**/
struct file_struct *make_file(char *fname, struct file_list *flist,
- int
exclude
_level)
+ int
filter
_level)
{
static char *lastdir;
static int lastdir_len = -1;
{
static char *lastdir;
static int lastdir_len = -1;
@@
-788,8
+786,8
@@
struct file_struct *make_file(char *fname, struct file_list *flist,
if (readlink_stat(thisname, &st, linkname) != 0) {
int save_errno = errno;
/* See if file is excluded before reporting an error. */
if (readlink_stat(thisname, &st, linkname) != 0) {
int save_errno = errno;
/* See if file is excluded before reporting an error. */
- if (
exclude_level != NO_EXCLUDE
S
- &&
check_exclude_file(thisname, 0, exclude
_level))
+ if (
filter_level != NO_FILTER
S
+ &&
is_excluded(thisname, 0, filter
_level))
return NULL;
if (save_errno == ENOENT) {
#if SUPPORT_LINKS
return NULL;
if (save_errno == ENOENT) {
#if SUPPORT_LINKS
@@
-816,9
+814,9
@@
struct file_struct *make_file(char *fname, struct file_list *flist,
return NULL;
}
return NULL;
}
- /* backup.c calls us with
exclude_level set to NO_EXCLUDE
S. */
- if (
exclude_level == NO_EXCLUDE
S)
- goto skip_
exclude
s;
+ /* backup.c calls us with
filter_level set to NO_FILTER
S. */
+ if (
filter_level == NO_FILTER
S)
+ goto skip_
filter
s;
if (S_ISDIR(st.st_mode) && !xfer_dirs) {
rprintf(FINFO, "skipping directory %s\n", thisname);
if (S_ISDIR(st.st_mode) && !xfer_dirs) {
rprintf(FINFO, "skipping directory %s\n", thisname);
@@
-832,7
+830,7
@@
struct file_struct *make_file(char *fname, struct file_list *flist,
&& S_ISDIR(st.st_mode))
flags |= FLAG_MOUNT_POINT;
&& S_ISDIR(st.st_mode))
flags |= FLAG_MOUNT_POINT;
- if (
check_exclude_file(thisname, S_ISDIR(st.st_mode) != 0, exclude
_level))
+ if (
is_excluded(thisname, S_ISDIR(st.st_mode) != 0, filter
_level))
return NULL;
if (lp_ignore_nonreadable(module_id)) {
return NULL;
if (lp_ignore_nonreadable(module_id)) {
@@
-843,11
+841,11
@@
struct file_struct *make_file(char *fname, struct file_list *flist,
return NULL;
}
return NULL;
}
-skip_
exclude
s:
+skip_
filter
s:
if (verbose > 2) {
rprintf(FINFO, "[%s] make_file(%s,*,%d)\n",
if (verbose > 2) {
rprintf(FINFO, "[%s] make_file(%s,*,%d)\n",
- who_am_i(), thisname,
exclude
_level);
+ who_am_i(), thisname,
filter
_level);
}
if ((basename = strrchr(thisname, '/')) != NULL) {
}
if ((basename = strrchr(thisname, '/')) != NULL) {
@@
-927,7
+925,7
@@
skip_excludes:
memcpy(bp, basename, basename_len);
bp += basename_len;
memcpy(bp, basename, basename_len);
bp += basename_len;
-#if
def
HAVE_STRUCT_STAT_ST_RDEV
+#if HAVE_STRUCT_STAT_ST_RDEV
if (preserve_devices && IS_DEVICE(st.st_mode))
file->u.rdev = st.st_rdev;
#endif
if (preserve_devices && IS_DEVICE(st.st_mode))
file->u.rdev = st.st_rdev;
#endif
@@
-983,7
+981,7
@@
void send_file_name(int f, struct file_list *flist, char *fname,
/* f is set to -1 when calculating deletion file list */
file = make_file(fname, flist,
/* f is set to -1 when calculating deletion file list */
file = make_file(fname, flist,
- f == -1 && delete_excluded? SERVER_
EXCLUDES : ALL_EXCLUDE
S);
+ f == -1 && delete_excluded? SERVER_
FILTERS : ALL_FILTER
S);
if (!file)
return;
if (!file)
return;
@@
-1012,7
+1010,7
@@
static void send_directory(int f, struct file_list *flist, char *dir)
struct dirent *di;
char fname[MAXPATHLEN];
unsigned int offset;
struct dirent *di;
char fname[MAXPATHLEN];
unsigned int offset;
- void *save_
exclude
s;
+ void *save_
filter
s;
char *p;
d = opendir(dir);
char *p;
d = opendir(dir);
@@
-1036,7
+1034,7
@@
static void send_directory(int f, struct file_list *flist, char *dir)
offset++;
}
offset++;
}
- save_
excludes = push_local_exclude
s(fname, offset);
+ save_
filters = push_local_filter
s(fname, offset);
for (errno = 0, di = readdir(d); di; errno = 0, di = readdir(d)) {
char *dname = d_name(di);
for (errno = 0, di = readdir(d); di; errno = 0, di = readdir(d)) {
char *dname = d_name(di);
@@
-1058,7
+1056,7
@@
static void send_directory(int f, struct file_list *flist, char *dir)
rsyserr(FERROR, errno, "readdir(%s)", dir);
}
rsyserr(FERROR, errno, "readdir(%s)", dir);
}
- pop_local_
excludes(save_exclude
s);
+ pop_local_
filters(save_filter
s);
closedir(d);
}
closedir(d);
}
@@
-1080,6
+1078,7
@@
struct file_list *send_file_list(int f, int argc, char *argv[])
char lastpath[MAXPATHLEN] = "";
struct file_list *flist;
BOOL need_first_push = True;
char lastpath[MAXPATHLEN] = "";
struct file_list *flist;
BOOL need_first_push = True;
+ struct timeval start_tv, end_tv;
int64 start_write;
int use_ff_fd = 0;
int64 start_write;
int use_ff_fd = 0;
@@
-1087,6
+1086,7
@@
struct file_list *send_file_list(int f, int argc, char *argv[])
start_filelist_progress("building file list");
start_write = stats.total_written;
start_filelist_progress("building file list");
start_write = stats.total_written;
+ gettimeofday(&start_tv, NULL);
flist = flist_new(f == -1 ? WITHOUT_HLINK : WITH_HLINK,
"send_file_list");
flist = flist_new(f == -1 ? WITHOUT_HLINK : WITH_HLINK,
"send_file_list");
@@
-1101,7
+1101,7
@@
struct file_list *send_file_list(int f, int argc, char *argv[])
}
use_ff_fd = 1;
if (curr_dir_len < MAXPATHLEN - 1) {
}
use_ff_fd = 1;
if (curr_dir_len < MAXPATHLEN - 1) {
- push_local_
exclude
s(curr_dir, curr_dir_len);
+ push_local_
filter
s(curr_dir, curr_dir_len);
need_first_push = False;
}
}
need_first_push = False;
}
}
@@
-1145,9
+1145,9
@@
struct file_list *send_file_list(int f, int argc, char *argv[])
if (need_first_push) {
if ((p = strrchr(fname, '/')) != NULL) {
if (*++p && strcmp(p, ".") != 0)
if (need_first_push) {
if ((p = strrchr(fname, '/')) != NULL) {
if (*++p && strcmp(p, ".") != 0)
- push_local_
exclude
s(fname, p - fname);
+ push_local_
filter
s(fname, p - fname);
} else if (strcmp(fname, ".") != 0)
} else if (strcmp(fname, ".") != 0)
- push_local_
exclude
s(fname, 0);
+ push_local_
filter
s(fname, 0);
need_first_push = False;
}
need_first_push = False;
}
@@
-1252,10
+1252,23
@@
struct file_list *send_file_list(int f, int argc, char *argv[])
}
if (f != -1) {
}
if (f != -1) {
+ gettimeofday(&end_tv, NULL);
+ stats.flist_buildtime =
+ (int64)(end_tv.tv_sec - start_tv.tv_sec) * 1000
+ + (end_tv.tv_usec - start_tv.tv_usec) / 1000;
+ if (stats.flist_buildtime == 0)
+ stats.flist_buildtime = 1;
+ start_tv = end_tv;
+
send_file_entry(NULL, f, 0);
if (show_filelist_p())
finish_filelist_progress(flist);
send_file_entry(NULL, f, 0);
if (show_filelist_p())
finish_filelist_progress(flist);
+
+ gettimeofday(&end_tv, NULL);
+ stats.flist_xfertime =
+ (int64)(end_tv.tv_sec - start_tv.tv_sec) * 1000
+ + (end_tv.tv_usec - start_tv.tv_usec) / 1000;
}
if (flist->hlink_pool) {
}
if (flist->hlink_pool) {
@@
-1726,8
+1739,10
@@
void delete_in_dir(struct file_list *flist, char *fname)
safe_fname(f));
}
} else {
safe_fname(f));
}
} else {
- delete_file(f, S_ISDIR(mode)
- ? DEL_DIR | DEL_RECURSE : 0);
+ int dflags = delete_during
+ ? DEL_DIR | DEL_FORCE_RECURSE
+ : DEL_DIR | DEL_NO_RECURSE;
+ delete_file(f, S_ISDIR(mode) ? dflags : 0);
}
deletion_count++;
}
}
deletion_count++;
}