##// END OF EJS Templates
histedit: add an experimental base action...
Mateusz Kwapich -
r27085:d50ff8f4 default
parent child Browse files
Show More
@@ -0,0 +1,273 b''
1 $ . "$TESTDIR/histedit-helpers.sh"
2
3 $ cat >> $HGRCPATH <<EOF
4 > [alias]
5 > tglog = log -G --template "{rev}:{node}:{phase} '{desc}'\n"
6 > [extensions]
7 > histedit=
8 > [experimental]
9 > histeditng=True
10 > EOF
11
12 Create repo a:
13
14 $ hg init a
15 $ cd a
16 $ hg unbundle "$TESTDIR/bundles/rebase.hg"
17 adding changesets
18 adding manifests
19 adding file changes
20 added 8 changesets with 7 changes to 7 files (+2 heads)
21 (run 'hg heads' to see heads, 'hg merge' to merge)
22 $ hg up tip
23 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
24
25 $ hg tglog
26 @ 7:02de42196ebee42ef284b6780a87cdc96e8eaab6:draft 'H'
27 |
28 | o 6:eea13746799a9e0bfd88f29d3c2e9dc9389f524f:draft 'G'
29 |/|
30 o | 5:24b6387c8c8cae37178880f3fa95ded3cb1cf785:draft 'F'
31 | |
32 | o 4:9520eea781bcca16c1e15acc0ba14335a0e8e5ba:draft 'E'
33 |/
34 | o 3:32af7686d403cf45b5d95f2d70cebea587ac806a:draft 'D'
35 | |
36 | o 2:5fddd98957c8a54a4d436dfe1da9d87f21a1b97b:draft 'C'
37 | |
38 | o 1:42ccdea3bb16d28e1848c95fe2e44c000f3f21b1:draft 'B'
39 |/
40 o 0:cd010b8cd998f3981a5a8115f94f8da4ab506089:draft 'A'
41
42
43
44 Go to D
45 $ hg update 3
46 3 files updated, 0 files merged, 2 files removed, 0 files unresolved
47 edit the history to rebase B onto H
48
49
50 Rebase B onto H
51 $ hg histedit 1 --commands - 2>&1 << EOF | fixbundle
52 > base 02de42196ebe
53 > pick 42ccdea3bb16 B
54 > pick 5fddd98957c8 C
55 > pick 32af7686d403 D
56 > EOF
57 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
58 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
59 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
60 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
61
62 $ hg tglog
63 @ 7:0937e82309df47d14176ee15e45dbec5fbdef340:draft 'D'
64 |
65 o 6:f778d1cbddac4ab679d9983c9bb92e4c5e09e7fa:draft 'C'
66 |
67 o 5:3d41b7cc708545206213a842f96d812d2e73d818:draft 'B'
68 |
69 o 4:02de42196ebee42ef284b6780a87cdc96e8eaab6:draft 'H'
70 |
71 | o 3:eea13746799a9e0bfd88f29d3c2e9dc9389f524f:draft 'G'
72 |/|
73 o | 2:24b6387c8c8cae37178880f3fa95ded3cb1cf785:draft 'F'
74 | |
75 | o 1:9520eea781bcca16c1e15acc0ba14335a0e8e5ba:draft 'E'
76 |/
77 o 0:cd010b8cd998f3981a5a8115f94f8da4ab506089:draft 'A'
78
79 Rebase back and drop something
80 $ hg histedit 5 --commands - 2>&1 << EOF | fixbundle
81 > base cd010b8cd998
82 > pick 3d41b7cc7085 B
83 > drop f778d1cbddac C
84 > pick 0937e82309df D
85 > EOF
86 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
87 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
88 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
89
90 $ hg tglog
91 @ 6:476cc3e4168da2d036b141f7f7dcff7f8e3fe846:draft 'D'
92 |
93 o 5:d273e35dcdf21a7eb305192ef2e362887cd0a6f8:draft 'B'
94 |
95 | o 4:02de42196ebee42ef284b6780a87cdc96e8eaab6:draft 'H'
96 | |
97 | | o 3:eea13746799a9e0bfd88f29d3c2e9dc9389f524f:draft 'G'
98 | |/|
99 | o | 2:24b6387c8c8cae37178880f3fa95ded3cb1cf785:draft 'F'
100 |/ /
101 | o 1:9520eea781bcca16c1e15acc0ba14335a0e8e5ba:draft 'E'
102 |/
103 o 0:cd010b8cd998f3981a5a8115f94f8da4ab506089:draft 'A'
104
105 Split stack
106 $ hg histedit 5 --commands - 2>&1 << EOF | fixbundle
107 > base cd010b8cd998
108 > pick d273e35dcdf2 B
109 > base cd010b8cd998
110 > pick 476cc3e4168d D
111 > EOF
112 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
113 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
114
115 $ hg tglog
116 @ 6:d7a6f907a822c4ce6f15662ae45a42aa46d3818a:draft 'D'
117 |
118 | o 5:d273e35dcdf21a7eb305192ef2e362887cd0a6f8:draft 'B'
119 |/
120 | o 4:02de42196ebee42ef284b6780a87cdc96e8eaab6:draft 'H'
121 | |
122 | | o 3:eea13746799a9e0bfd88f29d3c2e9dc9389f524f:draft 'G'
123 | |/|
124 | o | 2:24b6387c8c8cae37178880f3fa95ded3cb1cf785:draft 'F'
125 |/ /
126 | o 1:9520eea781bcca16c1e15acc0ba14335a0e8e5ba:draft 'E'
127 |/
128 o 0:cd010b8cd998f3981a5a8115f94f8da4ab506089:draft 'A'
129
130 Abort
131 $ echo x > B
132 $ hg add B
133 $ hg commit -m "X"
134 $ hg tglog
135 @ 7:591369deedfdcbf57471e894999a70d7f676186d:draft 'X'
136 |
137 o 6:d7a6f907a822c4ce6f15662ae45a42aa46d3818a:draft 'D'
138 |
139 | o 5:d273e35dcdf21a7eb305192ef2e362887cd0a6f8:draft 'B'
140 |/
141 | o 4:02de42196ebee42ef284b6780a87cdc96e8eaab6:draft 'H'
142 | |
143 | | o 3:eea13746799a9e0bfd88f29d3c2e9dc9389f524f:draft 'G'
144 | |/|
145 | o | 2:24b6387c8c8cae37178880f3fa95ded3cb1cf785:draft 'F'
146 |/ /
147 | o 1:9520eea781bcca16c1e15acc0ba14335a0e8e5ba:draft 'E'
148 |/
149 o 0:cd010b8cd998f3981a5a8115f94f8da4ab506089:draft 'A'
150
151 $ hg histedit 6 --commands - 2>&1 << EOF | fixbundle
152 > base d273e35dcdf2 B
153 > drop d7a6f907a822 D
154 > pick 591369deedfd X
155 > EOF
156 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
157 merging B
158 warning: conflicts while merging B! (edit, then use 'hg resolve --mark')
159 Fix up the change and run hg histedit --continue
160 $ hg histedit --abort | fixbundle
161 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
162 $ hg tglog
163 @ 7:591369deedfdcbf57471e894999a70d7f676186d:draft 'X'
164 |
165 o 6:d7a6f907a822c4ce6f15662ae45a42aa46d3818a:draft 'D'
166 |
167 | o 5:d273e35dcdf21a7eb305192ef2e362887cd0a6f8:draft 'B'
168 |/
169 | o 4:02de42196ebee42ef284b6780a87cdc96e8eaab6:draft 'H'
170 | |
171 | | o 3:eea13746799a9e0bfd88f29d3c2e9dc9389f524f:draft 'G'
172 | |/|
173 | o | 2:24b6387c8c8cae37178880f3fa95ded3cb1cf785:draft 'F'
174 |/ /
175 | o 1:9520eea781bcca16c1e15acc0ba14335a0e8e5ba:draft 'E'
176 |/
177 o 0:cd010b8cd998f3981a5a8115f94f8da4ab506089:draft 'A'
178
179 Continue
180 $ hg histedit 6 --commands - 2>&1 << EOF | fixbundle
181 > base d273e35dcdf2 B
182 > drop d7a6f907a822 D
183 > pick 591369deedfd X
184 > EOF
185 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
186 merging B
187 warning: conflicts while merging B! (edit, then use 'hg resolve --mark')
188 Fix up the change and run hg histedit --continue
189 $ echo b2 > B
190 $ hg resolve --mark B
191 (no more unresolved files)
192 $ hg histedit --continue | fixbundle
193 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
194 $ hg tglog
195 @ 6:03772da75548bb42a8f1eacd8c91d0717a147fcd:draft 'X'
196 |
197 o 5:d273e35dcdf21a7eb305192ef2e362887cd0a6f8:draft 'B'
198 |
199 | o 4:02de42196ebee42ef284b6780a87cdc96e8eaab6:draft 'H'
200 | |
201 | | o 3:eea13746799a9e0bfd88f29d3c2e9dc9389f524f:draft 'G'
202 | |/|
203 | o | 2:24b6387c8c8cae37178880f3fa95ded3cb1cf785:draft 'F'
204 |/ /
205 | o 1:9520eea781bcca16c1e15acc0ba14335a0e8e5ba:draft 'E'
206 |/
207 o 0:cd010b8cd998f3981a5a8115f94f8da4ab506089:draft 'A'
208
209
210 base on a previously picked changeset
211 $ echo i > i
212 $ hg add i
213 $ hg commit -m "I"
214 $ echo j > j
215 $ hg add j
216 $ hg commit -m "J"
217 $ hg tglog
218 @ 8:e8c55b19d366b335626e805484110d1d5f6f2ea3:draft 'J'
219 |
220 o 7:b2f90fd8aa85db5569e3cfc30cd1d7739546368e:draft 'I'
221 |
222 o 6:03772da75548bb42a8f1eacd8c91d0717a147fcd:draft 'X'
223 |
224 o 5:d273e35dcdf21a7eb305192ef2e362887cd0a6f8:draft 'B'
225 |
226 | o 4:02de42196ebee42ef284b6780a87cdc96e8eaab6:draft 'H'
227 | |
228 | | o 3:eea13746799a9e0bfd88f29d3c2e9dc9389f524f:draft 'G'
229 | |/|
230 | o | 2:24b6387c8c8cae37178880f3fa95ded3cb1cf785:draft 'F'
231 |/ /
232 | o 1:9520eea781bcca16c1e15acc0ba14335a0e8e5ba:draft 'E'
233 |/
234 o 0:cd010b8cd998f3981a5a8115f94f8da4ab506089:draft 'A'
235
236 $ hg histedit 5 --commands - 2>&1 << EOF | fixbundle
237 > pick d273e35dcdf2 B
238 > pick 03772da75548 X
239 > base d273e35dcdf2 B
240 > pick e8c55b19d366 J
241 > base d273e35dcdf2 B
242 > pick b2f90fd8aa85 I
243 > EOF
244 abort: may not use "base" with changesets within the edited list
245
246 $ hg --config experimental.histeditng=False histedit 5 --commands - 2>&1 << EOF | fixbundle
247 > base cd010b8cd998 A
248 > pick d273e35dcdf2 B
249 > pick 03772da75548 X
250 > pick b2f90fd8aa85 I
251 > pick e8c55b19d366 J
252 > EOF
253 abort: unknown action "base"
254
255 $ hg tglog
256 @ 8:e8c55b19d366b335626e805484110d1d5f6f2ea3:draft 'J'
257 |
258 o 7:b2f90fd8aa85db5569e3cfc30cd1d7739546368e:draft 'I'
259 |
260 o 6:03772da75548bb42a8f1eacd8c91d0717a147fcd:draft 'X'
261 |
262 o 5:d273e35dcdf21a7eb305192ef2e362887cd0a6f8:draft 'B'
263 |
264 | o 4:02de42196ebee42ef284b6780a87cdc96e8eaab6:draft 'H'
265 | |
266 | | o 3:eea13746799a9e0bfd88f29d3c2e9dc9389f524f:draft 'G'
267 | |/|
268 | o | 2:24b6387c8c8cae37178880f3fa95ded3cb1cf785:draft 'F'
269 |/ /
270 | o 1:9520eea781bcca16c1e15acc0ba14335a0e8e5ba:draft 'E'
271 |/
272 o 0:cd010b8cd998f3981a5a8115f94f8da4ab506089:draft 'A'
273
@@ -646,6 +646,23 b' class fold(histeditaction):'
646 replacements.append((ich, (n,)))
646 replacements.append((ich, (n,)))
647 return repo[n], replacements
647 return repo[n], replacements
648
648
649 class base(histeditaction):
650 def constraints(self):
651 return set(['forceother'])
652
653 def run(self):
654 if self.repo['.'].node() != self.node:
655 mergemod.update(self.repo, self.node, False, True, False)
656 # branchmerge, force, partial)
657 return self.continueclean()
658
659 def continuedirty(self):
660 abortdirty()
661
662 def continueclean(self):
663 basectx = self.repo['.']
664 return basectx, []
665
649 class _multifold(fold):
666 class _multifold(fold):
650 """fold subclass used for when multiple folds happen in a row
667 """fold subclass used for when multiple folds happen in a row
651
668
@@ -1291,3 +1308,5 b' def extsetup(ui):'
1291 cmdutil.unfinishedstates.append(
1308 cmdutil.unfinishedstates.append(
1292 ['histedit-state', False, True, _('histedit in progress'),
1309 ['histedit-state', False, True, _('histedit in progress'),
1293 _("use 'hg histedit --continue' or 'hg histedit --abort'")])
1310 _("use 'hg histedit --continue' or 'hg histedit --abort'")])
1311 if ui.configbool("experimental", "histeditng"):
1312 actiontable.update({'b': base, 'base': base})
General Comments 0
You need to be logged in to leave comments. Login now