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 |