From ec3d2ded1198b9093b93f51baad2f07e7e8184e9 Mon Sep 17 00:00:00 2001 From: Miro HronĨok Date: Oct 10 2018 13:45:38 +0000 Subject: Check what's removed --- diff --git a/depython2ize.py b/depython2ize.py index 6fb3107..bf52819 100755 --- a/depython2ize.py +++ b/depython2ize.py @@ -1,6 +1,7 @@ #!/usr/bin/python3 import argparse +import json import os import pathlib import subprocess @@ -16,6 +17,7 @@ parser.add_argument('-b', '--bumpspec', action='store_true') parser.add_argument('-c', '--commit', action='store_true') parser.add_argument('-u', '--user') parser.add_argument('-w', '--write', action='store_true') +parser.add_argument('-r', '--results', action='store') parser.add_argument('--keep-py3dir', action='store_true') parser.add_argument('dirname', type=pathlib.Path, nargs='+') opts = parser.parse_args() @@ -33,6 +35,13 @@ def resolve_macro(specfile, macro): def is_requires(type, pattern, line): return re.match(rf'{type}:\s*({pattern})', line) is not None +def produced_packages(dirname, specfile): + command = ['rpm', '--define', f'_sourcedir {dirname}', + '--define', 'dist .fc30', '-q', '--qf', '%{NAME}\n', + '--specfile', f'{specfile}'] + output = subprocess.check_output(command, universal_newlines=True) + return set(output.splitlines()) + def dprint(*args, **kwargs): if opts.debug: print(*args, **kwargs) @@ -44,6 +53,12 @@ for dirname in opts.dirname: specfile, = dirname.glob('*.spec') print(f'==== {specfile}') + try: + old_packages = produced_packages(dirname, specfile) + except subprocess.CalledProcessError: + print('CANNOT PARSE SPEC') + continue + new = pathlib.Path(f'{specfile}.tmp') try: # remove .tmp file to not leave obsolete stuff in case we bail out @@ -157,6 +172,25 @@ for dirname in opts.dirname: cmd += ['-u', opts.user] subprocess.check_call(cmd) + try: + new_packages = produced_packages(dirname, new) + except subprocess.CalledProcessError: + print('CANNOT PARSE SPEC') + continue + removed_packages = old_packages - new_packages + print('Removed packages:', ', '.join(sorted(removed_packages))) + if opts.results: + ok = True + with open(opts.results) as f: + results = json.load(f) + for pkg in removed_packages: + if pkg not in results or results[pkg]['verdict'] != 'drop_now': + print(f'CANNOT REMOVE {pkg}') + ok = False + continue + if not ok: + continue + if opts.diff: subprocess.call(['git', 'diff', f'-U{opts.U}', '--no-index', specfile, new])