Painful user experience with 'hg resolve'
Peter Arrenbrecht
peter.arrenbrecht at gmail.com
Thu Aug 25 15:38:49 CDT 2011
On Thu, Aug 25, 2011 at 10:33 PM, Greg Ward <greg at gerg.ca> wrote:
> Here's an interesting tale from the Real World. A developer just came
> to me asking how she could have possibly broken the build by
> committing merge conflicts, because she followed all the instructions
> to the letter. Here's what she did (translated from our workflow to
> more normal terminology):
>
> $ hg update default
> $ hg merge --tool internal:merge <prev branch>
> [...conflicts in Foo.java...]
>
> "OK, let's resolve all conflicts"
>
> $ hg resolve --all
>
> (This is actually pointless since she has internal:merge configured as
> her default merge tool. But it's harmless apart from wasting a few CPU
> cycles. And it can be useful for people who merge with internal:merge,
> but then resolve with (say) kdiff3. I tend to do that myself.)
>
> "Now I fix my conflicts and make sure the code builds"
>
> $ vim Foo.java
> $ make
>
> "Great! Now I'll check what other files have conflicts"
>
> $ hg resolve --all (**)
> [...messages about Foo.java being merged again and failing again...]
>
> "Good, it worked! Ready to commit!"
>
> $ hg resolve -m Foo.java
> $ hg commit ...
>
> You probably spotted the problem up there at (**): she wanted "hg
> resolve -l", but actually used "hg resolve --all". Note how "resolve
> -l" is purely informative with no side effects, but "resolve --all" is
> a destructive operation that throws away the user's current conflict
> resolutions.
>
> Recap: "hg resolve" does four things:
> 1) purely informative, no side effects: "resolve -l"
> 2) changes state, but reversible so not very dangerous: "resolve -m"
> 3) changes state, also reversible, even less dangerous: "resolve -u"
> 4) discards the user's current resolutions, non-reversible,
> dangerous: "resolve"
>
> (I think "resolve -m" is a touch more dangerous because it lets you
> commit, whereas "resolve -u" blocks committing.) Is it any wonder
> people get confused by "hg resolve"?
>
> Here's an idea: add a new command, "hg remerge", to replace the
> dangerous meaning of "hg resolve".
>
> Alternately: add "hg mergestate" to report/change merge states and
> keep resolve dangerous.
>
> Thoughts?
Probably too late for all this. But I see your gripe and like remerge.
mergestate would collide with merge, so harder to use via abbrevs.
-parren
More information about the Mercurial-devel
mailing list