This is an automated email from the git hooks/post-receive script. smcv pushed a commit to branch master in repository game-data-packager.
commit 461af9bb68b4535177a69c595369121a6b2185c3 Author: Simon McVittie <[email protected]> Date: Wed Dec 30 22:28:26 2015 +0000 gdp.unpack.auto: add makeself content-sniffing, from make-template --- game_data_packager/unpack/auto.py | 48 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/game_data_packager/unpack/auto.py b/game_data_packager/unpack/auto.py index c0199db..373c9cf 100644 --- a/game_data_packager/unpack/auto.py +++ b/game_data_packager/unpack/auto.py @@ -2,6 +2,7 @@ # encoding=utf-8 # # Copyright © 2015 Simon McVittie <[email protected]> +# © 2015 Alexandre Detiste <[email protected]> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -20,6 +21,46 @@ import zipfile from . import (TarUnpacker, ZipUnpacker) +def get_makeself_offset(archive, reader=None): + """Sniff Makeself archives, returning the offset to the embedded + tar file, or 0 if not a makeself archive. + + http://megastep.org/makeself/ + """ + skip = 0 + line_number = 0 + has_makeself = False + trailer = None + + SHEBANG = bytes('/bin/sh', 'ascii') + HEADER_V1 = bytes('# This script was generated using Makeself 1.', 'ascii') + HEADER_V2 = bytes('# This script was generated using Makeself 2.', 'ascii') + TRAILER_V1 = bytes('END_OF_STUB', 'ascii') + TRAILER_V2 = bytes('eval $finish; exit $res', 'ascii') + + if reader is None: + reader = open(archive, 'rb') + + for line in reader: + line_number += 1 + skip += len(line) + + if line_number == 1 and SHEBANG not in line: + return 0 + elif has_makeself: + if trailer in line: + return skip + elif HEADER_V1 in line: + has_makeself = True + trailer = TRAILER_V1 + elif HEADER_V2 in line: + has_makeself = True + trailer = TRAILER_V2 + elif line_number > 3: + return 0 + + return 0 + def automatic_unpacker(archive, reader=None): if reader is None: is_plain_file = True @@ -28,6 +69,13 @@ def automatic_unpacker(archive, reader=None): is_plain_file = False if reader.seekable(): + skip = get_makeself_offset(archive, reader) + + if skip > 0: + reader.seek(0) + return TarUnpacker(archive, reader=reader, skip=skip, + compression='gz') + if zipfile.is_zipfile(reader): return ZipUnpacker(reader) -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/game-data-packager.git _______________________________________________ Pkg-games-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

