==> Building on centiskorch ==> Checking for remote environment... ==> Syncing package to remote host... sending incremental file list created directory packages/python-hatchling ./ .SRCINFO 886 100% 0.00kB/s 0:00:00 886 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=7/9) .nvchecker.toml 54 100% 52.73kB/s 0:00:00 54 100% 52.73kB/s 0:00:00 (xfr#2, to-chk=6/9) LICENSE 646 100% 630.86kB/s 0:00:00 646 100% 630.86kB/s 0:00:00 (xfr#3, to-chk=5/9) PKGBUILD 1,695 100% 1.62MB/s 0:00:00 1,695 100% 1.62MB/s 0:00:00 (xfr#4, to-chk=4/9) REUSE.toml 375 100% 366.21kB/s 0:00:00 375 100% 366.21kB/s 0:00:00 (xfr#5, to-chk=3/9) python-hatchling-1.29.0-1.log 742 100% 724.61kB/s 0:00:00 742 100% 724.61kB/s 0:00:00 (xfr#6, to-chk=2/9) LICENSES/ LICENSES/0BSD.txt -> ../LICENSE sent 2,701 bytes received 192 bytes 5,786.00 bytes/sec total size is 3,864 speedup is 1.34 ==> Running pkgctl build --arch riscv64 on remote host... ==> WARNING: invalid architecture: riscv64 ==> Updating pacman database cache [?25l:: Synchronizing package databases... core downloading... extra downloading... multilib downloading... [?25h==> Building python-hatchling  -> repo: extra  -> arch: riscv64  -> worker: felix-0 ==> Building python-hatchling for [extra] (riscv64) ]3008;start=1fbcb4f6862849279d45e01c73cc8d7b;user=root;hostname=centiskorch.felixc.at;machineid=1a94f69a1f9e480395692a8eaa8e4813;bootid=5771705e949c4754b40ed390230962ed;pid=3045037;pidfdid=28207216;comm=systemd-nspawn;container=arch-nspawn-3045037;type=container\]11;?\]2;🔵 Container arch-nspawn-3045037 on centiskorch.felixc.at\[?25l:: Synchronizing package databases... core downloading... extra downloading... :: Starting full system upgrade... there is nothing to do [?25h[!p]104\[?7h]3008;end=1fbcb4f6862849279d45e01c73cc8d7b\==> Building in chroot for [extra] (riscv64)... ==> Synchronizing chroot copy [/var/lib/archbuild/extra-riscv64/root] -> [felix-0]...done ==> Making package: python-hatchling 1.29.0-1 (Sat Apr 25 02:54:23 2026) ==> Retrieving sources...  -> Downloading hatchling-v1.29.0.tar.gz... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 32768 0 32768 0 0 17962 0 00:01 31955 100 1.03M 0 1.03M 0 0 373.8k 0 00:02 521.2k 100 5.05M 0 5.05M 0 0 1.45M 0 00:03 521.2k 100 5.05M 0 5.05M 0 0 1.45M 0 00:03 521.2k 100 5.05M 0 5.05M 0 0 1.45M 0 00:03 521.2k ==> Validating source files with sha256sums... hatchling-v1.29.0.tar.gz ... Passed ]3008;start=400ec60fd44746549edf7f08fe1ff2a7;user=root;hostname=centiskorch.felixc.at;machineid=1a94f69a1f9e480395692a8eaa8e4813;bootid=5771705e949c4754b40ed390230962ed;pid=3046119;pidfdid=28208298;comm=systemd-nspawn;container=arch-nspawn-3046119;type=container\]11;?\]2;🔵 Container arch-nspawn-3046119 on centiskorch.felixc.at\==> Making package: python-hatchling 1.29.0-1 (Sat Apr 25 06:54:44 2026) ==> Checking runtime dependencies... ==> Installing missing dependencies... [?25lresolving dependencies... looking for conflicting packages... Package (7) New Version Net Change Download Size core/mpdecimal 4.0.1-3 0.31 MiB core/python 3.14.4-1 133.31 MiB 19.53 MiB extra/python-editables 0.6-1 0.04 MiB 0.01 MiB extra/python-packaging 26.2-1 1.23 MiB 0.20 MiB extra/python-pathspec 1.1.0-1 0.47 MiB 0.08 MiB extra/python-pluggy 1.6.0-3.1 0.23 MiB extra/python-trove-classifiers 2026.1.14.14-1.1 0.16 MiB Total Download Size: 19.82 MiB Total Installed Size: 135.75 MiB :: Proceed with installation? [Y/n] :: Retrieving packages... python-3.14.4-1-riscv64 downloading... python-packaging-26.2-1-any downloading... python-pathspec-1.1.0-1-any downloading... python-editables-0.6-1-any downloading... checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing mpdecimal... installing python... Optional dependencies for python python-setuptools: for building Python packages using tooling that is usually bundled with Python python-pip: for installing Python packages using tooling that is usually bundled with Python python-pipx: for installing Python software not packaged on Arch Linux sqlite: for a default database integration [installed] xz: for lzma [installed] tk: for tkinter installing python-editables... installing python-packaging... installing python-pathspec... Optional dependencies for python-pathspec python-google-re2: re2 backend installing python-pluggy... installing python-trove-classifiers... :: Running post-transaction hooks... (1/1) Arming ConditionNeedsUpdate... [?25h==> Checking buildtime dependencies... ==> Installing missing dependencies... [?25lresolving dependencies... looking for conflicting packages... Package (28) New Version Net Change Download Size extra/python-autocommand 2.2.2-9 0.08 MiB extra/python-hatchling 1.28.0-3 1.06 MiB extra/python-iniconfig 2.3.0-1 0.07 MiB extra/python-jaraco.collections 5.1.0-3 0.11 MiB extra/python-jaraco.context 6.1.2-1 0.06 MiB extra/python-jaraco.functools 4.1.0-3 0.07 MiB extra/python-jaraco.text 4.0.0-4 0.08 MiB extra/python-markdown-it-py 4.0.0-2.1 0.77 MiB extra/python-mdurl 0.1.2-9 0.06 MiB extra/python-more-itertools 11.0.2-1 0.76 MiB extra/python-platformdirs 4.9.3-1 0.40 MiB extra/python-pygments 2.19.2-3 15.30 MiB extra/python-pyproject-hooks 1.2.0-6 0.11 MiB extra/python-setuptools 1:80.9.0-4 8.03 MiB extra/python-setuptools-scm 10.0.5-1 0.15 MiB 0.04 MiB extra/python-vcs-versioning 1.1.1-1 0.80 MiB 0.15 MiB extra/python-wheel 0.46.3-1 0.31 MiB extra/uv 0.10.0-1 49.48 MiB 15.04 MiB core/libxcrypt-compat 4.5.2-1 0.19 MiB extra/python-build 1.4.2-1 0.25 MiB extra/python-click 8.3.3-1 1.38 MiB extra/python-filelock 3.20.3-1.1 0.15 MiB extra/python-hatch-vcs 0.5.0-4.1 0.04 MiB extra/python-installer 1.0.0-1 0.20 MiB extra/python-pytest 1:8.4.2-3 4.69 MiB extra/python-rich 15.0.0-1 4.49 MiB 0.57 MiB extra/python-tomli-w 1.2.0-2 0.04 MiB extra/python-uv 0.10.0-1 0.07 MiB 0.02 MiB Total Download Size: 15.81 MiB Total Installed Size: 89.19 MiB :: Proceed with installation? [Y/n] :: Retrieving packages... uv-0.10.0-1-riscv64 downloading... python-rich-15.0.0-1-any downloading... python-vcs-versioning-1.1.1-1-any downloading... python-setuptools-scm-10.0.5-1-any downloading... python-uv-0.10.0-1-riscv64 downloading... checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing python-pyproject-hooks... installing python-build... Optional dependencies for python-build python-pip: to use as the Python package installer (default) python-uv: to use as the Python package installer [pending] python-virtualenv: to use virtualenv for build isolation installing python-installer... installing libxcrypt-compat... installing python-click... installing python-filelock... installing python-hatchling... installing python-more-itertools... installing python-jaraco.functools... installing python-jaraco.context... installing python-autocommand... installing python-jaraco.text... Optional dependencies for python-jaraco.text python-inflect: for show-newlines script installing python-jaraco.collections... installing python-platformdirs... installing python-wheel... Optional dependencies for python-wheel python-keyring: for wheel.signatures python-xdg: for wheel.signatures python-setuptools: for legacy bdist_wheel subcommand [pending] installing python-setuptools... installing python-vcs-versioning... installing python-setuptools-scm... Optional dependencies for python-setuptools-scm python-rich: use rich as console log handler [pending] installing python-hatch-vcs... installing python-iniconfig... installing python-pygments... installing python-pytest... installing python-mdurl... installing python-markdown-it-py... Optional dependencies for python-markdown-it-py python-mdit_py_plugins: core plugins python-linkify-it-py: linkify extension installing python-rich... installing python-tomli-w... installing uv... installing python-uv... :: Running post-transaction hooks... (1/1) Arming ConditionNeedsUpdate... [?25h==> Retrieving sources...  -> Found hatchling-v1.29.0.tar.gz ==> WARNING: Skipping all source file integrity checks. ==> Extracting sources...  -> Extracting hatchling-v1.29.0.tar.gz with bsdtar ==> Starting build()... * Getting build dependencies for wheel... * Building wheel... Successfully built hatchling-1.29.0-py3-none-any.whl ==> Starting check()... * Building wheel... Successfully built hatch-1.29.0-py3-none-any.whl ============================= test session starts ============================== platform linux -- Python 3.14.4, pytest-8.4.2, pluggy-1.6.0 rootdir: /build/python-hatchling/src/hatch-hatchling-v1.29.0 configfile: pyproject.toml collected 969 items tests/backend/builders/hooks/test_custom.py ...... [ 0%] tests/backend/builders/hooks/test_version.py ............ [ 1%] tests/backend/builders/plugin/test_interface.py ........................ [ 4%] [ 4%] tests/backend/builders/test_binary.py ssssssssssssssssssssssssssssss [ 7%] tests/backend/builders/test_config.py .................................. [ 10%] ........................................................................ [ 18%] .....................................................................s.. [ 25%] .s.s...s.s.s..s...s...s.s.s.s.s.s.s.s.....s...s...s.... [ 31%] tests/backend/builders/test_custom.py ......... [ 32%] tests/backend/builders/test_sdist.py ................................... [ 36%] .............. [ 37%] tests/backend/builders/test_wheel.py ................................... [ 41%] .................................................FFFFFFFFFF.......sssss. [ 48%] ...... [ 49%] tests/backend/metadata/test_build.py ............. [ 50%] tests/backend/metadata/test_core.py .................................... [ 54%] ........................................................................ [ 61%] ....................................................................... [ 68%] tests/backend/metadata/test_custom_hook.py ...... [ 69%] tests/backend/metadata/test_hatch.py ........................... [ 72%] tests/backend/metadata/test_spec.py .................................... [ 76%] ........................................................................ [ 83%] ..................... [ 85%] tests/backend/test_build.py ... [ 85%] tests/backend/utils/test_context.py ......................... [ 88%] tests/backend/utils/test_fs.py .. [ 88%] tests/backend/utils/test_macos.py .......... [ 89%] tests/backend/version/scheme/test_standard.py .......................... [ 92%] ............................ [ 95%] tests/backend/version/source/test_code.py .......... [ 96%] tests/backend/version/source/test_env.py .... [ 96%] tests/backend/version/source/test_regex.py ............................. [ 99%] .. [100%] =================================== FAILURES =================================== ___________________ TestBuildStandard.test_editable_default ____________________ self = hatch = helpers = temp_dir = Path('/tmp/tmpbth1esuq') @fixed_pathlib_resolution def test_editable_default(self, hatch, helpers, temp_dir): project_name = "My.App" with temp_dir.as_cwd(): result = hatch("new", project_name) assert result.exit_code == 0, result.output project_path = temp_dir / "my-app" config = { "project": {"name": project_name, "dynamic": ["version"]}, "tool": { "hatch": { "version": {"path": "src/my_app/__about__.py"}, "build": {"targets": {"wheel": {"versions": ["editable"]}}}, }, }, } builder = WheelBuilder(str(project_path), config=config) build_path = project_path / "dist" build_path.mkdir() with project_path.as_cwd(): artifacts = list(builder.build(directory=str(build_path))) assert len(artifacts) == 1 expected_artifact = artifacts[0] build_artifacts = list(build_path.iterdir()) assert len(build_artifacts) == 1 assert expected_artifact == str(build_artifacts[0]) assert expected_artifact == str(build_path / f"{builder.project_id}-{get_python_versions_tag()}-none-any.whl") extraction_directory = temp_dir / "_archive" extraction_directory.mkdir() with zipfile.ZipFile(str(expected_artifact), "r") as zip_archive: zip_archive.extractall(str(extraction_directory)) metadata_directory = f"{builder.project_id}.dist-info" expected_files = helpers.get_template_files( "wheel.standard_editable_pth", project_name, metadata_directory=metadata_directory, package_paths=[str(project_path / "src")], ) > helpers.assert_files(extraction_directory, expected_files) /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/backend/builders/test_wheel.py:2530: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ directory = Path('/tmp/tmpbth1esuq/_archive') expected_files = [, , , , ] def assert_files(directory, expected_files, *, check_contents=True): start = str(directory) expected_relative_files = {str(f.path): f.contents for f in expected_files} seen_relative_file_paths = set() for root, _, files in os.walk(directory): relative_path = os.path.relpath(root, start) # First iteration if relative_path == ".": relative_path = "" for file_name in files: relative_file_path = os.path.join(relative_path, file_name) seen_relative_file_paths.add(relative_file_path) if check_contents and relative_file_path in expected_relative_files: file_path = os.path.join(start, relative_file_path) expected_contents = expected_relative_files[relative_file_path] try: with open(file_path, encoding="utf-8") as f: > assert f.read() == expected_contents, relative_file_path E AssertionError: my_app-0.0.1.dist-info/RECORD E assert '_editable_im...fo/RECORD,,\n' == '_my_app.pth,...fo/RECORD,,\n' E E - _my_app.pth,sha256=RtSaX6lkFOOa4-sWiIRTeRPlMiVPnV82aT8dYl0vP7s,27 E + _editable_impl_my_app.pth,sha256=RtSaX6lkFOOa4-sWiIRTeRPlMiVPnV82aT8dYl0vP7s,27 E ? ++++++++++++++ E my_app-0.0.1.dist-info/METADATA,sha256=KYGltXNeIpK347Ucoy6rvwwJuoCBkDNHdhrnd0pQOJA,76 E my_app-0.0.1.dist-info/WHEEL,sha256=e22IIVjxDyt0lABi4WpktFIGsmO_ebSDXLnPUbPK0E0,105 E my_app-0.0.1.dist-info/licenses/LICENSE.txt,sha256=eRDxJBmE9M_9v2pmeTr2O0xJJdzdCHvoZoyU0HLIf-I,1086 E my_app-0.0.1.dist-info/RECORD,, /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/helpers/helpers.py:86: AssertionError __________ TestBuildStandard.test_editable_default_extra_dependencies __________ self = hatch = helpers = temp_dir = Path('/tmp/tmpxgnilazr') @fixed_pathlib_resolution def test_editable_default_extra_dependencies(self, hatch, helpers, temp_dir): project_name = "My.App" with temp_dir.as_cwd(): result = hatch("new", project_name) assert result.exit_code == 0, result.output project_path = temp_dir / "my-app" build_script = project_path / DEFAULT_BUILD_SCRIPT build_script.write_text( helpers.dedent( """ import pathlib from hatchling.builders.hooks.plugin.interface import BuildHookInterface class CustomHook(BuildHookInterface): def initialize(self, version, build_data): build_data['dependencies'].append('binary') """ ) ) config = { "project": {"name": project_name, "dynamic": ["version"]}, "tool": { "hatch": { "version": {"path": "src/my_app/__about__.py"}, "build": {"targets": {"wheel": {"versions": ["editable"], "hooks": {"custom": {}}}}}, }, }, } builder = WheelBuilder(str(project_path), config=config) build_path = project_path / "dist" build_path.mkdir() with project_path.as_cwd(): artifacts = list(builder.build(directory=str(build_path))) assert len(artifacts) == 1 expected_artifact = artifacts[0] build_artifacts = list(build_path.iterdir()) assert len(build_artifacts) == 1 assert expected_artifact == str(build_artifacts[0]) assert expected_artifact == str(build_path / f"{builder.project_id}-{get_python_versions_tag()}-none-any.whl") extraction_directory = temp_dir / "_archive" extraction_directory.mkdir() with zipfile.ZipFile(str(expected_artifact), "r") as zip_archive: zip_archive.extractall(str(extraction_directory)) metadata_directory = f"{builder.project_id}.dist-info" expected_files = helpers.get_template_files( "wheel.standard_editable_pth_extra_dependencies", project_name, metadata_directory=metadata_directory, package_paths=[str(project_path / "src")], ) > helpers.assert_files(extraction_directory, expected_files) /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/backend/builders/test_wheel.py:2602: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ directory = Path('/tmp/tmpxgnilazr/_archive') expected_files = [, , , , ] def assert_files(directory, expected_files, *, check_contents=True): start = str(directory) expected_relative_files = {str(f.path): f.contents for f in expected_files} seen_relative_file_paths = set() for root, _, files in os.walk(directory): relative_path = os.path.relpath(root, start) # First iteration if relative_path == ".": relative_path = "" for file_name in files: relative_file_path = os.path.join(relative_path, file_name) seen_relative_file_paths.add(relative_file_path) if check_contents and relative_file_path in expected_relative_files: file_path = os.path.join(start, relative_file_path) expected_contents = expected_relative_files[relative_file_path] try: with open(file_path, encoding="utf-8") as f: > assert f.read() == expected_contents, relative_file_path E AssertionError: my_app-0.0.1.dist-info/RECORD E assert '_editable_im...fo/RECORD,,\n' == '_my_app.pth,...fo/RECORD,,\n' E E - _my_app.pth,sha256=L4XOEboC42p9iq9nZMd4YlEJfUOWDQ3iQ_64LyZDekM,27 E + _editable_impl_my_app.pth,sha256=L4XOEboC42p9iq9nZMd4YlEJfUOWDQ3iQ_64LyZDekM,27 E ? ++++++++++++++ E my_app-0.0.1.dist-info/METADATA,sha256=eeCkK_Vn4mX0vhwmBXNT8SHlv1pyFq0iz2tHR2A_sIw,98 E my_app-0.0.1.dist-info/WHEEL,sha256=e22IIVjxDyt0lABi4WpktFIGsmO_ebSDXLnPUbPK0E0,105 E my_app-0.0.1.dist-info/licenses/LICENSE.txt,sha256=eRDxJBmE9M_9v2pmeTr2O0xJJdzdCHvoZoyU0HLIf-I,1086 E my_app-0.0.1.dist-info/RECORD,, /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/helpers/helpers.py:86: AssertionError ____________ TestBuildStandard.test_editable_default_force_include _____________ self = hatch = helpers = temp_dir = Path('/tmp/tmpdwjqwr57') @fixed_pathlib_resolution def test_editable_default_force_include(self, hatch, helpers, temp_dir): project_name = "My.App" with temp_dir.as_cwd(): result = hatch("new", project_name) assert result.exit_code == 0, result.output project_path = temp_dir / "my-app" build_script = project_path / DEFAULT_BUILD_SCRIPT build_script.write_text( helpers.dedent( """ import pathlib from hatchling.builders.hooks.plugin.interface import BuildHookInterface class CustomHook(BuildHookInterface): def initialize(self, version, build_data): # Prefix z just to satisfy our ordering test assertion build_data['force_include_editable']['src/my_app/__about__.py'] = 'zfoo.py' """ ) ) config = { "project": {"name": project_name, "dynamic": ["version"]}, "tool": { "hatch": { "version": {"path": "src/my_app/__about__.py"}, "build": {"targets": {"wheel": {"versions": ["editable"], "hooks": {"custom": {}}}}}, }, }, } builder = WheelBuilder(str(project_path), config=config) build_path = project_path / "dist" build_path.mkdir() with project_path.as_cwd(): artifacts = list(builder.build(directory=str(build_path))) assert len(artifacts) == 1 expected_artifact = artifacts[0] build_artifacts = list(build_path.iterdir()) assert len(build_artifacts) == 1 assert expected_artifact == str(build_artifacts[0]) assert expected_artifact == str(build_path / f"{builder.project_id}-{get_python_versions_tag()}-none-any.whl") extraction_directory = temp_dir / "_archive" extraction_directory.mkdir() with zipfile.ZipFile(str(expected_artifact), "r") as zip_archive: zip_archive.extractall(str(extraction_directory)) metadata_directory = f"{builder.project_id}.dist-info" expected_files = helpers.get_template_files( "wheel.standard_editable_pth_force_include", project_name, metadata_directory=metadata_directory, package_paths=[str(project_path / "src")], ) > helpers.assert_files(extraction_directory, expected_files) /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/backend/builders/test_wheel.py:2675: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ directory = Path('/tmp/tmpdwjqwr57/_archive') expected_files = [, , , , ] def assert_files(directory, expected_files, *, check_contents=True): start = str(directory) expected_relative_files = {str(f.path): f.contents for f in expected_files} seen_relative_file_paths = set() for root, _, files in os.walk(directory): relative_path = os.path.relpath(root, start) # First iteration if relative_path == ".": relative_path = "" for file_name in files: relative_file_path = os.path.join(relative_path, file_name) seen_relative_file_paths.add(relative_file_path) if check_contents and relative_file_path in expected_relative_files: file_path = os.path.join(start, relative_file_path) expected_contents = expected_relative_files[relative_file_path] try: with open(file_path, encoding="utf-8") as f: > assert f.read() == expected_contents, relative_file_path E AssertionError: my_app-0.0.1.dist-info/RECORD E assert '_editable_im...fo/RECORD,,\n' == '_my_app.pth,...fo/RECORD,,\n' E E - _my_app.pth,sha256=OKe5Ab55pT800QVG-r7JqpYl5B8UvoiF4-_3uE0o5qk,27 E + _editable_impl_my_app.pth,sha256=OKe5Ab55pT800QVG-r7JqpYl5B8UvoiF4-_3uE0o5qk,27 E ? ++++++++++++++ E zfoo.py,sha256=cHtf8WXbWYfmW6Y-svqpziSfhQbNfFYysvx5rtwICZ0,116 E my_app-0.0.1.dist-info/METADATA,sha256=KYGltXNeIpK347Ucoy6rvwwJuoCBkDNHdhrnd0pQOJA,76 E my_app-0.0.1.dist-info/WHEEL,sha256=e22IIVjxDyt0lABi4WpktFIGsmO_ebSDXLnPUbPK0E0,105 E my_app-0.0.1.dist-info/licenses/LICENSE.txt,sha256=eRDxJBmE9M_9v2pmeTr2O0xJJdzdCHvoZoyU0HLIf-I,1086 E my_app-0.0.1.dist-info/RECORD,, /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/helpers/helpers.py:86: AssertionError _________ TestBuildStandard.test_editable_default_force_include_option _________ self = hatch = helpers = temp_dir = Path('/tmp/tmpsv3l9_ks') @fixed_pathlib_resolution def test_editable_default_force_include_option(self, hatch, helpers, temp_dir): project_name = "My.App" with temp_dir.as_cwd(): result = hatch("new", project_name) assert result.exit_code == 0, result.output project_path = temp_dir / "my-app" config = { "project": {"name": project_name, "dynamic": ["version"]}, "tool": { "hatch": { "version": {"path": "src/my_app/__about__.py"}, "build": { "targets": { "wheel": { "versions": ["editable"], "force-include": {"src/my_app/__about__.py": "zfoo.py"}, } } }, }, }, } builder = WheelBuilder(str(project_path), config=config) build_path = project_path / "dist" build_path.mkdir() with project_path.as_cwd(): artifacts = list(builder.build(directory=str(build_path))) assert len(artifacts) == 1 expected_artifact = artifacts[0] build_artifacts = list(build_path.iterdir()) assert len(build_artifacts) == 1 assert expected_artifact == str(build_artifacts[0]) assert expected_artifact == str(build_path / f"{builder.project_id}-{get_python_versions_tag()}-none-any.whl") extraction_directory = temp_dir / "_archive" extraction_directory.mkdir() with zipfile.ZipFile(str(expected_artifact), "r") as zip_archive: zip_archive.extractall(str(extraction_directory)) metadata_directory = f"{builder.project_id}.dist-info" expected_files = helpers.get_template_files( "wheel.standard_editable_pth_force_include", project_name, metadata_directory=metadata_directory, package_paths=[str(project_path / "src")], ) > helpers.assert_files(extraction_directory, expected_files) /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/backend/builders/test_wheel.py:2739: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ directory = Path('/tmp/tmpsv3l9_ks/_archive') expected_files = [, , , , ] def assert_files(directory, expected_files, *, check_contents=True): start = str(directory) expected_relative_files = {str(f.path): f.contents for f in expected_files} seen_relative_file_paths = set() for root, _, files in os.walk(directory): relative_path = os.path.relpath(root, start) # First iteration if relative_path == ".": relative_path = "" for file_name in files: relative_file_path = os.path.join(relative_path, file_name) seen_relative_file_paths.add(relative_file_path) if check_contents and relative_file_path in expected_relative_files: file_path = os.path.join(start, relative_file_path) expected_contents = expected_relative_files[relative_file_path] try: with open(file_path, encoding="utf-8") as f: > assert f.read() == expected_contents, relative_file_path E AssertionError: my_app-0.0.1.dist-info/RECORD E assert '_editable_im...fo/RECORD,,\n' == '_my_app.pth,...fo/RECORD,,\n' E E - _my_app.pth,sha256=GWWv9lG6nv0050whfQwLp6SQmzc7n9SeQ6JvUMwPsIo,27 E + _editable_impl_my_app.pth,sha256=GWWv9lG6nv0050whfQwLp6SQmzc7n9SeQ6JvUMwPsIo,27 E ? ++++++++++++++ E zfoo.py,sha256=cHtf8WXbWYfmW6Y-svqpziSfhQbNfFYysvx5rtwICZ0,116 E my_app-0.0.1.dist-info/METADATA,sha256=KYGltXNeIpK347Ucoy6rvwwJuoCBkDNHdhrnd0pQOJA,76 E my_app-0.0.1.dist-info/WHEEL,sha256=e22IIVjxDyt0lABi4WpktFIGsmO_ebSDXLnPUbPK0E0,105 E my_app-0.0.1.dist-info/licenses/LICENSE.txt,sha256=eRDxJBmE9M_9v2pmeTr2O0xJJdzdCHvoZoyU0HLIf-I,1086 E my_app-0.0.1.dist-info/RECORD,, /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/helpers/helpers.py:86: AssertionError _______________ TestBuildStandard.test_editable_default_symlink ________________ self = hatch = helpers = temp_dir = Path('/tmp/tmpsh7vxszm') @pytest.mark.requires_unix def test_editable_default_symlink(self, hatch, helpers, temp_dir): project_name = "My.App" with temp_dir.as_cwd(): result = hatch("new", project_name) assert result.exit_code == 0, result.output project_path = temp_dir / "my-app" symlink = project_path / "_" / "my_app" symlink.parent.ensure_dir_exists() symlink.symlink_to(project_path / "src" / "my_app") config = { "project": {"name": project_name, "dynamic": ["version"]}, "tool": { "hatch": { "version": {"path": "src/my_app/__about__.py"}, "build": {"targets": {"wheel": {"versions": ["editable"]}}}, }, }, } builder = WheelBuilder(str(project_path), config=config) build_path = project_path / "dist" build_path.mkdir() with project_path.as_cwd(): artifacts = list(builder.build(directory=str(build_path))) assert len(artifacts) == 1 expected_artifact = artifacts[0] build_artifacts = list(build_path.iterdir()) assert len(build_artifacts) == 1 assert expected_artifact == str(build_artifacts[0]) assert expected_artifact == str(build_path / f"{builder.project_id}-{get_python_versions_tag()}-none-any.whl") extraction_directory = temp_dir / "_archive" extraction_directory.mkdir() with zipfile.ZipFile(str(expected_artifact), "r") as zip_archive: zip_archive.extractall(str(extraction_directory)) metadata_directory = f"{builder.project_id}.dist-info" expected_files = helpers.get_template_files( "wheel.standard_editable_pth", project_name, metadata_directory=metadata_directory, package_paths=[str(project_path / "src")], ) > helpers.assert_files(extraction_directory, expected_files) /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/backend/builders/test_wheel.py:2799: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ directory = Path('/tmp/tmpsh7vxszm/_archive') expected_files = [, , , , ] def assert_files(directory, expected_files, *, check_contents=True): start = str(directory) expected_relative_files = {str(f.path): f.contents for f in expected_files} seen_relative_file_paths = set() for root, _, files in os.walk(directory): relative_path = os.path.relpath(root, start) # First iteration if relative_path == ".": relative_path = "" for file_name in files: relative_file_path = os.path.join(relative_path, file_name) seen_relative_file_paths.add(relative_file_path) if check_contents and relative_file_path in expected_relative_files: file_path = os.path.join(start, relative_file_path) expected_contents = expected_relative_files[relative_file_path] try: with open(file_path, encoding="utf-8") as f: > assert f.read() == expected_contents, relative_file_path E AssertionError: my_app-0.0.1.dist-info/RECORD E assert '_editable_im...fo/RECORD,,\n' == '_my_app.pth,...fo/RECORD,,\n' E E - _my_app.pth,sha256=UvrxQ7B8ac54k6sinFq3VHR6Zcp3C2C9aiEy8SONxcE,27 E + _editable_impl_my_app.pth,sha256=UvrxQ7B8ac54k6sinFq3VHR6Zcp3C2C9aiEy8SONxcE,27 E ? ++++++++++++++ E my_app-0.0.1.dist-info/METADATA,sha256=KYGltXNeIpK347Ucoy6rvwwJuoCBkDNHdhrnd0pQOJA,76 E my_app-0.0.1.dist-info/WHEEL,sha256=e22IIVjxDyt0lABi4WpktFIGsmO_ebSDXLnPUbPK0E0,105 E my_app-0.0.1.dist-info/licenses/LICENSE.txt,sha256=eRDxJBmE9M_9v2pmeTr2O0xJJdzdCHvoZoyU0HLIf-I,1086 E my_app-0.0.1.dist-info/RECORD,, /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/helpers/helpers.py:86: AssertionError ____________________ TestBuildStandard.test_editable_exact _____________________ self = hatch = helpers = temp_dir = Path('/tmp/tmpjw3hp3l2') config_file = @fixed_pathlib_resolution def test_editable_exact(self, hatch, helpers, temp_dir, config_file): config_file.model.template.plugins["default"]["src-layout"] = False config_file.save() project_name = "My.App" with temp_dir.as_cwd(): result = hatch("new", project_name) assert result.exit_code == 0, result.output project_path = temp_dir / "my-app" config = { "project": {"name": project_name, "dynamic": ["version"]}, "tool": { "hatch": { "version": {"path": "my_app/__about__.py"}, "build": {"targets": {"wheel": {"versions": ["editable"], "dev-mode-exact": True}}}, }, }, } builder = WheelBuilder(str(project_path), config=config) build_path = project_path / "dist" build_path.mkdir() with project_path.as_cwd(): artifacts = list(builder.build(directory=str(build_path))) assert len(artifacts) == 1 expected_artifact = artifacts[0] build_artifacts = list(build_path.iterdir()) assert len(build_artifacts) == 1 assert expected_artifact == str(build_artifacts[0]) assert expected_artifact == str(build_path / f"{builder.project_id}-{get_python_versions_tag()}-none-any.whl") extraction_directory = temp_dir / "_archive" extraction_directory.mkdir() with zipfile.ZipFile(str(expected_artifact), "r") as zip_archive: zip_archive.extractall(str(extraction_directory)) metadata_directory = f"{builder.project_id}.dist-info" expected_files = helpers.get_template_files( "wheel.standard_editable_exact", project_name, metadata_directory=metadata_directory, package_root=str(project_path / "my_app" / "__init__.py"), ) > helpers.assert_files(extraction_directory, expected_files) /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/backend/builders/test_wheel.py:2859: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ directory = Path('/tmp/tmpjw3hp3l2/_archive') expected_files = [, , , , ] def assert_files(directory, expected_files, *, check_contents=True): start = str(directory) expected_relative_files = {str(f.path): f.contents for f in expected_files} seen_relative_file_paths = set() for root, _, files in os.walk(directory): relative_path = os.path.relpath(root, start) # First iteration if relative_path == ".": relative_path = "" for file_name in files: relative_file_path = os.path.join(relative_path, file_name) seen_relative_file_paths.add(relative_file_path) if check_contents and relative_file_path in expected_relative_files: file_path = os.path.join(start, relative_file_path) expected_contents = expected_relative_files[relative_file_path] try: with open(file_path, encoding="utf-8") as f: > assert f.read() == expected_contents, relative_file_path E AssertionError: my_app-0.0.1.dist-info/RECORD E assert '_editable_im...fo/RECORD,,\n' == '_editable_im...fo/RECORD,,\n' E E + _editable_impl_my_app.pth,sha256=AR2kh5K9fvhIUZFFetHFXh1bj7qxHoTAzZ_SXMHARzs,28 E _editable_impl_my_app.py,sha256=1k49KkcVKy2uQMMPDC2UGBjw7iXcP3CEExnIZnO_sOo,136 E - _my_app.pth,sha256=AR2kh5K9fvhIUZFFetHFXh1bj7qxHoTAzZ_SXMHARzs,28 E my_app-0.0.1.dist-info/METADATA,sha256=4ZWWu9XQ2nbq4w8vaMQHyC-Y5BVPLHAVEto8Oe6QDrk,106 E my_app-0.0.1.dist-info/WHEEL,sha256=e22IIVjxDyt0lABi4WpktFIGsmO_ebSDXLnPUbPK0E0,105 E my_app-0.0.1.dist-info/licenses/LICENSE.txt,sha256=eRDxJBmE9M_9v2pmeTr2O0xJJdzdCHvoZoyU0HLIf-I,1086 E my_app-0.0.1.dist-info/RECORD,, /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/helpers/helpers.py:86: AssertionError ___________ TestBuildStandard.test_editable_exact_extra_dependencies ___________ self = hatch = helpers = temp_dir = Path('/tmp/tmpg4evs4n0') config_file = @fixed_pathlib_resolution def test_editable_exact_extra_dependencies(self, hatch, helpers, temp_dir, config_file): config_file.model.template.plugins["default"]["src-layout"] = False config_file.save() project_name = "My.App" with temp_dir.as_cwd(): result = hatch("new", project_name) assert result.exit_code == 0, result.output project_path = temp_dir / "my-app" build_script = project_path / DEFAULT_BUILD_SCRIPT build_script.write_text( helpers.dedent( """ import pathlib from hatchling.builders.hooks.plugin.interface import BuildHookInterface class CustomHook(BuildHookInterface): def initialize(self, version, build_data): build_data['dependencies'].append('binary') """ ) ) config = { "project": {"name": project_name, "dynamic": ["version"]}, "tool": { "hatch": { "version": {"path": "my_app/__about__.py"}, "build": { "targets": { "wheel": {"versions": ["editable"], "dev-mode-exact": True, "hooks": {"custom": {}}} } }, }, }, } builder = WheelBuilder(str(project_path), config=config) build_path = project_path / "dist" build_path.mkdir() with project_path.as_cwd(): artifacts = list(builder.build(directory=str(build_path))) assert len(artifacts) == 1 expected_artifact = artifacts[0] build_artifacts = list(build_path.iterdir()) assert len(build_artifacts) == 1 assert expected_artifact == str(build_artifacts[0]) assert expected_artifact == str(build_path / f"{builder.project_id}-{get_python_versions_tag()}-none-any.whl") extraction_directory = temp_dir / "_archive" extraction_directory.mkdir() with zipfile.ZipFile(str(expected_artifact), "r") as zip_archive: zip_archive.extractall(str(extraction_directory)) metadata_directory = f"{builder.project_id}.dist-info" expected_files = helpers.get_template_files( "wheel.standard_editable_exact_extra_dependencies", project_name, metadata_directory=metadata_directory, package_root=str(project_path / "my_app" / "__init__.py"), ) > helpers.assert_files(extraction_directory, expected_files) /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/backend/builders/test_wheel.py:2938: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ directory = Path('/tmp/tmpg4evs4n0/_archive') expected_files = [, , , , ] def assert_files(directory, expected_files, *, check_contents=True): start = str(directory) expected_relative_files = {str(f.path): f.contents for f in expected_files} seen_relative_file_paths = set() for root, _, files in os.walk(directory): relative_path = os.path.relpath(root, start) # First iteration if relative_path == ".": relative_path = "" for file_name in files: relative_file_path = os.path.join(relative_path, file_name) seen_relative_file_paths.add(relative_file_path) if check_contents and relative_file_path in expected_relative_files: file_path = os.path.join(start, relative_file_path) expected_contents = expected_relative_files[relative_file_path] try: with open(file_path, encoding="utf-8") as f: > assert f.read() == expected_contents, relative_file_path E AssertionError: my_app-0.0.1.dist-info/RECORD E assert '_editable_im...fo/RECORD,,\n' == '_editable_im...fo/RECORD,,\n' E E + _editable_impl_my_app.pth,sha256=AR2kh5K9fvhIUZFFetHFXh1bj7qxHoTAzZ_SXMHARzs,28 E _editable_impl_my_app.py,sha256=gxw-5FtvVe2F7gqx-aecmt91fWjTfTajxcZtsLFtgMo,136 E - _my_app.pth,sha256=AR2kh5K9fvhIUZFFetHFXh1bj7qxHoTAzZ_SXMHARzs,28 E my_app-0.0.1.dist-info/METADATA,sha256=mBOYNRA9PEGFDee5nlwpx7Cv9hJci06pGC4UTvBrn_k,128 E my_app-0.0.1.dist-info/WHEEL,sha256=e22IIVjxDyt0lABi4WpktFIGsmO_ebSDXLnPUbPK0E0,105 E my_app-0.0.1.dist-info/licenses/LICENSE.txt,sha256=eRDxJBmE9M_9v2pmeTr2O0xJJdzdCHvoZoyU0HLIf-I,1086 E my_app-0.0.1.dist-info/RECORD,, /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/helpers/helpers.py:86: AssertionError _____________ TestBuildStandard.test_editable_exact_force_include ______________ self = hatch = helpers = temp_dir = Path('/tmp/tmpc6oo4qiy') config_file = @fixed_pathlib_resolution def test_editable_exact_force_include(self, hatch, helpers, temp_dir, config_file): config_file.model.template.plugins["default"]["src-layout"] = False config_file.save() project_name = "My.App" with temp_dir.as_cwd(): result = hatch("new", project_name) assert result.exit_code == 0, result.output project_path = temp_dir / "my-app" build_script = project_path / DEFAULT_BUILD_SCRIPT build_script.write_text( helpers.dedent( """ import pathlib from hatchling.builders.hooks.plugin.interface import BuildHookInterface class CustomHook(BuildHookInterface): def initialize(self, version, build_data): # Prefix z just to satisfy our ordering test assertion build_data['force_include_editable']['my_app/__about__.py'] = 'zfoo.py' """ ) ) config = { "project": {"name": project_name, "dynamic": ["version"]}, "tool": { "hatch": { "version": {"path": "my_app/__about__.py"}, "build": { "targets": { "wheel": {"versions": ["editable"], "dev-mode-exact": True, "hooks": {"custom": {}}} } }, }, }, } builder = WheelBuilder(str(project_path), config=config) build_path = project_path / "dist" build_path.mkdir() with project_path.as_cwd(): artifacts = list(builder.build(directory=str(build_path))) assert len(artifacts) == 1 expected_artifact = artifacts[0] build_artifacts = list(build_path.iterdir()) assert len(build_artifacts) == 1 assert expected_artifact == str(build_artifacts[0]) assert expected_artifact == str(build_path / f"{builder.project_id}-{get_python_versions_tag()}-none-any.whl") extraction_directory = temp_dir / "_archive" extraction_directory.mkdir() with zipfile.ZipFile(str(expected_artifact), "r") as zip_archive: zip_archive.extractall(str(extraction_directory)) metadata_directory = f"{builder.project_id}.dist-info" expected_files = helpers.get_template_files( "wheel.standard_editable_exact_force_include", project_name, metadata_directory=metadata_directory, package_root=str(project_path / "my_app" / "__init__.py"), ) > helpers.assert_files(extraction_directory, expected_files) /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/backend/builders/test_wheel.py:3018: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ directory = Path('/tmp/tmpc6oo4qiy/_archive') expected_files = [, , , , , ...] def assert_files(directory, expected_files, *, check_contents=True): start = str(directory) expected_relative_files = {str(f.path): f.contents for f in expected_files} seen_relative_file_paths = set() for root, _, files in os.walk(directory): relative_path = os.path.relpath(root, start) # First iteration if relative_path == ".": relative_path = "" for file_name in files: relative_file_path = os.path.join(relative_path, file_name) seen_relative_file_paths.add(relative_file_path) if check_contents and relative_file_path in expected_relative_files: file_path = os.path.join(start, relative_file_path) expected_contents = expected_relative_files[relative_file_path] try: with open(file_path, encoding="utf-8") as f: > assert f.read() == expected_contents, relative_file_path E AssertionError: my_app-0.0.1.dist-info/RECORD E assert '_editable_im...fo/RECORD,,\n' == '_editable_im...fo/RECORD,,\n' E E + _editable_impl_my_app.pth,sha256=AR2kh5K9fvhIUZFFetHFXh1bj7qxHoTAzZ_SXMHARzs,28 E _editable_impl_my_app.py,sha256=rXp5Rx50DkDr-5BLB2wqWJfh7yJ7ogZh3hKNk0ejAmg,136 E - _my_app.pth,sha256=AR2kh5K9fvhIUZFFetHFXh1bj7qxHoTAzZ_SXMHARzs,28 E zfoo.py,sha256=cHtf8WXbWYfmW6Y-svqpziSfhQbNfFYysvx5rtwICZ0,116 E my_app-0.0.1.dist-info/METADATA,sha256=4ZWWu9XQ2nbq4w8vaMQHyC-Y5BVPLHAVEto8Oe6QDrk,106 E my_app-0.0.1.dist-info/WHEEL,sha256=e22IIVjxDyt0lABi4WpktFIGsmO_ebSDXLnPUbPK0E0,105 E my_app-0.0.1.dist-info/licenses/LICENSE.txt,sha256=eRDxJBmE9M_9v2pmeTr2O0xJJdzdCHvoZoyU0HLIf-I,1086 E my_app-0.0.1.dist-info/RECORD,, /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/helpers/helpers.py:86: AssertionError __________ TestBuildStandard.test_editable_exact_force_include_option __________ self = hatch = helpers = temp_dir = Path('/tmp/tmp36l_gl9w') config_file = @fixed_pathlib_resolution def test_editable_exact_force_include_option(self, hatch, helpers, temp_dir, config_file): config_file.model.template.plugins["default"]["src-layout"] = False config_file.save() project_name = "My.App" with temp_dir.as_cwd(): result = hatch("new", project_name) assert result.exit_code == 0, result.output project_path = temp_dir / "my-app" config = { "project": {"name": project_name, "dynamic": ["version"]}, "tool": { "hatch": { "version": {"path": "my_app/__about__.py"}, "build": { "targets": { "wheel": { "versions": ["editable"], "dev-mode-exact": True, "force-include": {"my_app/__about__.py": "zfoo.py"}, } } }, }, }, } builder = WheelBuilder(str(project_path), config=config) build_path = project_path / "dist" build_path.mkdir() with project_path.as_cwd(): artifacts = list(builder.build(directory=str(build_path))) assert len(artifacts) == 1 expected_artifact = artifacts[0] build_artifacts = list(build_path.iterdir()) assert len(build_artifacts) == 1 assert expected_artifact == str(build_artifacts[0]) assert expected_artifact == str(build_path / f"{builder.project_id}-{get_python_versions_tag()}-none-any.whl") extraction_directory = temp_dir / "_archive" extraction_directory.mkdir() with zipfile.ZipFile(str(expected_artifact), "r") as zip_archive: zip_archive.extractall(str(extraction_directory)) metadata_directory = f"{builder.project_id}.dist-info" expected_files = helpers.get_template_files( "wheel.standard_editable_exact_force_include", project_name, metadata_directory=metadata_directory, package_root=str(project_path / "my_app" / "__init__.py"), ) > helpers.assert_files(extraction_directory, expected_files) /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/backend/builders/test_wheel.py:3086: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ directory = Path('/tmp/tmp36l_gl9w/_archive') expected_files = [, , , , , ...] def assert_files(directory, expected_files, *, check_contents=True): start = str(directory) expected_relative_files = {str(f.path): f.contents for f in expected_files} seen_relative_file_paths = set() for root, _, files in os.walk(directory): relative_path = os.path.relpath(root, start) # First iteration if relative_path == ".": relative_path = "" for file_name in files: relative_file_path = os.path.join(relative_path, file_name) seen_relative_file_paths.add(relative_file_path) if check_contents and relative_file_path in expected_relative_files: file_path = os.path.join(start, relative_file_path) expected_contents = expected_relative_files[relative_file_path] try: with open(file_path, encoding="utf-8") as f: > assert f.read() == expected_contents, relative_file_path E AssertionError: my_app-0.0.1.dist-info/RECORD E assert '_editable_im...fo/RECORD,,\n' == '_editable_im...fo/RECORD,,\n' E E + _editable_impl_my_app.pth,sha256=AR2kh5K9fvhIUZFFetHFXh1bj7qxHoTAzZ_SXMHARzs,28 E _editable_impl_my_app.py,sha256=nharYbKLENmB2JjCeUJ4CaGqD2y788yguDBjPymf6-k,136 E - _my_app.pth,sha256=AR2kh5K9fvhIUZFFetHFXh1bj7qxHoTAzZ_SXMHARzs,28 E zfoo.py,sha256=cHtf8WXbWYfmW6Y-svqpziSfhQbNfFYysvx5rtwICZ0,116 E my_app-0.0.1.dist-info/METADATA,sha256=4ZWWu9XQ2nbq4w8vaMQHyC-Y5BVPLHAVEto8Oe6QDrk,106 E my_app-0.0.1.dist-info/WHEEL,sha256=e22IIVjxDyt0lABi4WpktFIGsmO_ebSDXLnPUbPK0E0,105 E my_app-0.0.1.dist-info/licenses/LICENSE.txt,sha256=eRDxJBmE9M_9v2pmeTr2O0xJJdzdCHvoZoyU0HLIf-I,1086 E my_app-0.0.1.dist-info/RECORD,, /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/helpers/helpers.py:86: AssertionError __ TestBuildStandard.test_editable_exact_force_include_build_data_precedence ___ self = hatch = helpers = temp_dir = Path('/tmp/tmpas6u3gcf') config_file = @fixed_pathlib_resolution def test_editable_exact_force_include_build_data_precedence(self, hatch, helpers, temp_dir, config_file): config_file.model.template.plugins["default"]["src-layout"] = False config_file.save() project_name = "My.App" with temp_dir.as_cwd(): result = hatch("new", project_name) assert result.exit_code == 0, result.output project_path = temp_dir / "my-app" build_script = project_path / DEFAULT_BUILD_SCRIPT build_script.write_text( helpers.dedent( """ import pathlib from hatchling.builders.hooks.plugin.interface import BuildHookInterface class CustomHook(BuildHookInterface): def initialize(self, version, build_data): # Prefix z just to satisfy our ordering test assertion build_data['force_include_editable']['my_app/__about__.py'] = 'zfoo.py' """ ) ) config = { "project": {"name": project_name, "dynamic": ["version"]}, "tool": { "hatch": { "version": {"path": "my_app/__about__.py"}, "build": { "targets": { "wheel": { "versions": ["editable"], "dev-mode-exact": True, "force-include": {"my_app/__about__.py": "zbar.py"}, "hooks": {"custom": {}}, } } }, }, }, } builder = WheelBuilder(str(project_path), config=config) build_path = project_path / "dist" build_path.mkdir() with project_path.as_cwd(): artifacts = list(builder.build(directory=str(build_path))) assert len(artifacts) == 1 expected_artifact = artifacts[0] build_artifacts = list(build_path.iterdir()) assert len(build_artifacts) == 1 assert expected_artifact == str(build_artifacts[0]) assert expected_artifact == str(build_path / f"{builder.project_id}-{get_python_versions_tag()}-none-any.whl") extraction_directory = temp_dir / "_archive" extraction_directory.mkdir() with zipfile.ZipFile(str(expected_artifact), "r") as zip_archive: zip_archive.extractall(str(extraction_directory)) metadata_directory = f"{builder.project_id}.dist-info" expected_files = helpers.get_template_files( "wheel.standard_editable_exact_force_include", project_name, metadata_directory=metadata_directory, package_root=str(project_path / "my_app" / "__init__.py"), ) > helpers.assert_files(extraction_directory, expected_files) /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/backend/builders/test_wheel.py:3171: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ directory = Path('/tmp/tmpas6u3gcf/_archive') expected_files = [, , , , , ...] def assert_files(directory, expected_files, *, check_contents=True): start = str(directory) expected_relative_files = {str(f.path): f.contents for f in expected_files} seen_relative_file_paths = set() for root, _, files in os.walk(directory): relative_path = os.path.relpath(root, start) # First iteration if relative_path == ".": relative_path = "" for file_name in files: relative_file_path = os.path.join(relative_path, file_name) seen_relative_file_paths.add(relative_file_path) if check_contents and relative_file_path in expected_relative_files: file_path = os.path.join(start, relative_file_path) expected_contents = expected_relative_files[relative_file_path] try: with open(file_path, encoding="utf-8") as f: > assert f.read() == expected_contents, relative_file_path E AssertionError: my_app-0.0.1.dist-info/RECORD E assert '_editable_im...fo/RECORD,,\n' == '_editable_im...fo/RECORD,,\n' E E + _editable_impl_my_app.pth,sha256=AR2kh5K9fvhIUZFFetHFXh1bj7qxHoTAzZ_SXMHARzs,28 E _editable_impl_my_app.py,sha256=MCjiNRjiuR7E7oysMf1HDZjl5kszYPgKbFQi-Mjdqsw,136 E - _my_app.pth,sha256=AR2kh5K9fvhIUZFFetHFXh1bj7qxHoTAzZ_SXMHARzs,28 E zfoo.py,sha256=cHtf8WXbWYfmW6Y-svqpziSfhQbNfFYysvx5rtwICZ0,116 E my_app-0.0.1.dist-info/METADATA,sha256=4ZWWu9XQ2nbq4w8vaMQHyC-Y5BVPLHAVEto8Oe6QDrk,106 E my_app-0.0.1.dist-info/WHEEL,sha256=e22IIVjxDyt0lABi4WpktFIGsmO_ebSDXLnPUbPK0E0,105 E my_app-0.0.1.dist-info/licenses/LICENSE.txt,sha256=eRDxJBmE9M_9v2pmeTr2O0xJJdzdCHvoZoyU0HLIf-I,1086 E my_app-0.0.1.dist-info/RECORD,, /build/python-hatchling/src/hatch-hatchling-v1.29.0/tests/helpers/helpers.py:86: AssertionError =========================== short test summary info ============================ FAILED tests/backend/builders/test_wheel.py::TestBuildStandard::test_editable_default FAILED tests/backend/builders/test_wheel.py::TestBuildStandard::test_editable_default_extra_dependencies FAILED tests/backend/builders/test_wheel.py::TestBuildStandard::test_editable_default_force_include FAILED tests/backend/builders/test_wheel.py::TestBuildStandard::test_editable_default_force_include_option FAILED tests/backend/builders/test_wheel.py::TestBuildStandard::test_editable_default_symlink FAILED tests/backend/builders/test_wheel.py::TestBuildStandard::test_editable_exact FAILED tests/backend/builders/test_wheel.py::TestBuildStandard::test_editable_exact_extra_dependencies FAILED tests/backend/builders/test_wheel.py::TestBuildStandard::test_editable_exact_force_include FAILED tests/backend/builders/test_wheel.py::TestBuildStandard::test_editable_exact_force_include_option FAILED tests/backend/builders/test_wheel.py::TestBuildStandard::test_editable_exact_force_include_build_data_precedence ================= 10 failed, 905 passed, 54 skipped in 26.54s ================== ==> ERROR: A failure occurred in check().  Aborting... [!p]104\[?7h]3008;end=400ec60fd44746549edf7f08fe1ff2a7\==> ERROR: Build failed, check /var/lib/archbuild/extra-riscv64/felix-0/build [?25h[?25h[?25hreceiving incremental file list python-hatchling-1.29.0-1-riscv64-build.log python-hatchling-1.29.0-1-riscv64-check.log sent 62 bytes received 4,878 bytes 9,880.00 bytes/sec total size is 58,693 speedup is 11.88