==> Building on glalie ==> Checking for remote environment... ==> Syncing package to remote host... sending incremental file list created directory packages/b4 ./ .SRCINFO 842 100% 0.00kB/s 0:00:00 842 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=10/12) .nvchecker.toml 108 100% 105.47kB/s 0:00:00 108 100% 105.47kB/s 0:00:00 (xfr#2, to-chk=9/12) LICENSE 646 100% 630.86kB/s 0:00:00 646 100% 630.86kB/s 0:00:00 (xfr#3, to-chk=8/12) PKGBUILD 1,628 100% 1.55MB/s 0:00:00 1,628 100% 1.55MB/s 0:00:00 (xfr#4, to-chk=7/12) REUSE.toml 375 100% 366.21kB/s 0:00:00 375 100% 366.21kB/s 0:00:00 (xfr#5, to-chk=6/12) b4-0.14.3-3.log 605 100% 590.82kB/s 0:00:00 605 100% 590.82kB/s 0:00:00 (xfr#6, to-chk=5/12) LICENSES/ LICENSES/0BSD.txt -> ../LICENSE keys/ keys/pgp/ keys/pgp/DE0E66E32F1FDD0902666B96E63EDCA9329DD07E.asc 23,995 100% 22.88MB/s 0:00:00 23,995 100% 22.88MB/s 0:00:00 (xfr#7, to-chk=0/12) sent 20,505 bytes received 209 bytes 8,285.60 bytes/sec total size is 27,797 speedup is 1.34 ==> Ensuring required PGP keys are present...  -> Checking for DE0E66E32F1FDD0902666B96E63EDCA9329DD07E... ==> Running pkgctl build --arch riscv64 on remote host... ==> WARNING: invalid architecture: riscv64 ==> Updating pacman database cache [?25l:: Synchronizing package databases... core downloading... extra downloading... multilib downloading... [?25h==> Building b4  -> repo: extra  -> arch: riscv64  -> worker: felix-10 ==> Building b4 for [extra] (riscv64) ==> Locking clean chroot...done ]3008;start=3c4be77377b246ddbf298785585b2bf2;user=root;hostname=glalie.felixc.at;machineid=72144a64db6f4720ade5ccd1e3c98c82;bootid=afe9ed55efdd43d68bc839b001f5e949;pid=1519499;comm=systemd-nspawn;container=arch-nspawn-1519499;type=container\]11;?\]2;🔵 Container arch-nspawn-1519499 on glalie.felixc.at\[?25l:: Synchronizing package databases... core downloading... extra downloading... :: Starting full system upgrade... there is nothing to do [?25h[!p]104[?7h]3008;end=3c4be77377b246ddbf298785585b2bf2\==> Building in chroot for [extra] (riscv64)... ==> Synchronizing chroot copy [/var/lib/archbuild/extra-riscv64/root] -> [felix-10]...done ==> Making package: b4 0.14.3-3 (Tue Jan 27 13:59:11 2026) ==> Retrieving sources...  -> Cloning b4 git repo... Cloning into bare repository '/home/felix/packages/b4/b4'... remote: Enumerating objects: 5916, done. remote: Counting objects: 0% (1/712) remote: Counting objects: 1% (8/712) remote: Counting objects: 2% (15/712) remote: Counting objects: 3% (22/712) remote: Counting objects: 4% (29/712) remote: Counting objects: 5% (36/712) remote: Counting objects: 6% (43/712) remote: Counting objects: 7% (50/712) remote: Counting objects: 8% (57/712) remote: Counting objects: 9% (65/712) remote: Counting objects: 10% (72/712) remote: Counting objects: 11% (79/712) remote: Counting objects: 12% (86/712) remote: Counting objects: 13% (93/712) remote: Counting objects: 14% (100/712) remote: Counting objects: 15% (107/712) remote: Counting objects: 16% (114/712) remote: Counting objects: 17% (122/712) remote: Counting objects: 18% (129/712) remote: Counting objects: 19% (136/712) remote: Counting objects: 20% (143/712) remote: Counting objects: 21% (150/712) remote: Counting objects: 22% (157/712) remote: Counting objects: 23% (164/712) remote: Counting objects: 24% (171/712) remote: Counting objects: 25% (178/712) remote: Counting objects: 26% (186/712) remote: Counting objects: 27% (193/712) remote: Counting objects: 28% (200/712) remote: Counting objects: 29% (207/712) remote: Counting objects: 30% (214/712) remote: Counting objects: 31% (221/712) remote: Counting objects: 32% (228/712) remote: Counting objects: 33% (235/712) remote: Counting objects: 34% (243/712) remote: Counting objects: 35% (250/712) remote: Counting objects: 36% (257/712) remote: Counting objects: 37% (264/712) remote: Counting objects: 38% (271/712) remote: Counting objects: 39% (278/712) remote: Counting objects: 40% (285/712) remote: Counting objects: 41% (292/712) remote: Counting objects: 42% (300/712) remote: Counting objects: 43% (307/712) remote: Counting objects: 44% (314/712) remote: Counting objects: 45% (321/712) remote: Counting objects: 46% (328/712) remote: Counting objects: 47% (335/712) remote: Counting objects: 48% (342/712) remote: Counting objects: 49% (349/712) remote: Counting objects: 50% (356/712) remote: Counting objects: 51% (364/712) remote: Counting objects: 52% (371/712) remote: Counting objects: 53% (378/712) remote: Counting objects: 54% (385/712) remote: Counting objects: 55% (392/712) remote: Counting objects: 56% (399/712) remote: Counting objects: 57% (406/712) remote: Counting objects: 58% (413/712) remote: Counting objects: 59% (421/712) remote: Counting objects: 60% (428/712) remote: Counting objects: 61% (435/712) remote: Counting objects: 62% (442/712) remote: Counting objects: 63% (449/712) remote: Counting objects: 64% (456/712) remote: Counting objects: 65% (463/712) remote: Counting objects: 66% (470/712) remote: Counting objects: 67% (478/712) remote: Counting objects: 68% (485/712) remote: Counting objects: 69% (492/712) remote: Counting objects: 70% (499/712) remote: Counting objects: 71% (506/712) remote: Counting objects: 72% (513/712) remote: Counting objects: 73% (520/712) remote: Counting objects: 74% (527/712) remote: Counting objects: 75% (534/712) remote: Counting objects: 76% (542/712) remote: Counting objects: 77% (549/712) remote: Counting objects: 78% (556/712) remote: Counting objects: 79% (563/712) remote: Counting objects: 80% (570/712) remote: Counting objects: 81% (577/712) remote: Counting objects: 82% (584/712) remote: Counting objects: 83% (591/712) remote: Counting objects: 84% (599/712) remote: Counting objects: 85% (606/712) remote: Counting objects: 86% (613/712) remote: Counting objects: 87% (620/712) remote: Counting objects: 88% (627/712) remote: Counting objects: 89% (634/712) remote: Counting objects: 90% (641/712) remote: Counting objects: 91% (648/712) remote: Counting objects: 92% (656/712) remote: Counting objects: 93% (663/712) remote: Counting objects: 94% (670/712) remote: Counting objects: 95% (677/712) remote: Counting objects: 96% (684/712) remote: Counting objects: 97% (691/712) remote: Counting objects: 98% (698/712) remote: Counting objects: 99% (705/712) remote: Counting objects: 100% (712/712) remote: Counting objects: 100% (712/712), done. remote: Compressing objects: 1% (1/78) remote: Compressing objects: 2% (2/78) remote: Compressing objects: 3% (3/78) remote: Compressing objects: 5% (4/78) remote: Compressing objects: 6% (5/78) remote: Compressing objects: 7% (6/78) remote: Compressing objects: 8% (7/78) remote: Compressing objects: 10% (8/78) remote: Compressing objects: 11% (9/78) remote: Compressing objects: 12% (10/78) remote: Compressing objects: 14% (11/78) remote: Compressing objects: 15% (12/78) remote: Compressing objects: 16% (13/78) remote: Compressing objects: 17% (14/78) remote: Compressing objects: 19% (15/78) remote: Compressing objects: 20% (16/78) remote: Compressing objects: 21% (17/78) remote: Compressing objects: 23% (18/78) remote: Compressing objects: 24% (19/78) remote: Compressing objects: 25% (20/78) remote: Compressing objects: 26% (21/78) remote: Compressing objects: 28% (22/78) remote: Compressing objects: 29% (23/78) remote: Compressing objects: 30% (24/78) remote: Compressing objects: 32% (25/78) remote: Compressing objects: 33% (26/78) remote: Compressing objects: 34% (27/78) remote: Compressing objects: 35% (28/78) remote: Compressing objects: 37% (29/78) remote: Compressing objects: 38% (30/78) remote: Compressing objects: 39% (31/78) remote: Compressing objects: 41% (32/78) remote: Compressing objects: 42% (33/78) remote: Compressing objects: 43% (34/78) remote: Compressing objects: 44% (35/78) remote: Compressing objects: 46% (36/78) remote: Compressing objects: 47% (37/78) remote: Compressing objects: 48% (38/78) remote: Compressing objects: 50% (39/78) remote: Compressing objects: 51% (40/78) remote: Compressing objects: 52% (41/78) remote: Compressing objects: 53% (42/78) remote: Compressing objects: 55% (43/78) remote: Compressing objects: 56% (44/78) remote: Compressing objects: 57% (45/78) remote: Compressing objects: 58% (46/78) remote: Compressing objects: 60% (47/78) remote: Compressing objects: 61% (48/78) remote: Compressing objects: 62% (49/78) remote: Compressing objects: 64% (50/78) remote: Compressing objects: 65% (51/78) remote: Compressing objects: 66% (52/78) remote: Compressing objects: 67% (53/78) remote: Compressing objects: 69% (54/78) remote: Compressing objects: 70% (55/78) remote: Compressing objects: 71% (56/78) remote: Compressing objects: 73% (57/78) remote: Compressing objects: 74% (58/78) remote: Compressing objects: 75% (59/78) remote: Compressing objects: 76% (60/78) remote: Compressing objects: 78% (61/78) remote: Compressing objects: 79% (62/78) remote: Compressing objects: 80% (63/78) remote: Compressing objects: 82% (64/78) remote: Compressing objects: 83% (65/78) remote: Compressing objects: 84% (66/78) remote: Compressing objects: 85% (67/78) remote: Compressing objects: 87% (68/78) remote: Compressing objects: 88% (69/78) remote: Compressing objects: 89% (70/78) remote: Compressing objects: 91% (71/78) remote: Compressing objects: 92% (72/78) remote: Compressing objects: 93% (73/78) remote: Compressing objects: 94% (74/78) remote: Compressing objects: 96% (75/78) remote: Compressing objects: 97% (76/78) remote: Compressing objects: 98% (77/78) remote: Compressing objects: 100% (78/78) remote: Compressing objects: 100% (78/78), done. Receiving objects: 0% (1/5916) Receiving objects: 1% (60/5916), 76.01 KiB | 125.00 KiB/s Receiving objects: 2% (119/5916), 76.01 KiB | 125.00 KiB/s Receiving objects: 3% (178/5916), 76.01 KiB | 125.00 KiB/s Receiving objects: 4% (237/5916), 76.01 KiB | 125.00 KiB/s Receiving objects: 5% (296/5916), 76.01 KiB | 125.00 KiB/s Receiving objects: 6% (355/5916), 76.01 KiB | 125.00 KiB/s Receiving objects: 7% (415/5916), 76.01 KiB | 125.00 KiB/s Receiving objects: 8% (474/5916), 76.01 KiB | 125.00 KiB/s Receiving objects: 9% (533/5916), 76.01 KiB | 125.00 KiB/s Receiving objects: 10% (592/5916), 76.01 KiB | 125.00 KiB/s Receiving objects: 11% (651/5916), 76.01 KiB | 125.00 KiB/s Receiving objects: 12% (710/5916), 76.01 KiB | 125.00 KiB/s Receiving objects: 13% (770/5916), 76.01 KiB | 125.00 KiB/s Receiving objects: 14% (829/5916), 76.01 KiB | 125.00 KiB/s Receiving objects: 15% (888/5916), 76.01 KiB | 125.00 KiB/s Receiving objects: 16% (947/5916), 76.01 KiB | 125.00 KiB/s Receiving objects: 17% (1006/5916), 76.01 KiB | 125.00 KiB/s Receiving objects: 18% (1065/5916), 76.01 KiB | 125.00 KiB/s Receiving objects: 18% (1107/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 19% (1125/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 20% (1184/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 21% (1243/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 22% (1302/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 23% (1361/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 24% (1420/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 25% (1479/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 26% (1539/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 27% (1598/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 28% (1657/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 29% (1716/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 30% (1775/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 31% (1834/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 32% (1894/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 33% (1953/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 34% (2012/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 35% (2071/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 36% (2130/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 37% (2189/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 38% (2249/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 39% (2308/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 40% (2367/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 41% (2426/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 42% (2485/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 43% (2544/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 44% (2604/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 45% (2663/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 46% (2722/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 47% (2781/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 48% (2840/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 49% (2899/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 50% (2958/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 51% (3018/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 52% (3077/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 53% (3136/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 54% (3195/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 55% (3254/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 56% (3313/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 57% (3373/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 58% (3432/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 59% (3491/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 60% (3550/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 61% (3609/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 62% (3668/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 63% (3728/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 64% (3787/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 65% (3846/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 66% (3905/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 67% (3964/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 68% (4023/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 69% (4083/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 70% (4142/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 71% (4201/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 72% (4260/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 73% (4319/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 74% (4378/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 75% (4437/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 76% (4497/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 77% (4556/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 78% (4615/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 79% (4674/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 80% (4733/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 81% (4792/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 82% (4852/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 83% (4911/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 84% (4970/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 85% (5029/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 86% (5088/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 87% (5147/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 88% (5207/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 89% (5266/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 90% (5325/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 91% (5384/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 92% (5443/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 93% (5502/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 94% (5562/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 95% (5621/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 96% (5680/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 97% (5739/5916), 412.01 KiB | 380.00 KiB/s Receiving objects: 98% (5798/5916), 1.65 MiB | 1.05 MiB/s Receiving objects: 99% (5857/5916), 1.65 MiB | 1.05 MiB/s remote: Total 5916 (delta 667), reused 637 (delta 634), pack-reused 5204 (from 2) Receiving objects: 100% (5916/5916), 1.65 MiB | 1.05 MiB/s Receiving objects: 100% (5916/5916), 1.72 MiB | 1.05 MiB/s, done. Resolving deltas: 0% (0/4171) Resolving deltas: 1% (42/4171) Resolving deltas: 2% (84/4171) Resolving deltas: 3% (126/4171) Resolving deltas: 4% (167/4171) Resolving deltas: 5% (209/4171) Resolving deltas: 6% (251/4171) Resolving deltas: 7% (295/4171) Resolving deltas: 8% (334/4171) Resolving deltas: 9% (376/4171) Resolving deltas: 10% (419/4171) Resolving deltas: 11% (462/4171) Resolving deltas: 12% (501/4171) Resolving deltas: 13% (543/4171) Resolving deltas: 14% (586/4171) Resolving deltas: 15% (627/4171) Resolving deltas: 16% (670/4171) Resolving deltas: 17% (710/4171) Resolving deltas: 18% (751/4171) Resolving deltas: 19% (795/4171) Resolving deltas: 20% (835/4171) Resolving deltas: 21% (877/4171) Resolving deltas: 22% (918/4171) Resolving deltas: 23% (960/4171) Resolving deltas: 24% (1002/4171) Resolving deltas: 25% (1043/4171) Resolving deltas: 26% (1085/4171) Resolving deltas: 27% (1127/4171) Resolving deltas: 28% (1168/4171) Resolving deltas: 29% (1210/4171) Resolving deltas: 30% (1252/4171) Resolving deltas: 31% (1294/4171) Resolving deltas: 32% (1335/4171) Resolving deltas: 33% (1377/4171) Resolving deltas: 34% (1419/4171) Resolving deltas: 35% (1461/4171) Resolving deltas: 36% (1502/4171) Resolving deltas: 37% (1544/4171) Resolving deltas: 38% (1585/4171) Resolving deltas: 39% (1627/4171) Resolving deltas: 40% (1669/4171) Resolving deltas: 41% (1711/4171) Resolving deltas: 42% (1754/4171) Resolving deltas: 43% (1795/4171) Resolving deltas: 44% (1836/4171) Resolving deltas: 45% (1877/4171) Resolving deltas: 46% (1919/4171) Resolving deltas: 47% (1961/4171) Resolving deltas: 48% (2004/4171) Resolving deltas: 49% (2044/4171) Resolving deltas: 50% (2086/4171) Resolving deltas: 51% (2129/4171) Resolving deltas: 52% (2169/4171) Resolving deltas: 53% (2211/4171) Resolving deltas: 54% (2253/4171) Resolving deltas: 55% (2296/4171) Resolving deltas: 56% (2337/4171) Resolving deltas: 57% (2378/4171) Resolving deltas: 58% (2420/4171) Resolving deltas: 59% (2462/4171) Resolving deltas: 60% (2503/4171) Resolving deltas: 61% (2545/4171) Resolving deltas: 62% (2587/4171) Resolving deltas: 63% (2628/4171) Resolving deltas: 64% (2673/4171) Resolving deltas: 65% (2712/4171) Resolving deltas: 66% (2753/4171) Resolving deltas: 67% (2795/4171) Resolving deltas: 68% (2837/4171) Resolving deltas: 69% (2878/4171) Resolving deltas: 70% (2921/4171) Resolving deltas: 71% (2962/4171) Resolving deltas: 72% (3005/4171) Resolving deltas: 73% (3045/4171) Resolving deltas: 74% (3087/4171) Resolving deltas: 75% (3129/4171) Resolving deltas: 76% (3171/4171) Resolving deltas: 77% (3212/4171) Resolving deltas: 78% (3254/4171) Resolving deltas: 79% (3297/4171) Resolving deltas: 80% (3337/4171) Resolving deltas: 81% (3380/4171) Resolving deltas: 82% (3423/4171) Resolving deltas: 83% (3462/4171) Resolving deltas: 84% (3505/4171) Resolving deltas: 85% (3546/4171) Resolving deltas: 86% (3588/4171) Resolving deltas: 87% (3629/4171) Resolving deltas: 88% (3671/4171) Resolving deltas: 89% (3716/4171) Resolving deltas: 90% (3754/4171) Resolving deltas: 91% (3796/4171) Resolving deltas: 92% (3838/4171) Resolving deltas: 93% (3880/4171) Resolving deltas: 94% (3921/4171) Resolving deltas: 95% (3963/4171) Resolving deltas: 96% (4006/4171) Resolving deltas: 97% (4046/4171) Resolving deltas: 98% (4088/4171) Resolving deltas: 99% (4130/4171) Resolving deltas: 100% (4171/4171) Resolving deltas: 100% (4171/4171), done. ==> Validating source files with sha256sums... b4 ... Passed ==> Verifying source file signatures with gpg... b4 git repo ... Passed ]3008;start=a528691df0e14929b4b0c912d4dfded1;user=root;hostname=glalie.felixc.at;machineid=72144a64db6f4720ade5ccd1e3c98c82;bootid=afe9ed55efdd43d68bc839b001f5e949;pid=1522007;comm=systemd-nspawn;container=arch-nspawn-1522007;type=container\]11;?\]2;🔵 Container arch-nspawn-1522007 on glalie.felixc.at\==> Making package: b4 0.14.3-3 (Tue Jan 27 05:59:52 2026) ==> Checking runtime dependencies... ==> Installing missing dependencies... [?25lresolving dependencies... looking for conflicting packages... Package (17) New Version Net Change Download Size extra/git 2.52.0-2 28.75 MiB extra/libsodium 1.0.20-1 0.44 MiB core/mpdecimal 4.0.1-1 0.31 MiB extra/perl-error 0.17030-3 0.04 MiB extra/perl-mailtools 2.22-3 0.10 MiB extra/perl-timedate 2.33-9 0.08 MiB extra/python-cffi 2.0.0-2 1.39 MiB extra/python-charset-normalizer 3.4.4-2 0.77 MiB extra/python-idna 3.11-2 1.18 MiB extra/python-pycparser 2.23-2 2.97 MiB extra/python-pynacl 1.6.2-1 1.01 MiB 0.12 MiB extra/python-urllib3 2.6.3-1 1.44 MiB extra/zlib-ng 2.2.5-1 0.21 MiB extra/git-filter-repo 2.47.0-3 0.79 MiB 0.17 MiB extra/patatt 0.7.0-1 0.26 MiB 0.05 MiB core/python 3.14.2-2 132.78 MiB extra/python-requests 2.32.5-3 0.60 MiB Total Download Size: 0.35 MiB Total Installed Size: 173.13 MiB :: Proceed with installation? [Y/n] :: Retrieving packages... git-filter-repo-2.47.0-3-any downloading... python-pynacl-1.6.2-1-riscv64 downloading... patatt-0.7.0-1-any downloading... checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing perl-error... installing perl-timedate... installing perl-mailtools... installing zlib-ng... installing git... Optional dependencies for git git-zsh-completion: upstream zsh completion tk: gitk and git gui openssh: ssh transport and crypto man: show help with `git command --help` perl-libwww: git svn perl-term-readkey: git svn and interactive.singlekey setting perl-io-socket-ssl: git send-email TLS support perl-authen-sasl: git send-email TLS support perl-cgi: gitweb (web interface) support python: git svn & git p4 [pending] subversion: git svn org.freedesktop.secrets: keyring credential helper libsecret: libsecret credential helper [installed] less: the default pager for git installing mpdecimal... installing python... Optional dependencies for python python-setuptools: for building Python packages using tooling that is usually bundled with Python python-pip: for installing Python packages using tooling that is usually bundled with Python python-pipx: for installing Python software not packaged on Arch Linux sqlite: for a default database integration [installed] xz: for lzma [installed] tk: for tkinter installing git-filter-repo... installing libsodium... installing python-pycparser... installing python-cffi... Optional dependencies for python-cffi python-setuptools: "limited api" version checking in cffi.setuptools_ext installing python-pynacl... installing patatt... installing python-charset-normalizer... installing python-idna... installing python-urllib3... Optional dependencies for python-urllib3 python-brotli: Brotli support python-brotlicffi: Brotli support python-h2: HTTP/2 support python-pysocks: SOCKS support installing python-requests... Optional dependencies for python-requests python-chardet: alternative character encoding library python-pysocks: SOCKS proxy support :: Running post-transaction hooks... (1/4) Creating system user accounts... Creating group 'git' with GID 969. Creating user 'git' (git daemon user) with UID 969 and GID 969. (2/4) Reloading system manager configuration... Skipped: Current root is not booted. (3/4) Arming ConditionNeedsUpdate... (4/4) Checking for old perl modules... [?25h==> Checking buildtime dependencies... ==> Installing missing dependencies... [?25lresolving dependencies... looking for conflicting packages... Package (19) New Version Net Change Download Size extra/python-autocommand 2.2.2-9 0.08 MiB extra/python-iniconfig 2.1.0-3.1 0.05 MiB extra/python-jaraco.collections 5.1.0-3 0.11 MiB extra/python-jaraco.context 6.0.1-3 0.04 MiB extra/python-jaraco.functools 4.1.0-3 0.07 MiB extra/python-jaraco.text 4.0.0-4 0.08 MiB extra/python-more-itertools 10.8.0-2 0.73 MiB extra/python-packaging 26.0-1 0.89 MiB extra/python-platformdirs 4.5.1-3 0.28 MiB extra/python-pluggy 1.6.0-3.1 0.23 MiB extra/python-pygments 2.19.2-3 15.30 MiB extra/python-pyproject-hooks 1.2.0-6 0.11 MiB extra/python-build 1.4.0-1 0.24 MiB extra/python-docutils 1:0.22.3-2 6.52 MiB extra/python-installer 0.7.0-14 0.20 MiB extra/python-pytest 1:8.4.2-3 4.69 MiB extra/python-setuptools 1:80.9.0-4 8.03 MiB extra/python-shtab 1.8.0-2 0.14 MiB 0.03 MiB extra/python-wheel 0.45.1-4 0.30 MiB Total Download Size: 0.03 MiB Total Installed Size: 38.09 MiB :: Proceed with installation? [Y/n] :: Retrieving packages... python-shtab-1.8.0-2-any downloading... checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing python-packaging... installing python-pyproject-hooks... installing python-build... Optional dependencies for python-build python-pip: to use as the Python package installer (default) python-uv: to use as the Python package installer python-virtualenv: to use virtualenv for build isolation installing python-docutils... Optional dependencies for python-docutils python-myst-parser: to parse input in "Markdown" (CommonMark) format python-pillow: for some image manipulation operations python-pygments: for syntax highlighting of code directives and roles [pending] installing python-installer... installing python-more-itertools... installing python-jaraco.functools... installing python-jaraco.context... installing python-autocommand... installing python-jaraco.text... Optional dependencies for python-jaraco.text python-inflect: for show-newlines script installing python-jaraco.collections... installing python-platformdirs... installing python-wheel... Optional dependencies for python-wheel python-keyring: for wheel.signatures python-xdg: for wheel.signatures python-setuptools: for legacy bdist_wheel subcommand [pending] installing python-setuptools... installing python-shtab... installing python-iniconfig... installing python-pluggy... installing python-pygments... installing python-pytest... :: Running post-transaction hooks... (1/1) Arming ConditionNeedsUpdate... [?25h==> Retrieving sources... ==> WARNING: Skipping all source file integrity checks. ==> Extracting sources...  -> Creating working copy of b4 git repo... Cloning into 'b4'... done. Switched to a new branch 'makepkg' ==> Starting build()... * Getting build dependencies for wheel... /usr/lib/python3.14/site-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). By 2026-Feb-18, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! corresp(dist, value, root_dir) /usr/lib/python3.14/site-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 v2 or later (GPLv2+) See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! dist._finalize_license_expression() /usr/lib/python3.14/site-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 v2 or later (GPLv2+) See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! self._finalize_license_expression() running egg_info creating src/b4.egg-info writing src/b4.egg-info/PKG-INFO writing dependency_links to src/b4.egg-info/dependency_links.txt writing entry points to src/b4.egg-info/entry_points.txt writing requirements to src/b4.egg-info/requires.txt writing top-level names to src/b4.egg-info/top_level.txt writing manifest file 'src/b4.egg-info/SOURCES.txt' reading manifest file 'src/b4.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' no previously-included directories found matching 'src/tests' adding license file 'COPYING' writing manifest file 'src/b4.egg-info/SOURCES.txt' * Building wheel... /usr/lib/python3.14/site-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). By 2026-Feb-18, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! corresp(dist, value, root_dir) /usr/lib/python3.14/site-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 v2 or later (GPLv2+) See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! dist._finalize_license_expression() /usr/lib/python3.14/site-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 v2 or later (GPLv2+) 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/b4 copying src/b4/kr.py -> build/lib/b4 copying src/b4/mbox.py -> build/lib/b4 copying src/b4/pr.py -> build/lib/b4 copying src/b4/__init__.py -> build/lib/b4 copying src/b4/command.py -> build/lib/b4 copying src/b4/diff.py -> build/lib/b4 copying src/b4/ez.py -> build/lib/b4 copying src/b4/ty.py -> build/lib/b4 running egg_info writing src/b4.egg-info/PKG-INFO writing dependency_links to src/b4.egg-info/dependency_links.txt writing entry points to src/b4.egg-info/entry_points.txt writing requirements to src/b4.egg-info/requires.txt writing top-level names to src/b4.egg-info/top_level.txt reading manifest file 'src/b4.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' no previously-included directories found matching 'src/tests' adding license file 'COPYING' writing manifest file 'src/b4.egg-info/SOURCES.txt' creating build/lib/b4/man copying src/b4/man/b4.5.rst -> build/lib/b4/man creating build/lib/b4/templates copying src/b4/templates/shazam-merge-template.example -> build/lib/b4/templates copying src/b4/templates/thanks-am-template.example -> build/lib/b4/templates copying src/b4/templates/thanks-pr-template.example -> build/lib/b4/templates installing to build/bdist.linux-riscv64/wheel running install running install_lib creating build/bdist.linux-riscv64/wheel creating build/bdist.linux-riscv64/wheel/b4 copying build/lib/b4/kr.py -> build/bdist.linux-riscv64/wheel/./b4 copying build/lib/b4/mbox.py -> build/bdist.linux-riscv64/wheel/./b4 copying build/lib/b4/pr.py -> build/bdist.linux-riscv64/wheel/./b4 copying build/lib/b4/__init__.py -> build/bdist.linux-riscv64/wheel/./b4 creating build/bdist.linux-riscv64/wheel/b4/man copying build/lib/b4/man/b4.5.rst -> build/bdist.linux-riscv64/wheel/./b4/man copying build/lib/b4/command.py -> build/bdist.linux-riscv64/wheel/./b4 creating build/bdist.linux-riscv64/wheel/b4/templates copying build/lib/b4/templates/thanks-am-template.example -> build/bdist.linux-riscv64/wheel/./b4/templates copying build/lib/b4/templates/thanks-pr-template.example -> build/bdist.linux-riscv64/wheel/./b4/templates copying build/lib/b4/templates/shazam-merge-template.example -> build/bdist.linux-riscv64/wheel/./b4/templates copying build/lib/b4/diff.py -> build/bdist.linux-riscv64/wheel/./b4 copying build/lib/b4/ez.py -> build/bdist.linux-riscv64/wheel/./b4 copying build/lib/b4/ty.py -> build/bdist.linux-riscv64/wheel/./b4 running install_egg_info Copying src/b4.egg-info to build/bdist.linux-riscv64/wheel/./b4-0.14.3-py3.14.egg-info running install_scripts creating build/bdist.linux-riscv64/wheel/b4-0.14.3.dist-info/WHEEL creating '/build/b4/src/b4/dist/.tmp-64vl42yl/b4-0.14.3-py3-none-any.whl' and adding 'build/bdist.linux-riscv64/wheel' to it adding 'b4/__init__.py' adding 'b4/command.py' adding 'b4/diff.py' adding 'b4/ez.py' adding 'b4/kr.py' adding 'b4/mbox.py' adding 'b4/pr.py' adding 'b4/ty.py' adding 'b4/man/b4.5.rst' adding 'b4/templates/shazam-merge-template.example' adding 'b4/templates/thanks-am-template.example' adding 'b4/templates/thanks-pr-template.example' adding 'b4-0.14.3.dist-info/licenses/COPYING' adding 'b4-0.14.3.dist-info/METADATA' adding 'b4-0.14.3.dist-info/WHEEL' adding 'b4-0.14.3.dist-info/entry_points.txt' adding 'b4-0.14.3.dist-info/top_level.txt' adding 'b4-0.14.3.dist-info/RECORD' removing build/bdist.linux-riscv64/wheel Successfully built b4-0.14.3-py3-none-any.whl ==> Starting check()... ============================= test session starts ============================== platform linux -- Python 3.14.2, pytest-8.4.2, pluggy-1.6.0 rootdir: /build/b4/src/b4 configfile: pyproject.toml collected 83 items test___init__.py ....................................................... [ 66%] ..................... [ 91%] test_ez.py FFFF [ 96%] test_mbox.py ... [100%] =================================== FAILURES =================================== _ test_trailers[trailers-thread-with-followups-None-None-trargs0-compareargs0-trailers-thread-with-followups-b4cfg0] _ sampledir = '/build/b4/src/b4/src/tests/samples' prepdir = '/tmp/pytest-of-builduser/pytest-0/test_trailers_trailers_thread_0/repo' mboxf = 'trailers-thread-with-followups', bundlef = None, rep = None trargs = [], compareargs = ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'] compareout = 'trailers-thread-with-followups' b4cfg = {'shazam-am-flags': '--signoff'} @pytest.mark.parametrize('mboxf, bundlef, rep, trargs, compareargs, compareout, b4cfg', [ ('trailers-thread-with-followups', None, None, [], ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 'trailers-thread-with-followups', {'shazam-am-flags': '--signoff'}), ('trailers-thread-with-cover-followup', None, None, [], ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 'trailers-thread-with-cover-followup', {'shazam-am-flags': '--signoff'}), # Test matching trailer updates by subject when patch-id changes ('trailers-thread-with-followups', None, (b'vivendum', b'addendum'), [], ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 'trailers-thread-with-followups', {'shazam-am-flags': '--signoff'}), # Test that we properly perserve commits with --- in them ('trailers-thread-with-followups', 'trailers-with-tripledash', None, [], ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 'trailers-thread-with-followups-and-tripledash', None), ]) def test_trailers(sampledir, prepdir, mboxf, bundlef, rep, trargs, compareargs, compareout, b4cfg): if b4cfg: b4.MAIN_CONFIG.update(b4cfg) config = b4.get_main_config() mfile = os.path.join(sampledir, f'{mboxf}.mbox') assert os.path.exists(mfile) if bundlef: bfile = os.path.join(sampledir, f'{bundlef}.bundle') assert os.path.exists(bfile) gitargs = ['pull', '--rebase', bfile] out, logstr = b4.git_run_command(None, gitargs) assert out == 0 else: assert config.get('shazam-am-flags') == '--signoff' if rep: with open(mfile, 'rb') as fh: contents = fh.read() contents = contents.replace(rep[0], rep[1]) tfile = os.path.join(prepdir, '.git', 'modified.mbox') with open(tfile, 'wb') as fh: fh.write(contents) else: tfile = mfile b4args = ['--no-stdin', '--no-interactive', '--offline-mode', 'shazam', '--no-add-trailers', '-m', tfile] parser = b4.command.setup_parser() cmdargs = parser.parse_args(b4args) with pytest.raises(SystemExit) as e: b4.mbox.main(cmdargs) assert e.type == SystemExit assert e.value.code == 0 cfile = os.path.join(sampledir, f'{compareout}.verify') assert os.path.exists(cfile) parser = b4.command.setup_parser() b4args = ['--no-stdin', '--no-interactive', '--offline-mode', 'trailers', '--update', '-m', mfile] + trargs cmdargs = parser.parse_args(b4args) > b4.ez.cmd_trailers(cmdargs) /build/b4/src/b4/src/tests/test_ez.py:73: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /build/b4/src/b4/src/b4/ez.py:2931: in cmd_trailers update_trailers(cmdargs) /build/b4/src/b4/src/b4/ez.py:1288: in update_trailers run_frf(frf) /build/b4/src/b4/src/b4/ez.py:125: in run_frf frf.run() /usr/lib/python3.14/site-packages/git_filter_repo.py:4878: in run self._run_sanity_checks() /usr/lib/python3.14/site-packages/git_filter_repo.py:3279: in _run_sanity_checks self._config_settings = GitUtils.get_config_settings(target_working_dir) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ repo_working_dir = b'.' @staticmethod def get_config_settings(repo_working_dir): output = '' try: output = subproc.check_output('git config --list'.split(), cwd=repo_working_dir) except subprocess.CalledProcessError as e: # pragma: no cover raise SystemExit('fatal: {}'.format(e)) # FIXME: Ignores multi-valued keys, just let them overwrite for now > return dict(line.split(b'=', maxsplit=1) for line in output.strip().split(b"\n")) E ValueError: dictionary update sequence element #12 has length 1; 2 is required /usr/lib/python3.14/site-packages/git_filter_repo.py:1695: ValueError ------------------------------ Captured log call ------------------------------- CRITICAL b4:mbox.py:165 Total patches: 4 CRITICAL b4:mbox.py:200 --- CRITICAL b4:ez.py:1267 --- _ test_trailers[trailers-thread-with-cover-followup-None-None-trargs1-compareargs1-trailers-thread-with-cover-followup-b4cfg1] _ sampledir = '/build/b4/src/b4/src/tests/samples' prepdir = '/tmp/pytest-of-builduser/pytest-0/test_trailers_trailers_thread_1/repo' mboxf = 'trailers-thread-with-cover-followup', bundlef = None, rep = None trargs = [], compareargs = ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'] compareout = 'trailers-thread-with-cover-followup' b4cfg = {'shazam-am-flags': '--signoff'} @pytest.mark.parametrize('mboxf, bundlef, rep, trargs, compareargs, compareout, b4cfg', [ ('trailers-thread-with-followups', None, None, [], ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 'trailers-thread-with-followups', {'shazam-am-flags': '--signoff'}), ('trailers-thread-with-cover-followup', None, None, [], ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 'trailers-thread-with-cover-followup', {'shazam-am-flags': '--signoff'}), # Test matching trailer updates by subject when patch-id changes ('trailers-thread-with-followups', None, (b'vivendum', b'addendum'), [], ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 'trailers-thread-with-followups', {'shazam-am-flags': '--signoff'}), # Test that we properly perserve commits with --- in them ('trailers-thread-with-followups', 'trailers-with-tripledash', None, [], ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 'trailers-thread-with-followups-and-tripledash', None), ]) def test_trailers(sampledir, prepdir, mboxf, bundlef, rep, trargs, compareargs, compareout, b4cfg): if b4cfg: b4.MAIN_CONFIG.update(b4cfg) config = b4.get_main_config() mfile = os.path.join(sampledir, f'{mboxf}.mbox') assert os.path.exists(mfile) if bundlef: bfile = os.path.join(sampledir, f'{bundlef}.bundle') assert os.path.exists(bfile) gitargs = ['pull', '--rebase', bfile] out, logstr = b4.git_run_command(None, gitargs) assert out == 0 else: assert config.get('shazam-am-flags') == '--signoff' if rep: with open(mfile, 'rb') as fh: contents = fh.read() contents = contents.replace(rep[0], rep[1]) tfile = os.path.join(prepdir, '.git', 'modified.mbox') with open(tfile, 'wb') as fh: fh.write(contents) else: tfile = mfile b4args = ['--no-stdin', '--no-interactive', '--offline-mode', 'shazam', '--no-add-trailers', '-m', tfile] parser = b4.command.setup_parser() cmdargs = parser.parse_args(b4args) with pytest.raises(SystemExit) as e: b4.mbox.main(cmdargs) assert e.type == SystemExit assert e.value.code == 0 cfile = os.path.join(sampledir, f'{compareout}.verify') assert os.path.exists(cfile) parser = b4.command.setup_parser() b4args = ['--no-stdin', '--no-interactive', '--offline-mode', 'trailers', '--update', '-m', mfile] + trargs cmdargs = parser.parse_args(b4args) > b4.ez.cmd_trailers(cmdargs) /build/b4/src/b4/src/tests/test_ez.py:73: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /build/b4/src/b4/src/b4/ez.py:2931: in cmd_trailers update_trailers(cmdargs) /build/b4/src/b4/src/b4/ez.py:1288: in update_trailers run_frf(frf) /build/b4/src/b4/src/b4/ez.py:125: in run_frf frf.run() /usr/lib/python3.14/site-packages/git_filter_repo.py:4878: in run self._run_sanity_checks() /usr/lib/python3.14/site-packages/git_filter_repo.py:3279: in _run_sanity_checks self._config_settings = GitUtils.get_config_settings(target_working_dir) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ repo_working_dir = b'.' @staticmethod def get_config_settings(repo_working_dir): output = '' try: output = subproc.check_output('git config --list'.split(), cwd=repo_working_dir) except subprocess.CalledProcessError as e: # pragma: no cover raise SystemExit('fatal: {}'.format(e)) # FIXME: Ignores multi-valued keys, just let them overwrite for now > return dict(line.split(b'=', maxsplit=1) for line in output.strip().split(b"\n")) E ValueError: dictionary update sequence element #12 has length 1; 2 is required /usr/lib/python3.14/site-packages/git_filter_repo.py:1695: ValueError ------------------------------ Captured log call ------------------------------- CRITICAL b4:mbox.py:165 Total patches: 4 CRITICAL b4:mbox.py:200 --- CRITICAL b4:ez.py:1267 --- _ test_trailers[trailers-thread-with-followups-None-rep2-trargs2-compareargs2-trailers-thread-with-followups-b4cfg2] _ sampledir = '/build/b4/src/b4/src/tests/samples' prepdir = '/tmp/pytest-of-builduser/pytest-0/test_trailers_trailers_thread_2/repo' mboxf = 'trailers-thread-with-followups', bundlef = None rep = (b'vivendum', b'addendum'), trargs = [] compareargs = ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'] compareout = 'trailers-thread-with-followups' b4cfg = {'shazam-am-flags': '--signoff'} @pytest.mark.parametrize('mboxf, bundlef, rep, trargs, compareargs, compareout, b4cfg', [ ('trailers-thread-with-followups', None, None, [], ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 'trailers-thread-with-followups', {'shazam-am-flags': '--signoff'}), ('trailers-thread-with-cover-followup', None, None, [], ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 'trailers-thread-with-cover-followup', {'shazam-am-flags': '--signoff'}), # Test matching trailer updates by subject when patch-id changes ('trailers-thread-with-followups', None, (b'vivendum', b'addendum'), [], ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 'trailers-thread-with-followups', {'shazam-am-flags': '--signoff'}), # Test that we properly perserve commits with --- in them ('trailers-thread-with-followups', 'trailers-with-tripledash', None, [], ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 'trailers-thread-with-followups-and-tripledash', None), ]) def test_trailers(sampledir, prepdir, mboxf, bundlef, rep, trargs, compareargs, compareout, b4cfg): if b4cfg: b4.MAIN_CONFIG.update(b4cfg) config = b4.get_main_config() mfile = os.path.join(sampledir, f'{mboxf}.mbox') assert os.path.exists(mfile) if bundlef: bfile = os.path.join(sampledir, f'{bundlef}.bundle') assert os.path.exists(bfile) gitargs = ['pull', '--rebase', bfile] out, logstr = b4.git_run_command(None, gitargs) assert out == 0 else: assert config.get('shazam-am-flags') == '--signoff' if rep: with open(mfile, 'rb') as fh: contents = fh.read() contents = contents.replace(rep[0], rep[1]) tfile = os.path.join(prepdir, '.git', 'modified.mbox') with open(tfile, 'wb') as fh: fh.write(contents) else: tfile = mfile b4args = ['--no-stdin', '--no-interactive', '--offline-mode', 'shazam', '--no-add-trailers', '-m', tfile] parser = b4.command.setup_parser() cmdargs = parser.parse_args(b4args) with pytest.raises(SystemExit) as e: b4.mbox.main(cmdargs) assert e.type == SystemExit assert e.value.code == 0 cfile = os.path.join(sampledir, f'{compareout}.verify') assert os.path.exists(cfile) parser = b4.command.setup_parser() b4args = ['--no-stdin', '--no-interactive', '--offline-mode', 'trailers', '--update', '-m', mfile] + trargs cmdargs = parser.parse_args(b4args) > b4.ez.cmd_trailers(cmdargs) /build/b4/src/b4/src/tests/test_ez.py:73: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /build/b4/src/b4/src/b4/ez.py:2931: in cmd_trailers update_trailers(cmdargs) /build/b4/src/b4/src/b4/ez.py:1288: in update_trailers run_frf(frf) /build/b4/src/b4/src/b4/ez.py:125: in run_frf frf.run() /usr/lib/python3.14/site-packages/git_filter_repo.py:4878: in run self._run_sanity_checks() /usr/lib/python3.14/site-packages/git_filter_repo.py:3279: in _run_sanity_checks self._config_settings = GitUtils.get_config_settings(target_working_dir) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ repo_working_dir = b'.' @staticmethod def get_config_settings(repo_working_dir): output = '' try: output = subproc.check_output('git config --list'.split(), cwd=repo_working_dir) except subprocess.CalledProcessError as e: # pragma: no cover raise SystemExit('fatal: {}'.format(e)) # FIXME: Ignores multi-valued keys, just let them overwrite for now > return dict(line.split(b'=', maxsplit=1) for line in output.strip().split(b"\n")) E ValueError: dictionary update sequence element #12 has length 1; 2 is required /usr/lib/python3.14/site-packages/git_filter_repo.py:1695: ValueError ------------------------------ Captured log call ------------------------------- CRITICAL b4:mbox.py:165 Total patches: 4 CRITICAL b4:mbox.py:200 --- CRITICAL b4:ez.py:1267 --- _ test_trailers[trailers-thread-with-followups-trailers-with-tripledash-None-trargs3-compareargs3-trailers-thread-with-followups-and-tripledash-None] _ sampledir = '/build/b4/src/b4/src/tests/samples' prepdir = '/tmp/pytest-of-builduser/pytest-0/test_trailers_trailers_thread_3/repo' mboxf = 'trailers-thread-with-followups', bundlef = 'trailers-with-tripledash' rep = None, trargs = [] compareargs = ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'] compareout = 'trailers-thread-with-followups-and-tripledash', b4cfg = None @pytest.mark.parametrize('mboxf, bundlef, rep, trargs, compareargs, compareout, b4cfg', [ ('trailers-thread-with-followups', None, None, [], ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 'trailers-thread-with-followups', {'shazam-am-flags': '--signoff'}), ('trailers-thread-with-cover-followup', None, None, [], ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 'trailers-thread-with-cover-followup', {'shazam-am-flags': '--signoff'}), # Test matching trailer updates by subject when patch-id changes ('trailers-thread-with-followups', None, (b'vivendum', b'addendum'), [], ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 'trailers-thread-with-followups', {'shazam-am-flags': '--signoff'}), # Test that we properly perserve commits with --- in them ('trailers-thread-with-followups', 'trailers-with-tripledash', None, [], ['log', '--format=%ae%n%s%n%b---', 'HEAD~4..'], 'trailers-thread-with-followups-and-tripledash', None), ]) def test_trailers(sampledir, prepdir, mboxf, bundlef, rep, trargs, compareargs, compareout, b4cfg): if b4cfg: b4.MAIN_CONFIG.update(b4cfg) config = b4.get_main_config() mfile = os.path.join(sampledir, f'{mboxf}.mbox') assert os.path.exists(mfile) if bundlef: bfile = os.path.join(sampledir, f'{bundlef}.bundle') assert os.path.exists(bfile) gitargs = ['pull', '--rebase', bfile] out, logstr = b4.git_run_command(None, gitargs) assert out == 0 else: assert config.get('shazam-am-flags') == '--signoff' if rep: with open(mfile, 'rb') as fh: contents = fh.read() contents = contents.replace(rep[0], rep[1]) tfile = os.path.join(prepdir, '.git', 'modified.mbox') with open(tfile, 'wb') as fh: fh.write(contents) else: tfile = mfile b4args = ['--no-stdin', '--no-interactive', '--offline-mode', 'shazam', '--no-add-trailers', '-m', tfile] parser = b4.command.setup_parser() cmdargs = parser.parse_args(b4args) with pytest.raises(SystemExit) as e: b4.mbox.main(cmdargs) assert e.type == SystemExit assert e.value.code == 0 cfile = os.path.join(sampledir, f'{compareout}.verify') assert os.path.exists(cfile) parser = b4.command.setup_parser() b4args = ['--no-stdin', '--no-interactive', '--offline-mode', 'trailers', '--update', '-m', mfile] + trargs cmdargs = parser.parse_args(b4args) > b4.ez.cmd_trailers(cmdargs) /build/b4/src/b4/src/tests/test_ez.py:73: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /build/b4/src/b4/src/b4/ez.py:2931: in cmd_trailers update_trailers(cmdargs) /build/b4/src/b4/src/b4/ez.py:1288: in update_trailers run_frf(frf) /build/b4/src/b4/src/b4/ez.py:125: in run_frf frf.run() /usr/lib/python3.14/site-packages/git_filter_repo.py:4878: in run self._run_sanity_checks() /usr/lib/python3.14/site-packages/git_filter_repo.py:3279: in _run_sanity_checks self._config_settings = GitUtils.get_config_settings(target_working_dir) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ repo_working_dir = b'.' @staticmethod def get_config_settings(repo_working_dir): output = '' try: output = subproc.check_output('git config --list'.split(), cwd=repo_working_dir) except subprocess.CalledProcessError as e: # pragma: no cover raise SystemExit('fatal: {}'.format(e)) # FIXME: Ignores multi-valued keys, just let them overwrite for now > return dict(line.split(b'=', maxsplit=1) for line in output.strip().split(b"\n")) E ValueError: dictionary update sequence element #12 has length 1; 2 is required /usr/lib/python3.14/site-packages/git_filter_repo.py:1695: ValueError ------------------------------ Captured log call ------------------------------- CRITICAL b4:ez.py:1267 --- =========================== short test summary info ============================ FAILED test_ez.py::test_trailers[trailers-thread-with-followups-None-None-trargs0-compareargs0-trailers-thread-with-followups-b4cfg0] FAILED test_ez.py::test_trailers[trailers-thread-with-cover-followup-None-None-trargs1-compareargs1-trailers-thread-with-cover-followup-b4cfg1] FAILED test_ez.py::test_trailers[trailers-thread-with-followups-None-rep2-trargs2-compareargs2-trailers-thread-with-followups-b4cfg2] FAILED test_ez.py::test_trailers[trailers-thread-with-followups-trailers-with-tripledash-None-trargs3-compareargs3-trailers-thread-with-followups-and-tripledash-None] ======================== 4 failed, 79 passed in 27.08s ========================= ==> ERROR: A failure occurred in check().  Aborting... [!p]104[?7h]3008;end=a528691df0e14929b4b0c912d4dfded1\==> ERROR: Build failed, check /var/lib/archbuild/extra-riscv64/felix-10/build [?25h[?25h[?25hreceiving incremental file list b4-0.14.3-3-riscv64-build.log b4-0.14.3-3-riscv64-check.log sent 62 bytes received 3,652 bytes 1,485.60 bytes/sec total size is 29,424 speedup is 7.92