=============================================================================== About this build: this rebuild has been done as part of reproduce.debian.net where we aim to reproduce Debian binary packages distributed via ftp.debian.org, by rebuilding using the exact same packages as the original build on the buildds, as described in the relevant .buildinfo file from buildinfos.debian.net. For more information please go to https://reproduce.debian.net or join #debian-reproducible on irc.debian.org =============================================================================== Preparing download of sources for /srv/rebuilderd/tmp/rebuilderdEZYqmS/inputs/torf_4.3.0-1_all.buildinfo Source: torf Version: 4.3.0-1 rebuilderd-worker node: ionos24-amd64 +------------------------------------------------------------------------------+ | Downloading sources Wed, 25 Feb 2026 15:50:55 +0000 | +------------------------------------------------------------------------------+ Get:1 https://deb.debian.org/debian trixie InRelease [140 kB] Get:2 https://deb.debian.org/debian-security trixie-security InRelease [43.4 kB] Get:3 https://deb.debian.org/debian trixie-updates InRelease [47.3 kB] Get:4 https://deb.debian.org/debian trixie-proposed-updates InRelease [57.6 kB] Get:5 https://deb.debian.org/debian trixie-backports InRelease [54.0 kB] Get:6 https://deb.debian.org/debian forky InRelease [137 kB] Get:7 https://deb.debian.org/debian sid InRelease [187 kB] Get:8 https://deb.debian.org/debian experimental InRelease [91.7 kB] Get:9 https://deb.debian.org/debian trixie/non-free-firmware Sources [6552 B] Get:10 https://deb.debian.org/debian trixie/main Sources [10.5 MB] Get:11 https://deb.debian.org/debian-security trixie-security/main Sources [136 kB] Get:12 https://deb.debian.org/debian-security trixie-security/non-free-firmware Sources [696 B] Get:13 https://deb.debian.org/debian trixie-updates/main Sources [2788 B] Get:14 https://deb.debian.org/debian trixie-proposed-updates/main Sources [70.5 kB] Get:15 https://deb.debian.org/debian trixie-backports/non-free-firmware Sources [2468 B] Get:16 https://deb.debian.org/debian trixie-backports/main Sources [147 kB] Get:17 https://deb.debian.org/debian forky/non-free-firmware Sources [8304 B] Get:18 https://deb.debian.org/debian forky/main Sources [10.6 MB] Get:19 https://deb.debian.org/debian sid/non-free-firmware Sources [10.6 kB] Get:20 https://deb.debian.org/debian sid/main Sources [11.3 MB] Get:21 https://deb.debian.org/debian experimental/main Sources [402 kB] Get:22 https://deb.debian.org/debian experimental/non-free-firmware Sources [2572 B] Fetched 34.0 MB in 3s (10.3 MB/s) Reading package lists... 'https://deb.debian.org/debian/pool/main/t/torf/torf_4.3.0-1.dsc' torf_4.3.0-1.dsc 2256 SHA256:81c25cc796cb2d3af8fee504d9f1d79dfe909d448da8b1f25716bbb050c8da0e 'https://deb.debian.org/debian/pool/main/t/torf/torf_4.3.0.orig.tar.gz' torf_4.3.0.orig.tar.gz 122207 SHA256:3f132c98b690d58391195752a1f65c110781019253c82be4ad811a36af148e33 'https://deb.debian.org/debian/pool/main/t/torf/torf_4.3.0-1.debian.tar.xz' torf_4.3.0-1.debian.tar.xz 3620 SHA256:de04c582730bae2041301c8c5a62a2c70f199d80fecb811911981dce07b56580 3f132c98b690d58391195752a1f65c110781019253c82be4ad811a36af148e33 torf_4.3.0.orig.tar.gz de04c582730bae2041301c8c5a62a2c70f199d80fecb811911981dce07b56580 torf_4.3.0-1.debian.tar.xz 81c25cc796cb2d3af8fee504d9f1d79dfe909d448da8b1f25716bbb050c8da0e torf_4.3.0-1.dsc +------------------------------------------------------------------------------+ | Calling debrebuild Wed, 25 Feb 2026 15:50:59 +0000 | +------------------------------------------------------------------------------+ + nice /usr/bin/debrebuild --buildresult=/srv/rebuilderd/tmp/rebuilderdEZYqmS/outRebuilding torf=4.3.0-1 in /srv/rebuilderd/tmp/rebuilderdEZYqmS/inputs now. --builder=sbuild+unshare --cache=/srv/rebuilderd/cache -- /srv/rebuilderd/tmp/rebuilderdEZYqmS/inputs/torf_4.3.0-1_all.buildinfo /srv/rebuilderd/tmp/rebuilderdEZYqmS/inputs/torf_4.3.0-1_all.buildinfo contains a GPG signature which has NOT been validated Using defined Build-Path: /build/reproducible-path/torf-4.3.0 I: verifying dsc... successful! Get:1 http://deb.debian.org/debian unstable InRelease [187 kB] Get:2 http://snapshot.debian.org/archive/debian/20260224T144255Z forky InRelease [137 kB] Get:3 http://deb.debian.org/debian unstable/main amd64 Packages [10.2 MB] Get:4 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 Packages [9524 kB] Fetched 20.0 MB in 2s (8385 kB/s) Reading package lists... W: http://snapshot.debian.org/archive/debian/20260224T144255Z/dists/forky/InRelease: Loading /etc/apt/trusted.gpg from deprecated option Dir::Etc::Trusted Get:1 http://deb.debian.org/debian unstable/main amd64 python3-build all 1.4.0-1 [38.8 kB] Fetched 38.8 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpngmcolns/python3-build_1.4.0-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libpython3.14-minimal amd64 3.14.3-1 [897 kB] Fetched 897 kB in 0s (63.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmvnk1pku/libpython3.14-minimal_3.14.3-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-minimal amd64 3.13.9-3 [27.6 kB] Fetched 27.6 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0a6syvv3/python3-minimal_3.13.9-3_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libsframe3 amd64 2.46-2 [84.6 kB] Fetched 84.6 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp73ac8jce/libsframe3_2.46-2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 base-files amd64 14 [72.9 kB] Fetched 72.9 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp_d8eali6/base-files_14_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libblkid1 amd64 2.41.3-4 [174 kB] Fetched 174 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmppth4xj5e/libblkid1_2.41.3-4_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 rpcsvc-proto amd64 1.4.3-1 [63.3 kB] Fetched 63.3 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpt_dkb1ua/rpcsvc-proto_1.4.3-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 libcc1-0 amd64 15.2.0-13 [42.7 kB] Fetched 42.7 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpanejk91i/libcc1-0_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libncursesw6 amd64 6.6+20251231-1 [137 kB] Fetched 137 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpfh7e09z1/libncursesw6_6.6+20251231-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libaudit1 amd64 1:4.1.2-1+b1 [60.2 kB] Fetched 60.2 kB in 0s (0 B/s) dpkg-name: info: moved 'libaudit1_1%3a4.1.2-1+b1_amd64.deb' to '/srv/rebuilderd/tmp/tmp614w1wqu/libaudit1_4.1.2-1+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libctf-nobfd0 amd64 2.46-2 [160 kB] Fetched 160 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpzzbf2bml/libctf-nobfd0_2.46-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 libstdc++-15-dev amd64 15.2.0-13 [2446 kB] Fetched 2446 kB in 0s (114 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpii2ydv8s/libstdc++-15-dev_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 sensible-utils all 0.0.26 [27.0 kB] Fetched 27.0 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvu62xm1q/sensible-utils_0.0.26_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 intltool-debian all 0.35.0+20060710.6 [22.9 kB] Fetched 22.9 kB in 0s (1889 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7srjy3ef/intltool-debian_0.35.0+20060710.6_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libpython3.13-minimal amd64 3.13.12-1 [866 kB] Fetched 866 kB in 0s (60.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnn6nxd3u/libpython3.13-minimal_3.13.12-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 binutils amd64 2.46-2 [282 kB] Fetched 282 kB in 0s (27.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpposldbai/binutils_2.46-2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libc6 amd64 2.42-13 [1814 kB] Fetched 1814 kB in 0s (99.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmyqxsmiz/libc6_2.42-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 media-types all 14.0.0 [30.8 kB] Fetched 30.8 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7hj0nqyb/media-types_14.0.0_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 hostname amd64 3.25 [11.0 kB] Fetched 11.0 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpfwp28oef/hostname_3.25_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 patch amd64 2.8-2 [134 kB] Fetched 134 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5vn9gsk7/patch_2.8-2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-pytest all 9.0.2-2 [275 kB] Fetched 275 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpfh11008x/python3-pytest_9.0.2-2_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libmagic1t64 amd64 1:5.46-5+b1 [110 kB] Fetched 110 kB in 0s (0 B/s) dpkg-name: info: moved 'libmagic1t64_1%3a5.46-5+b1_amd64.deb' to '/srv/rebuilderd/tmp/tmpj2arr0go/libmagic1t64_5.46-5+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-iniconfig all 2.1.0-2 [7540 B] Fetched 7540 B in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpe9b64937/python3-iniconfig_2.1.0-2_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libelf1t64 amd64 0.194-1 [185 kB] Fetched 185 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpbqpdfs18/libelf1t64_0.194-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 debianutils amd64 5.23.2 [92.4 kB] Fetched 92.4 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpd7l0esze/debianutils_5.23.2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libmpfr6 amd64 4.2.2-2+b1 [729 kB] Fetched 729 kB in 0s (59.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpwjb3a5mj/libmpfr6_4.2.2-2+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3.13-minimal amd64 3.13.12-1 [2267 kB] Fetched 2267 kB in 0s (116 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmph0tufh8j/python3.13-minimal_3.13.12-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-more-itertools all 10.8.0-1 [71.7 kB] Fetched 71.7 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpbzf08aa5/python3-more-itertools_10.8.0-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 debconf all 1.5.92 [123 kB] Fetched 123 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpwfh5a513/debconf_1.5.92_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 bzip2 amd64 1.0.8-6+b1 [41.0 kB] Fetched 41.0 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0dy0bu8a/bzip2_1.0.8-6+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libc6-dev amd64 2.42-13 [2016 kB] Fetched 2016 kB in 0s (102 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplvlnmtku/libc6-dev_2.42-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libaudit-common all 1:4.1.2-1 [14.3 kB] Fetched 14.3 kB in 0s (0 B/s) dpkg-name: info: moved 'libaudit-common_1%3a4.1.2-1_all.deb' to '/srv/rebuilderd/tmp/tmpnayrgf9y/libaudit-common_4.1.2-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 dh-strip-nondeterminism all 1.15.0-1 [8812 B] Fetched 8812 B in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3evlifxm/dh-strip-nondeterminism_1.15.0-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 gcc-15-base amd64 15.2.0-13 [54.8 kB] Fetched 54.8 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6cjhm46k/gcc-15-base_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libc-bin amd64 2.42-13 [644 kB] Fetched 644 kB in 0s (50.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0aur0s3n/libc-bin_2.42-13_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 liblsan0 amd64 15.2.0-13 [1249 kB] Fetched 1249 kB in 0s (83.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpxn79ombs/liblsan0_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libmount1 amd64 2.41.3-4 [212 kB] Fetched 212 kB in 0s (20.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdtstvr74/libmount1_2.41.3-4_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-markupsafe amd64 3.0.3-1+b1 [14.3 kB] Fetched 14.3 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpotfo3pr5/python3-markupsafe_3.0.3-1+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libmagic-mgc amd64 1:5.46-5+b1 [338 kB] Fetched 338 kB in 0s (28.3 MB/s) dpkg-name: info: moved 'libmagic-mgc_1%3a5.46-5+b1_amd64.deb' to '/srv/rebuilderd/tmp/tmptecr_3fj/libmagic-mgc_5.46-5+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libsmartcols1 amd64 2.41.3-4 [145 kB] Fetched 145 kB in 0s (14.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpo0hw046e/libsmartcols1_2.41.3-4_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-inflect all 7.5.0-1 [33.0 kB] Fetched 33.0 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpm4yezcae/python3-inflect_7.5.0-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 zlib1g amd64 1:1.3.dfsg+really1.3.1-3 [89.0 kB] Fetched 89.0 kB in 0s (8684 kB/s) dpkg-name: info: moved 'zlib1g_1%3a1.3.dfsg+really1.3.1-3_amd64.deb' to '/srv/rebuilderd/tmp/tmpu9a4211s/zlib1g_1.3.dfsg+really1.3.1-3_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 util-linux amd64 2.41.3-4 [1166 kB] Fetched 1166 kB in 0s (79.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdimyr26k/util-linux_2.41.3-4_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libuchardet0 amd64 0.0.8-2+b1 [68.8 kB] Fetched 68.8 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpedaf43vf/libuchardet0_0.0.8-2+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libattr1 amd64 1:2.5.2-4 [23.0 kB] Fetched 23.0 kB in 0s (0 B/s) dpkg-name: info: moved 'libattr1_1%3a2.5.2-4_amd64.deb' to '/srv/rebuilderd/tmp/tmpbwf0ngpo/libattr1_2.5.2-4_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-jaraco.context all 6.0.1-2 [8184 B] Fetched 8184 B in 0s (680 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmps3w1arq8/python3-jaraco.context_6.0.1-2_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libpipeline1 amd64 1.5.8-2 [42.1 kB] Fetched 42.1 kB in 0s (3415 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpljjqct7q/libpipeline1_1.5.8-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 cpp-15 amd64 15.2.0-13 [1276 B] Fetched 1276 B in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdgwtg6_a/cpp-15_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libmd0 amd64 1.1.0-2+b2 [36.2 kB] Fetched 36.2 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpveij2s35/libmd0_1.1.0-2+b2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 po-debconf all 1.0.22 [216 kB] Fetched 216 kB in 0s (20.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpk7f1l0co/po-debconf_1.0.22_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libpam-modules amd64 1.7.0-5+b1 [179 kB] Fetched 179 kB in 0s (16.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplo_qcv8k/libpam-modules_1.7.0-5+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 dpkg-dev all 1.23.5 [1318 kB] Fetched 1318 kB in 0s (88.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpqyvyi94r/dpkg-dev_1.23.5_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libpcre2-8-0 amd64 10.46-1+b1 [298 kB] Fetched 298 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpf95ldr7t/libpcre2-8-0_10.46-1+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 make amd64 4.4.1-3 [463 kB] Fetched 463 kB in 0s (41.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnacfn49a/make_4.4.1-3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 gcc-15 amd64 15.2.0-13 [535 kB] Fetched 535 kB in 0s (46.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4re5lcno/gcc-15_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-autocommand all 2.2.2-4 [13.7 kB] Fetched 13.7 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpxowvztqx/python3-autocommand_2.2.2-4_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 cpp-x86-64-linux-gnu amd64 4:15.2.0-5 [5324 B] Fetched 5324 B in 0s (0 B/s) dpkg-name: info: moved 'cpp-x86-64-linux-gnu_4%3a15.2.0-5_amd64.deb' to '/srv/rebuilderd/tmp/tmpdjinlccv/cpp-x86-64-linux-gnu_15.2.0-5_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libc-dev-bin amd64 2.42-13 [61.5 kB] Fetched 61.5 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpxzcnbu4s/libc-dev-bin_2.42-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libssl3t64 amd64 3.5.5-1 [2449 kB] Fetched 2449 kB in 0s (114 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpyvxyjwfv/libssl3t64_3.5.5-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-pytest-httpserver all 1.1.3-2 [23.6 kB] Fetched 23.6 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpt7tp9mh8/python3-pytest-httpserver_1.1.3-2_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 liblzma5 amd64 5.8.2-2 [327 kB] Fetched 327 kB in 0s (31.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp47v4l4jd/liblzma5_5.8.2-2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 perl-base amd64 5.40.1-7 [1679 kB] Fetched 1679 kB in 0s (96.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2dro8u1y/perl-base_5.40.1-7_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 dash amd64 0.5.12-12 [98.5 kB] Fetched 98.5 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp9x1cg7i6/dash_0.5.12-12_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-fastbencode amd64 0.3.8-1 [259 kB] Fetched 259 kB in 0s (1944 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpoyxkn9n_/python3-fastbencode_0.3.8-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 libtsan2 amd64 15.2.0-13 [2491 kB] Fetched 2491 kB in 0s (113 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp99il42mg/libtsan2_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 mawk amd64 1.3.4.20260129-1 [143 kB] Fetched 143 kB in 0s (14.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpytr77rj_/mawk_1.3.4.20260129-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 autotools-dev all 20240727.1 [60.2 kB] Fetched 60.2 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpt2ap6uwd/autotools-dev_20240727.1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libpam-modules-bin amd64 1.7.0-5+b1 [49.8 kB] Fetched 49.8 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpi1nipvn5/libpam-modules-bin_1.7.0-5+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libpam0g amd64 1.7.0-5+b1 [70.4 kB] Fetched 70.4 kB in 0s (1094 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp8jyda6n_/libpam0g_1.7.0-5+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libc-gconv-modules-extra amd64 2.42-13 [1123 kB] Fetched 1123 kB in 0s (3300 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpwpw3ztnn/libc-gconv-modules-extra_2.42-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 openssl-provider-legacy amd64 3.5.5-1 [311 kB] Fetched 311 kB in 0s (847 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpn8413ski/openssl-provider-legacy_3.5.5-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-execnet all 2.1.1-1 [40.2 kB] Fetched 40.2 kB in 0s (383 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5rwfl3ag/python3-execnet_2.1.1-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libdebconfclient0 amd64 0.282+b2 [11.2 kB] Fetched 11.2 kB in 0s (137 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp8tgdpaq2/libdebconfclient0_0.282+b2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3.14-minimal amd64 3.14.3-1 [2406 kB] Fetched 2406 kB in 0s (115 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6eidp713/python3.14-minimal_3.14.3-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 man-db amd64 2.13.1-1 [1469 kB] Fetched 1469 kB in 0s (94.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpo33bn1rv/man-db_2.13.1-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 gcc-15-x86-64-linux-gnu amd64 15.2.0-13 [23.4 MB] Fetched 23.4 MB in 0s (154 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmptwmzzqpn/gcc-15-x86-64-linux-gnu_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libbz2-1.0 amd64 1.0.8-6+b1 [40.4 kB] Fetched 40.4 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpe4qi6g2r/libbz2-1.0_1.0.8-6+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 gzip amd64 1.13-1 [138 kB] Fetched 138 kB in 0s (12.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5btobedo/gzip_1.13-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-pluggy all 1.6.0-2 [27.2 kB] Fetched 27.2 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpj73pfzo9/python3-pluggy_1.6.0-2_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 dpkg amd64 1.23.5 [1527 kB] Fetched 1527 kB in 0s (92.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpqceiskdz/dpkg_1.23.5_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 libatomic1 amd64 15.2.0-13 [9492 B] Fetched 9492 B in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpzk7hbsu0/libatomic1_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-zipp all 3.23.0-1 [11.0 kB] Fetched 11.0 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnshmdh94/python3-zipp_3.23.0-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-setuptools all 78.1.1-0.1 [738 kB] Fetched 738 kB in 0s (59.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpgm5id6j8/python3-setuptools_78.1.1-0.1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 perl amd64 5.40.1-7 [267 kB] Fetched 267 kB in 0s (26.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvqa9orpz/perl_5.40.1-7_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 cpp amd64 4:15.2.0-5 [1564 B] Fetched 1564 B in 0s (0 B/s) dpkg-name: info: moved 'cpp_4%3a15.2.0-5_amd64.deb' to '/srv/rebuilderd/tmp/tmph0zy46rk/cpp_15.2.0-5_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libbinutils amd64 2.46-2 [548 kB] Fetched 548 kB in 0s (46.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1665mvou/libbinutils_2.46-2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 sed amd64 4.9-2 [329 kB] Fetched 329 kB in 0s (32.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpwirziz09/sed_4.9-2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libpython3-stdlib amd64 3.13.9-3 [10.5 kB] Fetched 10.5 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp092tz1w0/libpython3-stdlib_3.13.9-3_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libdebhelper-perl all 13.30 [92.7 kB] Fetched 92.7 kB in 0s (407 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7n4isl5z/libdebhelper-perl_13.30_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 build-essential amd64 12.12 [4624 B] Fetched 4624 B in 0s (23.9 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpn6d6yuid/build-essential_12.12_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libtinfo6 amd64 6.6+20251231-1 [354 kB] Fetched 354 kB in 0s (733 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnu6ratnw/libtinfo6_6.6+20251231-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libcap2 amd64 1:2.75-10+b5 [28.8 kB] Fetched 28.8 kB in 0s (127 kB/s) dpkg-name: info: moved 'libcap2_1%3a2.75-10+b5_amd64.deb' to '/srv/rebuilderd/tmp/tmp3y1bhgog/libcap2_2.75-10+b5_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 tzdata all 2025c-3 [263 kB] Fetched 263 kB in 0s (645 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpirai45nr/tzdata_2025c-3_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 grep amd64 3.12-1 [443 kB] Fetched 443 kB in 0s (42.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmjd4p74r/grep_3.12-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 netbase all 6.5 [12.4 kB] Fetched 12.4 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpo_o9vybp/netbase_6.5_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 libasan8 amd64 15.2.0-13 [2779 kB] Fetched 2779 kB in 0s (127 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmps4n096ic/libasan8_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libzstd1 amd64 1.5.7+dfsg-3+b1 [308 kB] Fetched 308 kB in 0s (27.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpcbm66igs/libzstd1_1.5.7+dfsg-3+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 bash amd64 5.3-2 [1561 kB] Fetched 1561 kB in 0s (95.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp59gk2x_8/bash_5.3-2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libacl1 amd64 2.3.2-3 [32.7 kB] Fetched 32.7 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpla85tupz/libacl1_2.3.2-3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 libitm1 amd64 15.2.0-13 [26.5 kB] Fetched 26.5 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6oy0x7fj/libitm1_15.2.0-13_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 libgomp1 amd64 15.2.0-13 [141 kB] Fetched 141 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvadao2a6/libgomp1_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 base-passwd amd64 3.6.8 [54.6 kB] Fetched 54.6 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp72yuhpoe/base-passwd_3.6.8_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-pyproject-hooks all 1.2.0-1 [11.7 kB] Fetched 11.7 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpj1ki7oqu/python3-pyproject-hooks_1.2.0-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 tar amd64 1.35+dfsg-4 [817 kB] Fetched 817 kB in 0s (64.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp96_exq4r/tar_1.35+dfsg-4_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3.13 amd64 3.13.12-1 [776 kB] Fetched 776 kB in 0s (61.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmph2nhpw83/python3.13_3.13.12-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libxml2-16 amd64 2.15.1+dfsg-2+b1 [641 kB] Fetched 641 kB in 0s (54.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpb_0q9v7w/libxml2-16_2.15.1+dfsg-2+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3.14 amd64 3.14.3-1 [836 kB] Fetched 836 kB in 0s (61.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1noal087/python3.14_3.14.3-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-wheel all 0.46.3-2 [27.5 kB] Fetched 27.5 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpst274irg/python3-wheel_0.46.3-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 libquadmath0 amd64 15.2.0-13 [145 kB] Fetched 145 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpwj7ut6w5/libquadmath0_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 gcc amd64 4:15.2.0-5 [5160 B] Fetched 5160 B in 0s (0 B/s) dpkg-name: info: moved 'gcc_4%3a15.2.0-5_amd64.deb' to '/srv/rebuilderd/tmp/tmpm23sowmq/gcc_15.2.0-5_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libsqlite3-0 amd64 3.46.1-9 [920 kB] Fetched 920 kB in 0s (66.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5i8hwrxn/libsqlite3-0_3.46.1-9_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 dh-python all 7.20260125 [119 kB] Fetched 119 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0d7b6fiu/dh-python_7.20260125_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libpython3.14-stdlib amd64 3.14.3-1 [2263 kB] Fetched 2263 kB in 0s (113 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpirpcklq1/libpython3.14-stdlib_3.14.3-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-typeguard all 4.4.4-2 [37.2 kB] Fetched 37.2 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnjso_wz9/python3-typeguard_4.4.4-2_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 g++-x86-64-linux-gnu amd64 4:15.2.0-5 [1200 B] Fetched 1200 B in 0s (0 B/s) dpkg-name: info: moved 'g++-x86-64-linux-gnu_4%3a15.2.0-5_amd64.deb' to '/srv/rebuilderd/tmp/tmpa0k1pl0c/g++-x86-64-linux-gnu_15.2.0-5_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 groff-base amd64 1.23.0-10 [1194 kB] Fetched 1194 kB in 0s (86.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmptkawih_s/groff-base_1.23.0-10_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-typing-extensions all 4.15.0-2 [92.5 kB] Fetched 92.5 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpk3i6gc6a/python3-typing-extensions_4.15.0-2_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libcap-ng0 amd64 0.9.1-1 [17.4 kB] Fetched 17.4 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpn4jr667d/libcap-ng0_0.9.1-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-installer all 0.7.0+dfsg1-3 [18.6 kB] Fetched 18.6 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphchb_h6o/python3-installer_0.7.0+dfsg1-3_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libselinux1 amd64 3.9-4+b1 [86.1 kB] Fetched 86.1 kB in 0s (7799 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpfq_moidx/libselinux1_3.9-4+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 automake all 1:1.18.1-3 [878 kB] Fetched 878 kB in 0s (68.2 MB/s) dpkg-name: info: moved 'automake_1%3a1.18.1-3_all.deb' to '/srv/rebuilderd/tmp/tmpfbznc66r/automake_1.18.1-3_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 ncurses-bin amd64 6.6+20251231-1 [445 kB] Fetched 445 kB in 0s (41.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1tnt4b3a/ncurses-bin_6.6+20251231-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libunistring5 amd64 1.3-2+b1 [466 kB] Fetched 466 kB in 0s (43.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp8xqdkyjt/libunistring5_1.3-2+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 gettext amd64 0.23.2-1 [1687 kB] Fetched 1687 kB in 0s (99.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpva970yzu/gettext_0.23.2-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libisl23 amd64 0.27-1+b1 [663 kB] Fetched 663 kB in 0s (57.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpb5l4u2xk/libisl23_0.27-1+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-jaraco.functools all 4.1.0-1 [12.0 kB] Fetched 12.0 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpk86bxxhd/python3-jaraco.functools_4.1.0-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 libhwasan0 amd64 15.2.0-13 [1538 kB] Fetched 1538 kB in 0s (94.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpxefxg9x5/libhwasan0_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 autoconf all 2.72-3.1 [494 kB] Fetched 494 kB in 0s (46.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpyijkpbuz/autoconf_2.72-3.1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 autopoint all 0.23.2-1 [772 kB] Fetched 772 kB in 0s (60.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp795vtbzj/autopoint_0.23.2-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 readline-common all 8.3-4 [74.8 kB] Fetched 74.8 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3t31_ubc/readline-common_8.3-4_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-pygments all 2.19.2+dfsg-1 [847 kB] Fetched 847 kB in 0s (64.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpip4zrj7_/python3-pygments_2.19.2+dfsg-1_all.deb' Downloading dependency 1 of 190: python3-build:amd64=1.4.0-1 Downloading dependency 2 of 190: libpython3.14-minimal:amd64=3.14.3-1 Downloading dependency 3 of 190: python3-minimal:amd64=3.13.9-3 Downloading dependency 4 of 190: libsframe3:amd64=2.46-2 Downloading dependency 5 of 190: base-files:amd64=14 Downloading dependency 6 of 190: libblkid1:amd64=2.41.3-4 Downloading dependency 7 of 190: rpcsvc-proto:amd64=1.4.3-1 Downloading dependency 8 of 190: libcc1-0:amd64=15.2.0-13 Downloading dependency 9 of 190: libncursesw6:amd64=6.6+20251231-1 Downloading dependency 10 of 190: libaudit1:amd64=1:4.1.2-1+b1 Downloading dependency 11 of 190: libctf-nobfd0:amd64=2.46-2 Downloading dependency 12 of 190: libstdc++-15-dev:amd64=15.2.0-13 Downloading dependency 13 of 190: sensible-utils:amd64=0.0.26 Downloading dependency 14 of 190: intltool-debian:amd64=0.35.0+20060710.6 Downloading dependency 15 of 190: libpython3.13-minimal:amd64=3.13.12-1 Downloading dependency 16 of 190: binutils:amd64=2.46-2 Downloading dependency 17 of 190: libc6:amd64=2.42-13 Downloading dependency 18 of 190: media-types:amd64=14.0.0 Downloading dependency 19 of 190: hostname:amd64=3.25 Downloading dependency 20 of 190: patch:amd64=2.8-2 Downloading dependency 21 of 190: python3-pytest:amd64=9.0.2-2 Downloading dependency 22 of 190: libmagic1t64:amd64=1:5.46-5+b1 Downloading dependency 23 of 190: python3-iniconfig:amd64=2.1.0-2 Downloading dependency 24 of 190: libelf1t64:amd64=0.194-1 Downloading dependency 25 of 190: debianutils:amd64=5.23.2 Downloading dependency 26 of 190: libmpfr6:amd64=4.2.2-2+b1 Downloading dependency 27 of 190: python3.13-minimal:amd64=3.13.12-1 Downloading dependency 28 of 190: python3-more-itertools:amd64=10.8.0-1 Downloading dependency 29 of 190: debconf:amd64=1.5.92 Downloading dependency 30 of 190: bzip2:amd64=1.0.8-6+b1 Downloading dependency 31 of 190: libc6-dev:amd64=2.42-13 Downloading dependency 32 of 190: libaudit-common:amd64=1:4.1.2-1 Downloading dependency 33 of 190: dh-strip-nondeterminism:amd64=1.15.0-1 Downloading dependency 34 of 190: gcc-15-base:amd64=15.2.0-13 Downloading dependency 35 of 190: libc-bin:amd64=2.42-13 Downloading dependency 36 of 190: liblsan0:amd64=15.2.0-13 Downloading dependency 37 of 190: libmount1:amd64=2.41.3-4 Downloading dependency 38 of 190: python3-markupsafe:amd64=3.0.3-1+b1 Downloading dependency 39 of 190: libmagic-mgc:amd64=1:5.46-5+b1 Downloading dependency 40 of 190: libsmartcols1:amd64=2.41.3-4 Downloading dependency 41 of 190: python3-inflect:amd64=7.5.0-1 Downloading dependency 42 of 190: zlib1g:amd64=1:1.3.dfsg+really1.3.1-3 Downloading dependency 43 of 190: util-linux:amd64=2.41.3-4 Downloading dependency 44 of 190: libuchardet0:amd64=0.0.8-2+b1 Downloading dependency 45 of 190: libattr1:amd64=1:2.5.2-4 Downloading dependency 46 of 190: python3-jaraco.context:amd64=6.0.1-2 Downloading dependency 47 of 190: libpipeline1:amd64=1.5.8-2 Downloading dependency 48 of 190: cpp-15:amd64=15.2.0-13 Downloading dependency 49 of 190: libmd0:amd64=1.1.0-2+b2 Downloading dependency 50 of 190: po-debconf:amd64=1.0.22 Downloading dependency 51 of 190: libpam-modules:amd64=1.7.0-5+b1 Downloading dependency 52 of 190: dpkg-dev:amd64=1.23.5 Downloading dependency 53 of 190: libpcre2-8-0:amd64=10.46-1+b1 Downloading dependency 54 of 190: make:amd64=4.4.1-3 Downloading dependency 55 of 190: gcc-15:amd64=15.2.0-13 Downloading dependency 56 of 190: python3-autocommand:amd64=2.2.2-4 Downloading dependency 57 of 190: cpp-x86-64-linux-gnu:amd64=4:15.2.0-5 Downloading dependency 58 of 190: libc-dev-bin:amd64=2.42-13 Downloading dependency 59 of 190: libssl3t64:amd64=3.5.5-1 Downloading dependency 60 of 190: python3-pytest-httpserver:amd64=1.1.3-2 Downloading dependency 61 of 190: liblzma5:amd64=5.8.2-2 Downloading dependency 62 of 190: perl-base:amd64=5.40.1-7 Downloading dependency 63 of 190: dash:amd64=0.5.12-12 Downloading dependency 64 of 190: python3-fastbencode:amd64=0.3.8-1 Downloading dependency 65 of 190: libtsan2:amd64=15.2.0-13 Downloading dependency 66 of 190: mawk:amd64=1.3.4.20260129-1 Downloading dependency 67 of 190: autotools-dev:amd64=20240727.1 Downloading dependency 68 of 190: libpam-modules-bin:amd64=1.7.0-5+b1 Downloading dependency 69 of 190: libpam0g:amd64=1.7.0-5+b1 Downloading dependency 70 of 190: libc-gconv-modules-extra:amd64=2.42-13 Downloading dependency 71 of 190: openssl-provider-legacy:amd64=3.5.5-1 Downloading dependency 72 of 190: python3-execnet:amd64=2.1.1-1 Downloading dependency 73 of 190: libdebconfclient0:amd64=0.282+b2 Downloading dependency 74 of 190: python3.14-minimal:amd64=3.14.3-1 Downloading dependency 75 of 190: man-db:amd64=2.13.1-1 Downloading dependency 76 of 190: gcc-15-x86-64-linux-gnu:amd64=15.2.0-13 Downloading dependency 77 of 190: libbz2-1.0:amd64=1.0.8-6+b1 Downloading dependency 78 of 190: gzip:amd64=1.13-1 Downloading dependency 79 of 190: python3-pluggy:amd64=1.6.0-2 Downloading dependency 80 of 190: dpkg:amd64=1.23.5 Downloading dependency 81 of 190: libatomic1:amd64=15.2.0-13 Downloading dependency 82 of 190: python3-zipp:amd64=3.23.0-1 Downloading dependency 83 of 190: python3-setuptools:amd64=78.1.1-0.1 Downloading dependency 84 of 190: perl:amd64=5.40.1-7 Downloading dependency 85 of 190: cpp:amd64=4:15.2.0-5 Downloading dependency 86 of 190: libbinutils:amd64=2.46-2 Downloading dependency 87 of 190: sed:amd64=4.9-2 Downloading dependency 88 of 190: libpython3-stdlib:amd64=3.13.9-3 Downloading dependency 89 of 190: libdebhelper-perl:amd64=13.30 Downloading dependency 90 of 190: build-essential:amd64=12.12 Downloading dependency 91 of 190: libtinfo6:amd64=6.6+20251231-1 Downloading dependency 92 of 190: libcap2:amd64=1:2.75-10+b5 Downloading dependency 93 of 190: tzdata:amd64=2025c-3 Downloading dependency 94 of 190: grep:amd64=3.12-1 Downloading dependency 95 of 190: netbase:amd64=6.5 Downloading dependency 96 of 190: libasan8:amd64=15.2.0-13 Downloading dependency 97 of 190: libzstd1:amd64=1.5.7+dfsg-3+b1 Downloading dependency 98 of 190: bash:amd64=5.3-2 Downloading dependency 99 of 190: libacl1:amd64=2.3.2-3 Downloading dependency 100 of 190: libitm1:amd64=15.2.0-13 Downloading dependency 101 of 190: libgomp1:amd64=15.2.0-13 Downloading dependency 102 of 190: base-passwd:amd64=3.6.8 Downloading dependency 103 of 190: python3-pyproject-hooks:amd64=1.2.0-1 Downloading dependency 104 of 190: tar:amd64=1.35+dfsg-4 Downloading dependency 105 of 190: python3.13:amd64=3.13.12-1 Downloading dependency 106 of 190: libxml2-16:amd64=2.15.1+dfsg-2+b1 Downloading dependency 107 of 190: python3.14:amd64=3.14.3-1 Downloading dependency 108 of 190: python3-wheel:amd64=0.46.3-2 Downloading dependency 109 of 190: libquadmath0:amd64=15.2.0-13 Downloading dependency 110 of 190: gcc:amd64=4:15.2.0-5 Downloading dependency 111 of 190: libsqlite3-0:amd64=3.46.1-9 Downloading dependency 112 of 190: dh-python:amd64=7.20260125 Downloading dependency 113 of 190: libpython3.14-stdlib:amd64=3.14.3-1 Downloading dependency 114 of 190: python3-typeguard:amd64=4.4.4-2 Downloading dependency 115 of 190: g++-x86-64-linux-gnu:amd64=4:15.2.0-5 Downloading dependency 116 of 190: groff-base:amd64=1.23.0-10 Downloading dependency 117 of 190: python3-typing-extensions:amd64=4.15.0-2 Downloading dependency 118 of 190: libcap-ng0:amd64=0.9.1-1 Downloading dependency 119 of 190: python3-installer:amd64=0.7.0+dfsg1-3 Downloading dependency 120 of 190: libselinux1:amd64=3.9-4+b1 Downloading dependency 121 of 190: automake:amd64=1:1.18.1-3 Downloading dependency 122 of 190: ncurses-bin:amd64=6.6+20251231-1 Downloading dependency 123 of 190: libunistring5:amd64=1.3-2+b1 Downloading dependency 124 of 190: gettext:amd64=0.23.2-1 Downloading dependency 125 of 190: libisl23:amd64=0.27-1+b1 Downloading dependency 126 of 190: python3-jaraco.functools:amd64=4.1.0-1 Downloading dependency 127 of 190: libhwasan0:amd64=15.2.0-13 Downloading dependency 128 of 190: autoconf:amd64=2.72-3.1 Downloading dependency 129 of 190: autopoint:amd64=0.23.2-1 Downloading dependency 130 of 190: readline-common:amd64=8.3-4 Downloading dependency 131 of 190: python3-pygments:amd64=2.19.2+dfsg-1 Downloading dependency 132 of 190: libffi8:amd64=3.5.2-3+b1Get:1 http://deb.debian.org/debian unstable/main amd64 libffi8 amd64 3.5.2-3+b1 [26.4 kB] Fetched 26.4 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmptvcag2pk/libffi8_3.5.2-3+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 findutils amd64 4.10.0-3 [700 kB] Fetched 700 kB in 0s (55.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpg93lnpgp/findutils_4.10.0-3_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 gettext-base amd64 0.23.2-1 [245 kB] Fetched 245 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpe19irzv7/gettext-base_0.23.2-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 bsdextrautils amd64 2.41.3-4 [98.9 kB] Fetched 98.9 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp8ke6lskr/bsdextrautils_2.41.3-4_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 g++-15 amd64 15.2.0-13 [26.0 kB] Fetched 26.0 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpczzjmde8/g++-15_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 pybuild-plugin-pyproject all 7.20260125 [13.0 kB] Fetched 13.0 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp8rkwb8g0/pybuild-plugin-pyproject_7.20260125_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 ncurses-base all 6.6+20251231-1 [277 kB] Fetched 277 kB in 0s (27.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpaxy3qksg/ncurses-base_6.6+20251231-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 diffutils amd64 1:3.12-1 [405 kB] Fetched 405 kB in 0s (39.6 MB/s) dpkg-name: info: moved 'diffutils_1%3a3.12-1_amd64.deb' to '/srv/rebuilderd/tmp/tmplkkufdq6/diffutils_3.12-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 g++ amd64 4:15.2.0-5 [1344 B] Fetched 1344 B in 0s (0 B/s) dpkg-name: info: moved 'g++_4%3a15.2.0-5_amd64.deb' to '/srv/rebuilderd/tmp/tmpg_mr_tlb/g++_15.2.0-5_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 binutils-common amd64 2.46-2 [2635 kB] Fetched 2635 kB in 0s (108 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp41ploblz/binutils-common_2.46-2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-pytest-mock all 3.15.1-1 [18.7 kB] Fetched 18.7 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplhg8s5yl/python3-pytest-mock_3.15.1-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libgprofng0 amd64 2.46-2 [820 kB] Fetched 820 kB in 0s (67.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5e4pm8bd/libgprofng0_2.46-2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libexpat1 amd64 2.7.4-1 [116 kB] Fetched 116 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpc5m19qh7/libexpat1_2.7.4-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libgdbm6t64 amd64 1.26-1+b1 [78.9 kB] Fetched 78.9 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkli44ex5/libgdbm6t64_1.26-1+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-pkg-resources all 78.1.1-0.1 [224 kB] Fetched 224 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmps047_wys/python3-pkg-resources_78.1.1-0.1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libjansson4 amd64 2.14-2+b4 [40.1 kB] Fetched 40.1 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpsae8s2z6/libjansson4_2.14-2+b4_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-packaging all 25.0-2 [56.7 kB] Fetched 56.7 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpp1v27se4/python3-packaging_25.0-2_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libuuid1 amd64 2.41.3-4 [39.1 kB] Fetched 39.1 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2y2magyt/libuuid1_2.41.3-4_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libsystemd0 amd64 259.1-1 [471 kB] Fetched 471 kB in 0s (43.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvx9codvo/libsystemd0_259.1-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 libgcc-s1 amd64 15.2.0-13 [71.5 kB] Fetched 71.5 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpehh0zqbl/libgcc-s1_15.2.0-13_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 libubsan1 amd64 15.2.0-13 [1108 kB] Fetched 1108 kB in 0s (76.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmtnlycql/libubsan1_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-all amd64 3.13.9-3 [1048 B] Fetched 1048 B in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6b19qzjx/python3-all_3.13.9-3_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 dh-autoreconf all 21+nmu1 [11.7 kB] Fetched 11.7 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpfq81uk9r/dh-autoreconf_21+nmu1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3 amd64 3.13.9-3 [27.6 kB] Fetched 27.6 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpn7_ap6v2/python3_3.13.9-3_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libctf0 amd64 2.46-2 [92.2 kB] Fetched 92.2 kB in 0s (7369 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpu_lu_20f/libctf0_2.46-2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libdpkg-perl all 1.23.5 [668 kB] Fetched 668 kB in 0s (46.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpex54f30g/libdpkg-perl_1.23.5_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 gcc-x86-64-linux-gnu amd64 4:15.2.0-5 [1436 B] Fetched 1436 B in 0s (0 B/s) dpkg-name: info: moved 'gcc-x86-64-linux-gnu_4%3a15.2.0-5_amd64.deb' to '/srv/rebuilderd/tmp/tmpv7ng1jf1/gcc-x86-64-linux-gnu_15.2.0-5_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 sysvinit-utils amd64 3.15-6 [35.0 kB] Fetched 35.0 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpj7dd9tht/sysvinit-utils_3.15-6_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 m4 amd64 1.4.21-1 [332 kB] Fetched 332 kB in 0s (29.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpo0xpdkx4/m4_1.4.21-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 g++-15-x86-64-linux-gnu amd64 15.2.0-13 [13.2 MB] Fetched 13.2 MB in 0s (178 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpxgwcgzgw/g++-15-x86-64-linux-gnu_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libpam-runtime all 1.7.0-5 [249 kB] Fetched 249 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpx5qw0dv4/libpam-runtime_1.7.0-5_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libtool all 2.5.4-9 [540 kB] Fetched 540 kB in 0s (48.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpgnivz5fo/libtool_2.5.4-9_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-pytest-xdist all 3.8.0-4 [46.0 kB] Fetched 46.0 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpq998rb2x/python3-pytest-xdist_3.8.0-4_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 dwz amd64 0.16-2 [108 kB] Fetched 108 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp8e72x94o/dwz_0.16-2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libdb5.3t64 amd64 5.3.28+dfsg2-11 [710 kB] Fetched 710 kB in 0s (58.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnciie1qy/libdb5.3t64_5.3.28+dfsg2-11_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libpython3.13-stdlib amd64 3.13.12-1 [1974 kB] Fetched 1974 kB in 0s (106 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpy48v0j_e/libpython3.13-stdlib_3.13.12-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libarchive-zip-perl all 1.68-1 [104 kB] Fetched 104 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp33ep_yyt/libarchive-zip-perl_1.68-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 init-system-helpers all 1.69 [39.3 kB] Fetched 39.3 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnwmasy3j/init-system-helpers_1.69_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 debhelper all 13.30 [942 kB] Fetched 942 kB in 0s (69.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpsndapfl_/debhelper_13.30_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 libstdc++6 amd64 15.2.0-13 [737 kB] Fetched 737 kB in 0s (58.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpv3_a60hb/libstdc++6_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 xz-utils amd64 5.8.2-2 [706 kB] Fetched 706 kB in 0s (54.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp83i_2pnu/xz-utils_5.8.2-2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libseccomp2 amd64 2.6.0-2+b1 [52.2 kB] Fetched 52.2 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp54ym8krh/libseccomp2_2.6.0-2+b1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 libgcc-15-dev amd64 15.2.0-13 [2719 kB] Fetched 2719 kB in 0s (123 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3w4rryzu/libgcc-15-dev_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libmpc3 amd64 1.3.1-2+b1 [52.2 kB] Fetched 52.2 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpreqtvaph/libmpc3_1.3.1-2+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 coreutils amd64 9.7-3 [3024 kB] Fetched 3024 kB in 0s (121 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphfa9k9nk/coreutils_9.7-3_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libperl5.40 amd64 5.40.1-7 [4317 kB] Fetched 4317 kB in 0s (132 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkq08qxnq/libperl5.40_5.40.1-7_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 linux-libc-dev all 6.18.12-1 [2574 kB] Fetched 2574 kB in 0s (117 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpxl75rnr4/linux-libc-dev_6.18.12-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libudev1 amd64 259.1-1 [158 kB] Fetched 158 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2amqr5yn/libudev1_259.1-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libfile-stripnondeterminism-perl all 1.15.0-1 [19.9 kB] Fetched 19.9 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkan0expo/libfile-stripnondeterminism-perl_1.15.0-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 binutils-x86-64-linux-gnu amd64 2.46-2 [1058 kB] Fetched 1058 kB in 0s (70.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpgvdav2fu/binutils-x86-64-linux-gnu_2.46-2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 file amd64 1:5.46-5+b1 [43.8 kB] Fetched 43.8 kB in 0s (4158 kB/s) dpkg-name: info: moved 'file_1%3a5.46-5+b1_amd64.deb' to '/srv/rebuilderd/tmp/tmpkgjl6_ng/file_5.46-5+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libcrypt1 amd64 1:4.5.1-1 [98.0 kB] Fetched 98.0 kB in 0s (0 B/s) dpkg-name: info: moved 'libcrypt1_1%3a4.5.1-1_amd64.deb' to '/srv/rebuilderd/tmp/tmp3r506swm/libcrypt1_4.5.1-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-werkzeug all 3.1.5-1 [208 kB] Fetched 208 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpcgh1u3_n/python3-werkzeug_3.1.5-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-jaraco.text all 4.0.0-1 [11.4 kB] Fetched 11.4 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6p5yvd76/python3-jaraco.text_4.0.0-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libgmp10 amd64 2:6.3.0+dfsg-5+b1 [561 kB] Fetched 561 kB in 0s (50.7 MB/s) dpkg-name: info: moved 'libgmp10_2%3a6.3.0+dfsg-5+b1_amd64.deb' to '/srv/rebuilderd/tmp/tmp4qsdr5wm/libgmp10_6.3.0+dfsg-5+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 perl-modules-5.40 all 5.40.1-7 [3012 kB] Fetched 3012 kB in 0s (126 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp13qn59xb/perl-modules-5.40_5.40.1-7_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libreadline8t64 amd64 8.3-4 [181 kB] Fetched 181 kB in 0s (17.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmpic8_pk/libreadline8t64_8.3-4_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20260224T144255Z forky/main amd64 cpp-15-x86-64-linux-gnu amd64 15.2.0-13 [12.1 MB] Fetched 12.1 MB in 0s (163 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphuy25u6q/cpp-15-x86-64-linux-gnu_15.2.0-13_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libgdbm-compat4t64 amd64 1.26-1+b1 [53.1 kB] Fetched 53.1 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmprdf27q5w/libgdbm-compat4t64_1.26-1+b1_amd64.deb' dpkg-buildpackage: info: source package debootsnap-dummy dpkg-buildpackage: info: source version 1.0 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Equivs Dummy Package Generator dpkg-buildpackage: info: host architecture amd64 dpkg-source --before-build . debian/rules clean dh clean dh_clean debian/rules binary dh binary dh_update_autotools_config dh_autoreconf create-stamp debian/debhelper-build-stamp dh_prep dh_auto_install --destdir=debian/debootsnap-dummy/ dh_install dh_installdocs dh_installchangelogs dh_perl dh_link dh_strip_nondeterminism dh_compress dh_fixperms dh_missing dh_installdeb dh_gencontrol dh_md5sums dh_builddeb dpkg-deb: building package 'debootsnap-dummy' in '../debootsnap-dummy_1.0_all.deb'. dpkg-genbuildinfo --build=binary -O../debootsnap-dummy_1.0_amd64.buildinfo dpkg-genchanges --build=binary -O../debootsnap-dummy_1.0_amd64.changes dpkg-genchanges: info: binary-only upload (no source code included) dpkg-source --after-build . dpkg-buildpackage: info: binary-only upload (no source included) The package has been created. Attention, the package has been created in the /srv/rebuilderd/tmp/tmp8yke91tk/cache directory, not in ".." as indicated by the message above! I: automatically chosen mode: unshare I: chroot architecture amd64 is equal to the host's architecture I: using /srv/rebuilderd/tmp/mmdebstrap.qSTDcMkp1Q as tempdir I: running --setup-hook directly: /usr/share/mmdebstrap/hooks/maybe-merged-usr/setup00.sh /srv/rebuilderd/tmp/mmdebstrap.qSTDcMkp1Q 127.0.0.1 - - [25/Feb/2026 15:52:17] code 404, message File not found 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./InRelease HTTP/1.1" 404 - Ign:1 http://localhost:39777 ./ InRelease 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./Release HTTP/1.1" 200 - Get:2 http://localhost:39777 ./ Release [462 B] 127.0.0.1 - - [25/Feb/2026 15:52:17] code 404, message File not found 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./Release.gpg HTTP/1.1" 404 - Ign:3 http://localhost:39777 ./ Release.gpg 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./Packages HTTP/1.1" 200 - Get:4 http://localhost:39777 ./ Packages [226 kB] Fetched 227 kB in 0s (7980 kB/s) Reading package lists... usr-is-merged found but not real -- not running merged-usr setup hook I: skipping apt-get update because it was already run I: downloading packages with apt... 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./gcc-15-base_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./libc-gconv-modules-extra_2.42-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./libc6_2.42-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./libgcc-s1_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./mawk_1.3.4.20260129-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./base-files_14_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./libtinfo6_6.6%2b20251231-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./debianutils_5.23.2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./bash_5.3-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./libacl1_2.3.2-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./libattr1_2.5.2-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./libcap2_2.75-10%2bb5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./libgmp10_6.3.0%2bdfsg-5%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./libpcre2-8-0_10.46-1%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:17] "GET /./libselinux1_3.9-4%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libzstd1_1.5.7%2bdfsg-3%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./zlib1g_1.3.dfsg%2breally1.3.1-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libssl3t64_3.5.5-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./openssl-provider-legacy_3.5.5-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libsystemd0_259.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./coreutils_9.7-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./dash_0.5.12-12_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./diffutils_3.12-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libbz2-1.0_1.0.8-6%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./liblzma5_5.8.2-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libmd0_1.1.0-2%2bb2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./tar_1.35%2bdfsg-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./dpkg_1.23.5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./findutils_4.10.0-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./grep_3.12-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./gzip_1.13-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./hostname_3.25_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./ncurses-bin_6.6%2b20251231-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libcrypt1_4.5.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./perl-base_5.40.1-7_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./sed_4.9-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libaudit-common_4.1.2-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libcap-ng0_0.9.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libaudit1_4.1.2-1%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libdb5.3t64_5.3.28%2bdfsg2-11_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./debconf_1.5.92_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libpam0g_1.7.0-5%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libpam-modules-bin_1.7.0-5%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libpam-modules_1.7.0-5%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libpam-runtime_1.7.0-5_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libblkid1_2.41.3-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libmount1_2.41.3-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libsmartcols1_2.41.3-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libudev1_259.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libuuid1_2.41.3-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./util-linux_2.41.3-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libdebconfclient0_0.282%2bb2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./base-passwd_3.6.8_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./init-system-helpers_1.69_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./libc-bin_2.42-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./ncurses-base_6.6%2b20251231-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:18] "GET /./sysvinit-utils_3.15-6_amd64.deb HTTP/1.1" 200 - I: extracting archives... I: running --extract-hook directly: /usr/share/mmdebstrap/hooks/maybe-merged-usr/extract00.sh /srv/rebuilderd/tmp/mmdebstrap.qSTDcMkp1Q 127.0.0.1 - - [25/Feb/2026 15:52:19] code 404, message File not found 127.0.0.1 - - [25/Feb/2026 15:52:19] "GET /./InRelease HTTP/1.1" 404 - Ign:1 http://localhost:39777 ./ InRelease 127.0.0.1 - - [25/Feb/2026 15:52:19] "GET /./Release HTTP/1.1" 304 - Hit:2 http://localhost:39777 ./ Release 127.0.0.1 - - [25/Feb/2026 15:52:19] code 404, message File not found 127.0.0.1 - - [25/Feb/2026 15:52:19] "GET /./Release.gpg HTTP/1.1" 404 - Ign:3 http://localhost:39777 ./ Release.gpg Reading package lists... usr-is-merged found but not real -- not running merged-usr extract hook I: installing essential packages... I: running --essential-hook directly: /usr/share/mmdebstrap/hooks/maybe-merged-usr/essential00.sh /srv/rebuilderd/tmp/mmdebstrap.qSTDcMkp1Q usr-is-merged was not installed in a previous hook -- not running merged-usr essential hook I: installing remaining packages inside the chroot... 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./libexpat1_2.7.4-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./libpython3.13-minimal_3.13.12-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./python3.13-minimal_3.13.12-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./python3-minimal_3.13.9-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./media-types_14.0.0_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./netbase_6.5_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./tzdata_2025c-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./libffi8_3.5.2-3%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./libncursesw6_6.6%2b20251231-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./readline-common_8.3-4_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./libreadline8t64_8.3-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./libsqlite3-0_3.46.1-9_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./libpython3.13-stdlib_3.13.12-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./python3.13_3.13.12-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./libpython3-stdlib_3.13.9-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./python3_3.13.9-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./libpython3.14-minimal_3.14.3-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./python3.14-minimal_3.14.3-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./sensible-utils_0.0.26_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./libstdc%2b%2b6_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./libuchardet0_0.0.8-2%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:25] "GET /./groff-base_1.23.0-10_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./bsdextrautils_2.41.3-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libgdbm6t64_1.26-1%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libpipeline1_1.5.8-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libseccomp2_2.6.0-2%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./man-db_2.13.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./bzip2_1.0.8-6%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libmagic-mgc_5.46-5%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libmagic1t64_5.46-5%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./file_5.46-5%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./gettext-base_0.23.2-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./perl-modules-5.40_5.40.1-7_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libgdbm-compat4t64_1.26-1%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libperl5.40_5.40.1-7_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./perl_5.40.1-7_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./xz-utils_5.8.2-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./m4_1.4.21-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./autoconf_2.72-3.1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./autotools-dev_20240727.1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./automake_1.18.1-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./autopoint_0.23.2-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libsframe3_2.46-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./binutils-common_2.46-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libbinutils_2.46-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libgprofng0_2.46-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libctf-nobfd0_2.46-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libctf0_2.46-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libjansson4_2.14-2%2bb4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./binutils-x86-64-linux-gnu_2.46-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./binutils_2.46-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libc-dev-bin_2.42-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./linux-libc-dev_6.18.12-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./rpcsvc-proto_1.4.3-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libc6-dev_2.42-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libisl23_0.27-1%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libmpfr6_4.2.2-2%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libmpc3_1.3.1-2%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./cpp-15-x86-64-linux-gnu_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./cpp-15_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./cpp-x86-64-linux-gnu_15.2.0-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./cpp_15.2.0-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libcc1-0_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libgomp1_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libitm1_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libatomic1_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libasan8_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./liblsan0_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libtsan2_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libubsan1_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libhwasan0_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libquadmath0_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libgcc-15-dev_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./gcc-15-x86-64-linux-gnu_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./gcc-15_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./gcc-x86-64-linux-gnu_15.2.0-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./gcc_15.2.0-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libstdc%2b%2b-15-dev_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./g%2b%2b-15-x86-64-linux-gnu_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./g%2b%2b-15_15.2.0-13_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./g%2b%2b-x86-64-linux-gnu_15.2.0-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./g%2b%2b_15.2.0-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./make_4.4.1-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libdpkg-perl_1.23.5_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./patch_2.8-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./dpkg-dev_1.23.5_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./build-essential_12.12_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libdebhelper-perl_13.30_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libtool_2.5.4-9_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./dh-autoreconf_21%2bnmu1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libarchive-zip-perl_1.68-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libfile-stripnondeterminism-perl_1.15.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./dh-strip-nondeterminism_1.15.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:26] "GET /./libelf1t64_0.194-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./dwz_0.16-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./libunistring5_1.3-2%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./libxml2-16_2.15.1%2bdfsg-2%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./gettext_0.23.2-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./intltool-debian_0.35.0%2b20060710.6_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./po-debconf_1.0.22_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./debhelper_13.30_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-packaging_25.0-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-pyproject-hooks_1.2.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-wheel_0.46.3-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-build_1.4.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-iniconfig_2.1.0-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-pluggy_1.6.0-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-pygments_2.19.2%2bdfsg-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-pytest_9.0.2-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-more-itertools_10.8.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-markupsafe_3.0.3-1%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-typing-extensions_4.15.0-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-typeguard_4.4.4-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-inflect_7.5.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-jaraco.context_6.0.1-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-autocommand_2.2.2-4_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-werkzeug_3.1.5-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-pytest-httpserver_1.1.3-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-fastbencode_0.3.8-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-execnet_2.1.1-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-zipp_3.23.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-jaraco.functools_4.1.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-pkg-resources_78.1.1-0.1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-jaraco.text_4.0.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-setuptools_78.1.1-0.1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./libpython3.14-stdlib_3.14.3-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3.14_3.14.3-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./dh-python_7.20260125_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-installer_0.7.0%2bdfsg1-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./pybuild-plugin-pyproject_7.20260125_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-pytest-mock_3.15.1-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-all_3.13.9-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./python3-pytest-xdist_3.8.0-4_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [25/Feb/2026 15:52:27] "GET /./debootsnap-dummy_1.0_all.deb HTTP/1.1" 200 - I: running --customize-hook directly: /srv/rebuilderd/tmp/tmp8yke91tk/apt_install.sh /srv/rebuilderd/tmp/mmdebstrap.qSTDcMkp1Q Reading package lists... Building dependency tree... Reading state information... python3-build is already the newest version (1.4.0-1). python3-build set to manually installed. libpython3.14-minimal is already the newest version (3.14.3-1). libpython3.14-minimal set to manually installed. python3-minimal is already the newest version (3.13.9-3). python3-minimal set to manually installed. libsframe3 is already the newest version (2.46-2). libsframe3 set to manually installed. base-files is already the newest version (14). libblkid1 is already the newest version (2.41.3-4). rpcsvc-proto is already the newest version (1.4.3-1). rpcsvc-proto set to manually installed. libcc1-0 is already the newest version (15.2.0-13). libcc1-0 set to manually installed. libncursesw6 is already the newest version (6.6+20251231-1). libncursesw6 set to manually installed. libaudit1 is already the newest version (1:4.1.2-1+b1). libctf-nobfd0 is already the newest version (2.46-2). libctf-nobfd0 set to manually installed. libstdc++-15-dev is already the newest version (15.2.0-13). libstdc++-15-dev set to manually installed. sensible-utils is already the newest version (0.0.26). sensible-utils set to manually installed. intltool-debian is already the newest version (0.35.0+20060710.6). intltool-debian set to manually installed. libpython3.13-minimal is already the newest version (3.13.12-1). libpython3.13-minimal set to manually installed. binutils is already the newest version (2.46-2). binutils set to manually installed. libc6 is already the newest version (2.42-13). media-types is already the newest version (14.0.0). media-types set to manually installed. hostname is already the newest version (3.25). patch is already the newest version (2.8-2). patch set to manually installed. python3-pytest is already the newest version (9.0.2-2). python3-pytest set to manually installed. libmagic1t64 is already the newest version (1:5.46-5+b1). libmagic1t64 set to manually installed. python3-iniconfig is already the newest version (2.1.0-2). python3-iniconfig set to manually installed. libelf1t64 is already the newest version (0.194-1). libelf1t64 set to manually installed. debianutils is already the newest version (5.23.2). libmpfr6 is already the newest version (4.2.2-2+b1). libmpfr6 set to manually installed. python3.13-minimal is already the newest version (3.13.12-1). python3.13-minimal set to manually installed. python3-more-itertools is already the newest version (10.8.0-1). python3-more-itertools set to manually installed. debconf is already the newest version (1.5.92). bzip2 is already the newest version (1.0.8-6+b1). bzip2 set to manually installed. libc6-dev is already the newest version (2.42-13). libc6-dev set to manually installed. libaudit-common is already the newest version (1:4.1.2-1). dh-strip-nondeterminism is already the newest version (1.15.0-1). dh-strip-nondeterminism set to manually installed. gcc-15-base is already the newest version (15.2.0-13). libc-bin is already the newest version (2.42-13). liblsan0 is already the newest version (15.2.0-13). liblsan0 set to manually installed. libmount1 is already the newest version (2.41.3-4). python3-markupsafe is already the newest version (3.0.3-1+b1). python3-markupsafe set to manually installed. libmagic-mgc is already the newest version (1:5.46-5+b1). libmagic-mgc set to manually installed. libsmartcols1 is already the newest version (2.41.3-4). python3-inflect is already the newest version (7.5.0-1). python3-inflect set to manually installed. zlib1g is already the newest version (1:1.3.dfsg+really1.3.1-3). util-linux is already the newest version (2.41.3-4). libuchardet0 is already the newest version (0.0.8-2+b1). libuchardet0 set to manually installed. libattr1 is already the newest version (1:2.5.2-4). python3-jaraco.context is already the newest version (6.0.1-2). python3-jaraco.context set to manually installed. libpipeline1 is already the newest version (1.5.8-2). libpipeline1 set to manually installed. cpp-15 is already the newest version (15.2.0-13). cpp-15 set to manually installed. libmd0 is already the newest version (1.1.0-2+b2). po-debconf is already the newest version (1.0.22). po-debconf set to manually installed. libpam-modules is already the newest version (1.7.0-5+b1). dpkg-dev is already the newest version (1.23.5). dpkg-dev set to manually installed. libpcre2-8-0 is already the newest version (10.46-1+b1). make is already the newest version (4.4.1-3). make set to manually installed. gcc-15 is already the newest version (15.2.0-13). gcc-15 set to manually installed. python3-autocommand is already the newest version (2.2.2-4). python3-autocommand set to manually installed. cpp-x86-64-linux-gnu is already the newest version (4:15.2.0-5). cpp-x86-64-linux-gnu set to manually installed. libc-dev-bin is already the newest version (2.42-13). libc-dev-bin set to manually installed. libssl3t64 is already the newest version (3.5.5-1). python3-pytest-httpserver is already the newest version (1.1.3-2). python3-pytest-httpserver set to manually installed. liblzma5 is already the newest version (5.8.2-2). perl-base is already the newest version (5.40.1-7). dash is already the newest version (0.5.12-12). python3-fastbencode is already the newest version (0.3.8-1). python3-fastbencode set to manually installed. libtsan2 is already the newest version (15.2.0-13). libtsan2 set to manually installed. mawk is already the newest version (1.3.4.20260129-1). autotools-dev is already the newest version (20240727.1). autotools-dev set to manually installed. libpam-modules-bin is already the newest version (1.7.0-5+b1). libpam0g is already the newest version (1.7.0-5+b1). libc-gconv-modules-extra is already the newest version (2.42-13). openssl-provider-legacy is already the newest version (3.5.5-1). python3-execnet is already the newest version (2.1.1-1). python3-execnet set to manually installed. libdebconfclient0 is already the newest version (0.282+b2). python3.14-minimal is already the newest version (3.14.3-1). python3.14-minimal set to manually installed. man-db is already the newest version (2.13.1-1). man-db set to manually installed. gcc-15-x86-64-linux-gnu is already the newest version (15.2.0-13). gcc-15-x86-64-linux-gnu set to manually installed. libbz2-1.0 is already the newest version (1.0.8-6+b1). gzip is already the newest version (1.13-1). python3-pluggy is already the newest version (1.6.0-2). python3-pluggy set to manually installed. dpkg is already the newest version (1.23.5). libatomic1 is already the newest version (15.2.0-13). libatomic1 set to manually installed. python3-zipp is already the newest version (3.23.0-1). python3-zipp set to manually installed. python3-setuptools is already the newest version (78.1.1-0.1). python3-setuptools set to manually installed. perl is already the newest version (5.40.1-7). perl set to manually installed. cpp is already the newest version (4:15.2.0-5). cpp set to manually installed. libbinutils is already the newest version (2.46-2). libbinutils set to manually installed. sed is already the newest version (4.9-2). libpython3-stdlib is already the newest version (3.13.9-3). libpython3-stdlib set to manually installed. libdebhelper-perl is already the newest version (13.30). libdebhelper-perl set to manually installed. build-essential is already the newest version (12.12). build-essential set to manually installed. libtinfo6 is already the newest version (6.6+20251231-1). libcap2 is already the newest version (1:2.75-10+b5). tzdata is already the newest version (2025c-3). tzdata set to manually installed. grep is already the newest version (3.12-1). netbase is already the newest version (6.5). netbase set to manually installed. libasan8 is already the newest version (15.2.0-13). libasan8 set to manually installed. libzstd1 is already the newest version (1.5.7+dfsg-3+b1). bash is already the newest version (5.3-2). libacl1 is already the newest version (2.3.2-3). libitm1 is already the newest version (15.2.0-13). libitm1 set to manually installed. libgomp1 is already the newest version (15.2.0-13). libgomp1 set to manually installed. base-passwd is already the newest version (3.6.8). python3-pyproject-hooks is already the newest version (1.2.0-1). python3-pyproject-hooks set to manually installed. tar is already the newest version (1.35+dfsg-4). python3.13 is already the newest version (3.13.12-1). python3.13 set to manually installed. libxml2-16 is already the newest version (2.15.1+dfsg-2+b1). libxml2-16 set to manually installed. python3.14 is already the newest version (3.14.3-1). python3.14 set to manually installed. python3-wheel is already the newest version (0.46.3-2). python3-wheel set to manually installed. libquadmath0 is already the newest version (15.2.0-13). libquadmath0 set to manually installed. gcc is already the newest version (4:15.2.0-5). gcc set to manually installed. libsqlite3-0 is already the newest version (3.46.1-9). libsqlite3-0 set to manually installed. dh-python is already the newest version (7.20260125). dh-python set to manually installed. libpython3.14-stdlib is already the newest version (3.14.3-1). libpython3.14-stdlib set to manually installed. python3-typeguard is already the newest version (4.4.4-2). python3-typeguard set to manually installed. g++-x86-64-linux-gnu is already the newest version (4:15.2.0-5). g++-x86-64-linux-gnu set to manually installed. groff-base is already the newest version (1.23.0-10). groff-base set to manually installed. python3-typing-extensions is already the newest version (4.15.0-2). python3-typing-extensions set to manually installed. libcap-ng0 is already the newest version (0.9.1-1). python3-installer is already the newest version (0.7.0+dfsg1-3). python3-installer set to manually installed. libselinux1 is already the newest version (3.9-4+b1). automake is already the newest version (1:1.18.1-3). automake set to manually installed. ncurses-bin is already the newest version (6.6+20251231-1). libunistring5 is already the newest version (1.3-2+b1). libunistring5 set to manually installed. gettext is already the newest version (0.23.2-1). gettext set to manually installed. libisl23 is already the newest version (0.27-1+b1). libisl23 set to manually installed. python3-jaraco.functools is already the newest version (4.1.0-1). python3-jaraco.functools set to manually installed. libhwasan0 is already the newest version (15.2.0-13). libhwasan0 set to manually installed. autoconf is already the newest version (2.72-3.1). autoconf set to manually installed. autopoint is already the newest version (0.23.2-1). autopoint set to manually installed. readline-common is already the newest version (8.3-4). readline-common set to manually installed. python3-pygments is already the newest version (2.19.2+dfsg-1). python3-pygments set to manually installed. libffi8 is already the newest version (3.5.2-3+b1). libffi8 set to manually installed. findutils is already the newest version (4.10.0-3). gettext-base is already the newest version (0.23.2-1). gettext-base set to manually installed. bsdextrautils is already the newest version (2.41.3-4). bsdextrautils set to manually installed. g++-15 is already the newest version (15.2.0-13). g++-15 set to manually installed. pybuild-plugin-pyproject is already the newest version (7.20260125). pybuild-plugin-pyproject set to manually installed. ncurses-base is already the newest version (6.6+20251231-1). diffutils is already the newest version (1:3.12-1). g++ is already the newest version (4:15.2.0-5). g++ set to manually installed. binutils-common is already the newest version (2.46-2). binutils-common set to manually installed. python3-pytest-mock is already the newest version (3.15.1-1). python3-pytest-mock set to manually installed. libgprofng0 is already the newest version (2.46-2). libgprofng0 set to manually installed. libexpat1 is already the newest version (2.7.4-1). libexpat1 set to manually installed. libgdbm6t64 is already the newest version (1.26-1+b1). libgdbm6t64 set to manually installed. python3-pkg-resources is already the newest version (78.1.1-0.1). python3-pkg-resources set to manually installed. libjansson4 is already the newest version (2.14-2+b4). libjansson4 set to manually installed. python3-packaging is already the newest version (25.0-2). python3-packaging set to manually installed. libuuid1 is already the newest version (2.41.3-4). libsystemd0 is already the newest version (259.1-1). libgcc-s1 is already the newest version (15.2.0-13). libubsan1 is already the newest version (15.2.0-13). libubsan1 set to manually installed. python3-all is already the newest version (3.13.9-3). python3-all set to manually installed. dh-autoreconf is already the newest version (21+nmu1). dh-autoreconf set to manually installed. python3 is already the newest version (3.13.9-3). python3 set to manually installed. libctf0 is already the newest version (2.46-2). libctf0 set to manually installed. libdpkg-perl is already the newest version (1.23.5). libdpkg-perl set to manually installed. gcc-x86-64-linux-gnu is already the newest version (4:15.2.0-5). gcc-x86-64-linux-gnu set to manually installed. sysvinit-utils is already the newest version (3.15-6). m4 is already the newest version (1.4.21-1). m4 set to manually installed. g++-15-x86-64-linux-gnu is already the newest version (15.2.0-13). g++-15-x86-64-linux-gnu set to manually installed. libpam-runtime is already the newest version (1.7.0-5). libtool is already the newest version (2.5.4-9). libtool set to manually installed. python3-pytest-xdist is already the newest version (3.8.0-4). python3-pytest-xdist set to manually installed. dwz is already the newest version (0.16-2). dwz set to manually installed. libdb5.3t64 is already the newest version (5.3.28+dfsg2-11). libpython3.13-stdlib is already the newest version (3.13.12-1). libpython3.13-stdlib set to manually installed. libarchive-zip-perl is already the newest version (1.68-1). libarchive-zip-perl set to manually installed. init-system-helpers is already the newest version (1.69). debhelper is already the newest version (13.30). debhelper set to manually installed. libstdc++6 is already the newest version (15.2.0-13). libstdc++6 set to manually installed. xz-utils is already the newest version (5.8.2-2). xz-utils set to manually installed. libseccomp2 is already the newest version (2.6.0-2+b1). libseccomp2 set to manually installed. libgcc-15-dev is already the newest version (15.2.0-13). libgcc-15-dev set to manually installed. libmpc3 is already the newest version (1.3.1-2+b1). libmpc3 set to manually installed. coreutils is already the newest version (9.7-3). libperl5.40 is already the newest version (5.40.1-7). libperl5.40 set to manually installed. linux-libc-dev is already the newest version (6.18.12-1). linux-libc-dev set to manually installed. libudev1 is already the newest version (259.1-1). libfile-stripnondeterminism-perl is already the newest version (1.15.0-1). libfile-stripnondeterminism-perl set to manually installed. binutils-x86-64-linux-gnu is already the newest version (2.46-2). binutils-x86-64-linux-gnu set to manually installed. file is already the newest version (1:5.46-5+b1). file set to manually installed. libcrypt1 is already the newest version (1:4.5.1-1). python3-werkzeug is already the newest version (3.1.5-1). python3-werkzeug set to manually installed. python3-jaraco.text is already the newest version (4.0.0-1). python3-jaraco.text set to manually installed. libgmp10 is already the newest version (2:6.3.0+dfsg-5+b1). perl-modules-5.40 is already the newest version (5.40.1-7). perl-modules-5.40 set to manually installed. libreadline8t64 is already the newest version (8.3-4). libreadline8t64 set to manually installed. cpp-15-x86-64-linux-gnu is already the newest version (15.2.0-13). cpp-15-x86-64-linux-gnu set to manually installed. libgdbm-compat4t64 is already the newest version (1.26-1+b1). libgdbm-compat4t64 set to manually installed. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. I: running --customize-hook in shell: sh -c 'chroot "$1" dpkg -r debootsnap-dummy' exec /srv/rebuilderd/tmp/mmdebstrap.qSTDcMkp1Q (Reading database ... 17232 files and directories currently installed.) Removing debootsnap-dummy (1.0) ... I: running --customize-hook in shell: sh -c 'chroot "$1" dpkg-query --showformat '${binary:Package}=${Version}\n' --show > "$1/pkglist"' exec /srv/rebuilderd/tmp/mmdebstrap.qSTDcMkp1Q I: running special hook: download /pkglist ./pkglist I: running --customize-hook in shell: sh -c 'rm "$1/pkglist"' exec /srv/rebuilderd/tmp/mmdebstrap.qSTDcMkp1Q I: running special hook: upload sources.list /etc/apt/sources.list I: waiting for background processes to finish... I: cleaning package lists and apt cache... I: skipping cleanup/reproducible as requested I: creating tarball... I: done I: removing tempdir /srv/rebuilderd/tmp/mmdebstrap.qSTDcMkp1Q... I: success in 53.2914 seconds Downloading dependency 133 of 190: findutils:amd64=4.10.0-3 Downloading dependency 134 of 190: gettext-base:amd64=0.23.2-1 Downloading dependency 135 of 190: bsdextrautils:amd64=2.41.3-4 Downloading dependency 136 of 190: g++-15:amd64=15.2.0-13 Downloading dependency 137 of 190: pybuild-plugin-pyproject:amd64=7.20260125 Downloading dependency 138 of 190: ncurses-base:amd64=6.6+20251231-1 Downloading dependency 139 of 190: diffutils:amd64=1:3.12-1 Downloading dependency 140 of 190: g++:amd64=4:15.2.0-5 Downloading dependency 141 of 190: binutils-common:amd64=2.46-2 Downloading dependency 142 of 190: python3-pytest-mock:amd64=3.15.1-1 Downloading dependency 143 of 190: libgprofng0:amd64=2.46-2 Downloading dependency 144 of 190: libexpat1:amd64=2.7.4-1 Downloading dependency 145 of 190: libgdbm6t64:amd64=1.26-1+b1 Downloading dependency 146 of 190: python3-pkg-resources:amd64=78.1.1-0.1 Downloading dependency 147 of 190: libjansson4:amd64=2.14-2+b4 Downloading dependency 148 of 190: python3-packaging:amd64=25.0-2 Downloading dependency 149 of 190: libuuid1:amd64=2.41.3-4 Downloading dependency 150 of 190: libsystemd0:amd64=259.1-1 Downloading dependency 151 of 190: libgcc-s1:amd64=15.2.0-13 Downloading dependency 152 of 190: libubsan1:amd64=15.2.0-13 Downloading dependency 153 of 190: python3-all:amd64=3.13.9-3 Downloading dependency 154 of 190: dh-autoreconf:amd64=21+nmu1 Downloading dependency 155 of 190: python3:amd64=3.13.9-3 Downloading dependency 156 of 190: libctf0:amd64=2.46-2 Downloading dependency 157 of 190: libdpkg-perl:amd64=1.23.5 Downloading dependency 158 of 190: gcc-x86-64-linux-gnu:amd64=4:15.2.0-5 Downloading dependency 159 of 190: sysvinit-utils:amd64=3.15-6 Downloading dependency 160 of 190: m4:amd64=1.4.21-1 Downloading dependency 161 of 190: g++-15-x86-64-linux-gnu:amd64=15.2.0-13 Downloading dependency 162 of 190: libpam-runtime:amd64=1.7.0-5 Downloading dependency 163 of 190: libtool:amd64=2.5.4-9 Downloading dependency 164 of 190: python3-pytest-xdist:amd64=3.8.0-4 Downloading dependency 165 of 190: dwz:amd64=0.16-2 Downloading dependency 166 of 190: libdb5.3t64:amd64=5.3.28+dfsg2-11 Downloading dependency 167 of 190: libpython3.13-stdlib:amd64=3.13.12-1 Downloading dependency 168 of 190: libarchive-zip-perl:amd64=1.68-1 Downloading dependency 169 of 190: init-system-helpers:amd64=1.69 Downloading dependency 170 of 190: debhelper:amd64=13.30 Downloading dependency 171 of 190: libstdc++6:amd64=15.2.0-13 Downloading dependency 172 of 190: xz-utils:amd64=5.8.2-2 Downloading dependency 173 of 190: libseccomp2:amd64=2.6.0-2+b1 Downloading dependency 174 of 190: libgcc-15-dev:amd64=15.2.0-13 Downloading dependency 175 of 190: libmpc3:amd64=1.3.1-2+b1 Downloading dependency 176 of 190: coreutils:amd64=9.7-3 Downloading dependency 177 of 190: libperl5.40:amd64=5.40.1-7 Downloading dependency 178 of 190: linux-libc-dev:amd64=6.18.12-1 Downloading dependency 179 of 190: libudev1:amd64=259.1-1 Downloading dependency 180 of 190: libfile-stripnondeterminism-perl:amd64=1.15.0-1 Downloading dependency 181 of 190: binutils-x86-64-linux-gnu:amd64=2.46-2 Downloading dependency 182 of 190: file:amd64=1:5.46-5+b1 Downloading dependency 183 of 190: libcrypt1:amd64=1:4.5.1-1 Downloading dependency 184 of 190: python3-werkzeug:amd64=3.1.5-1 Downloading dependency 185 of 190: python3-jaraco.text:amd64=4.0.0-1 Downloading dependency 186 of 190: libgmp10:amd64=2:6.3.0+dfsg-5+b1 Downloading dependency 187 of 190: perl-modules-5.40:amd64=5.40.1-7 Downloading dependency 188 of 190: libreadline8t64:amd64=8.3-4 Downloading dependency 189 of 190: cpp-15-x86-64-linux-gnu:amd64=15.2.0-13 Downloading dependency 190 of 190: libgdbm-compat4t64:amd64=1.26-1+b1 env --chdir=/srv/rebuilderd/tmp/rebuilderdEZYqmS/out DEB_BUILD_OPTIONS=parallel=6 LANG=C.UTF-8 LC_COLLATE=C.UTF-8 LC_CTYPE=C.UTF-8 SOURCE_DATE_EPOCH=1768244042 SBUILD_CONFIG=/srv/rebuilderd/tmp/debrebuild9XIuRt/debrebuild.sbuildrc.fbrZ44gSpnhH sbuild --build=amd64 --host=amd64 --no-source --no-arch-any --arch-all --chroot=/srv/rebuilderd/tmp/debrebuild9XIuRt/debrebuild.tar.t4nxcOIQRGtm --chroot-mode=unshare --dist=unstable --no-run-lintian --no-run-piuparts --no-run-autopkgtest --no-apt-update --no-apt-upgrade --no-apt-distupgrade --verbose --nolog --bd-uninstallable-explainer= --build-path=/build/reproducible-path --dsc-dir=torf-4.3.0 /srv/rebuilderd/tmp/rebuilderdEZYqmS/inputs/torf_4.3.0-1.dsc I: consider moving your ~/.sbuildrc to /srv/rebuilderd/.config/sbuild/config.pl The Debian buildds switched to the "unshare" backend and sbuild will default to it in the future. To start using "unshare" add this to your `~/.config/sbuild/config.pl`: $chroot_mode = "unshare"; If you want to keep the old "schroot" mode even in the future, add the following to your `~/.config/sbuild/config.pl`: $chroot_mode = "schroot"; $schroot = "schroot"; sbuild (Debian sbuild) 0.89.3+deb13u4 (28 December 2025) on ionos24-amd64.debian.net +==============================================================================+ | torf 4.3.0-1 (amd64) Wed, 25 Feb 2026 15:53:11 +0000 | +==============================================================================+ Package: torf Version: 4.3.0-1 Source Version: 4.3.0-1 Distribution: unstable Machine Architecture: amd64 Host Architecture: amd64 Build Architecture: amd64 Build Type: all I: No tarballs found in /srv/rebuilderd/.cache/sbuild I: Unpacking /srv/rebuilderd/tmp/debrebuild9XIuRt/debrebuild.tar.t4nxcOIQRGtm to /srv/rebuilderd/tmp/tmp.sbuild.JvHkgyznOu... I: Setting up the chroot... I: Creating chroot session... I: Setting up log color... I: Setting up apt archive... +------------------------------------------------------------------------------+ | Fetch source files Wed, 25 Feb 2026 15:53:16 +0000 | +------------------------------------------------------------------------------+ Local sources ------------- /srv/rebuilderd/tmp/rebuilderdEZYqmS/inputs/torf_4.3.0-1.dsc exists in /srv/rebuilderd/tmp/rebuilderdEZYqmS/inputs; copying to chroot +------------------------------------------------------------------------------+ | Install package build dependencies Wed, 25 Feb 2026 15:53:17 +0000 | +------------------------------------------------------------------------------+ Setup apt archive ----------------- Merged Build-Depends: debhelper-compat (= 13), dh-sequence-python3, build-essential, pybuild-plugin-pyproject, python3-all, python3-fastbencode, python3-pytest, python3-pytest-httpserver, python3-pytest-mock, python3-pytest-xdist, python3-setuptools Filtered Build-Depends: debhelper-compat (= 13), dh-sequence-python3, build-essential, pybuild-plugin-pyproject, python3-all, python3-fastbencode, python3-pytest, python3-pytest-httpserver, python3-pytest-mock, python3-pytest-xdist, python3-setuptools dpkg-deb: building package 'sbuild-build-depends-main-dummy' in '/build/reproducible-path/resolver-UiYTzX/apt_archive/sbuild-build-depends-main-dummy.deb'. Install main build dependencies (apt-based resolver) ---------------------------------------------------- Installing build dependencies +------------------------------------------------------------------------------+ | Check architectures Wed, 25 Feb 2026 15:53:21 +0000 | +------------------------------------------------------------------------------+ Arch check ok (amd64 included in all) +------------------------------------------------------------------------------+ | Build environment Wed, 25 Feb 2026 15:53:21 +0000 | +------------------------------------------------------------------------------+ Kernel: Linux 6.12.73+deb13-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.73-1 (2026-02-17) amd64 (x86_64) Toolchain package versions: binutils_2.46-2 dpkg-dev_1.23.5 g++-15_15.2.0-13 gcc-15_15.2.0-13 libc6-dev_2.42-13 libstdc++-15-dev_15.2.0-13 libstdc++6_15.2.0-13 linux-libc-dev_6.18.12-1 Package versions: autoconf_2.72-3.1 automake_1:1.18.1-3 autopoint_0.23.2-1 autotools-dev_20240727.1 base-files_14 base-passwd_3.6.8 bash_5.3-2 binutils_2.46-2 binutils-common_2.46-2 binutils-x86-64-linux-gnu_2.46-2 bsdextrautils_2.41.3-4 build-essential_12.12 bzip2_1.0.8-6+b1 coreutils_9.7-3 cpp_4:15.2.0-5 cpp-15_15.2.0-13 cpp-15-x86-64-linux-gnu_15.2.0-13 cpp-x86-64-linux-gnu_4:15.2.0-5 dash_0.5.12-12 debconf_1.5.92 debhelper_13.30 debianutils_5.23.2 dh-autoreconf_21+nmu1 dh-python_7.20260125 dh-strip-nondeterminism_1.15.0-1 diffutils_1:3.12-1 dpkg_1.23.5 dpkg-dev_1.23.5 dwz_0.16-2 file_1:5.46-5+b1 findutils_4.10.0-3 g++_4:15.2.0-5 g++-15_15.2.0-13 g++-15-x86-64-linux-gnu_15.2.0-13 g++-x86-64-linux-gnu_4:15.2.0-5 gcc_4:15.2.0-5 gcc-15_15.2.0-13 gcc-15-base_15.2.0-13 gcc-15-x86-64-linux-gnu_15.2.0-13 gcc-x86-64-linux-gnu_4:15.2.0-5 gettext_0.23.2-1 gettext-base_0.23.2-1 grep_3.12-1 groff-base_1.23.0-10 gzip_1.13-1 hostname_3.25 init-system-helpers_1.69 intltool-debian_0.35.0+20060710.6 libacl1_2.3.2-3 libarchive-zip-perl_1.68-1 libasan8_15.2.0-13 libatomic1_15.2.0-13 libattr1_1:2.5.2-4 libaudit-common_1:4.1.2-1 libaudit1_1:4.1.2-1+b1 libbinutils_2.46-2 libblkid1_2.41.3-4 libbz2-1.0_1.0.8-6+b1 libc-bin_2.42-13 libc-dev-bin_2.42-13 libc-gconv-modules-extra_2.42-13 libc6_2.42-13 libc6-dev_2.42-13 libcap-ng0_0.9.1-1 libcap2_1:2.75-10+b5 libcc1-0_15.2.0-13 libcrypt1_1:4.5.1-1 libctf-nobfd0_2.46-2 libctf0_2.46-2 libdb5.3t64_5.3.28+dfsg2-11 libdebconfclient0_0.282+b2 libdebhelper-perl_13.30 libdpkg-perl_1.23.5 libelf1t64_0.194-1 libexpat1_2.7.4-1 libffi8_3.5.2-3+b1 libfile-stripnondeterminism-perl_1.15.0-1 libgcc-15-dev_15.2.0-13 libgcc-s1_15.2.0-13 libgdbm-compat4t64_1.26-1+b1 libgdbm6t64_1.26-1+b1 libgmp10_2:6.3.0+dfsg-5+b1 libgomp1_15.2.0-13 libgprofng0_2.46-2 libhwasan0_15.2.0-13 libisl23_0.27-1+b1 libitm1_15.2.0-13 libjansson4_2.14-2+b4 liblsan0_15.2.0-13 liblzma5_5.8.2-2 libmagic-mgc_1:5.46-5+b1 libmagic1t64_1:5.46-5+b1 libmd0_1.1.0-2+b2 libmount1_2.41.3-4 libmpc3_1.3.1-2+b1 libmpfr6_4.2.2-2+b1 libncursesw6_6.6+20251231-1 libpam-modules_1.7.0-5+b1 libpam-modules-bin_1.7.0-5+b1 libpam-runtime_1.7.0-5 libpam0g_1.7.0-5+b1 libpcre2-8-0_10.46-1+b1 libperl5.40_5.40.1-7 libpipeline1_1.5.8-2 libpython3-stdlib_3.13.9-3 libpython3.13-minimal_3.13.12-1 libpython3.13-stdlib_3.13.12-1 libpython3.14-minimal_3.14.3-1 libpython3.14-stdlib_3.14.3-1 libquadmath0_15.2.0-13 libreadline8t64_8.3-4 libseccomp2_2.6.0-2+b1 libselinux1_3.9-4+b1 libsframe3_2.46-2 libsmartcols1_2.41.3-4 libsqlite3-0_3.46.1-9 libssl3t64_3.5.5-1 libstdc++-15-dev_15.2.0-13 libstdc++6_15.2.0-13 libsystemd0_259.1-1 libtinfo6_6.6+20251231-1 libtool_2.5.4-9 libtsan2_15.2.0-13 libubsan1_15.2.0-13 libuchardet0_0.0.8-2+b1 libudev1_259.1-1 libunistring5_1.3-2+b1 libuuid1_2.41.3-4 libxml2-16_2.15.1+dfsg-2+b1 libzstd1_1.5.7+dfsg-3+b1 linux-libc-dev_6.18.12-1 m4_1.4.21-1 make_4.4.1-3 man-db_2.13.1-1 mawk_1.3.4.20260129-1 media-types_14.0.0 ncurses-base_6.6+20251231-1 ncurses-bin_6.6+20251231-1 netbase_6.5 openssl-provider-legacy_3.5.5-1 patch_2.8-2 perl_5.40.1-7 perl-base_5.40.1-7 perl-modules-5.40_5.40.1-7 po-debconf_1.0.22 pybuild-plugin-pyproject_7.20260125 python3_3.13.9-3 python3-all_3.13.9-3 python3-autocommand_2.2.2-4 python3-build_1.4.0-1 python3-execnet_2.1.1-1 python3-fastbencode_0.3.8-1 python3-inflect_7.5.0-1 python3-iniconfig_2.1.0-2 python3-installer_0.7.0+dfsg1-3 python3-jaraco.context_6.0.1-2 python3-jaraco.functools_4.1.0-1 python3-jaraco.text_4.0.0-1 python3-markupsafe_3.0.3-1+b1 python3-minimal_3.13.9-3 python3-more-itertools_10.8.0-1 python3-packaging_25.0-2 python3-pkg-resources_78.1.1-0.1 python3-pluggy_1.6.0-2 python3-pygments_2.19.2+dfsg-1 python3-pyproject-hooks_1.2.0-1 python3-pytest_9.0.2-2 python3-pytest-httpserver_1.1.3-2 python3-pytest-mock_3.15.1-1 python3-pytest-xdist_3.8.0-4 python3-setuptools_78.1.1-0.1 python3-typeguard_4.4.4-2 python3-typing-extensions_4.15.0-2 python3-werkzeug_3.1.5-1 python3-wheel_0.46.3-2 python3-zipp_3.23.0-1 python3.13_3.13.12-1 python3.13-minimal_3.13.12-1 python3.14_3.14.3-1 python3.14-minimal_3.14.3-1 readline-common_8.3-4 rpcsvc-proto_1.4.3-1 sed_4.9-2 sensible-utils_0.0.26 sysvinit-utils_3.15-6 tar_1.35+dfsg-4 tzdata_2025c-3 util-linux_2.41.3-4 xz-utils_5.8.2-2 zlib1g_1:1.3.dfsg+really1.3.1-3 +------------------------------------------------------------------------------+ | Build Wed, 25 Feb 2026 15:53:21 +0000 | +------------------------------------------------------------------------------+ Unpack source ------------- -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Format: 3.0 (quilt) Source: torf Binary: python3-torf Architecture: all Version: 4.3.0-1 Maintainer: Debian Python Team Uploaders: Nadzeya Hutsko Homepage: https://github.com/rndusr/torf Standards-Version: 4.7.3 Vcs-Browser: https://salsa.debian.org/python-team/packages/torf Vcs-Git: https://salsa.debian.org/python-team/packages/torf.git Testsuite: autopkgtest Testsuite-Triggers: python3-all, python3-fastbencode, python3-pytest, python3-pytest-httpserver, python3-pytest-mock, python3-pytest-xdist Build-Depends: debhelper-compat (= 13), dh-sequence-python3 Build-Depends-Indep: pybuild-plugin-pyproject, python3-all, python3-fastbencode, python3-pytest, python3-pytest-httpserver, python3-pytest-mock, python3-pytest-xdist, python3-setuptools Package-List: python3-torf deb python optional arch=all Checksums-Sha1: bc8fbb84642796c39ea58e4f3b7333825fef32e1 122207 torf_4.3.0.orig.tar.gz 0211f5fffb0dc95899acf714967a1dca4a2cd07e 3620 torf_4.3.0-1.debian.tar.xz Checksums-Sha256: 3f132c98b690d58391195752a1f65c110781019253c82be4ad811a36af148e33 122207 torf_4.3.0.orig.tar.gz de04c582730bae2041301c8c5a62a2c70f199d80fecb811911981dce07b56580 3620 torf_4.3.0-1.debian.tar.xz Files: a388d2bd82d2c7bf6cf83350f380e563 122207 torf_4.3.0.orig.tar.gz f78c54532862140ef2d42656bd95b04e 3620 torf_4.3.0-1.debian.tar.xz -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEY+78PeFNUUbOfyS/NLitfZUp55MFAmlmZuUACgkQNLitfZUp 55MCxQ/+J4jCLudVqf2/TQvgvRYfJ5EwrYzSYdHYZpk+pas4qBnvCn80PVCwpSxX N4+P+kfj7vmNXodDhEH6nBds1kvt9Pz/WZK4Ekwrk0FEutO7PWTbYIWVbyd3r25o 6ni60o50Xu2TPyvnXSvxPHpkYV7TkiVN01zvQP6Vb8DimFtar1JmOzz/d0k/4a7n dT/fZnBjjbc/ONe9tXx+fGkGIpCkiXqoeg0D6lSwC1A/T+gt2w3XSPL5KKwIQBgM a2BhbP1MKT2AvFWxYpa4glUgqAWzXNV0b1NtzCubVI1EB2kzOV99N0IWJjGl68vD bk6HvH8pyaglU9GbJKDi5XNft6V0T8eZFC2zmcU6eP0YDeNY7sF4n76z5Q8feTCw jC+kIsTtOOOTwW0poRpg7yu/Xh/JK9/SBljee5QFRoRBMMAKr7p0lx5ZQc1A2SbY 20V93BH/9yVLUQbs3TLSlDSCrf3j1SjKhE8BOUG0EcRATeWJKgJZyHnzaIb2ku5E TAfn0tDsoFe+8bcKgo004+eV5/93zmTvB7fIqVfwoCqvLbEsWeF5DxbT9F7l4Hjq az0kcuLXBPlUAUXUGfTOmH8hZM17PCJIvqTn9G6D1t0YGwfDL2KAItbV452p08jt 1iBYgDmtRfaoVuWZ18oi93z4SU1CW6SM7/PfNUa52X+umrsPGW8= =JVZw -----END PGP SIGNATURE----- dpkg-source: warning: cannot verify inline signature for ./torf_4.3.0-1.dsc: missing OpenPGP keyrings dpkg-source: info: verifying ./torf_4.3.0-1.dsc dpkg-source: info: skipping absent keyring /usr/share/keyrings/debian-keyring.pgp dpkg-source: info: skipping absent keyring /usr/share/keyrings/debian-tag2upload.pgp dpkg-source: info: skipping absent keyring /usr/share/keyrings/debian-nonupload.pgp dpkg-source: info: skipping absent keyring /usr/share/keyrings/debian-maintainers.pgp dpkg-source: info: extracting torf in /build/reproducible-path/torf-4.3.0 dpkg-source: info: unpacking torf_4.3.0.orig.tar.gz dpkg-source: info: unpacking torf_4.3.0-1.debian.tar.xz dpkg-source: info: using patch list from debian/patches/series dpkg-source: info: applying 0001-Add-flatbencode-compatibility-shim-for-fastbencode.patch dpkg-source: info: applying 0002-Skip-network-tests-that-fail-in-sbuild-environment.patch Check disk space ---------------- Sufficient free space for build User Environment ---------------- APT_CONFIG=/var/lib/sbuild/apt.conf DEB_BUILD_OPTIONS=parallel=6 HOME=/sbuild-nonexistent LANG=C.UTF-8 LC_ALL=C.UTF-8 LC_COLLATE=C.UTF-8 LC_CTYPE=C.UTF-8 LOGNAME=sbuild PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games SHELL=/bin/sh SOURCE_DATE_EPOCH=1768244042 USER=sbuild dpkg-buildpackage ----------------- Command: dpkg-buildpackage --sanitize-env -us -uc -A dpkg-buildpackage: info: source package torf dpkg-buildpackage: info: source version 4.3.0-1 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Nadzeya Hutsko dpkg-source --before-build . debian/rules clean dh clean --buildsystem=pybuild dh_auto_clean -O--buildsystem=pybuild dh_autoreconf_clean -O--buildsystem=pybuild dh_clean -O--buildsystem=pybuild debian/rules binary-indep dh binary-indep --buildsystem=pybuild dh_update_autotools_config -i -O--buildsystem=pybuild dh_autoreconf -i -O--buildsystem=pybuild dh_auto_configure -i -O--buildsystem=pybuild dh_auto_build -i -O--buildsystem=pybuild I: pybuild plugin_pyproject:142: Building wheel for python3.14 with "build" module I: pybuild base:384: python3.14 -m build --skip-dependency-check --no-isolation --wheel --outdir /build/reproducible-path/torf-4.3.0/.pybuild/cpython3_3.14 * Building wheel... /usr/lib/python3/dist-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated !! ******************************************************************************** Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0). This deprecation is overdue, please update your project and remove deprecated calls to avoid build errors in the future. See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! corresp(dist, value, root_dir) /usr/lib/python3/dist-packages/setuptools/config/_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+) See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! dist._finalize_license_expression() /usr/lib/python3/dist-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+) See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! self._finalize_license_expression() running bdist_wheel running build running build_py creating build/lib/torf copying torf/_errors.py -> build/lib/torf copying torf/_stream.py -> build/lib/torf copying torf/_torrent.py -> build/lib/torf copying torf/__init__.py -> build/lib/torf copying torf/_generate.py -> build/lib/torf copying torf/_magnet.py -> build/lib/torf copying torf/_reuse.py -> build/lib/torf copying torf/flatbencode.py -> build/lib/torf copying torf/_utils.py -> build/lib/torf running egg_info creating torf.egg-info writing torf.egg-info/PKG-INFO writing dependency_links to torf.egg-info/dependency_links.txt writing requirements to torf.egg-info/requires.txt writing top-level names to torf.egg-info/top_level.txt writing manifest file 'torf.egg-info/SOURCES.txt' reading manifest file 'torf.egg-info/SOURCES.txt' adding license file 'LICENSE' writing manifest file 'torf.egg-info/SOURCES.txt' copying torf/__init__.pyi -> build/lib/torf copying torf/_errors.pyi -> build/lib/torf copying torf/_magnet.pyi -> build/lib/torf copying torf/_stream.pyi -> build/lib/torf copying torf/_torrent.pyi -> build/lib/torf copying torf/_utils.pyi -> build/lib/torf copying torf/py.typed -> build/lib/torf installing to build/bdist.linux-x86_64/wheel running install running install_lib creating build/bdist.linux-x86_64/wheel creating build/bdist.linux-x86_64/wheel/torf copying build/lib/torf/_utils.pyi -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_errors.py -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_stream.py -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_errors.pyi -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_torrent.py -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/__init__.py -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_generate.py -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/py.typed -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_magnet.pyi -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_magnet.py -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_reuse.py -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/flatbencode.py -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/__init__.pyi -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_stream.pyi -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_utils.py -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_torrent.pyi -> build/bdist.linux-x86_64/wheel/./torf running install_egg_info Copying torf.egg-info to build/bdist.linux-x86_64/wheel/./torf-4.3.0.egg-info running install_scripts creating build/bdist.linux-x86_64/wheel/torf-4.3.0.dist-info/WHEEL creating '/build/reproducible-path/torf-4.3.0/.pybuild/cpython3_3.14/.tmp-w8knpt71/torf-4.3.0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it adding 'torf/__init__.py' adding 'torf/__init__.pyi' adding 'torf/_errors.py' adding 'torf/_errors.pyi' adding 'torf/_generate.py' adding 'torf/_magnet.py' adding 'torf/_magnet.pyi' adding 'torf/_reuse.py' adding 'torf/_stream.py' adding 'torf/_stream.pyi' adding 'torf/_torrent.py' adding 'torf/_torrent.pyi' adding 'torf/_utils.py' adding 'torf/_utils.pyi' adding 'torf/flatbencode.py' adding 'torf/py.typed' adding 'torf-4.3.0.dist-info/licenses/LICENSE' adding 'torf-4.3.0.dist-info/METADATA' adding 'torf-4.3.0.dist-info/WHEEL' adding 'torf-4.3.0.dist-info/top_level.txt' adding 'torf-4.3.0.dist-info/RECORD' removing build/bdist.linux-x86_64/wheel Successfully built torf-4.3.0-py3-none-any.whl I: pybuild plugin_pyproject:168: Unpacking wheel built for python3.14 with "installer" module I: pybuild plugin_pyproject:142: Building wheel for python3.13 with "build" module I: pybuild base:384: python3.13 -m build --skip-dependency-check --no-isolation --wheel --outdir /build/reproducible-path/torf-4.3.0/.pybuild/cpython3_3.13 * Building wheel... /usr/lib/python3/dist-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated !! ******************************************************************************** Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0). This deprecation is overdue, please update your project and remove deprecated calls to avoid build errors in the future. See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! corresp(dist, value, root_dir) /usr/lib/python3/dist-packages/setuptools/config/_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+) See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! dist._finalize_license_expression() /usr/lib/python3/dist-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+) See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! self._finalize_license_expression() running bdist_wheel running build running build_py running egg_info writing torf.egg-info/PKG-INFO writing dependency_links to torf.egg-info/dependency_links.txt writing requirements to torf.egg-info/requires.txt writing top-level names to torf.egg-info/top_level.txt reading manifest file 'torf.egg-info/SOURCES.txt' adding license file 'LICENSE' writing manifest file 'torf.egg-info/SOURCES.txt' installing to build/bdist.linux-x86_64/wheel running install running install_lib creating build/bdist.linux-x86_64/wheel creating build/bdist.linux-x86_64/wheel/torf copying build/lib/torf/_utils.pyi -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_errors.py -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_stream.py -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_errors.pyi -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_torrent.py -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/__init__.py -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_generate.py -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/py.typed -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_magnet.pyi -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_magnet.py -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_reuse.py -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/flatbencode.py -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/__init__.pyi -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_stream.pyi -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_utils.py -> build/bdist.linux-x86_64/wheel/./torf copying build/lib/torf/_torrent.pyi -> build/bdist.linux-x86_64/wheel/./torf running install_egg_info Copying torf.egg-info to build/bdist.linux-x86_64/wheel/./torf-4.3.0.egg-info running install_scripts creating build/bdist.linux-x86_64/wheel/torf-4.3.0.dist-info/WHEEL creating '/build/reproducible-path/torf-4.3.0/.pybuild/cpython3_3.13/.tmp-6m6coqlu/torf-4.3.0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it adding 'torf/__init__.py' adding 'torf/__init__.pyi' adding 'torf/_errors.py' adding 'torf/_errors.pyi' adding 'torf/_generate.py' adding 'torf/_magnet.py' adding 'torf/_magnet.pyi' adding 'torf/_reuse.py' adding 'torf/_stream.py' adding 'torf/_stream.pyi' adding 'torf/_torrent.py' adding 'torf/_torrent.pyi' adding 'torf/_utils.py' adding 'torf/_utils.pyi' adding 'torf/flatbencode.py' adding 'torf/py.typed' adding 'torf-4.3.0.dist-info/licenses/LICENSE' adding 'torf-4.3.0.dist-info/METADATA' adding 'torf-4.3.0.dist-info/WHEEL' adding 'torf-4.3.0.dist-info/top_level.txt' adding 'torf-4.3.0.dist-info/RECORD' removing build/bdist.linux-x86_64/wheel Successfully built torf-4.3.0-py3-none-any.whl I: pybuild plugin_pyproject:168: Unpacking wheel built for python3.13 with "installer" module dh_auto_test -i -O--buildsystem=pybuild I: pybuild base:384: cd /build/reproducible-path/torf-4.3.0/.pybuild/cpython3_3.14/build; python3.14 -m pytest tests ============================= test session starts ============================== platform linux -- Python 3.14.3, pytest-9.0.2, pluggy-1.6.0 rootdir: /build/reproducible-path/torf-4.3.0/.pybuild/cpython3_3.14/build configfile: pytest.ini plugins: mock-3.15.1, typeguard-4.4.4, xdist-3.8.0, pytest_httpserver-1.1.3 created: 9/9 workers 9 workers [6734 items] ........................................................................ [ 1%] ........................................................................ [ 2%] ........................................................................ [ 3%] ........................................................................ [ 4%] ........................................................................ [ 5%] ........................................................................ [ 6%] ........................................................................ [ 7%] ........................................................................ [ 8%] ........................................................................ [ 9%] ........................................................................ [ 10%] ........................................................................ [ 11%] ........................................................................ [ 12%] ........................................................................ [ 13%] ........................................................................ [ 14%] ........................................................................ [ 16%] ........................................................................ [ 17%] ........................................................................ [ 18%] ........................................................................ [ 19%] ........................................................................ [ 20%] ........................................................................ [ 21%] ........................................................................ [ 22%] ........................................................................ [ 23%] ........................................................................ [ 24%] ........................................................................ [ 25%] ........................................................................ [ 26%] ........................................................................ [ 27%] ................................................F....................... [ 28%] ........................................................................ [ 29%] ...F..................F.................F......................F........ [ 31%] ....F................E................Es................E............... [ 32%] Ess...............E.................E..............E..............F..... [ 33%] .......F.............F..........F...............F.......F............... [ 34%] .......................................F.............F...............F.. [ 35%] ............F.................F.................F.............F......... [ 36%] ..........F...................F..............F..............F........... [ 37%] ..........F..............F................F..............F.............. [ 38%] ....F...................F............F..................F............... [ 39%] .....F..........F..................F............................F....... [ 40%] ...................F.................................................... [ 41%] ........................................................................ [ 42%] ........................................................................ [ 43%] ........................................................................ [ 44%] ........................................................................ [ 45%] ........................................................................ [ 47%] ........................................................................ [ 48%] ........................................................................ [ 49%] ........................................................................ [ 50%] ........................................................................ [ 51%] ........................................................................ [ 52%] ........................................................................ [ 53%] ........................................................................ [ 54%] ........................................................................ [ 55%] ........................................................................ [ 56%] ........................................................................ [ 57%] ........................................................................ [ 58%] ........................................................................ [ 59%] ........................................................................ [ 60%] ........................................................................ [ 62%] ........................................................................ [ 63%] ........................................................................ [ 64%] ........................................................................ [ 65%] ........................................................................ [ 66%] ........................................................................ [ 67%] ........................................................................ [ 68%] ........................................................................ [ 69%] ........................................................................ [ 70%] ........................................................................ [ 71%] ........................................................................ [ 72%] ........................................................................ [ 73%] ........................................................................ [ 74%] ........................................................................ [ 75%] ........................................................................ [ 76%] ........................................................................ [ 78%] ........................................................................ [ 79%] ........................................................................ [ 80%] ........................................................................ [ 81%] ........................................................................ [ 82%] ........................................................................ [ 83%] ........................................................................ [ 84%] ........................................................................ [ 85%] ........................................................................ [ 86%] ........................................................................ [ 87%] ........................................................................ [ 88%] ........................................................................ [ 89%] ........................................................................ [ 90%] ........................................................................ [ 91%] ........................................................................ [ 93%] ........................................................................ [ 94%] ........................................................................ [ 95%] ........................................................................ [ 96%] ........................................................................ [ 97%] ........................................................................ [ 98%] ........................................................................ [ 99%] ...........F.................F.......F [100%] ==================================== ERRORS ==================================== ___________ ERROR at setup of test_setting_info_with_wrong_infohash ____________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 create_torrent = ._create_torrent at 0x7fcee85df530> singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) @pytest.fixture def generated_singlefile_torrent(create_torrent, singlefile_content): > torrent = create_torrent(path=singlefile_content.path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/conftest.py:374: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/conftest.py:409: in _create_torrent return torf.Torrent(**{**rand_kwargs, **kwargs}) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ...tpseed'], comment='mëJBK®Ekëœh', source='P3i7økéó¤LEúøGoïIH5', creation_date=datetime.datetime(1972, 4, 1, 19, 59, 48)) value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError __________ ERROR at setup of test_getting_info__unsupported_protocol ___________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 create_torrent = ._create_torrent at 0x7fcee85df7f0> singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) @pytest.fixture def generated_singlefile_torrent(create_torrent, singlefile_content): > torrent = create_torrent(path=singlefile_content.path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/conftest.py:374: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/conftest.py:409: in _create_torrent return torf.Torrent(**{**rand_kwargs, **kwargs}) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ'), name='sinģle fíle:JïYR WN93kœ') value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError __________ ERROR at setup of test_getting_info__xs_succeeds__as_fails __________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 create_torrent = ._create_torrent at 0x7fcee87a3320> singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) @pytest.fixture def generated_singlefile_torrent(create_torrent, singlefile_content): > torrent = create_torrent(path=singlefile_content.path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/conftest.py:374: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/conftest.py:409: in _create_torrent return torf.Torrent(**{**rand_kwargs, **kwargs}) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ...åzNïk6úú', source='IëCs³4ïcnú', creation_date=datetime.datetime(1991, 6, 8, 17, 37, 50), created_by='Qóoï mPíHxåyxyv1') value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError __________ ERROR at setup of test_getting_info__xs_fails__as_succeeds __________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 create_torrent = ._create_torrent at 0x7fcee87a26c0> singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) @pytest.fixture def generated_singlefile_torrent(create_torrent, singlefile_content): > torrent = create_torrent(path=singlefile_content.path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/conftest.py:374: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/conftest.py:409: in _create_torrent return torf.Torrent(**{**rand_kwargs, **kwargs}) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ...omment='Fœ rtxae© 3n2wQBKOt', source='®4óqtBm3H¤QQeCWWFBGï', creation_date=datetime.datetime(1997, 12, 21, 4, 59, 16)) value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError ______________ ERROR at setup of test_getting_info__xs_times_out _______________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 create_torrent = ._create_torrent at 0x7fcee87a05c0> singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) @pytest.fixture def generated_singlefile_torrent(create_torrent, singlefile_content): > torrent = create_torrent(path=singlefile_content.path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/conftest.py:374: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/conftest.py:409: in _create_torrent return torf.Torrent(**{**rand_kwargs, **kwargs}) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ'), name='sinģle fíle:JïYR WN93kœ', httpseeds=['http://localhost:123/httpseed'], created_by='b¤©3bgTxd85a') value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError _________________ ERROR at setup of test_getting_info_from_ws __________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 create_torrent = ._create_torrent at 0x7fcee87a09e0> multifile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files1/Multifile torrent:1fH ZM9TúB rKrm', exp_metainfo...nfohash='0e2e012468101efec5b1ac81ded6b8d95591c1fb', infohash_base32=b'BYXACJDICAPP5RNRVSA55VVY3FKZDQP3', size=1181623)) @pytest.fixture def generated_multifile_torrent(create_torrent, multifile_content): > torrent = create_torrent(path=multifile_content.path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/conftest.py:380: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/conftest.py:409: in _create_torrent return torf.Torrent(**{**rand_kwargs, **kwargs}) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files1/Multifile torrent:1fH ZM9TúB rKrm'), nam...=['http://localhost:123/httpseed'], comment='únJgQ4aUSïpœ3ö', source='cIzø8QZ²4WuöV2HYæ®', created_by='Föœ3ígTHdYqM4e') value = 4096 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 4096 torf/_torrent.py:642: PieceSizeError _________________ ERROR at setup of test_getting_info_from_tr __________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 create_torrent = ._create_torrent at 0x7fcee87a1220> multifile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files1/Multifile torrent:1fH ZM9TúB rKrm', exp_metainfo...nfohash='0e2e012468101efec5b1ac81ded6b8d95591c1fb', infohash_base32=b'BYXACJDICAPP5RNRVSA55VVY3FKZDQP3', size=1181623)) @pytest.fixture def generated_multifile_torrent(create_torrent, multifile_content): > torrent = create_torrent(path=multifile_content.path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/conftest.py:380: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/conftest.py:409: in _create_torrent return torf.Torrent(**{**rand_kwargs, **kwargs}) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files1/Multifile torrent:1fH ZM9TúB rKrm'), nam...], comment=' 9ZimOJzwb©ïwjS', creation_date=datetime.datetime(2025, 4, 14, 15, 40, 3), created_by='1óaU4mKpvhNeNtAXK¤') value = 4096 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 4096 torf/_torrent.py:642: PieceSizeError =================================== FAILURES =================================== ______________________ test_callback_raises_exception[8] _______________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 piece_size = 8 create_file = functools.partial(._create_file at 0x7fcee8770f60>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_callback_raises_exception0')) forced_piece_size = ._forced_piece_size at 0x7fcee85dfc10> def test_callback_raises_exception(piece_size, create_file, forced_piece_size): # We need a large file size so we can test that the hashers actually stop # before all pieces are hashed. content_path = create_file('file.jpg', piece_size * 1000) with forced_piece_size(piece_size): with mock.patch('torf._generate.sha1') as sha1_mock: def mock_digest(): return b'\x00' * 20 sha1_mock.return_value.digest.side_effect = mock_digest cb = mock.Mock(side_effect=Exception('Argh!')) t = torf.Torrent(content_path) with pytest.raises(Exception) as e: t.generate(callback=cb) assert str(e.value) == 'Argh!' cb.assert_called_once_with(t, Path(content_path), 1, t.pieces) # The pool of hashers should be stopped before all pieces are hashed > assert sha1_mock.call_count < t.pieces E AssertionError: assert 1000 < 1000 E + where 1000 = .call_count E + and 1000 = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_callback_raises_exception0/file.jpg'), name='file.jpg').pieces tests/test_generate.py:235: AssertionError ------------------------------ Captured log call ------------------------------- reader: Started janitor: Waiting for finalize event janitor: Started hasher1: Started hasher2: Started hasher3: Started hasher4: Started hasher5: Started hasher6: Started hasher7: Started hasher8: Started hasher9: Started hasher10: Started hasher11: Started reader: Piece queue is now exhausted hasher7: piece_queue is closed hasher8: piece_queue is closed hasher9: piece_queue is closed hasher1: piece_queue is closed hasher4: piece_queue is closed hasher11: piece_queue is closed hasher6: piece_queue is closed hasher12: piece_queue is closed hasher12: Started hasher13: piece_queue is closed hasher2: piece_queue is closed hasher10: piece_queue is closed hasher5: piece_queue is closed hasher13: Started hasher14: piece_queue is closed hasher14: Started hasher3: piece_queue is closed hasher15: piece_queue is closed hasher15: Started hasher16: piece_queue is closed janitor: All hashers terminated janitor: Closing hash queue janitor: Terminating hasher16: Started MainThread: Exception while dequeueing piece hashes: Exception('Argh!') MainThread: Reader: Setting stop flag MainThread: Joining MainThread: Joining MainThread: Joining hasher1 MainThread: Joining hasher2 MainThread: Joining hasher3 MainThread: Joining hasher4 MainThread: Joining hasher5 MainThread: Joining hasher6 MainThread: Joining hasher7 MainThread: Joining hasher8 MainThread: Joining hasher9 MainThread: Joining hasher10 MainThread: Joining hasher11 MainThread: Joining hasher12 MainThread: Joining hasher13 MainThread: Joining hasher14 MainThread: Joining hasher15 MainThread: Joining hasher16 MainThread: Joined all hashers MainThread: Joining janitor MainThread: Joined janitor MainThread: hash_queue has 1000 items left ______________________________ test_from_torrent _______________________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) multifile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files1/Multifile torrent:1fH ZM9TúB rKrm', exp_metainfo...nfohash='0e2e012468101efec5b1ac81ded6b8d95591c1fb', infohash_base32=b'BYXACJDICAPP5RNRVSA55VVY3FKZDQP3', size=1181623)) def test_from_torrent(singlefile_content, multifile_content): for content in singlefile_content, multifile_content: > t = torf.Torrent(content.path, trackers=['http://foo', 'http://bar'], webseeds=['http://qux', 'http://quux']) tests/test_magnet.py:300: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ'), name='sinģle fíle:JïYR WN93kœ', trackers=[['http://foo'], ['http://bar']], webseeds=['http://qux', 'http://quux']) value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError ________________________ test_from_torrent_without_name ________________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) multifile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files1/Multifile torrent:1fH ZM9TúB rKrm', exp_metainfo...nfohash='0e2e012468101efec5b1ac81ded6b8d95591c1fb', infohash_base32=b'BYXACJDICAPP5RNRVSA55VVY3FKZDQP3', size=1181623)) def test_from_torrent_without_name(singlefile_content, multifile_content): for content in singlefile_content, multifile_content: > t = torf.Torrent(content.path, trackers=['http://foo', 'http://bar']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_magnet.py:312: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ'), name='sinģle fíle:JïYR WN93kœ', trackers=[['http://foo'], ['http://bar']]) value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError ________________________ test_from_torrent_without_size ________________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) multifile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files1/Multifile torrent:1fH ZM9TúB rKrm', exp_metainfo...nfohash='0e2e012468101efec5b1ac81ded6b8d95591c1fb', infohash_base32=b'BYXACJDICAPP5RNRVSA55VVY3FKZDQP3', size=1181623)) def test_from_torrent_without_size(singlefile_content, multifile_content): for content in singlefile_content, multifile_content: > t = torf.Torrent(content.path, trackers=['http://foo', 'http://bar']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_magnet.py:320: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ'), name='sinģle fíle:JïYR WN93kœ', trackers=[['http://foo'], ['http://bar']]) value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError ____________________ test_from_torrent_with_single_tracker _____________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) multifile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files1/Multifile torrent:1fH ZM9TúB rKrm', exp_metainfo...nfohash='0e2e012468101efec5b1ac81ded6b8d95591c1fb', infohash_base32=b'BYXACJDICAPP5RNRVSA55VVY3FKZDQP3', size=1181623)) def test_from_torrent_with_single_tracker(singlefile_content, multifile_content): for content in singlefile_content, multifile_content: > t = torf.Torrent(content.path, trackers=['http://foo']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_magnet.py:328: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ'), name='sinģle fíle:JïYR WN93kœ', trackers=[['http://foo']]) value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError ___________________ test_from_torrent_with_multiple_trackers ___________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) multifile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files1/Multifile torrent:1fH ZM9TúB rKrm', exp_metainfo...nfohash='0e2e012468101efec5b1ac81ded6b8d95591c1fb', infohash_base32=b'BYXACJDICAPP5RNRVSA55VVY3FKZDQP3', size=1181623)) def test_from_torrent_with_multiple_trackers(singlefile_content, multifile_content): for content in singlefile_content, multifile_content: > t = torf.Torrent(content.path, trackers=['http://foo', 'http://bar']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_magnet.py:352: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ'), name='sinģle fíle:JïYR WN93kœ', trackers=[['http://foo'], ['http://bar']]) value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError ____________ test_partial_size__singlefile__providing_correct_name _____________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 tmp_path = PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_partial_size__singlefile_0') def test_partial_size__singlefile__providing_correct_name(tmp_path): (tmp_path / 'content.jpg').write_text('some data') > t = torf.Torrent(tmp_path / 'content.jpg') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_partial_size.py:8: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_partial_size__singlefile_0/content.jpg'), name='content.jpg') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _____________ test_partial_size__singlefile__providing_wrong_name ______________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 tmp_path = PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_partial_size__singlefile_1') def test_partial_size__singlefile__providing_wrong_name(tmp_path): (tmp_path / 'content.jpg').write_text('some data') > t = torf.Torrent(tmp_path / 'content.jpg') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_partial_size.py:14: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_partial_size__singlefile_1/content.jpg'), name='content.jpg') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ________________ test_partial_size__singlefile__providing_path _________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 tmp_path = PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_partial_size__singlefile_2') def test_partial_size__singlefile__providing_path(tmp_path): (tmp_path / 'content.jpg').write_text('some data') > t = torf.Torrent(tmp_path / 'content.jpg') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_partial_size.py:22: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_partial_size__singlefile_2/content.jpg'), name='content.jpg') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _____________ test_partial_size__multifile__providing_path_to_file _____________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 tmp_path = PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_partial_size__multifile__0') def test_partial_size__multifile__providing_path_to_file(tmp_path): (tmp_path / 'content').mkdir() (tmp_path / 'content' / 'file1.jpg').write_text('some data') (tmp_path / 'content' / 'file2.jpg').write_text('some other data') (tmp_path / 'content' / 'subcontent').mkdir() (tmp_path / 'content' / 'subcontent' / 'file3.jpg').write_text('some more data') > t = torf.Torrent(tmp_path / 'content') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_partial_size.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_partial_size__multifile__0/content'), name='content') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _____________ test_partial_size__multifile__providing_path_to_dir ______________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 tmp_path = PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_partial_size__multifile__1') def test_partial_size__multifile__providing_path_to_dir(tmp_path): (tmp_path / 'content').mkdir() (tmp_path / 'content' / 'file1.jpg').write_text('some data') (tmp_path / 'content' / 'file2.jpg').write_text('some other data') (tmp_path / 'content' / 'subcontent1').mkdir() (tmp_path / 'content' / 'subcontent1' / 'file3.jpg').write_text('some more data') (tmp_path / 'content' / 'subcontent1' / 'file4.jpg').write_text('and even more data') (tmp_path / 'content' / 'subcontent2').mkdir() (tmp_path / 'content' / 'subcontent2' / 'file5.jpg').write_text('some more other data') (tmp_path / 'content' / 'subcontent2' / 'file6.jpg').write_text('and even more other data') > t = torf.Torrent(tmp_path / 'content') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_partial_size.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_partial_size__multifile__1/content'), name='content') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _____________ test_partial_size__multifile__providing_unknown_path _____________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 tmp_path = PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_partial_size__multifile__2') def test_partial_size__multifile__providing_unknown_path(tmp_path): (tmp_path / 'content').mkdir() (tmp_path / 'content' / 'file1.jpg').write_text('some data') (tmp_path / 'content' / 'file2.jpg').write_text('some other data') (tmp_path / 'content' / 'subcontent').mkdir() (tmp_path / 'content' / 'subcontent' / 'file3.jpg').write_text('some more data') > t = torf.Torrent(tmp_path / 'content') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_partial_size.py:67: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_partial_size__multifile__2/content'), name='content') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _________ test_path_argument[a/path-exp_find_torrent_files_args0-None] _________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 path = 'a/path', exp_find_torrent_files_args = ('a/path',), exp_exception = None create_file = functools.partial(._create_file at 0x7fcee8899d20>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_path_argument_a_path_exp_0')) mocker = @pytest.mark.parametrize( argnames='path, exp_find_torrent_files_args, exp_exception', argvalues=( ('a/path', ('a/path',), None), (('a/path', 'another/path'), ('a/path', 'another/path'), None), (iter(('a/path', 'another/path')), ('a/path', 'another/path'), None), (123, (), ValueError('Invalid path argument: 123')), ), ) def test_path_argument(path, exp_find_torrent_files_args, exp_exception, create_file, mocker): find_torrent_files_mock = mocker.patch('torf._reuse.find_torrent_files', MagicMock( __iter__=MagicMock(return_value=()), total=0, )) > torrent = torf.Torrent(path=create_file('just_a_file', 'foo')) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:112: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_path_argument_a_path_exp_0/just_a_file'), name='just_a_file') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _________ test_path_argument[path1-exp_find_torrent_files_args1-None] __________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 path = ('a/path', 'another/path') exp_find_torrent_files_args = ('a/path', 'another/path'), exp_exception = None create_file = functools.partial(._create_file at 0x7fcee87719b0>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_path_argument_path1_exp_f0')) mocker = @pytest.mark.parametrize( argnames='path, exp_find_torrent_files_args, exp_exception', argvalues=( ('a/path', ('a/path',), None), (('a/path', 'another/path'), ('a/path', 'another/path'), None), (iter(('a/path', 'another/path')), ('a/path', 'another/path'), None), (123, (), ValueError('Invalid path argument: 123')), ), ) def test_path_argument(path, exp_find_torrent_files_args, exp_exception, create_file, mocker): find_torrent_files_mock = mocker.patch('torf._reuse.find_torrent_files', MagicMock( __iter__=MagicMock(return_value=()), total=0, )) > torrent = torf.Torrent(path=create_file('just_a_file', 'foo')) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:112: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_path_argument_path1_exp_f0/just_a_file'), name='just_a_file') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _________ test_path_argument[path2-exp_find_torrent_files_args2-None] __________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 path = exp_find_torrent_files_args = ('a/path', 'another/path'), exp_exception = None create_file = functools.partial(._create_file at 0x7fcee87703b0>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_path_argument_path2_exp_f0')) mocker = @pytest.mark.parametrize( argnames='path, exp_find_torrent_files_args, exp_exception', argvalues=( ('a/path', ('a/path',), None), (('a/path', 'another/path'), ('a/path', 'another/path'), None), (iter(('a/path', 'another/path')), ('a/path', 'another/path'), None), (123, (), ValueError('Invalid path argument: 123')), ), ) def test_path_argument(path, exp_find_torrent_files_args, exp_exception, create_file, mocker): find_torrent_files_mock = mocker.patch('torf._reuse.find_torrent_files', MagicMock( __iter__=MagicMock(return_value=()), total=0, )) > torrent = torf.Torrent(path=create_file('just_a_file', 'foo')) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:112: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_path_argument_path2_exp_f0/just_a_file'), name='just_a_file') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _____ test_path_argument[123-exp_find_torrent_files_args3-exp_exception3] ______ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 path = 123, exp_find_torrent_files_args = () exp_exception = ValueError('Invalid path argument: 123') create_file = functools.partial(._create_file at 0x7fcee87722a0>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_path_argument_123_exp_fin0')) mocker = @pytest.mark.parametrize( argnames='path, exp_find_torrent_files_args, exp_exception', argvalues=( ('a/path', ('a/path',), None), (('a/path', 'another/path'), ('a/path', 'another/path'), None), (iter(('a/path', 'another/path')), ('a/path', 'another/path'), None), (123, (), ValueError('Invalid path argument: 123')), ), ) def test_path_argument(path, exp_find_torrent_files_args, exp_exception, create_file, mocker): find_torrent_files_mock = mocker.patch('torf._reuse.find_torrent_files', MagicMock( __iter__=MagicMock(return_value=()), total=0, )) > torrent = torf.Torrent(path=create_file('just_a_file', 'foo')) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:112: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_path_argument_123_exp_fin0/just_a_file'), name='just_a_file') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError __________________________ test_max_torrent_file_size __________________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 create_file = functools.partial(._create_file at 0x7fcee87719b0>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_max_torrent_file_size0')) existing_torrents = .ExistingTorrents'> mocker = def test_max_torrent_file_size(create_file, existing_torrents, mocker): # Create and prepare existing torrents > existing_torrents = existing_torrents( subpath1=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), subpath2=( ('d', 'hey', {'private': True}), ('e', 'ho', {'comment': 'yo'}), ('f', 'oh', {'comment': 'oy'}), ('g', 'ohh', {'comment': 'oyy'}), ), ) tests/test_reuse.py:128: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_max_torrent_file_size0/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ________________ test__singlefile__no_exceptions[with_callback] ________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 with_callback = True existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test__singlefile__no_exceptions(with_callback, existing_torrents): # Create and prepare existing torrents > existing_torrents = existing_torrents( my_torrents=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ('d', 'arf', {'created_by': 'me!'}), ('e', 'barf', {'source': 'you!'}), ), ) tests/test_reuse.py:164: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test__singlefile__no_exception0/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ______________ test__singlefile__no_exceptions[without_callback] _______________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 with_callback = False existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test__singlefile__no_exceptions(with_callback, existing_torrents): # Create and prepare existing torrents > existing_torrents = existing_torrents( my_torrents=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ('d', 'arf', {'created_by': 'me!'}), ('e', 'barf', {'source': 'you!'}), ), ) tests/test_reuse.py:164: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test__singlefile__no_exception1/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ________________ test__multifile__no_exceptions[with_callback] _________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 with_callback = True existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test__multifile__no_exceptions(with_callback, existing_torrents): # Create and prepare existing torrents with some of them sharing the same # (torrent name, file name, file size) but different file contents > existing_torrents = existing_torrents( torrents1=( ('a', ( ('this.jpg', 16380 * 30), ('that.txt', 'text data'), ), {'creation_date': 123}), ('b', ( ('this.jpg', 16380 * 30), ('that.txt', 'text doto'), ), {'creation_date': 456}), ('c', ( ('this.jpg', 16380 * 30), ('that.txt', 'text diti'), ), {'creation_date': 789}), ), torrents2=( ('a', ( ('this.jpg', 16380 * 30), ('that.txt', 'more text'), ), {'creation_date': 234}), ('b', ( ('this.jpg', 16380 * 30), ('that.txt', 'mare text'), ), {'creation_date': 345}), ('c', ( ('this.jpg', 16380 * 30), ('that.txt', 'mire text'), ), {'creation_date': 456}), ), ) tests/test_reuse.py:221: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test__multifile__no_exceptions0/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 1024 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 1024 torf/_torrent.py:642: PieceSizeError _______________ test__multifile__no_exceptions[without_callback] _______________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 with_callback = False existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test__multifile__no_exceptions(with_callback, existing_torrents): # Create and prepare existing torrents with some of them sharing the same # (torrent name, file name, file size) but different file contents > existing_torrents = existing_torrents( torrents1=( ('a', ( ('this.jpg', 16380 * 30), ('that.txt', 'text data'), ), {'creation_date': 123}), ('b', ( ('this.jpg', 16380 * 30), ('that.txt', 'text doto'), ), {'creation_date': 456}), ('c', ( ('this.jpg', 16380 * 30), ('that.txt', 'text diti'), ), {'creation_date': 789}), ), torrents2=( ('a', ( ('this.jpg', 16380 * 30), ('that.txt', 'more text'), ), {'creation_date': 234}), ('b', ( ('this.jpg', 16380 * 30), ('that.txt', 'mare text'), ), {'creation_date': 345}), ('c', ( ('this.jpg', 16380 * 30), ('that.txt', 'mire text'), ), {'creation_date': 456}), ), ) tests/test_reuse.py:221: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test__multifile__no_exceptions1/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 1024 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 1024 torf/_torrent.py:642: PieceSizeError ________________________ test_exceptions[with_callback] ________________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 with_callback = True existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test_exceptions(with_callback, existing_torrents): # Create and prepare existing torrents > existing_torrents = existing_torrents( readable1=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), unreadable=(), readable2=( ('d', 'hey', {'private': True}), ('e', 'ho', {'comment': 'yo'}), ('f', 'oh', {'comment': 'oy'}), ('g', 'ohh', {'comment': 'oyy'}), ), ) tests/test_reuse.py:306: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_exceptions_with_callback_0/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ______________________ test_exceptions[without_callback] _______________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 with_callback = False existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test_exceptions(with_callback, existing_torrents): # Create and prepare existing torrents > existing_torrents = existing_torrents( readable1=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), unreadable=(), readable2=( ('d', 'hey', {'private': True}), ('e', 'ho', {'comment': 'yo'}), ('f', 'oh', {'comment': 'oy'}), ('g', 'ohh', {'comment': 'oyy'}), ), ) tests/test_reuse.py:306: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_exceptions_without_callba0/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ________________ test_callback_cancels_when_handling[mismatch] _________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 cancel_condition = at 0x7fcee95dca90> exp_callback_calls_count = 1 existing_torrents = .ExistingTorrents'> create_file = functools.partial(._create_file at 0x7fcee8898eb0>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_callback_cancels_when_han0')) @pytest.mark.parametrize( argnames='cancel_condition, exp_callback_calls_count', argvalues=( # cancel_condition gets torrent_filepath and is_match and returns True # for cancelling, False otherwise. pytest.param( lambda tfp, is_match: is_match is False, 1, id='mismatch', ), pytest.param( lambda tfp, is_match: tfp is None, 4, id='unreadable directory', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'e.torrent', 6, id='unreadable torrent file', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'f.torrent', 7, id='invalid bencoded data', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'g.torrent', 8, id='invalid metainfo', ), pytest.param( lambda tfp, is_match: is_match is None, 9, id='verification', ), ), ) def test_callback_cancels_when_handling(cancel_condition, exp_callback_calls_count, existing_torrents, create_file): # Create and prepare existing torrents > existing_torrents = existing_torrents( readable1=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), # Unreadable directory unreadable=(), readable2=( ('d', 'hey', {'private': True}), ('e', 'ho', {'comment': 'yo'}), ('f', 'oh', {'comment': 'oy'}), ('g', 'ohh', {'comment': 'oyy'}), ('h', 'ohy', {'comment': 'hoyo'}), ), ) tests/test_reuse.py:442: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_callback_cancels_when_han0/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError __________ test_callback_cancels_when_handling[unreadable directory] ___________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 cancel_condition = at 0x7fcee95dcb40> exp_callback_calls_count = 4 existing_torrents = .ExistingTorrents'> create_file = functools.partial(._create_file at 0x7fcee891f060>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_callback_cancels_when_han1')) @pytest.mark.parametrize( argnames='cancel_condition, exp_callback_calls_count', argvalues=( # cancel_condition gets torrent_filepath and is_match and returns True # for cancelling, False otherwise. pytest.param( lambda tfp, is_match: is_match is False, 1, id='mismatch', ), pytest.param( lambda tfp, is_match: tfp is None, 4, id='unreadable directory', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'e.torrent', 6, id='unreadable torrent file', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'f.torrent', 7, id='invalid bencoded data', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'g.torrent', 8, id='invalid metainfo', ), pytest.param( lambda tfp, is_match: is_match is None, 9, id='verification', ), ), ) def test_callback_cancels_when_handling(cancel_condition, exp_callback_calls_count, existing_torrents, create_file): # Create and prepare existing torrents > existing_torrents = existing_torrents( readable1=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), # Unreadable directory unreadable=(), readable2=( ('d', 'hey', {'private': True}), ('e', 'ho', {'comment': 'yo'}), ('f', 'oh', {'comment': 'oy'}), ('g', 'ohh', {'comment': 'oyy'}), ('h', 'ohy', {'comment': 'hoyo'}), ), ) tests/test_reuse.py:442: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_callback_cancels_when_han1/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _________ test_callback_cancels_when_handling[unreadable torrent file] _________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 cancel_condition = at 0x7fcee95dcbf0> exp_callback_calls_count = 6 existing_torrents = .ExistingTorrents'> create_file = functools.partial(._create_file at 0x7fcee87a09e0>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_callback_cancels_when_han2')) @pytest.mark.parametrize( argnames='cancel_condition, exp_callback_calls_count', argvalues=( # cancel_condition gets torrent_filepath and is_match and returns True # for cancelling, False otherwise. pytest.param( lambda tfp, is_match: is_match is False, 1, id='mismatch', ), pytest.param( lambda tfp, is_match: tfp is None, 4, id='unreadable directory', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'e.torrent', 6, id='unreadable torrent file', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'f.torrent', 7, id='invalid bencoded data', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'g.torrent', 8, id='invalid metainfo', ), pytest.param( lambda tfp, is_match: is_match is None, 9, id='verification', ), ), ) def test_callback_cancels_when_handling(cancel_condition, exp_callback_calls_count, existing_torrents, create_file): # Create and prepare existing torrents > existing_torrents = existing_torrents( readable1=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), # Unreadable directory unreadable=(), readable2=( ('d', 'hey', {'private': True}), ('e', 'ho', {'comment': 'yo'}), ('f', 'oh', {'comment': 'oy'}), ('g', 'ohh', {'comment': 'oyy'}), ('h', 'ohy', {'comment': 'hoyo'}), ), ) tests/test_reuse.py:442: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_callback_cancels_when_han2/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError __________ test_callback_cancels_when_handling[invalid bencoded data] __________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 cancel_condition = at 0x7fcee95dcca0> exp_callback_calls_count = 7 existing_torrents = .ExistingTorrents'> create_file = functools.partial(._create_file at 0x7fcee87a1bc0>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_callback_cancels_when_han3')) @pytest.mark.parametrize( argnames='cancel_condition, exp_callback_calls_count', argvalues=( # cancel_condition gets torrent_filepath and is_match and returns True # for cancelling, False otherwise. pytest.param( lambda tfp, is_match: is_match is False, 1, id='mismatch', ), pytest.param( lambda tfp, is_match: tfp is None, 4, id='unreadable directory', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'e.torrent', 6, id='unreadable torrent file', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'f.torrent', 7, id='invalid bencoded data', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'g.torrent', 8, id='invalid metainfo', ), pytest.param( lambda tfp, is_match: is_match is None, 9, id='verification', ), ), ) def test_callback_cancels_when_handling(cancel_condition, exp_callback_calls_count, existing_torrents, create_file): # Create and prepare existing torrents > existing_torrents = existing_torrents( readable1=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), # Unreadable directory unreadable=(), readable2=( ('d', 'hey', {'private': True}), ('e', 'ho', {'comment': 'yo'}), ('f', 'oh', {'comment': 'oy'}), ('g', 'ohh', {'comment': 'oyy'}), ('h', 'ohy', {'comment': 'hoyo'}), ), ) tests/test_reuse.py:442: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_callback_cancels_when_han3/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ____________ test_callback_cancels_when_handling[invalid metainfo] _____________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 cancel_condition = at 0x7fcee95dcd50> exp_callback_calls_count = 8 existing_torrents = .ExistingTorrents'> create_file = functools.partial(._create_file at 0x7fcee87a2e50>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_callback_cancels_when_han4')) @pytest.mark.parametrize( argnames='cancel_condition, exp_callback_calls_count', argvalues=( # cancel_condition gets torrent_filepath and is_match and returns True # for cancelling, False otherwise. pytest.param( lambda tfp, is_match: is_match is False, 1, id='mismatch', ), pytest.param( lambda tfp, is_match: tfp is None, 4, id='unreadable directory', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'e.torrent', 6, id='unreadable torrent file', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'f.torrent', 7, id='invalid bencoded data', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'g.torrent', 8, id='invalid metainfo', ), pytest.param( lambda tfp, is_match: is_match is None, 9, id='verification', ), ), ) def test_callback_cancels_when_handling(cancel_condition, exp_callback_calls_count, existing_torrents, create_file): # Create and prepare existing torrents > existing_torrents = existing_torrents( readable1=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), # Unreadable directory unreadable=(), readable2=( ('d', 'hey', {'private': True}), ('e', 'ho', {'comment': 'yo'}), ('f', 'oh', {'comment': 'oy'}), ('g', 'ohh', {'comment': 'oyy'}), ('h', 'ohy', {'comment': 'hoyo'}), ), ) tests/test_reuse.py:442: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_callback_cancels_when_han4/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ______________ test_callback_cancels_when_handling[verification] _______________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 cancel_condition = at 0x7fcee95dce00> exp_callback_calls_count = 9 existing_torrents = .ExistingTorrents'> create_file = functools.partial(._create_file at 0x7fcee85decf0>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_callback_cancels_when_han5')) @pytest.mark.parametrize( argnames='cancel_condition, exp_callback_calls_count', argvalues=( # cancel_condition gets torrent_filepath and is_match and returns True # for cancelling, False otherwise. pytest.param( lambda tfp, is_match: is_match is False, 1, id='mismatch', ), pytest.param( lambda tfp, is_match: tfp is None, 4, id='unreadable directory', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'e.torrent', 6, id='unreadable torrent file', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'f.torrent', 7, id='invalid bencoded data', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'g.torrent', 8, id='invalid metainfo', ), pytest.param( lambda tfp, is_match: is_match is None, 9, id='verification', ), ), ) def test_callback_cancels_when_handling(cancel_condition, exp_callback_calls_count, existing_torrents, create_file): # Create and prepare existing torrents > existing_torrents = existing_torrents( readable1=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), # Unreadable directory unreadable=(), readable2=( ('d', 'hey', {'private': True}), ('e', 'ho', {'comment': 'yo'}), ('f', 'oh', {'comment': 'oy'}), ('g', 'ohh', {'comment': 'oyy'}), ('h', 'ohy', {'comment': 'hoyo'}), ), ) tests/test_reuse.py:442: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_callback_cancels_when_han5/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _______________ test_handling_of_nonexisting_path[with_callback] _______________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 with_callback = True existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test_handling_of_nonexisting_path(with_callback, existing_torrents): # Create and prepare existing torrents > existing_torrents = existing_torrents( my_torrents=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), ) tests/test_reuse.py:537: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_handling_of_nonexisting_p0/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _____________ test_handling_of_nonexisting_path[without_callback] ______________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 with_callback = False existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test_handling_of_nonexisting_path(with_callback, existing_torrents): # Create and prepare existing torrents > existing_torrents = existing_torrents( my_torrents=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), ) tests/test_reuse.py:537: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_handling_of_nonexisting_p1/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ________________ test_reuse_with_empty_file_list[with_callback] ________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 with_callback = True existing_torrents = .ExistingTorrents'> create_file = functools.partial(._create_file at 0x7fcee85c4510>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_reuse_with_empty_file_lis0')) @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test_reuse_with_empty_file_list(with_callback, existing_torrents, create_file): # Create and prepare existing torrents > existing_torrents = existing_torrents( my_torrents=( ('a.jpg', 'foo', {'creation_date': 123}), ('b.txt', 'bar', {'creation_date': 456}), ('c.mp4', 'baz', {'creation_date': 789}), ), ) tests/test_reuse.py:581: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_reuse_with_empty_file_lis0/a.jpg'), name='a.jpg', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ______________ test_reuse_with_empty_file_list[without_callback] _______________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 with_callback = False existing_torrents = .ExistingTorrents'> create_file = functools.partial(._create_file at 0x7fcee85c5220>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_reuse_with_empty_file_lis1')) @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test_reuse_with_empty_file_list(with_callback, existing_torrents, create_file): # Create and prepare existing torrents > existing_torrents = existing_torrents( my_torrents=( ('a.jpg', 'foo', {'creation_date': 123}), ('b.txt', 'bar', {'creation_date': 456}), ('c.mp4', 'baz', {'creation_date': 789}), ), ) tests/test_reuse.py:581: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_reuse_with_empty_file_lis1/a.jpg'), name='a.jpg', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ___________________ test_reuse_considers_piece_size_min_max ____________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 existing_torrents = .ExistingTorrents'> def test_reuse_considers_piece_size_min_max(existing_torrents): # Create and prepare existing torrents > existing_torrents = existing_torrents( small=( ('a.jpg', 'foo', {'piece_size': 1048576 / 2}), ('b.txt', 'bar', {'piece_size': 1048576 * 1}), ('c.mp4', 'baz', {'piece_size': 1048576 / 2}), ), big=( ('a.jpg', 'foo', {'piece_size': 1048576 / 2}), ('b.txt', 'bar', {'piece_size': 1048576 * 4}), ('c.mp4', 'baz', {'piece_size': 1048576 / 2}), ), medium=( ('a.jpg', 'foo', {'piece_size': 1048576 / 2}), ('b.txt', 'bar', {'piece_size': 1048576 * 2}), ('c.mp4', 'baz', {'piece_size': 1048576 / 2}), ), large=( ('a.jpg', 'foo', {'piece_size': 1048576 / 2}), ('b.txt', 'bar', {'piece_size': 1048576 * 8}), ('c.mp4', 'baz', {'piece_size': 1048576 / 2}), ), giant=( ('a.jpg', 'foo', {'piece_size': 1048576 / 2}), ('b.txt', 'bar', {'piece_size': 1048576 * 16}), ('c.mp4', 'baz', {'piece_size': 1048576 / 2}), ), ) tests/test_reuse.py:610: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_reuse_considers_piece_siz0/a.jpg'), name='a.jpg') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _________________ test_reuse_copies_file_order[with_callback] __________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 with_callback = True existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test_reuse_copies_file_order(with_callback, existing_torrents): # Create and prepare existing torrents with some of them sharing the same # (torrent name, file name, file size) but different file contents > existing_torrents = existing_torrents( my_torrents=( ('a', ( ('this.jpg', 16380 * 30), ('that.txt', 'text data'), ), {'creation_date': 123}), ('b', ( ('this.jpg', 16380 * 30), ('that.txt', 'text doto'), ), {'creation_date': 456}), ('c', ( ('this.jpg', 16380 * 30), ('that.txt', 'text diti'), ), {'creation_date': 789}), ), ) tests/test_reuse.py:681: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_reuse_copies_file_order_w0/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 1024 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 1024 torf/_torrent.py:642: PieceSizeError ________________ test_reuse_copies_file_order[without_callback] ________________ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 with_callback = False existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test_reuse_copies_file_order(with_callback, existing_torrents): # Create and prepare existing torrents with some of them sharing the same # (torrent name, file name, file size) but different file contents > existing_torrents = existing_torrents( my_torrents=( ('a', ( ('this.jpg', 16380 * 30), ('that.txt', 'text data'), ), {'creation_date': 123}), ('b', ( ('this.jpg', 16380 * 30), ('that.txt', 'text doto'), ), {'creation_date': 456}), ('c', ( ('this.jpg', 16380 * 30), ('that.txt', 'text diti'), ), {'creation_date': 789}), ), ) tests/test_reuse.py:681: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_reuse_copies_file_order_w1/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 1024 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 1024 torf/_torrent.py:642: PieceSizeError _____ test_success_with_multifile_torrent[callback_return_values2-2-False] _____ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 callback_return_values = [None, True], exp_calls = 2, exp_success = False create_dir = functools.partial(._create_dir at 0x7fcee3feaa30>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_success_with_multifile_to0')) create_torrent_file = functools.partial(._create_torrent_file at 0x7fcee3feb480>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_success_with_multifile_to0')) @pytest.mark.parametrize( argnames='callback_return_values, exp_calls, exp_success', argvalues=( ([None, None, None], 3, True), ([None, None, True], 3, False), ([None, True], 2, False), ([True], 1, False), ), ) def test_success_with_multifile_torrent(callback_return_values, exp_calls, exp_success, create_dir, create_torrent_file): content_path = create_dir('content', ('a.jpg', 'some data'), ('b.jpg', 'some other data'), ('c.jpg', 'some more data')) > with create_torrent_file(path=content_path) as torrent_file: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_verify_filesize.py:69: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ tests/conftest.py:418: in _create_torrent_file t = torf.Torrent(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_success_with_multifile_to0/content'), name='content') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _____ test_success_with_multifile_torrent[callback_return_values3-1-False] _____ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 callback_return_values = [True], exp_calls = 1, exp_success = False create_dir = functools.partial(._create_dir at 0x7fcee3feada0>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_success_with_multifile_to1')) create_torrent_file = functools.partial(._create_torrent_file at 0x7fcee3feb740>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_success_with_multifile_to1')) @pytest.mark.parametrize( argnames='callback_return_values, exp_calls, exp_success', argvalues=( ([None, None, None], 3, True), ([None, None, True], 3, False), ([None, True], 2, False), ([True], 1, False), ), ) def test_success_with_multifile_torrent(callback_return_values, exp_calls, exp_success, create_dir, create_torrent_file): content_path = create_dir('content', ('a.jpg', 'some data'), ('b.jpg', 'some other data'), ('c.jpg', 'some more data')) > with create_torrent_file(path=content_path) as torrent_file: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_verify_filesize.py:69: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ tests/conftest.py:418: in _create_torrent_file t = torf.Torrent(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_success_with_multifile_to1/content'), name='content') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _ test_parent_path_of_singlefile_torrent_is_unreadable[callback_return_values3-1] _ [gw5] linux -- Python 3.14.3 /usr/bin/python3.14 callback_return_values = [123, None, None], exp_calls = 1 create_dir = functools.partial(._create_dir at 0x7fcee891fcc0>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_parent_path_of_singlefile0')) create_torrent_file = functools.partial(._create_torrent_file at 0x7fcee891f690>, PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_parent_path_of_singlefile0')) @pytest.mark.parametrize( argnames='callback_return_values, exp_calls', argvalues=( ([None, None, None], 1), (['abort', None, None], 1), ([range(123), None, None], 1), ([123, None, None], 1), ), ) def test_parent_path_of_singlefile_torrent_is_unreadable(callback_return_values, exp_calls, create_dir, create_torrent_file): parent_path = create_dir('parent', ('file.jpg', b'\x00' * 123)) content_file = str(parent_path / 'file.jpg') > with create_torrent_file(path=content_file) as torrent_file: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_verify_filesize.py:436: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ tests/conftest.py:418: in _create_torrent_file t = torf.Torrent(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-0/popen-gw5/test_parent_path_of_singlefile0/parent/file.jpg'), name='file.jpg') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError =========================== short test summary info ============================ FAILED tests/test_generate.py::test_callback_raises_exception[8] - AssertionE... FAILED tests/test_magnet.py::test_from_torrent - torf._errors.PieceSizeError:... FAILED tests/test_magnet.py::test_from_torrent_without_name - torf._errors.Pi... FAILED tests/test_magnet.py::test_from_torrent_without_size - torf._errors.Pi... FAILED tests/test_magnet.py::test_from_torrent_with_single_tracker - torf._er... FAILED tests/test_magnet.py::test_from_torrent_with_multiple_trackers - torf.... FAILED tests/test_partial_size.py::test_partial_size__singlefile__providing_correct_name FAILED tests/test_partial_size.py::test_partial_size__singlefile__providing_wrong_name FAILED tests/test_partial_size.py::test_partial_size__singlefile__providing_path FAILED tests/test_partial_size.py::test_partial_size__multifile__providing_path_to_file FAILED tests/test_partial_size.py::test_partial_size__multifile__providing_path_to_dir FAILED tests/test_partial_size.py::test_partial_size__multifile__providing_unknown_path FAILED tests/test_reuse.py::test_path_argument[a/path-exp_find_torrent_files_args0-None] FAILED tests/test_reuse.py::test_path_argument[path1-exp_find_torrent_files_args1-None] FAILED tests/test_reuse.py::test_path_argument[path2-exp_find_torrent_files_args2-None] FAILED tests/test_reuse.py::test_path_argument[123-exp_find_torrent_files_args3-exp_exception3] FAILED tests/test_reuse.py::test_max_torrent_file_size - torf._errors.PieceSi... FAILED tests/test_reuse.py::test__singlefile__no_exceptions[with_callback] - ... FAILED tests/test_reuse.py::test__singlefile__no_exceptions[without_callback] FAILED tests/test_reuse.py::test__multifile__no_exceptions[with_callback] - t... FAILED tests/test_reuse.py::test__multifile__no_exceptions[without_callback] FAILED tests/test_reuse.py::test_exceptions[with_callback] - torf._errors.Pie... FAILED tests/test_reuse.py::test_exceptions[without_callback] - torf._errors.... FAILED tests/test_reuse.py::test_callback_cancels_when_handling[mismatch] - t... FAILED tests/test_reuse.py::test_callback_cancels_when_handling[unreadable directory] FAILED tests/test_reuse.py::test_callback_cancels_when_handling[unreadable torrent file] FAILED tests/test_reuse.py::test_callback_cancels_when_handling[invalid bencoded data] FAILED tests/test_reuse.py::test_callback_cancels_when_handling[invalid metainfo] FAILED tests/test_reuse.py::test_callback_cancels_when_handling[verification] FAILED tests/test_reuse.py::test_handling_of_nonexisting_path[with_callback] FAILED tests/test_reuse.py::test_handling_of_nonexisting_path[without_callback] FAILED tests/test_reuse.py::test_reuse_with_empty_file_list[with_callback] - ... FAILED tests/test_reuse.py::test_reuse_with_empty_file_list[without_callback] FAILED tests/test_reuse.py::test_reuse_considers_piece_size_min_max - torf._e... FAILED tests/test_reuse.py::test_reuse_copies_file_order[with_callback] - tor... FAILED tests/test_reuse.py::test_reuse_copies_file_order[without_callback] - ... FAILED tests/test_verify_filesize.py::test_success_with_multifile_torrent[callback_return_values2-2-False] FAILED tests/test_verify_filesize.py::test_success_with_multifile_torrent[callback_return_values3-1-False] FAILED tests/test_verify_filesize.py::test_parent_path_of_singlefile_torrent_is_unreadable[callback_return_values3-1] ERROR tests/test_magnet.py::test_setting_info_with_wrong_infohash - torf._err... ERROR tests/test_magnet.py::test_getting_info__unsupported_protocol - torf._e... ERROR tests/test_magnet.py::test_getting_info__xs_succeeds__as_fails - torf._... ERROR tests/test_magnet.py::test_getting_info__xs_fails__as_succeeds - torf._... ERROR tests/test_magnet.py::test_getting_info__xs_times_out - torf._errors.Pi... ERROR tests/test_magnet.py::test_getting_info_from_ws - torf._errors.PieceSiz... ERROR tests/test_magnet.py::test_getting_info_from_tr - torf._errors.PieceSiz... ============ 39 failed, 6685 passed, 3 skipped, 7 errors in 32.13s ============= E: pybuild pybuild:483: test: plugin pyproject failed with: exit code=1: cd /build/reproducible-path/torf-4.3.0/.pybuild/cpython3_3.14/build; python3.14 -m pytest tests I: pybuild base:384: cd /build/reproducible-path/torf-4.3.0/.pybuild/cpython3_3.13/build; python3.13 -m pytest tests ============================= test session starts ============================== platform linux -- Python 3.13.12, pytest-9.0.2, pluggy-1.6.0 rootdir: /build/reproducible-path/torf-4.3.0/.pybuild/cpython3_3.13/build configfile: pytest.ini plugins: mock-3.15.1, typeguard-4.4.4, xdist-3.8.0, pytest_httpserver-1.1.3 created: 9/9 workers 9 workers [6734 items] ........................................................................ [ 1%] ........................................................................ [ 2%] ........................................................................ [ 3%] ........................................................................ [ 4%] ........................................................................ [ 5%] ........................................................................ [ 6%] ........................................................................ [ 7%] ........................................................................ [ 8%] ........................................................................ [ 9%] ........................................................................ [ 10%] ........................................................................ [ 11%] ........................................................................ [ 12%] ........................................................................ [ 13%] ........................................................................ [ 14%] ........................................................................ [ 16%] ........................................................................ [ 17%] ........................................................................ [ 18%] ........................................................................ [ 19%] ........................................................................ [ 20%] ........................................................................ [ 21%] ........................................................................ [ 22%] ........................................................................ [ 23%] ........................................................................ [ 24%] ........................................................................ [ 25%] ........................................................................ [ 26%] ........................................................................ [ 27%] ...................................................F.................... [ 28%] ........................................................................ [ 29%] .F............F.........F............F............F...............E..... [ 31%] .............Es................E..........Ess.............E..........E.. [ 32%] ...E.......F.......F....F.........F.......F..............F.............. [ 33%] .....................................F..........F............F.......... [ 34%] ...F.............F..............F..........F.....................F...... [ 35%] .............F.............F............F..............F...............F [ 36%] ...........F..............F...............F...........F............F.... [ 37%] .........F...........F...........F.............F..................F..... [ 38%] ...............F........................................................ [ 39%] ........................................................................ [ 40%] ........................................................................ [ 41%] ........................................................................ [ 42%] ........................................................................ [ 43%] ........................................................................ [ 44%] ........................................................................ [ 45%] ........................................................................ [ 47%] ........................................................................ [ 48%] ........................................................................ [ 49%] ........................................................................ [ 50%] ........................................................................ [ 51%] ........................................................................ [ 52%] ........................................................................ [ 53%] ........................................................................ [ 54%] ........................................................................ [ 55%] ........................................................................ [ 56%] ........................................................................ [ 57%] ........................................................................ [ 58%] ........................................................................ [ 59%] ........................................................................ [ 60%] ........................................................................ [ 62%] ........................................................................ [ 63%] ........................................................................ [ 64%] ........................................................................ [ 65%] ........................................................................ [ 66%] ........................................................................ [ 67%] ........................................................................ [ 68%] ........................................................................ [ 69%] ........................................................................ [ 70%] ........................................................................ [ 71%] ........................................................................ [ 72%] ........................................................................ [ 73%] ........................................................................ [ 74%] ........................................................................ [ 75%] ........................................................................ [ 76%] ........................................................................ [ 78%] ........................................................................ [ 79%] ........................................................................ [ 80%] ........................................................................ [ 81%] ........................................................................ [ 82%] ........................................................................ [ 83%] ........................................................................ [ 84%] ........................................................................ [ 85%] ........................................................................ [ 86%] ........................................................................ [ 87%] ........................................................................ [ 88%] ........................................................................ [ 89%] ........................................................................ [ 90%] ........................................................................ [ 91%] ........................................................................ [ 93%] ........................................................................ [ 94%] ........................................................................ [ 95%] ........................................................................ [ 96%] ........................................................................ [ 97%] ........................................................................ [ 98%] ........................................................................ [ 99%] ......................F.........F..... [100%] ==================================== ERRORS ==================================== ___________ ERROR at setup of test_setting_info_with_wrong_infohash ____________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 create_torrent = ._create_torrent at 0x7ff42bc609a0> singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) @pytest.fixture def generated_singlefile_torrent(create_torrent, singlefile_content): > torrent = create_torrent(path=singlefile_content.path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/conftest.py:374: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/conftest.py:409: in _create_torrent return torf.Torrent(**{**rand_kwargs, **kwargs}) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ...óvXDóY', source='äe7jnxjmœC ', creation_date=datetime.datetime(1980, 7, 31, 12, 25, 56), created_by='ú²œ¤œzNAíœ7EeïœY') value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError __________ ERROR at setup of test_getting_info__unsupported_protocol ___________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 create_torrent = ._create_torrent at 0x7ff4300ed440> singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) @pytest.fixture def generated_singlefile_torrent(create_torrent, singlefile_content): > torrent = create_torrent(path=singlefile_content.path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/conftest.py:374: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/conftest.py:409: in _create_torrent return torf.Torrent(**{**rand_kwargs, **kwargs}) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ...123/httpseed'], comment='hMNœ 6Gel3obï', source='8 Gw© ó í³', creation_date=datetime.datetime(2016, 10, 9, 23, 33, 12)) value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError __________ ERROR at setup of test_getting_info__xs_succeeds__as_fails __________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 create_torrent = ._create_torrent at 0x7ff4300ee200> singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) @pytest.fixture def generated_singlefile_torrent(create_torrent, singlefile_content): > torrent = create_torrent(path=singlefile_content.path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/conftest.py:374: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/conftest.py:409: in _create_torrent return torf.Torrent(**{**rand_kwargs, **kwargs}) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ'), name='sinģle fíle:JïYR WN93kœ') value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError __________ ERROR at setup of test_getting_info__xs_fails__as_succeeds __________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 create_torrent = ._create_torrent at 0x7ff4300ee2a0> singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) @pytest.fixture def generated_singlefile_torrent(create_torrent, singlefile_content): > torrent = create_torrent(path=singlefile_content.path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/conftest.py:374: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/conftest.py:409: in _create_torrent return torf.Torrent(**{**rand_kwargs, **kwargs}) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ...], comment='íMïG å DPckw40®äyu', source='zsZlí®ä²Vy8å8lDRåæy³', creation_date=datetime.datetime(2013, 7, 7, 3, 43, 16)) value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError ______________ ERROR at setup of test_getting_info__xs_times_out _______________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 create_torrent = ._create_torrent at 0x7ff4300ee700> singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) @pytest.fixture def generated_singlefile_torrent(create_torrent, singlefile_content): > torrent = create_torrent(path=singlefile_content.path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/conftest.py:374: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/conftest.py:409: in _create_torrent return torf.Torrent(**{**rand_kwargs, **kwargs}) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ...'g4L3P® ïïp', source='®Z²xóc¹BXmOúH', creation_date=datetime.datetime(1978, 4, 16, 11, 4, 55), created_by='3f3AhFUBMœ') value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError _________________ ERROR at setup of test_getting_info_from_ws __________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 create_torrent = ._create_torrent at 0x7ff4300ee660> multifile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files1/Multifile torrent:1fH ZM9TúB rKrm', exp_metainfo...nfohash='0e2e012468101efec5b1ac81ded6b8d95591c1fb', infohash_base32=b'BYXACJDICAPP5RNRVSA55VVY3FKZDQP3', size=1181623)) @pytest.fixture def generated_multifile_torrent(create_torrent, multifile_content): > torrent = create_torrent(path=multifile_content.path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/conftest.py:380: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/conftest.py:409: in _create_torrent return torf.Torrent(**{**rand_kwargs, **kwargs}) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files1/Multifile torrent:1fH ZM9TúB rKrm'), nam...', comment='ónQOa9ïxbœFXpEEeV ', creation_date=datetime.datetime(2016, 6, 3, 1, 0, 36), created_by='oéStëXoïœjQbh²go9') value = 4096 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 4096 torf/_torrent.py:642: PieceSizeError _________________ ERROR at setup of test_getting_info_from_tr __________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 create_torrent = ._create_torrent at 0x7ff4300ee480> multifile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files1/Multifile torrent:1fH ZM9TúB rKrm', exp_metainfo...nfohash='0e2e012468101efec5b1ac81ded6b8d95591c1fb', infohash_base32=b'BYXACJDICAPP5RNRVSA55VVY3FKZDQP3', size=1181623)) @pytest.fixture def generated_multifile_torrent(create_torrent, multifile_content): > torrent = create_torrent(path=multifile_content.path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/conftest.py:380: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/conftest.py:409: in _create_torrent return torf.Torrent(**{**rand_kwargs, **kwargs}) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files1/Multifile torrent:1fH ZM9TúB rKrm'), name='Multifile torrent:1fH ZM9TúB rKrm') value = 4096 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 4096 torf/_torrent.py:642: PieceSizeError =================================== FAILURES =================================== ______________________ test_callback_raises_exception[8] _______________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 piece_size = 8 create_file = functools.partial(._create_file at 0x7ff4300ef6a0>, PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_callback_raises_exception0')) forced_piece_size = ._forced_piece_size at 0x7ff4300ec0e0> def test_callback_raises_exception(piece_size, create_file, forced_piece_size): # We need a large file size so we can test that the hashers actually stop # before all pieces are hashed. content_path = create_file('file.jpg', piece_size * 1000) with forced_piece_size(piece_size): with mock.patch('torf._generate.sha1') as sha1_mock: def mock_digest(): return b'\x00' * 20 sha1_mock.return_value.digest.side_effect = mock_digest cb = mock.Mock(side_effect=Exception('Argh!')) t = torf.Torrent(content_path) with pytest.raises(Exception) as e: t.generate(callback=cb) assert str(e.value) == 'Argh!' cb.assert_called_once_with(t, Path(content_path), 1, t.pieces) # The pool of hashers should be stopped before all pieces are hashed > assert sha1_mock.call_count < t.pieces E AssertionError: assert 1000 < 1000 E + where 1000 = .call_count E + and 1000 = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_callback_raises_exception0/file.jpg'), name='file.jpg').pieces tests/test_generate.py:235: AssertionError ------------------------------ Captured log call ------------------------------- reader: Started janitor: Waiting for finalize event janitor: Started hasher1: Started hasher2: Started hasher3: Started hasher4: Started hasher5: Started hasher6: Started hasher7: Started hasher8: Started hasher9: Started hasher10: Started hasher11: Started hasher12: Started reader: Piece queue is now exhausted hasher13: Started hasher3: piece_queue is closed hasher14: piece_queue is closed hasher8: piece_queue is closed hasher4: piece_queue is closed hasher14: Started hasher11: piece_queue is closed hasher9: piece_queue is closed hasher15: piece_queue is closed hasher1: piece_queue is closed hasher15: Started hasher16: piece_queue is closed hasher10: piece_queue is closed hasher12: piece_queue is closed hasher2: piece_queue is closed hasher13: piece_queue is closed hasher7: piece_queue is closed hasher6: piece_queue is closed hasher5: piece_queue is closed hasher16: Started MainThread: Exception while dequeueing piece hashes: Exception('Argh!') MainThread: Reader: Setting stop flag MainThread: Joining MainThread: Joining MainThread: Joining hasher1 MainThread: Joining hasher2 MainThread: Joining hasher3 MainThread: Joining hasher4 MainThread: Joining hasher5 janitor: All hashers terminated janitor: Closing hash queue janitor: Terminating MainThread: Joining hasher6 MainThread: Joining hasher7 MainThread: Joining hasher8 MainThread: Joining hasher9 MainThread: Joining hasher10 MainThread: Joining hasher11 MainThread: Joining hasher12 MainThread: Joining hasher13 MainThread: Joining hasher14 MainThread: Joining hasher15 MainThread: Joining hasher16 MainThread: Joined all hashers MainThread: Joining janitor MainThread: Joined janitor MainThread: hash_queue has 1000 items left ______________________________ test_from_torrent _______________________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) multifile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files1/Multifile torrent:1fH ZM9TúB rKrm', exp_metainfo...nfohash='0e2e012468101efec5b1ac81ded6b8d95591c1fb', infohash_base32=b'BYXACJDICAPP5RNRVSA55VVY3FKZDQP3', size=1181623)) def test_from_torrent(singlefile_content, multifile_content): for content in singlefile_content, multifile_content: > t = torf.Torrent(content.path, trackers=['http://foo', 'http://bar'], webseeds=['http://qux', 'http://quux']) tests/test_magnet.py:300: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ'), name='sinģle fíle:JïYR WN93kœ', trackers=[['http://foo'], ['http://bar']], webseeds=['http://qux', 'http://quux']) value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError ________________________ test_from_torrent_without_name ________________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) multifile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files1/Multifile torrent:1fH ZM9TúB rKrm', exp_metainfo...nfohash='0e2e012468101efec5b1ac81ded6b8d95591c1fb', infohash_base32=b'BYXACJDICAPP5RNRVSA55VVY3FKZDQP3', size=1181623)) def test_from_torrent_without_name(singlefile_content, multifile_content): for content in singlefile_content, multifile_content: > t = torf.Torrent(content.path, trackers=['http://foo', 'http://bar']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_magnet.py:312: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ'), name='sinģle fíle:JïYR WN93kœ', trackers=[['http://foo'], ['http://bar']]) value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError ________________________ test_from_torrent_without_size ________________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) multifile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files1/Multifile torrent:1fH ZM9TúB rKrm', exp_metainfo...nfohash='0e2e012468101efec5b1ac81ded6b8d95591c1fb', infohash_base32=b'BYXACJDICAPP5RNRVSA55VVY3FKZDQP3', size=1181623)) def test_from_torrent_without_size(singlefile_content, multifile_content): for content in singlefile_content, multifile_content: > t = torf.Torrent(content.path, trackers=['http://foo', 'http://bar']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_magnet.py:320: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ'), name='sinģle fíle:JïYR WN93kœ', trackers=[['http://foo'], ['http://bar']]) value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError ____________________ test_from_torrent_with_single_tracker _____________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) multifile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files1/Multifile torrent:1fH ZM9TúB rKrm', exp_metainfo...nfohash='0e2e012468101efec5b1ac81ded6b8d95591c1fb', infohash_base32=b'BYXACJDICAPP5RNRVSA55VVY3FKZDQP3', size=1181623)) def test_from_torrent_with_single_tracker(singlefile_content, multifile_content): for content in singlefile_content, multifile_content: > t = torf.Torrent(content.path, trackers=['http://foo']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_magnet.py:328: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ'), name='sinģle fíle:JïYR WN93kœ', trackers=[['http://foo']]) value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError ___________________ test_from_torrent_with_multiple_trackers ___________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 singlefile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ', exp_m...febf5a5a6e6bac79df2eb4340a63009109fecd5', infohash_base32=b'P7V7LJNG425MPHPS5NBUBJRQBEIJ73GV', size=649406, pieces=40)) multifile_content = namespace(path='/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files1/Multifile torrent:1fH ZM9TúB rKrm', exp_metainfo...nfohash='0e2e012468101efec5b1ac81ded6b8d95591c1fb', infohash_base32=b'BYXACJDICAPP5RNRVSA55VVY3FKZDQP3', size=1181623)) def test_from_torrent_with_multiple_trackers(singlefile_content, multifile_content): for content in singlefile_content, multifile_content: > t = torf.Torrent(content.path, trackers=['http://foo', 'http://bar']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_magnet.py:352: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_files0/:1fH ZM9TúB rKrm/sinģle fíle:JïYR WN93kœ'), name='sinģle fíle:JïYR WN93kœ', trackers=[['http://foo'], ['http://bar']]) value = 2048 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 2048 torf/_torrent.py:642: PieceSizeError ____________ test_partial_size__singlefile__providing_correct_name _____________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 tmp_path = PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_partial_size__singlefile_0') def test_partial_size__singlefile__providing_correct_name(tmp_path): (tmp_path / 'content.jpg').write_text('some data') > t = torf.Torrent(tmp_path / 'content.jpg') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_partial_size.py:8: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_partial_size__singlefile_0/content.jpg'), name='content.jpg') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _____________ test_partial_size__singlefile__providing_wrong_name ______________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 tmp_path = PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_partial_size__singlefile_1') def test_partial_size__singlefile__providing_wrong_name(tmp_path): (tmp_path / 'content.jpg').write_text('some data') > t = torf.Torrent(tmp_path / 'content.jpg') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_partial_size.py:14: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_partial_size__singlefile_1/content.jpg'), name='content.jpg') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ________________ test_partial_size__singlefile__providing_path _________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 tmp_path = PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_partial_size__singlefile_2') def test_partial_size__singlefile__providing_path(tmp_path): (tmp_path / 'content.jpg').write_text('some data') > t = torf.Torrent(tmp_path / 'content.jpg') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_partial_size.py:22: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_partial_size__singlefile_2/content.jpg'), name='content.jpg') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _____________ test_partial_size__multifile__providing_path_to_file _____________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 tmp_path = PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_partial_size__multifile__0') def test_partial_size__multifile__providing_path_to_file(tmp_path): (tmp_path / 'content').mkdir() (tmp_path / 'content' / 'file1.jpg').write_text('some data') (tmp_path / 'content' / 'file2.jpg').write_text('some other data') (tmp_path / 'content' / 'subcontent').mkdir() (tmp_path / 'content' / 'subcontent' / 'file3.jpg').write_text('some more data') > t = torf.Torrent(tmp_path / 'content') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_partial_size.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_partial_size__multifile__0/content'), name='content') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _____________ test_partial_size__multifile__providing_path_to_dir ______________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 tmp_path = PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_partial_size__multifile__1') def test_partial_size__multifile__providing_path_to_dir(tmp_path): (tmp_path / 'content').mkdir() (tmp_path / 'content' / 'file1.jpg').write_text('some data') (tmp_path / 'content' / 'file2.jpg').write_text('some other data') (tmp_path / 'content' / 'subcontent1').mkdir() (tmp_path / 'content' / 'subcontent1' / 'file3.jpg').write_text('some more data') (tmp_path / 'content' / 'subcontent1' / 'file4.jpg').write_text('and even more data') (tmp_path / 'content' / 'subcontent2').mkdir() (tmp_path / 'content' / 'subcontent2' / 'file5.jpg').write_text('some more other data') (tmp_path / 'content' / 'subcontent2' / 'file6.jpg').write_text('and even more other data') > t = torf.Torrent(tmp_path / 'content') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_partial_size.py:53: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_partial_size__multifile__1/content'), name='content') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _____________ test_partial_size__multifile__providing_unknown_path _____________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 tmp_path = PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_partial_size__multifile__2') def test_partial_size__multifile__providing_unknown_path(tmp_path): (tmp_path / 'content').mkdir() (tmp_path / 'content' / 'file1.jpg').write_text('some data') (tmp_path / 'content' / 'file2.jpg').write_text('some other data') (tmp_path / 'content' / 'subcontent').mkdir() (tmp_path / 'content' / 'subcontent' / 'file3.jpg').write_text('some more data') > t = torf.Torrent(tmp_path / 'content') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_partial_size.py:67: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_partial_size__multifile__2/content'), name='content') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _________ test_path_argument[a/path-exp_find_torrent_files_args0-None] _________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 path = 'a/path', exp_find_torrent_files_args = ('a/path',), exp_exception = None create_file = functools.partial(._create_file at 0x7ff42bc47ba0>, PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_path_argument_a_path_exp_0')) mocker = @pytest.mark.parametrize( argnames='path, exp_find_torrent_files_args, exp_exception', argvalues=( ('a/path', ('a/path',), None), (('a/path', 'another/path'), ('a/path', 'another/path'), None), (iter(('a/path', 'another/path')), ('a/path', 'another/path'), None), (123, (), ValueError('Invalid path argument: 123')), ), ) def test_path_argument(path, exp_find_torrent_files_args, exp_exception, create_file, mocker): find_torrent_files_mock = mocker.patch('torf._reuse.find_torrent_files', MagicMock( __iter__=MagicMock(return_value=()), total=0, )) > torrent = torf.Torrent(path=create_file('just_a_file', 'foo')) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:112: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_path_argument_a_path_exp_0/just_a_file'), name='just_a_file') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _________ test_path_argument[path1-exp_find_torrent_files_args1-None] __________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 path = ('a/path', 'another/path') exp_find_torrent_files_args = ('a/path', 'another/path'), exp_exception = None create_file = functools.partial(._create_file at 0x7ff42bc47ec0>, PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_path_argument_path1_exp_f0')) mocker = @pytest.mark.parametrize( argnames='path, exp_find_torrent_files_args, exp_exception', argvalues=( ('a/path', ('a/path',), None), (('a/path', 'another/path'), ('a/path', 'another/path'), None), (iter(('a/path', 'another/path')), ('a/path', 'another/path'), None), (123, (), ValueError('Invalid path argument: 123')), ), ) def test_path_argument(path, exp_find_torrent_files_args, exp_exception, create_file, mocker): find_torrent_files_mock = mocker.patch('torf._reuse.find_torrent_files', MagicMock( __iter__=MagicMock(return_value=()), total=0, )) > torrent = torf.Torrent(path=create_file('just_a_file', 'foo')) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:112: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_path_argument_path1_exp_f0/just_a_file'), name='just_a_file') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _________ test_path_argument[path2-exp_find_torrent_files_args2-None] __________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 path = exp_find_torrent_files_args = ('a/path', 'another/path'), exp_exception = None create_file = functools.partial(._create_file at 0x7ff42bc80f40>, PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_path_argument_path2_exp_f0')) mocker = @pytest.mark.parametrize( argnames='path, exp_find_torrent_files_args, exp_exception', argvalues=( ('a/path', ('a/path',), None), (('a/path', 'another/path'), ('a/path', 'another/path'), None), (iter(('a/path', 'another/path')), ('a/path', 'another/path'), None), (123, (), ValueError('Invalid path argument: 123')), ), ) def test_path_argument(path, exp_find_torrent_files_args, exp_exception, create_file, mocker): find_torrent_files_mock = mocker.patch('torf._reuse.find_torrent_files', MagicMock( __iter__=MagicMock(return_value=()), total=0, )) > torrent = torf.Torrent(path=create_file('just_a_file', 'foo')) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:112: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_path_argument_path2_exp_f0/just_a_file'), name='just_a_file') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _____ test_path_argument[123-exp_find_torrent_files_args3-exp_exception3] ______ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 path = 123, exp_find_torrent_files_args = () exp_exception = ValueError('Invalid path argument: 123') create_file = functools.partial(._create_file at 0x7ff42bc82020>, PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_path_argument_123_exp_fin0')) mocker = @pytest.mark.parametrize( argnames='path, exp_find_torrent_files_args, exp_exception', argvalues=( ('a/path', ('a/path',), None), (('a/path', 'another/path'), ('a/path', 'another/path'), None), (iter(('a/path', 'another/path')), ('a/path', 'another/path'), None), (123, (), ValueError('Invalid path argument: 123')), ), ) def test_path_argument(path, exp_find_torrent_files_args, exp_exception, create_file, mocker): find_torrent_files_mock = mocker.patch('torf._reuse.find_torrent_files', MagicMock( __iter__=MagicMock(return_value=()), total=0, )) > torrent = torf.Torrent(path=create_file('just_a_file', 'foo')) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:112: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_path_argument_123_exp_fin0/just_a_file'), name='just_a_file') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError __________________________ test_max_torrent_file_size __________________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 create_file = functools.partial(._create_file at 0x7ff42bc80540>, PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_max_torrent_file_size0')) existing_torrents = .ExistingTorrents'> mocker = def test_max_torrent_file_size(create_file, existing_torrents, mocker): # Create and prepare existing torrents > existing_torrents = existing_torrents( subpath1=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), subpath2=( ('d', 'hey', {'private': True}), ('e', 'ho', {'comment': 'yo'}), ('f', 'oh', {'comment': 'oy'}), ('g', 'ohh', {'comment': 'oyy'}), ), ) tests/test_reuse.py:128: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_max_torrent_file_size0/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ________________ test__singlefile__no_exceptions[with_callback] ________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 with_callback = True existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test__singlefile__no_exceptions(with_callback, existing_torrents): # Create and prepare existing torrents > existing_torrents = existing_torrents( my_torrents=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ('d', 'arf', {'created_by': 'me!'}), ('e', 'barf', {'source': 'you!'}), ), ) tests/test_reuse.py:164: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test__singlefile__no_exception0/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ______________ test__singlefile__no_exceptions[without_callback] _______________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 with_callback = False existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test__singlefile__no_exceptions(with_callback, existing_torrents): # Create and prepare existing torrents > existing_torrents = existing_torrents( my_torrents=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ('d', 'arf', {'created_by': 'me!'}), ('e', 'barf', {'source': 'you!'}), ), ) tests/test_reuse.py:164: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test__singlefile__no_exception1/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ________________ test__multifile__no_exceptions[with_callback] _________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 with_callback = True existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test__multifile__no_exceptions(with_callback, existing_torrents): # Create and prepare existing torrents with some of them sharing the same # (torrent name, file name, file size) but different file contents > existing_torrents = existing_torrents( torrents1=( ('a', ( ('this.jpg', 16380 * 30), ('that.txt', 'text data'), ), {'creation_date': 123}), ('b', ( ('this.jpg', 16380 * 30), ('that.txt', 'text doto'), ), {'creation_date': 456}), ('c', ( ('this.jpg', 16380 * 30), ('that.txt', 'text diti'), ), {'creation_date': 789}), ), torrents2=( ('a', ( ('this.jpg', 16380 * 30), ('that.txt', 'more text'), ), {'creation_date': 234}), ('b', ( ('this.jpg', 16380 * 30), ('that.txt', 'mare text'), ), {'creation_date': 345}), ('c', ( ('this.jpg', 16380 * 30), ('that.txt', 'mire text'), ), {'creation_date': 456}), ), ) tests/test_reuse.py:221: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test__multifile__no_exceptions0/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 1024 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 1024 torf/_torrent.py:642: PieceSizeError _______________ test__multifile__no_exceptions[without_callback] _______________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 with_callback = False existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test__multifile__no_exceptions(with_callback, existing_torrents): # Create and prepare existing torrents with some of them sharing the same # (torrent name, file name, file size) but different file contents > existing_torrents = existing_torrents( torrents1=( ('a', ( ('this.jpg', 16380 * 30), ('that.txt', 'text data'), ), {'creation_date': 123}), ('b', ( ('this.jpg', 16380 * 30), ('that.txt', 'text doto'), ), {'creation_date': 456}), ('c', ( ('this.jpg', 16380 * 30), ('that.txt', 'text diti'), ), {'creation_date': 789}), ), torrents2=( ('a', ( ('this.jpg', 16380 * 30), ('that.txt', 'more text'), ), {'creation_date': 234}), ('b', ( ('this.jpg', 16380 * 30), ('that.txt', 'mare text'), ), {'creation_date': 345}), ('c', ( ('this.jpg', 16380 * 30), ('that.txt', 'mire text'), ), {'creation_date': 456}), ), ) tests/test_reuse.py:221: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test__multifile__no_exceptions1/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 1024 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 1024 torf/_torrent.py:642: PieceSizeError ________________________ test_exceptions[with_callback] ________________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 with_callback = True existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test_exceptions(with_callback, existing_torrents): # Create and prepare existing torrents > existing_torrents = existing_torrents( readable1=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), unreadable=(), readable2=( ('d', 'hey', {'private': True}), ('e', 'ho', {'comment': 'yo'}), ('f', 'oh', {'comment': 'oy'}), ('g', 'ohh', {'comment': 'oyy'}), ), ) tests/test_reuse.py:306: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_exceptions_with_callback_0/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ______________________ test_exceptions[without_callback] _______________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 with_callback = False existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test_exceptions(with_callback, existing_torrents): # Create and prepare existing torrents > existing_torrents = existing_torrents( readable1=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), unreadable=(), readable2=( ('d', 'hey', {'private': True}), ('e', 'ho', {'comment': 'yo'}), ('f', 'oh', {'comment': 'oy'}), ('g', 'ohh', {'comment': 'oyy'}), ), ) tests/test_reuse.py:306: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_exceptions_without_callba0/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ________________ test_callback_cancels_when_handling[mismatch] _________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 cancel_condition = at 0x7ff4311b7560> exp_callback_calls_count = 1 existing_torrents = .ExistingTorrents'> create_file = functools.partial(._create_file at 0x7ff4300eede0>, PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_callback_cancels_when_han0')) @pytest.mark.parametrize( argnames='cancel_condition, exp_callback_calls_count', argvalues=( # cancel_condition gets torrent_filepath and is_match and returns True # for cancelling, False otherwise. pytest.param( lambda tfp, is_match: is_match is False, 1, id='mismatch', ), pytest.param( lambda tfp, is_match: tfp is None, 4, id='unreadable directory', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'e.torrent', 6, id='unreadable torrent file', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'f.torrent', 7, id='invalid bencoded data', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'g.torrent', 8, id='invalid metainfo', ), pytest.param( lambda tfp, is_match: is_match is None, 9, id='verification', ), ), ) def test_callback_cancels_when_handling(cancel_condition, exp_callback_calls_count, existing_torrents, create_file): # Create and prepare existing torrents > existing_torrents = existing_torrents( readable1=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), # Unreadable directory unreadable=(), readable2=( ('d', 'hey', {'private': True}), ('e', 'ho', {'comment': 'yo'}), ('f', 'oh', {'comment': 'oy'}), ('g', 'ohh', {'comment': 'oyy'}), ('h', 'ohy', {'comment': 'hoyo'}), ), ) tests/test_reuse.py:442: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_callback_cancels_when_han0/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError __________ test_callback_cancels_when_handling[unreadable directory] ___________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 cancel_condition = at 0x7ff4311b74c0> exp_callback_calls_count = 4 existing_torrents = .ExistingTorrents'> create_file = functools.partial(._create_file at 0x7ff42bc44cc0>, PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_callback_cancels_when_han1')) @pytest.mark.parametrize( argnames='cancel_condition, exp_callback_calls_count', argvalues=( # cancel_condition gets torrent_filepath and is_match and returns True # for cancelling, False otherwise. pytest.param( lambda tfp, is_match: is_match is False, 1, id='mismatch', ), pytest.param( lambda tfp, is_match: tfp is None, 4, id='unreadable directory', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'e.torrent', 6, id='unreadable torrent file', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'f.torrent', 7, id='invalid bencoded data', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'g.torrent', 8, id='invalid metainfo', ), pytest.param( lambda tfp, is_match: is_match is None, 9, id='verification', ), ), ) def test_callback_cancels_when_handling(cancel_condition, exp_callback_calls_count, existing_torrents, create_file): # Create and prepare existing torrents > existing_torrents = existing_torrents( readable1=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), # Unreadable directory unreadable=(), readable2=( ('d', 'hey', {'private': True}), ('e', 'ho', {'comment': 'yo'}), ('f', 'oh', {'comment': 'oy'}), ('g', 'ohh', {'comment': 'oyy'}), ('h', 'ohy', {'comment': 'hoyo'}), ), ) tests/test_reuse.py:442: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_callback_cancels_when_han1/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _________ test_callback_cancels_when_handling[unreadable torrent file] _________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 cancel_condition = at 0x7ff4311b7420> exp_callback_calls_count = 6 existing_torrents = .ExistingTorrents'> create_file = functools.partial(._create_file at 0x7ff4300a8b80>, PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_callback_cancels_when_han2')) @pytest.mark.parametrize( argnames='cancel_condition, exp_callback_calls_count', argvalues=( # cancel_condition gets torrent_filepath and is_match and returns True # for cancelling, False otherwise. pytest.param( lambda tfp, is_match: is_match is False, 1, id='mismatch', ), pytest.param( lambda tfp, is_match: tfp is None, 4, id='unreadable directory', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'e.torrent', 6, id='unreadable torrent file', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'f.torrent', 7, id='invalid bencoded data', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'g.torrent', 8, id='invalid metainfo', ), pytest.param( lambda tfp, is_match: is_match is None, 9, id='verification', ), ), ) def test_callback_cancels_when_handling(cancel_condition, exp_callback_calls_count, existing_torrents, create_file): # Create and prepare existing torrents > existing_torrents = existing_torrents( readable1=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), # Unreadable directory unreadable=(), readable2=( ('d', 'hey', {'private': True}), ('e', 'ho', {'comment': 'yo'}), ('f', 'oh', {'comment': 'oy'}), ('g', 'ohh', {'comment': 'oyy'}), ('h', 'ohy', {'comment': 'hoyo'}), ), ) tests/test_reuse.py:442: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_callback_cancels_when_han2/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError __________ test_callback_cancels_when_handling[invalid bencoded data] __________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 cancel_condition = at 0x7ff4311b7380> exp_callback_calls_count = 7 existing_torrents = .ExistingTorrents'> create_file = functools.partial(._create_file at 0x7ff4300aa160>, PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_callback_cancels_when_han3')) @pytest.mark.parametrize( argnames='cancel_condition, exp_callback_calls_count', argvalues=( # cancel_condition gets torrent_filepath and is_match and returns True # for cancelling, False otherwise. pytest.param( lambda tfp, is_match: is_match is False, 1, id='mismatch', ), pytest.param( lambda tfp, is_match: tfp is None, 4, id='unreadable directory', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'e.torrent', 6, id='unreadable torrent file', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'f.torrent', 7, id='invalid bencoded data', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'g.torrent', 8, id='invalid metainfo', ), pytest.param( lambda tfp, is_match: is_match is None, 9, id='verification', ), ), ) def test_callback_cancels_when_handling(cancel_condition, exp_callback_calls_count, existing_torrents, create_file): # Create and prepare existing torrents > existing_torrents = existing_torrents( readable1=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), # Unreadable directory unreadable=(), readable2=( ('d', 'hey', {'private': True}), ('e', 'ho', {'comment': 'yo'}), ('f', 'oh', {'comment': 'oy'}), ('g', 'ohh', {'comment': 'oyy'}), ('h', 'ohy', {'comment': 'hoyo'}), ), ) tests/test_reuse.py:442: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_callback_cancels_when_han3/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ____________ test_callback_cancels_when_handling[invalid metainfo] _____________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 cancel_condition = at 0x7ff4311b72e0> exp_callback_calls_count = 8 existing_torrents = .ExistingTorrents'> create_file = functools.partial(._create_file at 0x7ff4300aaca0>, PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_callback_cancels_when_han4')) @pytest.mark.parametrize( argnames='cancel_condition, exp_callback_calls_count', argvalues=( # cancel_condition gets torrent_filepath and is_match and returns True # for cancelling, False otherwise. pytest.param( lambda tfp, is_match: is_match is False, 1, id='mismatch', ), pytest.param( lambda tfp, is_match: tfp is None, 4, id='unreadable directory', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'e.torrent', 6, id='unreadable torrent file', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'f.torrent', 7, id='invalid bencoded data', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'g.torrent', 8, id='invalid metainfo', ), pytest.param( lambda tfp, is_match: is_match is None, 9, id='verification', ), ), ) def test_callback_cancels_when_handling(cancel_condition, exp_callback_calls_count, existing_torrents, create_file): # Create and prepare existing torrents > existing_torrents = existing_torrents( readable1=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), # Unreadable directory unreadable=(), readable2=( ('d', 'hey', {'private': True}), ('e', 'ho', {'comment': 'yo'}), ('f', 'oh', {'comment': 'oy'}), ('g', 'ohh', {'comment': 'oyy'}), ('h', 'ohy', {'comment': 'hoyo'}), ), ) tests/test_reuse.py:442: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_callback_cancels_when_han4/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ______________ test_callback_cancels_when_handling[verification] _______________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 cancel_condition = at 0x7ff4311b7240> exp_callback_calls_count = 9 existing_torrents = .ExistingTorrents'> create_file = functools.partial(._create_file at 0x7ff4300ee520>, PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_callback_cancels_when_han5')) @pytest.mark.parametrize( argnames='cancel_condition, exp_callback_calls_count', argvalues=( # cancel_condition gets torrent_filepath and is_match and returns True # for cancelling, False otherwise. pytest.param( lambda tfp, is_match: is_match is False, 1, id='mismatch', ), pytest.param( lambda tfp, is_match: tfp is None, 4, id='unreadable directory', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'e.torrent', 6, id='unreadable torrent file', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'f.torrent', 7, id='invalid bencoded data', ), pytest.param( lambda tfp, is_match: os.path.basename(tfp or '') == 'g.torrent', 8, id='invalid metainfo', ), pytest.param( lambda tfp, is_match: is_match is None, 9, id='verification', ), ), ) def test_callback_cancels_when_handling(cancel_condition, exp_callback_calls_count, existing_torrents, create_file): # Create and prepare existing torrents > existing_torrents = existing_torrents( readable1=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), # Unreadable directory unreadable=(), readable2=( ('d', 'hey', {'private': True}), ('e', 'ho', {'comment': 'yo'}), ('f', 'oh', {'comment': 'oy'}), ('g', 'ohh', {'comment': 'oyy'}), ('h', 'ohy', {'comment': 'hoyo'}), ), ) tests/test_reuse.py:442: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_callback_cancels_when_han5/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _______________ test_handling_of_nonexisting_path[with_callback] _______________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 with_callback = True existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test_handling_of_nonexisting_path(with_callback, existing_torrents): # Create and prepare existing torrents > existing_torrents = existing_torrents( my_torrents=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), ) tests/test_reuse.py:537: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_handling_of_nonexisting_p0/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _____________ test_handling_of_nonexisting_path[without_callback] ______________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 with_callback = False existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test_handling_of_nonexisting_path(with_callback, existing_torrents): # Create and prepare existing torrents > existing_torrents = existing_torrents( my_torrents=( ('a', 'foo', {'creation_date': 123}), ('b', 'bar', {'creation_date': 456}), ('c', 'baz', {'creation_date': 789}), ), ) tests/test_reuse.py:537: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_handling_of_nonexisting_p1/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ________________ test_reuse_with_empty_file_list[with_callback] ________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 with_callback = True existing_torrents = .ExistingTorrents'> create_file = functools.partial(._create_file at 0x7ff4300ab920>, PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_reuse_with_empty_file_lis0')) @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test_reuse_with_empty_file_list(with_callback, existing_torrents, create_file): # Create and prepare existing torrents > existing_torrents = existing_torrents( my_torrents=( ('a.jpg', 'foo', {'creation_date': 123}), ('b.txt', 'bar', {'creation_date': 456}), ('c.mp4', 'baz', {'creation_date': 789}), ), ) tests/test_reuse.py:581: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_reuse_with_empty_file_lis0/a.jpg'), name='a.jpg', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ______________ test_reuse_with_empty_file_list[without_callback] _______________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 with_callback = False existing_torrents = .ExistingTorrents'> create_file = functools.partial(._create_file at 0x7ff4300bdda0>, PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_reuse_with_empty_file_lis1')) @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test_reuse_with_empty_file_list(with_callback, existing_torrents, create_file): # Create and prepare existing torrents > existing_torrents = existing_torrents( my_torrents=( ('a.jpg', 'foo', {'creation_date': 123}), ('b.txt', 'bar', {'creation_date': 456}), ('c.mp4', 'baz', {'creation_date': 789}), ), ) tests/test_reuse.py:581: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_reuse_with_empty_file_lis1/a.jpg'), name='a.jpg', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ___________________ test_reuse_considers_piece_size_min_max ____________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 existing_torrents = .ExistingTorrents'> def test_reuse_considers_piece_size_min_max(existing_torrents): # Create and prepare existing torrents > existing_torrents = existing_torrents( small=( ('a.jpg', 'foo', {'piece_size': 1048576 / 2}), ('b.txt', 'bar', {'piece_size': 1048576 * 1}), ('c.mp4', 'baz', {'piece_size': 1048576 / 2}), ), big=( ('a.jpg', 'foo', {'piece_size': 1048576 / 2}), ('b.txt', 'bar', {'piece_size': 1048576 * 4}), ('c.mp4', 'baz', {'piece_size': 1048576 / 2}), ), medium=( ('a.jpg', 'foo', {'piece_size': 1048576 / 2}), ('b.txt', 'bar', {'piece_size': 1048576 * 2}), ('c.mp4', 'baz', {'piece_size': 1048576 / 2}), ), large=( ('a.jpg', 'foo', {'piece_size': 1048576 / 2}), ('b.txt', 'bar', {'piece_size': 1048576 * 8}), ('c.mp4', 'baz', {'piece_size': 1048576 / 2}), ), giant=( ('a.jpg', 'foo', {'piece_size': 1048576 / 2}), ('b.txt', 'bar', {'piece_size': 1048576 * 16}), ('c.mp4', 'baz', {'piece_size': 1048576 / 2}), ), ) tests/test_reuse.py:610: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_reuse_considers_piece_siz0/a.jpg'), name='a.jpg') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError _________________ test_reuse_copies_file_order[with_callback] __________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 with_callback = True existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test_reuse_copies_file_order(with_callback, existing_torrents): # Create and prepare existing torrents with some of them sharing the same # (torrent name, file name, file size) but different file contents > existing_torrents = existing_torrents( my_torrents=( ('a', ( ('this.jpg', 16380 * 30), ('that.txt', 'text data'), ), {'creation_date': 123}), ('b', ( ('this.jpg', 16380 * 30), ('that.txt', 'text doto'), ), {'creation_date': 456}), ('c', ( ('this.jpg', 16380 * 30), ('that.txt', 'text diti'), ), {'creation_date': 789}), ), ) tests/test_reuse.py:681: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_reuse_copies_file_order_w0/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 1024 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 1024 torf/_torrent.py:642: PieceSizeError ________________ test_reuse_copies_file_order[without_callback] ________________ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 with_callback = False existing_torrents = .ExistingTorrents'> @pytest.mark.parametrize('with_callback', (True, False), ids=('with_callback', 'without_callback')) def test_reuse_copies_file_order(with_callback, existing_torrents): # Create and prepare existing torrents with some of them sharing the same # (torrent name, file name, file size) but different file contents > existing_torrents = existing_torrents( my_torrents=( ('a', ( ('this.jpg', 16380 * 30), ('that.txt', 'text data'), ), {'creation_date': 123}), ('b', ( ('this.jpg', 16380 * 30), ('that.txt', 'text doto'), ), {'creation_date': 456}), ('c', ( ('this.jpg', 16380 * 30), ('that.txt', 'text diti'), ), {'creation_date': 789}), ), ) tests/test_reuse.py:681: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_reuse.py:29: in __init__ self._torrents[dirname] = self._create_torrents(dirname, *info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_reuse.py:49: in _create_torrents torrent = torf.Torrent(path=content_path, **torrent_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_reuse_copies_file_order_w1/a'), name='a', creation_date=datetime.datetime(1970, 1, 1, 0, 2, 3)) value = 1024 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 1024 torf/_torrent.py:642: PieceSizeError _____ test_success_with_multifile_torrent[callback_return_values0-3-True] ______ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 callback_return_values = [None, None, None], exp_calls = 3, exp_success = True create_dir = functools.partial(._create_dir at 0x7ff42bfd0a40>, PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_success_with_multifile_to0')) create_torrent_file = functools.partial(._create_torrent_file at 0x7ff42bb7fb00>, PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_success_with_multifile_to0')) @pytest.mark.parametrize( argnames='callback_return_values, exp_calls, exp_success', argvalues=( ([None, None, None], 3, True), ([None, None, True], 3, False), ([None, True], 2, False), ([True], 1, False), ), ) def test_success_with_multifile_torrent(callback_return_values, exp_calls, exp_success, create_dir, create_torrent_file): content_path = create_dir('content', ('a.jpg', 'some data'), ('b.jpg', 'some other data'), ('c.jpg', 'some more data')) > with create_torrent_file(path=content_path) as torrent_file: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_verify_filesize.py:69: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ tests/conftest.py:418: in _create_torrent_file t = torf.Torrent(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_success_with_multifile_to0/content'), name='content') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError ___ test_file_in_multifile_torrent_has_wrong_size[callback_return_values1-2] ___ [gw5] linux -- Python 3.13.12 /usr/bin/python3.13 callback_return_values = [None, True, None], exp_calls = 2 create_dir = functools.partial(._create_dir at 0x7ff42bc68360>, PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_file_in_multifile_torrent0')) create_torrent_file = functools.partial(._create_torrent_file at 0x7ff42bc69e40>, PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_file_in_multifile_torrent0')) @pytest.mark.parametrize( argnames='callback_return_values, exp_calls', argvalues=( ([None, None, True], 3), ([None, True, None], 2), (['yes', None, None], 1), ), ) def test_file_in_multifile_torrent_has_wrong_size(callback_return_values, exp_calls, create_dir, create_torrent_file): content_path = create_dir('content', ('a.jpg', 100), ('b.jpg', 200), ('c.jpg', 300)) > with create_torrent_file(path=content_path) as torrent_file: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/test_verify_filesize.py:240: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ tests/conftest.py:418: in _create_torrent_file t = torf.Torrent(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^ torf/_torrent.py:132: in __init__ self.path = path ^^^^^^^^^ torf/_torrent.py:187: in path self._set_files(filepaths, basepath) torf/_torrent.py:402: in _set_files self.piece_size = None ^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Torrent(path=PosixPath('/tmp/pytest-of-sbuild/pytest-1/popen-gw5/test_file_in_multifile_torrent0/content'), name='content') value = 8 @piece_size.setter def piece_size(self, value): if value is None: if self.size <= 0: self.metainfo['info'].pop('piece length', None) return else: value = self.calculate_piece_size( self.size, min_size=self.piece_size_min, max_size=self.piece_size_max, ) try: piece_length = int(value) except (TypeError, ValueError): raise ValueError(f'piece_size must be int, not {type(value).__name__}: {value!r}') else: if not utils.is_divisible_by_16_kib(piece_length): > raise error.PieceSizeError(piece_length) E torf._errors.PieceSizeError: Piece size must be divisible by 16 KiB: 8 torf/_torrent.py:642: PieceSizeError =========================== short test summary info ============================ FAILED tests/test_generate.py::test_callback_raises_exception[8] - AssertionE... FAILED tests/test_magnet.py::test_from_torrent - torf._errors.PieceSizeError:... FAILED tests/test_magnet.py::test_from_torrent_without_name - torf._errors.Pi... FAILED tests/test_magnet.py::test_from_torrent_without_size - torf._errors.Pi... FAILED tests/test_magnet.py::test_from_torrent_with_single_tracker - torf._er... FAILED tests/test_magnet.py::test_from_torrent_with_multiple_trackers - torf.... FAILED tests/test_partial_size.py::test_partial_size__singlefile__providing_correct_name FAILED tests/test_partial_size.py::test_partial_size__singlefile__providing_wrong_name FAILED tests/test_partial_size.py::test_partial_size__singlefile__providing_path FAILED tests/test_partial_size.py::test_partial_size__multifile__providing_path_to_file FAILED tests/test_partial_size.py::test_partial_size__multifile__providing_path_to_dir FAILED tests/test_partial_size.py::test_partial_size__multifile__providing_unknown_path FAILED tests/test_reuse.py::test_path_argument[a/path-exp_find_torrent_files_args0-None] FAILED tests/test_reuse.py::test_path_argument[path1-exp_find_torrent_files_args1-None] FAILED tests/test_reuse.py::test_path_argument[path2-exp_find_torrent_files_args2-None] FAILED tests/test_reuse.py::test_path_argument[123-exp_find_torrent_files_args3-exp_exception3] FAILED tests/test_reuse.py::test_max_torrent_file_size - torf._errors.PieceSi... FAILED tests/test_reuse.py::test__singlefile__no_exceptions[with_callback] - ... FAILED tests/test_reuse.py::test__singlefile__no_exceptions[without_callback] FAILED tests/test_reuse.py::test__multifile__no_exceptions[with_callback] - t... FAILED tests/test_reuse.py::test__multifile__no_exceptions[without_callback] FAILED tests/test_reuse.py::test_exceptions[with_callback] - torf._errors.Pie... FAILED tests/test_reuse.py::test_exceptions[without_callback] - torf._errors.... FAILED tests/test_reuse.py::test_callback_cancels_when_handling[mismatch] - t... FAILED tests/test_reuse.py::test_callback_cancels_when_handling[unreadable directory] FAILED tests/test_reuse.py::test_callback_cancels_when_handling[unreadable torrent file] FAILED tests/test_reuse.py::test_callback_cancels_when_handling[invalid bencoded data] FAILED tests/test_reuse.py::test_callback_cancels_when_handling[invalid metainfo] FAILED tests/test_reuse.py::test_callback_cancels_when_handling[verification] FAILED tests/test_reuse.py::test_handling_of_nonexisting_path[with_callback] FAILED tests/test_reuse.py::test_handling_of_nonexisting_path[without_callback] FAILED tests/test_reuse.py::test_reuse_with_empty_file_list[with_callback] - ... FAILED tests/test_reuse.py::test_reuse_with_empty_file_list[without_callback] FAILED tests/test_reuse.py::test_reuse_considers_piece_size_min_max - torf._e... FAILED tests/test_reuse.py::test_reuse_copies_file_order[with_callback] - tor... FAILED tests/test_reuse.py::test_reuse_copies_file_order[without_callback] - ... FAILED tests/test_verify_filesize.py::test_success_with_multifile_torrent[callback_return_values0-3-True] FAILED tests/test_verify_filesize.py::test_file_in_multifile_torrent_has_wrong_size[callback_return_values1-2] ERROR tests/test_magnet.py::test_setting_info_with_wrong_infohash - torf._err... ERROR tests/test_magnet.py::test_getting_info__unsupported_protocol - torf._e... ERROR tests/test_magnet.py::test_getting_info__xs_succeeds__as_fails - torf._... ERROR tests/test_magnet.py::test_getting_info__xs_fails__as_succeeds - torf._... ERROR tests/test_magnet.py::test_getting_info__xs_times_out - torf._errors.Pi... ERROR tests/test_magnet.py::test_getting_info_from_ws - torf._errors.PieceSiz... ERROR tests/test_magnet.py::test_getting_info_from_tr - torf._errors.PieceSiz... ============ 38 failed, 6686 passed, 3 skipped, 7 errors in 29.07s ============= E: pybuild pybuild:483: test: plugin pyproject failed with: exit code=1: cd /build/reproducible-path/torf-4.3.0/.pybuild/cpython3_3.13/build; python3.13 -m pytest tests dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.14 3.13" returned exit code 13 make: *** [debian/rules:4: binary-indep] Error 25 dpkg-buildpackage: error: debian/rules binary-indep subprocess failed with exit status 2 -------------------------------------------------------------------------------- Build finished at 2026-02-25T15:54:29Z Finished -------- +------------------------------------------------------------------------------+ | Cleanup Wed, 25 Feb 2026 15:54:29 +0000 | +------------------------------------------------------------------------------+ Purging /build/reproducible-path Not cleaning session: cloned chroot in use E: Build failure (dpkg-buildpackage died with exit 2) +------------------------------------------------------------------------------+ | Summary Wed, 25 Feb 2026 15:54:31 +0000 | +------------------------------------------------------------------------------+ Build Architecture: amd64 Build Type: all Build-Space: 6204 Build-Time: 67 Distribution: unstable Fail-Stage: build Host Architecture: amd64 Install-Time: 4 Job: /srv/rebuilderd/tmp/rebuilderdEZYqmS/inputs/torf_4.3.0-1.dsc Machine Architecture: amd64 Package: torf Package-Time: 78 Source-Version: 4.3.0-1 Space: 6204 Status: attempted Version: 4.3.0-1 -------------------------------------------------------------------------------- Finished at 2026-02-25T15:54:29Z Build needed 00:01:18, 6204k disk space E: Build failure (dpkg-buildpackage died with exit 2) sbuild failed