Show More
@@ -220,7 +220,12 b' class histeditstate(object):' | |||||
220 | raise |
|
220 | raise | |
221 | raise util.Abort(_('no histedit in progress')) |
|
221 | raise util.Abort(_('no histedit in progress')) | |
222 |
|
222 | |||
223 | parentctxnode, rules, keep, topmost, replacements = pickle.load(fp) |
|
223 | try: | |
|
224 | data = pickle.load(fp) | |||
|
225 | parentctxnode, rules, keep, topmost, replacements = data | |||
|
226 | except pickle.UnpicklingError: | |||
|
227 | data = self._load() | |||
|
228 | parentctxnode, rules, keep, topmost, replacements = data | |||
224 |
|
229 | |||
225 | self.parentctxnode = parentctxnode |
|
230 | self.parentctxnode = parentctxnode | |
226 | self.rules = rules |
|
231 | self.rules = rules | |
@@ -230,10 +235,63 b' class histeditstate(object):' | |||||
230 |
|
235 | |||
231 | def write(self): |
|
236 | def write(self): | |
232 | fp = self.repo.vfs('histedit-state', 'w') |
|
237 | fp = self.repo.vfs('histedit-state', 'w') | |
233 | pickle.dump((self.parentctxnode, self.rules, self.keep, |
|
238 | fp.write('v1\n') | |
234 | self.topmost, self.replacements), fp) |
|
239 | fp.write('%s\n' % node.hex(self.parentctxnode)) | |
|
240 | fp.write('%s\n' % node.hex(self.topmost)) | |||
|
241 | fp.write('%s\n' % self.keep) | |||
|
242 | fp.write('%d\n' % len(self.rules)) | |||
|
243 | for rule in self.rules: | |||
|
244 | fp.write('%s%s\n' % (rule[1], rule[0])) | |||
|
245 | fp.write('%d\n' % len(self.replacements)) | |||
|
246 | for replacement in self.replacements: | |||
|
247 | fp.write('%s%s\n' % (node.hex(replacement[0]), ''.join(node.hex(r) | |||
|
248 | for r in replacement[1]))) | |||
235 | fp.close() |
|
249 | fp.close() | |
236 |
|
250 | |||
|
251 | def _load(self): | |||
|
252 | fp = self.repo.vfs('histedit-state', 'r') | |||
|
253 | lines = [l[:-1] for l in fp.readlines()] | |||
|
254 | ||||
|
255 | index = 0 | |||
|
256 | lines[index] # version number | |||
|
257 | index += 1 | |||
|
258 | ||||
|
259 | parentctxnode = node.bin(lines[index]) | |||
|
260 | index += 1 | |||
|
261 | ||||
|
262 | topmost = node.bin(lines[index]) | |||
|
263 | index += 1 | |||
|
264 | ||||
|
265 | keep = lines[index] == 'True' | |||
|
266 | index += 1 | |||
|
267 | ||||
|
268 | # Rules | |||
|
269 | rules = [] | |||
|
270 | rulelen = int(lines[index]) | |||
|
271 | index += 1 | |||
|
272 | for i in xrange(rulelen): | |||
|
273 | rule = lines[index] | |||
|
274 | rulehash = rule[:40] | |||
|
275 | ruleaction = rule[40:] | |||
|
276 | rules.append((ruleaction, rulehash)) | |||
|
277 | index += 1 | |||
|
278 | ||||
|
279 | # Replacements | |||
|
280 | replacements = [] | |||
|
281 | replacementlen = int(lines[index]) | |||
|
282 | index += 1 | |||
|
283 | for i in xrange(replacementlen): | |||
|
284 | replacement = lines[index] | |||
|
285 | original = node.bin(replacement[:40]) | |||
|
286 | succ = [node.bin(replacement[i:i + 40]) for i in | |||
|
287 | range(40, len(replacement), 40)] | |||
|
288 | replacements.append((original, succ)) | |||
|
289 | index += 1 | |||
|
290 | ||||
|
291 | fp.close() | |||
|
292 | ||||
|
293 | return parentctxnode, rules, keep, topmost, replacements | |||
|
294 | ||||
237 | def clear(self): |
|
295 | def clear(self): | |
238 | self.repo.vfs.unlink('histedit-state') |
|
296 | self.repo.vfs.unlink('histedit-state') | |
239 |
|
297 |
General Comments 0
You need to be logged in to leave comments.
Login now