[game-data-packager] 06/14: make_template: add strace wrapper
Simon McVittie
smcv at debian.org
Sun Feb 15 15:25:37 UTC 2015
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 7e50e6da93dc079f0a14a6acf5da3e6e8b2e4ac9
Author: Alexandre Detiste <alexandre.detiste at gmail.com>
Date: Thu Feb 12 06:02:21 2015 +0100
make_template: add strace wrapper
one just needs to complete one game to see which files are used,
will tell also about missing files (ENOENT)
---
game_data_packager/make_template.py | 50 ++++++++++++++++++++++++++++++++++++-
1 file changed, 49 insertions(+), 1 deletion(-)
diff --git a/game_data_packager/make_template.py b/game_data_packager/make_template.py
index 2930807..614278e 100644
--- a/game_data_packager/make_template.py
+++ b/game_data_packager/make_template.py
@@ -267,14 +267,60 @@ def do_one_deb(deb):
print('...')
print('')
+def do_one_exec(pgm,lower):
+ with subprocess.Popen(['strace', '-e', 'open',
+ '-s', '100', pgm],
+ stderr=subprocess.PIPE, stdout=subprocess.DEVNULL,
+ universal_newlines=True) as proc:
+ used = set()
+ missing = set()
+ while proc.poll() == None:
+ line = proc.stderr.readline().strip()
+ if not line.startswith('open('):
+ continue
+ file = line.split('"')[1]
+ if (not file.startswith('/usr/share/games')
+ and not file.startswith('/usr/local/games')):
+ continue
+ if 'ENOENT' in line:
+ missing.add(file)
+ else:
+ used.add(file)
+
+ dirs = set()
+ print('# used')
+ for file in sorted(used):
+ dirs.add(os.path.dirname(file))
+ print(" - %s" % file)
+ if missing:
+ print('# missing ?')
+ for file in sorted(missing):
+ print(" - %s" % file)
+
+ present = set()
+ for dir in dirs:
+ for dirpath, dirnames, filenames in os.walk(dir):
+ for fn in filenames:
+ present.add(os.path.join(dirpath, fn))
+
+ unused = present - used
+ if unused:
+ print('# not used')
+ for file in sorted(unused):
+ print(" - %s" % file)
+
+
def main():
parser = argparse.ArgumentParser(
description='Produce a template for game-data-packager YAML ' +
'based on an existing .deb file or installed directory',
prog='game-data-packager guess-contents')
- parser.add_argument('args', nargs='+', metavar='DEB|DIRECTORY')
+ parser.add_argument('args', nargs='+', metavar='DEB|DIRECTORY|FILE')
parser.add_argument('-l', '--lower', action='store_true', dest='lower',
help='make all files lowercase')
+ parser.add_argument('-e', '--execute', action='store_true', dest='execute',
+ help='run this game through strace and see which files from '
+ '/usr/share/games or /usr/local/games are needed')
args = parser.parse_args()
for arg in args.args:
@@ -282,6 +328,8 @@ def main():
do_one_dir(arg.rstrip('/'),args.lower)
elif arg.endswith('.deb'):
do_one_deb(arg)
+ elif args.execute:
+ do_one_exec(arg,args.lower)
else:
do_one_file(arg,args.lower)
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/game-data-packager.git
More information about the Pkg-games-commits
mailing list