--- a/mercurial/repair.py Wed May 19 22:32:40 2010 +0200
+++ b/mercurial/repair.py Wed May 19 19:46:39 2010 -0500
@@ -18,7 +18,6 @@
if not os.path.isdir(backupdir):
os.mkdir(backupdir)
name = os.path.join(backupdir, "%s-%s" % (short(node), suffix))
- repo.ui.warn(_("saving bundle to %s\n") % name)
return changegroup.writebundle(cg, name, "HG10BZ")
def _collectfiles(repo, striprev):
@@ -106,8 +105,10 @@
extranodes = _collectextranodes(repo, files, striprev)
# create a changegroup for all the branches we need to keep
+ backupfile = None
if backup == "all":
- _bundle(repo, [node], cl.heads(), node, 'backup')
+ backupfile = _bundle(repo, [node], cl.heads(), node, 'backup')
+ repo.ui.status(_("saving bundle to %s\n") % backupfile)
if saveheads or extranodes:
chgrpfile = _bundle(repo, savebases, saveheads, node, 'temp',
extranodes)
@@ -117,29 +118,37 @@
tr = repo.transaction("strip")
offset = len(tr.entries)
- tr.startgroup()
- cl.strip(striprev, tr)
- mfst.strip(striprev, tr)
- for fn in files:
- repo.file(fn).strip(striprev, tr)
- tr.endgroup()
+ try:
+ tr.startgroup()
+ cl.strip(striprev, tr)
+ mfst.strip(striprev, tr)
+ for fn in files:
+ repo.file(fn).strip(striprev, tr)
+ tr.endgroup()
- try:
- for i in xrange(offset, len(tr.entries)):
- file, troffset, ignore = tr.entries[i]
- repo.sopener(file, 'a').truncate(troffset)
- tr.close()
+ try:
+ for i in xrange(offset, len(tr.entries)):
+ file, troffset, ignore = tr.entries[i]
+ repo.sopener(file, 'a').truncate(troffset)
+ tr.close()
+ except:
+ tr.abort()
+ raise
+
+ if saveheads or extranodes:
+ ui.status(_("adding branch\n"))
+ f = open(chgrpfile, "rb")
+ gen = changegroup.readbundle(f, chgrpfile)
+ repo.addchangegroup(gen, 'strip', 'bundle:' + chgrpfile, True)
+ f.close()
+ if backup != "strip":
+ os.unlink(chgrpfile)
except:
- tr.abort()
+ if backupfile:
+ ui.warn("strip failed, full bundle stored in '%s'\n" % backupfile)
+ elif saveheads:
+ ui.warn("strip failed, partial bundle stored in '%s'\n"
+ % chgrpfile)
raise
- if saveheads or extranodes:
- ui.status(_("adding branch\n"))
- f = open(chgrpfile, "rb")
- gen = changegroup.readbundle(f, chgrpfile)
- repo.addchangegroup(gen, 'strip', 'bundle:' + chgrpfile, True)
- f.close()
- if backup != "strip":
- os.unlink(chgrpfile)
-
repo.destroyed()