Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-specfile for openSUSE:Factory
checked in at 2023-02-27 12:55:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-specfile (Old)
and /work/SRC/openSUSE:Factory/.python-specfile.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-specfile"
Mon Feb 27 12:55:32 2023 rev:8 rq:1067894 version:0.14.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-specfile/python-specfile.changes
2023-02-06 14:15:57.192743385 +0100
+++
/work/SRC/openSUSE:Factory/.python-specfile.new.31432/python-specfile.changes
2023-02-27 12:55:33.651493671 +0100
@@ -1,0 +2,9 @@
+Sat Feb 25 12:10:44 UTC 2023 - David Anes <[email protected]>
+
+- Update to version 0.14.0:
+ * Fixed a bug that broke parsing in case spec file contained
+ conditionalized macro definitions or similar constructs
+ * Specfile no longer depends on rpm-py-installer, it now depends
+ directly on rpm.
+
+-------------------------------------------------------------------
Old:
----
specfile-0.13.2.tar.gz
New:
----
specfile-0.14.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-specfile.spec ++++++
--- /var/tmp/diff_new_pack.zWELu8/_old 2023-02-27 12:55:34.227497222 +0100
+++ /var/tmp/diff_new_pack.zWELu8/_new 2023-02-27 12:55:34.231497247 +0100
@@ -18,7 +18,7 @@
%define skip_python38 1
Name: python-specfile
-Version: 0.13.2
+Version: 0.14.0
Release: 0
Summary: A library for parsing and manipulating RPM spec files
License: MIT
++++++ specfile-0.13.2.tar.gz -> specfile-0.14.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/specfile-0.13.2/.github/workflows/prepare-release.yml
new/specfile-0.14.0/.github/workflows/prepare-release.yml
--- old/specfile-0.13.2/.github/workflows/prepare-release.yml 2023-01-30
14:24:54.000000000 +0100
+++ new/specfile-0.14.0/.github/workflows/prepare-release.yml 2023-02-23
17:10:09.000000000 +0100
@@ -17,7 +17,7 @@
with:
fetch-depth: 0
- name: Prepare release content
- uses: packit/prepare-release@v0
+ uses: packit/prepare-release@v1
with:
version: ${{ inputs.version }}
specfiles: fedora/python-specfile.spec
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/specfile-0.13.2/.github/workflows/update-constants.yml
new/specfile-0.14.0/.github/workflows/update-constants.yml
--- old/specfile-0.13.2/.github/workflows/update-constants.yml 1970-01-01
01:00:00.000000000 +0100
+++ new/specfile-0.14.0/.github/workflows/update-constants.yml 2023-02-23
17:10:09.000000000 +0100
@@ -0,0 +1,42 @@
+name: Update constants from RPM sources
+on:
+ workflow_dispatch:
+ schedule:
+ - cron: "0 0 1 * *"
+
+jobs:
+ update-constants:
+ # To not run in forks
+ if: github.repository_owner == 'packit'
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/setup-python@v4
+ with:
+ python-version: "3.11"
+ - name: Install Python dependencies
+ run: pip install --upgrade click pyparsing
+ - name: Checkout RPM source tree
+ uses: actions/checkout@v3
+ with:
+ repository: "rpm-software-management/rpm"
+ path: "rpm-source-tree"
+ - name: Update constants
+ id: update_constants
+ run: |
+ python scripts/update_constants.py specfile/constants.py
rpm-source-tree/
+ case $? in
+ 0) echo "pr=true" >> $GITHUB_OUTPUT;;
+ 100) echo "pr=false" >> $GITHUB_OUTPUT;;
+ *) exit $?;;
+ esac
+ - name: Create Pull Request
+ if: steps.update_constants.outputs.pr == 'true'
+ uses: peter-evans/create-pull-request@v4
+ with:
+ add-paths: specfile/constants.py
+ commit-message: Update constants
+ title: Update constants
+ body: Update `specfile/constants.py` from RPM sources
+ delete-branch: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.13.2/CHANGELOG.md
new/specfile-0.14.0/CHANGELOG.md
--- old/specfile-0.13.2/CHANGELOG.md 2023-01-30 14:24:54.000000000 +0100
+++ new/specfile-0.14.0/CHANGELOG.md 2023-02-23 17:10:09.000000000 +0100
@@ -1,3 +1,8 @@
+# 0.14.0
+
+- Fixed a bug that broke parsing in case spec file contained conditionalized
macro definitions or similar constructs. (#209)
+- Specfile no longer depends on rpm-py-installer, it now depends directly on
rpm. (#207)
+
# 0.13.2
- Fixed infinite loop that occured when section options were followed by
whitespace. (#197)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.13.2/PKG-INFO new/specfile-0.14.0/PKG-INFO
--- old/specfile-0.13.2/PKG-INFO 2023-01-30 14:25:04.099290000 +0100
+++ new/specfile-0.14.0/PKG-INFO 2023-02-23 17:10:24.365865700 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: specfile
-Version: 0.13.2
+Version: 0.14.0
Summary: A library for parsing and manipulating RPM spec files.
Home-page: https://github.com/packit/specfile
Author: Red Hat
@@ -228,6 +228,9 @@
del patches[2]
# inserting a patch with a specific number
patches.insert_numbered(999, 'final.patch')
+
+# adding a single patch
+specfile.add_patch('necessary.patch', comment='a human-friendly comment to the
patch')
```
#### Other attributes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.13.2/README.md
new/specfile-0.14.0/README.md
--- old/specfile-0.13.2/README.md 2023-01-30 14:24:54.000000000 +0100
+++ new/specfile-0.14.0/README.md 2023-02-23 17:10:09.000000000 +0100
@@ -201,6 +201,9 @@
del patches[2]
# inserting a patch with a specific number
patches.insert_numbered(999, 'final.patch')
+
+# adding a single patch
+specfile.add_patch('necessary.patch', comment='a human-friendly comment to the
patch')
```
#### Other attributes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.13.2/fedora/python-specfile.spec
new/specfile-0.14.0/fedora/python-specfile.spec
--- old/specfile-0.13.2/fedora/python-specfile.spec 2023-01-30
14:24:54.000000000 +0100
+++ new/specfile-0.14.0/fedora/python-specfile.spec 2023-02-23
17:10:09.000000000 +0100
@@ -13,7 +13,7 @@
Name: python-specfile
-Version: 0.13.2
+Version: 0.14.0
Release: 1%{?dist}
Summary: A library for parsing and manipulating RPM spec files
@@ -41,8 +41,6 @@
%prep
%autosetup -p1 -n specfile-%{version}
-# Use packaged RPM python bindings downstream
-sed -i 's/rpm-py-installer/rpm/' setup.cfg
%generate_buildrequires
@@ -69,6 +67,9 @@
%changelog
+* Thu Feb 23 2023 Packit Team <[email protected]> - 0.14.0-1
+- New upstream release 0.14.0
+
* Mon Jan 30 2023 Packit Team <[email protected]> - 0.13.2-1
- New upstream release 0.13.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.13.2/scripts/extract.py
new/specfile-0.14.0/scripts/extract.py
--- old/specfile-0.13.2/scripts/extract.py 1970-01-01 01:00:00.000000000
+0100
+++ new/specfile-0.14.0/scripts/extract.py 2023-02-23 17:10:09.000000000
+0100
@@ -0,0 +1,198 @@
+#!/usr/bin/env python3
+
+# Copyright Contributors to the Packit project.
+# SPDX-License-Identifier: MIT
+
+from pathlib import Path
+from typing import List
+
+import click
+from pyparsing import (
+ Combine,
+ Group,
+ Literal,
+ ParserElement,
+ Suppress,
+ Word,
+ c_style_comment,
+ dbl_quoted_string,
+ delimited_list,
+ pyparsing_common,
+ remove_quotes,
+ srange,
+)
+
+# automatically suppress all string literals
+ParserElement.inline_literals_using(Suppress)
+
+
+def extract_sections(filename: Path) -> List[str]:
+ """
+ Extracts section names from a constant array looking like this:
+
+ static const struct PartRec {
+ int part;
+ size_t len;
+ const char * token;
+ } partList[] = {
+ { PART_PREAMBLE, LEN_AND_STR("%package")},
+ { PART_PREP, LEN_AND_STR("%prep")},
+ ...
+ {0, 0, 0}
+ };
+
+ Args:
+ filename: Path to the file to extract sections from.
+
+ Returns:
+ List of section names.
+ """
+ constant = Word(srange("[A-Z_]")).suppress()
+ name = dbl_quoted_string.set_parse_action(remove_quotes)
+ macro = "LEN_AND_STR(" + name + ")"
+ item = "{" + Suppress(constant) + "," + macro + "}"
+ sentinel = Suppress("{" + delimited_list(Literal("0")) + "}")
+ parser = (
+ Suppress("partList[]") + "=" + "{" + delimited_list(item) + "," +
sentinel + "}"
+ )
+ parser.ignore(c_style_comment)
+ result = parser.search_string(filename.read_text(), max_matches=1)
+ if not result:
+ return []
+ return [s.lstrip("%") for s in result[0]]
+
+
+def extract_tags(filename: Path, with_args: bool = False) -> List[str]:
+ """
+ Extracts tag names from a constant array looking like this:
+
+ static struct PreambleRec_s const preambleList[] = {
+ {RPMTAG_NAME, 0, 0, 1, LEN_AND_STR("name")},
+ {RPMTAG_VERSION, 0, 0, 1, LEN_AND_STR("version")},
+ ...
+ {0, 0, 0, 0}
+ };
+
+ Args:
+ filename: Path to the file to extract tags from.
+ with_args: Include only tags that accept arguments.
+
+ Returns:
+ List of tag names.
+ """
+ constant = Word(srange("[A-Z_]")).suppress()
+ name = dbl_quoted_string("name").set_parse_action(remove_quotes)
+ macro = "LEN_AND_STR(" + name + ")"
+ number = pyparsing_common.number
+ item = Group(
+ "{"
+ + constant
+ + ","
+ + number("type")
+ + ","
+ + number.suppress()
+ + ","
+ + number.suppress()
+ + ","
+ + macro
+ + "}"
+ )
+ sentinel = Suppress("{" + delimited_list(Literal("0")) + "}")
+ parser = (
+ Suppress("preambleList[]")
+ + "="
+ + "{"
+ + delimited_list(item)
+ + ","
+ + sentinel
+ + "}"
+ )
+ parser.ignore(c_style_comment)
+ result = parser.search_string(filename.read_text(), max_matches=1)
+ if not result:
+ return []
+ return [t.name for t in result[0] if not with_args or t.type > 0]
+
+
+def extract_arches(filename: Path) -> List[str]:
+ """
+ Extracts arch names from a list looking like this:
+
+ arch_canon: athlon: athlon 1
+ arch_canon: geode: geode 1
+ ...
+ arch_canon: IP: sgi 7
+ ...
+ arch_canon: atariclone: m68kmint 13
+ ...
+
+ Args:
+ filename: Path to the file to extract arches from.
+
+ Returns:
+ List of arch names.
+ """
+ identifier = pyparsing_common.identifier
+ number = pyparsing_common.number
+ parser = (
+ Suppress("arch_canon:")
+ + Combine(identifier + ":")
+ + identifier.suppress()
+ + number.suppress()
+ )
+ result = parser.search_string(filename.read_text())
+ return [a[0] for a in result]
+
+
[email protected]()
+def extract():
+ pass
+
+
[email protected](
+ help="Extract section names from the specified source file (typically
build/parseSpec.c)."
+)
[email protected](
+ "filename",
+ type=click.Path(exists=True, dir_okay=False, path_type=Path),
+ required=True,
+)
+def sections(filename: Path) -> None:
+ for section in extract_sections(filename):
+ click.echo(section)
+
+
[email protected](
+ help="Extract tag names from the specified source file (typically
build/parsePreamble.c)."
+)
[email protected](
+ "filename",
+ type=click.Path(exists=True, dir_okay=False, path_type=Path),
+ required=True,
+)
[email protected](
+ "--with-args",
+ is_flag=True,
+ default=False,
+ help="List only tags that accept arguments.",
+)
+def tags(filename: Path, with_args: bool = False) -> None:
+ for tag in extract_tags(filename, with_args):
+ click.echo(tag)
+
+
[email protected](
+ help="Extract arch names from the specified template file (typically
rpmrc.in)."
+)
[email protected](
+ "filename",
+ type=click.Path(exists=True, dir_okay=False, path_type=Path),
+ required=True,
+)
+def arches(filename: Path) -> None:
+ for arch in extract_arches(filename):
+ click.echo(arch)
+
+
+if __name__ == "__main__":
+ extract()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.13.2/scripts/update_constants.py
new/specfile-0.14.0/scripts/update_constants.py
--- old/specfile-0.13.2/scripts/update_constants.py 1970-01-01
01:00:00.000000000 +0100
+++ new/specfile-0.14.0/scripts/update_constants.py 2023-02-23
17:10:09.000000000 +0100
@@ -0,0 +1,58 @@
+#!/usr/bin/env python3
+
+# Copyright Contributors to the Packit project.
+# SPDX-License-Identifier: MIT
+
+import re
+import sys
+from pathlib import Path
+
+import click
+from extract import extract_arches, extract_sections, extract_tags
+
+SECTIONS_SOURCE = Path("build/parseSpec.c")
+TAGS_SOURCE = Path("build/parsePreamble.c")
+ARCHES_SOURCE = Path("rpmrc.in")
+
+
[email protected](
+ help="Update CONSTANTS_FILE with constants extracted from RPM_SOURCE_TREE."
+)
[email protected](
+ "constants_file",
+ type=click.Path(exists=True, dir_okay=False, path_type=Path),
+ required=True,
+ default=Path("specfile/constants.py"),
+)
[email protected](
+ "rpm_source_tree",
+ type=click.Path(exists=True, file_okay=False, path_type=Path),
+ required=True,
+)
+def update_constants(constants_file: Path, rpm_source_tree: Path) -> None:
+ section_names = extract_sections(rpm_source_tree / SECTIONS_SOURCE)
+ tag_names = extract_tags(rpm_source_tree / TAGS_SOURCE)
+ tags_with_args = extract_tags(rpm_source_tree / TAGS_SOURCE,
with_args=True)
+ arch_names = extract_arches(rpm_source_tree / ARCHES_SOURCE)
+ content = original_content = constants_file.read_text()
+ for constant, values in (
+ ("SECTION_NAMES", section_names),
+ ("TAG_NAMES", tag_names),
+ ("TAGS_WITH_ARGS", tags_with_args),
+ ("ARCH_NAMES", arch_names),
+ ):
+ formatted_values = "\n".join([f' "{v}",' for v in
sorted(set(values))])
+ content = re.sub(
+ rf"({constant}\s*=\s*{{).*?(}})",
+ rf"\g<1>\n{formatted_values}\n\g<2>",
+ content,
+ flags=re.DOTALL,
+ )
+ if content == original_content:
+ sys.exit(100)
+ return
+ constants_file.write_text(content)
+
+
+if __name__ == "__main__":
+ update_constants()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.13.2/setup.cfg
new/specfile-0.14.0/setup.cfg
--- old/specfile-0.13.2/setup.cfg 2023-01-30 14:25:04.099290000 +0100
+++ new/specfile-0.14.0/setup.cfg 2023-02-23 17:10:24.365865700 +0100
@@ -32,7 +32,7 @@
[options]
packages = find:
install_requires =
- rpm-py-installer
+ rpm
python_requires = >=3.9
include_package_data = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.13.2/specfile/constants.py
new/specfile-0.14.0/specfile/constants.py
--- old/specfile-0.13.2/specfile/constants.py 2023-01-30 14:24:54.000000000
+0100
+++ new/specfile-0.14.0/specfile/constants.py 2023-02-23 17:10:09.000000000
+0100
@@ -3,153 +3,157 @@
# valid section names as defined in build/parseSpec.c in RPM source
SECTION_NAMES = {
- "package",
- "prep",
- "generate_buildrequires",
- "conf",
"build",
- "install",
+ "changelog",
"check",
"clean",
- "preun",
- "postun",
- "pretrans",
+ "conf",
+ "description",
+ "end",
+ "files",
+ "filetrigger",
+ "filetriggerin",
+ "filetriggerpostun",
+ "filetriggerun",
+ "generate_buildrequires",
+ "install",
+ "package",
+ "patchlist",
+ "post",
"posttrans",
+ "postun",
+ "postuntrans",
"pre",
- "post",
- "files",
- "changelog",
- "description",
+ "prep",
+ "pretrans",
+ "preun",
+ "preuntrans",
+ "sepolicy",
+ "sourcelist",
+ "transfiletrigger",
+ "transfiletriggerin",
+ "transfiletriggerpostun",
+ "transfiletriggerun",
+ "trigger",
+ "triggerin",
"triggerpostun",
"triggerprein",
"triggerun",
- "triggerin",
- "trigger",
"verifyscript",
- "sepolicy",
- "filetriggerin",
- "filetrigger",
- "filetriggerun",
- "filetriggerpostun",
- "transfiletriggerin",
- "transfiletrigger",
- "transfiletriggerun",
- "transfiletriggerpostun",
- "end",
- "patchlist",
- "sourcelist",
}
SIMPLE_SCRIPT_SECTIONS = {
- "conf",
- "generate_buildrequires",
"build",
- "install",
"check",
"clean",
+ "conf",
+ "generate_buildrequires",
+ "install",
}
SCRIPT_SECTIONS = {
- "pre",
+ "filetrigger",
+ "filetriggerin",
+ "filetriggerpostun",
+ "filetriggerun",
"post",
- "preun",
+ "posttrans",
"postun",
+ "postuntrans",
+ "pre",
"pretrans",
- "posttrans",
+ "preun",
"preuntrans",
- "postuntrans",
- "verifyscript",
- "triggerprein",
- "trigger",
- "triggerin",
- "triggerun",
- "triggerpostun",
- "filetrigger",
- "filetriggerin",
- "filetriggerun",
- "filetriggerpostun",
"transfiletrigger",
"transfiletriggerin",
- "transfiletriggerun",
"transfiletriggerpostun",
+ "transfiletriggerun",
+ "trigger",
+ "triggerin",
+ "triggerpostun",
+ "triggerprein",
+ "triggerun",
+ "verifyscript",
}
# valid section option strings taken from build/parseSpec.c,
build/parsePreamble.c,
# build/parseDescription.c, build/parseFiles.c, build/parsePolicies.c and
build/parseScript.c
# in RPM source
SECTION_OPTIONS = {
- "package": "n:",
"description": "n:l:",
"files": "n:f:",
+ "package": "n:",
"sepolicy": "n:",
}
SECTION_OPTIONS.update({s: "n:f:p:P:eq" for s in SCRIPT_SECTIONS})
# valid tag names as defined in build/parsePreamble.c in RPM source
TAG_NAMES = {
- "name",
- "version",
- "release",
- "epoch",
- "summary",
- "license",
+ "autoprov",
+ "autoreq",
+ "autoreqprov",
+ "bugurl",
+ "buildarch",
+ "buildarchitectures",
+ "buildconflicts",
+ "buildprereq",
+ "buildrequires",
+ "buildroot",
+ "conflicts",
"distribution",
+ "disttag",
"disturl",
- "vendor",
- "group",
- "packager",
- "url",
- "vcs",
- "source",
- "patch",
- "nosource",
- "nopatch",
+ "docdir",
+ "enhances",
+ "epoch",
"excludearch",
- "exclusivearch",
"excludeos",
+ "exclusivearch",
"exclusiveos",
+ "group",
"icon",
+ "license",
+ "modularitylabel",
+ "name",
+ "nopatch",
+ "nosource",
+ "obsoletes",
+ "orderwithrequires",
+ "packager",
+ "patch",
+ "prefix",
+ "prefixes",
+ "prereq",
"provides",
- "requires",
"recommends",
+ "release",
+ "removepathpostfixes",
+ "requires",
+ "source",
+ "sourcelicense",
"suggests",
+ "summary",
"supplements",
- "enhances",
- "prereq",
- "conflicts",
- "obsoletes",
- "prefixes",
- "prefix",
- "buildroot",
- "buildarchitectures",
- "buildarch",
- "buildconflicts",
- "buildprereq",
- "buildrequires",
- "autoreqprov",
- "autoreq",
- "autoprov",
- "docdir",
- "disttag",
- "bugurl",
"translationurl",
"upstreamreleases",
- "orderwithrequires",
- "removepathpostfixes",
- "modularitylabel",
+ "url",
+ "vcs",
+ "vendor",
+ "version",
}
# tags that can optionally have an argument (language or qualifier)
TAGS_WITH_ARG = {
- "summary",
"group",
- "requires",
- "prereq",
"orderwithrequires",
+ "prereq",
+ "requires",
+ "summary",
}
# canonical architecture names as defined in rpmrc.in in RPM source
ARCH_NAMES = {
+ "IP",
"aarch64",
"alpha",
"alphaev5",
@@ -187,7 +191,6 @@
"i686",
"ia32e",
"ia64",
- "IP",
"loongarch64",
"m68k",
"m68kmint",
@@ -234,5 +237,8 @@
"sun4m",
"sun4u",
"x86_64",
+ "x86_64_v2",
+ "x86_64_v3",
+ "x86_64_v4",
"xtensa",
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.13.2/specfile/tags.py
new/specfile-0.14.0/specfile/tags.py
--- old/specfile-0.13.2/specfile/tags.py 2023-01-30 14:24:54.000000000
+0100
+++ new/specfile-0.14.0/specfile/tags.py 2023-02-23 17:10:09.000000000
+0100
@@ -493,7 +493,7 @@
)
buffer = []
else:
- buffer.append(line)
+ buffer.append(prefix + line + suffix)
return cls(data, buffer)
def get_raw_section_data(self) -> List[str]:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.13.2/specfile.egg-info/PKG-INFO
new/specfile-0.14.0/specfile.egg-info/PKG-INFO
--- old/specfile-0.13.2/specfile.egg-info/PKG-INFO 2023-01-30
14:25:04.000000000 +0100
+++ new/specfile-0.14.0/specfile.egg-info/PKG-INFO 2023-02-23
17:10:24.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: specfile
-Version: 0.13.2
+Version: 0.14.0
Summary: A library for parsing and manipulating RPM spec files.
Home-page: https://github.com/packit/specfile
Author: Red Hat
@@ -228,6 +228,9 @@
del patches[2]
# inserting a patch with a specific number
patches.insert_numbered(999, 'final.patch')
+
+# adding a single patch
+specfile.add_patch('necessary.patch', comment='a human-friendly comment to the
patch')
```
#### Other attributes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.13.2/specfile.egg-info/SOURCES.txt
new/specfile-0.14.0/specfile.egg-info/SOURCES.txt
--- old/specfile-0.13.2/specfile.egg-info/SOURCES.txt 2023-01-30
14:25:04.000000000 +0100
+++ new/specfile-0.14.0/specfile.egg-info/SOURCES.txt 2023-02-23
17:10:24.000000000 +0100
@@ -19,6 +19,7 @@
.github/workflows/opened-issues-to-the-board.yml
.github/workflows/prepare-release.yml
.github/workflows/pypi-publish.yml
+.github/workflows/update-constants.yml
fedora/python-specfile.spec
files/install-requirements-pip.yaml
files/install-requirements-rpms.yaml
@@ -34,6 +35,8 @@
plans/main.fmf
plans/packit-integration.fmf
plans/smoke.fmf
+scripts/extract.py
+scripts/update_constants.py
specfile/__init__.py
specfile/changelog.py
specfile/constants.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.13.2/specfile.egg-info/requires.txt
new/specfile-0.14.0/specfile.egg-info/requires.txt
--- old/specfile-0.13.2/specfile.egg-info/requires.txt 2023-01-30
14:25:04.000000000 +0100
+++ new/specfile-0.14.0/specfile.egg-info/requires.txt 2023-02-23
17:10:24.000000000 +0100
@@ -1,4 +1,4 @@
-rpm-py-installer
+rpm
[testing]
pytest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.13.2/tests/unit/test_tags.py
new/specfile-0.14.0/tests/unit/test_tags.py
--- old/specfile-0.13.2/tests/unit/test_tags.py 2023-01-30 14:24:54.000000000
+0100
+++ new/specfile-0.14.0/tests/unit/test_tags.py 2023-02-23 17:10:09.000000000
+0100
@@ -27,6 +27,8 @@
Section(
"package",
data=[
+ "%{?scl:%scl_package scltest}",
+ "",
"%global ver_major 1",
"%global ver_minor 0",
"",
@@ -51,6 +53,7 @@
],
)
)
+ assert tags[0].comments._preceding_lines[0] == "%{?scl:%scl_package
scltest}"
assert tags[0].name == "Name"
assert tags[0].comments[0].text == "this is a test package"
assert tags[0].comments[1].text == "not to be used in production"
@@ -82,7 +85,13 @@
Comment("this is a test package"),
Comment("not to be used in production"),
],
- ["%global ver_major 1", "%global ver_minor 0", ""],
+ [
+ "%{?scl:%scl_package scltest}",
+ "",
+ "%global ver_major 1",
+ "%global ver_minor 0",
+ "",
+ ],
),
),
Tag("Version", "%{ver_major}.%{ver_minor}", ": ", Comments()),
@@ -107,6 +116,8 @@
[],
)
assert tags.get_raw_section_data() == [
+ "%{?scl:%scl_package scltest}",
+ "",
"%global ver_major 1",
"%global ver_minor 0",
"",