Mercurial > public > mercurial-scm > hg
comparison hgext/rebase.py @ 15214:231aac5280ba
rebase: move updatedirstate into cmdutil so it can be shared
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sun, 09 Oct 2011 16:14:37 -0500 |
parents | 81f76098211e |
children | 9d58569a8b92 |
comparison
equal
deleted
inserted
replaced
15213:15f15f3b405d | 15214:231aac5280ba |
---|---|
13 For more information: | 13 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, bookmarks | 17 from mercurial import hg, util, repair, merge, cmdutil, commands, bookmarks |
18 from mercurial import extensions, copies, patch | 18 from mercurial import extensions, 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 |
21 from mercurial.lock import release | 21 from mercurial.lock import release |
22 from mercurial.i18n import _ | 22 from mercurial.i18n import _ |
23 import os, errno | 23 import os, errno |
213 if stats and stats[3] > 0: | 213 if stats and stats[3] > 0: |
214 raise util.Abort(_('unresolved conflicts (see hg ' | 214 raise util.Abort(_('unresolved conflicts (see hg ' |
215 'resolve, then hg rebase --continue)')) | 215 'resolve, then hg rebase --continue)')) |
216 finally: | 216 finally: |
217 ui.setconfig('ui', 'forcemerge', '') | 217 ui.setconfig('ui', 'forcemerge', '') |
218 updatedirstate(repo, rev, target, p2) | 218 cmdutil.duplicatecopies(repo, rev, target, p2) |
219 if not collapsef: | 219 if not collapsef: |
220 newrev = concludenode(repo, rev, p1, p2, extrafn=extrafn) | 220 newrev = concludenode(repo, rev, p1, p2, extrafn=extrafn) |
221 else: | 221 else: |
222 # Skip commit if we are collapsing | 222 # Skip commit if we are collapsing |
223 repo.dirstate.setparents(repo[p1].node()) | 223 repo.dirstate.setparents(repo[p1].node()) |
298 if external != nullrev: | 298 if external != nullrev: |
299 raise util.Abort(_('unable to collapse, there is more ' | 299 raise util.Abort(_('unable to collapse, there is more ' |
300 'than one external parent')) | 300 'than one external parent')) |
301 external = p.rev() | 301 external = p.rev() |
302 return external | 302 return external |
303 | |
304 def updatedirstate(repo, rev, p1, p2): | |
305 """Keep track of renamed files in the revision that is going to be rebased | |
306 """ | |
307 # Here we simulate the copies and renames in the source changeset | |
308 cop, diver = copies.copies(repo, repo[rev], repo[p1], repo[p2], True) | |
309 m1 = repo[rev].manifest() | |
310 m2 = repo[p1].manifest() | |
311 for k, v in cop.iteritems(): | |
312 if k in m1: | |
313 if v in m1 or v in m2: | |
314 repo.dirstate.copy(v, k) | |
315 if v in m2 and v not in m1 and k in m2: | |
316 repo.dirstate.remove(v) | |
317 | 303 |
318 def concludenode(repo, rev, p1, p2, commitmsg=None, extrafn=None): | 304 def concludenode(repo, rev, p1, p2, commitmsg=None, extrafn=None): |
319 'Commit the changes and store useful information in extra' | 305 'Commit the changes and store useful information in extra' |
320 try: | 306 try: |
321 repo.dirstate.setparents(repo[p1].node(), repo[p2].node()) | 307 repo.dirstate.setparents(repo[p1].node(), repo[p2].node()) |