[PATCH 4 of 4] rebase: update working directory when aborting (issue5084)
FUJIWARA Katsunori
foozy at lares.dti.ne.jp
Wed Mar 2 08:00:49 UTC 2016
At Thu, 04 Feb 2016 20:09:45 -0600,
timeless wrote:
>
> # HG changeset patch
> # User timeless <timeless at mozdev.org>
> # Date 1454637406 0
> # Fri Feb 05 01:56:46 2016 +0000
> # Node ID 84fe8a7dbcb98a17ac600b9936c7480d02298647
> # Parent f523a6414cecdce46685f7d3e67db942869d8803
> rebase: update working directory when aborting (issue5084)
>
> diff --git a/hgext/rebase.py b/hgext/rebase.py
> --- a/hgext/rebase.py
> +++ b/hgext/rebase.py
> @@ -980,15 +980,20 @@
> cleanup = False
>
> if cleanup:
> + shouldupdate = False
> + rebased = filter(lambda x: x >= 0 and x != target, state.values())
> + if rebased:
> + strippoints = [
> + c.node() for c in repo.set('roots(%ld)', rebased)]
> + shouldupdate = len([
> + c.node() for c in repo.set('. & (%ld)', rebased)]) > 0
(sorry for much late comment)
In this case, the result of '. & (%ld)' query for shouldupdate is used
only by len(), and node-nization isn't needed for len().
Therefore, "len(repo.revs('. & (%ld)', rebased))" seems enough, and
more efficient than implementation above. The former can omit
instantiation of changectx and invocation of node() on it for each
revisions.
(or, do I overlook any important side effect of node-nization in this case ?)
> +
> # Update away from the rebase if necessary
> - if needupdate(repo, state):
> + if shouldupdate or needupdate(repo, state):
> merge.update(repo, originalwd, False, True)
>
> # Strip from the first rebased revision
> - rebased = filter(lambda x: x >= 0 and x != target, state.values())
> if rebased:
> - strippoints = [
> - c.node() for c in repo.set('roots(%ld)', rebased)]
> # no backup of rebased cset versions needed
> repair.strip(repo.ui, repo, strippoints)
>
> diff --git a/tests/failfilemerge.py b/tests/failfilemerge.py
> new file mode 100644
> --- /dev/null
> +++ b/tests/failfilemerge.py
> @@ -0,0 +1,18 @@
> +# extension to emulate interupting filemerge._filemerge
> +
> +from __future__ import absolute_import
> +
> +from mercurial import (
> + filemerge,
> + extensions,
> + error,
> +)
> +
> +def failfilemerge(filemergefn,
> + premerge, repo, mynode, orig, fcd, fco, fca, labels=None):
> + raise error.Abort("^C")
> + return filemergefn(premerge, repo, mynode, orig, fcd, fco, fca, labels)
> +
> +def extsetup(ui):
> + extensions.wrapfunction(filemerge, '_filemerge',
> + failfilemerge)
> diff --git a/tests/test-rebase-abort.t b/tests/test-rebase-abort.t
> --- a/tests/test-rebase-abort.t
> +++ b/tests/test-rebase-abort.t
> @@ -392,3 +392,75 @@
> rebase aborted
> $ cd ..
>
> +test aborting an interrupted series (issue5084)
> + $ hg init interrupted
> + $ cd interrupted
> + $ touch base
> + $ hg add base
> + $ hg commit -m base
> + $ touch a
> + $ hg add a
> + $ hg commit -m a
> + $ echo 1 > a
> + $ hg commit -m 1
> + $ touch b
> + $ hg add b
> + $ hg commit -m b
> + $ echo 2 >> a
> + $ hg commit -m c
> + $ touch d
> + $ hg add d
> + $ hg commit -m d
> + $ hg co -q 1
> + $ hg rm a
> + $ hg commit -m no-a
> + created new head
> + $ hg co 0
> + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> + $ hg log -G --template "{rev} {desc} {bookmarks}"
> + o 6 no-a
> + |
> + | o 5 d
> + | |
> + | o 4 c
> + | |
> + | o 3 b
> + | |
> + | o 2 1
> + |/
> + o 1 a
> + |
> + @ 0 base
> +
> + $ hg --config extensions.n=$TESTDIR/failfilemerge.py rebase -s 3 -d tip
> + rebasing 3:3a71550954f1 "b"
> + rebasing 4:e80b69427d80 "c"
> + abort: ^C
> + [255]
> + $ hg rebase --abort
> + saved backup bundle to $TESTTMP/interrupted/.hg/strip-backup/3d8812cf300d-93041a90-backup.hg (glob)
> + rebase aborted
> + $ hg log -G --template "{rev} {desc} {bookmarks}"
> + o 6 no-a
> + |
> + | o 5 d
> + | |
> + | o 4 c
> + | |
> + | o 3 b
> + | |
> + | o 2 1
> + |/
> + o 1 a
> + |
> + @ 0 base
> +
> + $ hg summary
> + parent: 0:df4f53cec30a
> + base
> + branch: default
> + commit: (clean)
> + update: 6 new changesets (update)
> + phases: 7 draft
> +
> + $ cd ..
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
----------------------------------------------------------------------
[FUJIWARA Katsunori] foozy at lares.dti.ne.jp
More information about the Mercurial-devel
mailing list