summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2000-01-23 13:16:30 +0000
committerAndrew Tridgell <tridge@samba.org>2000-01-23 13:16:30 +0000
commitb315601ce07701c4913c48a269775ab3284b25ba (patch)
tree9ebb557a3513eceb9f250424f35443fea900518f
parent5f808dfbd71b0e40d0fd2976dceb2feaf024b6ca (diff)
downloadrsync-b315601ce07701c4913c48a269775ab3284b25ba.tar.gz
removed Daves include-only optimisation. One of the bug reports turned
out to be caused by it and it seems rather a lot of extra effort for what must really be a minor optimisation in most cases
-rw-r--r--exclude.c53
-rw-r--r--flist.c3
2 files changed, 1 insertions, 55 deletions
diff --git a/exclude.c b/exclude.c
index d8aa494b..fefe2993 100644
--- a/exclude.c
+++ b/exclude.c
@@ -27,50 +27,6 @@ extern int delete_mode;
static struct exclude_struct **exclude_list;
-/*
- * Optimization for special case when all included files are explicitly
- * listed without wildcards in the "exclude" list followed by a "- *"
- * to exclude the rest.
- * Contributed by Dave Dykstra <dwd@bell-labs.com>
- */
-static int only_included_files = 1;
-static struct exclude_struct *exclude_the_rest;
-
-int send_included_file_names(int f,struct file_list *flist)
-{
- struct exclude_struct *ex, **ex_list;
- int n;
- char *p;
-
- if (!only_included_files || (exclude_the_rest == NULL) || delete_mode)
- return 0;
-
- if (verbose > 1) {
- rprintf(FINFO,"(using include-only optimization) ");
- }
-
- /* set exclude_list to NULL temporarily so check_exclude */
- /* will always return true */
- ex_list = exclude_list;
- exclude_list = NULL;
- for (n=0; (ex = ex_list[n]) != NULL; n++) {
- if (ex == exclude_the_rest)
- break;
- p = ex->pattern;
- while (*p == '/') {
- /* skip the allowed beginning slashes */
- p++;
- }
- /* silently skip files that don't exist to
- be more like non-optimized case */
- if (access(p,0) == 0)
- send_file_name(f,flist,p,0,0);
- }
- exclude_list = ex_list;
-
- return 1;
-}
-
/* build an exclude structure given a exclude pattern */
static struct exclude_struct *make_exclude(char *pattern, int include)
{
@@ -95,15 +51,8 @@ static struct exclude_struct *make_exclude(char *pattern, int include)
if (!ret->pattern) out_of_memory("make_exclude");
if (strpbrk(pattern, "*[?")) {
- if (!ret->include && (*pattern == '*') && (*(pattern+1) == '\0')) {
- exclude_the_rest = ret;
- } else {
- only_included_files = 0;
- }
ret->regular_exp = 1;
ret->fnmatch_flags = strstr(pattern, "**") ? 0 : FNM_PATHNAME;
- } else if (!ret->include) {
- only_included_files = 0;
}
if (strlen(pattern) > 1 && pattern[strlen(pattern)-1] == '/') {
@@ -199,8 +148,6 @@ void add_exclude_list(char *pattern,struct exclude_struct ***list, int include)
}
free((*list));
*list = NULL;
- only_included_files = 1;
- exclude_the_rest = NULL;
return;
}
diff --git a/flist.c b/flist.c
index cc5c3113..a653f14a 100644
--- a/flist.c
+++ b/flist.c
@@ -737,8 +737,7 @@ struct file_list *send_file_list(int f,int argc,char *argv[])
if (one_file_system)
set_filesystem(fname);
- if (!recurse || !send_included_file_names(f,flist))
- send_file_name(f,flist,fname,recurse,FLAG_DELETE);
+ send_file_name(f,flist,fname,recurse,FLAG_DELETE);
if (olddir != NULL) {
flist_dir = NULL;