- /* now we need to fix any directory permissions that were
- * modified during the transfer */
- for (i = 0; i < flist->count; i++) {
- struct file_struct *file = flist->files[i];
- if (!file->basename || !S_ISDIR(file->mode))
- continue;
- recv_generator(local_name ? local_name : f_name(file),
- file, i, -1, -1);
+ if ((need_retouch_dir_perms || need_retouch_dir_times)
+ && !list_only && !local_name && !dry_run) {
+ /* Now we need to fix any directory permissions that were
+ * modified during the transfer and/or re-set any tweaked
+ * modified-time values. */
+ for (i = 0; i < flist->count; i++) {
+ struct file_struct *file = flist->files[i];
+ if (!file->basename || !S_ISDIR(file->mode))
+ continue;
+ if (!need_retouch_dir_times && file->mode & S_IWUSR)
+ continue;
+ recv_generator(local_name ? local_name : f_name(file),
+ flist, file, i, -1, -1);
+ }