- if (server_filter_list.head
- && check_filter(&server_filter_list, fname,
- S_ISDIR(file->mode)) < 0) {
- if (verbose) {
- rprintf(FINFO, "skipping server-excluded file \"%s\"\n",
- safe_fname(fname));
+ if (server_filter_list.head) {
+ if (excluded_below >= 0) {
+ if (file->dir.depth > excluded_below)
+ goto skipping;
+ excluded_below = -1;
+ }
+ if (check_filter(&server_filter_list, fname,
+ S_ISDIR(file->mode)) < 0) {
+ if (S_ISDIR(file->mode))
+ excluded_below = file->dir.depth;
+ skipping:
+ if (verbose) {
+ rprintf(FINFO,
+ "skipping server-excluded file \"%s\"\n",
+ safe_fname(fname));
+ }
+ return;