]> git.cworth.org Git - apitrace/blob - scripts/tracerepack.py
No need to strip ANSI escapes.
[apitrace] / scripts / tracerepack.py
1 #!/usr/bin/env python
2 ##########################################################################
3 #
4 # Copyright 2011 Jose Fonseca
5 # All Rights Reserved.
6 #
7 # Permission is hereby granted, free of charge, to any person obtaining a copy
8 # of this software and associated documentation files (the 'Software'), to deal
9 # in the Software without restriction, including without limitation the rights
10 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 # copies of the Software, and to permit persons to whom the Software is
12 # furnished to do so, subject to the following conditions:
13 #
14 # The above copyright notice and this permission notice shall be included in
15 # all copies or substantial portions of the Software.
16 #
17 # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 # THE SOFTWARE.
24 #
25 ##########################################################################/
26
27 '''Script to recompress a trace.
28 '''
29
30
31 import optparse
32 import os.path
33 import sys
34 import gzip
35 import tempfile
36 import shutil
37
38
39 def repack(in_name):
40     mtime = os.path.getmtime(in_name)
41     out_name = tempfile.mktemp()
42
43     in_stream = gzip.GzipFile(in_name, 'rb')
44     out_stream = gzip.GzipFile(out_name, 'wb', compresslevel=9, mtime=mtime)
45     
46     shutil.copyfileobj(in_stream, out_stream)
47     
48     in_stream.close()
49     out_stream.close()
50     
51     in_size = os.path.getsize(in_name)
52     out_size = os.path.getsize(out_name)
53
54     print '%u -> %u' % (in_size, out_size)
55     
56     if out_size < in_size:
57         shutil.move(out_name, in_name)
58     else:
59         os.unlink(out_name)
60
61
62 def main():
63     optparser = optparse.OptionParser(
64         usage='\n\t%prog <trace> ...',
65         version='%%prog')
66
67     (options, args) = optparser.parse_args(sys.argv[1:])
68     if not args:
69         optparser.error("incorrect number of arguments")
70
71     map(repack, args)
72
73
74 if __name__ == '__main__':
75     main()