From 7e0afd5da2fc25c0c3bc2639bbcd402df49ad698 Mon Sep 17 00:00:00 2001 From: Zbigniew Jędrzejewski-Szmek Date: Sep 20 2021 10:47:37 +0000 Subject: fedora: check existing spec file for rpmautospec If we have a new file: assume yes. If there was an old file, convert only when the old file had %autochangelog. The regexp for %autochangelog is taken from https://pagure.io/fedora-infra/rpmautospec/pull-request/219. --- diff --git a/rust2rpm/__main__.py b/rust2rpm/__main__.py index 475c594..8e882b3 100644 --- a/rust2rpm/__main__.py +++ b/rust2rpm/__main__.py @@ -5,6 +5,7 @@ from datetime import datetime, timezone import difflib import itertools import os +import pathlib import re import shlex import shutil @@ -258,9 +259,24 @@ def to_list(s): return [] return list(filter(None, (l.strip() for l in s.splitlines()))) +def detect_rpmautospec(default_target, spec_file): + # We default to on only for selected distros for now… + if default_target not in {"fedora"}: + return False + + try: + text = spec_file.read_text() + except FileNotFoundError: + # A new file, let's try the new thing. + return True + + # We are redoing an existing spec file. Figure out if it had + # %autochangelog enabled before. + autochangelog_re = r"^\s*%(?:autochangelog|\{\??autochangelog\})\b" + return any(re.match(autochangelog_re, line) for line in text.splitlines()) + def main(): default_target = get_default_target() - default_rpmautospec = default_target in {"fedora"} parser = argparse.ArgumentParser("rust2rpm", formatter_class=argparse.RawTextHelpFormatter) @@ -279,7 +295,7 @@ def main(): help="Do initial patching of Cargo.toml") parser.add_argument("-s", "--store-crate", action="store_true", help="Store crate in current directory") - parser.add_argument("-a", "--rpmautospec", action="store_true", default=default_rpmautospec, + parser.add_argument("-a", "--rpmautospec", action="store_true", help="Use autorelease and autochangelog features") parser.add_argument("--all-features", action="store_true", help="Activate all available features") @@ -340,8 +356,22 @@ def main(): raise ValueError("No bins and no libs") kwargs["include_devel"] = is_lib + if args.suffix is not None: + if metadata.name[-1].isdigit(): + suffix = f'-{args.suffix}' + else: + suffix = args.suffix + else: + suffix = "" + kwargs["pkg_suffix"] = suffix + spec_file = pathlib.Path(f"rust-{metadata.name}{suffix}.spec") + kwargs["auto_changelog_entry"] = not args.no_auto_changelog_entry - kwargs["rpmautospec"] = args.rpmautospec + + if args.rpmautospec: + kwargs["rpmautospec"] = True + else: + kwargs["rpmautospec"] = detect_rpmautospec(default_target, spec_file) if args.target in {"fedora", "mageia", "opensuse"}: kwargs["include_build_requires"] = True @@ -394,15 +424,6 @@ def main(): kwargs["distconf"] = conf[args.target] - if args.suffix is not None: - if metadata.name[-1].isdigit(): - suffix = f'-{args.suffix}' - else: - suffix = args.suffix - else: - suffix = "" - kwargs["pkg_suffix"] = suffix - spec_file = f"rust-{metadata.name}{suffix}.spec" spec_contents = template.render(md=metadata, patch_file=patch_file, **kwargs) if args.stdout: print(f"# {spec_file}")