From 261fd33bf59b8fc70c1df48178aecf2389b04e1f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Sat, 21 May 2011 22:59:50 +0100 Subject: [PATCH] Reimplement tracerepack script in Python. --- scripts/tracerepack.py | 75 ++++++++++++++++++++++++++++++++++++++++++ scripts/tracerepack.sh | 22 ------------- 2 files changed, 75 insertions(+), 22 deletions(-) create mode 100755 scripts/tracerepack.py delete mode 100755 scripts/tracerepack.sh diff --git a/scripts/tracerepack.py b/scripts/tracerepack.py new file mode 100755 index 0000000..581ee37 --- /dev/null +++ b/scripts/tracerepack.py @@ -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 ...', + 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 index 9152b5d..0000000 --- a/scripts/tracerepack.sh +++ /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 -- 2.43.0