git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Phil Hord <hordp@cisco.com>
To: "git@vger.kernel.org" <git@vger.kernel.org>
Cc: Junio C Hamano <gitster@pobox.com>,
	Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>,
	David Aguilar <davvid@gmail.com>
Subject: Re: rerere affects handling of git-stash-pop merge conflicts
Date: Fri, 15 Jul 2011 16:19:37 -0400	[thread overview]
Message-ID: <4E20A0D9.4030404@cisco.com> (raw)
In-Reply-To: <4E1F22DF.7060209@cisco.com>

git rerere is misleading us after a conflicted 'git stash pop'.  There 
_is_ an unresolved merge conflict, but .git/MERGE_RR exists and is 
empty, even though there is no previously recorded resolution.
This causes git mergetool to skip over our conflicted file since he now 
uses 'git rerere remaining' to find the unresolved conflicts.

I think one of these is true, but I'm not sure which one.

   A. rerere _should not_ be triggered at all by "stash pop" conflicts
or
   B. rerere _should_ be correctly and completely triggered by "stash 
pop" conflicts
or
   C. 'git mergetool' should not be expected to work after a failed "git 
stash pop"

I'm hoping the right answer is B, but I would also accept A.

fwiw - 'git stash pop' calls 'merge-recursive' at the end, and this is 
where the problem appears.  I have not decoded git-merge-recursive's use 
there enough to figure out where it's gone wrong.

Phil


On 07/14/2011 01:09 PM, Phil Hord wrote:
> I was investigating a git-stash-pop anomaly when I ran across this one.
> I think this is residual breakage from [1] bb0a484 (mergetool: Skip
> autoresolved paths, 2010-08-17).  A similar problem aimed at 'git merge'
> was ostensibly fixed by [2] 2f59c9 (mergetool: don't skip modify/remove
> conflicts, 2011-02-16).
>
> [1] http://thread.gmane.org/gmane.comp.version-control.git/153420
> [2] http://thread.gmane.org/gmane.comp.version-control.git/164622
>
>
> Summary:
> After a 'git stash pop' with conflicts, 'git mergetool' fails to notice
> the conflicted files if 'rerere.enabled=true'.  git mergetool
> erroneously reports 'no files need merging'.
>
> After a 'git merge' with conflicts, 'git mergetool' seems to work ok in
> either case.
>
> Here's my test script:
>
> ------8<------ /tmp/stash.sh
> #!/bin/bash
>
> #enable/disable rerere for this test
> git config --global rerere.enabled ${1:false}
>
> # run the test
> rm -rf foo
> mkdir foo&&  cd foo&&  git init&&
> echo A>file&&  git add file&&  git commit --quiet -m "A"&&
> echo B>file&&  git stash&&
> echo C>file&&  git add file&&  git commit --quiet -m "C"&&
> git stash pop
>
> git mergetool
> ------8<------ /tmp/stash.sh
>
> git --version
>      git version 1.7.6.178.g55272
>
> # With rerere.enabled=false, it works ok (mergetool offers to
> # merge the conflicting file):
> ./stash.sh false
>
>      Initialized empty Git repository in /tmp/foo/.git/
>      Saved working directory and index state WIP on master: ac67a86 A
>      HEAD is now at ac67a86 A
>      Auto-merging file
>      CONFLICT (content): Merge conflict in file
>      merge tool candidates: meld opendiff kdiff3 tkdiff xxdiff
>      tortoisemerge gvimdiff diffuse ecmerge p4merge araxis bc3 vimdiff
>      emerge
>      Merging:
>      file
>
>      Normal merge conflict for 'file':
>        {local}: modified
>        {remote}: modified
>      Hit return to start merge resolution tool (xxdiff): ^C
>
> # But with rerere.enabled=true, mergetool thinks there is no conflict:
> ./stash.sh true
>
>      Initialized empty Git repository in /tmp/foo/.git/
>      Saved working directory and index state WIP on master: d40e77b A
>      HEAD is now at d40e77b A
>      Auto-merging file
>      CONFLICT (content): Merge conflict in file
>      merge tool candidates: meld opendiff kdiff3 tkdiff xxdiff
>      tortoisemerge gvimdiff diffuse ecmerge p4merge araxis bc3 vimdiff
>      emerge
>      No files need merging
>
> Phil
>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2011-07-15 20:19 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-14 17:09 rerere affects handling of git-stash-pop merge conflicts Phil Hord
2011-07-15 20:19 ` Phil Hord [this message]
2011-07-15 21:05   ` [PATCH/RFC] Add two basic tests for "rerere remaining" Phil Hord
2011-07-16  2:19 ` rerere affects handling of git-stash-pop merge conflicts Martin von Zweigbergk
2011-07-17 21:59   ` Junio C Hamano
2011-07-25 22:31     ` [PATCH] Add two basic tests for "rerere remaining" Phil Hord

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4E20A0D9.4030404@cisco.com \
    --to=hordp@cisco.com \
    --cc=davvid@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=martin.von.zweigbergk@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).