comparison contrib/fuzz/mpatch_corpus.py @ 43856:229215fc1c1c

fuzz: fix mpatch_corpus to not have an overridden __repr__ on py3 Differential Revision: https://phab.mercurial-scm.org/D7606
author Kyle Lippincott <spectral@google.com>
date Wed, 11 Dec 2019 15:23:54 -0800
parents 612951e08278
children 43f6a7bb4e12
comparison
equal deleted inserted replaced
43855:612951e08278 43856:229215fc1c1c
1 from __future__ import absolute_import, print_function 1 from __future__ import absolute_import, print_function
2 2
3 import argparse 3 import argparse
4 import struct 4 import struct
5 import sys
5 import zipfile 6 import zipfile
6 7
7 from mercurial import ( 8 from mercurial import (
8 hg, 9 hg,
9 ui as uimod, 10 ui as uimod,
12 ap = argparse.ArgumentParser() 13 ap = argparse.ArgumentParser()
13 ap.add_argument("out", metavar="some.zip", type=str, nargs=1) 14 ap.add_argument("out", metavar="some.zip", type=str, nargs=1)
14 args = ap.parse_args() 15 args = ap.parse_args()
15 16
16 17
17 class deltafrag(object): 18 if sys.version_info[0] < 3:
19
20 class py2reprhack(object):
21 def __repr__(self):
22 """Py2 calls __repr__ for `bytes(foo)`, forward to __bytes__"""
23 return self.__bytes__()
24
25
26 else:
27
28 class py2reprhack(object):
29 """Not needed on py3."""
30
31
32 class deltafrag(py2reprhack):
18 def __init__(self, start, end, data): 33 def __init__(self, start, end, data):
19 self.start = start 34 self.start = start
20 self.end = end 35 self.end = end
21 self.data = data 36 self.data = data
22
23 def __repr__(self):
24 # py2 calls __repr__ when you do `bytes(foo)`
25 return self.__bytes__()
26 37
27 def __bytes__(self): 38 def __bytes__(self):
28 return ( 39 return (
29 struct.pack(">lll", self.start, self.end, len(self.data)) 40 struct.pack(">lll", self.start, self.end, len(self.data))
30 + self.data 41 + self.data
31 ) 42 )
32 43
33 44
34 class delta(object): 45 class delta(py2reprhack):
35 def __init__(self, frags): 46 def __init__(self, frags):
36 self.frags = frags 47 self.frags = frags
37 48
38 def __repr__(self):
39 # py2 calls __repr__ when you do `bytes(foo)`
40 return self.__bytes__()
41
42 def __bytes__(self): 49 def __bytes__(self):
43 return b''.join(bytes(f) for f in self.frags) 50 return b''.join(bytes(f) for f in self.frags)
44 51
45 52
46 class corpus(object): 53 class corpus(py2reprhack):
47 def __init__(self, base, deltas): 54 def __init__(self, base, deltas):
48 self.base = base 55 self.base = base
49 self.deltas = deltas 56 self.deltas = deltas
50
51 def __repr__(self):
52 # py2 calls __repr__ when you do `bytes(foo)`
53 return self.__bytes__()
54 57
55 def __bytes__(self): 58 def __bytes__(self):
56 deltas = [bytes(d) for d in self.deltas] 59 deltas = [bytes(d) for d in self.deltas]
57 parts = ( 60 parts = (
58 [ 61 [