From 3afbd3e6a63e5a4bc9e0f3ca9764750389350e8b Mon Sep 17 00:00:00 2001 From: Zbigniew Jędrzejewski-Szmek Date: Dec 17 2017 20:30:19 +0000 Subject: Improve detection of global settings --- diff --git a/renamer.py b/renamer.py index 92c2ce1..b8eac26 100755 --- a/renamer.py +++ b/renamer.py @@ -165,9 +165,6 @@ for dirname in opts.dirname: if modname.endswith('-python'): modname = modname[:-7] - COMMENT = (f'Python 2 binary package renamed to python2-{modname}\n' - ' See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3') - with open(specfile, 'rt') as f: lines = f.readlines() lines = [line.rstrip('\n') for line in lines] @@ -185,6 +182,9 @@ for dirname in opts.dirname: modname2 = modname[2:] if modname.startswith('py') else modname special_modname = False + COMMENT = (f'Python 2 binary package renamed to python2-{modname2 if special_modname else modname}\n' + ' See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3') + def python_package_pattern(stanza): return fr'(%{stanza}\s+)-n\s+(python-({re.escape(modname)}|{re.escape(modname2)}|%{{[a-z_-]+}}))\s*$' def python_package_pattern2(stanza, suffix=''): @@ -234,6 +234,18 @@ for dirname in opts.dirname: print(f'{macroname} is not lowercase, using {modname} instead') macroname = modname + + # find start of first %package, in case description is below that + noarch = False + for k, line in enumerate(lines): + if line.startswith('%package'): + first_package = k + break + if re.match(r'BuildArch:\s+noarch', line): + noarch = True + else: + first_package = len(lines) + if need_to_rename: print(f'RENAMING EXISTING {need_to_rename} subpackage to python2-{macroname}') @@ -276,7 +288,7 @@ for dirname in opts.dirname: provides_j = line_i + 1 skip_our_provide_1 = False skip_our_provide_2 = special_modname - for k in reversed(range(line_i + 1, desc_j)): + for k in reversed(range(line_i + 1, min(first_package, desc_j))): match = re.match(fr'Provides:\s*python2?-({re.escape(macroname)}|{re.escape(modname)}|{re.escape(resolved)}|{re.escape(Modname)})', lines[k]) if match: @@ -307,8 +319,10 @@ for dirname in opts.dirname: provides += [f'%{{?python_provide:%python_provide python2-{Modname}}}'] if need_to_rename == 'python': provides += ['# Remove before F30', - 'Provides: %{name}-python%{?_isa} = %{version}-%{release}', - 'Obsoletes: %{name}-python < %{version}-%{release}'] + 'Provides: %{name}-python = %{version}-%{release}'] + if not noarch: + provides += ['Provides: %{name}-python%{?_isa} = %{version}-%{release}'] + provides += ['Obsoletes: %{name}-python < %{version}-%{release}'] lines[provides_j:provides_j] = provides @@ -318,7 +332,7 @@ for dirname in opts.dirname: # Try to detect packages which are already OK if any(line.startswith('%{?python_provide:%python_provide python2-') - for line in lines): + for line in lines[:first_package]): print('LOOKS-GOOD (%python_provide python2-*} is present') stats['LOOKS-GOOD'] += 1 continue @@ -385,8 +399,10 @@ for dirname in opts.dirname: # for us. if Modname == name: provides += ['# Remove before F30', - f'Provides: {name}%{{?_isa}} = %{{version}}-%{{release}}', - f'Obsoletes: {name} < %{{version}}-%{{release}}'] + f'Provides: {name} = %{{version}}-%{{release}}'] + if not noarch: + provides += [f'Provides: {name}%{{?_isa}} = %{{version}}-%{{release}}'] + provides += [f'Obsoletes: {name} < %{{version}}-%{{release}}'] for k in reversed(range(i)): match = re.match(fr'Provides:\s*python2?-({Modname}|{modname}|{macroname})\s*(?:=.*)', lines[k]) @@ -406,7 +422,7 @@ for dirname in opts.dirname: under_if = [] need_insert = False orig_position = len(requires) - for k in reversed(range(i)): + for k in reversed(range(min(first_package, i))): if lines[k].startswith('%endif') or lines[k].startswith('%else'): under_if.insert(0, lines[k].rstrip()) elif lines[k].startswith('%if'):