[PATCH] rebase: dry-run implemenation
timeless at mozdev.org
timeless at mozdev.org
Tue Dec 22 18:18:47 UTC 2015
# HG changeset patch
# User timeless at mozdev.org
# Date 1444168027 14400
# Tue Oct 06 17:47:07 2015 -0400
# Node ID 7701bc1363ab8e8fbed258c847073fd8e655228d
# Parent 3dea4eae4eebac11741f0c1dc5dcd9c88d8f4554
rebase: dry-run implemenation
diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -100,6 +100,7 @@
('t', 'tool', '', _('specify merge tool')),
('c', 'continue', False, _('continue an interrupted rebase')),
('a', 'abort', False, _('abort an interrupted rebase'))] +
+ commands.dryrunopts +
templateopts,
_('[-s REV | -b REV] [-d REV] [OPTION]'))
def rebase(ui, repo, **opts):
@@ -210,6 +211,7 @@
# keepopen is not meant for use on the command line, but by
# other extensions
keepopen = opts.get('keepopen', False)
+ dryrun = opts.get('dry_run')
if opts.get('interactive'):
try:
@@ -243,7 +245,8 @@
keepbranchesf, external, activebookmark) = restorestatus(repo)
except error.RepoLookupError:
if abortf:
- clearstatus(repo)
+ if not dryrun:
+ clearstatus(repo)
repo.ui.warn(_('rebase aborted (no revision is removed,'
' only broken state is cleared)\n'))
return 0
@@ -408,10 +411,14 @@
_('changesets'), total)
p1, p2, base = defineparents(repo, rev, target, state,
targetancestors)
- storestatus(repo, originalwd, target, state, collapsef, keepf,
- keepbranchesf, external, activebookmark)
+ if not dryrun:
+ storestatus(repo, originalwd, target, state, collapsef,
+ keepf, keepbranchesf, external, activebookmark)
if len(repo[None].parents()) == 2:
repo.ui.debug('resuming interrupted rebase\n')
+ elif dryrun:
+ if p1 >= 0:
+ repo.ui.status(" update to %d:%s\n" % (p1, repo[p1]))
else:
try:
ui.setconfig('ui', 'forcemerge', opts.get('tool', ''),
@@ -424,7 +431,9 @@
'resolve, then hg rebase --continue)'))
finally:
ui.setconfig('ui', 'forcemerge', '', 'rebase')
- if not collapsef:
+ if dryrun:
+ pass
+ elif not collapsef:
merging = p2 != nullrev
editform = cmdutil.mergeeditform(merging, 'rebase')
editor = cmdutil.getcommiteditor(editform=editform, **opts)
@@ -439,7 +448,9 @@
repo.dirstate.endparentchange()
newnode = None
# Update the state
- if newnode is not None:
+ if dryrun:
+ ui.debug('dryrun cannot predict if there will be changes')
+ elif newnode is not None:
state[rev] = repo[newnode].rev()
ui.debug('rebased as %s\n' % short(newnode))
else:
@@ -469,6 +480,10 @@
ui.progress(_('rebasing'), None)
ui.note(_('rebase merging completed\n'))
+ if dryrun:
+ ui.note(_("rebase completed\n"))
+ return
+
if collapsef and not keepopen:
p1, p2, _base = defineparents(repo, min(state), target,
state, targetancestors)
diff --git a/tests/test-rebase-scenario-global.t b/tests/test-rebase-scenario-global.t
--- a/tests/test-rebase-scenario-global.t
+++ b/tests/test-rebase-scenario-global.t
@@ -50,6 +50,9 @@
$ hg status --rev "3^1" --rev 3
A D
+ $ HGEDITOR=cat hg rebase --dry-run -s 3 -d 7 --edit
+ rebasing 3:32af7686d403 "D"
+ update to 7:02de42196ebe
$ HGEDITOR=cat hg rebase -s 3 -d 7 --edit
rebasing 3:32af7686d403 "D"
D
@@ -89,6 +92,9 @@
$ hg clone -q -u . a a2
$ cd a2
+ $ HGEDITOR=cat hg rebase --dry-run -s 3 -d 5
+ rebasing 3:32af7686d403 "D"
+ update to 5:24b6387c8c8c
$ HGEDITOR=cat hg rebase -s 3 -d 5
rebasing 3:32af7686d403 "D"
saved backup bundle to $TESTTMP/a2/.hg/strip-backup/32af7686d403-6f7dface-backup.hg (glob)
@@ -118,6 +124,10 @@
$ hg clone -q -u . a a3
$ cd a3
+ $ hg rebase --dry-run -s 4 -d 7
+ rebasing 4:9520eea781bc "E"
+ update to 7:02de42196ebe
+ rebasing 6:eea13746799a "G"
$ hg rebase -s 4 -d 7
rebasing 4:9520eea781bc "E"
rebasing 6:eea13746799a "G"
@@ -147,6 +157,11 @@
$ hg clone -q -u . a a4
$ cd a4
+ $ hg rebase --dry-run -s 5 -d 4
+ rebasing 5:24b6387c8c8c "F"
+ update to 4:9520eea781bc
+ rebasing 6:eea13746799a "G"
+ rebasing 7:02de42196ebe "H" (tip)
$ hg rebase -s 5 -d 4
rebasing 5:24b6387c8c8c "F"
rebasing 6:eea13746799a "G"
@@ -177,6 +192,9 @@
$ hg clone -q -u . a a5
$ cd a5
+ $ hg rebase --dry-run -s 6 -d 7
+ rebasing 6:eea13746799a "G"
+ update to 7:02de42196ebe
$ hg rebase -s 6 -d 7
rebasing 6:eea13746799a "G"
saved backup bundle to $TESTTMP/a5/.hg/strip-backup/eea13746799a-883828ed-backup.hg (glob)
@@ -206,6 +224,11 @@
$ hg clone -q -u . a a6
$ cd a6
+ $ hg rebase --dry-run -s 5 -d 1
+ rebasing 5:24b6387c8c8c "F"
+ update to 1:42ccdea3bb16
+ rebasing 6:eea13746799a "G"
+ rebasing 7:02de42196ebe "H" (tip)
$ hg rebase -s 5 -d 1
rebasing 5:24b6387c8c8c "F"
rebasing 6:eea13746799a "G"
@@ -239,18 +262,28 @@
$ hg clone -q -u . a a7
$ cd a7
+ $ hg rebase --dry-run -s 6 -d 5
+ nothing to rebase
+ [1]
$ hg rebase -s 6 -d 5
nothing to rebase
[1]
F onto G - rebase onto a descendant:
+ $ hg rebase --dry-run -s 5 -d 6
+ abort: source is ancestor of destination
+ [255]
$ hg rebase -s 5 -d 6
abort: source is ancestor of destination
[255]
G onto B - merge revision with both parents not in ancestors of target:
+ $ hg rebase --dry-run -s 6 -d 1
+ rebasing 6:eea13746799a "G"
+ abort: cannot use revision 6 as base, result would have 3 parents
+ [255]
$ hg rebase -s 6 -d 1
rebasing 6:eea13746799a "G"
abort: cannot use revision 6 as base, result would have 3 parents
@@ -261,24 +294,37 @@
G onto G - rebase onto same changeset:
+ $ hg rebase --dry-run -b 6 -d 6
+ nothing to rebase - eea13746799a is both "base" and destination
+ [1]
$ hg rebase -b 6 -d 6
nothing to rebase - eea13746799a is both "base" and destination
[1]
G onto F - rebase onto an ancestor:
+ $ hg rebase --dry-run -b 6 -d 5
+ nothing to rebase
+ [1]
$ hg rebase -b 6 -d 5
nothing to rebase
[1]
F onto G - rebase onto a descendant:
+ $ hg rebase --dry-run -b 5 -d 6
+ nothing to rebase - "base" 24b6387c8c8c is already an ancestor of destination eea13746799a
+ [1]
$ hg rebase -b 5 -d 6
nothing to rebase - "base" 24b6387c8c8c is already an ancestor of destination eea13746799a
[1]
C onto A - rebase onto an ancestor:
+ $ hg rebase --dry-run -d 0 -s 2
+ rebasing 2:5fddd98957c8 "C"
+ update to 0:cd010b8cd998
+ rebasing 3:32af7686d403 "D"
$ hg rebase -d 0 -s 2
rebasing 2:5fddd98957c8 "C"
rebasing 3:32af7686d403 "D"
@@ -304,14 +350,25 @@
Check rebasing public changeset
$ hg pull --config phases.publish=True -q -r 6 . # update phase of 6
+ $ hg rebase --dry-run -d 0 -b 6
+ nothing to rebase
+ [1]
$ hg rebase -d 0 -b 6
nothing to rebase
[1]
+ $ hg rebase --dry-run -d 5 -b 6
+ abort: can't rebase public changeset e1c4361dd923
+ (see "hg help phases" for details)
+ [255]
$ hg rebase -d 5 -b 6
abort: can't rebase public changeset e1c4361dd923
(see "hg help phases" for details)
[255]
+ $ hg rebase --dry-run -d 5 -b 6 --keep
+ rebasing 6:e1c4361dd923 "C"
+ update to 5:02de42196ebe
+ rebasing 7:c9659aac0000 "D" (tip)
$ hg rebase -d 5 -b 6 --keep
rebasing 6:e1c4361dd923 "C"
rebasing 7:c9659aac0000 "D" (tip)
@@ -320,6 +377,9 @@
Source phase greater or equal to destination phase: new changeset get the phase of source:
$ hg id -n
5
+ $ hg rebase --dry-run -s9 -d0
+ rebasing 9:2b23e52411f4 "D" (tip)
+ update to 0:cd010b8cd998
$ hg rebase -s9 -d0
rebasing 9:2b23e52411f4 "D" (tip)
saved backup bundle to $TESTTMP/a7/.hg/strip-backup/2b23e52411f4-f942decf-backup.hg (glob)
@@ -327,23 +387,35 @@
5
$ hg log --template "{phase}\n" -r 9
draft
+ $ hg rebase --dry-run -s9 -d1
+ rebasing 9:2cb10d0cfc6c "D" (tip)
+ update to 1:42ccdea3bb16
$ hg rebase -s9 -d1
rebasing 9:2cb10d0cfc6c "D" (tip)
saved backup bundle to $TESTTMP/a7/.hg/strip-backup/2cb10d0cfc6c-ddb0f256-backup.hg (glob)
$ hg log --template "{phase}\n" -r 9
draft
$ hg phase --force --secret 9
+ $ hg rebase --dry-run -s9 -d0
+ rebasing 9:c5b12b67163a "D" (tip)
+ update to 0:cd010b8cd998
$ hg rebase -s9 -d0
rebasing 9:c5b12b67163a "D" (tip)
saved backup bundle to $TESTTMP/a7/.hg/strip-backup/c5b12b67163a-4e372053-backup.hg (glob)
$ hg log --template "{phase}\n" -r 9
secret
+ $ hg rebase --dry-run -s9 -d1
+ rebasing 9:2a0524f868ac "D" (tip)
+ update to 1:42ccdea3bb16
$ hg rebase -s9 -d1
rebasing 9:2a0524f868ac "D" (tip)
saved backup bundle to $TESTTMP/a7/.hg/strip-backup/2a0524f868ac-cefd8574-backup.hg (glob)
$ hg log --template "{phase}\n" -r 9
secret
Source phase lower than destination phase: new changeset get the phase of destination:
+ $ hg rebase --dry-run -s8 -d9
+ rebasing 8:6d4f22462821 "C"
+ update to 9:5ac831c74b56
$ hg rebase -s8 -d9
rebasing 8:6d4f22462821 "C"
saved backup bundle to $TESTTMP/a7/.hg/strip-backup/6d4f22462821-3441f70b-backup.hg (glob)
@@ -393,10 +465,21 @@
$ hg clone -q -u . ah ah1
$ cd ah1
+ $ hg rebase --dry-run -r '2::8' -d 1
+ abort: can't remove original changesets with unrebased descendants
+ (use --keep to keep original changesets)
+ [255]
$ hg rebase -r '2::8' -d 1
abort: can't remove original changesets with unrebased descendants
(use --keep to keep original changesets)
[255]
+ $ hg rebase --dry-run -r '2::8' -d 1 -k
+ rebasing 2:c9e50f6cdc55 "C"
+ update to 1:8fd0f7e49f53
+ rebasing 3:ffd453c31098 "D"
+ rebasing 6:3d8a618087a7 "G"
+ rebasing 7:72434a4e60b0 "H"
+ rebasing 8:479ddb54a924 "I" (tip)
$ hg rebase -r '2::8' -d 1 -k
rebasing 2:c9e50f6cdc55 "C"
rebasing 3:ffd453c31098 "D"
@@ -439,10 +522,20 @@
$ hg clone -q -u . ah ah2
$ cd ah2
+ $ hg rebase --dry-run -r '3::8' -d 1
+ abort: can't remove original changesets with unrebased descendants
+ (use --keep to keep original changesets)
+ [255]
$ hg rebase -r '3::8' -d 1
abort: can't remove original changesets with unrebased descendants
(use --keep to keep original changesets)
[255]
+ $ hg rebase --dry-run -r '3::8' -d 1 --keep
+ rebasing 3:ffd453c31098 "D"
+ update to 1:8fd0f7e49f53
+ rebasing 6:3d8a618087a7 "G"
+ rebasing 7:72434a4e60b0 "H"
+ rebasing 8:479ddb54a924 "I" (tip)
$ hg rebase -r '3::8' -d 1 --keep
rebasing 3:ffd453c31098 "D"
rebasing 6:3d8a618087a7 "G"
@@ -482,10 +575,19 @@
$ hg clone -q -u . ah ah3
$ cd ah3
+ $ hg rebase --dry-run -r '3::7' -d 1
+ abort: can't remove original changesets with unrebased descendants
+ (use --keep to keep original changesets)
+ [255]
$ hg rebase -r '3::7' -d 1
abort: can't remove original changesets with unrebased descendants
(use --keep to keep original changesets)
[255]
+ $ hg rebase --dry-run -r '3::7' -d 1 --keep
+ rebasing 3:ffd453c31098 "D"
+ update to 1:8fd0f7e49f53
+ rebasing 6:3d8a618087a7 "G"
+ rebasing 7:72434a4e60b0 "H"
$ hg rebase -r '3::7' -d 1 --keep
rebasing 3:ffd453c31098 "D"
rebasing 6:3d8a618087a7 "G"
@@ -522,10 +624,21 @@
$ hg clone -q -u . ah ah4
$ cd ah4
+ $ hg rebase --dry-run -r '3::(7+5)' -d 1
+ abort: can't remove original changesets with unrebased descendants
+ (use --keep to keep original changesets)
+ [255]
$ hg rebase -r '3::(7+5)' -d 1
abort: can't remove original changesets with unrebased descendants
(use --keep to keep original changesets)
[255]
+ $ hg rebase --dry-run -r '3::(7+5)' -d 1 --keep
+ rebasing 3:ffd453c31098 "D"
+ update to 1:8fd0f7e49f53
+ rebasing 4:c01897464e7f "E"
+ rebasing 5:41bfcc75ed73 "F"
+ rebasing 6:3d8a618087a7 "G"
+ rebasing 7:72434a4e60b0 "H"
$ hg rebase -r '3::(7+5)' -d 1 --keep
rebasing 3:ffd453c31098 "D"
rebasing 4:c01897464e7f "E"
@@ -570,6 +683,11 @@
$ hg clone -q -u . ah ah5
$ cd ah5
+ $ hg rebase --dry-run -r '6::' -d 2
+ rebasing 6:3d8a618087a7 "G"
+ update to 2:c9e50f6cdc55
+ rebasing 7:72434a4e60b0 "H"
+ rebasing 8:479ddb54a924 "I" (tip)
$ hg rebase -r '6::' -d 2
rebasing 6:3d8a618087a7 "G"
rebasing 7:72434a4e60b0 "H"
@@ -603,6 +721,14 @@
$ hg clone -q -u . ah ah6
$ cd ah6
+ $ hg rebase --dry-run -r '(4+6)::' -d 1
+ rebasing 4:c01897464e7f "E"
+ update to 1:8fd0f7e49f53
+ rebasing 5:41bfcc75ed73 "F"
+ rebasing 6:3d8a618087a7 "G"
+ update to 1:8fd0f7e49f53
+ rebasing 7:72434a4e60b0 "H"
+ rebasing 8:479ddb54a924 "I" (tip)
$ hg rebase -r '(4+6)::' -d 1
rebasing 4:c01897464e7f "E"
rebasing 5:41bfcc75ed73 "F"
@@ -675,6 +801,11 @@
(actual test)
+ $ hg rebase --dry-run --dest 'desc(G)' --rev 'desc(K) + desc(I)'
+ rebasing 8:e7ec4e813ba6 "I"
+ update to 6:eea13746799a
+ rebasing 10:23a4ace37988 "K" (tip)
+ update to 6:eea13746799a
$ hg rebase --dest 'desc(G)' --rev 'desc(K) + desc(I)'
rebasing 8:e7ec4e813ba6 "I"
rebasing 10:23a4ace37988 "K" (tip)
@@ -739,6 +870,10 @@
$ touch subfile
$ hg add subfile
$ hg commit -m 'second source with subdir'
+ $ hg rebase --dry-run -b . -d 1 --traceback
+ rebasing 2:779a07b1b7a0 "first source commit"
+ update to 1:58d79cc1cf43
+ rebasing 3:a7d6f3a00bf3 "second source with subdir" (tip)
$ hg rebase -b . -d 1 --traceback
rebasing 2:779a07b1b7a0 "first source commit"
rebasing 3:a7d6f3a00bf3 "second source with subdir" (tip)
More information about the Mercurial-devel
mailing list