Re: [PATCH v2] pull: merge into unborn by fast-forwarding from empty tree
- From
Thomas Rast <trast@inf.ethz.ch>
- Date
- Jun 20, 2013, 13:33 UTC
- Message-ID
- <87mwqk6h5d.fsf@linux-k42r.v.cablecom.net>
- In-Reply-To
- <87zjuk6hr2.fsf@linux-k42r.v.cablecom.net>
Thomas Rast <trast@inf.ethz.ch> writes:
Show 24 quoted lines
> Jeff King <peff@peff.net> writes: > >> On Thu, Jun 20, 2013 at 03:06:01PM +0200, Thomas Rast wrote: >> >>> +test_expect_success 'pulling into void does not overwrite staged files' ' >>> + git init cloned-staged-colliding && >>> + ( >>> + cd cloned-staged-colliding && >>> + echo "alternate content" >file && >>> + git add file && >>> + test_must_fail git pull .. master && >>> + echo "alternate content" >expect && >>> + test_cmp expect file && >>> + git cat-file blob :file >file.index && >>> + test_cmp expect file.index >>> + ) >>> +' >> >> I naively would have expected this to leave us in a conflicted state >> over "file". But I guess read-tree just rejects it, because we are not >> doing a real three-way merge. I'm not sure it is that big a deal; this >> is more about safety than about creating a conflicted/resolvable state. > > Note that the test_must_fail essentially tests that the merge is rejected.
Bah, no it doesn't, a conflicting merge also returns a nonzero status. Sigh.
If you meant we should actually conflict, I'm not sure what options there would be other than actually calling a merge driver. And we could actually do this like so (it'll obviously break the tests):
diff --git i/git-pull.sh w/git-pull.sh index 1f84383..b3d36a8 100755 --- i/git-pull.sh +++ w/git-pull.sh @@ -276,7 +276,7 @@ then # lose index/worktree changes that the user already made on # the unborn branch. empty_tree=4b825dc642cb6eb9a060e54bf8d69288fbee4904 - git read-tree -m -u $empty_tree HEAD || exit 1 + git merge-recursive $empty_tree -- $(git write-tree) HEAD || exit 1 exit fi
--
Thomas Rast
trast@{inf,student}.ethz.ch