##// END OF EJS Templates
merge with stable
Matt Mackall -
r14885:50b67d5c merge default
parent child Browse files
Show More
@@ -0,0 +1,85 b''
1 $ cat >> $HGRCPATH <<EOF
2 > [extensions]
3 > graphlog=
4 > rebase=
5 >
6 > [alias]
7 > tglog = log -G --template "{rev}: '{desc}' bookmarks: {bookmarks}\n"
8 > EOF
9
10 Create a repo with several bookmarks
11 $ hg init a
12 $ cd a
13
14 $ echo a > a
15 $ hg ci -Am A
16 adding a
17
18 $ echo b > b
19 $ hg ci -Am B
20 adding b
21 $ hg book 'X'
22 $ hg book 'Y'
23
24 $ echo c > c
25 $ hg ci -Am C
26 adding c
27 $ hg book 'Z'
28
29 $ hg up -q 0
30
31 $ echo d > d
32 $ hg ci -Am D
33 adding d
34 created new head
35
36 $ hg tglog
37 @ 3: 'D' bookmarks:
38 |
39 | o 2: 'C' bookmarks: Y Z
40 | |
41 | o 1: 'B' bookmarks: X
42 |/
43 o 0: 'A' bookmarks:
44
45
46 Move only rebased bookmarks
47
48 $ cd ..
49 $ hg clone -q a a1
50
51 $ cd a1
52 $ hg up -q Z
53
54 $ hg rebase --detach -s Y -d 3
55 saved backup bundle to $TESTTMP/a1/.hg/strip-backup/*-backup.hg (glob)
56
57 $ hg tglog
58 @ 3: 'C' bookmarks: Y Z
59 |
60 o 2: 'D' bookmarks:
61 |
62 | o 1: 'B' bookmarks: X
63 |/
64 o 0: 'A' bookmarks:
65
66 Keep bookmarks to the correct rebased changeset
67
68 $ cd ..
69 $ hg clone -q a a2
70
71 $ cd a2
72 $ hg up -q Z
73
74 $ hg rebase -s 1 -d 3
75 saved backup bundle to $TESTTMP/a2/.hg/strip-backup/*-backup.hg (glob)
76
77 $ hg tglog
78 @ 3: 'C' bookmarks: Y Z
79 |
80 o 2: 'B' bookmarks: X
81 |
82 o 1: 'D' bookmarks:
83 |
84 o 0: 'A' bookmarks:
85
@@ -14,7 +14,7 b' For more information:'
14 http://mercurial.selenic.com/wiki/RebaseExtension
14 http://mercurial.selenic.com/wiki/RebaseExtension
15 '''
15 '''
16
16
17 from mercurial import hg, util, repair, merge, cmdutil, commands
17 from mercurial import hg, util, repair, merge, cmdutil, commands, bookmarks
18 from mercurial import extensions, copies, patch
18 from mercurial import extensions, copies, patch
19 from mercurial.commands import templateopts
19 from mercurial.commands import templateopts
20 from mercurial.node import nullrev
20 from mercurial.node import nullrev
@@ -181,6 +181,9 b' def rebase(ui, repo, **opts):'
181 targetancestors = set(repo.changelog.ancestors(target))
181 targetancestors = set(repo.changelog.ancestors(target))
182 targetancestors.add(target)
182 targetancestors.add(target)
183
183
184 # Keep track of the current bookmarks in order to reset them later
185 currentbookmarks = repo._bookmarks.copy()
186
184 sortedstate = sorted(state)
187 sortedstate = sorted(state)
185 total = len(sortedstate)
188 total = len(sortedstate)
186 pos = 0
189 pos = 0
@@ -241,6 +244,13 b' def rebase(ui, repo, **opts):'
241 if 'qtip' in repo.tags():
244 if 'qtip' in repo.tags():
242 updatemq(repo, state, skipped, **opts)
245 updatemq(repo, state, skipped, **opts)
243
246
247 if currentbookmarks:
248 # Nodeids are needed to reset bookmarks
249 nstate = {}
250 for k, v in state.iteritems():
251 if v != nullmerge:
252 nstate[repo[k].node()] = repo[v].node()
253
244 if not keepf:
254 if not keepf:
245 # Remove no more useful revisions
255 # Remove no more useful revisions
246 rebased = [rev for rev in state if state[rev] != nullmerge]
256 rebased = [rev for rev in state if state[rev] != nullmerge]
@@ -252,6 +262,9 b' def rebase(ui, repo, **opts):'
252 # backup the old csets by default
262 # backup the old csets by default
253 repair.strip(ui, repo, repo[min(rebased)].node(), "all")
263 repair.strip(ui, repo, repo[min(rebased)].node(), "all")
254
264
265 if currentbookmarks:
266 updatebookmarks(repo, nstate, currentbookmarks, **opts)
267
255 clearstatus(repo)
268 clearstatus(repo)
256 ui.note(_("rebase completed\n"))
269 ui.note(_("rebase completed\n"))
257 if os.path.exists(repo.sjoin('undo')):
270 if os.path.exists(repo.sjoin('undo')):
@@ -401,6 +414,18 b' def updatemq(repo, state, skipped, **opt'
401 mq.series_dirty = True
414 mq.series_dirty = True
402 mq.savedirty()
415 mq.savedirty()
403
416
417 def updatebookmarks(repo, nstate, originalbookmarks, **opts):
418 'Move bookmarks to their correct changesets'
419 current = repo._bookmarkcurrent
420 for k, v in originalbookmarks.iteritems():
421 if v in nstate:
422 if nstate[v] != nullmerge:
423 # reset the pointer if the bookmark was moved incorrectly
424 if k != current:
425 repo._bookmarks[k] = nstate[v]
426
427 bookmarks.write(repo)
428
404 def storestatus(repo, originalwd, target, state, collapse, keep, keepbranches,
429 def storestatus(repo, originalwd, target, state, collapse, keep, keepbranches,
405 external):
430 external):
406 'Store the current status to allow recovery'
431 'Store the current status to allow recovery'
General Comments 0
You need to be logged in to leave comments. Login now