[PATCH V3] rebase: fail-fast the pull if working dir is not clean (BC)

Pierre-Yves David pierre-yves.david at ens-lyon.org
Fri Jan 6 01:56:23 EST 2017


(that was a fast new version, thanks for the reactivity ☺)

On 01/05/2017 09:21 AM, Valters Vingolds wrote:
> # HG changeset patch
> # User Valters Vingolds <valters at vingolds.ch>
> # Date 1483272989 -3600
> #      Sun Jan 01 13:16:29 2017 +0100
> # Node ID e34ac9f0b311708613ae5d18b5791768a90e3582
> # Parent  0064a1eb28e246ded9b726c696d048143d1b23f1
> rebase: fail-fast the pull if working dir is not clean (BC)
>
> Refuse to run 'hg pull --rebase' if there are uncommitted changes:
> so that instead of going ahead with fetching changes and then suddenly aborting
> the rebase, we can warn user of uncommitted changes (or unclean repo state)
> right up front.
>
> diff --git a/hgext/rebase.py b/hgext/rebase.py
> --- a/hgext/rebase.py
> +++ b/hgext/rebase.py
> @@ -1316,6 +1316,10 @@
>                  ui.debug('--update and --rebase are not compatible, ignoring '
>                           'the update flag\n')
>
> +            ui.debug('before rebase: ensure working dir is clean\n')

The debug output seems a bit superfluous, I don't think we have similar 
output for other command, so I would rather drop it (unless I missed 
something).

> +            cmdutil.checkunfinished(repo)
> +            cmdutil.bailifchanged(repo)
> +
>              revsprepull = len(repo)
>              origpostincoming = commands.postincoming
>              def _dummy(*args, **kwargs):
> diff --git a/tests/test-rebase-pull.t b/tests/test-rebase-pull.t
> --- a/tests/test-rebase-pull.t
> +++ b/tests/test-rebase-pull.t
> @@ -72,6 +72,19 @@
>    searching for changes
>    no changes found
>
> +Abort pull early if working dir is not clean:
> +
> +  $ echo L1-mod > L1
> +  $ hg pull --rebase
> +  abort: uncommitted changes
> +  [255]
> +  $ hg update --clean --quiet
> +  $ touch .hg/rebasestate # make rebase think there's one in progress right now

That seems a bit too hacky. Can we change this to having an actual 
interrupted operation going on ?

> +  $ hg pull --rebase
> +  abort: rebase in progress
> +  (use 'hg rebase --continue' or 'hg rebase --abort')
> +  [255]
> +  $ rm .hg/rebasestate
>
>  Invoke pull --rebase and nothing to rebase:

Cheers,

-- 
Pierre-Yves David


More information about the Mercurial-devel mailing list