diff hgext/histedit.py @ 26798:38dcb85f9370

histedit: properly apply bundle2 backups If the histedit fails, we restore a backup. We make sure this backup bundle can be in bundle2 format as general delta will require.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Tue, 20 Oct 2015 03:07:23 +0200
parents 50fc80e46786
children cda2e980281e
line wrap: on
line diff
--- a/hgext/histedit.py	Tue Oct 20 16:01:33 2015 +0200
+++ b/hgext/histedit.py	Tue Oct 20 03:07:23 2015 +0200
@@ -160,6 +160,7 @@
 import os
 import sys
 
+from mercurial import bundle2
 from mercurial import cmdutil
 from mercurial import discovery
 from mercurial import error
@@ -822,7 +823,18 @@
                 backupfile = repo.join(state.backupfile)
                 f = hg.openpath(ui, backupfile)
                 gen = exchange.readbundle(ui, f, backupfile)
-                gen.apply(repo, 'histedit', 'bundle:' + backupfile)
+                tr = repo.transaction('histedit.abort')
+                try:
+                    if not isinstance(gen, bundle2.unbundle20):
+                        gen.apply(repo, 'histedit', 'bundle:' + backupfile)
+                    if isinstance(gen, bundle2.unbundle20):
+                        bundle2.applybundle(repo, gen, tr,
+                                            source='histedit',
+                                            url='bundle:' + backupfile)
+                    tr.close()
+                finally:
+                    tr.release()
+
                 os.remove(backupfile)
 
             # check whether we should update away