Mercurial > hg
annotate hgext/split.py @ 51671:6fc31e7bd5db
typing: add some type hints for bundle2 capabilities
Somewhere between hg 3dbc7b1ecaba and hg 8e3f6b5bf720, pytype determined the
signature of `bundle20.capabilities` changed from `Dict[bytes, Tuple[bytes]]` to
`Dict[bytes, Union[List[bytes], Tuple[bytes]]]`.
First, I did try to simply be explicit about the previously inferred type, but
it does seem to mix and match list/tuple now (e.g. in `writenewbundle()`). I
tried changing the new list usage to tuple, but a couple of things complained,
(and I think lists of one item are a little more clear to read anyway). So then
I typed the dict value as `Sequence[bytes]`, which worked fine. But there's
also a module level `capabilities` field, and when that's typed, pytype
complains about `Sequence[bytes]` lacking `__add__`[1]. So I gave up, and just
assigned it the type it wanted, with an alias. If somebody feels motivated to
make the type consistent, it's simple enough to change the alias.
The mutable default value to the constructor was removed to appease PyCharm's
type checking on the field. (I didn't bother running the code through pytype
prior to changing it, because we've previously made an effort to remove this
pattern anyway.)
I'm not sure why `getrepocaps()` has a default value for `role` that apparently
raises an exception. It's just flagged for now so this series can land without
risking additional problems.
[1] https://foss.heptapod.net/mercurial/mercurial-devel/-/jobs/2466903
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Wed, 10 Jul 2024 17:09:34 -0400 |
parents | b5066b2b40f2 |
children | f4733654f144 |
rev | line source |
---|---|
35455 | 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:
46758
diff
changeset
|
14 nullrev, |
35455 | 15 short, |
16 ) | |
17 | |
18 from mercurial import ( | |
19 bookmarks, | |
20 cmdutil, | |
21 commands, | |
22 error, | |
23 hg, | |
48116
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, |
35455 | 25 registrar, |
26 revsetlang, | |
43935
2349a60f33db
split: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43641
diff
changeset
|
27 rewriteutil, |
35455 | 28 scmutil, |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
29 util, |
35455 | 30 ) |
31 | |
32 # allow people to use split without explicitly enabling rebase extension | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
33 from . import rebase |
35455 | 34 |
35 cmdtable = {} | |
36 command = registrar.command(cmdtable) | |
37 | |
38 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for | |
39 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should | |
40 # be specifying the version(s) of Mercurial they are tested with, or | |
41 # leave the attribute unspecified. | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
42 testedwith = b'ships-with-hg-core' |
35455 | 43 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
44 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
45 @command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
46 b'split', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
47 [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
48 (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
|
49 (b'', b'rebase', True, _(b'rebase descendants after split')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
50 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
51 + cmdutil.commitopts2, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
52 _(b'hg split [--no-rebase] [[-r] REV]'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
53 helpcategory=command.CATEGORY_CHANGE_MANAGEMENT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
54 helpbasic=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
55 ) |
35455 | 56 def split(ui, repo, *revs, **opts): |
57 """split a changeset into smaller ones | |
58 | |
59 Repeatedly prompt changes and commit message for new changesets until there | |
60 is nothing left in the original changeset. | |
61 | |
62 If --rev was not given, split the working directory parent. | |
63 | |
64 By default, rebase connected non-obsoleted descendants onto the new | |
65 changeset. Use --no-rebase to avoid the rebase. | |
66 """ | |
67 revlist = [] | |
50884
b5066b2b40f2
split: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
49961
diff
changeset
|
68 if opts.get('rev'): |
b5066b2b40f2
split: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
49961
diff
changeset
|
69 revlist.append(opts.get('rev')) |
35455 | 70 revlist.extend(revs) |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
71 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:
45876
diff
changeset
|
72 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:
45876
diff
changeset
|
73 # 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:
45876
diff
changeset
|
74 # 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:
45876
diff
changeset
|
75 with util.acceptintervention(tr): |
48116
5ced12cfa41b
errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
46924
diff
changeset
|
76 revs = logcmdutil.revrange(repo, revlist or [b'.']) |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
77 if len(revs) > 1: |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
78 raise error.InputError(_(b'cannot split multiple revisions')) |
35455 | 79 |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
80 rev = revs.first() |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46758
diff
changeset
|
81 # Handle nullrev specially here (instead of leaving for precheck() |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
82 # 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:
46758
diff
changeset
|
83 if rev is None or rev == nullrev: |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
84 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:
45876
diff
changeset
|
85 return 1 |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46758
diff
changeset
|
86 ctx = repo[rev] |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
87 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:
45876
diff
changeset
|
88 raise error.InputError(_(b'cannot split working directory')) |
35455 | 89 |
50884
b5066b2b40f2
split: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
49961
diff
changeset
|
90 if opts.get('rebase'): |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
91 # 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:
45876
diff
changeset
|
92 # 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:
45876
diff
changeset
|
93 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:
45876
diff
changeset
|
94 torebase = list( |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
95 repo.revs( |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
96 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:
45876
diff
changeset
|
97 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
98 ) |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
99 else: |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
100 torebase = [] |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
101 rewriteutil.precheck(repo, [rev] + torebase, b'split') |
35455 | 102 |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
103 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:
45876
diff
changeset
|
104 raise error.InputError(_(b'cannot split a merge changeset')) |
35455 | 105 |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
106 cmdutil.bailifchanged(repo) |
35455 | 107 |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
108 # 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:
45876
diff
changeset
|
109 # unintentionally |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
110 bname = repo._activebookmark |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
111 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:
45876
diff
changeset
|
112 bookmarks.deactivate(repo) |
35455 | 113 |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
114 wnode = repo[b'.'].node() |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
115 top = None |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
116 try: |
50884
b5066b2b40f2
split: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
49961
diff
changeset
|
117 top = dosplit(ui, repo, tr, ctx, **opts) |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
118 finally: |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
119 # 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:
45876
diff
changeset
|
120 # 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:
45876
diff
changeset
|
121 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:
45876
diff
changeset
|
122 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:
45876
diff
changeset
|
123 if bname: |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
124 bookmarks.activate(repo, bname) |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
125 if torebase and top: |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
126 dorebase(ui, repo, torebase, top) |
35455 | 127 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
128 |
50884
b5066b2b40f2
split: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
49961
diff
changeset
|
129 def dosplit(ui, repo, tr, ctx, **opts): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
130 committed = [] # [ctx] |
35455 | 131 |
132 # Set working parent to ctx.p1(), and keep working copy as ctx's content | |
41966
42e2c7c52e1b
split: use the new movedirstate() we now have in scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
40295
diff
changeset
|
133 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
|
134 hg.clean(repo, ctx.node(), show_stats=False) |
49961
7a8bfc05b691
dirstate: rename parentchange to changing_parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49960
diff
changeset
|
135 with repo.dirstate.changing_parents(repo): |
41966
42e2c7c52e1b
split: use the new movedirstate() we now have in scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
40295
diff
changeset
|
136 scmutil.movedirstate(repo, ctx.p1()) |
35455 | 137 |
138 # Any modified, added, removed, deleted result means split is incomplete | |
43641
705738def50c
split: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
139 def incomplete(repo): |
705738def50c
split: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
140 st = repo.status() |
705738def50c
split: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
141 return any((st.modified, st.added, st.removed, st.deleted)) |
35455 | 142 |
143 # Main split loop | |
144 while incomplete(repo): | |
145 if committed: | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
146 header = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
147 b'HG: Splitting %s. So far it has been split into:\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
148 ) % short(ctx.node()) |
45856
8357e0e81bb7
split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents:
45773
diff
changeset
|
149 # 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:
45773
diff
changeset
|
150 # 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:
45773
diff
changeset
|
151 with ui.configoverride( |
8357e0e81bb7
split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents:
45773
diff
changeset
|
152 {(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:
45773
diff
changeset
|
153 ): |
8357e0e81bb7
split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents:
45773
diff
changeset
|
154 for c in committed: |
8357e0e81bb7
split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents:
45773
diff
changeset
|
155 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:
45773
diff
changeset
|
156 header += _(b'HG: - %s\n') % summary |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
157 header += _( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43077
diff
changeset
|
158 b'HG: Write commit message for the next split changeset.\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
159 ) |
35455 | 160 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
161 header = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
162 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
|
163 b'first split changeset.\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
164 ) % short(ctx.node()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
165 opts.update( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
166 { |
50884
b5066b2b40f2
split: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
49961
diff
changeset
|
167 'edit': True, |
b5066b2b40f2
split: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
49961
diff
changeset
|
168 'interactive': True, |
b5066b2b40f2
split: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
49961
diff
changeset
|
169 'message': header + ctx.description(), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
170 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
171 ) |
46923
8ee1ac083ee7
split: fix issue with empty splits adjusting phases
Kyle Lippincott <spectral@google.com>
parents:
46843
diff
changeset
|
172 origctx = repo[b'.'] |
50884
b5066b2b40f2
split: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
49961
diff
changeset
|
173 commands.commit(ui, repo, **opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
174 newctx = repo[b'.'] |
46923
8ee1ac083ee7
split: fix issue with empty splits adjusting phases
Kyle Lippincott <spectral@google.com>
parents:
46843
diff
changeset
|
175 # 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
|
176 # everything). |
8ee1ac083ee7
split: fix issue with empty splits adjusting phases
Kyle Lippincott <spectral@google.com>
parents:
46843
diff
changeset
|
177 if origctx.node() != newctx.node(): |
8ee1ac083ee7
split: fix issue with empty splits adjusting phases
Kyle Lippincott <spectral@google.com>
parents:
46843
diff
changeset
|
178 committed.append(newctx) |
35455 | 179 |
180 if not committed: | |
45876
568c05d8f3d2
errors: raise InputError in `hg split`
Martin von Zweigbergk <martinvonz@google.com>
parents:
45856
diff
changeset
|
181 raise error.InputError(_(b'cannot split an empty revision')) |
35455 | 182 |
46924
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
183 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
|
184 # 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
|
185 # exists |
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
186 scmutil.cleanupnodes( |
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
187 repo, |
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
188 {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
|
189 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
|
190 fixphase=True, |
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
191 ) |
35455 | 192 |
193 return committed[-1] | |
194 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
195 |
36408
83bade6206d4
split: use ctx.rev() instead of %d % ctx
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36400
diff
changeset
|
196 def dorebase(ui, repo, src, destctx): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
197 rebase.rebase( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
198 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
199 repo, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
200 rev=[revsetlang.formatspec(b'%ld', src)], |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
201 dest=revsetlang.formatspec(b'%d', destctx.rev()), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
202 ) |