]> git.cworth.org Git - apitrace/commitdiff
Reimplement tracerepack script in Python.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Sat, 21 May 2011 21:59:50 +0000 (22:59 +0100)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Sat, 21 May 2011 21:59:50 +0000 (22:59 +0100)
scripts/tracerepack.py [new file with mode: 0755]
scripts/tracerepack.sh [deleted file]

diff --git a/scripts/tracerepack.py b/scripts/tracerepack.py
new file mode 100755 (executable)
index 0000000..581ee37
--- /dev/null
@@ -0,0 +1,75 @@
+#!/usr/bin/env python
+##########################################################################
+#
+# Copyright 2011 Jose Fonseca
+# All Rights Reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the 'Software'), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+##########################################################################/
+
+'''Script to recompress a trace.
+'''
+
+
+import optparse
+import os.path
+import sys
+import gzip
+import tempfile
+import shutil
+
+
+def repack(in_name):
+    mtime = os.path.getmtime(in_name)
+    out_name = tempfile.mktemp()
+
+    in_stream = gzip.GzipFile(in_name, 'rb')
+    out_stream = gzip.GzipFile(out_name, 'wb', compresslevel=9, mtime=mtime)
+    
+    shutil.copyfileobj(in_stream, out_stream)
+    
+    in_stream.close()
+    out_stream.close()
+    
+    in_size = os.path.getsize(in_name)
+    out_size = os.path.getsize(out_name)
+
+    print '%u -> %u' % (in_size, out_size)
+    
+    if out_size < in_size:
+        os.rename(out_name, in_name)
+    else:
+        os.unlink(out_name)
+
+
+def main():
+    optparser = optparse.OptionParser(
+        usage='\n\t%prog <trace> ...',
+        version='%%prog')
+
+    (options, args) = optparser.parse_args(sys.argv[1:])
+    if not args:
+        optparser.error("incorrect number of arguments")
+
+    map(repack, args)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/scripts/tracerepack.sh b/scripts/tracerepack.sh
deleted file mode 100755 (executable)
index 9152b5d..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh
-# Script to recompress the traces
-
-set -e
-
-for TRACE
-do
-    gzip -l "$TRACE" | sed -n '2p' | while read COMPRESSED UNCOMPRESSED RATIO FILENAME
-    do
-        gzip -dc "$TRACE" | pv -s "$UNCOMPRESSED" | gzip --best --no-name > "$TRACE.pack"
-    done
-    COMPRESSED=`stat -c %s "$TRACE"`
-    RECOMPRESSED=`stat -c %s "$TRACE.pack"`
-    echo "$COMPRESSED -> $RECOMPRESSED"
-    if [ "$RECOMPRESSED" -lt "$COMPRESSED" ]
-    then
-        touch -r "$TRACE" "$TRACE.pack"
-        mv "$TRACE.pack" "$TRACE"
-    else
-        rm "$TRACE.pack"
-    fi
-done