X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=dgit;h=9c7ec734e9f52c4371a31e817a3a392981c0f399;hp=8b9934b807c020233bc9f90d76487988460e2b30;hb=4d5ef701bf95a1c60a5cc1b9f5c4d771ac49375a;hpb=fd9881c5c24f97f7c7421db946e6f09afdb2758a diff --git a/dgit b/dgit index 8b9934b8..9c7ec734 100755 --- a/dgit +++ b/dgit @@ -3913,6 +3913,7 @@ sub splitbrain_pseudomerge ($$$$) { # return $dgitview unless defined $archive_hash; + return $dgitview if deliberately_not_fast_forward(); printdebug "splitbrain_pseudomerge...\n"; @@ -4915,12 +4916,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 ($@) {