Show More
@@ -430,19 +430,26 b' def histedit(ui, repo, *parent, **opts):' | |||||
430 | tmpnodes, existing, rules, keep, tip, replacemap) = readstate(repo) |
|
430 | tmpnodes, existing, rules, keep, tip, replacemap) = readstate(repo) | |
431 | currentparent, wantnull = repo.dirstate.parents() |
|
431 | currentparent, wantnull = repo.dirstate.parents() | |
432 | parentctx = repo[parentctxnode] |
|
432 | parentctx = repo[parentctxnode] | |
433 | # discover any nodes the user has added in the interim |
|
433 | # existing is the list of revisions initially considered by | |
434 | newchildren = [c for c in parentctx.children() |
|
434 | # histedit. Here we use it to list new changesets, descendants | |
435 | if c.node() not in existing] |
|
435 | # of parentctx without an 'existing' changeset in-between. We | |
|
436 | # also have to exclude 'existing' changesets which were | |||
|
437 | # previously dropped. | |||
|
438 | descendants = set(c.node() for c in | |||
|
439 | repo.set('(%n::) - %n', parentctxnode, parentctxnode)) | |||
|
440 | existing = set(existing) | |||
|
441 | notdropped = set(n for n in existing if n in descendants and | |||
|
442 | (n not in replacemap or replacemap[n] in descendants)) | |||
|
443 | # Discover any nodes the user has added in the interim. We can | |||
|
444 | # miss changesets which were dropped and recreated the same. | |||
|
445 | newchildren = list(c.node() for c in repo.set( | |||
|
446 | 'sort(%ln - (%ln or %ln::))', descendants, existing, notdropped)) | |||
436 | action, currentnode = rules.pop(0) |
|
447 | action, currentnode = rules.pop(0) | |
437 | while newchildren: |
|
448 | if action in ('f', 'fold'): | |
438 | if action in ('f', 'fold'): |
|
449 | tmpnodes.extend(newchildren) | |
439 | tmpnodes.extend([n.node() for n in newchildren]) |
|
450 | else: | |
440 | else: |
|
451 | created.extend(newchildren) | |
441 | created.extend([n.node() for n in newchildren]) |
|
452 | ||
442 | filtered = [] |
|
|||
443 | for r in newchildren: |
|
|||
444 | filtered += [c for c in r.children() if c.node not in existing] |
|
|||
445 | newchildren = filtered |
|
|||
446 | m, a, r, d = repo.status()[:4] |
|
453 | m, a, r, d = repo.status()[:4] | |
447 | oldctx = repo[currentnode] |
|
454 | oldctx = repo[currentnode] | |
448 | message = oldctx.description() |
|
455 | message = oldctx.description() |
@@ -183,3 +183,56 b' should effectively drop the changes from' | |||||
183 |
|
183 | |||
184 |
|
184 | |||
185 | $ cd .. |
|
185 | $ cd .. | |
|
186 | ||||
|
187 | Test corner case where folded revision is separated from its parent by a | |||
|
188 | dropped revision. | |||
|
189 | ||||
|
190 | ||||
|
191 | $ hg init fold-with-dropped | |||
|
192 | $ cd fold-with-dropped | |||
|
193 | $ printf "1\n2\n3\n" > file | |||
|
194 | $ hg commit -Am '1+2+3' | |||
|
195 | adding file | |||
|
196 | $ echo 4 >> file | |||
|
197 | $ hg commit -m '+4' | |||
|
198 | $ echo 5 >> file | |||
|
199 | $ hg commit -m '+5' | |||
|
200 | $ echo 6 >> file | |||
|
201 | $ hg commit -m '+6' | |||
|
202 | $ hg log -G --template '{rev}:{node|short} {desc|firstline}\n' | |||
|
203 | @ 3:251d831eeec5 +6 | |||
|
204 | | | |||
|
205 | o 2:888f9082bf99 +5 | |||
|
206 | | | |||
|
207 | o 1:617f94f13c0f +4 | |||
|
208 | | | |||
|
209 | o 0:0189ba417d34 1+2+3 | |||
|
210 | ||||
|
211 | $ EDITED=`pwd`/../editcommands | |||
|
212 | $ cat > $EDITED <<EOF | |||
|
213 | > pick 617f94f13c0f 1 +4 | |||
|
214 | > drop 888f9082bf99 2 +5 | |||
|
215 | > fold 251d831eeec5 3 +6 | |||
|
216 | > EOF | |||
|
217 | $ HGEDITOR="cat $EDITED >" hg histedit 1 | |||
|
218 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||
|
219 | patching file file | |||
|
220 | Hunk #1 FAILED at 2 | |||
|
221 | 1 out of 1 hunks FAILED -- saving rejects to file file.rej | |||
|
222 | abort: Fix up the change and run hg histedit --continue | |||
|
223 | [255] | |||
|
224 | $ echo 5 >> file | |||
|
225 | $ hg commit -m '+5.2' | |||
|
226 | created new head | |||
|
227 | $ echo 6 >> file | |||
|
228 | $ HGEDITOR=cat hg histedit --continue | |||
|
229 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||
|
230 | +4 | |||
|
231 | *** | |||
|
232 | +5.2 | |||
|
233 | *** | |||
|
234 | +6 | |||
|
235 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||
|
236 | saved backup bundle to $TESTTMP/fold-with-dropped/.hg/strip-backup/617f94f13c0f-backup.hg (glob) | |||
|
237 | $ cd .. | |||
|
238 |
General Comments 0
You need to be logged in to leave comments.
Login now