Merge branch 'jc/merge-symlink-ours-theirs'
"git merge -Xours/-Xtheirs" learned to use our/their version when resolving a conflicting updates to a symbolic link. * jc/merge-symlink-ours-theirs: merge: teach -Xours/-Xtheirs to symbolic link merge
This commit is contained in:
commit
14b9d9aa0d
@ -1026,10 +1026,19 @@ static int merge_file_1(struct merge_options *o,
|
||||
&b->oid,
|
||||
!o->call_depth);
|
||||
} else if (S_ISLNK(a->mode)) {
|
||||
switch (o->recursive_variant) {
|
||||
case MERGE_RECURSIVE_NORMAL:
|
||||
oidcpy(&result->oid, &a->oid);
|
||||
|
||||
if (!oid_eq(&a->oid, &b->oid))
|
||||
result->clean = 0;
|
||||
break;
|
||||
case MERGE_RECURSIVE_OURS:
|
||||
oidcpy(&result->oid, &a->oid);
|
||||
break;
|
||||
case MERGE_RECURSIVE_THEIRS:
|
||||
oidcpy(&result->oid, &b->oid);
|
||||
break;
|
||||
}
|
||||
} else
|
||||
die("BUG: unsupported object type in the tree");
|
||||
}
|
||||
|
@ -73,4 +73,36 @@ test_expect_success 'pull passes -X to underlying merge' '
|
||||
git reset --hard master && test_must_fail git pull -s recursive -X bork . side
|
||||
'
|
||||
|
||||
test_expect_success SYMLINKS 'symlink with -Xours/-Xtheirs' '
|
||||
git reset --hard master &&
|
||||
git checkout -b two master &&
|
||||
ln -s target-zero link &&
|
||||
git add link &&
|
||||
git commit -m "add link pointing to zero" &&
|
||||
|
||||
ln -f -s target-two link &&
|
||||
git commit -m "add link pointing to two" link &&
|
||||
|
||||
git checkout -b one HEAD^ &&
|
||||
ln -f -s target-one link &&
|
||||
git commit -m "add link pointing to one" link &&
|
||||
|
||||
# we expect symbolic links not to resolve automatically, of course
|
||||
git checkout one^0 &&
|
||||
test_must_fail git merge -s recursive two &&
|
||||
|
||||
# favor theirs to resolve to target-two?
|
||||
git reset --hard &&
|
||||
git checkout one^0 &&
|
||||
git merge -s recursive -X theirs two &&
|
||||
git diff --exit-code two HEAD link &&
|
||||
|
||||
# favor ours to resolve to target-one?
|
||||
git reset --hard &&
|
||||
git checkout one^0 &&
|
||||
git merge -s recursive -X ours two &&
|
||||
git diff --exit-code one HEAD link
|
||||
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user