Mercurial > public > mercurial-scm > hg-stable
annotate hgext/split.py @ 48578:28f0092ec89f
exchange: add fast path for subrepo check on push
Try to check if .hgsub and .hgsubstate exist at all before looking
for them in every changeset to be pushed. The latter can be quite
expensive for large repositories and the existance check is almost free.
Differential Revision: https://phab.mercurial-scm.org/D11956
author | Joerg Sonnenberger <joerg@bec.de> |
---|---|
date | Mon, 03 Jan 2022 01:09:56 +0100 |
parents | 5ced12cfa41b |
children | 6000f5b25c9b |
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 from __future__ import absolute_import | |
11 | |
12 from mercurial.i18n import _ | |
13 | |
14 from mercurial.node import ( | |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46771
diff
changeset
|
15 nullrev, |
35459 | 16 short, |
17 ) | |
18 | |
19 from mercurial import ( | |
20 bookmarks, | |
21 cmdutil, | |
22 commands, | |
23 error, | |
24 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
|
25 logcmdutil, |
36430
7b86aa31b004
py3: fix handling of keyword arguments at more places
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35459
diff
changeset
|
26 pycompat, |
35459 | 27 registrar, |
28 revsetlang, | |
43941
2349a60f33db
split: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43685
diff
changeset
|
29 rewriteutil, |
35459 | 30 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
|
31 util, |
35459 | 32 ) |
33 | |
34 # 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
|
35 from . import rebase |
35459 | 36 |
37 cmdtable = {} | |
38 command = registrar.command(cmdtable) | |
39 | |
40 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for | |
41 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should | |
42 # be specifying the version(s) of Mercurial they are tested with, or | |
43 # leave the attribute unspecified. | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
44 testedwith = b'ships-with-hg-core' |
35459 | 45 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
46 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
47 @command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
48 b'split', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
49 [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
50 (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
|
51 (b'', b'rebase', True, _(b'rebase descendants after split')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
52 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
53 + cmdutil.commitopts2, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
54 _(b'hg split [--no-rebase] [[-r] REV]'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
55 helpcategory=command.CATEGORY_CHANGE_MANAGEMENT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
56 helpbasic=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
57 ) |
35459 | 58 def split(ui, repo, *revs, **opts): |
59 """split a changeset into smaller ones | |
60 | |
61 Repeatedly prompt changes and commit message for new changesets until there | |
62 is nothing left in the original changeset. | |
63 | |
64 If --rev was not given, split the working directory parent. | |
65 | |
66 By default, rebase connected non-obsoleted descendants onto the new | |
67 changeset. Use --no-rebase to avoid the rebase. | |
68 """ | |
38102
5ba0cf22e4d0
py3: fix kwargs handling in hgext/split.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36438
diff
changeset
|
69 opts = pycompat.byteskwargs(opts) |
35459 | 70 revlist = [] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
71 if opts.get(b'rev'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
72 revlist.append(opts.get(b'rev')) |
35459 | 73 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
|
74 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
|
75 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
|
76 # 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
|
77 # 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
|
78 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
|
79 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
|
80 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
|
81 raise error.InputError(_(b'cannot split multiple revisions')) |
35459 | 82 |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
83 rev = revs.first() |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46771
diff
changeset
|
84 # 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
|
85 # 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
|
86 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
|
87 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
|
88 return 1 |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46771
diff
changeset
|
89 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
|
90 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
|
91 raise error.InputError(_(b'cannot split working directory')) |
35459 | 92 |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
93 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
|
94 # 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
|
95 # 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
|
96 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
|
97 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
|
98 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
|
99 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
|
100 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
101 ) |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
102 else: |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
103 torebase = [] |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
104 rewriteutil.precheck(repo, [rev] + torebase, b'split') |
35459 | 105 |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
106 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
|
107 raise error.InputError(_(b'cannot split a merge changeset')) |
35459 | 108 |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
109 cmdutil.bailifchanged(repo) |
35459 | 110 |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
111 # 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
|
112 # unintentionally |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
113 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
|
114 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
|
115 bookmarks.deactivate(repo) |
35459 | 116 |
46771
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
117 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
|
118 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
|
119 try: |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
120 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
|
121 finally: |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45891
diff
changeset
|
122 # 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
|
123 # 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
|
124 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
|
125 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
|
126 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
|
127 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
|
128 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
|
129 dorebase(ui, repo, torebase, top) |
35459 | 130 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
131 |
35459 | 132 def dosplit(ui, repo, tr, ctx, opts): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
133 committed = [] # [ctx] |
35459 | 134 |
135 # 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
|
136 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
|
137 hg.clean(repo, ctx.node(), show_stats=False) |
42e2c7c52e1b
split: use the new movedirstate() we now have in scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
40295
diff
changeset
|
138 with repo.dirstate.parentchange(): |
42e2c7c52e1b
split: use the new movedirstate() we now have in scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
40295
diff
changeset
|
139 scmutil.movedirstate(repo, ctx.p1()) |
35459 | 140 |
141 # 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
|
142 def incomplete(repo): |
705738def50c
split: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
143 st = repo.status() |
705738def50c
split: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
144 return any((st.modified, st.added, st.removed, st.deleted)) |
35459 | 145 |
146 # Main split loop | |
147 while incomplete(repo): | |
148 if committed: | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
149 header = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
150 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
|
151 ) % 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
|
152 # 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
|
153 # 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
|
154 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
|
155 {(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
|
156 ): |
8357e0e81bb7
split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents:
45796
diff
changeset
|
157 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
|
158 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
|
159 header += _(b'HG: - %s\n') % summary |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
160 header += _( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43077
diff
changeset
|
161 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
|
162 ) |
35459 | 163 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
164 header = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
165 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
|
166 b'first split changeset.\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
167 ) % short(ctx.node()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
168 opts.update( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
169 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
170 b'edit': True, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
171 b'interactive': True, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
172 b'message': header + ctx.description(), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
173 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
174 ) |
46923
8ee1ac083ee7
split: fix issue with empty splits adjusting phases
Kyle Lippincott <spectral@google.com>
parents:
46843
diff
changeset
|
175 origctx = repo[b'.'] |
36430
7b86aa31b004
py3: fix handling of keyword arguments at more places
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35459
diff
changeset
|
176 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
|
177 newctx = repo[b'.'] |
46923
8ee1ac083ee7
split: fix issue with empty splits adjusting phases
Kyle Lippincott <spectral@google.com>
parents:
46843
diff
changeset
|
178 # 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
|
179 # everything). |
8ee1ac083ee7
split: fix issue with empty splits adjusting phases
Kyle Lippincott <spectral@google.com>
parents:
46843
diff
changeset
|
180 if origctx.node() != newctx.node(): |
8ee1ac083ee7
split: fix issue with empty splits adjusting phases
Kyle Lippincott <spectral@google.com>
parents:
46843
diff
changeset
|
181 committed.append(newctx) |
35459 | 182 |
183 if not committed: | |
45891
568c05d8f3d2
errors: raise InputError in `hg split`
Martin von Zweigbergk <martinvonz@google.com>
parents:
45871
diff
changeset
|
184 raise error.InputError(_(b'cannot split an empty revision')) |
35459 | 185 |
46924
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
186 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
|
187 # 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
|
188 # exists |
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
189 scmutil.cleanupnodes( |
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
190 repo, |
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
191 {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
|
192 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
|
193 fixphase=True, |
ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Kyle Lippincott <spectral@google.com>
parents:
46923
diff
changeset
|
194 ) |
35459 | 195 |
196 return committed[-1] | |
197 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
198 |
36438
83bade6206d4
split: use ctx.rev() instead of %d % ctx
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36430
diff
changeset
|
199 def dorebase(ui, repo, src, destctx): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
200 rebase.rebase( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
201 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
202 repo, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
203 rev=[revsetlang.formatspec(b'%ld', src)], |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
204 dest=revsetlang.formatspec(b'%d', destctx.rev()), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41971
diff
changeset
|
205 ) |