summaryrefslogtreecommitdiff
path: root/dgit
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2017-07-16 11:19:29 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2017-07-16 12:46:25 +0100
commitfd9881c5c24f97f7c7421db946e6f09afdb2758a (patch)
tree86ca1d43086ba131a25c9f02b755681536dee335 /dgit
parent73431be6826351c4b3bbd50b61848693e1646749 (diff)
dgit: unrepres. changes: Prepare to tolerate symlinks
Permit symlinks (which have mode 120000 in git) to make their way through for more detailed checks. No functional change except to error messages, because: * If neither thing was a symlink, then the existing regexps still match and the new "modified symlink" clause will not, so the flow is unchanged. * Otherwise, if both $oldmode and $newmode match [^0], ie, this is a modification rather than deletion or removal, we insist that $oldmode=$newmode, and then, fail the new "modified symlink" check. * Otherwise, we fail the check for default mode. So in the case we are allowing to proceed further, we fail as before. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Diffstat (limited to 'dgit')
-rwxr-xr-xdgit11
1 files changed, 6 insertions, 5 deletions
diff --git a/dgit b/dgit
index dd3b31c..8b9934b 100755
--- a/dgit
+++ b/dgit
@@ -4910,14 +4910,15 @@ sub quiltify_trees_differ ($$;$$$) {
if ($unrepres) {
eval {
- die "not a plain file\n"
- unless $newmode =~ m/^10\d{4}$/ ||
- $oldmode =~ m/^10\d{4}$/;
+ die "not a plain file or symlink\n"
+ unless $newmode =~ m/^(?:10|12)\d{4}$/ ||
+ $oldmode =~ m/^(?:10|12)\d{4}$/;
if ($oldmode =~ m/[^0]/ &&
$newmode =~ m/[^0]/) {
- die "mode changed\n" if $oldmode ne $newmode;
+ die "mode or type changed\n" if $oldmode ne $newmode;
+ die "modified symlink\n" unless $newmode =~ m/^10/;
} else {
- die "non-default mode\n"
+ die "non-default mode or type\n"
unless $newmode =~ m/^100644$/ ||
$oldmode =~ m/^100644$/;
}