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,
|
&b->oid,
|
||||||
!o->call_depth);
|
!o->call_depth);
|
||||||
} else if (S_ISLNK(a->mode)) {
|
} else if (S_ISLNK(a->mode)) {
|
||||||
|
switch (o->recursive_variant) {
|
||||||
|
case MERGE_RECURSIVE_NORMAL:
|
||||||
oidcpy(&result->oid, &a->oid);
|
oidcpy(&result->oid, &a->oid);
|
||||||
|
|
||||||
if (!oid_eq(&a->oid, &b->oid))
|
if (!oid_eq(&a->oid, &b->oid))
|
||||||
result->clean = 0;
|
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
|
} else
|
||||||
die("BUG: unsupported object type in the tree");
|
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
|
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
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user