%global desc %{expand: Python library for parsing and manipulating RPM spec files. Main focus is on modifying existing spec files, any change should result in a minimal diff.} %global base_version 0.38.0 #global prerelease rc1 %global package_version %{base_version}%{?prerelease:~%{prerelease}} %global pypi_version %{base_version}%{?prerelease} Name: python-specfile Version: %{package_version} Release: 1%{?dist} Summary: A library for parsing and manipulating RPM spec files License: MIT URL: https://github.com/packit/specfile Source0: %{pypi_source specfile %{pypi_version}} BuildArch: noarch BuildRequires: python%{python3_pkgversion}-devel BuildRequires: %{py3_dist setuptools setuptools-scm} BuildRequires: %{py3_dist importlib-metadata dataclasses rpm typing-extensions} BuildRequires: %{py3_dist flexmock pytest} BuildRequires: git-core %description %{desc} %package -n python%{python3_pkgversion}-specfile Summary: %{summary} %description -n python%{python3_pkgversion}-specfile %{desc} %prep %autosetup -p1 -n specfile-%{pypi_version} # Remove bundled egg-info rm -rf specfile.egg-info %build %py3_build %install %py3_install %check %pytest --verbose tests/unit tests/integration %files -n python%{python3_pkgversion}-specfile %license LICENSE %doc README.md %{python3_sitelib}/specfile %{python3_sitelib}/specfile-%{version}-py%{python3_version}.egg-info %changelog * Thu Jan 08 2026 Packit - 0.38.0-1 - A bug leading to incorrect EVR expansion has been fixed. (#492) - Prevented side-effects during condition evaluation that could occur when expanding macros that manipulate other macros, leading to misinterpreted validity of condition branches. (#499) * Fri Oct 03 2025 Packit - 0.37.1-1 - We have solved a FutureWarning in our codebase. (#485) * Fri Sep 05 2025 Packit - 0.37.0-1 - Added support for Elbrus E2K CPU architectures. (#484) * Fri May 30 2025 Packit - 0.36.0-1 - We have fixed a bug that caused specfile to traceback when section names with conditional macro expansions containing spaces were present in the spec file. (#476) * Sun Apr 13 2025 Packit - 0.35.0-1 - Added support for creating Specfile instances from file objects and strings. (#458) - The `context_management` type stubs now use `ParamSpec` from `typing_extensions` to support Python < 3.10. (#466) * Tue Mar 18 2025 Packit - 0.34.2-1 - context_management: add a type stub override to fix typing. Type checkers like mypy and pyright can now correctly determine the types for `.sources()`, `.sections()`, and the other `Specfile` methods that return context managers. (#457) * Fri Feb 07 2025 Packit - 0.34.1-1 - Removed the usage of a walrus operator for Python 3.6 compatibility. (#450) * Mon Jan 27 2025 Packit - 0.34.0-1 - Added support for detached (open)SUSE style changelogs (#444) - Resolves: rhbz#2342178 * Mon Dec 16 2024 Packit - 0.33.0-1 - There is a new convenience method `Sections.get_or_create()` that allows you to manipulate a section without checking if it exists first. If a section doesn't exist, it will be appended to the end. (#441) For example, this will work properly even on spec files without `%%changelog`: ``` with spec.sections() as sections: changelog = sections.get_or_create("changelog") changelog[:] = ["%%autochangelog"] ``` - Resolves: rhbz#2332288 * Thu Nov 14 2024 Packit - 0.32.6-1 - New minor release for testing in CBS Koji - Resolves: rhbz#2318011 * Sat Oct 26 2024 Packit - 0.32.5-1 - We have fixed our parser to take in account the deprecations introduced in Python 3.8 (#420) * Mon Sep 30 2024 Packit - 0.32.3-1 - specfile can now handle multi-line tag values (enclosed in a macro body, e.g. `%%shrink`). (#412) - Resolves: rhbz#2299289 * Sun Sep 15 2024 Packit - 0.32.2-1 - Explicitly invalidate the global parse hash when a SpecParser instance is created to prevent this issue. (#409) * Mon Jul 29 2024 Packit - 0.32.1-1 - Fixed two issues related to condition parsing. (#405) * Mon Jul 22 2024 Packit - 0.32.0-1 - It is now possible to bump a release in a manner similar to `rpmdev-bumpspec` using `Specfile.bump_release()` method. (#399) * Tue Jul 09 2024 Packit - 0.31.0-1 - Value of a `Tag` no longer includes trailing whitespace (if any). (#393) - specfile now tries to expand macros before processing conditions to be able to resolve conditional expressions defined by macros, for example OpenSUSE Tumbleweed defines `%%ifpython3` macro as `%%if "%%{python_flavor}" == "python3"`. (#394) - Resolves: rhbz#2294393 * Wed Jun 26 2024 Packit - 0.30.0-1 - Fixed an exception that occured when accessing the `Specfile.has_autochangelog` property while having unparseable lines (e.g. lines ending with unescaped `%`) in `%%changelog`. (#387) * Thu Jun 06 2024 Packit - 0.29.0-1 - Improved compatibility with RPM 4.20 (alpha version is currently in Fedora Rawhide). (#380) * Thu May 23 2024 Packit - 0.28.3-1 - Fixed several minor issues such as processing seemingly commented-out macro definitions (e.g. `#%%global prerel rc1`) and treating `SourceLicense` tag as a source. (#374, #376) - Made `EVR`, `NEVR` and `NEVRA` objects comparable. (#379) * Sun Mar 17 2024 Packit - 0.28.0-1 - A trailing newline is no longer added to spec files without one upon saving. (#353) * Fri Jan 19 2024 Packit - 0.27.0-1 - Improved handling of commented-out macro definitions and fixed related logic in `Specfile.update_value()`. (#338) * Mon Nov 20 2023 Packit - 0.25.0-1 - There is a new method, `Specfile.update_version()`, that allows updating spec file version even if it is a pre-release. (#317) * Mon Nov 06 2023 Packit - 0.24.0-1 - 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) * Mon Oct 30 2023 Packit - 0.23.0-1 - 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) * Fri Oct 06 2023 Packit - 0.22.1-1 - Removed dependency on setuptools-scm-git-archive. (#290) * Fri Aug 11 2023 Nikola Forró - 0.21.0-1 - `specfile` no longer tracebacks when some sources are missing and can't be _emulated_. In such case the spec file is parsed without them at the cost of `%%setup` and `%%patch` macros potentially expanding differently than with the sources present. (#271) - Specfile's license in RPM spec file is now confirmed to be SPDX compatible. (#269) * Mon Jul 31 2023 Packit - 0.20.2-1 - Fixed Packit config to work properly with `propose-downstream` and `pull-from-upstream` jobs. (#261) * Fri Oct 07 2022 Packit - 0.7.0-1 - It is now possible to filter changelog entries by specifying lower bound EVR, upper bound EVR or both. (#104) - Added support for filenames specified in source URL fragments, for example: `https://example.com/foo/1.0/download.cgi#/%{name}-%{version}.tar.gz` (#100) * Thu Aug 25 2022 Packit - 0.6.0-1 - Switched to our own implementation of working with `%changelog` timestamps and removed dependency on arrow (#88) - Fixed requires of EPEL 8 rpm (#86) * Wed Aug 10 2022 Packit - 0.5.1-1 - Added new `%conf` section (#74) - Switched to rpm-py-installer (#75) - Fixed detecting extended timestamp format in `%changelog` (#77, #81) * Fri Jul 22 2022 Packit - 0.5.0-1 - Strict optional typing is now enforced (#68) - Fixed deduplication of tag names (#69) - Sources and patches can now be removed by number (#69) - Number of digits in a source number is now expressed the same way as packit does it (#69) - Empty lines are now compressed when deleting tags (#69) - Added convenience property for getting texts of tag comments (#69) - Added convenience method for adding a patch (#69) * Tue Jun 21 2022 Packit - 0.4.0-1 - Added convenience properties for most used tags (#63) - Hardened linting by ignoring only specific mypy errors (#64) - Fixed list of valid tag names and ensured newly added tags are not part of a condition block (#66) - Initial patch number and its default number of digits are now honored (#66) - Fixed a bug in `%prep` macro stringification (#67) * Mon May 16 2022 Packit - 0.3.0-1 - Made `Sources` a `MutableSequence` (#36) - Started using consistent terminology for source numbers and added the option to insert a source with a specific number (#47) - Added support for implicit source numbering (#48) - Documented sources and `%prep` macros in README (#49) - Implemented high-level manipulation of version and release (#54) - Added support for `* Mon May 16 2022 John Doe - 0.3.0-1.fc35 - local build` (#56) - Added `remote` property to sources and enabled addition of `Sources` (#59) - Implemented mid-level manipulation of `%prep` section, including modification of `%prep` macros (#37, #52) * Wed Mar 30 2022 Nikola Forró - 0.2.0-1 - New upstream release 0.2.0 * Mon Feb 21 2022 Nikola Forró - 0.1.1-1 - New upstream release 0.1.1 * Tue Feb 08 2022 Nikola Forró - 0.1.0-1 - Initial package