Mercurial > hg
annotate hgext/split.py @ 50390:d68462736492
bundle: introduce a "v3" spec
This is a small update from "v2", we use the freshly out of experimental
changelog version "03' format (alignment with bundle version is a coincidence) and we
now bundle phases by default.
We shall use v3 as the default bundle type later, when changegroup version '03'
is a bit more established
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 08 Mar 2023 15:23:22 +0100 |
parents | 7a8bfc05b691 |
children | b5066b2b40f2 |
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, |
36400
7b86aa31b004
py3: fix handling of keyword arguments at more places
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35455
diff
changeset
|
25 pycompat, |
35455 | 26 registrar, |
27 revsetlang, | |
43935
2349a60f33db
split: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43641
diff
changeset
|
28 rewriteutil, |
35455 | 29 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
|
30 util, |
35455 | 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:
41966
diff
changeset
|
34 from . import rebase |
35455 | 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' |
35455 | 44 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
45 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
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:
41966
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:
41966
diff
changeset
|
51 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
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:
41966
diff
changeset
|
54 helpcategory=command.CATEGORY_CHANGE_MANAGEMENT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
55 helpbasic=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
56 ) |
35455 | 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 """ | |
38069
5ba0cf22e4d0
py3: fix kwargs handling in hgext/split.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36408
diff
changeset
|
68 opts = pycompat.byteskwargs(opts) |
35455 | 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')) |
35455 | 72 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
|
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:
45876
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:
45876
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:
45876
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:
45876
diff
changeset
|
77 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
|
78 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
|
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:
45876
diff
changeset
|
80 raise error.InputError(_(b'cannot split multiple revisions')) |
35455 | 81 |
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 rev = revs.first() |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46758
diff
changeset
|
83 # 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
|
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:
46758
diff
changeset
|
85 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
|
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:
45876
diff
changeset
|
87 return 1 |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46758
diff
changeset
|
88 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
|
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:
45876
diff
changeset
|
90 raise error.InputError(_(b'cannot split working directory')) |
35455 | 91 |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
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:
45876
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:
45876
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:
45876
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:
45876
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:
45876
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:
45876
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:
45876
diff
changeset
|
99 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
100 ) |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
101 else: |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
102 torebase = [] |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
diff
changeset
|
103 rewriteutil.precheck(repo, [rev] + torebase, b'split') |
35455 | 104 |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
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:
45876
diff
changeset
|
106 raise error.InputError(_(b'cannot split a merge changeset')) |
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 cmdutil.bailifchanged(repo) |
35455 | 109 |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
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:
45876
diff
changeset
|
111 # unintentionally |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
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:
45876
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:
45876
diff
changeset
|
114 bookmarks.deactivate(repo) |
35455 | 115 |
46758
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
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:
45876
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:
45876
diff
changeset
|
118 try: |
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 = 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:
45876
diff
changeset
|
120 finally: |
7f6c002d7c0a
split: close transaction in the unlikely event of a conflict while rebasing
Martin von Zweigbergk <martinvonz@google.com>
parents:
45876
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:
45876
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:
45876
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:
45876
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:
45876
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:
45876
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:
45876
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:
45876
diff
changeset
|
128 dorebase(ui, repo, torebase, top) |
35455 | 129 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
130 |
35455 | 131 def dosplit(ui, repo, tr, ctx, opts): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
132 committed = [] # [ctx] |
35455 | 133 |
134 # 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
|
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) |
49961
7a8bfc05b691
dirstate: rename parentchange to changing_parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49960
diff
changeset
|
137 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
|
138 scmutil.movedirstate(repo, ctx.p1()) |
35455 | 139 |
140 # 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
|
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)) |
35455 | 144 |
145 # Main split loop | |
146 while incomplete(repo): | |
147 if committed: | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
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:
41966
diff
changeset
|
150 ) % 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
|
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:
45773
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:
45773
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:
45773
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:
45773
diff
changeset
|
155 ): |
8357e0e81bb7
split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents:
45773
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:
45773
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:
45773
diff
changeset
|
158 header += _(b'HG: - %s\n') % summary |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
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:
41966
diff
changeset
|
161 ) |
35455 | 162 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
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:
41966
diff
changeset
|
166 ) % short(ctx.node()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
167 opts.update( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
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:
41966
diff
changeset
|
172 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
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'.'] |
36400
7b86aa31b004
py3: fix handling of keyword arguments at more places
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35455
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) |
35455 | 181 |
182 if not committed: | |
45876
568c05d8f3d2
errors: raise InputError in `hg split`
Martin von Zweigbergk <martinvonz@google.com>
parents:
45856
diff
changeset
|
183 raise error.InputError(_(b'cannot split an empty revision')) |
35455 | 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 ) |
35455 | 194 |
195 return committed[-1] | |
196 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
197 |
36408
83bade6206d4
split: use ctx.rev() instead of %d % ctx
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36400
diff
changeset
|
198 def dorebase(ui, repo, src, destctx): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
199 rebase.rebase( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
diff
changeset
|
200 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41966
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:
41966
diff
changeset
|
204 ) |