Hello community,
here is the log from the commit of package python-python-rpm-spec for
openSUSE:Factory checked in at 2020-08-06 10:42:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-python-rpm-spec (Old)
and /work/SRC/openSUSE:Factory/.python-python-rpm-spec.new.3399 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-python-rpm-spec"
Thu Aug 6 10:42:04 2020 rev:4 rq:824577 version:0.9
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-python-rpm-spec/python-python-rpm-spec.changes
2019-03-12 09:52:32.311548540 +0100
+++
/work/SRC/openSUSE:Factory/.python-python-rpm-spec.new.3399/python-python-rpm-spec.changes
2020-08-06 10:42:10.066121469 +0200
@@ -1,0 +2,6 @@
+Wed Aug 5 09:18:10 UTC 2020 - Marketa Calabkova <[email protected]>
+
+- update to 0.9
+ * Ignore case when parsing directives
+
+-------------------------------------------------------------------
Old:
----
python-rpm-spec-0.8.tar.gz
New:
----
python-rpm-spec-0.9.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-python-rpm-spec.spec ++++++
--- /var/tmp/diff_new_pack.I4Re7u/_old 2020-08-06 10:42:12.658122766 +0200
+++ /var/tmp/diff_new_pack.I4Re7u/_new 2020-08-06 10:42:12.658122766 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-python-rpm-spec
#
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
%define skip_python2 1
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-python-rpm-spec
-Version: 0.8
+Version: 0.9
Release: 0
Summary: Python module for parsing RPM spec files
License: MIT
@@ -51,7 +51,7 @@
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
-%python_expand py.test-%{$python_bin_suffix} -vv tests
+%pytest tests
%files %{python_files}
%doc CHANGELOG* README*
++++++ python-rpm-spec-0.8.tar.gz -> python-rpm-spec-0.9.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-rpm-spec-0.8/.editorconfig
new/python-rpm-spec-0.9/.editorconfig
--- old/python-rpm-spec-0.8/.editorconfig 1970-01-01 01:00:00.000000000
+0100
+++ new/python-rpm-spec-0.9/.editorconfig 2020-05-02 14:29:17.260953200
+0200
@@ -0,0 +1,8 @@
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 4
+insert_final_newline = true
+end_of_line = lf
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-rpm-spec-0.8/.pylintrc
new/python-rpm-spec-0.9/.pylintrc
--- old/python-rpm-spec-0.8/.pylintrc 2018-09-18 21:35:11.181484200 +0200
+++ new/python-rpm-spec-0.9/.pylintrc 2020-03-01 12:31:05.475503000 +0100
@@ -143,6 +143,7 @@
C0103,
C0111,
C0111,
+ C0330, # Wrong hanging indentation before block
C0413,
E1101,
R0903,
@@ -324,7 +325,7 @@
indent-string=' '
# Maximum number of characters on a single line.
-max-line-length=100
+max-line-length=110
# Maximum number of lines in a module.
max-module-lines=1000
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-rpm-spec-0.8/AUTHORS
new/python-rpm-spec-0.9/AUTHORS
--- old/python-rpm-spec-0.8/AUTHORS 2018-09-18 19:00:37.772446900 +0200
+++ new/python-rpm-spec-0.9/AUTHORS 2020-05-02 14:29:17.262953300 +0200
@@ -1,4 +1,6 @@
Benjamin Kircher <[email protected]>
+Clément Bénier <[email protected]>
+KOLANICH <[email protected]>
Lazar Šumar <[email protected]>
Lon Hohberger <[email protected]>
Luca Beltrame <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-rpm-spec-0.8/CHANGELOG.md
new/python-rpm-spec-0.9/CHANGELOG.md
--- old/python-rpm-spec-0.8/CHANGELOG.md 2018-09-18 21:47:51.851634000
+0200
+++ new/python-rpm-spec-0.9/CHANGELOG.md 2020-05-02 15:05:15.548065000
+0200
@@ -1,8 +1,15 @@
# Changelog
+## 0.9 (202-05-02)
+
+Changes:
+
+* Ignore case when parsing directives
+
## 0.8 (2018-09-18)
New Features:
+
* Enable parsing versions in `BuildRequires:` and `Requires:`
* Add support for conditional macros, e.g. `%{?test_macro:expression}`
* Use flit for packaging
@@ -10,4 +17,5 @@
## 0.7 (2017-08-10)
New Features:
+
* Add `Spec.sources_dict` and `Spec.patches_dict`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-rpm-spec-0.8/PKG-INFO
new/python-rpm-spec-0.9/PKG-INFO
--- old/python-rpm-spec-0.8/PKG-INFO 1970-01-01 01:00:00.000000000 +0100
+++ new/python-rpm-spec-0.9/PKG-INFO 1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +1,7 @@
Metadata-Version: 1.1
Name: python-rpm-spec
-Version: 0.8
+Version: 0.9
Summary: python-rpm-spec is a Python library for parsing RPM spec files.
Home-page: https://github.com/bkircher/python-rpm-spec
Author: Benjamin Kircher
-Author-email: [email protected]
+Author-email: [email protected]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-rpm-spec-0.8/README.md
new/python-rpm-spec-0.9/README.md
--- old/python-rpm-spec-0.8/README.md 2018-09-18 21:38:37.635101600 +0200
+++ new/python-rpm-spec-0.9/README.md 2020-03-01 12:31:05.628504300 +0100
@@ -7,6 +7,7 @@
tl;dr
If you want to quickly parse a spec file on the command line you might want to
give `rpmspec --parse` a try.
+
```sh
$ rpmspec --parse file.spec | awk '/Source/ {print $2}'
```
@@ -20,11 +21,14 @@
spec file.
## Features
+
* No extra dependencies other than Python 3
* Available on all platforms, parse spec files on Windows
## Examples
+
This is how you access a spec file's various definitions:
+
```python
from pyrpm.spec import Spec, replace_macros
@@ -45,6 +49,7 @@
```
Example showing how to retrieve named source or patch files from a spec:
+
```python
from pyrpm.spec import Spec
@@ -67,6 +72,7 @@
Example showing how to get versioned `BuildRequires:` and `Requires:` out of a
spec file:
+
```python
from pyrpm.spec import Spec
@@ -87,9 +93,10 @@
## Install
-python-rpm-spec is hosted on PyPI - the Python Package Index. So all you need
to do is
+python-rpm-spec is [hosted](https://pypi.org/project/python-rpm-spec/) on PyPI
-
+the Python Package Index. So all you need to do is
-```bash
+```sh
$ pip install python-rpm-spec
```
@@ -99,23 +106,26 @@
package manager to install a python-rpm-spec as a normal package in your
system.
-```bash
+```sh
$ sudo dnf copr enable bkircher/python-rpm-spec # Enable copr repo
$ sudo dnf install -y python3-rpm-spec # Install the package
```
## Dependencies
+
Except Python 3 no extra dependencies are required. No Python 2, sorry.
## Current status
+
This module does not parse everything of a spec file. Only the pieces I needed.
So there is probably still plenty of stuff missing. However, it should not be
terribly complicated to add support for the missing pieces.
## Development
+
If you want to hack on this module you could start with following recipe:
-```bash
+```sh
$ git clone https://github.com/bkircher/python-rpm-spec.git # Clone the repo
$ cd python-rpm-spec # Change into the source directory
$ mkdir .venv && python3 -m venv .venv # Create a virtual environment
@@ -123,7 +133,9 @@
$ pip install pytest # Install py.test
$ pytest # Execute all tests
```
-Happy hacking!
-<!-- vim: et sw=4 ts=4:
--->
+## Further references
+
+Take a look at the excellent [RPM Packaging
Guide](https://rpm-guide.readthedocs.io/en/latest/index.html), especially the
section [What is a SPEC
File?](https://rpm-guide.readthedocs.io/en/latest/rpm-guide.html#what-is-a-spec-file)
+
+Happy hacking!
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-rpm-spec-0.8/dev-requirements.txt
new/python-rpm-spec-0.9/dev-requirements.txt
--- old/python-rpm-spec-0.8/dev-requirements.txt 1970-01-01
01:00:00.000000000 +0100
+++ new/python-rpm-spec-0.9/dev-requirements.txt 2020-05-02
14:31:06.988873200 +0200
@@ -0,0 +1,5 @@
+black
+flit
+pylint
+pytest
+rope
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-rpm-spec-0.8/environment.yaml
new/python-rpm-spec-0.9/environment.yaml
--- old/python-rpm-spec-0.8/environment.yaml 2018-09-18 21:21:25.493612500
+0200
+++ new/python-rpm-spec-0.9/environment.yaml 2020-03-01 12:31:05.691505000
+0100
@@ -1,8 +1,9 @@
+name: pyrpm
dependencies:
- python>=3.7.0
- pip:
- - autopep8==1.4
- - flit>=1.1
- - pylint==2.1.1
- - pytest==3.8.0
- - rope==0.11.0
+ - black
+ - flit
+ - pylint
+ - pytest
+ - rope
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-rpm-spec-0.8/pyproject.toml
new/python-rpm-spec-0.9/pyproject.toml
--- old/python-rpm-spec-0.8/pyproject.toml 2018-09-18 22:02:18.265167200
+0200
+++ new/python-rpm-spec-0.9/pyproject.toml 2020-05-02 15:07:49.916006600
+0200
@@ -6,7 +6,7 @@
dist-name = "python-rpm-spec"
module = "pyrpm"
author = "Benjamin Kircher"
-author-email = "[email protected]"
+author-email = "[email protected]"
home-page = "https://github.com/bkircher/python-rpm-spec"
requires-python = ">=3.3"
description-file = "README.md"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-rpm-spec-0.8/pyrpm/__init__.py
new/python-rpm-spec-0.9/pyrpm/__init__.py
--- old/python-rpm-spec-0.8/pyrpm/__init__.py 2018-09-18 21:53:00.132422700
+0200
+++ new/python-rpm-spec-0.9/pyrpm/__init__.py 2020-05-02 15:07:32.983013000
+0200
@@ -2,4 +2,4 @@
"""
-__version__ = "0.8"
+__version__ = "0.9"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-rpm-spec-0.8/pyrpm/spec.py
new/python-rpm-spec-0.9/pyrpm/spec.py
--- old/python-rpm-spec-0.8/pyrpm/spec.py 2018-09-18 18:58:06.209234200
+0200
+++ new/python-rpm-spec-0.9/pyrpm/spec.py 2020-05-02 14:47:30.966467100
+0200
@@ -11,9 +11,9 @@
"""
import re
-from abc import (ABCMeta, abstractmethod)
+from abc import ABCMeta, abstractmethod
-__all__ = ['Spec', 'replace_macros', 'Package']
+__all__ = ["Spec", "replace_macros", "Package"]
class _Tag(metaclass=ABCMeta):
@@ -49,8 +49,8 @@
@staticmethod
def current_target(spec_obj, context):
target_obj = spec_obj
- if context['current_subpackage'] is not None:
- target_obj = context['current_subpackage']
+ if context["current_subpackage"] is not None:
+ target_obj = context["current_subpackage"]
return target_obj
@@ -65,7 +65,7 @@
value = match_obj.group(1)
# Sub-packages
- if self.name == 'name':
+ if self.name == "name":
spec_obj.packages = []
spec_obj.packages.append(Package(value))
@@ -98,16 +98,22 @@
setattr(target_obj, self.name, list())
value = match_obj.group(1)
- if self.name == 'packages':
- if value == '-n':
- subpackage_name = line.rsplit(' ', 1)[-1].rstrip()
+ if self.name == "packages":
+ if value == "-n":
+ subpackage_name = line.rsplit(" ", 1)[-1].rstrip()
else:
- subpackage_name = '{}-{}'.format(spec_obj.name, value)
+ subpackage_name = "{}-{}".format(spec_obj.name, value)
package = Package(subpackage_name)
- context['current_subpackage'] = package
+ context["current_subpackage"] = package
package.is_subpackage = True
spec_obj.packages.append(package)
- elif self.name in ['build_requires', 'requires', 'conflicts',
'obsoletes', 'provides']:
+ elif self.name in [
+ "build_requires",
+ "requires",
+ "conflicts",
+ "obsoletes",
+ "provides",
+ ]:
# Macros are valid in requirements
value = replace_macros(value, spec=spec_obj)
@@ -117,7 +123,7 @@
# Requires: a, b >= 3.1, c
# 1. Tokenize
- tokens = [val for val in re.split('[\t\n, ]', value) if val != '']
+ tokens = [val for val in re.split("[\t\n, ]", value) if val != ""]
values = []
# 2. Join
@@ -125,10 +131,10 @@
for val in tokens:
if add:
add = False
- val = values.pop() + ' ' + val
- elif val in ['>=', '!=', '>', '<', '<=', '==', '=']:
+ val = values.pop() + " " + val
+ elif val in [">=", "!=", ">", "<", "<=", "==", "="]:
add = True # Add next value to this one
- val = values.pop() + ' ' + val
+ val = values.pop() + " " + val
values.append(val)
for val in values:
@@ -148,37 +154,39 @@
def update_impl(self, spec_obj, context, match_obj, line):
source_name, value = match_obj.groups()
- dictionary = getattr(spec_obj, '{}_dict'.format(self.name))
+ dictionary = getattr(spec_obj, "{}_dict".format(self.name))
dictionary[source_name] = value
target_obj = _Tag.current_target(spec_obj, context)
getattr(target_obj, self.name).append(value)
return spec_obj, context
+def re_tag_compile(tag):
+ return re.compile(tag, re.IGNORECASE)
_tags = [
- _NameValue('name', re.compile(r'^Name:\s*(\S+)')),
- _NameValue('version', re.compile(r'^Version:\s*(\S+)')),
- _NameValue('epoch', re.compile(r'^Epoch:\s*(\S+)')),
- _NameValue('release', re.compile(r'^Release:\s*(\S+)')),
- _NameValue('summary', re.compile(r'^Summary:\s*(.+)')),
- _NameValue('license', re.compile(r'^License:\s*(.+)')),
- _NameValue('group', re.compile(r'^Group:\s*(\S+)')),
- _NameValue('url', re.compile(r'^URL:\s*(\S+)')),
- _NameValue('buildroot', re.compile(r'^BuildRoot:\s*(\S+)')),
- _NameValue('buildarch', re.compile(r'^BuildArch:\s*(\S+)')),
- _ListAndDict('sources', re.compile(r'^(Source\d*):\s*(\S+)')),
- _ListAndDict('patches', re.compile(r'^(Patch\d*):\s*(\S+)')),
- _List('build_requires', re.compile(r'^BuildRequires:\s*(.+)')),
- _List('requires', re.compile(r'^Requires:\s*(.+)')),
- _List('conflicts', re.compile(r'^Conflicts:\s*(.+)')),
- _List('obsoletes', re.compile(r'^Obsoletes:\s*(.+)')),
- _List('provides', re.compile(r'^Provides:\s*(.+)')),
- _List('packages', re.compile(r'^%package\s+(\S+)')),
- _MacroDef('define', re.compile(r'^%define\s+(\S+)\s+(\S+)')),
- _MacroDef('global', re.compile(r'^%global\s+(\S+)\s+(\S+)'))
+ _NameValue("name", re_tag_compile(r"^Name:\s*(\S+)")),
+ _NameValue("version", re_tag_compile(r"^Version:\s*(\S+)")),
+ _NameValue("epoch", re_tag_compile(r"^Epoch:\s*(\S+)")),
+ _NameValue("release", re_tag_compile(r"^Release:\s*(\S+)")),
+ _NameValue("summary", re_tag_compile(r"^Summary:\s*(.+)")),
+ _NameValue("license", re_tag_compile(r"^License:\s*(.+)")),
+ _NameValue("group", re_tag_compile(r"^Group:\s*(\S+)")),
+ _NameValue("url", re_tag_compile(r"^URL:\s*(\S+)")),
+ _NameValue("buildroot", re_tag_compile(r"^BuildRoot:\s*(\S+)")),
+ _NameValue("buildarch", re_tag_compile(r"^BuildArch:\s*(\S+)")),
+ _ListAndDict("sources", re_tag_compile(r"^(Source\d*):\s*(\S+)")),
+ _ListAndDict("patches", re_tag_compile(r"^(Patch\d*):\s*(\S+)")),
+ _List("build_requires", re_tag_compile(r"^BuildRequires:\s*(.+)")),
+ _List("requires", re_tag_compile(r"^Requires:\s*(.+)")),
+ _List("conflicts", re_tag_compile(r"^Conflicts:\s*(.+)")),
+ _List("obsoletes", re_tag_compile(r"^Obsoletes:\s*(.+)")),
+ _List("provides", re_tag_compile(r"^Provides:\s*(.+)")),
+ _List("packages", re.compile(r"^%package\s+(\S+)")),
+ _MacroDef("define", re.compile(r"^%define\s+(\S+)\s+(\S+)")),
+ _MacroDef("global", re.compile(r"^%global\s+(\S+)\s+(\S+)")),
]
-_macro_pattern = re.compile(r'%{(\S+?)\}')
+_macro_pattern = re.compile(r"%{(\S+?)\}")
def _parse(spec_obj, context, line):
@@ -192,7 +200,7 @@
class Requirement:
"""Represents a single requirement or build requirement in an RPM spec
file.
- Each spec file contains one or more requirements or build requirements.
+ Each spec file contains one or more requirements or build requirements.
For example, consider following spec file::
Name: foo
@@ -215,7 +223,8 @@
This spec file's requirements have a name and either a required or minimum
version.
"""
- expr = re.compile(r'(.*?)\s+([<>]=?|=)\s+(\S+)')
+
+ expr = re.compile(r"(.*?)\s+([<>]=?|=)\s+(\S+)")
def __init__(self, name):
assert isinstance(name, str)
@@ -279,8 +288,13 @@
assert isinstance(name, str)
for tag in _tags:
- if tag.attr_type is list and tag.name in ["build_requires",
"requires", "conflicts", "obsoletes",
- "provides"]:
+ if tag.attr_type is list and tag.name in [
+ "build_requires",
+ "requires",
+ "conflicts",
+ "obsoletes",
+ "provides",
+ ]:
setattr(self, tag.name, tag.attr_type())
self.name = name
@@ -326,10 +340,8 @@
"""
spec = Spec()
- with open(filename, 'r', encoding='utf-8') as f:
- parse_context = {
- 'current_subpackage': None
- }
+ with open(filename, "r", encoding="utf-8") as f:
+ parse_context = {"current_subpackage": None}
for line in f:
spec, parse_context = _parse(spec, parse_context, line)
return spec
@@ -343,9 +355,7 @@
"""
spec = Spec()
- parse_context = {
- 'current_subpackage': None
- }
+ parse_context = {"current_subpackage": None}
for line in string.splitlines():
spec, parse_context = _parse(spec, parse_context, line)
return spec
@@ -380,29 +390,29 @@
macro_name = match.group(1)
if _is_conditional(macro_name) and spec:
parts = macro_name[1:].split(sep=":", maxsplit=1)
- assert len(parts) > 0
- if _test_conditional(macro_name): # ?
+ assert parts
+ if _test_conditional(macro_name):
if hasattr(spec, parts[0]):
if len(parts) == 2:
return parts[1]
- else:
- return getattr(spec, parts[0], None)
- else:
- return ""
- else: # !
- if not hasattr(spec, parts[0]):
- if len(parts) == 2:
- return parts[1]
- else:
- return getattr(spec, parts[0], None)
- else:
- return ""
+
+ return getattr(spec, parts[0], None)
+
+ return ""
+
+ if not hasattr(spec, parts[0]):
+ if len(parts) == 2:
+ return parts[1]
+
+ return getattr(spec, parts[0], None)
+
+ return ""
if spec:
value = getattr(spec, macro_name, None)
if value:
return str(value)
- return match.string[match.start():match.end()]
+ return match.string[match.start() : match.end()]
# Recursively expand macros
# Note: If macros are not defined in the spec file, this won't try to
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-rpm-spec-0.8/setup.py
new/python-rpm-spec-0.9/setup.py
--- old/python-rpm-spec-0.8/setup.py 1970-01-01 01:00:00.000000000 +0100
+++ new/python-rpm-spec-0.9/setup.py 1970-01-01 01:00:00.000000000 +0100
@@ -10,10 +10,10 @@
{'': ['*']}
setup(name='python-rpm-spec',
- version='0.8',
+ version='0.9',
description='python-rpm-spec is a Python library for parsing RPM spec
files.',
author='Benjamin Kircher',
- author_email='[email protected]',
+ author_email='[email protected]',
url='https://github.com/bkircher/python-rpm-spec',
packages=packages,
package_data=package_data,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-rpm-spec-0.8/tests/test_spec_file_parser.py
new/python-rpm-spec-0.9/tests/test_spec_file_parser.py
--- old/python-rpm-spec-0.8/tests/test_spec_file_parser.py 2018-09-18
18:58:23.725536600 +0200
+++ new/python-rpm-spec-0.9/tests/test_spec_file_parser.py 2020-05-02
14:43:25.667559600 +0200
@@ -7,123 +7,127 @@
class TestPackageClass:
def test_repr_string(self):
- package = Package('foo')
- assert package.name == 'foo'
+ package = Package("foo")
+ assert package.name == "foo"
assert str(package) == "Package('foo')"
def test_is_subpackage(self):
- package = Package('foo')
+ package = Package("foo")
assert package.is_subpackage is False
class TestSpecFileParser:
def test_parse_perl_array_compare_spec(self):
- spec = Spec.from_file(os.path.join(CURRENT_DIR,
'perl-Array-Compare.spec'))
+ spec = Spec.from_file(os.path.join(CURRENT_DIR,
"perl-Array-Compare.spec"))
assert isinstance(spec, Spec)
- assert 'perl-Array-Compare' == spec.name
- assert 'Perl extension for comparing arrays' == spec.summary
- assert '1' == spec.epoch
-
- assert '1.16' == spec.version
- assert 'noarch' == spec.buildarch
- assert 2 == len(spec.build_requires)
- assert 'perl >= 1:5.6.0' == spec.build_requires[0].line
+ assert spec.name == "perl-Array-Compare"
+ assert spec.summary == "Perl extension for comparing arrays"
+ assert spec.epoch == "1"
+
+ assert spec.version == "1.16"
+ assert spec.buildarch == "noarch"
+ assert len(spec.build_requires) == 2
+ assert spec.build_requires[0].line == "perl >= 1:5.6.0"
def test_parse_llvm_spec(self):
- spec = Spec.from_file(os.path.join(CURRENT_DIR, 'llvm.spec'))
+ spec = Spec.from_file(os.path.join(CURRENT_DIR, "llvm.spec"))
- assert 'llvm' == spec.name
- assert '3.8.0' == spec.version
+ assert spec.name == "llvm"
+ assert spec.version == "3.8.0"
- assert 2 == len(spec.sources)
- assert
'http://llvm.org/releases/%{version}/%{name}-%{version}.src.tar.xz' == \
- spec.sources[0]
- assert 'llvm-config.h' == spec.sources[1]
+ assert len(spec.sources) == 2
+ assert (
+ spec.sources[0]
+ ==
"http://llvm.org/releases/%{version}/%{name}-%{version}.src.tar.xz"
+ )
+ assert spec.sources[1] == "llvm-config.h"
- assert 1 == len(spec.patches)
- assert 'llvm-3.7.1-cmake-s390.patch' == spec.patches[0]
+ assert len(spec.patches) == 1
+ assert spec.patches[0] == "llvm-3.7.1-cmake-s390.patch"
def test_parse_only_base_package(self):
# spec file does not contain %package directive
- spec = Spec.from_file(os.path.join(CURRENT_DIR,
'perl-Array-Compare.spec'))
+ spec = Spec.from_file(os.path.join(CURRENT_DIR,
"perl-Array-Compare.spec"))
assert len(spec.packages) == 1
- assert spec.packages[0].name == 'perl-Array-Compare'
+ assert spec.packages[0].name == "perl-Array-Compare"
assert not spec.packages[0].is_subpackage
def test_parse_subpackages(self):
# spec file contains four subpackages and one base package
- spec = Spec.from_file(os.path.join(CURRENT_DIR, 'llvm.spec'))
+ spec = Spec.from_file(os.path.join(CURRENT_DIR, "llvm.spec"))
assert len(spec.packages) == 5
for package in spec.packages:
assert isinstance(package, Package)
- assert package.name.startswith('llvm')
+ assert package.name.startswith("llvm")
def test_parse_subpackage_names(self):
# spec file contains %package -n directive
- spec = Spec.from_file(os.path.join(CURRENT_DIR, 'jsrdbg.spec'))
+ spec = Spec.from_file(os.path.join(CURRENT_DIR, "jsrdbg.spec"))
assert len(spec.packages) == 3
- expected = ['jrdb', 'jsrdbg', 'jsrdbg-devel']
+ expected = ["jrdb", "jsrdbg", "jsrdbg-devel"]
actual = [package.name for package in spec.packages]
for name in expected:
assert name in actual
def test_packages_dict_property(self):
- spec = Spec.from_file(os.path.join(CURRENT_DIR,
'perl-Array-Compare.spec'))
+ spec = Spec.from_file(os.path.join(CURRENT_DIR,
"perl-Array-Compare.spec"))
assert isinstance(spec.packages_dict, dict)
assert len(spec.packages_dict) == len(spec.packages)
- spec = Spec.from_file(os.path.join(CURRENT_DIR, 'llvm.spec'))
+ spec = Spec.from_file(os.path.join(CURRENT_DIR, "llvm.spec"))
assert isinstance(spec.packages_dict, dict)
assert len(spec.packages_dict) == len(spec.packages)
def test_sources_dict_property(self):
- spec = Spec.from_file(os.path.join(CURRENT_DIR, 'llvm.spec'))
+ spec = Spec.from_file(os.path.join(CURRENT_DIR, "llvm.spec"))
assert len(spec.sources_dict) == len(spec.sources)
- assert spec.sources_dict['Source0'] is spec.sources[0]
- assert spec.sources_dict['Source100'] is spec.sources[1]
+ assert spec.sources_dict["Source0"] is spec.sources[0]
+ assert spec.sources_dict["Source100"] is spec.sources[1]
def test_patches_dict_property(self):
- spec = Spec.from_file(os.path.join(CURRENT_DIR, 'llvm.spec'))
+ spec = Spec.from_file(os.path.join(CURRENT_DIR, "llvm.spec"))
assert len(spec.patches_dict) == len(spec.patches)
- assert spec.patches_dict['Patch0'] is spec.patches[0]
+ assert spec.patches_dict["Patch0"] is spec.patches[0]
def test_subpackage_tags(self):
- spec = Spec.from_file(os.path.join(CURRENT_DIR, 'jsrdbg.spec'))
+ spec = Spec.from_file(os.path.join(CURRENT_DIR, "jsrdbg.spec"))
# Summary: tag
- assert spec.summary == 'JavaScript Remote Debugger for SpiderMonkey'
+ assert spec.summary == "JavaScript Remote Debugger for SpiderMonkey"
packages = spec.packages_dict
- assert packages['jsrdbg-devel'].summary == \
- 'Header files, libraries and development documentation for
%{name}'
- assert packages['jrdb'].summary == 'A command line debugger client for
%{name}'
+ assert (
+ packages["jsrdbg-devel"].summary
+ == "Header files, libraries and development documentation for
%{name}"
+ )
+ assert packages["jrdb"].summary == "A command line debugger client for
%{name}"
def test_defines(self):
- spec = Spec.from_file(os.path.join(CURRENT_DIR, 'attica-qt5.spec'))
+ spec = Spec.from_file(os.path.join(CURRENT_DIR, "attica-qt5.spec"))
# Check if they exist
- for define in ('sonum', '_tar_path', '_libname', 'rname'):
+ for define in ("sonum", "_tar_path", "_libname", "rname"):
assert hasattr(spec, define)
# Check values
- assert spec.sonum == '5'
- assert spec.rname == 'attica'
- assert spec._libname == 'KF5Attica'
- assert spec._tar_path == '5.31'
+ assert spec.sonum == "5"
+ assert spec.rname == "attica"
+ assert spec._libname == "KF5Attica"
+ assert spec._tar_path == "5.31"
def test_requirement_parsing(self):
- spec = Spec.from_file(os.path.join(CURRENT_DIR, 'attica-qt5.spec'))
+ spec = Spec.from_file(os.path.join(CURRENT_DIR, "attica-qt5.spec"))
- assert spec.build_requires[0].name == 'cmake'
- assert spec.build_requires[0].version == '3.0'
- assert spec.build_requires[0].operator == '>='
+ assert spec.build_requires[0].name == "cmake"
+ assert spec.build_requires[0].version == "3.0"
+ assert spec.build_requires[0].operator == ">="
def test_subpackage_has_requires(self):
- spec = Spec.from_file(os.path.join(CURRENT_DIR, 'git.spec'))
+ spec = Spec.from_file(os.path.join(CURRENT_DIR, "git.spec"))
- core_package = spec.packages_dict['git-core']
+ core_package = spec.packages_dict["git-core"]
assert len(core_package.requires) == 3
def test_subpackage_has_build_requires(self):
@@ -131,14 +135,13 @@
sub-packages even though they might be empty.
"""
- spec = Spec.from_file(os.path.join(CURRENT_DIR, 'git.spec'))
+ spec = Spec.from_file(os.path.join(CURRENT_DIR, "git.spec"))
- core_package = spec.packages_dict['git-core']
- assert len(core_package.build_requires) == 0
+ core_package = spec.packages_dict["git-core"]
+ assert not core_package.build_requires
class TestSpecClass:
-
def test_default_init(self):
spec = Spec()
assert spec.name is None
@@ -160,62 +163,84 @@
class TestReplaceMacro:
def test_replace_macro_with_spec(self):
- spec = Spec.from_file(os.path.join(CURRENT_DIR, 'llvm.spec'))
- assert 'http://llvm.org/releases/3.8.0/llvm-3.8.0.src.tar.xz' ==
replace_macros(
- spec.sources[0], spec)
- assert 'llvm-config.h' == replace_macros(spec.sources[1], spec)
+ spec = Spec.from_file(os.path.join(CURRENT_DIR, "llvm.spec"))
+ assert (
+ replace_macros(spec.sources[0], spec)
+ == "http://llvm.org/releases/3.8.0/llvm-3.8.0.src.tar.xz"
+ )
+ assert replace_macros(spec.sources[1], spec) == "llvm-config.h"
def test_replace_without_spec(self):
- s = 'http://llvm.org/releases/%{version}/%{name}-%{version}.src.tar.xz'
+ s = "http://llvm.org/releases/%{version}/%{name}-%{version}.src.tar.xz"
assert s == replace_macros(s, spec=None)
def test_replace_unknown_macro(self):
- s = '%{foobar}'
+ s = "%{foobar}"
assert s == replace_macros(s, spec=None)
def test_replace_macro_int_type_val(self):
- spec = Spec.from_file(os.path.join(CURRENT_DIR,
'perl-Array-Compare.spec'))
- result = replace_macros('%{epoch}', spec)
+ spec = Spec.from_file(os.path.join(CURRENT_DIR,
"perl-Array-Compare.spec"))
+ result = replace_macros("%{epoch}", spec)
assert isinstance(result, str)
def test_replace_macro_twice(self):
- spec = Spec.from_file(os.path.join(CURRENT_DIR, 'jsrdbg.spec'))
- assert
'https://github.com/swojtasiak/jsrdbg/archive/26f9f2b27c04b4aec9cd67baaf9a0a206bbbd5c7.tar.gz#/jsrdbg-26f9f2b27c04b4aec9cd67baaf9a0a206bbbd5c7.tar.gz'
\
- == replace_macros(spec.sources[0], spec)
+ spec = Spec.from_file(os.path.join(CURRENT_DIR, "jsrdbg.spec"))
+ assert (
+ replace_macros(spec.sources[0], spec)
+ ==
"https://github.com/swojtasiak/jsrdbg/archive/26f9f2b27c04b4aec9cd67baaf9a0a206bbbd5c7.tar.gz#/jsrdbg-26f9f2b27c04b4aec9cd67baaf9a0a206bbbd5c7.tar.gz"
+ )
def test_replace_user_defined_macro(self):
- spec = Spec.from_string("""
+ spec = Spec.from_string(
+ """
Name: foo
Version: 2
%define var bar
-""")
- s = '%{name}/%{version}/%{var}'
- assert 'foo/2/bar' == replace_macros(s, spec)
+"""
+ )
+ s = "%{name}/%{version}/%{var}"
+ assert replace_macros(s, spec) == "foo/2/bar"
def test_replace_macro_with_negative_conditional(self):
- spec = Spec.from_file(os.path.join(CURRENT_DIR, 'git.spec'))
+ spec = Spec.from_file(os.path.join(CURRENT_DIR, "git.spec"))
- assert 'https://www.kernel.org/pub/software/scm/git/git-2.15.1.tar.xz'
\
- == replace_macros(
-
'https://www.kernel.org/pub/software/scm/git/%{?rcrev:testing/}%{name}-%{version}%{?rcrev}.tar.xz',
spec)
+ assert (
+ replace_macros(
+
"https://www.kernel.org/pub/software/scm/git/%{?rcrev:testing/}%{name}-%{version}%{?rcrev}.tar.xz",
+ spec,
+ )
+ == "https://www.kernel.org/pub/software/scm/git/git-2.15.1.tar.xz"
+ )
def test_replace_macro_with_positive_conditional(self):
- spec = Spec.from_string("""
+ spec = Spec.from_string(
+ """
Name: git
Version: 2.15.1
%define rcrev .rc0
- """)
+ """
+ )
- assert
'https://www.kernel.org/pub/software/scm/git/testing/git-2.15.1.rc0.tar.xz' \
- == replace_macros(
-
'https://www.kernel.org/pub/software/scm/git/%{?rcrev:testing/}%{name}-%{version}%{?rcrev}.tar.xz',
spec)
+ assert (
+ replace_macros(
+
"https://www.kernel.org/pub/software/scm/git/%{?rcrev:testing/}%{name}-%{version}%{?rcrev}.tar.xz",
+ spec,
+ )
+ ==
"https://www.kernel.org/pub/software/scm/git/testing/git-2.15.1.rc0.tar.xz"
+ )
def test_replace_macro_with_leading_exclamation_point(self):
- spec = Spec.from_string("""
+ spec = Spec.from_string(
+ """
Name: git
Version: 2.15.1
- """)
+ """
+ )
- assert
'https://www.kernel.org/pub/software/scm/git/testing/git-2.15.1.tar.xz' \
- == replace_macros(
-
'https://www.kernel.org/pub/software/scm/git/%{!stable:testing/}%{name}-%{version}.tar.xz',
spec)
+ assert (
+ replace_macros(
+
"https://www.kernel.org/pub/software/scm/git/%{!stable:testing/}%{name}-%{version}.tar.xz",
+ spec,
+ )
+ ==
"https://www.kernel.org/pub/software/scm/git/testing/git-2.15.1.tar.xz"
+ )