hgext/rebase.py
changeset 7955 c3d4ff03ec72
parent 7954 b969611064ae
child 7999 b25110140573
equal deleted inserted replaced
7954:b969611064ae 7955:c3d4ff03ec72
    12 For more information:
    12 For more information:
    13 http://www.selenic.com/mercurial/wiki/index.cgi/RebaseProject
    13 http://www.selenic.com/mercurial/wiki/index.cgi/RebaseProject
    14 '''
    14 '''
    15 
    15 
    16 from mercurial import util, repair, merge, cmdutil, commands, error
    16 from mercurial import util, repair, merge, cmdutil, commands, error
    17 from mercurial import extensions, ancestor, copies
    17 from mercurial import extensions, ancestor, copies, patch
    18 from mercurial.commands import templateopts
    18 from mercurial.commands import templateopts
    19 from mercurial.node import nullrev
    19 from mercurial.node import nullrev
    20 from mercurial.i18n import _
    20 from mercurial.i18n import _
    21 import os, errno
    21 import os, errno
    22 
    22 
   262                 raise util.Abort(_('cannot use revision %d as base, result '
   262                 raise util.Abort(_('cannot use revision %d as base, result '
   263                         'would have 3 parents') % rev)
   263                         'would have 3 parents') % rev)
   264             p2 = P2n
   264             p2 = P2n
   265     return p1, p2
   265     return p1, p2
   266 
   266 
       
   267 def isagitpatch(repo, patchname):
       
   268     'Return true if the given patch is in git format'
       
   269     mqpatch = os.path.join(repo.mq.path, patchname)
       
   270     for line in patch.linereader(file(mqpatch, 'rb')):
       
   271         if line.startswith('diff --git'):
       
   272             return True
       
   273     return False
       
   274 
   267 def updatemq(repo, state, skipped, **opts):
   275 def updatemq(repo, state, skipped, **opts):
   268     'Update rebased mq patches - finalize and then import them'
   276     'Update rebased mq patches - finalize and then import them'
   269     mqrebase = {}
   277     mqrebase = {}
   270     for p in repo.mq.applied:
   278     for p in repo.mq.applied:
   271         if repo[p.rev].rev() in state:
   279         if repo[p.rev].rev() in state:
   272             repo.ui.debug(_('revision %d is an mq patch (%s), finalize it.\n') %
   280             repo.ui.debug(_('revision %d is an mq patch (%s), finalize it.\n') %
   273                                         (repo[p.rev].rev(), p.name))
   281                                         (repo[p.rev].rev(), p.name))
   274             mqrebase[repo[p.rev].rev()] = p.name
   282             mqrebase[repo[p.rev].rev()] = (p.name, isagitpatch(repo, p.name))
   275 
   283 
   276     if mqrebase:
   284     if mqrebase:
   277         repo.mq.finish(repo, mqrebase.keys())
   285         repo.mq.finish(repo, mqrebase.keys())
   278 
   286 
   279         # We must start import from the newest revision
   287         # We must start import from the newest revision
   281         mq.sort()
   289         mq.sort()
   282         mq.reverse()
   290         mq.reverse()
   283         for rev in mq:
   291         for rev in mq:
   284             if rev not in skipped:
   292             if rev not in skipped:
   285                 repo.ui.debug(_('import mq patch %d (%s)\n')
   293                 repo.ui.debug(_('import mq patch %d (%s)\n')
   286                               % (state[rev], mqrebase[rev]))
   294                               % (state[rev], mqrebase[rev][0]))
   287                 repo.mq.qimport(repo, (), patchname=mqrebase[rev],
   295                 repo.mq.qimport(repo, (), patchname=mqrebase[rev][0],
   288                             git=opts.get('git', False),rev=[str(state[rev])])
   296                             git=mqrebase[rev][1],rev=[str(state[rev])])
   289         repo.mq.save_dirty()
   297         repo.mq.save_dirty()
   290 
   298 
   291 def storestatus(repo, originalwd, target, state, collapse, keep, keepbranches,
   299 def storestatus(repo, originalwd, target, state, collapse, keep, keepbranches,
   292                                                                 external):
   300                                                                 external):
   293     'Store the current status to allow recovery'
   301     'Store the current status to allow recovery'