Commit ff19620f authored by Junio C Hamano's avatar Junio C Hamano

Merge branch 'jc/merge-symlink-ours-theirs' into maint

"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
parents e17cec27 fd48b464
......@@ -1026,10 +1026,19 @@ static int merge_file_1(struct merge_options *o,
} else if (S_ISLNK(a->mode)) {
oidcpy(&result->oid, &a->oid);
if (!oid_eq(&a->oid, &b->oid))
result->clean = 0;
switch (o->recursive_variant) {
oidcpy(&result->oid, &a->oid);
if (!oid_eq(&a->oid, &b->oid))
result->clean = 0;
oidcpy(&result->oid, &a->oid);
oidcpy(&result->oid, &b->oid);
} 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment