##// END OF EJS Templates
histedit: replace pickle with custom serialization...
Durham Goode -
r24756:d71c2da0 default
parent child Browse files
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