%bcond tests 1
# Use this to package a pre-release
#global commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#global snapdate yyyymmdd
Name: hatch
Version: 1.7.0%{?commit:^%{snapdate}git%(c='%{commit}'; echo "${c:0:7}")}
Release: %autorelease
Summary: A modern project, package, and virtual env manager
%global tag hatch-v%{version}
%global ref %{?commit:%{commit}}%{?!commit:%{tag}}
%global archivename hatch-%{ref}
# The entire source is (SPDX) MIT. Apache-2.0 license text in the tests is used
# as a sample license text, not as a license for the source.
License: MIT
URL: https://github.com/pypa/hatch
Source0: %{url}/archive/%{ref}/%{archivename}.tar.gz
# For now, we need a helper script to access environments defined with
# hatch/hatchling (https://hatch.pypa.io/latest/config/environment/).
Source1: extract-hatchling-environments
# Written for Fedora in groff_man(7) format based on --help output
Source100: hatch.1
Source200: hatch-build.1
Source300: hatch-clean.1
Source400: hatch-config.1
Source410: hatch-config-explore.1
Source420: hatch-config-find.1
Source430: hatch-config-restore.1
Source440: hatch-config-set.1
Source450: hatch-config-show.1
Source460: hatch-config-update.1
Source500: hatch-dep.1
Source510: hatch-dep-hash.1
Source520: hatch-dep-show.1
Source521: hatch-dep-show-requirements.1
Source522: hatch-dep-show-table.1
Source600: hatch-env.1
Source610: hatch-env-create.1
Source620: hatch-env-find.1
Source630: hatch-env-prune.1
Source640: hatch-env-remove.1
Source650: hatch-env-run.1
Source660: hatch-env-show.1
Source700: hatch-new.1
Source800: hatch-project.1
Source810: hatch-project-metadata.1
Source900: hatch-publish.1
Source1000: hatch-run.1
Source1100: hatch-shell.1
Source1200: hatch-status.1
Source1300: hatch-version.1
# Fix the sdist target when strict-naming is disabled (#834)
# https://github.com/pypa/hatch/commit/1b10663e645efd6f37d616c5de34451dc2e015c0
#
# Backporting this commit makes tests/backend/builders/test_sdist.py compatible
# with hatchling 1.14.1.
Patch: %{url}/commit/1b10663e645efd6f37d616c5de34451dc2e015c0.patch
# Fix CI (#940)
# fix unrelated ci issue
# https://github.com/pypa/hatch/commit/4ddbf0a9a720caed18d19c083ff88427c9d2a993
#
# This patch adjusts the expected whitespace in two tests to match recent
# versions of tomlkit; the change in tomlkit was introduced no later than
# 0.12.1 and no earlier than 0.11.5.
Patch: %{url}/commit/4ddbf0a9a720caed18d19c083ff88427c9d2a993.patch
BuildArch: noarch
BuildRequires: python3-devel
BuildRequires: git-core
Requires: git-core
%description
Hatch is a modern, extensible Python project manager.
Features:
• Standardized build system with reproducible builds by default
• Robust environment management with support for custom scripts
• Easy publishing to PyPI or other sources
• Version management
• Configurable project generation with sane defaults
• Responsive CLI, ~2-3x faster than equivalent tools
%prep
%autosetup -n %{archivename} -p1
%generate_buildrequires
'%{SOURCE1}' -v
%pyproject_buildrequires %{?with_tests:_req/env.test.txt}
%build
%pyproject_wheel
# The Markdown documentation is meant to be built with mkdocs. The HTML result
# is unsuitable for packaging due to various bundled and pre-minified
# JavaScript and CSS. See https://bugzilla.redhat.com/show_bug.cgi?id=2006555
# for discussion of similar problems with Sphinx and Doxygen. We therefore do
# not build or install the documentation.
%install
%pyproject_install
%pyproject_save_files hatch
install -t '%{buildroot}%{_mandir}/man1' -D -p -m 0644 \
'%{SOURCE100}' \
'%{SOURCE200}' \
'%{SOURCE300}' \
'%{SOURCE400}' '%{SOURCE410}' '%{SOURCE420}' '%{SOURCE430}' \
'%{SOURCE440}' '%{SOURCE450}' '%{SOURCE460}' \
'%{SOURCE500}' '%{SOURCE510}' '%{SOURCE520}' '%{SOURCE521}' \
'%{SOURCE522}' \
'%{SOURCE600}' '%{SOURCE610}' '%{SOURCE620}' '%{SOURCE630}' \
'%{SOURCE640}' '%{SOURCE650}' '%{SOURCE660}' \
'%{SOURCE700}' \
'%{SOURCE800}' '%{SOURCE810}' \
'%{SOURCE900}' \
'%{SOURCE1000}' \
'%{SOURCE1100}' \
'%{SOURCE1200}' \
'%{SOURCE1300}'
%check
%if %{with tests}
# There is no need to deselect mark “requires_internet” manually because it
# happens automagically via a runtime connectivity check.
# TODO: What is happening here?
# > assert zip_info.date_time == (2020, 2, 2, 0, 0, 0)
# E assert (2022, 5, 18, 0, 0, 0) == (2020, 2, 2, 0, 0, 0)
# E At index 0 diff: 2022 != 2020
# E Full diff:
# E - (2020, 2, 2, 0, 0, 0)
# E + (2022, 5, 18, 0, 0, 0)
k="${k-}${k+ and }not (TestBuildStandard and test_editable_pth)"
k="${k-}${k+ and }not (TestBuildStandard and test_editable_exact)"
k="${k-}${k+ and }not (TestBuildStandard and test_editable_default)"
k="${k-}${k+ and }not (TestBuildStandard and test_default_auto_detection)"
k="${k-}${k+ and }not test_explicit_path"
k="${k-}${k+ and }not test_default"
%pytest -k "${k-}" -vv
%else
%pyproject_check_import
%endif
%files -f %{pyproject_files}
%{_bindir}/hatch
%{_mandir}/man1/hatch.1*
%{_mandir}/man1/hatch-*.1*
%changelog
%autochangelog