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

Valters Vingolds valters at vingolds.ch
Fri Jan 6 03:48:24 EST 2017


Hi, here's my thinking: the default output might be too terse:
$ hg pull --rebase
abort: uncommitted changes

So if a person feels confused by this response ("hold up, what's going
on?"), and passes "--debug" flag they will receive following output:
$ hg pull --rebase --debug
before rebase: ensure working dir is clean
abort: uncommitted changes

In my mind, this is valuable bit of context: oh, that's because "rebase" is
in the mix, and is stopping the pull now.

Regarding fake .hg/rebasestate in test, that's literally all that
cmdutil.checkunfinished() does:
  if repo.vfs.exists(f):
      raise error.Abort(msg, hint=hint)

It only checks for existence of named file. And "unfinishedstates" is a
list of file names where plugins register their "operation in progress"
status files...

Conversely, in rebase plugin, to store its state, we only do: "f =
repo.vfs("rebasestate", "w")" and go ahead to write stuff into it.

To test properly, I would have to induce an aborted rebase: generate a
conflict during rebase, and there are existing tests that do it in
rebase-abort testcases. (Or maybe aborted graft is easier to set up.)

I'll think about this, but it is not clear to me if the upside (proper
test) outweighs the downside (complex, maybe brittle set-up), to avoid
internal knowledge of cmdutil.checkunfinished() behavior [which, we know,
in the end only will check for an existence of state-file in .hg/ dir]...


On Fri, Jan 6, 2017 at 7:56 AM, Pierre-Yves David <
pierre-yves.david at ens-lyon.org> wrote:

> (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
>



-- 
Valters Vingolds
http://www.linkedin.com/in/valters
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20170106/4055d32b/attachment.html>


More information about the Mercurial-devel mailing list