[PATCH v4] rebase: rebase changesets in topo order (issue5370) (BC)
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Fri Sep 23 21:01:51 EDT 2016
On 09/24/2016 01:17 AM, Xidorn Quan wrote:
> # HG changeset patch
> # User Xidorn Quan <me at upsuper.org>
> # Date 1474095776 -36000
> # Sat Sep 17 17:02:56 2016 +1000
> # Node ID 2aaff71d4ea74c38a2397033654ebb3567957ae2
> # Parent 285a8c3e53f2183438f0cdbc238e4ab851d0d110
> rebase: rebase changesets in topo order (issue5370) (BC)
>
> There are two reasons that rebase should be done this way:
> 1. This would make rebasing faster because it would minimize the total
> number of files to be checked out in the process, as it don't need
> to switch back and forth between branches.
> 2. It makes resolving conflicts easier as user has a better context.
>
> This commit changes the behavior in "Test multiple root handling" of
> test-rebase-obsolete.t. It is an expected change which reflects the new
> behavior that commits in a branch are grouped together when rebased.
Pushed, thank you very much.
> diff --git a/hgext/rebase.py b/hgext/rebase.py
> --- a/hgext/rebase.py
> +++ b/hgext/rebase.py
> @@ -330,17 +330,17 @@ class rebaseruntime(object):
> inclusive=True)
>
> # Keep track of the current bookmarks in order to reset them later
> self.currentbookmarks = repo._bookmarks.copy()
> self.activebookmark = self.activebookmark or repo._activebookmark
> if self.activebookmark:
> bookmarks.deactivate(repo)
>
> - sortedrevs = sorted(self.state)
> + sortedrevs = repo.revs('sort(%ld, -topo)', self.state)
> cands = [k for k, v in self.state.iteritems() if v == revtodo]
> total = len(cands)
> pos = 0
> for rev in sortedrevs:
> ctx = repo[rev]
> desc = '%d:%s "%s"' % (ctx.rev(), ctx,
> ctx.description().split('\n', 1)[0])
> names = repo.nodetags(ctx.node()) + repo.nodebookmarks(ctx.node())
> diff --git a/tests/test-rebase-obsolete.t b/tests/test-rebase-obsolete.t
> --- a/tests/test-rebase-obsolete.t
> +++ b/tests/test-rebase-obsolete.t
> @@ -413,26 +413,26 @@ Test that rewriting leaving instability
> o 0:cd010b8cd998 A
>
>
>
> Test multiple root handling
> ------------------------------------
>
> $ hg rebase --dest 4 --rev '7+11+9'
> + rebasing 9:cf44d2f5a9f4 "D"
> rebasing 7:02de42196ebe "H"
> - rebasing 9:cf44d2f5a9f4 "D"
> not rebasing ignored 10:7c6027df6a99 "B"
> rebasing 11:0d8f238b634c "C" (tip)
> $ hg log -G
> o 14:1e8370e38cca C
> |
> - | o 13:102b4c1d889b D
> - | |
> - @ | 12:bfe264faf697 H
> + @ 13:bfe264faf697 H
> + |
> + | o 12:102b4c1d889b D
> |/
> | o 10:7c6027df6a99 B
> | |
> | x 7:02de42196ebe H
> | |
> +---o 6:eea13746799a G
> | |/
> | o 5:24b6387c8c8c F
> diff --git a/tests/test-rebase-scenario-global.t b/tests/test-rebase-scenario-global.t
> --- a/tests/test-rebase-scenario-global.t
> +++ b/tests/test-rebase-scenario-global.t
> @@ -756,16 +756,79 @@ Test that rebase is not confused by $CWD
> $ touch subfile
> $ hg add subfile
> $ hg commit -m 'second source with subdir'
> $ hg rebase -b . -d 1 --traceback
> rebasing 2:779a07b1b7a0 "first source commit"
> rebasing 3:a7d6f3a00bf3 "second source with subdir" (tip)
> saved backup bundle to $TESTTMP/cwd-vanish/.hg/strip-backup/779a07b1b7a0-853e0073-backup.hg (glob)
>
> +Test that rebase is done in topo order (issue5370)
> +
> + $ cd ..
> + $ hg init order
> + $ cd order
> + $ touch a && hg add a && hg ci -m A
> + $ touch b && hg add b && hg ci -m B
> + $ touch c && hg add c && hg ci -m C
> + $ hg up 1
> + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
> + $ touch d && hg add d && hg ci -m D
> + created new head
> + $ hg up 2
> + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
> + $ touch e && hg add e && hg ci -m E
> + $ hg up 3
> + 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
> + $ touch f && hg add f && hg ci -m F
> + $ hg up 0
> + 0 files updated, 0 files merged, 3 files removed, 0 files unresolved
> + $ touch g && hg add g && hg ci -m G
> + created new head
> +
> + $ hg tglog
> + @ 6: 'G'
> + |
> + | o 5: 'F'
> + | |
> + | | o 4: 'E'
> + | | |
> + | o | 3: 'D'
> + | | |
> + | | o 2: 'C'
> + | |/
> + | o 1: 'B'
> + |/
> + o 0: 'A'
> +
> +
> + $ hg rebase -s 1 -d 6
> + rebasing 1:76035bbd54bd "B"
> + rebasing 2:d84f5cfaaf14 "C"
> + rebasing 4:82ae8dc7a9b7 "E"
> + rebasing 3:ab709c9f7171 "D"
> + rebasing 5:412b391de760 "F"
> + saved backup bundle to $TESTTMP/cwd-vanish/order/.hg/strip-backup/76035bbd54bd-e341bc99-backup.hg (glob)
> +
> + $ hg tglog
> + o 6: 'F'
> + |
> + o 5: 'D'
> + |
> + | o 4: 'E'
> + | |
> + | o 3: 'C'
> + |/
> + o 2: 'B'
> + |
> + @ 1: 'G'
> + |
> + o 0: 'A'
> +
> +
> Test experimental revset
> ========================
>
> $ cd ..
>
> Make the repo a bit more interresting
>
> $ hg up 1
--
Pierre-Yves David
More information about the Mercurial-devel
mailing list