---- old/receiver.c
-+++ new/receiver.c
-@@ -37,6 +37,7 @@ extern int protocol_version;
- extern int relative_paths;
- extern int preserve_hard_links;
- extern int preserve_perms;
-+extern int omit_dir_changes;
- extern int basis_dir_cnt;
- extern int make_backups;
- extern int cleanup_got_literal;
-@@ -551,7 +552,7 @@ int recv_files(int f_in, struct file_lis
-
- /* If we're not preserving permissions, change the file-list's
- * mode based on the local permissions and some heuristics. */
-- if (!preserve_perms) {
-+ if (!preserve_perms || (omit_dir_changes && S_ISDIR(st.st_mode))) {
- int exists = fd1 != -1;
- file->mode = dest_mode(file->mode, st.st_mode, exists);
- }