[PATCH 1 of 2 v2] histedit: only use pickle if not using the modern save format
Bryan O'Sullivan
bos at serpentine.com
Wed Dec 23 07:21:11 UTC 2015
# HG changeset patch
# User Bryan O'Sullivan <bos at serpentine.com>
# Date 1450855191 28800
# Tue Dec 22 23:19:51 2015 -0800
# Node ID e50f16d18a6b2c295dba7819cc4de7a2a3c531e1
# Parent eae73721d41a0242f285a39f61da85eb8b62ac2e
histedit: only use pickle if not using the modern save format
This avoids a case where PyPy's cPickle module throws a more confusing
error than CPython's.
diff --git a/hgext/histedit.py b/hgext/histedit.py
--- a/hgext/histedit.py
+++ b/hgext/histedit.py
@@ -252,19 +252,19 @@ class histeditstate(object):
def read(self):
"""Load histedit state from disk and set fields appropriately."""
try:
- fp = self.repo.vfs('histedit-state', 'r')
+ state = self.repo.vfs.read('histedit-state')
except IOError as err:
if err.errno != errno.ENOENT:
raise
raise error.Abort(_('no histedit in progress'))
- try:
- data = pickle.load(fp)
+ if state.startswith('v1\n'):
+ data = self._load()
+ parentctxnode, rules, keep, topmost, replacements, backupfile = data
+ else:
+ data = pickle.loads(state)
parentctxnode, rules, keep, topmost, replacements = data
backupfile = None
- except pickle.UnpicklingError:
- data = self._load()
- parentctxnode, rules, keep, topmost, replacements, backupfile = data
self.parentctxnode = parentctxnode
rules = "\n".join(["%s %s" % (verb, rest) for [verb, rest] in rules])
More information about the Mercurial-devel
mailing list