Mercurial > hg-stable
annotate hgext/split.py @ 50667:32837c7e2e4b
revlog: add a `get_revlog` method
This might seen weird, but I actually thing we have been needing this for a
long time. There is multiple object that kind of pretend being revlogs while
actually wrapping the actual revlog. Since multiple code needs to access the
actuel revlog. See documentation for more details.
Expect cleanup of various places one the current series is done.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sun, 28 May 2023 05:23:46 +0200 |
parents | 7a8bfc05b691 |
children | b5066b2b40f2 |
rev | line source |
---|---|
35459 | 1 # split.py - split a changeset into smaller ones |
2 # | |
3 # Copyright 2015 Laurent Charignon <lcharignon@fb.com> | |
4 # Copyright 2017 Facebook, Inc. | |
5 # | |
6 # This software may be used and distributed according to the terms of the | |
7 # GNU General Public License version 2 or any later version. | |
8 """command to split a changeset into smaller ones (EXPERIMENTAL)""" | |
9 | |
10 | |
11 from mercurial.i18n import _ | |
12 | |
13 from mercurial.node import ( | |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46771
diff
changeset
|
14 nullrev, |
35459 | 15 short, |
16 ) | |
17 | |
18 from mercurial import ( | |
19 bookmarks, | |
20 cmdutil, | |
21 commands, | |
22 error, | |
23 hg, | |
48128
5ced12cfa41b
errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
46924
diff
changeset
|
24 logcmdutil, |
36430
7b86aa31b004
py3: fix handling of keyword arguments at more places
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35459
diff
changeset
|
25 pycompat, |
35459 | 26 registrar, |
27 revsetlang, | |
43941
2349a60f33db
split: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43685
diff
changeset
|
28 rewriteutil, |
35459 | 29 scmutil, |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
30 util, |
35459 | 31 ) |
32 | |
33 # allow people to use split without explicitly enabling rebase extension | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
34 from . import rebase |
35459 | 35 |
36 cmdtable = {} | |
37 command = registrar.command(cmdtable) | |
38 | |
39 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for | |
40 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should | |
41 # be specifying the version(s) of Mercurial they are tested with, or | |
42 # leave the attribute unspecified. | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
43 testedwith = b'ships-with-hg-core' |
35459 | 44 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
45 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
46 @command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
47 b'split', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
48 [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
49 (b'r', b'rev', b'', _(b"revision to split"), _(b'REV')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
50 (b'', b'rebase', True, _(b'rebase descendants after split')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
51 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
52 + cmdutil.commitopts2, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
53 _(b'hg split [--no-rebase] [[-r] REV]'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
54 helpcategory=command.CATEGORY_CHANGE_MANAGEMENT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
55 helpbasic=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
56 ) |
35459 | 57 def split(ui, repo, *revs, **opts): |
58 """split a changeset into smaller ones | |
59 | |
60 Repeatedly prompt changes and commit message for new changesets until there | |
61 is nothing left in the original changeset. | |
62 | |
63 If --rev was not given, split the working directory parent. | |
64 | |
65 By default, rebase connected non-obsoleted descendants onto the new | |
66 changeset. Use --no-rebase to avoid the rebase. | |
67 """ | |
38102
5ba0cf22e4d0
py3: fix kwargs handling in hgext/split.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36438
diff
changeset
|
68 opts = pycompat.byteskwargs(opts) |
35459 | 69 revlist = [] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
70 if opts.get(b'rev'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
71 revlist.append(opts.get(b'rev')) |
35459 | 72 revlist.extend(revs) |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
73 with repo.wlock(), repo.lock(): |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
74 tr = repo.transaction(b'split') |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
75 # If the rebase somehow runs into conflicts, make sure |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
76 # we close the transaction so the user can continue it. |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
77 with util.acceptintervention(tr): |
48128
5ced12cfa41b
errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
46924
diff
changeset
|
78 revs = logcmdutil.revrange(repo, revlist or [b'.']) |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
79 if len(revs) > 1: |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
80 raise error.InputError(_(b'cannot split multiple revisions')) |
35459 | 81 |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
82 rev = revs.first() |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46771
diff
changeset
|
83 # Handle nullrev specially here (instead of leaving for precheck() |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
84 # below) so we get a nicer message and error code. |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46771
diff
changeset
|
85 if rev is None or rev == nullrev: |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
86 ui.status(_(b'nothing to split\n')) |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
87 return 1 |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46771
diff
changeset
|
88 ctx = repo[rev] |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
89 if ctx.node() is None: |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
90 raise error.InputError(_(b'cannot split working directory')) |
35459 | 91 |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
92 if opts.get(b'rebase'): |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
93 # Skip obsoleted descendants and their descendants so the rebase |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
94 # won't cause conflicts for sure. |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
95 descendants = list(repo.revs(b'(%d::) - (%d)', rev, rev)) |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
96 torebase = list( |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
97 repo.revs( |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
98 b'%ld - (%ld & obsolete())::', descendants, descendants |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
99 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
100 ) |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
101 else: |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
102 torebase = [] |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
103 rewriteutil.precheck(repo, [rev] + torebase, b'split') |
35459 | 104 |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
105 if len(ctx.parents()) > 1: |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
106 raise error.InputError(_(b'cannot split a merge changeset')) |
35459 | 107 |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
108 cmdutil.bailifchanged(repo) |
35459 | 109 |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
110 # Deactivate bookmark temporarily so it won't get moved |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
111 # unintentionally |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
112 bname = repo._activebookmark |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
113 if bname and repo._bookmarks[bname] != ctx.node(): |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
114 bookmarks.deactivate(repo) |
35459 | 115 |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
116 wnode = repo[b'.'].node() |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
117 top = None |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
118 try: |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
119 top = dosplit(ui, repo, tr, ctx, opts) |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
120 finally: |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
121 # top is None: split failed, need update --clean recovery. |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
122 # wnode == ctx.node(): wnode split, no need to update. |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
123 if top is None or wnode != ctx.node(): |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
124 hg.clean(repo, wnode, show_stats=False) |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
125 if bname: |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
126 bookmarks.activate(repo, bname) |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
127 if torebase and top: |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
128 dorebase(ui, repo, torebase, top) |
35459 | 129 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
130 |
35459 | 131 def dosplit(ui, repo, tr, ctx, opts): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
132 committed = [] # [ctx] |
35459 | 133 |
134 # Set working parent to ctx.p1(), and keep working copy as ctx's content | |
41971
42e2c7c52e1b
split: use the new movedirstate() we now have in scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
40295
diff
changeset
|
135 if ctx.node() != repo.dirstate.p1(): |
42e2c7c52e1b
split: use the new movedirstate() we now have in scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
40295
diff
changeset
|
136 hg.clean(repo, ctx.node(), show_stats=False) |
50023
7a8bfc05b691
dirstate: rename parentchange to changing_parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50022
diff
changeset
|
137 with repo.dirstate.changing_parents(repo): |
41971
42e2c7c52e1b
split: use the new movedirstate() we now have in scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
40295
diff
changeset
|
138 scmutil.movedirstate(repo, ctx.p1()) |
35459 | 139 |
140 # Any modified, added, removed, deleted result means split is incomplete | |
43685
705738def50c
split: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
141 def incomplete(repo): |
705738def50c
split: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
142 st = repo.status() |
705738def50c
split: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
143 return any((st.modified, st.added, st.removed, st.deleted)) |
35459 | 144 |
145 # Main split loop | |
146 while incomplete(repo): | |
147 if committed: | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
148 header = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
149 b'HG: Splitting %s. So far it has been split into:\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
150 ) % short(ctx.node()) |
45871
8357e0e81bb7
split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents:
45796
diff
changeset
|
151 # We don't want color codes in the commit message template, so |
8357e0e81bb7
split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents:
45796
diff
changeset
|
152 # disable the label() template function while we render it. |
8357e0e81bb7
split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents:
45796
diff
changeset
|
153 with ui.configoverride( |
8357e0e81bb7
split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents:
45796
diff
changeset
|
154 {(b'templatealias', b'label(l,x)'): b"x"}, b'split' |
8357e0e81bb7
split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents:
45796
diff
changeset
|
155 ): |
8357e0e81bb7
split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents:
45796
diff
changeset
|
156 for c in committed: |
8357e0e81bb7
split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents:
45796
diff
changeset
|
157 summary = cmdutil.format_changeset_summary(ui, c, b'split') |
8357e0e81bb7
split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents:
45796
diff
changeset
|
158 header += _(b'HG: - %s\n') % summary |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
159 header += _( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43077
diff
changeset
|
160 b'HG: Write commit message for the next split changeset.\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
161 ) |
35459 | 162 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
163 header = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
164 b'HG: Splitting %s. Write commit message for the ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
165 b'first split changeset.\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
166 ) % short(ctx.node()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
167 opts.update( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
168 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
169 b'edit': True, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
170 b'interactive': True, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
171 b'message': header + ctx.description(), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
172 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
173 ) |
46923
8ee1ac083ee7
split: fix issue with empty splits adjusting phases
Kyle Lippincott <spectral@google.com>
parents:
46843
diff
changeset
|
174 origctx = repo[b'.'] |
36430
7b86aa31b004
py3: fix handling of keyword arguments at more places
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35459
diff
changeset
|
175 commands.commit(ui, repo, **pycompat.strkwargs(opts)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
176 newctx = repo[b'.'] |
46923
8ee1ac083ee7
split: fix issue with empty splits adjusting phases
Kyle Lippincott <spectral@google.com>
parents:
46843
diff
changeset
|
177 # Ensure user didn't do a "no-op" split (such as deselecting |
8ee1ac083ee7
split: fix issue with empty splits adjusting phases
Kyle Lippincott <spectral@google.com>
parents:
46843
diff
changeset
|
178 # everything). |
8ee1ac083ee7
split: fix issue with empty splits adjusting phases
Kyle Lippincott <spectral@google.com>
parents:
46843
diff
changeset
|
179 if origctx.node() != newctx.node(): |
8ee1ac083ee7
split: fix issue with empty splits adjusting phases
Kyle Lippincott <spectral@google.com>
parents:
46843
diff
changeset
|
180 committed.append(newctx) |
35459 | 181 |
182 if not committed: | |
45891
568c05d8f3d2
errors: raise InputError in `hg split`
Martin von Zweigbergk <martinvonz@google.com>
parents:
45871
diff
changeset
|
183 raise error.InputError(_(b'cannot split an empty revision')) |
35459 | 184 |
46924
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
185 if len(committed) != 1 or committed[0].node() != ctx.node(): |
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
186 # Ensure we don't strip a node if we produce the same commit as already |
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
187 # exists |
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
188 scmutil.cleanupnodes( |
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
189 repo, |
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
190 {ctx.node(): [c.node() for c in committed]}, |
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
191 operation=b'split', |
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
192 fixphase=True, |
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
193 ) |
35459 | 194 |
195 return committed[-1] | |
196 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
197 |
36438
83bade6206d4
split: use ctx.rev() instead of %d % ctx
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36430
diff
changeset
|
198 def dorebase(ui, repo, src, destctx): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
199 rebase.rebase( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
200 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
201 repo, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
202 rev=[revsetlang.formatspec(b'%ld', src)], |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
203 dest=revsetlang.formatspec(b'%d', destctx.rev()), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
204 ) |