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-11-08 22:18:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-specfile (Old)
and /work/SRC/openSUSE:Factory/.python-specfile.new.17445 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-specfile"
Wed Nov 8 22:18:47 2023 rev:17 rq:1124208 version:0.24.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-specfile/python-specfile.changes
2023-10-30 22:11:39.226138880 +0100
+++
/work/SRC/openSUSE:Factory/.python-specfile.new.17445/python-specfile.changes
2023-11-08 22:20:06.744429080 +0100
@@ -1,0 +2,13 @@
+Wed Nov 8 10:08:44 UTC 2023 - Matej Cepl <[email protected]>
+
+- Update to 0.24.0:
+ - Improved type annotations for UserList subclasses. (#299)
+ - Macro definitions gained a new commented_out property
+ indicating that a macro definition is commented out. Another
+ new property, comment_out_style, determines if it is achieved
+ by using a %dnl (discard next line) directive (e.g. %dnl
+ %global prerelease beta2) or by replacing the starting % with
+ # (e.g. #global prerelease beta2). (#298)
+- Fix a bad Requires: %{python_module typing_extensions}
+
+-------------------------------------------------------------------
Old:
----
specfile-0.23.0.tar.gz
New:
----
specfile-0.24.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-specfile.spec ++++++
--- /var/tmp/diff_new_pack.Zk9ogp/_old 2023-11-08 22:20:07.256447889 +0100
+++ /var/tmp/diff_new_pack.Zk9ogp/_new 2023-11-08 22:20:07.256447889 +0100
@@ -17,7 +17,7 @@
Name: python-specfile
-Version: 0.23.0
+Version: 0.24.0
Release: 0
Summary: A library for parsing and manipulating RPM spec files
License: MIT
@@ -29,8 +29,8 @@
BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
-Requires: %{python_module typing_extensions}
Requires: python-rpm
+Requires: python-typing_extensions
BuildArch: noarch
# SECTION test requirements
BuildRequires: %{python_module flexmock}
++++++ specfile-0.23.0.tar.gz -> specfile-0.24.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.23.0/.pre-commit-config.yaml
new/specfile-0.24.0/.pre-commit-config.yaml
--- old/specfile-0.23.0/.pre-commit-config.yaml 2023-10-30 10:13:03.000000000
+0100
+++ new/specfile-0.24.0/.pre-commit-config.yaml 2023-11-06 18:15:33.000000000
+0100
@@ -4,11 +4,11 @@
repos:
- repo: https://github.com/asottile/pyupgrade
- rev: v3.14.0
+ rev: v3.15.0
hooks:
- id: pyupgrade
- repo: https://github.com/psf/black
- rev: 23.9.1
+ rev: 23.10.1
hooks:
- id: black
- repo: https://github.com/pre-commit/mirrors-prettier
@@ -16,7 +16,7 @@
hooks:
- id: prettier
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v4.4.0
+ rev: v4.5.0
hooks:
- id: check-added-large-files
- id: check-ast
@@ -44,14 +44,14 @@
- id: isort
args: [--profile, black]
- repo: https://github.com/pre-commit/mirrors-mypy
- rev: v1.5.1
+ rev: v1.6.1
hooks:
- id: mypy
args: [--show-error-codes, --ignore-missing-imports]
additional_dependencies:
[types-pkg_resources, types-requests, types-python-dateutil]
- repo: https://github.com/teemtee/tmt.git
- rev: 1.27.0
+ rev: 1.28.2
hooks:
- id: tmt-lint
# linting of the reverse-dependency tests requires internet access
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.23.0/CHANGELOG.md
new/specfile-0.24.0/CHANGELOG.md
--- old/specfile-0.23.0/CHANGELOG.md 2023-10-30 10:13:03.000000000 +0100
+++ new/specfile-0.24.0/CHANGELOG.md 2023-11-06 18:15:33.000000000 +0100
@@ -1,3 +1,8 @@
+# 0.24.0
+
+- Improved type annotations for `UserList` subclasses. (#299)
+- Macro definitions gained a new `commented_out` property indicating that a
macro definition is commented out. Another new property, `comment_out_style`,
determines if it is achieved by using a `%dnl` (discard next line) directive
(e.g. `%dnl %global prerelease beta2`) or by replacing the starting `%` with
`#` (e.g. `#global prerelease beta2`). (#298)
+
# 0.23.0
- Sources now have a `valid` property that indicates whether a source is valid
in the current context, meaning it is not present in a false branch of any
condition. (#295)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.23.0/PKG-INFO new/specfile-0.24.0/PKG-INFO
--- old/specfile-0.23.0/PKG-INFO 2023-10-30 10:13:11.669105000 +0100
+++ new/specfile-0.24.0/PKG-INFO 2023-11-06 18:15:41.694350700 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: specfile
-Version: 0.23.0
+Version: 0.24.0
Summary: A library for parsing and manipulating RPM spec files.
Home-page: https://github.com/packit/specfile
Author: Red Hat
@@ -49,9 +49,9 @@
Section is a spec file section, it has a well-defined name that starts with
_%_ character and that can optionally be followed by arguments.
-In this library, the starting _%_ of section name is ommited for convenience.
+In this library, the starting _%_ of section name is omitted for convenience.
-There is a special section internally called `%package`, often also referred
to as preamble, and it represents the content of the spec file that preceeds
the first named section (usually `%description`). This section contains the
main package metadata (tags). Metadata of subpackages are defined in subsequent
`%package` sections, that are not anonymous and are always followed by
arguments specifying the name of the subpackage (e.g. `%package doc` or
`%package -n completely-different-subpackage-name`).
+There is a special section internally called `%package`, often also referred
to as preamble, and it represents the content of the spec file that precedes
the first named section (usually `%description`). This section contains the
main package metadata (tags). Metadata of subpackages are defined in subsequent
`%package` sections, that are not anonymous and are always followed by
arguments specifying the name of the subpackage (e.g. `%package doc` or
`%package -n completely-different-subpackage-name`).
### Tag
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.23.0/README.md
new/specfile-0.24.0/README.md
--- old/specfile-0.23.0/README.md 2023-10-30 10:13:03.000000000 +0100
+++ new/specfile-0.24.0/README.md 2023-11-06 18:15:33.000000000 +0100
@@ -12,9 +12,9 @@
Section is a spec file section, it has a well-defined name that starts with
_%_ character and that can optionally be followed by arguments.
-In this library, the starting _%_ of section name is ommited for convenience.
+In this library, the starting _%_ of section name is omitted for convenience.
-There is a special section internally called `%package`, often also referred
to as preamble, and it represents the content of the spec file that preceeds
the first named section (usually `%description`). This section contains the
main package metadata (tags). Metadata of subpackages are defined in subsequent
`%package` sections, that are not anonymous and are always followed by
arguments specifying the name of the subpackage (e.g. `%package doc` or
`%package -n completely-different-subpackage-name`).
+There is a special section internally called `%package`, often also referred
to as preamble, and it represents the content of the spec file that precedes
the first named section (usually `%description`). This section contains the
main package metadata (tags). Metadata of subpackages are defined in subsequent
`%package` sections, that are not anonymous and are always followed by
arguments specifying the name of the subpackage (e.g. `%package doc` or
`%package -n completely-different-subpackage-name`).
### Tag
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.23.0/epel8/python-specfile.spec
new/specfile-0.24.0/epel8/python-specfile.spec
--- old/specfile-0.23.0/epel8/python-specfile.spec 2023-10-30
10:13:03.000000000 +0100
+++ new/specfile-0.24.0/epel8/python-specfile.spec 2023-11-06
18:15:33.000000000 +0100
@@ -5,7 +5,7 @@
Name: python-specfile
-Version: 0.23.0
+Version: 0.24.0
Release: 1%{?dist}
Summary: A library for parsing and manipulating RPM spec files
@@ -61,6 +61,9 @@
%changelog
+* Mon Nov 06 2023 Packit Team <[email protected]> - 0.24.0-1
+- New upstream release 0.24.0
+
* Sun Oct 29 2023 Packit Team <[email protected]> - 0.23.0-1
- New upstream release 0.23.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.23.0/fedora/python-specfile.spec
new/specfile-0.24.0/fedora/python-specfile.spec
--- old/specfile-0.23.0/fedora/python-specfile.spec 2023-10-30
10:13:03.000000000 +0100
+++ new/specfile-0.24.0/fedora/python-specfile.spec 2023-11-06
18:15:33.000000000 +0100
@@ -8,7 +8,7 @@
Name: python-specfile
-Version: 0.23.0
+Version: 0.24.0
Release: 1%{?dist}
Summary: A library for parsing and manipulating RPM spec files
@@ -70,6 +70,9 @@
%changelog
+* Mon Nov 06 2023 Packit Team <[email protected]> - 0.24.0-1
+- New upstream release 0.24.0
+
* Sun Oct 29 2023 Packit Team <[email protected]> - 0.23.0-1
- New upstream release 0.23.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.23.0/specfile/changelog.py
new/specfile-0.24.0/specfile/changelog.py
--- old/specfile-0.23.0/specfile/changelog.py 2023-10-30 10:13:03.000000000
+0100
+++ new/specfile-0.24.0/specfile/changelog.py 2023-11-06 18:15:33.000000000
+0100
@@ -1,7 +1,6 @@
# Copyright Contributors to the Packit project.
# SPDX-License-Identifier: MIT
-import collections
import copy
import datetime
import getpass
@@ -19,7 +18,7 @@
from specfile.macros import Macros
from specfile.sections import Section
from specfile.types import SupportsIndex
-from specfile.utils import EVR
+from specfile.utils import EVR, UserList
WEEKDAYS = ("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")
MONTHS = (
@@ -199,7 +198,7 @@
return cls(header, content, [""] if append_newline else None)
-class Changelog(collections.UserList):
+class Changelog(UserList[ChangelogEntry]):
"""
Class that represents a changelog.
@@ -326,7 +325,7 @@
Constructed instance of `Changelog` class.
"""
- def extract_following_lines(content):
+ def extract_following_lines(content: List[str]) -> List[str]:
following_lines: List[str] = []
while content and not content[-1].strip():
following_lines.insert(0, content.pop())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.23.0/specfile/conditions.py
new/specfile-0.24.0/specfile/conditions.py
--- old/specfile-0.23.0/specfile/conditions.py 2023-10-30 10:13:03.000000000
+0100
+++ new/specfile-0.24.0/specfile/conditions.py 2023-11-06 18:15:33.000000000
+0100
@@ -79,9 +79,10 @@
List of tuples in the form of (line, validity).
"""
excluded_lines = []
- for md in macro_definitions or []:
- position = md.get_position(macro_definitions)
- excluded_lines.append(range(position, position +
len(md.body.splitlines())))
+ if macro_definitions:
+ for md in macro_definitions:
+ position = md.get_position(macro_definitions)
+ excluded_lines.append(range(position, position +
len(md.body.splitlines())))
condition_regex = re.compile(
r"""
^
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.23.0/specfile/macro_definitions.py
new/specfile-0.24.0/specfile/macro_definitions.py
--- old/specfile-0.23.0/specfile/macro_definitions.py 2023-10-30
10:13:03.000000000 +0100
+++ new/specfile-0.24.0/specfile/macro_definitions.py 2023-11-06
18:15:33.000000000 +0100
@@ -1,33 +1,45 @@
# Copyright Contributors to the Packit project.
# SPDX-License-Identifier: MIT
-import collections
import copy
import re
+from enum import Enum, auto
from typing import TYPE_CHECKING, List, Optional, Tuple, Union, overload
from specfile.conditions import process_conditions
from specfile.formatter import formatted
from specfile.types import SupportsIndex
+from specfile.utils import UserList
if TYPE_CHECKING:
from specfile.specfile import Specfile
+class CommentOutStyle(Enum):
+ DNL = auto()
+ HASH = auto()
+
+
class MacroDefinition:
def __init__(
self,
name: str,
body: str,
is_global: bool,
+ commented_out: bool,
+ comment_out_style: CommentOutStyle,
whitespace: Tuple[str, str, str, str],
+ dnl_whitespace: str = "",
valid: bool = True,
preceding_lines: Optional[List[str]] = None,
) -> None:
self.name = name
self.body = body
self.is_global = is_global
+ self.commented_out = commented_out
+ self.comment_out_style = comment_out_style
self._whitespace = whitespace
+ self._dnl_whitespace = dnl_whitespace
self.valid = valid
self._preceding_lines = (
preceding_lines.copy() if preceding_lines is not None else []
@@ -40,7 +52,10 @@
self.name == other.name
and self.body == other.body
and self.is_global == other.is_global
+ and self.commented_out == other.commented_out
+ and self.comment_out_style == other.comment_out_style
and self._whitespace == other._whitespace
+ and self._dnl_whitespace == other._dnl_whitespace
and self._preceding_lines == other._preceding_lines
)
@@ -48,13 +63,21 @@
def __repr__(self) -> str:
return (
f"MacroDefinition({self.name!r}, {self.body!r},
{self.is_global!r}, "
- f"{self._whitespace!r}, {self.valid!r}, {self._preceding_lines!r})"
+ f"{self.commented_out!r}, {self.comment_out_style!r},
{self._whitespace!r}, "
+ f"{self.valid!r}, {self._preceding_lines!r})"
)
def __str__(self) -> str:
ws = self._whitespace
- macro = "%global" if self.is_global else "%define"
- return f"{ws[0]}{macro}{ws[1]}{self.name}{ws[2]}{self.body}{ws[3]}"
+ dnl = ""
+ sc = "%"
+ if self.commented_out:
+ if self.comment_out_style is CommentOutStyle.DNL:
+ dnl = f"%dnl{self._dnl_whitespace}"
+ elif self.comment_out_style is CommentOutStyle.HASH:
+ sc = "#"
+ macro = "global" if self.is_global else "define"
+ return
f"{ws[0]}{dnl}{sc}{macro}{ws[1]}{self.name}{ws[2]}{self.body}{ws[3]}"
def get_position(self, container: "MacroDefinitions") -> int:
"""
@@ -73,18 +96,25 @@
def get_raw_data(self) -> List[str]:
result = self._preceding_lines.copy()
ws = self._whitespace
- macro = "%global" if self.is_global else "%define"
+ dnl = ""
+ sc = "%"
+ if self.commented_out:
+ if self.comment_out_style is CommentOutStyle.DNL:
+ dnl = f"%dnl{self._dnl_whitespace}"
+ elif self.comment_out_style is CommentOutStyle.HASH:
+ sc = "#"
+ macro = "global" if self.is_global else "define"
body = self.body.splitlines()
if body:
body[-1] += ws[3]
else:
body = [ws[3]]
- result.append(f"{ws[0]}{macro}{ws[1]}{self.name}{ws[2]}{body[0]}")
+
result.append(f"{ws[0]}{dnl}{sc}{macro}{ws[1]}{self.name}{ws[2]}{body[0]}")
result.extend(body[1:])
return result
-class MacroDefinitions(collections.UserList):
+class MacroDefinitions(UserList[MacroDefinition]):
"""
Class that represents all macro definitions.
@@ -132,7 +162,7 @@
except ValueError:
raise AttributeError(name)
- def __setattr__(self, name: str, value: Union[MacroDefinition, List[str]])
-> None:
+ def __setattr__(self, name: str, value: Union[MacroDefinition, str]) ->
None:
if name not in self:
return super().__setattr__(name, value)
try:
@@ -249,7 +279,9 @@
r"""
^
(\s*) # optional preceding whitespace
- (%(?:global|define)) # scope-defining macro definition
+ (%dnl\s+)? # optional DNL prefix
+ ((?(2)%|(?:%|\#))) # starting character
+ (global|define) # scope-defining macro definition
(\s+)
(\w+(?:\(.*?\))?) # macro name with optional arguments in
parentheses
(\s+)
@@ -267,15 +299,16 @@
line, valid = pop(lines)
m = md_regex.match(line)
if m:
- ws0, macro, ws1, name, ws2, body, ws3 = m.groups()
- if ws3 == "\\":
- body += ws3
- ws3 = ""
- bc, pc = count_brackets(body)
- while (bc > 0 or pc > 0 or body.endswith("\\")) and lines:
- line, _ = pop(lines)
- body += "\n" + line
+ ws0, dnl, sc, macro, ws1, name, ws2, body, ws3 = m.groups()
+ if not dnl and sc == "%":
+ if ws3 == "\\":
+ body += ws3
+ ws3 = ""
bc, pc = count_brackets(body)
+ while (bc > 0 or pc > 0 or body.endswith("\\")) and lines:
+ line, _ = pop(lines)
+ body += "\n" + line
+ bc, pc = count_brackets(body)
tokens = re.split(r"(\s+)$", body, maxsplit=1)
if len(tokens) == 1:
body = tokens[0]
@@ -286,8 +319,11 @@
MacroDefinition(
name,
body,
- macro == "%global",
+ macro == "global",
+ bool(dnl or sc == "#"),
+ CommentOutStyle.HASH if sc == "#" else
CommentOutStyle.DNL,
(ws0, ws1, ws2, ws3),
+ dnl[4:] if dnl else "",
valid,
buffer,
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.23.0/specfile/prep.py
new/specfile-0.24.0/specfile/prep.py
--- old/specfile-0.23.0/specfile/prep.py 2023-10-30 10:13:03.000000000
+0100
+++ new/specfile-0.24.0/specfile/prep.py 2023-11-06 18:15:33.000000000
+0100
@@ -11,7 +11,7 @@
from specfile.options import Options
from specfile.sections import Section
from specfile.types import SupportsIndex
-from specfile.utils import split_conditional_macro_expansion
+from specfile.utils import UserList, split_conditional_macro_expansion
def valid_prep_macro(name: str) -> bool:
@@ -149,7 +149,7 @@
DEFAULTS: Dict[str, Union[bool, int, str]] = {}
-class PrepMacros(collections.UserList):
+class PrepMacros(UserList[PrepMacro]):
"""
Class that represents a list of %prep macros.
@@ -185,7 +185,7 @@
if isinstance(item, type):
return any(isinstance(m, item) for m in self.data)
return any(
- m.name.startswith(item) if item == "%patch" else m.name == item
+ m.name.startswith(cast(str, item)) if item == "%patch" else m.name
== item
for m in self.data
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.23.0/specfile/sections.py
new/specfile-0.24.0/specfile/sections.py
--- old/specfile-0.23.0/specfile/sections.py 2023-10-30 10:13:03.000000000
+0100
+++ new/specfile-0.24.0/specfile/sections.py 2023-11-06 18:15:33.000000000
+0100
@@ -18,6 +18,7 @@
from specfile.macros import Macros
from specfile.options import Options
from specfile.types import SupportsIndex
+from specfile.utils import UserList
if TYPE_CHECKING:
from specfile.specfile import Specfile
@@ -139,7 +140,7 @@
return str(self).splitlines()
-class Sections(collections.UserList):
+class Sections(UserList[Section]):
"""
Class that represents all spec file sections, hence the entire spec file.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.23.0/specfile/sourcelist.py
new/specfile-0.24.0/specfile/sourcelist.py
--- old/specfile-0.23.0/specfile/sourcelist.py 2023-10-30 10:13:03.000000000
+0100
+++ new/specfile-0.24.0/specfile/sourcelist.py 2023-11-06 18:15:33.000000000
+0100
@@ -1,7 +1,6 @@
# Copyright Contributors to the Packit project.
# SPDX-License-Identifier: MIT
-import collections
import copy
from typing import TYPE_CHECKING, Any, Dict, List, Optional, overload
@@ -12,6 +11,7 @@
from specfile.sections import Section
from specfile.tags import Comments
from specfile.types import SupportsIndex
+from specfile.utils import UserList
if TYPE_CHECKING:
from specfile.specfile import Specfile
@@ -81,7 +81,7 @@
return Macros.expand(self.location)
-class Sourcelist(collections.UserList):
+class Sourcelist(UserList[SourcelistEntry]):
"""
Class that represents entries in a %sourcelist/%patchlist section.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.23.0/specfile/sources.py
new/specfile-0.24.0/specfile/sources.py
--- old/specfile-0.23.0/specfile/sources.py 2023-10-30 10:13:03.000000000
+0100
+++ new/specfile-0.24.0/specfile/sources.py 2023-11-06 18:15:33.000000000
+0100
@@ -539,7 +539,7 @@
valid = self._get_tag_validity(cast(TagSource, source))
container.insert(
index,
- Tag(
+ Tag( # type: ignore[arg-type]
name,
location,
separator,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.23.0/specfile/specfile.py
new/specfile-0.24.0/specfile/specfile.py
--- old/specfile-0.23.0/specfile/specfile.py 2023-10-30 10:13:03.000000000
+0100
+++ new/specfile-0.24.0/specfile/specfile.py 2023-11-06 18:15:33.000000000
+0100
@@ -730,6 +730,7 @@
)
for md in macro_definitions
if md.valid
+ and not md.commented_out
and not protected_regex.match(md.name)
and not md.name.endswith(")") # skip macro definitions
with options
]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.23.0/specfile/tags.py
new/specfile-0.24.0/specfile/tags.py
--- old/specfile-0.23.0/specfile/tags.py 2023-10-30 10:13:03.000000000
+0100
+++ new/specfile-0.24.0/specfile/tags.py 2023-11-06 18:15:33.000000000
+0100
@@ -1,7 +1,6 @@
# Copyright Contributors to the Packit project.
# SPDX-License-Identifier: MIT
-import collections
import copy
import itertools
import re
@@ -24,7 +23,7 @@
from specfile.macros import Macros
from specfile.sections import Section
from specfile.types import SupportsIndex
-from specfile.utils import split_conditional_macro_expansion
+from specfile.utils import UserList, split_conditional_macro_expansion
if TYPE_CHECKING:
from specfile.specfile import Specfile
@@ -66,7 +65,7 @@
return f"Comment({self.text!r}, {self.prefix!r})"
-class Comments(collections.UserList):
+class Comments(UserList[Comment]):
"""
Class that represents comments associated with a tag, that is consecutive
comment lines
located directly above a tag definition.
@@ -312,7 +311,7 @@
) + len(self.comments.get_raw_data())
-class Tags(collections.UserList):
+class Tags(UserList[Tag]):
"""
Class that represents all tags in a certain %package section.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.23.0/specfile/utils.py
new/specfile-0.24.0/specfile/utils.py
--- old/specfile-0.23.0/specfile/utils.py 2023-10-30 10:13:03.000000000
+0100
+++ new/specfile-0.24.0/specfile/utils.py 2023-11-06 18:15:33.000000000
+0100
@@ -3,7 +3,8 @@
import collections
import re
-from typing import Tuple
+import sys
+from typing import TYPE_CHECKING, Tuple
from specfile.constants import ARCH_NAMES
from specfile.exceptions import SpecfileException, UnterminatedMacroException
@@ -160,3 +161,13 @@
if not isinstance(node, ConditionalMacroExpansion):
return value, "", ""
return "".join(str(n) for n in node.body),
f"%{{{node.prefix}{node.name}:", "}"
+
+
+# Python 3.6-3.8 do not allow creating a generic UserList at runtime.
+# This hack allows type checkers to determine the UserList dunder method return
+# types while still working at runtime.
+if TYPE_CHECKING or sys.version_info >= (3, 9):
+ UserList = collections.UserList
+else:
+ # UserList[...] always returns a UserList
+ UserList = collections.defaultdict(lambda: collections.UserList)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.23.0/specfile.egg-info/PKG-INFO
new/specfile-0.24.0/specfile.egg-info/PKG-INFO
--- old/specfile-0.23.0/specfile.egg-info/PKG-INFO 2023-10-30
10:13:11.000000000 +0100
+++ new/specfile-0.24.0/specfile.egg-info/PKG-INFO 2023-11-06
18:15:41.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: specfile
-Version: 0.23.0
+Version: 0.24.0
Summary: A library for parsing and manipulating RPM spec files.
Home-page: https://github.com/packit/specfile
Author: Red Hat
@@ -49,9 +49,9 @@
Section is a spec file section, it has a well-defined name that starts with
_%_ character and that can optionally be followed by arguments.
-In this library, the starting _%_ of section name is ommited for convenience.
+In this library, the starting _%_ of section name is omitted for convenience.
-There is a special section internally called `%package`, often also referred
to as preamble, and it represents the content of the spec file that preceeds
the first named section (usually `%description`). This section contains the
main package metadata (tags). Metadata of subpackages are defined in subsequent
`%package` sections, that are not anonymous and are always followed by
arguments specifying the name of the subpackage (e.g. `%package doc` or
`%package -n completely-different-subpackage-name`).
+There is a special section internally called `%package`, often also referred
to as preamble, and it represents the content of the spec file that precedes
the first named section (usually `%description`). This section contains the
main package metadata (tags). Metadata of subpackages are defined in subsequent
`%package` sections, that are not anonymous and are always followed by
arguments specifying the name of the subpackage (e.g. `%package doc` or
`%package -n completely-different-subpackage-name`).
### Tag
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/specfile-0.23.0/tests/unit/test_macro_definitions.py
new/specfile-0.24.0/tests/unit/test_macro_definitions.py
--- old/specfile-0.23.0/tests/unit/test_macro_definitions.py 2023-10-30
10:13:03.000000000 +0100
+++ new/specfile-0.24.0/tests/unit/test_macro_definitions.py 2023-11-06
18:15:33.000000000 +0100
@@ -5,21 +5,39 @@
import pytest
-from specfile.macro_definitions import MacroDefinition, MacroDefinitions
+from specfile.macro_definitions import (
+ CommentOutStyle,
+ MacroDefinition,
+ MacroDefinitions,
+)
def test_find():
macro_definitions = MacroDefinitions(
[
- MacroDefinition("gitdate", "20160901", True, ("", " ", " ",
"")),
+ MacroDefinition(
+ "gitdate",
+ "20160901",
+ True,
+ False,
+ CommentOutStyle.DNL,
+ ("", " ", " ", ""),
+ ),
MacroDefinition(
"commit",
"9ab9717cf7d1be1a85b165a8eacb71b9e5831113",
True,
+ False,
+ CommentOutStyle.DNL,
("", " ", " ", ""),
),
MacroDefinition(
- "shortcommit", "%(c=%{commit}; echo ${c:0:7})", True, ("", "
", " ", "")
+ "shortcommit",
+ "%(c=%{commit}; echo ${c:0:7})",
+ True,
+ False,
+ CommentOutStyle.DNL,
+ ("", " ", " ", ""),
),
]
)
@@ -32,15 +50,29 @@
def test_get():
macro_definitions = MacroDefinitions(
[
- MacroDefinition("gitdate", "20160901", True, ("", " ", " ",
"")),
+ MacroDefinition(
+ "gitdate",
+ "20160901",
+ True,
+ False,
+ CommentOutStyle.DNL,
+ ("", " ", " ", ""),
+ ),
MacroDefinition(
"commit",
"9ab9717cf7d1be1a85b165a8eacb71b9e5831113",
True,
+ False,
+ CommentOutStyle.DNL,
("", " ", " ", ""),
),
MacroDefinition(
- "shortcommit", "%(c=%{commit}; echo ${c:0:7})", True, ("", "
", " ", "")
+ "shortcommit",
+ "%(c=%{commit}; echo ${c:0:7})",
+ True,
+ False,
+ CommentOutStyle.DNL,
+ ("", " ", " ", ""),
),
]
)
@@ -59,6 +91,9 @@
"%global commit 9ab9717cf7d1be1a85b165a8eacb71b9e5831113",
"%global shortcommit %(c=%{commit}; echo ${c:0:7})",
"",
+ "%dnl %global pre a1",
+ "#global prerel beta2",
+ "",
"Name: test",
"Version: 0.1.0",
"",
@@ -74,8 +109,14 @@
assert macro_definitions[1].name == "commit"
assert macro_definitions.commit.body ==
"9ab9717cf7d1be1a85b165a8eacb71b9e5831113"
assert macro_definitions[2].name == "shortcommit"
- assert macro_definitions[3].name == "desc(x)"
- assert macro_definitions[3].body == (
+ assert macro_definitions[3].name == "pre"
+ assert macro_definitions[3].commented_out
+ assert macro_definitions[3].comment_out_style is CommentOutStyle.DNL
+ assert macro_definitions[4].name == "prerel"
+ assert macro_definitions[4].commented_out
+ assert macro_definitions[4].comment_out_style is CommentOutStyle.HASH
+ assert macro_definitions[5].name == "desc(x)"
+ assert macro_definitions[5].body == (
"Test spec file containing several \\\n"
"macro definitions in various formats (%?1)"
)
@@ -90,21 +131,57 @@
def test_get_raw_data():
macro_definitions = MacroDefinitions(
[
- MacroDefinition("gitdate", "20160901", True, ("", " ", " ",
"")),
+ MacroDefinition(
+ "gitdate",
+ "20160901",
+ True,
+ False,
+ CommentOutStyle.DNL,
+ ("", " ", " ", ""),
+ ),
MacroDefinition(
"commit",
"9ab9717cf7d1be1a85b165a8eacb71b9e5831113",
True,
+ False,
+ CommentOutStyle.DNL,
("", " ", " ", ""),
),
MacroDefinition(
- "shortcommit", "%(c=%{commit}; echo ${c:0:7})", True, ("", "
", " ", "")
+ "shortcommit",
+ "%(c=%{commit}; echo ${c:0:7})",
+ True,
+ False,
+ CommentOutStyle.DNL,
+ ("", " ", " ", ""),
+ ),
+ MacroDefinition(
+ "pre",
+ "a1",
+ True,
+ True,
+ CommentOutStyle.DNL,
+ ("", " ", " ", ""),
+ " ",
+ True,
+ [""],
+ ),
+ MacroDefinition(
+ "prerel",
+ "beta2",
+ True,
+ True,
+ CommentOutStyle.HASH,
+ ("", " ", " ", ""),
),
MacroDefinition(
"desc(x)",
"Test spec file containing several \\\nmacro definitions in
various formats (%?1)",
False,
+ False,
+ CommentOutStyle.DNL,
("", " ", " ", ""),
+ "",
True,
[
"",
@@ -119,7 +196,10 @@
"This an example of a macro definition with body \n"
"spawning across mutiple lines}",
False,
+ False,
+ CommentOutStyle.DNL,
("", " ", " ", ""),
+ "",
True,
[""],
),
@@ -130,6 +210,9 @@
"%global commit 9ab9717cf7d1be1a85b165a8eacb71b9e5831113",
"%global shortcommit %(c=%{commit}; echo ${c:0:7})",
"",
+ "%dnl %global pre a1",
+ "#global prerel beta2",
+ "",
"Name: test",
"Version: 0.1.0",
"",
@@ -149,6 +232,8 @@
"commit",
"9ab9717cf7d1be1a85b165a8eacb71b9e5831113",
True,
+ False,
+ CommentOutStyle.DNL,
("", " ", " ", ""),
),
],