1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
#!/usr/bin/python
import cStringIO
import re
import sys
import zlib
if sys.argv[1] == '-n':
no_compress = True
del sys.argv[1]
else:
no_compress = False
re_filter = re.compile(sys.argv[1])
data = cStringIO.StringIO(zlib.decompress(sys.stdin.read()))
line = data.readline()
assert line == 'VERSION 1\n'
bug_list = []
bugs = {}
for line in data:
assert line[-1] == '\n'
line = line[:-1]
if line:
(name, flags, desc) = line.split(',', 2)
bug_list.append(name)
bugs[name] = desc
else:
break
copied_bugs = []
copied_bugs_index = {}
result_main = []
for line in data:
assert line[-1] == '\n'
line = line[:-1]
if line:
line = line.split(',')
bug_name = line[1] = bug_list[int(line[1])]
line_combined = ','.join(line)
if re_filter.match(line_combined):
if copied_bugs_index.has_key(bug_name):
line[1] = str(copied_bugs_index[bug_name])
else:
number = len(copied_bugs)
copied_bugs.append("%s,,%s\n" % (bug_name, bugs[bug_name]))
copied_bugs_index[bug_name] = number
line[1] = str(number)
line = ','.join(line) + '\n'
result_main.append(line)
else:
break
result = ['VERSION 1\n'] + copied_bugs + ['\n'] + result_main + ['\n']
for line in data:
result.append(line)
result = ''.join(result)
if not no_compress:
result = zlib.compress(result, 9)
sys.stdout.write(result)
|