[PATCH] update: add a hint when aborting for uncommitted changes
Martin von Zweigbergk
martinvonz at google.com
Wed Apr 5 01:29:29 EDT 2017
On Tue, Apr 4, 2017 at 9:40 AM, Pierre-Yves David
<pierre-yves.david at ens-lyon.org> wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at ens-lyon.org>
> # Date 1491225382 -7200
> # Mon Apr 03 15:16:22 2017 +0200
> # Node ID 32116e1ad0d93b48d344f317899b974628310850
> # Parent 2632df096fc0ac7582382b1f94ea4b9ad0bce8f2
> # EXP-Topic update.mergehint
> # Available At https://www.mercurial-scm.org/repo/users/marmoute/mercurial/
> # hg pull https://www.mercurial-scm.org/repo/users/marmoute/mercurial/ -r 32116e1ad0d9
> update: add a hint when aborting for uncommitted changes
>
> Plain abort is a bit frustrating for the user. We now point at the '--merge' option
> in the hint. This is similar to what evolve 'next' and 'prev' do. Not that
> evolution use a more direct hint "(do you want --merge)", but it might be a bit
> too error prone for new user.
>
> diff --git a/mercurial/hg.py b/mercurial/hg.py
> --- a/mercurial/hg.py
> +++ b/mercurial/hg.py
> @@ -761,7 +761,8 @@ def updatetotally(ui, repo, checkout, br
> ret = _clean(repo, checkout)
> else:
> if updatecheck == 'abort':
> - cmdutil.bailifchanged(repo, merge=False)
> + hint = _('to merge these changes with destination, use --merge')
The existing messages say "commit or update --clean to discard
changes". I sent a patch to also suggest --merge in the
updatecheck=linear case (i.e. the legacy and default case), but we
ended up dropping that because it's hard to recover from the merge
state. I don't see a reason that we should recommend something
different when updatecheck=abort. Using a hint of "commit or update
--clean to discard changes" seems completely uncontroversial. Should
we do that instead? Or should we start recommending --merge (for both
these cases) despite the risk? I'm not sure.
> + cmdutil.bailifchanged(repo, merge=False, hint=hint)
> updatecheck = 'none'
> ret = _update(repo, checkout, updatecheck=updatecheck)
>
> diff --git a/tests/test-merge5.t b/tests/test-merge5.t
> --- a/tests/test-merge5.t
> +++ b/tests/test-merge5.t
> @@ -16,6 +16,7 @@
> $ rm b
> $ hg update -c 2
> abort: uncommitted changes
> + (to merge these changes with destination, use --merge)
> [255]
> $ hg revert b
> $ hg update -c 2
> diff --git a/tests/test-pull-update.t b/tests/test-pull-update.t
> --- a/tests/test-pull-update.t
> +++ b/tests/test-pull-update.t
> @@ -27,6 +27,7 @@ Should respect config to disable dirty u
> adding file changes
> added 1 changesets with 1 changes to 1 files (+1 heads)
> abort: uncommitted changes
> + (to merge these changes with destination, use --merge)
> [255]
> $ hg --config extensions.strip= strip --no-backup tip
> $ hg co -qC tip
> diff --git a/tests/test-update-branches.t b/tests/test-update-branches.t
> --- a/tests/test-update-branches.t
> +++ b/tests/test-update-branches.t
> @@ -157,6 +157,7 @@ Cases are run as shown in that table, ro
>
> $ revtest '-c dirty linear' dirty 1 2 -c
> abort: uncommitted changes
> + (to merge these changes with destination, use --merge)
> parent=1
> M foo
>
> @@ -172,6 +173,7 @@ Cases are run as shown in that table, ro
>
> $ revtest '-c dirtysub linear' dirtysub 1 2 -c
> abort: uncommitted changes in subrepository 'sub'
> + (to merge these changes with destination, use --merge)
> parent=1
> M sub/suba
>
> @@ -200,11 +202,13 @@ Cases are run as shown in that table, ro
>
> $ revtest 'none dirty linear' dirty 1 2
> abort: uncommitted changes
> + (to merge these changes with destination, use --merge)
> parent=1
> M foo
>
> $ revtest 'none dirty linear' dirty 1 2 -c
> abort: uncommitted changes
> + (to merge these changes with destination, use --merge)
> parent=1
> M foo
>
> @@ -226,6 +230,7 @@ Cases are run as shown in that table, ro
>
> $ revtest 'none dirty linear' dirty 1 2 -c
> abort: uncommitted changes
> + (to merge these changes with destination, use --merge)
> parent=1
> M foo
>
> @@ -269,6 +274,7 @@ Cases are run as shown in that table, ro
>
> $ revtest 'none dirty linear' dirty 1 2 -c
> abort: uncommitted changes
> + (to merge these changes with destination, use --merge)
> parent=1
> M foo
>
> @@ -323,6 +329,7 @@ Uses default value of "linear" when valu
> Setup for later tests
> $ revtest 'none dirty linear' dirty 1 2 -c
> abort: uncommitted changes
> + (to merge these changes with destination, use --merge)
> parent=1
> M foo
>
> @@ -560,6 +567,7 @@ Test that boolean flags allow --no-flag
> > EOF
> $ hg co 2
> abort: uncommitted changes
> + (to merge these changes with destination, use --merge)
> [255]
> $ hg co --no-check 2
> 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> diff --git a/tests/test-update-issue1456.t b/tests/test-update-issue1456.t
> --- a/tests/test-update-issue1456.t
> +++ b/tests/test-update-issue1456.t
> @@ -19,6 +19,7 @@ Test that local removed/deleted, remote
> $ echo dirty > foo
> $ hg up -c
> abort: uncommitted changes
> + (to merge these changes with destination, use --merge)
> [255]
> $ hg up -q
> $ cat foo
More information about the Mercurial-devel
mailing list