diff --git a/hgext/histedit.py b/hgext/histedit.py --- a/hgext/histedit.py +++ b/hgext/histedit.py @@ -326,6 +326,10 @@ self.backupfile = data['backupfile'] def _read(self): + try: + return self.stateobj.read() + except error.CorruptedState: + pass fp = self.repo.vfs.read('histedit-state') if fp.startswith('v1\n'): data = self._load() @@ -349,21 +353,17 @@ self._write(f) def _write(self, fp): - fp.write('v1\n') - fp.write('%s\n' % node.hex(self.parentctxnode)) - fp.write('%s\n' % node.hex(self.topmost)) - fp.write('%s\n' % ('True' if self.keep else 'False')) - fp.write('%d\n' % len(self.actions)) + data = {'parentctxnode': self.parentctxnode, + 'topmost': self.topmost, + 'keep': self.keep, + 'backupfile': self.backupfile, + 'replacements': self.replacements} + rules = [] for action in self.actions: - fp.write('%s\n' % action.tostate()) - fp.write('%d\n' % len(self.replacements)) - for replacement in self.replacements: - fp.write('%s%s\n' % (node.hex(replacement[0]), ''.join(node.hex(r) - for r in replacement[1]))) - backupfile = self.backupfile - if not backupfile: - backupfile = '' - fp.write('%s\n' % backupfile) + rules.append(action.tostate().split('\n')) + rules = "\n".join(["%s %s" % (verb, rest) for [verb, rest] in rules]) + data['rules'] = rules + self.stateobj.save(2, data) def _load(self): fp = self.repo.vfs('histedit-state', 'r') diff --git a/tests/test-histedit-arguments.t b/tests/test-histedit-arguments.t --- a/tests/test-histedit-arguments.t +++ b/tests/test-histedit-arguments.t @@ -350,7 +350,7 @@ (hg histedit --continue to resume) [1] Corrupt histedit state file - $ sed 's/8fda0c726bf2/123456789012/' .hg/histedit-state > ../corrupt-histedit + $ sed 's/8fda0c726bf2/123456789012/g; s/\x8f\xda/\x23\x56/g' .hg/histedit-state > ../corrupt-histedit $ mv ../corrupt-histedit .hg/histedit-state $ hg histedit --abort warning: encountered an exception during histedit --abort; the repository may not have been completely cleaned up diff --git a/tests/test-histedit-edit.t b/tests/test-histedit-edit.t --- a/tests/test-histedit-edit.t +++ b/tests/test-histedit-edit.t @@ -93,19 +93,10 @@ > EOF $ HGEDITOR="sh $TESTTMP/editplan.sh" hg histedit --edit-plan $ cat .hg/histedit-state - v1 - 055a42cdd88768532f9cf79daa407fc8d138de9b - 3c6a8ed2ebe862cc949d2caa30775dd6f16fb799 - False - 3 - drop - e860deea161a2f77de56603b340ebbb4536308ae - drop - 652413bf663ef2a641cab26574e46d5f5a64a55a - drop - 3c6a8ed2ebe862cc949d2caa30775dd6f16fb799 - 0 - strip-backup/177f92b77385-0ebe6a8f-histedit.hg + 2 + \xa6Dkeep\xf4ErulesX\x89drop e860deea161a2f77de56603b340ebbb4536308ae (esc) + drop 652413bf663ef2a641cab26574e46d5f5a64a55a + drop 3c6a8ed2ebe862cc949d2caa30775dd6f16fb799GtopmostT&1 << EOF @@ -114,19 +105,10 @@ > drop 3c6a8ed2ebe8 g > EOF $ cat .hg/histedit-state - v1 - 055a42cdd88768532f9cf79daa407fc8d138de9b - 3c6a8ed2ebe862cc949d2caa30775dd6f16fb799 - False - 3 - edit - e860deea161a2f77de56603b340ebbb4536308ae - pick - 652413bf663ef2a641cab26574e46d5f5a64a55a - drop - 3c6a8ed2ebe862cc949d2caa30775dd6f16fb799 - 0 - strip-backup/177f92b77385-0ebe6a8f-histedit.hg + 2 + \xa6Dkeep\xf4ErulesX\x89edit e860deea161a2f77de56603b340ebbb4536308ae (esc) + pick 652413bf663ef2a641cab26574e46d5f5a64a55a + drop 3c6a8ed2ebe862cc949d2caa30775dd6f16fb799GtopmostT