From b6e3683a5eb469a2d11878af318913e51c2acdbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Piotr=20Przeradowski?= Date: Sun, 11 Aug 2013 21:55:56 +0200 Subject: [PATCH] reduction --- .gitignore | 1 + tool/process.py | 55 +++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index a5a479b..1745c68 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ pystacia.egg-info/ .coverage tool/downloads +tool/data.py diff --git a/tool/process.py b/tool/process.py index 1f5427e..cc280ad 100755 --- a/tool/process.py +++ b/tool/process.py @@ -5,6 +5,8 @@ from os.path import dirname, abspath, join, basename, splitext, exists from subprocess import check_call, check_output from re import compile +from pprint import pprint + here = dirname(abspath(__file__)) typedef_tmpl = 'typedef\s+enum\s*\{([^\}]+)\}\s*' @@ -74,6 +76,35 @@ def filled(): return result +def reduce_(data): + for key, values in data.items(): + print(key.upper() + '---------------------------') + seen = {} + for i, value in enumerate(values): + copied = value.copy() + version = copied.pop('_version') + if copied == seen: + values[i] = None + else: + print(' version ' + str(version)) + copied_set = set(copied.items()) + seen_set = set(seen.items()) + added = dict(copied_set - seen_set) + removed = dict(seen_set - copied_set) + + if added: + print(' + ' + str(added)) + if removed: + print(' - ' + str(removed)) + + seen = copied + + data[key] = filter(None, values) + + +min_version = (6, 5) + + def main(): downloads = join(here, 'downloads') archives = glob(join(downloads, '*.tar.bz2')) @@ -81,7 +112,13 @@ def main(): directories = [] for archive in archives: directory, _ = splitext(splitext(archive)[0]) - directories.append(directory) + + version_str = basename(directory).split('-', 1)[1].replace('-', '.') + version = tuple(int(v) for v in version_str.split('.')) + if version < min_version: + continue + + directories.append((version, directory)) if exists(directory): continue @@ -89,10 +126,20 @@ def main(): print('Unpacking ' + basename(archive)) check_call(['tar', '-C', downloads, '-xf', archive]) - for directory in directories: - process(directory) + data = dict((k, []) for k in enums) + for version, directory in sorted(directories): + result = process(directory) + + for name, values in result.items(): + values['_version'] = version[:-1] + data[name].append(values) + + reduce_(data) + + with open(join(here, 'data.py'), 'w') as f: + pprint(data, f) - return directories + return data if __name__ == '__main__':