chiark / gitweb /
changelog: finalise 3.12
[dgit.git] / dgit
diff --git a/dgit b/dgit
index 8b9934b807c020233bc9f90d76487988460e2b30..42647ce02e79d277ef9a211e00eed5986387ffc3 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -4915,12 +4915,18 @@ sub quiltify_trees_differ ($$;$$$) {
                           $oldmode =~ m/^(?:10|12)\d{4}$/;
                if ($oldmode =~ m/[^0]/ &&
                    $newmode =~ m/[^0]/) {
+                   # both old and new files exist
                    die "mode or type changed\n" if $oldmode ne $newmode;
                    die "modified symlink\n" unless $newmode =~ m/^10/;
+               } elsif ($oldmode =~ m/[^0]/) {
+                   # deletion
+                   die "deletion of symlink\n"
+                       unless $oldmode =~ m/^10/;
                } else {
-                   die "non-default mode or type\n"
-                       unless $newmode =~ m/^100644$/ ||
-                              $oldmode =~ m/^100644$/;
+                   # creation
+                   die "creation with non-default mode\n"
+                       unless $newmode =~ m/^100644$/ or
+                              $newmode =~ m/^120000$/;
                }
            };
            if ($@) {