X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=sort-pkgs;h=7b1fa4199e4901c1e459d4f0d0b5e195546ad171;hb=9439a215500ef79bd92e3c1a8f80932c8c3ee57c;hp=92de6930887d4a2d91693580695dc510cdd1780d;hpb=1920deb79f497eb6b1ec6771b85c09f59f1bac60;p=packages%2Frpm-build-tools.git diff --git a/sort-pkgs b/sort-pkgs index 92de693..7b1fa41 100755 --- a/sort-pkgs +++ b/sort-pkgs @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python3 """ This script tries to set ordering in which packages ought to be sent to builders. @@ -12,50 +12,69 @@ import os import re import sys -PATTERN = re.compile('BuildRequires:\s+(.*?)(\s|$|-devel)') -DIR = '/home/users/builder/rpm/packages' - -packages = {} -packages_res = {} - -def build_requires(name): - global packages - res = [] - with open(os.path.join(DIR, name, name + '.spec'), 'r') as f: - for line in f: - br = PATTERN.match(line) - if br: - p = br.group(1) - if p in packages: - res.append(p) - return res - -def print_packages(p): - global packages, packages_res - - if not packages_res[p]: - packages_res[p] = 1 - for pp in packages[p]: - if not packages_res[pp]: - print_packages(pp) - print p +BR_PATTERN = re.compile('BuildRequires:\s+(.*?)(\s|$)') +PACKAGE_PATTERN_WITH_N = re.compile('%package\s+-n\s+(.*)') +PACKAGE_PATTERN = re.compile('%package\s+(.*)') + +DIR = os.getenv("HOME") + '/rpm/packages' + +BUILD_REQUIRES = {} +PACKAGES = {} +SPECS = {} +VISITED = {} + + +def parse_spec(name): + global PACKAGES, SPECS, BUILD_REQUIRES, VISITED + res = [] + try: + with open(os.path.join(DIR, name, name + '.spec'), 'r') as f: + for line in f: + br = BR_PATTERN.match(line) + if br: + p = br.group(1) + res.append(p) + if line.startswith('%package'): + pn = PACKAGE_PATTERN_WITH_N.match(line) + if pn: + package = pn.group(1) + PACKAGES[package] = name + else: + pn = PACKAGE_PATTERN.match(line) + if pn: + ext = pn.group(1) + if ext: + package = name + '-' + ext + PACKAGES[package] = name + BUILD_REQUIRES[name] = res[:] + PACKAGES[name] = name + SPECS[name] = True + VISITED[name] = False + except: + pass + + +def print_spec(spec): + global PACKAGES, SPECS, BUILD_REQUIRES, VISITED + + if not VISITED[spec]: + VISITED[spec] = True + for br in BUILD_REQUIRES[spec]: + name = PACKAGES.get(br, '') + if name in SPECS: + if not VISITED[name]: + print_spec(name) + print(spec) + if __name__ == "__main__": - if len(sys.argv) < 2: - print "Usage: %s filename" % sys.argv[0] - sys.exit(1) - with open(sys.argv[1], 'r') as f: - for line in f: - p = line.rstrip() - packages[p] = [] - packages_res[p] = 0 - for p in packages.keys(): - res = build_requires(p) - if res: - packages[p] = res[:] - -# for p in packages.keys(): -# print p, packages[p] - - for p in packages.keys(): - print_packages(p) + if len(sys.argv) < 2: + print("Usage: %s filename" % sys.argv[0]) + sys.exit(1) + with open(sys.argv[1], 'r') as f: + for line in f: + spec = line.rstrip() + parse_spec(spec) + + for spec in SPECS: + print_spec(spec)