hgext/mq.py
changeset 4029 9210fba03d16
parent 4016 a195f11ed1a2
child 4037 bbdba01cce28
equal deleted inserted replaced
4028:540d1059c802 4029:9210fba03d16
    27 add known patch to applied stack          qpush
    27 add known patch to applied stack          qpush
    28 remove patch from applied stack           qpop
    28 remove patch from applied stack           qpop
    29 refresh contents of top applied patch     qrefresh
    29 refresh contents of top applied patch     qrefresh
    30 '''
    30 '''
    31 
    31 
    32 from mercurial.demandload import *
    32 from mercurial.i18n import _
    33 from mercurial.i18n import gettext as _
    33 from mercurial import commands, cmdutil, hg, patch, revlog, util, changegroup
    34 from mercurial import commands
    34 import os, sys, re, errno
    35 demandload(globals(), "os sys re struct traceback errno bz2")
       
    36 demandload(globals(), "mercurial:cmdutil,hg,patch,revlog,util,changegroup")
       
    37 
    35 
    38 commands.norepo += " qclone qversion"
    36 commands.norepo += " qclone qversion"
    39 
    37 
    40 class statusentry:
    38 class statusentry:
    41     def __init__(self, rev, name=None):
    39     def __init__(self, rev, name=None):
   326 
   324 
   327         # apply failed, strip away that rev and merge.
   325         # apply failed, strip away that rev and merge.
   328         hg.clean(repo, head, wlock=wlock)
   326         hg.clean(repo, head, wlock=wlock)
   329         self.strip(repo, n, update=False, backup='strip', wlock=wlock)
   327         self.strip(repo, n, update=False, backup='strip', wlock=wlock)
   330 
   328 
   331         c = repo.changelog.read(rev)
   329         ctx = repo.changectx(rev)
   332         ret = hg.merge(repo, rev, wlock=wlock)
   330         ret = hg.merge(repo, rev, wlock=wlock)
   333         if ret:
   331         if ret:
   334             raise util.Abort(_("update returned %d") % ret)
   332             raise util.Abort(_("update returned %d") % ret)
   335         n = repo.commit(None, c[4], c[1], force=1, wlock=wlock)
   333         n = repo.commit(None, ctx.description(), ctx.user(),
       
   334                         force=1, wlock=wlock)
   336         if n == None:
   335         if n == None:
   337             raise util.Abort(_("repo commit failed"))
   336             raise util.Abort(_("repo commit failed"))
   338         try:
   337         try:
   339             message, comments, user, date, patchfound = mergeq.readheaders(patch)
   338             message, comments, user, date, patchfound = mergeq.readheaders(patch)
   340         except:
   339         except:
   612             name = os.path.join(backupdir, "%s" % revlog.short(rev))
   611             name = os.path.join(backupdir, "%s" % revlog.short(rev))
   613             name = savename(name)
   612             name = savename(name)
   614             self.ui.warn("saving bundle to %s\n" % name)
   613             self.ui.warn("saving bundle to %s\n" % name)
   615             return changegroup.writebundle(cg, name, "HG10BZ")
   614             return changegroup.writebundle(cg, name, "HG10BZ")
   616 
   615 
   617         def stripall(rev, revnum):
   616         def stripall(revnum):
   618             cl = repo.changelog
   617             mm = repo.changectx(rev).manifest()
   619             c = cl.read(rev)
       
   620             mm = repo.manifest.read(c[0])
       
   621             seen = {}
   618             seen = {}
   622 
   619 
   623             for x in xrange(revnum, cl.count()):
   620             for x in xrange(revnum, repo.changelog.count()):
   624                 c = cl.read(cl.node(x))
   621                 for f in repo.changectx(x).files():
   625                 for f in c[3]:
       
   626                     if f in seen:
   622                     if f in seen:
   627                         continue
   623                         continue
   628                     seen[f] = 1
   624                     seen[f] = 1
   629                     if f in mm:
   625                     if f in mm:
   630                         filerev = mm[f]
   626                         filerev = mm[f]
   701             bundle(backupch)
   697             bundle(backupch)
   702         if saveheads:
   698         if saveheads:
   703             backupch = repo.changegroupsubset(savebases.keys(), saveheads, 'strip')
   699             backupch = repo.changegroupsubset(savebases.keys(), saveheads, 'strip')
   704             chgrpfile = bundle(backupch)
   700             chgrpfile = bundle(backupch)
   705 
   701 
   706         stripall(rev, revnum)
   702         stripall(revnum)
   707 
   703 
   708         change = chlog.read(rev)
   704         change = chlog.read(rev)
   709         chlog.strip(revnum, revnum)
   705         chlog.strip(revnum, revnum)
   710         repo.manifest.strip(repo.manifest.rev(change[0]), revnum)
   706         repo.manifest.strip(repo.manifest.rev(change[0]), revnum)
   711         if saveheads:
   707         if saveheads:
   832 
   828 
   833     def pop(self, repo, patch=None, force=False, update=True, all=False,
   829     def pop(self, repo, patch=None, force=False, update=True, all=False,
   834             wlock=None):
   830             wlock=None):
   835         def getfile(f, rev):
   831         def getfile(f, rev):
   836             t = repo.file(f).read(rev)
   832             t = repo.file(f).read(rev)
   837             try:
   833             repo.wfile(f, "w").write(t)
   838                 repo.wfile(f, "w").write(t)
       
   839             except IOError:
       
   840                 try:
       
   841                     os.makedirs(os.path.dirname(repo.wjoin(f)))
       
   842                 except OSError, err:
       
   843                     if err.errno != errno.EEXIST: raise
       
   844                 repo.wfile(f, "w").write(t)
       
   845 
   834 
   846         if not wlock:
   835         if not wlock:
   847             wlock = repo.wlock()
   836             wlock = repo.wlock()
   848         if patch:
   837         if patch:
   849             # index, rev, patch
   838             # index, rev, patch