0s autopkgtest [09:33:40]: starting date and time: 2024-11-26 09:33:40+0000 0s autopkgtest [09:33:40]: git checkout: 6f3be7a8 Fix armhf LXD image generation for plucky 0s autopkgtest [09:33:40]: host juju-7f2275-prod-proposed-migration-environment-15; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.m5xoe_m9/out --timeout-copy=6000 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --apt-pocket=proposed=src:python-pygit2 --apt-upgrade git-ubuntu --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 --env=ADT_TEST_TRIGGERS=python-pygit2/1.16.0-2 -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest-s390x --security-groups autopkgtest-juju-7f2275-prod-proposed-migration-environment-15@bos03-s390x-5.secgroup --name adt-plucky-s390x-git-ubuntu-20241126-093340-juju-7f2275-prod-proposed-migration-environment-15-74da48d6-3adf-462c-ba98-e5394166ce08 --image adt/ubuntu-plucky-s390x-server --keyname testbed-juju-7f2275-prod-proposed-migration-environment-15 --net-id=net_prod-proposed-migration-s390x -e TERM=linux -e ''"'"'http_proxy=http://squid.internal:3128'"'"'' -e ''"'"'https_proxy=http://squid.internal:3128'"'"'' -e ''"'"'no_proxy=127.0.0.1,127.0.1.1,login.ubuntu.com,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,keyserver.ubuntu.com,launchpadlibrarian.net,launchpadcontent.net,launchpad.net,10.24.0.0/24,keystone.ps5.canonical.com,objectstorage.prodstack5.canonical.com'"'"'' --mirror=http://ftpmaster.internal/ubuntu/ 103s autopkgtest [09:35:23]: testbed dpkg architecture: s390x 103s autopkgtest [09:35:23]: testbed apt version: 2.9.8 103s autopkgtest [09:35:23]: @@@@@@@@@@@@@@@@@@@@ test bed setup 104s Get:1 http://ftpmaster.internal/ubuntu plucky-proposed InRelease [73.9 kB] 104s Get:2 http://ftpmaster.internal/ubuntu plucky-proposed/main Sources [58.7 kB] 104s Get:3 http://ftpmaster.internal/ubuntu plucky-proposed/restricted Sources [9708 B] 104s Get:4 http://ftpmaster.internal/ubuntu plucky-proposed/universe Sources [811 kB] 104s Get:5 http://ftpmaster.internal/ubuntu plucky-proposed/multiverse Sources [14.2 kB] 104s Get:6 http://ftpmaster.internal/ubuntu plucky-proposed/main s390x Packages [72.8 kB] 104s Get:7 http://ftpmaster.internal/ubuntu plucky-proposed/restricted s390x Packages [928 B] 104s Get:8 http://ftpmaster.internal/ubuntu plucky-proposed/universe s390x Packages [622 kB] 104s Get:9 http://ftpmaster.internal/ubuntu plucky-proposed/multiverse s390x Packages [6612 B] 104s Fetched 1669 kB in 1s (2061 kB/s) 104s Reading package lists... 106s Reading package lists... 107s Building dependency tree... 107s Reading state information... 107s Calculating upgrade... 107s The following package was automatically installed and is no longer required: 107s libsgutils2-1.46-2 107s Use 'sudo apt autoremove' to remove it. 107s The following NEW packages will be installed: 107s libsgutils2-1.48 107s The following packages will be upgraded: 107s apt apt-utils bash bpftrace curl debconf debconf-i18n distro-info 107s dracut-install gir1.2-girepository-2.0 gir1.2-glib-2.0 hostname init 107s init-system-helpers libapt-pkg6.0t64 libaudit-common libaudit1 107s libcurl3t64-gnutls libcurl4t64 libgirepository-1.0-1 libglib2.0-0t64 107s libglib2.0-data liblzma5 libpam-modules libpam-modules-bin libpam-runtime 107s libpam0g libplymouth5 libpolkit-agent-1-0 libpolkit-gobject-1-0 libselinux1 107s libsemanage-common libsemanage2 linux-base lto-disabled-list lxd-installer 107s openssh-client openssh-server openssh-sftp-server pinentry-curses plymouth 107s plymouth-theme-ubuntu-text python-apt-common python3-apt python3-blinker 107s python3-debconf python3-jsonschema-specifications python3-rpds-py 107s python3-yaml sg3-utils sg3-utils-udev vim-common vim-tiny xxd xz-utils 107s 55 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. 107s Need to get 14.8 MB of archives. 107s After this operation, 2349 kB of additional disk space will be used. 107s Get:1 http://ftpmaster.internal/ubuntu plucky/main s390x bash s390x 5.2.32-1ubuntu2 [845 kB] 107s Get:2 http://ftpmaster.internal/ubuntu plucky/main s390x hostname s390x 3.25 [11.2 kB] 107s Get:3 http://ftpmaster.internal/ubuntu plucky/main s390x init-system-helpers all 1.67ubuntu1 [39.1 kB] 107s Get:4 http://ftpmaster.internal/ubuntu plucky/main s390x liblzma5 s390x 5.6.3-1 [145 kB] 107s Get:5 http://ftpmaster.internal/ubuntu plucky/main s390x libapt-pkg6.0t64 s390x 2.9.14ubuntu1 [1091 kB] 107s Get:6 http://ftpmaster.internal/ubuntu plucky/main s390x apt s390x 2.9.14ubuntu1 [1375 kB] 108s Get:7 http://ftpmaster.internal/ubuntu plucky/main s390x apt-utils s390x 2.9.14ubuntu1 [215 kB] 108s Get:8 http://ftpmaster.internal/ubuntu plucky/main s390x libaudit-common all 1:4.0.2-2ubuntu1 [6578 B] 108s Get:9 http://ftpmaster.internal/ubuntu plucky/main s390x libaudit1 s390x 1:4.0.2-2ubuntu1 [52.5 kB] 108s Get:10 http://ftpmaster.internal/ubuntu plucky/main s390x debconf-i18n all 1.5.87ubuntu1 [204 kB] 108s Get:11 http://ftpmaster.internal/ubuntu plucky/main s390x python3-debconf all 1.5.87ubuntu1 [4156 B] 108s Get:12 http://ftpmaster.internal/ubuntu plucky/main s390x debconf all 1.5.87ubuntu1 [124 kB] 108s Get:13 http://ftpmaster.internal/ubuntu plucky/main s390x libpam0g s390x 1.5.3-7ubuntu4 [70.0 kB] 108s Get:14 http://ftpmaster.internal/ubuntu plucky/main s390x libselinux1 s390x 3.7-3ubuntu1 [85.2 kB] 108s Get:15 http://ftpmaster.internal/ubuntu plucky/main s390x libpam-modules-bin s390x 1.5.3-7ubuntu4 [56.2 kB] 108s Get:16 http://ftpmaster.internal/ubuntu plucky/main s390x libpam-modules s390x 1.5.3-7ubuntu4 [294 kB] 108s Get:17 http://ftpmaster.internal/ubuntu plucky/main s390x init s390x 1.67ubuntu1 [6428 B] 108s Get:18 http://ftpmaster.internal/ubuntu plucky/main s390x openssh-sftp-server s390x 1:9.9p1-3ubuntu2 [38.2 kB] 108s Get:19 http://ftpmaster.internal/ubuntu plucky/main s390x openssh-server s390x 1:9.9p1-3ubuntu2 [552 kB] 108s Get:20 http://ftpmaster.internal/ubuntu plucky/main s390x openssh-client s390x 1:9.9p1-3ubuntu2 [955 kB] 108s Get:21 http://ftpmaster.internal/ubuntu plucky/main s390x libpam-runtime all 1.5.3-7ubuntu4 [40.8 kB] 108s Get:22 http://ftpmaster.internal/ubuntu plucky/main s390x libsemanage-common all 3.7-2build1 [7186 B] 108s Get:23 http://ftpmaster.internal/ubuntu plucky/main s390x libsemanage2 s390x 3.7-2build1 [97.1 kB] 108s Get:24 http://ftpmaster.internal/ubuntu plucky/main s390x distro-info s390x 1.12 [20.0 kB] 108s Get:25 http://ftpmaster.internal/ubuntu plucky/main s390x gir1.2-girepository-2.0 s390x 1.82.0-2 [25.0 kB] 108s Get:26 http://ftpmaster.internal/ubuntu plucky/main s390x gir1.2-glib-2.0 s390x 2.82.2-3 [180 kB] 108s Get:27 http://ftpmaster.internal/ubuntu plucky/main s390x libglib2.0-0t64 s390x 2.82.2-3 [1575 kB] 108s Get:28 http://ftpmaster.internal/ubuntu plucky/main s390x libgirepository-1.0-1 s390x 1.82.0-2 [84.9 kB] 108s Get:29 http://ftpmaster.internal/ubuntu plucky/main s390x libglib2.0-data all 2.82.2-3 [51.7 kB] 108s Get:30 http://ftpmaster.internal/ubuntu plucky/main s390x python-apt-common all 2.9.0ubuntu2 [20.3 kB] 108s Get:31 http://ftpmaster.internal/ubuntu plucky/main s390x python3-apt s390x 2.9.0ubuntu2 [185 kB] 108s Get:32 http://ftpmaster.internal/ubuntu plucky/main s390x python3-yaml s390x 6.0.2-1build1 [188 kB] 108s Get:33 http://ftpmaster.internal/ubuntu plucky/main s390x vim-tiny s390x 2:9.1.0861-1ubuntu1 [664 kB] 108s Get:34 http://ftpmaster.internal/ubuntu plucky/main s390x vim-common all 2:9.1.0861-1ubuntu1 [395 kB] 108s Get:35 http://ftpmaster.internal/ubuntu plucky/main s390x xxd s390x 2:9.1.0861-1ubuntu1 [66.6 kB] 108s Get:36 http://ftpmaster.internal/ubuntu plucky/main s390x libplymouth5 s390x 24.004.60-2ubuntu4 [150 kB] 108s Get:37 http://ftpmaster.internal/ubuntu plucky/main s390x plymouth-theme-ubuntu-text s390x 24.004.60-2ubuntu4 [10.1 kB] 108s Get:38 http://ftpmaster.internal/ubuntu plucky/main s390x plymouth s390x 24.004.60-2ubuntu4 [144 kB] 108s Get:39 http://ftpmaster.internal/ubuntu plucky/main s390x xz-utils s390x 5.6.3-1 [273 kB] 108s Get:40 http://ftpmaster.internal/ubuntu plucky/main s390x bpftrace s390x 0.21.2-2ubuntu3 [1718 kB] 108s Get:41 http://ftpmaster.internal/ubuntu plucky/main s390x curl s390x 8.11.0-1ubuntu2 [249 kB] 108s Get:42 http://ftpmaster.internal/ubuntu plucky/main s390x libcurl4t64 s390x 8.11.0-1ubuntu2 [390 kB] 108s Get:43 http://ftpmaster.internal/ubuntu plucky/main s390x dracut-install s390x 105-2ubuntu2 [36.0 kB] 108s Get:44 http://ftpmaster.internal/ubuntu plucky/main s390x libcurl3t64-gnutls s390x 8.11.0-1ubuntu2 [386 kB] 108s Get:45 http://ftpmaster.internal/ubuntu plucky/main s390x libpolkit-agent-1-0 s390x 125-2ubuntu1 [17.3 kB] 108s Get:46 http://ftpmaster.internal/ubuntu plucky/main s390x libpolkit-gobject-1-0 s390x 125-2ubuntu1 [48.4 kB] 108s Get:47 http://ftpmaster.internal/ubuntu plucky/main s390x libsgutils2-1.48 s390x 1.48-0ubuntu1 [120 kB] 108s Get:48 http://ftpmaster.internal/ubuntu plucky/main s390x linux-base all 4.10.1ubuntu1 [34.8 kB] 108s Get:49 http://ftpmaster.internal/ubuntu plucky/main s390x lto-disabled-list all 54 [12.2 kB] 108s Get:50 http://ftpmaster.internal/ubuntu plucky/main s390x lxd-installer all 10 [5264 B] 108s Get:51 http://ftpmaster.internal/ubuntu plucky/main s390x pinentry-curses s390x 1.3.1-0ubuntu2 [42.3 kB] 108s Get:52 http://ftpmaster.internal/ubuntu plucky/main s390x python3-blinker all 1.9.0-1 [10.7 kB] 108s Get:53 http://ftpmaster.internal/ubuntu plucky/main s390x python3-rpds-py s390x 0.21.0-2ubuntu1 [368 kB] 108s Get:54 http://ftpmaster.internal/ubuntu plucky/main s390x python3-jsonschema-specifications all 2023.12.1-2 [9116 B] 108s Get:55 http://ftpmaster.internal/ubuntu plucky/main s390x sg3-utils s390x 1.48-0ubuntu1 [1027 kB] 108s Get:56 http://ftpmaster.internal/ubuntu plucky/main s390x sg3-utils-udev all 1.48-0ubuntu1 [6608 B] 108s Preconfiguring packages ... 108s Fetched 14.8 MB in 1s (11.9 MB/s) 108s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55541 files and directories currently installed.) 108s Preparing to unpack .../bash_5.2.32-1ubuntu2_s390x.deb ... 108s Unpacking bash (5.2.32-1ubuntu2) over (5.2.32-1ubuntu1) ... 109s Setting up bash (5.2.32-1ubuntu2) ... 109s update-alternatives: using /usr/share/man/man7/bash-builtins.7.gz to provide /usr/share/man/man7/builtins.7.gz (builtins.7.gz) in auto mode 109s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55541 files and directories currently installed.) 109s Preparing to unpack .../hostname_3.25_s390x.deb ... 109s Unpacking hostname (3.25) over (3.23+nmu2ubuntu2) ... 109s Setting up hostname (3.25) ... 109s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55541 files and directories currently installed.) 109s Preparing to unpack .../init-system-helpers_1.67ubuntu1_all.deb ... 109s Unpacking init-system-helpers (1.67ubuntu1) over (1.66ubuntu1) ... 109s Setting up init-system-helpers (1.67ubuntu1) ... 109s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55541 files and directories currently installed.) 109s Preparing to unpack .../liblzma5_5.6.3-1_s390x.deb ... 109s Unpacking liblzma5:s390x (5.6.3-1) over (5.6.2-2) ... 109s Setting up liblzma5:s390x (5.6.3-1) ... 109s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55541 files and directories currently installed.) 109s Preparing to unpack .../libapt-pkg6.0t64_2.9.14ubuntu1_s390x.deb ... 109s Unpacking libapt-pkg6.0t64:s390x (2.9.14ubuntu1) over (2.9.8) ... 109s Setting up libapt-pkg6.0t64:s390x (2.9.14ubuntu1) ... 109s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55541 files and directories currently installed.) 109s Preparing to unpack .../apt_2.9.14ubuntu1_s390x.deb ... 109s Unpacking apt (2.9.14ubuntu1) over (2.9.8) ... 109s Setting up apt (2.9.14ubuntu1) ... 109s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55533 files and directories currently installed.) 109s Preparing to unpack .../apt-utils_2.9.14ubuntu1_s390x.deb ... 109s Unpacking apt-utils (2.9.14ubuntu1) over (2.9.8) ... 109s Preparing to unpack .../libaudit-common_1%3a4.0.2-2ubuntu1_all.deb ... 109s Unpacking libaudit-common (1:4.0.2-2ubuntu1) over (1:4.0.1-1ubuntu2) ... 109s Setting up libaudit-common (1:4.0.2-2ubuntu1) ... 109s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55533 files and directories currently installed.) 109s Preparing to unpack .../libaudit1_1%3a4.0.2-2ubuntu1_s390x.deb ... 109s Unpacking libaudit1:s390x (1:4.0.2-2ubuntu1) over (1:4.0.1-1ubuntu2) ... 109s Setting up libaudit1:s390x (1:4.0.2-2ubuntu1) ... 109s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55533 files and directories currently installed.) 109s Preparing to unpack .../debconf-i18n_1.5.87ubuntu1_all.deb ... 109s Unpacking debconf-i18n (1.5.87ubuntu1) over (1.5.86ubuntu1) ... 109s Preparing to unpack .../python3-debconf_1.5.87ubuntu1_all.deb ... 109s Unpacking python3-debconf (1.5.87ubuntu1) over (1.5.86ubuntu1) ... 109s Preparing to unpack .../debconf_1.5.87ubuntu1_all.deb ... 109s Unpacking debconf (1.5.87ubuntu1) over (1.5.86ubuntu1) ... 109s Setting up debconf (1.5.87ubuntu1) ... 110s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55533 files and directories currently installed.) 110s Preparing to unpack .../libpam0g_1.5.3-7ubuntu4_s390x.deb ... 110s Unpacking libpam0g:s390x (1.5.3-7ubuntu4) over (1.5.3-7ubuntu2) ... 110s Setting up libpam0g:s390x (1.5.3-7ubuntu4) ... 110s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55533 files and directories currently installed.) 110s Preparing to unpack .../libselinux1_3.7-3ubuntu1_s390x.deb ... 110s Unpacking libselinux1:s390x (3.7-3ubuntu1) over (3.5-2ubuntu5) ... 110s Setting up libselinux1:s390x (3.7-3ubuntu1) ... 110s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55533 files and directories currently installed.) 110s Preparing to unpack .../libpam-modules-bin_1.5.3-7ubuntu4_s390x.deb ... 110s Unpacking libpam-modules-bin (1.5.3-7ubuntu4) over (1.5.3-7ubuntu2) ... 110s Setting up libpam-modules-bin (1.5.3-7ubuntu4) ... 110s pam_namespace.service is a disabled or a static unit not running, not starting it. 110s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55533 files and directories currently installed.) 110s Preparing to unpack .../libpam-modules_1.5.3-7ubuntu4_s390x.deb ... 110s Unpacking libpam-modules:s390x (1.5.3-7ubuntu4) over (1.5.3-7ubuntu2) ... 110s Setting up libpam-modules:s390x (1.5.3-7ubuntu4) ... 110s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55533 files and directories currently installed.) 110s Preparing to unpack .../init_1.67ubuntu1_s390x.deb ... 110s Unpacking init (1.67ubuntu1) over (1.66ubuntu1) ... 110s Preparing to unpack .../openssh-sftp-server_1%3a9.9p1-3ubuntu2_s390x.deb ... 110s Unpacking openssh-sftp-server (1:9.9p1-3ubuntu2) over (1:9.7p1-7ubuntu5) ... 110s Preparing to unpack .../openssh-server_1%3a9.9p1-3ubuntu2_s390x.deb ... 110s Unpacking openssh-server (1:9.9p1-3ubuntu2) over (1:9.7p1-7ubuntu5) ... 110s Preparing to unpack .../openssh-client_1%3a9.9p1-3ubuntu2_s390x.deb ... 110s Unpacking openssh-client (1:9.9p1-3ubuntu2) over (1:9.7p1-7ubuntu5) ... 110s Preparing to unpack .../libpam-runtime_1.5.3-7ubuntu4_all.deb ... 110s Unpacking libpam-runtime (1.5.3-7ubuntu4) over (1.5.3-7ubuntu2) ... 110s Setting up libpam-runtime (1.5.3-7ubuntu4) ... 110s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55535 files and directories currently installed.) 110s Preparing to unpack .../libsemanage-common_3.7-2build1_all.deb ... 110s Unpacking libsemanage-common (3.7-2build1) over (3.5-1build6) ... 110s Setting up libsemanage-common (3.7-2build1) ... 110s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55534 files and directories currently installed.) 110s Preparing to unpack .../libsemanage2_3.7-2build1_s390x.deb ... 110s Unpacking libsemanage2:s390x (3.7-2build1) over (3.5-1build6) ... 110s Setting up libsemanage2:s390x (3.7-2build1) ... 111s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55534 files and directories currently installed.) 111s Preparing to unpack .../00-distro-info_1.12_s390x.deb ... 111s Unpacking distro-info (1.12) over (1.9) ... 111s Preparing to unpack .../01-gir1.2-girepository-2.0_1.82.0-2_s390x.deb ... 111s Unpacking gir1.2-girepository-2.0:s390x (1.82.0-2) over (1.80.1-4) ... 111s Preparing to unpack .../02-gir1.2-glib-2.0_2.82.2-3_s390x.deb ... 111s Unpacking gir1.2-glib-2.0:s390x (2.82.2-3) over (2.82.1-0ubuntu1) ... 111s Preparing to unpack .../03-libglib2.0-0t64_2.82.2-3_s390x.deb ... 111s Unpacking libglib2.0-0t64:s390x (2.82.2-3) over (2.82.1-0ubuntu1) ... 111s Preparing to unpack .../04-libgirepository-1.0-1_1.82.0-2_s390x.deb ... 111s Unpacking libgirepository-1.0-1:s390x (1.82.0-2) over (1.80.1-4) ... 111s Preparing to unpack .../05-libglib2.0-data_2.82.2-3_all.deb ... 111s Unpacking libglib2.0-data (2.82.2-3) over (2.82.1-0ubuntu1) ... 111s Preparing to unpack .../06-python-apt-common_2.9.0ubuntu2_all.deb ... 111s Unpacking python-apt-common (2.9.0ubuntu2) over (2.9.0ubuntu1) ... 111s Preparing to unpack .../07-python3-apt_2.9.0ubuntu2_s390x.deb ... 111s Unpacking python3-apt (2.9.0ubuntu2) over (2.9.0ubuntu1) ... 111s Preparing to unpack .../08-python3-yaml_6.0.2-1build1_s390x.deb ... 111s Unpacking python3-yaml (6.0.2-1build1) over (6.0.2-1) ... 111s Preparing to unpack .../09-vim-tiny_2%3a9.1.0861-1ubuntu1_s390x.deb ... 111s Unpacking vim-tiny (2:9.1.0861-1ubuntu1) over (2:9.1.0777-1ubuntu1) ... 111s Preparing to unpack .../10-vim-common_2%3a9.1.0861-1ubuntu1_all.deb ... 111s Unpacking vim-common (2:9.1.0861-1ubuntu1) over (2:9.1.0777-1ubuntu1) ... 111s Preparing to unpack .../11-xxd_2%3a9.1.0861-1ubuntu1_s390x.deb ... 111s Unpacking xxd (2:9.1.0861-1ubuntu1) over (2:9.1.0777-1ubuntu1) ... 111s Preparing to unpack .../12-libplymouth5_24.004.60-2ubuntu4_s390x.deb ... 111s Unpacking libplymouth5:s390x (24.004.60-2ubuntu4) over (24.004.60-1ubuntu11) ... 111s Preparing to unpack .../13-plymouth-theme-ubuntu-text_24.004.60-2ubuntu4_s390x.deb ... 111s Unpacking plymouth-theme-ubuntu-text (24.004.60-2ubuntu4) over (24.004.60-1ubuntu11) ... 111s Preparing to unpack .../14-plymouth_24.004.60-2ubuntu4_s390x.deb ... 111s Unpacking plymouth (24.004.60-2ubuntu4) over (24.004.60-1ubuntu11) ... 111s Preparing to unpack .../15-xz-utils_5.6.3-1_s390x.deb ... 111s Unpacking xz-utils (5.6.3-1) over (5.6.2-2) ... 111s Preparing to unpack .../16-bpftrace_0.21.2-2ubuntu3_s390x.deb ... 111s Unpacking bpftrace (0.21.2-2ubuntu3) over (0.21.2-2ubuntu2) ... 111s Preparing to unpack .../17-curl_8.11.0-1ubuntu2_s390x.deb ... 111s Unpacking curl (8.11.0-1ubuntu2) over (8.9.1-2ubuntu2) ... 111s Preparing to unpack .../18-libcurl4t64_8.11.0-1ubuntu2_s390x.deb ... 111s Unpacking libcurl4t64:s390x (8.11.0-1ubuntu2) over (8.9.1-2ubuntu2) ... 111s Preparing to unpack .../19-dracut-install_105-2ubuntu2_s390x.deb ... 111s Unpacking dracut-install (105-2ubuntu2) over (105-1ubuntu1) ... 111s Preparing to unpack .../20-libcurl3t64-gnutls_8.11.0-1ubuntu2_s390x.deb ... 111s Unpacking libcurl3t64-gnutls:s390x (8.11.0-1ubuntu2) over (8.9.1-2ubuntu2) ... 111s Preparing to unpack .../21-libpolkit-agent-1-0_125-2ubuntu1_s390x.deb ... 111s Unpacking libpolkit-agent-1-0:s390x (125-2ubuntu1) over (124-2ubuntu1) ... 111s Preparing to unpack .../22-libpolkit-gobject-1-0_125-2ubuntu1_s390x.deb ... 111s Unpacking libpolkit-gobject-1-0:s390x (125-2ubuntu1) over (124-2ubuntu1) ... 111s Selecting previously unselected package libsgutils2-1.48:s390x. 111s Preparing to unpack .../23-libsgutils2-1.48_1.48-0ubuntu1_s390x.deb ... 111s Unpacking libsgutils2-1.48:s390x (1.48-0ubuntu1) ... 111s Preparing to unpack .../24-linux-base_4.10.1ubuntu1_all.deb ... 111s Unpacking linux-base (4.10.1ubuntu1) over (4.5ubuntu9) ... 111s Preparing to unpack .../25-lto-disabled-list_54_all.deb ... 111s Unpacking lto-disabled-list (54) over (53) ... 111s Preparing to unpack .../26-lxd-installer_10_all.deb ... 111s Unpacking lxd-installer (10) over (9) ... 111s Preparing to unpack .../27-pinentry-curses_1.3.1-0ubuntu2_s390x.deb ... 111s Unpacking pinentry-curses (1.3.1-0ubuntu2) over (1.2.1-3ubuntu5) ... 111s Preparing to unpack .../28-python3-blinker_1.9.0-1_all.deb ... 111s Unpacking python3-blinker (1.9.0-1) over (1.8.2-1) ... 111s Preparing to unpack .../29-python3-rpds-py_0.21.0-2ubuntu1_s390x.deb ... 111s Unpacking python3-rpds-py (0.21.0-2ubuntu1) over (0.20.0-0ubuntu3) ... 111s Preparing to unpack .../30-python3-jsonschema-specifications_2023.12.1-2_all.deb ... 111s Unpacking python3-jsonschema-specifications (2023.12.1-2) over (2023.12.1-1ubuntu1) ... 111s Preparing to unpack .../31-sg3-utils_1.48-0ubuntu1_s390x.deb ... 111s Unpacking sg3-utils (1.48-0ubuntu1) over (1.46-3ubuntu5) ... 111s Preparing to unpack .../32-sg3-utils-udev_1.48-0ubuntu1_all.deb ... 111s Unpacking sg3-utils-udev (1.48-0ubuntu1) over (1.46-3ubuntu5) ... 111s Setting up pinentry-curses (1.3.1-0ubuntu2) ... 111s Setting up distro-info (1.12) ... 111s Setting up lto-disabled-list (54) ... 111s Setting up apt-utils (2.9.14ubuntu1) ... 111s Setting up linux-base (4.10.1ubuntu1) ... 111s Setting up init (1.67ubuntu1) ... 111s Setting up libcurl4t64:s390x (8.11.0-1ubuntu2) ... 111s Setting up bpftrace (0.21.2-2ubuntu3) ... 111s Setting up openssh-client (1:9.9p1-3ubuntu2) ... 111s Setting up python3-debconf (1.5.87ubuntu1) ... 111s Setting up libcurl3t64-gnutls:s390x (8.11.0-1ubuntu2) ... 111s Setting up libsgutils2-1.48:s390x (1.48-0ubuntu1) ... 111s Setting up python3-yaml (6.0.2-1build1) ... 112s Setting up debconf-i18n (1.5.87ubuntu1) ... 112s Setting up xxd (2:9.1.0861-1ubuntu1) ... 112s Setting up libglib2.0-0t64:s390x (2.82.2-3) ... 112s No schema files found: doing nothing. 112s Setting up libglib2.0-data (2.82.2-3) ... 112s Setting up vim-common (2:9.1.0861-1ubuntu1) ... 112s Setting up xz-utils (5.6.3-1) ... 112s Setting up gir1.2-glib-2.0:s390x (2.82.2-3) ... 112s Setting up lxd-installer (10) ... 112s Setting up python3-rpds-py (0.21.0-2ubuntu1) ... 112s Setting up python-apt-common (2.9.0ubuntu2) ... 112s Setting up dracut-install (105-2ubuntu2) ... 112s Setting up libplymouth5:s390x (24.004.60-2ubuntu4) ... 112s Setting up libgirepository-1.0-1:s390x (1.82.0-2) ... 112s Setting up curl (8.11.0-1ubuntu2) ... 112s Setting up python3-jsonschema-specifications (2023.12.1-2) ... 112s Setting up libpolkit-gobject-1-0:s390x (125-2ubuntu1) ... 112s Setting up sg3-utils (1.48-0ubuntu1) ... 112s Setting up python3-blinker (1.9.0-1) ... 112s Setting up openssh-sftp-server (1:9.9p1-3ubuntu2) ... 112s Setting up openssh-server (1:9.9p1-3ubuntu2) ... 112s Installing new version of config file /etc/ssh/moduli ... 112s Replacing config file /etc/ssh/sshd_config with new version 113s Setting up plymouth (24.004.60-2ubuntu4) ... 113s update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults 113s update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults 113s Setting up python3-apt (2.9.0ubuntu2) ... 114s Setting up vim-tiny (2:9.1.0861-1ubuntu1) ... 114s Setting up sg3-utils-udev (1.48-0ubuntu1) ... 114s update-initramfs: deferring update (trigger activated) 114s Setting up gir1.2-girepository-2.0:s390x (1.82.0-2) ... 114s Setting up libpolkit-agent-1-0:s390x (125-2ubuntu1) ... 114s Processing triggers for debianutils (5.21) ... 114s Processing triggers for install-info (7.1.1-1) ... 114s Processing triggers for initramfs-tools (0.142ubuntu35) ... 114s update-initramfs: Generating /boot/initrd.img-6.11.0-8-generic 114s W: No lz4 in /usr/bin:/sbin:/bin, using gzip 116s Using config file '/etc/zipl.conf' 116s Building bootmap in '/boot' 116s Adding IPL section 'ubuntu' (default) 116s Preparing boot device for LD-IPL: vda (0000). 116s Done. 116s Processing triggers for libc-bin (2.40-1ubuntu3) ... 116s Processing triggers for ufw (0.36.2-8) ... 116s Processing triggers for man-db (2.13.0-1) ... 117s Setting up plymouth-theme-ubuntu-text (24.004.60-2ubuntu4) ... 117s Processing triggers for initramfs-tools (0.142ubuntu35) ... 117s update-initramfs: Generating /boot/initrd.img-6.11.0-8-generic 117s W: No lz4 in /usr/bin:/sbin:/bin, using gzip 119s Using config file '/etc/zipl.conf' 119s Building bootmap in '/boot' 119s Adding IPL section 'ubuntu' (default) 119s Preparing boot device for LD-IPL: vda (0000). 119s Done. 120s Reading package lists... 120s Building dependency tree... 120s Reading state information... 120s The following packages will be REMOVED: 120s libsgutils2-1.46-2* 120s 0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. 120s After this operation, 294 kB disk space will be freed. 120s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55566 files and directories currently installed.) 120s Removing libsgutils2-1.46-2:s390x (1.46-3ubuntu5) ... 120s Processing triggers for libc-bin (2.40-1ubuntu3) ... 121s Hit:1 http://ftpmaster.internal/ubuntu plucky-proposed InRelease 121s Hit:2 http://ftpmaster.internal/ubuntu plucky InRelease 121s Hit:3 http://ftpmaster.internal/ubuntu plucky-updates InRelease 121s Hit:4 http://ftpmaster.internal/ubuntu plucky-security InRelease 121s Reading package lists... 122s Reading package lists... 122s Building dependency tree... 122s Reading state information... 122s Calculating upgrade... 122s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 122s Reading package lists... 122s Building dependency tree... 122s Reading state information... 122s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 122s autopkgtest [09:35:42]: rebooting testbed after setup commands that affected boot 126s autopkgtest-virt-ssh: WARNING: ssh connection failed. Retrying in 3 seconds... 140s autopkgtest [09:36:00]: testbed running kernel: Linux 6.11.0-8-generic #8-Ubuntu SMP Mon Sep 16 12:49:35 UTC 2024 142s autopkgtest [09:36:02]: @@@@@@@@@@@@@@@@@@@@ apt-source git-ubuntu 144s Get:1 http://ftpmaster.internal/ubuntu plucky/universe git-ubuntu 1.1-1 (dsc) [2280 B] 144s Get:2 http://ftpmaster.internal/ubuntu plucky/universe git-ubuntu 1.1-1 (tar) [179 kB] 144s Get:3 http://ftpmaster.internal/ubuntu plucky/universe git-ubuntu 1.1-1 (diff) [5776 B] 144s gpgv: Signature made Wed Jul 3 16:18:24 2024 UTC 144s gpgv: using RSA key A62D2CFBD50B9B5BF360D54B159EB5C4EFC8774C 144s gpgv: Can't check signature: No public key 144s dpkg-source: warning: cannot verify inline signature for ./git-ubuntu_1.1-1.dsc: no acceptable signature found 144s autopkgtest [09:36:04]: testing package git-ubuntu version 1.1-1 145s autopkgtest [09:36:05]: build not needed 146s autopkgtest [09:36:06]: test self-test: preparing testbed 151s Reading package lists... 151s Building dependency tree... 151s Reading state information... 151s Starting pkgProblemResolver with broken count: 0 151s Starting 2 pkgProblemResolver with broken count: 0 151s Done 151s The following additional packages will be installed: 151s dctrl-tools debian-archive-keyring devscripts diffstat dput gettext git 151s git-buildpackage git-man git-ubuntu libb-hooks-op-check-perl 151s libclass-method-modifiers-perl libclass-xsaccessor-perl libclone-perl 151s libdevel-callchecker-perl libdynaloader-functions-perl libencode-locale-perl 151s liberror-perl libfile-dirlist-perl libfile-homedir-perl libfile-listing-perl 151s libfile-touch-perl libfile-which-perl libgit2-1.8 libgomp1 151s libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl 151s libhttp-cookies-perl libhttp-date-perl libhttp-message-perl 151s libhttp-negotiate-perl libhttp-parser2.9 libimport-into-perl libio-html-perl 151s libio-pty-perl libio-socket-ssl-perl libipc-run-perl libjs-jquery 151s libjs-jquery-hotkeys libjs-jquery-isonscreen libjs-jquery-metadata 151s libjs-jquery-tablesorter libjs-jquery-throttle-debounce libjs-sphinxdoc 151s libjs-underscore liblwp-mediatypes-perl liblwp-protocol-https-perl 151s libmodule-runtime-perl libmoo-perl libnet-http-perl libnet-ssleay-perl 151s libnorm1t64 libparams-classify-perl libpgm-5.3-0t64 libpython3.13-minimal 151s libpython3.13-stdlib librole-tiny-perl libsodium23 libsub-quote-perl 151s libsys-cpuaffinity-perl libtimedate-perl libtry-tiny-perl liburi-perl 151s libwww-perl libwww-robotrules-perl libxdelta2t64 libzmq5 patchutils pbzip2 151s perl-openssl-defaults pixz pristine-tar pylint python3-argcomplete 151s python3-astroid python3-cachetools python3-coverage python3-dateutil 151s python3-debian python3-debianbts python3-dill python3-distro-info 151s python3-gpg python3-importlib-metadata python3-iniconfig python3-isort 151s python3-jaraco.classes python3-jeepney python3-keyring python3-keyrings.alt 151s python3-launchpadlib-desktop python3-logilab-common python3-mccabe 151s python3-mypy-extensions python3-packaging python3-platformdirs 151s python3-pluggy python3-py python3-pycryptodome python3-pygit2 python3-pytest 151s python3-pytest-cov python3-secretstorage python3-tenacity python3-tomlkit 151s python3-ubuntutools python3-xdg python3-zmq python3.13 python3.13-minimal 151s quilt ubuntu-dev-tools wdiff xdelta xdelta3 151s Suggested packages: 151s debtags adequate at autopkgtest bls-standalone bsd-mailx | mailx 151s build-essential check-all-the-things cvs-buildpackage debhelper diffoscope 151s disorderfs docker.io dose-extra duck elpa-devscripts faketime gnuplot 151s how-can-i-help libauthen-sasl-perl libdbd-pg-perl libfile-desktopentry-perl 151s libterm-size-perl libyaml-syck-perl mmdebstrap mutt piuparts 151s postgresql-client pristine-lfs python3-pycurl ratt reprotest 151s svn-buildpackage w3m debian-keyring equivs libgitlab-api-v4-perl 151s libsoap-lite-perl lintian mini-dinstall autopoint gettext-doc 151s libasprintf-dev libgettextpo-dev git-daemon-run | git-daemon-sysvinit 151s git-doc git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn 151s python3-notify2 unzip libdata-dump-perl libio-compress-brotli-perl 151s libcrypt-ssleay-perl libscalar-number-perl libxstring-perl libsub-name-perl 151s libbusiness-isbn-perl libmime-base32-perl libregexp-ipv6-perl 151s libauthen-ntlm-perl python-coverage-doc python3-objgraph gir1.2-secret-1 151s gnome-keyring libkf5wallet-bin python3-shtab subversion python-pygit2-doc 151s gnome-keyring | libkf5wallet-bin | keepassxc python-secretstorage-doc 151s python-tenacity-doc python-pyxdg-doc python3.13-venv python3.13-doc 151s binfmt-support default-mta | mail-transport-agent graphviz procmail bzr 151s | brz bzr-builddeb | brz-debian qemu-user-static wdiff-doc 151s Recommended packages: 151s libdistro-info-perl libgit-wrapper-perl libjson-perl liblist-compare-perl 151s libstring-shellquote-perl licensecheck lintian python3-magic python3-unidiff 151s unzip python3-paramiko cowbuilder | pbuilder | sbuild libhtml-format-perl 151s javascript-common libnamespace-clean-perl libdata-dump-perl 151s libhtml-form-perl libhttp-daemon-perl libmailtools-perl python3-tk arch-test 151s debian-keyring debootstrap genisoimage sbuild | pbuilder | cowbuilder 151s python3-dns reportbug 151s The following NEW packages will be installed: 151s autopkgtest-satdep dctrl-tools debian-archive-keyring devscripts diffstat 151s dput gettext git git-buildpackage git-man git-ubuntu 151s libb-hooks-op-check-perl libclass-method-modifiers-perl 151s libclass-xsaccessor-perl libclone-perl libdevel-callchecker-perl 151s libdynaloader-functions-perl libencode-locale-perl liberror-perl 151s libfile-dirlist-perl libfile-homedir-perl libfile-listing-perl 151s libfile-touch-perl libfile-which-perl libgit2-1.8 libgomp1 151s libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl 151s libhttp-cookies-perl libhttp-date-perl libhttp-message-perl 151s libhttp-negotiate-perl libhttp-parser2.9 libimport-into-perl libio-html-perl 151s libio-pty-perl libio-socket-ssl-perl libipc-run-perl libjs-jquery 151s libjs-jquery-hotkeys libjs-jquery-isonscreen libjs-jquery-metadata 151s libjs-jquery-tablesorter libjs-jquery-throttle-debounce libjs-sphinxdoc 151s libjs-underscore liblwp-mediatypes-perl liblwp-protocol-https-perl 151s libmodule-runtime-perl libmoo-perl libnet-http-perl libnet-ssleay-perl 151s libnorm1t64 libparams-classify-perl libpgm-5.3-0t64 libpython3.13-minimal 151s libpython3.13-stdlib librole-tiny-perl libsodium23 libsub-quote-perl 151s libsys-cpuaffinity-perl libtimedate-perl libtry-tiny-perl liburi-perl 151s libwww-perl libwww-robotrules-perl libxdelta2t64 libzmq5 patchutils pbzip2 151s perl-openssl-defaults pixz pristine-tar pylint python3-argcomplete 151s python3-astroid python3-cachetools python3-coverage python3-dateutil 151s python3-debian python3-debianbts python3-dill python3-distro-info 151s python3-gpg python3-importlib-metadata python3-iniconfig python3-isort 151s python3-jaraco.classes python3-jeepney python3-keyring python3-keyrings.alt 151s python3-launchpadlib-desktop python3-logilab-common python3-mccabe 151s python3-mypy-extensions python3-packaging python3-platformdirs 151s python3-pluggy python3-py python3-pycryptodome python3-pygit2 python3-pytest 151s python3-pytest-cov python3-secretstorage python3-tenacity python3-tomlkit 151s python3-ubuntutools python3-xdg python3-zmq python3.13 python3.13-minimal 151s quilt ubuntu-dev-tools wdiff xdelta xdelta3 151s 0 upgraded, 117 newly installed, 0 to remove and 0 not upgraded. 151s Need to get 23.5 MB/23.5 MB of archives. 151s After this operation, 97.8 MB of additional disk space will be used. 151s Get:1 /tmp/autopkgtest.zp0YHR/1-autopkgtest-satdep.deb autopkgtest-satdep s390x 0 [712 B] 151s Get:2 http://ftpmaster.internal/ubuntu plucky/main s390x libpython3.13-minimal s390x 3.13.0-2 [877 kB] 152s Get:3 http://ftpmaster.internal/ubuntu plucky/main s390x python3.13-minimal s390x 3.13.0-2 [2172 kB] 152s Get:4 http://ftpmaster.internal/ubuntu plucky/main s390x libjs-jquery all 3.6.1+dfsg+~3.5.14-1 [328 kB] 152s Get:5 http://ftpmaster.internal/ubuntu plucky/universe s390x libjs-jquery-hotkeys all 0~20130707+git2d51e3a9+dfsg-2.1 [11.5 kB] 152s Get:6 http://ftpmaster.internal/ubuntu plucky/main s390x python3-distro-info all 1.12 [7754 B] 152s Get:7 http://ftpmaster.internal/ubuntu plucky/main s390x dctrl-tools s390x 2.24-3build3 [106 kB] 152s Get:8 http://ftpmaster.internal/ubuntu plucky/universe s390x debian-archive-keyring all 2023.4ubuntu1 [168 kB] 152s Get:9 http://ftpmaster.internal/ubuntu plucky/main s390x libfile-dirlist-perl all 0.05-3 [7286 B] 152s Get:10 http://ftpmaster.internal/ubuntu plucky/main s390x libfile-which-perl all 1.27-2 [12.5 kB] 152s Get:11 http://ftpmaster.internal/ubuntu plucky/main s390x libfile-homedir-perl all 1.006-2 [37.0 kB] 152s Get:12 http://ftpmaster.internal/ubuntu plucky/main s390x libfile-touch-perl all 0.12-2 [7498 B] 152s Get:13 http://ftpmaster.internal/ubuntu plucky/main s390x libio-pty-perl s390x 1:1.20-1build3 [31.6 kB] 152s Get:14 http://ftpmaster.internal/ubuntu plucky/main s390x libipc-run-perl all 20231003.0-2 [91.5 kB] 152s Get:15 http://ftpmaster.internal/ubuntu plucky/main s390x libclass-method-modifiers-perl all 2.15-1 [16.1 kB] 152s Get:16 http://ftpmaster.internal/ubuntu plucky/main s390x libclass-xsaccessor-perl s390x 1.19-4build5 [34.2 kB] 152s Get:17 http://ftpmaster.internal/ubuntu plucky/main s390x libb-hooks-op-check-perl s390x 0.22-3build2 [9566 B] 152s Get:18 http://ftpmaster.internal/ubuntu plucky/main s390x libdynaloader-functions-perl all 0.004-1 [11.4 kB] 152s Get:19 http://ftpmaster.internal/ubuntu plucky/main s390x libdevel-callchecker-perl s390x 0.009-1build1 [14.2 kB] 152s Get:20 http://ftpmaster.internal/ubuntu plucky/main s390x libparams-classify-perl s390x 0.015-2build6 [20.6 kB] 152s Get:21 http://ftpmaster.internal/ubuntu plucky/main s390x libmodule-runtime-perl all 0.016-2 [16.4 kB] 152s Get:22 http://ftpmaster.internal/ubuntu plucky/main s390x libimport-into-perl all 1.002005-2 [10.7 kB] 152s Get:23 http://ftpmaster.internal/ubuntu plucky/main s390x librole-tiny-perl all 2.002004-1 [16.3 kB] 152s Get:24 http://ftpmaster.internal/ubuntu plucky/main s390x libsub-quote-perl all 2.006008-1ubuntu1 [20.7 kB] 152s Get:25 http://ftpmaster.internal/ubuntu plucky/main s390x libmoo-perl all 2.005005-1 [47.4 kB] 152s Get:26 http://ftpmaster.internal/ubuntu plucky/main s390x libencode-locale-perl all 1.05-3 [11.6 kB] 152s Get:27 http://ftpmaster.internal/ubuntu plucky/main s390x libtimedate-perl all 2.3300-2 [34.0 kB] 152s Get:28 http://ftpmaster.internal/ubuntu plucky/main s390x libhttp-date-perl all 6.06-1 [10.2 kB] 152s Get:29 http://ftpmaster.internal/ubuntu plucky/main s390x libfile-listing-perl all 6.16-1 [11.3 kB] 152s Get:30 http://ftpmaster.internal/ubuntu plucky/main s390x libhtml-tagset-perl all 3.24-1 [14.1 kB] 152s Get:31 http://ftpmaster.internal/ubuntu plucky/main s390x liburi-perl all 5.30-1 [94.4 kB] 152s Get:32 http://ftpmaster.internal/ubuntu plucky/main s390x libhtml-parser-perl s390x 3.83-1build1 [87.8 kB] 152s Get:33 http://ftpmaster.internal/ubuntu plucky/main s390x libhtml-tree-perl all 5.07-3 [200 kB] 152s Get:34 http://ftpmaster.internal/ubuntu plucky/main s390x libclone-perl s390x 0.47-1 [10.7 kB] 152s Get:35 http://ftpmaster.internal/ubuntu plucky/main s390x libio-html-perl all 1.004-3 [15.9 kB] 152s Get:36 http://ftpmaster.internal/ubuntu plucky/main s390x liblwp-mediatypes-perl all 6.04-2 [20.1 kB] 152s Get:37 http://ftpmaster.internal/ubuntu plucky/main s390x libhttp-message-perl all 7.00-2ubuntu1 [75.9 kB] 153s Get:38 http://ftpmaster.internal/ubuntu plucky/main s390x libhttp-cookies-perl all 6.11-1 [18.2 kB] 153s Get:39 http://ftpmaster.internal/ubuntu plucky/main s390x libhttp-negotiate-perl all 6.01-2 [12.4 kB] 153s Get:40 http://ftpmaster.internal/ubuntu plucky/main s390x perl-openssl-defaults s390x 7build3 [6628 B] 153s Get:41 http://ftpmaster.internal/ubuntu plucky/main s390x libnet-ssleay-perl s390x 1.94-2 [319 kB] 153s Get:42 http://ftpmaster.internal/ubuntu plucky/main s390x libio-socket-ssl-perl all 2.089-1 [200 kB] 153s Get:43 http://ftpmaster.internal/ubuntu plucky/main s390x libnet-http-perl all 6.23-1 [22.3 kB] 153s Get:44 http://ftpmaster.internal/ubuntu plucky/main s390x liblwp-protocol-https-perl all 6.14-1 [9040 B] 153s Get:45 http://ftpmaster.internal/ubuntu plucky/main s390x libtry-tiny-perl all 0.32-1 [21.2 kB] 153s Get:46 http://ftpmaster.internal/ubuntu plucky/main s390x libwww-robotrules-perl all 6.02-1 [12.6 kB] 153s Get:47 http://ftpmaster.internal/ubuntu plucky/main s390x libwww-perl all 6.77-1 [138 kB] 153s Get:48 http://ftpmaster.internal/ubuntu plucky/main s390x patchutils s390x 0.4.2-1build3 [79.2 kB] 153s Get:49 http://ftpmaster.internal/ubuntu plucky/main s390x wdiff s390x 1.2.2-6build1 [29.3 kB] 154s Get:50 http://ftpmaster.internal/ubuntu plucky/main s390x devscripts all 2.24.3 [1080 kB] 154s Get:51 http://ftpmaster.internal/ubuntu plucky/main s390x diffstat s390x 1.67-1 [33.1 kB] 154s Get:52 http://ftpmaster.internal/ubuntu plucky/main s390x python3-debian all 0.1.49ubuntu3 [116 kB] 154s Get:53 http://ftpmaster.internal/ubuntu plucky/main s390x python3-gpg s390x 1.24.0-2ubuntu1 [259 kB] 154s Get:54 http://ftpmaster.internal/ubuntu plucky/main s390x python3-xdg all 0.28-2 [38.3 kB] 154s Get:55 http://ftpmaster.internal/ubuntu plucky/main s390x dput all 1.2.4ubuntu1 [49.1 kB] 154s Get:56 http://ftpmaster.internal/ubuntu plucky/main s390x libgomp1 s390x 14.2.0-8ubuntu1 [151 kB] 154s Get:57 http://ftpmaster.internal/ubuntu plucky/main s390x gettext s390x 0.22.5-2 [996 kB] 154s Get:58 http://ftpmaster.internal/ubuntu plucky/main s390x liberror-perl all 0.17029-2 [25.6 kB] 154s Get:59 http://ftpmaster.internal/ubuntu plucky/main s390x git-man all 1:2.45.2-1.2ubuntu1 [1122 kB] 154s Get:60 http://ftpmaster.internal/ubuntu plucky/main s390x git s390x 1:2.45.2-1.2ubuntu1 [4154 kB] 154s Get:61 http://ftpmaster.internal/ubuntu plucky/main s390x python3-dateutil all 2.9.0-3 [80.2 kB] 154s Get:62 http://ftpmaster.internal/ubuntu plucky/main s390x python3-importlib-metadata all 8.5.0-1 [20.7 kB] 154s Get:63 http://ftpmaster.internal/ubuntu plucky/universe s390x git-buildpackage all 0.9.35 [677 kB] 154s Get:64 http://ftpmaster.internal/ubuntu plucky/universe s390x libsys-cpuaffinity-perl s390x 1.13~03-2build4 [32.2 kB] 154s Get:65 http://ftpmaster.internal/ubuntu plucky/universe s390x pbzip2 s390x 1.1.13-1build1 [37.9 kB] 154s Get:66 http://ftpmaster.internal/ubuntu plucky/universe s390x pixz s390x 1.0.7-3 [22.6 kB] 154s Get:67 http://ftpmaster.internal/ubuntu plucky/universe s390x libxdelta2t64 s390x 1.1.3-10.7 [56.4 kB] 154s Get:68 http://ftpmaster.internal/ubuntu plucky/universe s390x xdelta s390x 1.1.3-10.7 [25.3 kB] 154s Get:69 http://ftpmaster.internal/ubuntu plucky/universe s390x xdelta3 s390x 3.0.11-dfsg-1.2 [72.0 kB] 154s Get:70 http://ftpmaster.internal/ubuntu plucky/universe s390x pristine-tar s390x 1.50+nmu2build1 [127 kB] 154s Get:71 http://ftpmaster.internal/ubuntu plucky/universe s390x quilt all 0.68-1 [439 kB] 154s Get:72 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-debianbts all 4.1.1 [12.8 kB] 154s Get:73 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-jeepney all 0.8.0-4 [33.1 kB] 154s Get:74 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-secretstorage all 3.3.3-3 [13.7 kB] 154s Get:75 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-jaraco.classes all 3.4.0-1 [7664 B] 154s Get:76 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-keyring all 25.4.1-1 [40.5 kB] 154s Get:77 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-launchpadlib-desktop all 2.0.0-1 [1778 B] 154s Get:78 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-ubuntutools all 0.203 [67.4 kB] 154s Get:79 http://ftpmaster.internal/ubuntu plucky/universe s390x ubuntu-dev-tools all 0.203 [93.2 kB] 154s Get:80 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-astroid all 3.3.5-1 [174 kB] 154s Get:81 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-isort all 5.13.2-2 [59.3 kB] 154s Get:82 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-mypy-extensions all 1.0.0-1 [6148 B] 154s Get:83 http://ftpmaster.internal/ubuntu plucky/main s390x libjs-underscore all 1.13.4~dfsg+~1.11.4-3 [118 kB] 154s Get:84 http://ftpmaster.internal/ubuntu plucky/main s390x libjs-sphinxdoc all 7.4.7-4 [158 kB] 154s Get:85 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-logilab-common all 2.0.0-1 [281 kB] 154s Get:86 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-dill all 0.3.9-1 [84.5 kB] 154s Get:87 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-mccabe all 0.7.0-1 [8678 B] 154s Get:88 http://ftpmaster.internal/ubuntu plucky/main s390x python3-platformdirs all 4.3.6-1 [16.8 kB] 154s Get:89 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-tomlkit all 0.13.2-1 [37.6 kB] 154s Get:90 http://ftpmaster.internal/ubuntu plucky/universe s390x pylint all 3.3.1-2 [345 kB] 154s Get:91 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-argcomplete all 3.5.1-1ubuntu1 [35.6 kB] 154s Get:92 http://ftpmaster.internal/ubuntu plucky/main s390x python3-cachetools all 5.3.3-1 [10.3 kB] 154s Get:93 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-pycryptodome s390x 3.20.0+dfsg-3build1 [1094 kB] 154s Get:94 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-keyrings.alt all 5.0.2-1 [16.6 kB] 154s Get:95 http://ftpmaster.internal/ubuntu plucky/main s390x libhttp-parser2.9 s390x 2.9.4-6build1 [24.7 kB] 154s Get:96 http://ftpmaster.internal/ubuntu plucky-proposed/main s390x libgit2-1.8 s390x 1.8.4+ds-1ubuntu1 [568 kB] 154s Get:97 http://ftpmaster.internal/ubuntu plucky-proposed/universe s390x python3-pygit2 s390x 1.16.0-2 [187 kB] 154s Get:98 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-iniconfig all 1.1.1-2 [6024 B] 154s Get:99 http://ftpmaster.internal/ubuntu plucky/main s390x python3-packaging all 24.2-1 [51.5 kB] 154s Get:100 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-pluggy all 1.5.0-1 [21.0 kB] 154s Get:101 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-pytest all 8.3.3-1 [251 kB] 154s Get:102 http://ftpmaster.internal/ubuntu plucky/main s390x libpython3.13-stdlib s390x 3.13.0-2 [2086 kB] 155s Get:103 http://ftpmaster.internal/ubuntu plucky/main s390x python3.13 s390x 3.13.0-2 [719 kB] 155s Get:104 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-coverage s390x 7.4.4+dfsg1-0ubuntu3 [150 kB] 155s Get:105 http://ftpmaster.internal/ubuntu plucky/universe s390x libjs-jquery-isonscreen all 1.2.0-1.1 [3244 B] 155s Get:106 http://ftpmaster.internal/ubuntu plucky/universe s390x libjs-jquery-metadata all 12-4 [6582 B] 155s Get:107 http://ftpmaster.internal/ubuntu plucky/universe s390x libjs-jquery-tablesorter all 1:2.31.3+dfsg1-4 [192 kB] 155s Get:108 http://ftpmaster.internal/ubuntu plucky/universe s390x libjs-jquery-throttle-debounce all 1.1+dfsg.1-2 [12.5 kB] 155s Get:109 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-pytest-cov all 5.0.0-1 [21.3 kB] 155s Get:110 http://ftpmaster.internal/ubuntu plucky/main s390x python3-tenacity all 8.5.0-0ubuntu1 [17.0 kB] 155s Get:111 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-py all 1.11.0-2 [72.7 kB] 155s Get:112 http://ftpmaster.internal/ubuntu plucky/universe s390x libnorm1t64 s390x 1.5.9+dfsg-3.1build1 [158 kB] 155s Get:113 http://ftpmaster.internal/ubuntu plucky/universe s390x libpgm-5.3-0t64 s390x 5.3.128~dfsg-2.1build1 [169 kB] 155s Get:114 http://ftpmaster.internal/ubuntu plucky/main s390x libsodium23 s390x 1.0.18-1build3 [138 kB] 155s Get:115 http://ftpmaster.internal/ubuntu plucky/universe s390x libzmq5 s390x 4.3.5-1build2 [258 kB] 155s Get:116 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-zmq s390x 24.0.1-5build2 [379 kB] 155s Get:117 http://ftpmaster.internal/ubuntu plucky/universe s390x git-ubuntu all 1.1-1 [152 kB] 156s Fetched 23.5 MB in 4s (5404 kB/s) 156s Selecting previously unselected package libpython3.13-minimal:s390x. 156s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 55561 files and directories currently installed.) 156s Preparing to unpack .../000-libpython3.13-minimal_3.13.0-2_s390x.deb ... 156s Unpacking libpython3.13-minimal:s390x (3.13.0-2) ... 156s Selecting previously unselected package python3.13-minimal. 156s Preparing to unpack .../001-python3.13-minimal_3.13.0-2_s390x.deb ... 156s Unpacking python3.13-minimal (3.13.0-2) ... 156s Selecting previously unselected package libjs-jquery. 156s Preparing to unpack .../002-libjs-jquery_3.6.1+dfsg+~3.5.14-1_all.deb ... 156s Unpacking libjs-jquery (3.6.1+dfsg+~3.5.14-1) ... 156s Selecting previously unselected package libjs-jquery-hotkeys. 156s Preparing to unpack .../003-libjs-jquery-hotkeys_0~20130707+git2d51e3a9+dfsg-2.1_all.deb ... 156s Unpacking libjs-jquery-hotkeys (0~20130707+git2d51e3a9+dfsg-2.1) ... 156s Selecting previously unselected package python3-distro-info. 156s Preparing to unpack .../004-python3-distro-info_1.12_all.deb ... 156s Unpacking python3-distro-info (1.12) ... 156s Selecting previously unselected package dctrl-tools. 156s Preparing to unpack .../005-dctrl-tools_2.24-3build3_s390x.deb ... 156s Unpacking dctrl-tools (2.24-3build3) ... 156s Selecting previously unselected package debian-archive-keyring. 156s Preparing to unpack .../006-debian-archive-keyring_2023.4ubuntu1_all.deb ... 156s Unpacking debian-archive-keyring (2023.4ubuntu1) ... 156s Selecting previously unselected package libfile-dirlist-perl. 156s Preparing to unpack .../007-libfile-dirlist-perl_0.05-3_all.deb ... 156s Unpacking libfile-dirlist-perl (0.05-3) ... 156s Selecting previously unselected package libfile-which-perl. 156s Preparing to unpack .../008-libfile-which-perl_1.27-2_all.deb ... 156s Unpacking libfile-which-perl (1.27-2) ... 156s Selecting previously unselected package libfile-homedir-perl. 156s Preparing to unpack .../009-libfile-homedir-perl_1.006-2_all.deb ... 156s Unpacking libfile-homedir-perl (1.006-2) ... 156s Selecting previously unselected package libfile-touch-perl. 156s Preparing to unpack .../010-libfile-touch-perl_0.12-2_all.deb ... 156s Unpacking libfile-touch-perl (0.12-2) ... 156s Selecting previously unselected package libio-pty-perl. 156s Preparing to unpack .../011-libio-pty-perl_1%3a1.20-1build3_s390x.deb ... 156s Unpacking libio-pty-perl (1:1.20-1build3) ... 156s Selecting previously unselected package libipc-run-perl. 156s Preparing to unpack .../012-libipc-run-perl_20231003.0-2_all.deb ... 156s Unpacking libipc-run-perl (20231003.0-2) ... 156s Selecting previously unselected package libclass-method-modifiers-perl. 156s Preparing to unpack .../013-libclass-method-modifiers-perl_2.15-1_all.deb ... 156s Unpacking libclass-method-modifiers-perl (2.15-1) ... 156s Selecting previously unselected package libclass-xsaccessor-perl. 156s Preparing to unpack .../014-libclass-xsaccessor-perl_1.19-4build5_s390x.deb ... 156s Unpacking libclass-xsaccessor-perl (1.19-4build5) ... 156s Selecting previously unselected package libb-hooks-op-check-perl:s390x. 156s Preparing to unpack .../015-libb-hooks-op-check-perl_0.22-3build2_s390x.deb ... 156s Unpacking libb-hooks-op-check-perl:s390x (0.22-3build2) ... 156s Selecting previously unselected package libdynaloader-functions-perl. 156s Preparing to unpack .../016-libdynaloader-functions-perl_0.004-1_all.deb ... 156s Unpacking libdynaloader-functions-perl (0.004-1) ... 156s Selecting previously unselected package libdevel-callchecker-perl:s390x. 156s Preparing to unpack .../017-libdevel-callchecker-perl_0.009-1build1_s390x.deb ... 156s Unpacking libdevel-callchecker-perl:s390x (0.009-1build1) ... 156s Selecting previously unselected package libparams-classify-perl:s390x. 156s Preparing to unpack .../018-libparams-classify-perl_0.015-2build6_s390x.deb ... 156s Unpacking libparams-classify-perl:s390x (0.015-2build6) ... 156s Selecting previously unselected package libmodule-runtime-perl. 156s Preparing to unpack .../019-libmodule-runtime-perl_0.016-2_all.deb ... 156s Unpacking libmodule-runtime-perl (0.016-2) ... 156s Selecting previously unselected package libimport-into-perl. 156s Preparing to unpack .../020-libimport-into-perl_1.002005-2_all.deb ... 156s Unpacking libimport-into-perl (1.002005-2) ... 156s Selecting previously unselected package librole-tiny-perl. 156s Preparing to unpack .../021-librole-tiny-perl_2.002004-1_all.deb ... 156s Unpacking librole-tiny-perl (2.002004-1) ... 156s Selecting previously unselected package libsub-quote-perl. 156s Preparing to unpack .../022-libsub-quote-perl_2.006008-1ubuntu1_all.deb ... 156s Unpacking libsub-quote-perl (2.006008-1ubuntu1) ... 156s Selecting previously unselected package libmoo-perl. 156s Preparing to unpack .../023-libmoo-perl_2.005005-1_all.deb ... 156s Unpacking libmoo-perl (2.005005-1) ... 156s Selecting previously unselected package libencode-locale-perl. 156s Preparing to unpack .../024-libencode-locale-perl_1.05-3_all.deb ... 156s Unpacking libencode-locale-perl (1.05-3) ... 156s Selecting previously unselected package libtimedate-perl. 156s Preparing to unpack .../025-libtimedate-perl_2.3300-2_all.deb ... 156s Unpacking libtimedate-perl (2.3300-2) ... 156s Selecting previously unselected package libhttp-date-perl. 156s Preparing to unpack .../026-libhttp-date-perl_6.06-1_all.deb ... 156s Unpacking libhttp-date-perl (6.06-1) ... 156s Selecting previously unselected package libfile-listing-perl. 156s Preparing to unpack .../027-libfile-listing-perl_6.16-1_all.deb ... 156s Unpacking libfile-listing-perl (6.16-1) ... 156s Selecting previously unselected package libhtml-tagset-perl. 156s Preparing to unpack .../028-libhtml-tagset-perl_3.24-1_all.deb ... 156s Unpacking libhtml-tagset-perl (3.24-1) ... 156s Selecting previously unselected package liburi-perl. 156s Preparing to unpack .../029-liburi-perl_5.30-1_all.deb ... 156s Unpacking liburi-perl (5.30-1) ... 156s Selecting previously unselected package libhtml-parser-perl:s390x. 156s Preparing to unpack .../030-libhtml-parser-perl_3.83-1build1_s390x.deb ... 156s Unpacking libhtml-parser-perl:s390x (3.83-1build1) ... 156s Selecting previously unselected package libhtml-tree-perl. 156s Preparing to unpack .../031-libhtml-tree-perl_5.07-3_all.deb ... 156s Unpacking libhtml-tree-perl (5.07-3) ... 156s Selecting previously unselected package libclone-perl:s390x. 156s Preparing to unpack .../032-libclone-perl_0.47-1_s390x.deb ... 156s Unpacking libclone-perl:s390x (0.47-1) ... 156s Selecting previously unselected package libio-html-perl. 156s Preparing to unpack .../033-libio-html-perl_1.004-3_all.deb ... 156s Unpacking libio-html-perl (1.004-3) ... 156s Selecting previously unselected package liblwp-mediatypes-perl. 156s Preparing to unpack .../034-liblwp-mediatypes-perl_6.04-2_all.deb ... 156s Unpacking liblwp-mediatypes-perl (6.04-2) ... 156s Selecting previously unselected package libhttp-message-perl. 156s Preparing to unpack .../035-libhttp-message-perl_7.00-2ubuntu1_all.deb ... 156s Unpacking libhttp-message-perl (7.00-2ubuntu1) ... 156s Selecting previously unselected package libhttp-cookies-perl. 156s Preparing to unpack .../036-libhttp-cookies-perl_6.11-1_all.deb ... 156s Unpacking libhttp-cookies-perl (6.11-1) ... 156s Selecting previously unselected package libhttp-negotiate-perl. 156s Preparing to unpack .../037-libhttp-negotiate-perl_6.01-2_all.deb ... 156s Unpacking libhttp-negotiate-perl (6.01-2) ... 156s Selecting previously unselected package perl-openssl-defaults:s390x. 156s Preparing to unpack .../038-perl-openssl-defaults_7build3_s390x.deb ... 156s Unpacking perl-openssl-defaults:s390x (7build3) ... 156s Selecting previously unselected package libnet-ssleay-perl:s390x. 156s Preparing to unpack .../039-libnet-ssleay-perl_1.94-2_s390x.deb ... 156s Unpacking libnet-ssleay-perl:s390x (1.94-2) ... 156s Selecting previously unselected package libio-socket-ssl-perl. 156s Preparing to unpack .../040-libio-socket-ssl-perl_2.089-1_all.deb ... 156s Unpacking libio-socket-ssl-perl (2.089-1) ... 156s Selecting previously unselected package libnet-http-perl. 156s Preparing to unpack .../041-libnet-http-perl_6.23-1_all.deb ... 156s Unpacking libnet-http-perl (6.23-1) ... 156s Selecting previously unselected package liblwp-protocol-https-perl. 156s Preparing to unpack .../042-liblwp-protocol-https-perl_6.14-1_all.deb ... 156s Unpacking liblwp-protocol-https-perl (6.14-1) ... 156s Selecting previously unselected package libtry-tiny-perl. 156s Preparing to unpack .../043-libtry-tiny-perl_0.32-1_all.deb ... 156s Unpacking libtry-tiny-perl (0.32-1) ... 156s Selecting previously unselected package libwww-robotrules-perl. 156s Preparing to unpack .../044-libwww-robotrules-perl_6.02-1_all.deb ... 156s Unpacking libwww-robotrules-perl (6.02-1) ... 156s Selecting previously unselected package libwww-perl. 156s Preparing to unpack .../045-libwww-perl_6.77-1_all.deb ... 156s Unpacking libwww-perl (6.77-1) ... 156s Selecting previously unselected package patchutils. 156s Preparing to unpack .../046-patchutils_0.4.2-1build3_s390x.deb ... 156s Unpacking patchutils (0.4.2-1build3) ... 156s Selecting previously unselected package wdiff. 156s Preparing to unpack .../047-wdiff_1.2.2-6build1_s390x.deb ... 156s Unpacking wdiff (1.2.2-6build1) ... 156s Selecting previously unselected package devscripts. 156s Preparing to unpack .../048-devscripts_2.24.3_all.deb ... 157s Unpacking devscripts (2.24.3) ... 157s Selecting previously unselected package diffstat. 157s Preparing to unpack .../049-diffstat_1.67-1_s390x.deb ... 157s Unpacking diffstat (1.67-1) ... 157s Selecting previously unselected package python3-debian. 157s Preparing to unpack .../050-python3-debian_0.1.49ubuntu3_all.deb ... 157s Unpacking python3-debian (0.1.49ubuntu3) ... 157s Selecting previously unselected package python3-gpg. 157s Preparing to unpack .../051-python3-gpg_1.24.0-2ubuntu1_s390x.deb ... 157s Unpacking python3-gpg (1.24.0-2ubuntu1) ... 157s Selecting previously unselected package python3-xdg. 157s Preparing to unpack .../052-python3-xdg_0.28-2_all.deb ... 157s Unpacking python3-xdg (0.28-2) ... 157s Selecting previously unselected package dput. 157s Preparing to unpack .../053-dput_1.2.4ubuntu1_all.deb ... 157s Unpacking dput (1.2.4ubuntu1) ... 157s Selecting previously unselected package libgomp1:s390x. 157s Preparing to unpack .../054-libgomp1_14.2.0-8ubuntu1_s390x.deb ... 157s Unpacking libgomp1:s390x (14.2.0-8ubuntu1) ... 157s Selecting previously unselected package gettext. 157s Preparing to unpack .../055-gettext_0.22.5-2_s390x.deb ... 157s Unpacking gettext (0.22.5-2) ... 157s Selecting previously unselected package liberror-perl. 157s Preparing to unpack .../056-liberror-perl_0.17029-2_all.deb ... 157s Unpacking liberror-perl (0.17029-2) ... 157s Selecting previously unselected package git-man. 157s Preparing to unpack .../057-git-man_1%3a2.45.2-1.2ubuntu1_all.deb ... 157s Unpacking git-man (1:2.45.2-1.2ubuntu1) ... 157s Selecting previously unselected package git. 157s Preparing to unpack .../058-git_1%3a2.45.2-1.2ubuntu1_s390x.deb ... 157s Unpacking git (1:2.45.2-1.2ubuntu1) ... 157s Selecting previously unselected package python3-dateutil. 157s Preparing to unpack .../059-python3-dateutil_2.9.0-3_all.deb ... 157s Unpacking python3-dateutil (2.9.0-3) ... 157s Selecting previously unselected package python3-importlib-metadata. 157s Preparing to unpack .../060-python3-importlib-metadata_8.5.0-1_all.deb ... 157s Unpacking python3-importlib-metadata (8.5.0-1) ... 157s Selecting previously unselected package git-buildpackage. 157s Preparing to unpack .../061-git-buildpackage_0.9.35_all.deb ... 157s Unpacking git-buildpackage (0.9.35) ... 157s Selecting previously unselected package libsys-cpuaffinity-perl. 157s Preparing to unpack .../062-libsys-cpuaffinity-perl_1.13~03-2build4_s390x.deb ... 157s Unpacking libsys-cpuaffinity-perl (1.13~03-2build4) ... 157s Selecting previously unselected package pbzip2. 157s Preparing to unpack .../063-pbzip2_1.1.13-1build1_s390x.deb ... 157s Unpacking pbzip2 (1.1.13-1build1) ... 157s Selecting previously unselected package pixz. 157s Preparing to unpack .../064-pixz_1.0.7-3_s390x.deb ... 157s Unpacking pixz (1.0.7-3) ... 157s Selecting previously unselected package libxdelta2t64:s390x. 157s Preparing to unpack .../065-libxdelta2t64_1.1.3-10.7_s390x.deb ... 157s Unpacking libxdelta2t64:s390x (1.1.3-10.7) ... 157s Selecting previously unselected package xdelta. 157s Preparing to unpack .../066-xdelta_1.1.3-10.7_s390x.deb ... 157s Unpacking xdelta (1.1.3-10.7) ... 157s Selecting previously unselected package xdelta3. 157s Preparing to unpack .../067-xdelta3_3.0.11-dfsg-1.2_s390x.deb ... 157s Unpacking xdelta3 (3.0.11-dfsg-1.2) ... 157s Selecting previously unselected package pristine-tar. 157s Preparing to unpack .../068-pristine-tar_1.50+nmu2build1_s390x.deb ... 157s Unpacking pristine-tar (1.50+nmu2build1) ... 157s Selecting previously unselected package quilt. 157s Preparing to unpack .../069-quilt_0.68-1_all.deb ... 157s Unpacking quilt (0.68-1) ... 157s Selecting previously unselected package python3-debianbts. 157s Preparing to unpack .../070-python3-debianbts_4.1.1_all.deb ... 157s Unpacking python3-debianbts (4.1.1) ... 157s Selecting previously unselected package python3-jeepney. 157s Preparing to unpack .../071-python3-jeepney_0.8.0-4_all.deb ... 157s Unpacking python3-jeepney (0.8.0-4) ... 157s Selecting previously unselected package python3-secretstorage. 157s Preparing to unpack .../072-python3-secretstorage_3.3.3-3_all.deb ... 157s Unpacking python3-secretstorage (3.3.3-3) ... 157s Selecting previously unselected package python3-jaraco.classes. 157s Preparing to unpack .../073-python3-jaraco.classes_3.4.0-1_all.deb ... 157s Unpacking python3-jaraco.classes (3.4.0-1) ... 157s Selecting previously unselected package python3-keyring. 157s Preparing to unpack .../074-python3-keyring_25.4.1-1_all.deb ... 157s Unpacking python3-keyring (25.4.1-1) ... 157s Selecting previously unselected package python3-launchpadlib-desktop. 157s Preparing to unpack .../075-python3-launchpadlib-desktop_2.0.0-1_all.deb ... 157s Unpacking python3-launchpadlib-desktop (2.0.0-1) ... 157s Selecting previously unselected package python3-ubuntutools. 157s Preparing to unpack .../076-python3-ubuntutools_0.203_all.deb ... 157s Unpacking python3-ubuntutools (0.203) ... 157s Selecting previously unselected package ubuntu-dev-tools. 157s Preparing to unpack .../077-ubuntu-dev-tools_0.203_all.deb ... 157s Unpacking ubuntu-dev-tools (0.203) ... 157s Selecting previously unselected package python3-astroid. 157s Preparing to unpack .../078-python3-astroid_3.3.5-1_all.deb ... 157s Unpacking python3-astroid (3.3.5-1) ... 157s Selecting previously unselected package python3-isort. 157s Preparing to unpack .../079-python3-isort_5.13.2-2_all.deb ... 157s Unpacking python3-isort (5.13.2-2) ... 157s Selecting previously unselected package python3-mypy-extensions. 157s Preparing to unpack .../080-python3-mypy-extensions_1.0.0-1_all.deb ... 157s Unpacking python3-mypy-extensions (1.0.0-1) ... 157s Selecting previously unselected package libjs-underscore. 157s Preparing to unpack .../081-libjs-underscore_1.13.4~dfsg+~1.11.4-3_all.deb ... 157s Unpacking libjs-underscore (1.13.4~dfsg+~1.11.4-3) ... 157s Selecting previously unselected package libjs-sphinxdoc. 157s Preparing to unpack .../082-libjs-sphinxdoc_7.4.7-4_all.deb ... 157s Unpacking libjs-sphinxdoc (7.4.7-4) ... 157s Selecting previously unselected package python3-logilab-common. 157s Preparing to unpack .../083-python3-logilab-common_2.0.0-1_all.deb ... 157s Unpacking python3-logilab-common (2.0.0-1) ... 157s Selecting previously unselected package python3-dill. 157s Preparing to unpack .../084-python3-dill_0.3.9-1_all.deb ... 157s Unpacking python3-dill (0.3.9-1) ... 157s Selecting previously unselected package python3-mccabe. 157s Preparing to unpack .../085-python3-mccabe_0.7.0-1_all.deb ... 157s Unpacking python3-mccabe (0.7.0-1) ... 157s Selecting previously unselected package python3-platformdirs. 157s Preparing to unpack .../086-python3-platformdirs_4.3.6-1_all.deb ... 157s Unpacking python3-platformdirs (4.3.6-1) ... 157s Selecting previously unselected package python3-tomlkit. 157s Preparing to unpack .../087-python3-tomlkit_0.13.2-1_all.deb ... 157s Unpacking python3-tomlkit (0.13.2-1) ... 157s Selecting previously unselected package pylint. 157s Preparing to unpack .../088-pylint_3.3.1-2_all.deb ... 157s Unpacking pylint (3.3.1-2) ... 157s Selecting previously unselected package python3-argcomplete. 157s Preparing to unpack .../089-python3-argcomplete_3.5.1-1ubuntu1_all.deb ... 157s Unpacking python3-argcomplete (3.5.1-1ubuntu1) ... 157s Selecting previously unselected package python3-cachetools. 157s Preparing to unpack .../090-python3-cachetools_5.3.3-1_all.deb ... 157s Unpacking python3-cachetools (5.3.3-1) ... 157s Selecting previously unselected package python3-pycryptodome. 157s Preparing to unpack .../091-python3-pycryptodome_3.20.0+dfsg-3build1_s390x.deb ... 157s Unpacking python3-pycryptodome (3.20.0+dfsg-3build1) ... 157s Selecting previously unselected package python3-keyrings.alt. 157s Preparing to unpack .../092-python3-keyrings.alt_5.0.2-1_all.deb ... 157s Unpacking python3-keyrings.alt (5.0.2-1) ... 157s Selecting previously unselected package libhttp-parser2.9:s390x. 157s Preparing to unpack .../093-libhttp-parser2.9_2.9.4-6build1_s390x.deb ... 157s Unpacking libhttp-parser2.9:s390x (2.9.4-6build1) ... 157s Selecting previously unselected package libgit2-1.8:s390x. 157s Preparing to unpack .../094-libgit2-1.8_1.8.4+ds-1ubuntu1_s390x.deb ... 157s Unpacking libgit2-1.8:s390x (1.8.4+ds-1ubuntu1) ... 157s Selecting previously unselected package python3-pygit2. 157s Preparing to unpack .../095-python3-pygit2_1.16.0-2_s390x.deb ... 157s Unpacking python3-pygit2 (1.16.0-2) ... 157s Selecting previously unselected package python3-iniconfig. 157s Preparing to unpack .../096-python3-iniconfig_1.1.1-2_all.deb ... 157s Unpacking python3-iniconfig (1.1.1-2) ... 157s Selecting previously unselected package python3-packaging. 157s Preparing to unpack .../097-python3-packaging_24.2-1_all.deb ... 157s Unpacking python3-packaging (24.2-1) ... 157s Selecting previously unselected package python3-pluggy. 157s Preparing to unpack .../098-python3-pluggy_1.5.0-1_all.deb ... 157s Unpacking python3-pluggy (1.5.0-1) ... 157s Selecting previously unselected package python3-pytest. 157s Preparing to unpack .../099-python3-pytest_8.3.3-1_all.deb ... 157s Unpacking python3-pytest (8.3.3-1) ... 157s Selecting previously unselected package libpython3.13-stdlib:s390x. 157s Preparing to unpack .../100-libpython3.13-stdlib_3.13.0-2_s390x.deb ... 157s Unpacking libpython3.13-stdlib:s390x (3.13.0-2) ... 157s Selecting previously unselected package python3.13. 157s Preparing to unpack .../101-python3.13_3.13.0-2_s390x.deb ... 157s Unpacking python3.13 (3.13.0-2) ... 157s Selecting previously unselected package python3-coverage. 157s Preparing to unpack .../102-python3-coverage_7.4.4+dfsg1-0ubuntu3_s390x.deb ... 157s Unpacking python3-coverage (7.4.4+dfsg1-0ubuntu3) ... 157s Selecting previously unselected package libjs-jquery-isonscreen. 157s Preparing to unpack .../103-libjs-jquery-isonscreen_1.2.0-1.1_all.deb ... 157s Unpacking libjs-jquery-isonscreen (1.2.0-1.1) ... 157s Selecting previously unselected package libjs-jquery-metadata. 157s Preparing to unpack .../104-libjs-jquery-metadata_12-4_all.deb ... 157s Unpacking libjs-jquery-metadata (12-4) ... 157s Selecting previously unselected package libjs-jquery-tablesorter. 157s Preparing to unpack .../105-libjs-jquery-tablesorter_1%3a2.31.3+dfsg1-4_all.deb ... 157s Unpacking libjs-jquery-tablesorter (1:2.31.3+dfsg1-4) ... 157s Selecting previously unselected package libjs-jquery-throttle-debounce. 157s Preparing to unpack .../106-libjs-jquery-throttle-debounce_1.1+dfsg.1-2_all.deb ... 157s Unpacking libjs-jquery-throttle-debounce (1.1+dfsg.1-2) ... 157s Selecting previously unselected package python3-pytest-cov. 157s Preparing to unpack .../107-python3-pytest-cov_5.0.0-1_all.deb ... 157s Unpacking python3-pytest-cov (5.0.0-1) ... 157s Selecting previously unselected package python3-tenacity. 157s Preparing to unpack .../108-python3-tenacity_8.5.0-0ubuntu1_all.deb ... 157s Unpacking python3-tenacity (8.5.0-0ubuntu1) ... 157s Selecting previously unselected package python3-py. 157s Preparing to unpack .../109-python3-py_1.11.0-2_all.deb ... 157s Unpacking python3-py (1.11.0-2) ... 157s Selecting previously unselected package libnorm1t64:s390x. 157s Preparing to unpack .../110-libnorm1t64_1.5.9+dfsg-3.1build1_s390x.deb ... 157s Unpacking libnorm1t64:s390x (1.5.9+dfsg-3.1build1) ... 157s Selecting previously unselected package libpgm-5.3-0t64:s390x. 157s Preparing to unpack .../111-libpgm-5.3-0t64_5.3.128~dfsg-2.1build1_s390x.deb ... 157s Unpacking libpgm-5.3-0t64:s390x (5.3.128~dfsg-2.1build1) ... 157s Selecting previously unselected package libsodium23:s390x. 157s Preparing to unpack .../112-libsodium23_1.0.18-1build3_s390x.deb ... 157s Unpacking libsodium23:s390x (1.0.18-1build3) ... 157s Selecting previously unselected package libzmq5:s390x. 157s Preparing to unpack .../113-libzmq5_4.3.5-1build2_s390x.deb ... 157s Unpacking libzmq5:s390x (4.3.5-1build2) ... 157s Selecting previously unselected package python3-zmq. 157s Preparing to unpack .../114-python3-zmq_24.0.1-5build2_s390x.deb ... 157s Unpacking python3-zmq (24.0.1-5build2) ... 157s Selecting previously unselected package git-ubuntu. 157s Preparing to unpack .../115-git-ubuntu_1.1-1_all.deb ... 157s Unpacking git-ubuntu (1.1-1) ... 158s Selecting previously unselected package autopkgtest-satdep. 158s Preparing to unpack .../116-1-autopkgtest-satdep.deb ... 158s Unpacking autopkgtest-satdep (0) ... 158s Setting up python3-iniconfig (1.1.1-2) ... 158s Setting up libnorm1t64:s390x (1.5.9+dfsg-3.1build1) ... 158s Setting up wdiff (1.2.2-6build1) ... 158s Setting up libfile-which-perl (1.27-2) ... 158s Setting up libsodium23:s390x (1.0.18-1build3) ... 158s Setting up python3-jaraco.classes (3.4.0-1) ... 158s Setting up libxdelta2t64:s390x (1.1.3-10.7) ... 158s Setting up python3-importlib-metadata (8.5.0-1) ... 158s Setting up xdelta (1.1.3-10.7) ... 158s Setting up libsys-cpuaffinity-perl (1.13~03-2build4) ... 158s Setting up python3-py (1.11.0-2) ... 158s Setting up libdynaloader-functions-perl (0.004-1) ... 158s Setting up libclass-method-modifiers-perl (2.15-1) ... 158s Setting up libio-pty-perl (1:1.20-1build3) ... 158s Setting up python3-cachetools (5.3.3-1) ... 158s Setting up python3-debianbts (4.1.1) ... 158s Setting up libclone-perl:s390x (0.47-1) ... 158s Setting up libhtml-tagset-perl (3.24-1) ... 158s Setting up python3-mypy-extensions (1.0.0-1) ... 158s Setting up python3-pycryptodome (3.20.0+dfsg-3build1) ... 159s Setting up python3-tenacity (8.5.0-0ubuntu1) ... 159s Setting up liblwp-mediatypes-perl (6.04-2) ... 159s Setting up debian-archive-keyring (2023.4ubuntu1) ... 159s Setting up libtry-tiny-perl (0.32-1) ... 159s Setting up perl-openssl-defaults:s390x (7build3) ... 159s Setting up libencode-locale-perl (1.05-3) ... 159s Setting up libjs-jquery-throttle-debounce (1.1+dfsg.1-2) ... 159s Setting up libgomp1:s390x (14.2.0-8ubuntu1) ... 159s Setting up python3-xdg (0.28-2) ... 159s Setting up pbzip2 (1.1.13-1build1) ... 159s Setting up python3-platformdirs (4.3.6-1) ... 159s Setting up liberror-perl (0.17029-2) ... 159s Setting up libpython3.13-minimal:s390x (3.13.0-2) ... 159s Setting up patchutils (0.4.2-1build3) ... 159s Setting up libpgm-5.3-0t64:s390x (5.3.128~dfsg-2.1build1) ... 159s Setting up python3-packaging (24.2-1) ... 159s Setting up python3-gpg (1.24.0-2ubuntu1) ... 159s Setting up python3-dill (0.3.9-1) ... 159s Setting up python3-debian (0.1.49ubuntu3) ... 159s Setting up diffstat (1.67-1) ... 159s Setting up libio-html-perl (1.004-3) ... 159s Setting up libb-hooks-op-check-perl:s390x (0.22-3build2) ... 159s Setting up libipc-run-perl (20231003.0-2) ... 159s Setting up python3-jeepney (0.8.0-4) ... 160s Setting up python3-isort (5.13.2-2) ... 160s Setting up python3-pluggy (1.5.0-1) ... 160s Setting up libtimedate-perl (2.3300-2) ... 160s Setting up python3-astroid (3.3.5-1) ... 160s Setting up xdelta3 (3.0.11-dfsg-1.2) ... 160s Setting up pixz (1.0.7-3) ... 160s Setting up librole-tiny-perl (2.002004-1) ... 160s Setting up python3.13-minimal (3.13.0-2) ... 161s Setting up git-man (1:2.45.2-1.2ubuntu1) ... 161s Setting up python3-dateutil (2.9.0-3) ... 161s Setting up python3-mccabe (0.7.0-1) ... 161s Setting up libsub-quote-perl (2.006008-1ubuntu1) ... 161s Setting up libclass-xsaccessor-perl (1.19-4build5) ... 161s Setting up libjs-jquery (3.6.1+dfsg+~3.5.14-1) ... 161s Setting up libfile-dirlist-perl (0.05-3) ... 161s Setting up libjs-jquery-hotkeys (0~20130707+git2d51e3a9+dfsg-2.1) ... 161s Setting up python3-argcomplete (3.5.1-1ubuntu1) ... 161s Setting up libfile-homedir-perl (1.006-2) ... 161s Setting up python3-tomlkit (0.13.2-1) ... 161s Setting up python3-distro-info (1.12) ... 161s Setting up libpython3.13-stdlib:s390x (3.13.0-2) ... 161s Setting up liburi-perl (5.30-1) ... 161s Setting up pristine-tar (1.50+nmu2build1) ... 161s Setting up libfile-touch-perl (0.12-2) ... 161s Setting up dctrl-tools (2.24-3build3) ... 161s Setting up libhttp-parser2.9:s390x (2.9.4-6build1) ... 161s Setting up libjs-underscore (1.13.4~dfsg+~1.11.4-3) ... 161s Setting up libnet-ssleay-perl:s390x (1.94-2) ... 162s Setting up libhttp-date-perl (6.06-1) ... 162s Setting up gettext (0.22.5-2) ... 162s Setting up libfile-listing-perl (6.16-1) ... 162s Setting up libzmq5:s390x (4.3.5-1build2) ... 162s Setting up python3.13 (3.13.0-2) ... 162s Setting up python3-pytest (8.3.3-1) ... 163s Setting up libnet-http-perl (6.23-1) ... 163s Setting up python3-coverage (7.4.4+dfsg1-0ubuntu3) ... 163s Setting up quilt (0.68-1) ... 163s Setting up libdevel-callchecker-perl:s390x (0.009-1build1) ... 163s Setting up dput (1.2.4ubuntu1) ... 163s Setting up python3-secretstorage (3.3.3-3) ... 163s Setting up python3-zmq (24.0.1-5build2) ... 163s Setting up libjs-jquery-metadata (12-4) ... 163s Setting up libgit2-1.8:s390x (1.8.4+ds-1ubuntu1) ... 163s Setting up libjs-jquery-isonscreen (1.2.0-1.1) ... 163s Setting up git (1:2.45.2-1.2ubuntu1) ... 163s Setting up libjs-sphinxdoc (7.4.7-4) ... 163s Setting up libwww-robotrules-perl (6.02-1) ... 163s Setting up libjs-jquery-tablesorter (1:2.31.3+dfsg1-4) ... 163s Setting up libhtml-parser-perl:s390x (3.83-1build1) ... 163s Setting up python3-keyring (25.4.1-1) ... 163s Setting up libio-socket-ssl-perl (2.089-1) ... 163s Setting up libhttp-message-perl (7.00-2ubuntu1) ... 163s Setting up libhttp-negotiate-perl (6.01-2) ... 163s Setting up libhttp-cookies-perl (6.11-1) ... 163s Setting up python3-logilab-common (2.0.0-1) ... 164s Setting up python3-pygit2 (1.16.0-2) ... 164s Setting up libhtml-tree-perl (5.07-3) ... 164s Setting up libparams-classify-perl:s390x (0.015-2build6) ... 164s Setting up python3-pytest-cov (5.0.0-1) ... 164s Setting up libmodule-runtime-perl (0.016-2) ... 164s Setting up python3-launchpadlib-desktop (2.0.0-1) ... 164s Setting up python3-keyrings.alt (5.0.2-1) ... 164s Setting up pylint (3.3.1-2) ... 164s Setting up libimport-into-perl (1.002005-2) ... 164s Setting up libmoo-perl (2.005005-1) ... 164s Setting up python3-ubuntutools (0.203) ... 164s Setting up liblwp-protocol-https-perl (6.14-1) ... 164s Setting up libwww-perl (6.77-1) ... 164s Setting up devscripts (2.24.3) ... 164s Setting up git-buildpackage (0.9.35) ... 165s Setting up ubuntu-dev-tools (0.203) ... 165s Setting up git-ubuntu (1.1-1) ... 165s Setting up autopkgtest-satdep (0) ... 165s Processing triggers for libc-bin (2.40-1ubuntu3) ... 165s Processing triggers for systemd (256.5-2ubuntu4) ... 165s Processing triggers for man-db (2.13.0-1) ... 166s Processing triggers for install-info (7.1.1-1) ... 169s (Reading database ... 61788 files and directories currently installed.) 169s Removing autopkgtest-satdep (0) ... 169s autopkgtest [09:36:29]: test self-test: TEST_SYSTEM_TREE=1 /usr/share/git-ubuntu/self-test 169s autopkgtest [09:36:29]: test self-test: [----------------------- 169s Testing git-ubuntu system installation. 169s Testing tree in /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu 169s Working dir /tmp/autopkgtest.zp0YHR/build.2Er/src 178s pylint passed! 184s ============================= test session starts ============================== 184s platform linux -- Python 3.12.7, pytest-8.3.3, pluggy-1.5.0 184s rootdir: /tmp/autopkgtest.zp0YHR/build.2Er/src 184s configfile: pytest.ini 184s plugins: typeguard-4.4.1, cov-5.0.0 184s collected 459 items 184s 184s gitubuntu/build.py ..... [ 1%] 185s gitubuntu/git_repository_test.py ....................................... [ 9%] 194s ...FFFFF.FFF...........................F.FFFFFFF.FFF.......FFFFFFFFFF [ 24%] 194s gitubuntu/importer_service_test.py ..................................... [ 32%] 194s ..... [ 33%] 194s gitubuntu/importer_service_worker_test.py ... [ 34%] 201s gitubuntu/importer_tag_test.py FFFFFFFFFxF [ 36%] 213s gitubuntu/importer_test.py .......FF.FFFFFFFFFFF.FFF.FFF..FFFFFFFFFFFFFF [ 46%] 223s FFFFxx..FF.................................................F....FFFF. [ 61%] 224s gitubuntu/integration_test.py ...............Fsss [ 65%] 224s gitubuntu/prepare_upload_test.py .............. [ 68%] 225s gitubuntu/repo_builder_test.py .........FF.F................ [ 75%] 225s gitubuntu/rich_history_test.py FFF.FFFF [ 76%] 229s gitubuntu/source_builder_test.py .FF.......FFFFFFFFF.. [ 81%] 229s gitubuntu/source_information_test.py ................................... [ 89%] 229s ... [ 89%] 229s gitubuntu/versioning.py ............................................... [100%] 229s 229s =================================== FAILURES =================================== 229s ___________________ test_follow_symlinks_to_blob[0] ____________________ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmpwi2asd0v/.git/') 229s tree_func = at 0x3ff8caf11c0> 229s 229s @pytest.mark.parametrize('tree_func', [ 229s # The tree_func parameter is a function that accepts a mock Blob that is to 229s # represent the changelog blob itself and returns a mock Tree with the mock 229s # Blob embedded somewhere within it. The test function can then ensure that 229s # follow_symlinks_to_blob can correctly find the changelog Blob given the 229s # Tree. 229s 229s # Of course this is only expected to work if, after checking out the Tree, 229s # "cat debian/changelog" would work. But this allows us to test the various 229s # permutations of symlink following in Trees that _are_ valid. 229s 229s # Simple case 229s lambda b: Tree({ 229s 'debian': Tree({'changelog': b}), 229s }), 229s 229s # Symlink in debian/ 229s lambda b: Tree({ 229s 'debian': Tree({ 229s 'changelog.real': b, 229s 'changelog': Symlink('changelog.real'), 229s }), 229s }), 229s 229s # Symlink to parent directory 229s lambda b: Tree({ 229s 'changelog': b, 229s 'debian': Tree({ 229s 'changelog': Symlink('../changelog'), 229s }) 229s }), 229s 229s # Symlink to subdirectory 229s lambda b: Tree({ 229s 'debian': Tree({ 229s 'changelog': Symlink('subdirectory/changelog'), 229s 'subdirectory': Tree({'changelog': b}), 229s }) 229s }), 229s 229s # debian/ itself is a symlink to a different directory 229s lambda b: Tree({ 229s 'pkg': Tree({'changelog': b}), 229s 'debian': Symlink('pkg'), 229s }) 229s ]) 229s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 229s blob = Blob(b'') 229s blob_id = blob.write(pygit2_repo) 229s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 229s > result_blob = target.follow_symlinks_to_blob( 229s pygit2_repo, 229s tree, 229s 'debian/changelog', 229s ) 229s 229s gitubuntu/git_repository_test.py:342: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 229s return _follow_symlinks_to_blob( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s repo = pygit2.Repository('/tmp/tmpwi2asd0v/.git/') 229s top_tree_object = 229s search_path = 'debian/changelog' 229s _rel_tree = 229s _rel_path = '' 229s 229s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 229s _rel_tree=None, _rel_path='' 229s ): 229s '''Recursively follow a path down a tree, following symlinks, to find blob 229s 229s repo: pygit2.Repository object 229s top_tree: pygit2.Tree object of the top of the tree structure 229s search_path: '/'-separated path string of blob to find 229s _rel_tree: (internal) which tree to look further into 229s _rel_path: (internal) the path we are in so far 229s ''' 229s 229s NORMAL_BLOB_MODES = set([ 229s pygit2.GIT_FILEMODE_BLOB, 229s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 229s ]) 229s 229s _rel_tree = _rel_tree or top_tree_object 229s head, tail = posixpath.split(search_path) 229s 229s # A traditional functional split would put a single entry in head with tail 229s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 229s # to make it appear to have traditional semantics. 229s if not head: 229s head = tail 229s tail = None 229s 229s entry = _rel_tree[head] 229s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s gitubuntu/git_repository.py:68: AttributeError 229s ___________________ test_follow_symlinks_to_blob[1] ____________________ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmp79sbiw2d/.git/') 229s tree_func = at 0x3ff8caf1260> 229s 229s @pytest.mark.parametrize('tree_func', [ 229s # The tree_func parameter is a function that accepts a mock Blob that is to 229s # represent the changelog blob itself and returns a mock Tree with the mock 229s # Blob embedded somewhere within it. The test function can then ensure that 229s # follow_symlinks_to_blob can correctly find the changelog Blob given the 229s # Tree. 229s 229s # Of course this is only expected to work if, after checking out the Tree, 229s # "cat debian/changelog" would work. But this allows us to test the various 229s # permutations of symlink following in Trees that _are_ valid. 229s 229s # Simple case 229s lambda b: Tree({ 229s 'debian': Tree({'changelog': b}), 229s }), 229s 229s # Symlink in debian/ 229s lambda b: Tree({ 229s 'debian': Tree({ 229s 'changelog.real': b, 229s 'changelog': Symlink('changelog.real'), 229s }), 229s }), 229s 229s # Symlink to parent directory 229s lambda b: Tree({ 229s 'changelog': b, 229s 'debian': Tree({ 229s 'changelog': Symlink('../changelog'), 229s }) 229s }), 229s 229s # Symlink to subdirectory 229s lambda b: Tree({ 229s 'debian': Tree({ 229s 'changelog': Symlink('subdirectory/changelog'), 229s 'subdirectory': Tree({'changelog': b}), 229s }) 229s }), 229s 229s # debian/ itself is a symlink to a different directory 229s lambda b: Tree({ 229s 'pkg': Tree({'changelog': b}), 229s 'debian': Symlink('pkg'), 229s }) 229s ]) 229s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 229s blob = Blob(b'') 229s blob_id = blob.write(pygit2_repo) 229s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 229s > result_blob = target.follow_symlinks_to_blob( 229s pygit2_repo, 229s tree, 229s 'debian/changelog', 229s ) 229s 229s gitubuntu/git_repository_test.py:342: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 229s return _follow_symlinks_to_blob( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s repo = pygit2.Repository('/tmp/tmp79sbiw2d/.git/') 229s top_tree_object = 229s search_path = 'debian/changelog' 229s _rel_tree = 229s _rel_path = '' 229s 229s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 229s _rel_tree=None, _rel_path='' 229s ): 229s '''Recursively follow a path down a tree, following symlinks, to find blob 229s 229s repo: pygit2.Repository object 229s top_tree: pygit2.Tree object of the top of the tree structure 229s search_path: '/'-separated path string of blob to find 229s _rel_tree: (internal) which tree to look further into 229s _rel_path: (internal) the path we are in so far 229s ''' 229s 229s NORMAL_BLOB_MODES = set([ 229s pygit2.GIT_FILEMODE_BLOB, 229s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 229s ]) 229s 229s _rel_tree = _rel_tree or top_tree_object 229s head, tail = posixpath.split(search_path) 229s 229s # A traditional functional split would put a single entry in head with tail 229s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 229s # to make it appear to have traditional semantics. 229s if not head: 229s head = tail 229s tail = None 229s 229s entry = _rel_tree[head] 229s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s gitubuntu/git_repository.py:68: AttributeError 229s ___________________ test_follow_symlinks_to_blob[2] ____________________ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmpsws8sz9b/.git/') 229s tree_func = at 0x3ff8caf1300> 229s 229s @pytest.mark.parametrize('tree_func', [ 229s # The tree_func parameter is a function that accepts a mock Blob that is to 229s # represent the changelog blob itself and returns a mock Tree with the mock 229s # Blob embedded somewhere within it. The test function can then ensure that 229s # follow_symlinks_to_blob can correctly find the changelog Blob given the 229s # Tree. 229s 229s # Of course this is only expected to work if, after checking out the Tree, 229s # "cat debian/changelog" would work. But this allows us to test the various 229s # permutations of symlink following in Trees that _are_ valid. 229s 229s # Simple case 229s lambda b: Tree({ 229s 'debian': Tree({'changelog': b}), 229s }), 229s 229s # Symlink in debian/ 229s lambda b: Tree({ 229s 'debian': Tree({ 229s 'changelog.real': b, 229s 'changelog': Symlink('changelog.real'), 229s }), 229s }), 229s 229s # Symlink to parent directory 229s lambda b: Tree({ 229s 'changelog': b, 229s 'debian': Tree({ 229s 'changelog': Symlink('../changelog'), 229s }) 229s }), 229s 229s # Symlink to subdirectory 229s lambda b: Tree({ 229s 'debian': Tree({ 229s 'changelog': Symlink('subdirectory/changelog'), 229s 'subdirectory': Tree({'changelog': b}), 229s }) 229s }), 229s 229s # debian/ itself is a symlink to a different directory 229s lambda b: Tree({ 229s 'pkg': Tree({'changelog': b}), 229s 'debian': Symlink('pkg'), 229s }) 229s ]) 229s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 229s blob = Blob(b'') 229s blob_id = blob.write(pygit2_repo) 229s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 229s > result_blob = target.follow_symlinks_to_blob( 229s pygit2_repo, 229s tree, 229s 'debian/changelog', 229s ) 229s 229s gitubuntu/git_repository_test.py:342: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 229s return _follow_symlinks_to_blob( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s repo = pygit2.Repository('/tmp/tmpsws8sz9b/.git/') 229s top_tree_object = 229s search_path = 'debian/changelog' 229s _rel_tree = 229s _rel_path = '' 229s 229s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 229s _rel_tree=None, _rel_path='' 229s ): 229s '''Recursively follow a path down a tree, following symlinks, to find blob 229s 229s repo: pygit2.Repository object 229s top_tree: pygit2.Tree object of the top of the tree structure 229s search_path: '/'-separated path string of blob to find 229s _rel_tree: (internal) which tree to look further into 229s _rel_path: (internal) the path we are in so far 229s ''' 229s 229s NORMAL_BLOB_MODES = set([ 229s pygit2.GIT_FILEMODE_BLOB, 229s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 229s ]) 229s 229s _rel_tree = _rel_tree or top_tree_object 229s head, tail = posixpath.split(search_path) 229s 229s # A traditional functional split would put a single entry in head with tail 229s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 229s # to make it appear to have traditional semantics. 229s if not head: 229s head = tail 229s tail = None 229s 229s entry = _rel_tree[head] 229s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s gitubuntu/git_repository.py:68: AttributeError 229s ___________________ test_follow_symlinks_to_blob[3] ____________________ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmpppeq_6ob/.git/') 229s tree_func = at 0x3ff8caf13a0> 229s 229s @pytest.mark.parametrize('tree_func', [ 229s # The tree_func parameter is a function that accepts a mock Blob that is to 229s # represent the changelog blob itself and returns a mock Tree with the mock 229s # Blob embedded somewhere within it. The test function can then ensure that 229s # follow_symlinks_to_blob can correctly find the changelog Blob given the 229s # Tree. 229s 229s # Of course this is only expected to work if, after checking out the Tree, 229s # "cat debian/changelog" would work. But this allows us to test the various 229s # permutations of symlink following in Trees that _are_ valid. 229s 229s # Simple case 229s lambda b: Tree({ 229s 'debian': Tree({'changelog': b}), 229s }), 229s 229s # Symlink in debian/ 229s lambda b: Tree({ 229s 'debian': Tree({ 229s 'changelog.real': b, 229s 'changelog': Symlink('changelog.real'), 229s }), 229s }), 229s 229s # Symlink to parent directory 229s lambda b: Tree({ 229s 'changelog': b, 229s 'debian': Tree({ 229s 'changelog': Symlink('../changelog'), 229s }) 229s }), 229s 229s # Symlink to subdirectory 229s lambda b: Tree({ 229s 'debian': Tree({ 229s 'changelog': Symlink('subdirectory/changelog'), 229s 'subdirectory': Tree({'changelog': b}), 229s }) 229s }), 229s 229s # debian/ itself is a symlink to a different directory 229s lambda b: Tree({ 229s 'pkg': Tree({'changelog': b}), 229s 'debian': Symlink('pkg'), 229s }) 229s ]) 229s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 229s blob = Blob(b'') 229s blob_id = blob.write(pygit2_repo) 229s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 229s > result_blob = target.follow_symlinks_to_blob( 229s pygit2_repo, 229s tree, 229s 'debian/changelog', 229s ) 229s 229s gitubuntu/git_repository_test.py:342: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 229s return _follow_symlinks_to_blob( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s repo = pygit2.Repository('/tmp/tmpppeq_6ob/.git/') 229s top_tree_object = 229s search_path = 'debian/changelog' 229s _rel_tree = 229s _rel_path = '' 229s 229s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 229s _rel_tree=None, _rel_path='' 229s ): 229s '''Recursively follow a path down a tree, following symlinks, to find blob 229s 229s repo: pygit2.Repository object 229s top_tree: pygit2.Tree object of the top of the tree structure 229s search_path: '/'-separated path string of blob to find 229s _rel_tree: (internal) which tree to look further into 229s _rel_path: (internal) the path we are in so far 229s ''' 229s 229s NORMAL_BLOB_MODES = set([ 229s pygit2.GIT_FILEMODE_BLOB, 229s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 229s ]) 229s 229s _rel_tree = _rel_tree or top_tree_object 229s head, tail = posixpath.split(search_path) 229s 229s # A traditional functional split would put a single entry in head with tail 229s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 229s # to make it appear to have traditional semantics. 229s if not head: 229s head = tail 229s tail = None 229s 229s entry = _rel_tree[head] 229s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s gitubuntu/git_repository.py:68: AttributeError 229s ___________________ test_follow_symlinks_to_blob[4] ____________________ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmp4xy8ubfn/.git/') 229s tree_func = at 0x3ff8caf1440> 229s 229s @pytest.mark.parametrize('tree_func', [ 229s # The tree_func parameter is a function that accepts a mock Blob that is to 229s # represent the changelog blob itself and returns a mock Tree with the mock 229s # Blob embedded somewhere within it. The test function can then ensure that 229s # follow_symlinks_to_blob can correctly find the changelog Blob given the 229s # Tree. 229s 229s # Of course this is only expected to work if, after checking out the Tree, 229s # "cat debian/changelog" would work. But this allows us to test the various 229s # permutations of symlink following in Trees that _are_ valid. 229s 229s # Simple case 229s lambda b: Tree({ 229s 'debian': Tree({'changelog': b}), 229s }), 229s 229s # Symlink in debian/ 229s lambda b: Tree({ 229s 'debian': Tree({ 229s 'changelog.real': b, 229s 'changelog': Symlink('changelog.real'), 229s }), 229s }), 229s 229s # Symlink to parent directory 229s lambda b: Tree({ 229s 'changelog': b, 229s 'debian': Tree({ 229s 'changelog': Symlink('../changelog'), 229s }) 229s }), 229s 229s # Symlink to subdirectory 229s lambda b: Tree({ 229s 'debian': Tree({ 229s 'changelog': Symlink('subdirectory/changelog'), 229s 'subdirectory': Tree({'changelog': b}), 229s }) 229s }), 229s 229s # debian/ itself is a symlink to a different directory 229s lambda b: Tree({ 229s 'pkg': Tree({'changelog': b}), 229s 'debian': Symlink('pkg'), 229s }) 229s ]) 229s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 229s blob = Blob(b'') 229s blob_id = blob.write(pygit2_repo) 229s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 229s > result_blob = target.follow_symlinks_to_blob( 229s pygit2_repo, 229s tree, 229s 'debian/changelog', 229s ) 229s 229s gitubuntu/git_repository_test.py:342: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 229s return _follow_symlinks_to_blob( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s repo = pygit2.Repository('/tmp/tmp4xy8ubfn/.git/') 229s top_tree_object = 229s search_path = 'debian/changelog' 229s _rel_tree = 229s _rel_path = '' 229s 229s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 229s _rel_tree=None, _rel_path='' 229s ): 229s '''Recursively follow a path down a tree, following symlinks, to find blob 229s 229s repo: pygit2.Repository object 229s top_tree: pygit2.Tree object of the top of the tree structure 229s search_path: '/'-separated path string of blob to find 229s _rel_tree: (internal) which tree to look further into 229s _rel_path: (internal) the path we are in so far 229s ''' 229s 229s NORMAL_BLOB_MODES = set([ 229s pygit2.GIT_FILEMODE_BLOB, 229s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 229s ]) 229s 229s _rel_tree = _rel_tree or top_tree_object 229s head, tail = posixpath.split(search_path) 229s 229s # A traditional functional split would put a single entry in head with tail 229s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 229s # to make it appear to have traditional semantics. 229s if not head: 229s head = tail 229s tail = None 229s 229s entry = _rel_tree[head] 229s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s gitubuntu/git_repository.py:68: AttributeError 229s ________________ test_follow_symlinks_to_blob_not_found[tree1] _________________ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmpuz9g1l1_/.git/') 229s tree = 229s 229s @pytest.mark.parametrize('tree', [ 229s Tree({}), 229s Tree({'debian': Tree({})}), 229s Tree({'debian': Tree({'changelog': Symlink('other')})}), 229s Tree({'debian': Tree({'changelog': Symlink('../other')})}), 229s ]) 229s def test_follow_symlinks_to_blob_not_found(pygit2_repo, tree): 229s pygit2_tree = pygit2_repo.get(tree.write(pygit2_repo)) 229s with pytest.raises(KeyError): 229s > target.follow_symlinks_to_blob( 229s pygit2_repo, 229s pygit2_tree, 229s 'debian/changelog', 229s ) 229s 229s gitubuntu/git_repository_test.py:359: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 229s return _follow_symlinks_to_blob( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s repo = pygit2.Repository('/tmp/tmpuz9g1l1_/.git/') 229s top_tree_object = 229s search_path = 'debian/changelog' 229s _rel_tree = 229s _rel_path = '' 229s 229s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 229s _rel_tree=None, _rel_path='' 229s ): 229s '''Recursively follow a path down a tree, following symlinks, to find blob 229s 229s repo: pygit2.Repository object 229s top_tree: pygit2.Tree object of the top of the tree structure 229s search_path: '/'-separated path string of blob to find 229s _rel_tree: (internal) which tree to look further into 229s _rel_path: (internal) the path we are in so far 229s ''' 229s 229s NORMAL_BLOB_MODES = set([ 229s pygit2.GIT_FILEMODE_BLOB, 229s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 229s ]) 229s 229s _rel_tree = _rel_tree or top_tree_object 229s head, tail = posixpath.split(search_path) 229s 229s # A traditional functional split would put a single entry in head with tail 229s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 229s # to make it appear to have traditional semantics. 229s if not head: 229s head = tail 229s tail = None 229s 229s entry = _rel_tree[head] 229s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s gitubuntu/git_repository.py:68: AttributeError 229s ________________ test_follow_symlinks_to_blob_not_found[tree2] _________________ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmpdz7ofb8r/.git/') 229s tree = 229s 229s @pytest.mark.parametrize('tree', [ 229s Tree({}), 229s Tree({'debian': Tree({})}), 229s Tree({'debian': Tree({'changelog': Symlink('other')})}), 229s Tree({'debian': Tree({'changelog': Symlink('../other')})}), 229s ]) 229s def test_follow_symlinks_to_blob_not_found(pygit2_repo, tree): 229s pygit2_tree = pygit2_repo.get(tree.write(pygit2_repo)) 229s with pytest.raises(KeyError): 229s > target.follow_symlinks_to_blob( 229s pygit2_repo, 229s pygit2_tree, 229s 'debian/changelog', 229s ) 229s 229s gitubuntu/git_repository_test.py:359: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 229s return _follow_symlinks_to_blob( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s repo = pygit2.Repository('/tmp/tmpdz7ofb8r/.git/') 229s top_tree_object = 229s search_path = 'debian/changelog' 229s _rel_tree = 229s _rel_path = '' 229s 229s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 229s _rel_tree=None, _rel_path='' 229s ): 229s '''Recursively follow a path down a tree, following symlinks, to find blob 229s 229s repo: pygit2.Repository object 229s top_tree: pygit2.Tree object of the top of the tree structure 229s search_path: '/'-separated path string of blob to find 229s _rel_tree: (internal) which tree to look further into 229s _rel_path: (internal) the path we are in so far 229s ''' 229s 229s NORMAL_BLOB_MODES = set([ 229s pygit2.GIT_FILEMODE_BLOB, 229s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 229s ]) 229s 229s _rel_tree = _rel_tree or top_tree_object 229s head, tail = posixpath.split(search_path) 229s 229s # A traditional functional split would put a single entry in head with tail 229s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 229s # to make it appear to have traditional semantics. 229s if not head: 229s head = tail 229s tail = None 229s 229s entry = _rel_tree[head] 229s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s gitubuntu/git_repository.py:68: AttributeError 229s ________________ test_follow_symlinks_to_blob_not_found[tree3] _________________ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmp6ds6ppcz/.git/') 229s tree = 229s 229s @pytest.mark.parametrize('tree', [ 229s Tree({}), 229s Tree({'debian': Tree({})}), 229s Tree({'debian': Tree({'changelog': Symlink('other')})}), 229s Tree({'debian': Tree({'changelog': Symlink('../other')})}), 229s ]) 229s def test_follow_symlinks_to_blob_not_found(pygit2_repo, tree): 229s pygit2_tree = pygit2_repo.get(tree.write(pygit2_repo)) 229s with pytest.raises(KeyError): 229s > target.follow_symlinks_to_blob( 229s pygit2_repo, 229s pygit2_tree, 229s 'debian/changelog', 229s ) 229s 229s gitubuntu/git_repository_test.py:359: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 229s return _follow_symlinks_to_blob( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s repo = pygit2.Repository('/tmp/tmp6ds6ppcz/.git/') 229s top_tree_object = 229s search_path = 'debian/changelog' 229s _rel_tree = 229s _rel_path = '' 229s 229s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 229s _rel_tree=None, _rel_path='' 229s ): 229s '''Recursively follow a path down a tree, following symlinks, to find blob 229s 229s repo: pygit2.Repository object 229s top_tree: pygit2.Tree object of the top of the tree structure 229s search_path: '/'-separated path string of blob to find 229s _rel_tree: (internal) which tree to look further into 229s _rel_path: (internal) the path we are in so far 229s ''' 229s 229s NORMAL_BLOB_MODES = set([ 229s pygit2.GIT_FILEMODE_BLOB, 229s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 229s ]) 229s 229s _rel_tree = _rel_tree or top_tree_object 229s head, tail = posixpath.split(search_path) 229s 229s # A traditional functional split would put a single entry in head with tail 229s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 229s # to make it appear to have traditional semantics. 229s if not head: 229s head = tail 229s tail = None 229s 229s entry = _rel_tree[head] 229s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s gitubuntu/git_repository.py:68: AttributeError 229s _________________________ test_git_escape_dir_to_tree __________________________ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmpq6q9upvk/.git/') 229s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_git_escape_dir_to_tree0') 229s 229s def test_git_escape_dir_to_tree(pygit2_repo, tmpdir): 229s tmpdir.mkdir('.git') 229s > tree_hash = target.GitUbuntuRepository.dir_to_tree( 229s pygit2_repo, 229s str(tmpdir), 229s escape=True, 229s ) 229s 229s gitubuntu/git_repository_test.py:668: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s gitubuntu/git_repository.py:2463: in dir_to_tree 229s replacement_oid = cls._add_missing_tree_dirs( 229s gitubuntu/git_repository.py:2397: in _add_missing_tree_dirs 229s tree_builder = cls._create_replacement_tree_builder( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s cls = 229s repo = pygit2.Repository('/tmp/tmpq6q9upvk/.git/') 229s treeish = 229s sub_path = '' 229s 229s @classmethod 229s def _create_replacement_tree_builder(cls, repo, treeish, sub_path): 229s '''Create a replacement TreeBuilder 229s 229s Create a TreeBuilder based on an existing repository, top-level 229s tree-ish and path inside that tree. 229s 229s A sub_path of '' is taken to mean a request for a replacement 229s TreeBuilder for the top level tree. 229s 229s Returns a TreeBuilder object pre-populated with the previous contents. 229s If the path did not previously exist in the tree-ish, then return an 229s empty TreeBuilder instead. 229s ''' 229s 229s > tree = treeish.peel(pygit2.GIT_OBJ_TREE) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s gitubuntu/git_repository.py:2331: AttributeError 229s ______ test_determine_quilt_series_path[tree_data1-debian/patches/series] ______ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmpu43mqmzs/.git/') 229s tree_data = 229s expected_path = 'debian/patches/series' 229s 229s @pytest.mark.parametrize('tree_data,expected_path', [ 229s # Empty tree -> default 229s (Tree({}), 'debian/patches/series'), 229s 229s # Empty debian/patches directory -> default 229s (Tree({'debian': Tree({'patches': Tree({})})}), 'debian/patches/series'), 229s 229s # Only debian/patches/series -> that one 229s ( 229s Tree({'debian': Tree({'patches': Tree({'series': Blob(b'')})})}), 229s 'debian/patches/series', 229s ), 229s 229s # Only debian/patches/debian.series -> that one 229s ( 229s Tree({'debian': Tree({'patches': Tree({ 229s 'debian.series': Blob(b'') 229s })})}), 229s 'debian/patches/debian.series', 229s ), 229s 229s # Both -> debian.series 229s ( 229s Tree({'debian': Tree({'patches': Tree({ 229s 'debian.series': Blob(b''), 229s 'series': Blob(b''), 229s })})}), 229s 'debian/patches/debian.series', 229s ), 229s ]) 229s def test_determine_quilt_series_path(pygit2_repo, tree_data, expected_path): 229s tree_obj = pygit2_repo.get(tree_data.write(pygit2_repo)) 229s > path = target.determine_quilt_series_path(pygit2_repo, tree_obj) 229s 229s gitubuntu/git_repository_test.py:708: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s gitubuntu/git_repository.py:991: in determine_quilt_series_path 229s blob = follow_symlinks_to_blob( 229s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 229s return _follow_symlinks_to_blob( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s repo = pygit2.Repository('/tmp/tmpu43mqmzs/.git/') 229s top_tree_object = 229s search_path = 'debian/patches/debian.series' 229s _rel_tree = 229s _rel_path = '' 229s 229s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 229s _rel_tree=None, _rel_path='' 229s ): 229s '''Recursively follow a path down a tree, following symlinks, to find blob 229s 229s repo: pygit2.Repository object 229s top_tree: pygit2.Tree object of the top of the tree structure 229s search_path: '/'-separated path string of blob to find 229s _rel_tree: (internal) which tree to look further into 229s _rel_path: (internal) the path we are in so far 229s ''' 229s 229s NORMAL_BLOB_MODES = set([ 229s pygit2.GIT_FILEMODE_BLOB, 229s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 229s ]) 229s 229s _rel_tree = _rel_tree or top_tree_object 229s head, tail = posixpath.split(search_path) 229s 229s # A traditional functional split would put a single entry in head with tail 229s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 229s # to make it appear to have traditional semantics. 229s if not head: 229s head = tail 229s tail = None 229s 229s entry = _rel_tree[head] 229s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s gitubuntu/git_repository.py:68: AttributeError 229s ______ test_determine_quilt_series_path[tree_data2-debian/patches/series] ______ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmpm9mperjg/.git/') 229s tree_data = 229s expected_path = 'debian/patches/series' 229s 229s @pytest.mark.parametrize('tree_data,expected_path', [ 229s # Empty tree -> default 229s (Tree({}), 'debian/patches/series'), 229s 229s # Empty debian/patches directory -> default 229s (Tree({'debian': Tree({'patches': Tree({})})}), 'debian/patches/series'), 229s 229s # Only debian/patches/series -> that one 229s ( 229s Tree({'debian': Tree({'patches': Tree({'series': Blob(b'')})})}), 229s 'debian/patches/series', 229s ), 229s 229s # Only debian/patches/debian.series -> that one 229s ( 229s Tree({'debian': Tree({'patches': Tree({ 229s 'debian.series': Blob(b'') 229s })})}), 229s 'debian/patches/debian.series', 229s ), 229s 229s # Both -> debian.series 229s ( 229s Tree({'debian': Tree({'patches': Tree({ 229s 'debian.series': Blob(b''), 229s 'series': Blob(b''), 229s })})}), 229s 'debian/patches/debian.series', 229s ), 229s ]) 229s def test_determine_quilt_series_path(pygit2_repo, tree_data, expected_path): 229s tree_obj = pygit2_repo.get(tree_data.write(pygit2_repo)) 229s > path = target.determine_quilt_series_path(pygit2_repo, tree_obj) 229s 229s gitubuntu/git_repository_test.py:708: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s gitubuntu/git_repository.py:991: in determine_quilt_series_path 229s blob = follow_symlinks_to_blob( 229s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 229s return _follow_symlinks_to_blob( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s repo = pygit2.Repository('/tmp/tmpm9mperjg/.git/') 229s top_tree_object = 229s search_path = 'debian/patches/debian.series' 229s _rel_tree = 229s _rel_path = '' 229s 229s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 229s _rel_tree=None, _rel_path='' 229s ): 229s '''Recursively follow a path down a tree, following symlinks, to find blob 229s 229s repo: pygit2.Repository object 229s top_tree: pygit2.Tree object of the top of the tree structure 229s search_path: '/'-separated path string of blob to find 229s _rel_tree: (internal) which tree to look further into 229s _rel_path: (internal) the path we are in so far 229s ''' 229s 229s NORMAL_BLOB_MODES = set([ 229s pygit2.GIT_FILEMODE_BLOB, 229s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 229s ]) 229s 229s _rel_tree = _rel_tree or top_tree_object 229s head, tail = posixpath.split(search_path) 229s 229s # A traditional functional split would put a single entry in head with tail 229s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 229s # to make it appear to have traditional semantics. 229s if not head: 229s head = tail 229s tail = None 229s 229s entry = _rel_tree[head] 229s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s gitubuntu/git_repository.py:68: AttributeError 229s __ test_determine_quilt_series_path[tree_data3-debian/patches/debian.series] ___ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmpy57pv9fp/.git/') 229s tree_data = 229s expected_path = 'debian/patches/debian.series' 229s 229s @pytest.mark.parametrize('tree_data,expected_path', [ 229s # Empty tree -> default 229s (Tree({}), 'debian/patches/series'), 229s 229s # Empty debian/patches directory -> default 229s (Tree({'debian': Tree({'patches': Tree({})})}), 'debian/patches/series'), 229s 229s # Only debian/patches/series -> that one 229s ( 229s Tree({'debian': Tree({'patches': Tree({'series': Blob(b'')})})}), 229s 'debian/patches/series', 229s ), 229s 229s # Only debian/patches/debian.series -> that one 229s ( 229s Tree({'debian': Tree({'patches': Tree({ 229s 'debian.series': Blob(b'') 229s })})}), 229s 'debian/patches/debian.series', 229s ), 229s 229s # Both -> debian.series 229s ( 229s Tree({'debian': Tree({'patches': Tree({ 229s 'debian.series': Blob(b''), 229s 'series': Blob(b''), 229s })})}), 229s 'debian/patches/debian.series', 229s ), 229s ]) 229s def test_determine_quilt_series_path(pygit2_repo, tree_data, expected_path): 229s tree_obj = pygit2_repo.get(tree_data.write(pygit2_repo)) 229s > path = target.determine_quilt_series_path(pygit2_repo, tree_obj) 229s 229s gitubuntu/git_repository_test.py:708: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s gitubuntu/git_repository.py:991: in determine_quilt_series_path 229s blob = follow_symlinks_to_blob( 229s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 229s return _follow_symlinks_to_blob( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s repo = pygit2.Repository('/tmp/tmpy57pv9fp/.git/') 229s top_tree_object = 229s search_path = 'debian/patches/debian.series' 229s _rel_tree = 229s _rel_path = '' 229s 229s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 229s _rel_tree=None, _rel_path='' 229s ): 229s '''Recursively follow a path down a tree, following symlinks, to find blob 229s 229s repo: pygit2.Repository object 229s top_tree: pygit2.Tree object of the top of the tree structure 229s search_path: '/'-separated path string of blob to find 229s _rel_tree: (internal) which tree to look further into 229s _rel_path: (internal) the path we are in so far 229s ''' 229s 229s NORMAL_BLOB_MODES = set([ 229s pygit2.GIT_FILEMODE_BLOB, 229s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 229s ]) 229s 229s _rel_tree = _rel_tree or top_tree_object 229s head, tail = posixpath.split(search_path) 229s 229s # A traditional functional split would put a single entry in head with tail 229s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 229s # to make it appear to have traditional semantics. 229s if not head: 229s head = tail 229s tail = None 229s 229s entry = _rel_tree[head] 229s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s gitubuntu/git_repository.py:68: AttributeError 229s __ test_determine_quilt_series_path[tree_data4-debian/patches/debian.series] ___ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmpiocxrdjx/.git/') 229s tree_data = 229s expected_path = 'debian/patches/debian.series' 229s 229s @pytest.mark.parametrize('tree_data,expected_path', [ 229s # Empty tree -> default 229s (Tree({}), 'debian/patches/series'), 229s 229s # Empty debian/patches directory -> default 229s (Tree({'debian': Tree({'patches': Tree({})})}), 'debian/patches/series'), 229s 229s # Only debian/patches/series -> that one 229s ( 229s Tree({'debian': Tree({'patches': Tree({'series': Blob(b'')})})}), 229s 'debian/patches/series', 229s ), 229s 229s # Only debian/patches/debian.series -> that one 229s ( 229s Tree({'debian': Tree({'patches': Tree({ 229s 'debian.series': Blob(b'') 229s })})}), 229s 'debian/patches/debian.series', 229s ), 229s 229s # Both -> debian.series 229s ( 229s Tree({'debian': Tree({'patches': Tree({ 229s 'debian.series': Blob(b''), 229s 'series': Blob(b''), 229s })})}), 229s 'debian/patches/debian.series', 229s ), 229s ]) 229s def test_determine_quilt_series_path(pygit2_repo, tree_data, expected_path): 229s tree_obj = pygit2_repo.get(tree_data.write(pygit2_repo)) 229s > path = target.determine_quilt_series_path(pygit2_repo, tree_obj) 229s 229s gitubuntu/git_repository_test.py:708: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s gitubuntu/git_repository.py:991: in determine_quilt_series_path 229s blob = follow_symlinks_to_blob( 229s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 229s return _follow_symlinks_to_blob( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s repo = pygit2.Repository('/tmp/tmpiocxrdjx/.git/') 229s top_tree_object = 229s search_path = 'debian/patches/debian.series' 229s _rel_tree = 229s _rel_path = '' 229s 229s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 229s _rel_tree=None, _rel_path='' 229s ): 229s '''Recursively follow a path down a tree, following symlinks, to find blob 229s 229s repo: pygit2.Repository object 229s top_tree: pygit2.Tree object of the top of the tree structure 229s search_path: '/'-separated path string of blob to find 229s _rel_tree: (internal) which tree to look further into 229s _rel_path: (internal) the path we are in so far 229s ''' 229s 229s NORMAL_BLOB_MODES = set([ 229s pygit2.GIT_FILEMODE_BLOB, 229s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 229s ]) 229s 229s _rel_tree = _rel_tree or top_tree_object 229s head, tail = posixpath.split(search_path) 229s 229s # A traditional functional split would put a single entry in head with tail 229s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 229s # to make it appear to have traditional semantics. 229s if not head: 229s head = tail 229s tail = None 229s 229s entry = _rel_tree[head] 229s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s gitubuntu/git_repository.py:68: AttributeError 229s ________________________________ test_quilt_env ________________________________ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmpi165vmqp/.git/') 229s 229s def test_quilt_env(pygit2_repo): 229s tree_builder = Tree({'debian': 229s Tree({'patches': Tree({'debian.series': Blob(b'')})}) 229s }) 229s tree_obj = pygit2_repo.get(tree_builder.write(pygit2_repo)) 229s > env = target.quilt_env(pygit2_repo, tree_obj) 229s 229s gitubuntu/git_repository_test.py:717: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s gitubuntu/git_repository.py:1022: in quilt_env 229s 'QUILT_SERIES': determine_quilt_series_path(pygit2_repo, treeish), 229s gitubuntu/git_repository.py:991: in determine_quilt_series_path 229s blob = follow_symlinks_to_blob( 229s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 229s return _follow_symlinks_to_blob( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s repo = pygit2.Repository('/tmp/tmpi165vmqp/.git/') 229s top_tree_object = 229s search_path = 'debian/patches/debian.series' 229s _rel_tree = 229s _rel_path = '' 229s 229s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 229s _rel_tree=None, _rel_path='' 229s ): 229s '''Recursively follow a path down a tree, following symlinks, to find blob 229s 229s repo: pygit2.Repository object 229s top_tree: pygit2.Tree object of the top of the tree structure 229s search_path: '/'-separated path string of blob to find 229s _rel_tree: (internal) which tree to look further into 229s _rel_path: (internal) the path we are in so far 229s ''' 229s 229s NORMAL_BLOB_MODES = set([ 229s pygit2.GIT_FILEMODE_BLOB, 229s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 229s ]) 229s 229s _rel_tree = _rel_tree or top_tree_object 229s head, tail = posixpath.split(search_path) 229s 229s # A traditional functional split would put a single entry in head with tail 229s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 229s # to make it appear to have traditional semantics. 229s if not head: 229s head = tail 229s tail = None 229s 229s entry = _rel_tree[head] 229s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s gitubuntu/git_repository.py:68: AttributeError 229s _____________________________ test_repo_quilt_env ______________________________ 229s 229s repo = 229s 229s def test_repo_quilt_env(repo): 229s tree_builder = Tree({'debian': 229s Tree({'patches': Tree({'debian.series': Blob(b'')})}) 229s }) 229s tree_obj = repo.raw_repo.get(tree_builder.write(repo.raw_repo)) 229s > env = repo.quilt_env(tree_obj) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository_test.py:732: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:2575: in quilt_env 229s env.update(quilt_env(self.raw_repo, treeish)) 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:1022: in quilt_env 229s 'QUILT_SERIES': determine_quilt_series_path(pygit2_repo, treeish), 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:991: in determine_quilt_series_path 229s blob = follow_symlinks_to_blob( 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 229s return _follow_symlinks_to_blob( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s repo = pygit2.Repository('/tmp/tmp6j2wde6a/.git/') 229s top_tree_object = 229s search_path = 'debian/patches/debian.series' 229s _rel_tree = 229s _rel_path = '' 229s 229s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 229s _rel_tree=None, _rel_path='' 229s ): 229s '''Recursively follow a path down a tree, following symlinks, to find blob 229s 229s repo: pygit2.Repository object 229s top_tree: pygit2.Tree object of the top of the tree structure 229s search_path: '/'-separated path string of blob to find 229s _rel_tree: (internal) which tree to look further into 229s _rel_path: (internal) the path we are in so far 229s ''' 229s 229s NORMAL_BLOB_MODES = set([ 229s pygit2.GIT_FILEMODE_BLOB, 229s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 229s ]) 229s 229s _rel_tree = _rel_tree or top_tree_object 229s head, tail = posixpath.split(search_path) 229s 229s # A traditional functional split would put a single entry in head with tail 229s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 229s # to make it appear to have traditional semantics. 229s if not head: 229s head = tail 229s tail = None 229s 229s entry = _rel_tree[head] 229s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 229s _____________________ test_repo_quilt_env_from_treeish_str _____________________ 229s 229s repo = 229s 229s def test_repo_quilt_env_from_treeish_str(repo): 229s tree_builder = Tree({'debian': 229s Tree({'patches': Tree({'debian.series': Blob(b'')})}) 229s }) 229s tree_obj = repo.raw_repo.get(tree_builder.write(repo.raw_repo)) 229s > env = repo.quilt_env_from_treeish_str(str(tree_obj.id)) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository_test.py:757: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:2589: in quilt_env_from_treeish_str 229s return self.quilt_env(self.raw_repo.get(treeish_str)) 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:2575: in quilt_env 229s env.update(quilt_env(self.raw_repo, treeish)) 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:1022: in quilt_env 229s 'QUILT_SERIES': determine_quilt_series_path(pygit2_repo, treeish), 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:991: in determine_quilt_series_path 229s blob = follow_symlinks_to_blob( 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 229s return _follow_symlinks_to_blob( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s repo = pygit2.Repository('/tmp/tmp8el7doxj/.git/') 229s top_tree_object = 229s search_path = 'debian/patches/debian.series' 229s _rel_tree = 229s _rel_path = '' 229s 229s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 229s _rel_tree=None, _rel_path='' 229s ): 229s '''Recursively follow a path down a tree, following symlinks, to find blob 229s 229s repo: pygit2.Repository object 229s top_tree: pygit2.Tree object of the top of the tree structure 229s search_path: '/'-separated path string of blob to find 229s _rel_tree: (internal) which tree to look further into 229s _rel_path: (internal) the path we are in so far 229s ''' 229s 229s NORMAL_BLOB_MODES = set([ 229s pygit2.GIT_FILEMODE_BLOB, 229s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 229s ]) 229s 229s _rel_tree = _rel_tree or top_tree_object 229s head, tail = posixpath.split(search_path) 229s 229s # A traditional functional split would put a single entry in head with tail 229s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 229s # to make it appear to have traditional semantics. 229s if not head: 229s head = tail 229s tail = None 229s 229s entry = _rel_tree[head] 229s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 229s _ test_repo_find_ubuntu_merge[Common case-input_data0-pkg/import/1-1ubuntu1-pkg/import/2-1-pkg/import/1-1] _ 229s 229s description = 'Common case' 229s repo = 229s input_data = 229s old_ubuntu = 'pkg/import/1-1ubuntu1', new_debian = 'pkg/import/2-1' 229s expected = 'pkg/import/1-1' 229s 229s @pytest.mark.parametrize( 229s 'description, input_data, old_ubuntu, new_debian, expected', 229s [ 229s ( 229s 'Common case', 229s Repo( 229s commits=[ 229s Commit.from_spec( 229s name='old/debian' 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('old/debian')], 229s name='old/ubuntu', 229s changelog_versions=['1-1ubuntu1', '1-1'], 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('old/debian')], 229s name='new/debian', 229s changelog_versions=['2-1', '1-1'], 229s ), 229s ], 229s tags={ 229s 'pkg/import/1-1': Placeholder('old/debian'), 229s 'pkg/import/1-1ubuntu1': Placeholder('old/ubuntu'), 229s 'pkg/import/2-1': Placeholder('new/debian'), 229s }, 229s ), 229s 'pkg/import/1-1ubuntu1', 229s 'pkg/import/2-1', 229s 'pkg/import/1-1', 229s ), 229s ( 229s 'Ubuntu delta based on a NMU', 229s Repo( 229s commits=[ 229s Commit.from_spec( 229s name='fork_point' 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('fork_point')], 229s name='old/debian', 229s changelog_versions=['1-1.1', '1-1'], 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('old/debian')], 229s name='old/ubuntu', 229s changelog_versions=['1-1.1ubuntu1', '1-1.1', '1-1'], 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('fork_point')], 229s name='new/debian', 229s changelog_versions=['2-1', '1-1'], 229s ), 229s ], 229s tags={ 229s 'pkg/import/1-1': Placeholder('fork_point'), 229s 'pkg/import/1-1.1': Placeholder('old/debian'), 229s 'pkg/import/1-1.1ubuntu1': Placeholder('old/ubuntu'), 229s 'pkg/import/2-1': Placeholder('new/debian'), 229s }, 229s ), 229s 'pkg/import/1-1.1ubuntu1', 229s 'pkg/import/2-1', 229s 'pkg/import/1-1.1', 229s ), 229s ( 229s 'Ubuntu upstream version head of Debian', 229s Repo( 229s commits=[ 229s Commit.from_spec( 229s name='old/debian' 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('old/debian')], 229s name='mid_ubuntu', 229s changelog_versions=['1-1ubuntu1', '1-1'], 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('mid_ubuntu')], 229s name='old/ubuntu', 229s changelog_versions=['2-0ubuntu1', '1-1ubuntu1', '1-1'], 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('old/debian')], 229s name='new/debian', 229s changelog_versions=['3-1', '1-1'], 229s ), 229s ], 229s tags={ 229s 'pkg/import/1-1': Placeholder('old/debian'), 229s 'pkg/import/1-1ubuntu1': Placeholder('mid_ubuntu'), 229s 'pkg/import/2-0ubuntu1': Placeholder('old/ubuntu'), 229s 'pkg/import/3-1': Placeholder('new/debian'), 229s }, 229s ), 229s 'pkg/import/2-0ubuntu1', 229s 'pkg/import/3-1', 229s 'pkg/import/1-1', 229s ), 229s ], 229s ) 229s def test_repo_find_ubuntu_merge( 229s description, 229s repo, 229s input_data, 229s old_ubuntu, 229s new_debian, 229s expected, 229s ): 229s > input_data.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository_test.py:889: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmp42evp2ss/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_2.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_2-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_2-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _ test_repo_find_ubuntu_merge[Ubuntu delta based on a NMU-input_data1-pkg/import/1-1.1ubuntu1-pkg/import/2-1-pkg/import/1-1.1] _ 229s 229s description = 'Ubuntu delta based on a NMU' 229s repo = 229s input_data = 229s old_ubuntu = 'pkg/import/1-1.1ubuntu1', new_debian = 'pkg/import/2-1' 229s expected = 'pkg/import/1-1.1' 229s 229s @pytest.mark.parametrize( 229s 'description, input_data, old_ubuntu, new_debian, expected', 229s [ 229s ( 229s 'Common case', 229s Repo( 229s commits=[ 229s Commit.from_spec( 229s name='old/debian' 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('old/debian')], 229s name='old/ubuntu', 229s changelog_versions=['1-1ubuntu1', '1-1'], 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('old/debian')], 229s name='new/debian', 229s changelog_versions=['2-1', '1-1'], 229s ), 229s ], 229s tags={ 229s 'pkg/import/1-1': Placeholder('old/debian'), 229s 'pkg/import/1-1ubuntu1': Placeholder('old/ubuntu'), 229s 'pkg/import/2-1': Placeholder('new/debian'), 229s }, 229s ), 229s 'pkg/import/1-1ubuntu1', 229s 'pkg/import/2-1', 229s 'pkg/import/1-1', 229s ), 229s ( 229s 'Ubuntu delta based on a NMU', 229s Repo( 229s commits=[ 229s Commit.from_spec( 229s name='fork_point' 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('fork_point')], 229s name='old/debian', 229s changelog_versions=['1-1.1', '1-1'], 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('old/debian')], 229s name='old/ubuntu', 229s changelog_versions=['1-1.1ubuntu1', '1-1.1', '1-1'], 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('fork_point')], 229s name='new/debian', 229s changelog_versions=['2-1', '1-1'], 229s ), 229s ], 229s tags={ 229s 'pkg/import/1-1': Placeholder('fork_point'), 229s 'pkg/import/1-1.1': Placeholder('old/debian'), 229s 'pkg/import/1-1.1ubuntu1': Placeholder('old/ubuntu'), 229s 'pkg/import/2-1': Placeholder('new/debian'), 229s }, 229s ), 229s 'pkg/import/1-1.1ubuntu1', 229s 'pkg/import/2-1', 229s 'pkg/import/1-1.1', 229s ), 229s ( 229s 'Ubuntu upstream version head of Debian', 229s Repo( 229s commits=[ 229s Commit.from_spec( 229s name='old/debian' 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('old/debian')], 229s name='mid_ubuntu', 229s changelog_versions=['1-1ubuntu1', '1-1'], 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('mid_ubuntu')], 229s name='old/ubuntu', 229s changelog_versions=['2-0ubuntu1', '1-1ubuntu1', '1-1'], 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('old/debian')], 229s name='new/debian', 229s changelog_versions=['3-1', '1-1'], 229s ), 229s ], 229s tags={ 229s 'pkg/import/1-1': Placeholder('old/debian'), 229s 'pkg/import/1-1ubuntu1': Placeholder('mid_ubuntu'), 229s 'pkg/import/2-0ubuntu1': Placeholder('old/ubuntu'), 229s 'pkg/import/3-1': Placeholder('new/debian'), 229s }, 229s ), 229s 'pkg/import/2-0ubuntu1', 229s 'pkg/import/3-1', 229s 'pkg/import/1-1', 229s ), 229s ], 229s ) 229s def test_repo_find_ubuntu_merge( 229s description, 229s repo, 229s input_data, 229s old_ubuntu, 229s new_debian, 229s expected, 229s ): 229s > input_data.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository_test.py:889: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmp99_qz07z/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1ubuntu1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1ubuntu1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_2.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_2-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_2-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _ test_repo_find_ubuntu_merge[Ubuntu upstream version head of Debian-input_data2-pkg/import/2-0ubuntu1-pkg/import/3-1-pkg/import/1-1] _ 229s 229s description = 'Ubuntu upstream version head of Debian' 229s repo = 229s input_data = 229s old_ubuntu = 'pkg/import/2-0ubuntu1', new_debian = 'pkg/import/3-1' 229s expected = 'pkg/import/1-1' 229s 229s @pytest.mark.parametrize( 229s 'description, input_data, old_ubuntu, new_debian, expected', 229s [ 229s ( 229s 'Common case', 229s Repo( 229s commits=[ 229s Commit.from_spec( 229s name='old/debian' 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('old/debian')], 229s name='old/ubuntu', 229s changelog_versions=['1-1ubuntu1', '1-1'], 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('old/debian')], 229s name='new/debian', 229s changelog_versions=['2-1', '1-1'], 229s ), 229s ], 229s tags={ 229s 'pkg/import/1-1': Placeholder('old/debian'), 229s 'pkg/import/1-1ubuntu1': Placeholder('old/ubuntu'), 229s 'pkg/import/2-1': Placeholder('new/debian'), 229s }, 229s ), 229s 'pkg/import/1-1ubuntu1', 229s 'pkg/import/2-1', 229s 'pkg/import/1-1', 229s ), 229s ( 229s 'Ubuntu delta based on a NMU', 229s Repo( 229s commits=[ 229s Commit.from_spec( 229s name='fork_point' 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('fork_point')], 229s name='old/debian', 229s changelog_versions=['1-1.1', '1-1'], 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('old/debian')], 229s name='old/ubuntu', 229s changelog_versions=['1-1.1ubuntu1', '1-1.1', '1-1'], 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('fork_point')], 229s name='new/debian', 229s changelog_versions=['2-1', '1-1'], 229s ), 229s ], 229s tags={ 229s 'pkg/import/1-1': Placeholder('fork_point'), 229s 'pkg/import/1-1.1': Placeholder('old/debian'), 229s 'pkg/import/1-1.1ubuntu1': Placeholder('old/ubuntu'), 229s 'pkg/import/2-1': Placeholder('new/debian'), 229s }, 229s ), 229s 'pkg/import/1-1.1ubuntu1', 229s 'pkg/import/2-1', 229s 'pkg/import/1-1.1', 229s ), 229s ( 229s 'Ubuntu upstream version head of Debian', 229s Repo( 229s commits=[ 229s Commit.from_spec( 229s name='old/debian' 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('old/debian')], 229s name='mid_ubuntu', 229s changelog_versions=['1-1ubuntu1', '1-1'], 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('mid_ubuntu')], 229s name='old/ubuntu', 229s changelog_versions=['2-0ubuntu1', '1-1ubuntu1', '1-1'], 229s ), 229s Commit.from_spec( 229s parents=[Placeholder('old/debian')], 229s name='new/debian', 229s changelog_versions=['3-1', '1-1'], 229s ), 229s ], 229s tags={ 229s 'pkg/import/1-1': Placeholder('old/debian'), 229s 'pkg/import/1-1ubuntu1': Placeholder('mid_ubuntu'), 229s 'pkg/import/2-0ubuntu1': Placeholder('old/ubuntu'), 229s 'pkg/import/3-1': Placeholder('new/debian'), 229s }, 229s ), 229s 'pkg/import/2-0ubuntu1', 229s 'pkg/import/3-1', 229s 'pkg/import/1-1', 229s ), 229s ], 229s ) 229s def test_repo_find_ubuntu_merge( 229s description, 229s repo, 229s input_data, 229s old_ubuntu, 229s new_debian, 229s expected, 229s ): 229s > input_data.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository_test.py:889: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmp441_a6g2/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_2.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_2-0ubuntu1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_2-0ubuntu1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_3.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_3-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_3-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _______________________________ test_commit_tree _______________________________ 229s 229s repo = 229s 229s def test_commit_tree(repo): 229s # Construct a repository with an initial commit on the master branch so 229s # that we can verify later parentage and lack of branch movement 229s parent_commit_oid = Repo( 229s commits=[Commit(name='master')], 229s branches={'master': Placeholder('master')} 229s ).write(repo.raw_repo) 229s repo.raw_repo.lookup_reference('HEAD').set_target('refs/heads/master') 229s 229s # Construct a tree inside the repository with a debian/changelog in it to 229s # feed to the method under test 229s test_changelog_path = os.path.join( 229s pkg_resources.resource_filename('gitubuntu', 'changelog_tests'), 229s 'test_date_1', 229s ) 229s with open(test_changelog_path, 'rb') as f: 229s test_changelog_bytes = f.read() 229s test_changelog_blob = Blob(test_changelog_bytes) 229s source_tree = Tree({'debian': Tree({'changelog': test_changelog_blob})}) 229s source_tree_oid = source_tree.write(repo.raw_repo) 229s 229s # Call the method under test 229s > commit_oid = repo.commit_source_tree( 229s tree=source_tree_oid, 229s parents=[parent_commit_oid], 229s log_message='test_commit_msg', 229s commit_date=datetime.datetime( 229s 1971, # year 229s 2, # month 229s 3, # day 229s 4, # hours 229s 5, # minutes 229s 6, # seconds 229s 7, # milliseconds (this should get truncated down to 0) 229s datetime.timezone(datetime.timedelta(hours=-8)) 229s ), 229s ) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository_test.py:993: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:2299: in commit_source_tree 229s changelog = self.get_changelog_from_treeish(str(tree)) 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 229s return Changelog.from_treeish( 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:569: in from_treeish 229s blob = follow_symlinks_to_blob( 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 229s return _follow_symlinks_to_blob( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s repo = pygit2.Repository('/tmp/tmpbeedbpmq/.git/') 229s top_tree_object = 229s search_path = 'debian/changelog' 229s _rel_tree = 229s _rel_path = '' 229s 229s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 229s _rel_tree=None, _rel_path='' 229s ): 229s '''Recursively follow a path down a tree, following symlinks, to find blob 229s 229s repo: pygit2.Repository object 229s top_tree: pygit2.Tree object of the top of the tree structure 229s search_path: '/'-separated path string of blob to find 229s _rel_tree: (internal) which tree to look further into 229s _rel_path: (internal) the path we are in so far 229s ''' 229s 229s NORMAL_BLOB_MODES = set([ 229s pygit2.GIT_FILEMODE_BLOB, 229s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 229s ]) 229s 229s _rel_tree = _rel_tree or top_tree_object 229s head, tail = posixpath.split(search_path) 229s 229s # A traditional functional split would put a single entry in head with tail 229s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 229s # to make it appear to have traditional semantics. 229s if not head: 229s head = tail 229s tail = None 229s 229s entry = _rel_tree[head] 229s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 229s _____________________ test_descendant_of[root-root-False] ______________________ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmpu2uv1qh7/.git/'), a = 'root' 229s b = 'root', expected = False 229s 229s @pytest.mark.parametrize(['a', 'b', 'expected'], 229s [ 229s ('root', 'root', False), 229s ('child1', 'root', True), 229s ('root', 'child1', False), 229s ('grandchild1', 'root', True), 229s ('child1', 'child2', False), 229s ('root', 'disjoint', False), 229s ] 229s ) 229s def test_descendant_of(pygit2_repo, a, b, expected): 229s """ 229s General test for pygit2.Repository.descendant_of(). 229s 229s This test was formerly for a temporary alternative implementation of 229s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 229s use until we updated our pinning to use a newer version of pygit2 that 229s included the pygit2.Repository.descendant_of() method. After the pinning 229s was removed and this implementation replacement took place, we kept the 229s test to ensure that actual behaviour did not change. 229s 229s This unit tests validate_upload_tag() for various parameterized cases. The 229s paramater sets assume the repository structure encoded in the Repo() call 229s below. 229s 229s :param pygit2.Repository pygit2_repo: fixture providing a temporary 229s pygit2.Repository instance to use 229s :param str a: tag name of the first commit to pass to descendant_of() 229s :param str b: tag name of the second commit to pass to descendant_of() 229s :param bool expected: the expected result of descendant_of() 229s """ 229s Repo( 229s # Unique message parameters are used in each entry here in order to 229s # ensure that otherwise-identical commits do not end up being the same 229s # commit (with the same hash, etc). 229s commits=[ 229s Commit(name='root', message='1'), 229s Commit(name='child1', parents=[Placeholder('root')], message='2'), 229s Commit(name='child2', parents=[Placeholder('root')], message='3'), 229s Commit( 229s name='grandchild1', 229s parents=[Placeholder('child1')], 229s message='4' 229s ), 229s Commit(name='disjoint', message='5'), 229s ], 229s tags={ 229s 'root': Placeholder('root'), 229s 'child1': Placeholder('child1'), 229s 'child2': Placeholder('child2'), 229s 'grandchild1': Placeholder('grandchild1'), 229s 'disjoint': Placeholder('disjoint'), 229s } 229s > ).write(pygit2_repo) 229s 229s gitubuntu/git_repository_test.py:1099: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpu2uv1qh7/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s gitubuntu/repo_builder.py:389: AttributeError 229s _____________________ test_descendant_of[child1-root-True] _____________________ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmpmw16pkqv/.git/'), a = 'child1' 229s b = 'root', expected = True 229s 229s @pytest.mark.parametrize(['a', 'b', 'expected'], 229s [ 229s ('root', 'root', False), 229s ('child1', 'root', True), 229s ('root', 'child1', False), 229s ('grandchild1', 'root', True), 229s ('child1', 'child2', False), 229s ('root', 'disjoint', False), 229s ] 229s ) 229s def test_descendant_of(pygit2_repo, a, b, expected): 229s """ 229s General test for pygit2.Repository.descendant_of(). 229s 229s This test was formerly for a temporary alternative implementation of 229s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 229s use until we updated our pinning to use a newer version of pygit2 that 229s included the pygit2.Repository.descendant_of() method. After the pinning 229s was removed and this implementation replacement took place, we kept the 229s test to ensure that actual behaviour did not change. 229s 229s This unit tests validate_upload_tag() for various parameterized cases. The 229s paramater sets assume the repository structure encoded in the Repo() call 229s below. 229s 229s :param pygit2.Repository pygit2_repo: fixture providing a temporary 229s pygit2.Repository instance to use 229s :param str a: tag name of the first commit to pass to descendant_of() 229s :param str b: tag name of the second commit to pass to descendant_of() 229s :param bool expected: the expected result of descendant_of() 229s """ 229s Repo( 229s # Unique message parameters are used in each entry here in order to 229s # ensure that otherwise-identical commits do not end up being the same 229s # commit (with the same hash, etc). 229s commits=[ 229s Commit(name='root', message='1'), 229s Commit(name='child1', parents=[Placeholder('root')], message='2'), 229s Commit(name='child2', parents=[Placeholder('root')], message='3'), 229s Commit( 229s name='grandchild1', 229s parents=[Placeholder('child1')], 229s message='4' 229s ), 229s Commit(name='disjoint', message='5'), 229s ], 229s tags={ 229s 'root': Placeholder('root'), 229s 'child1': Placeholder('child1'), 229s 'child2': Placeholder('child2'), 229s 'grandchild1': Placeholder('grandchild1'), 229s 'disjoint': Placeholder('disjoint'), 229s } 229s > ).write(pygit2_repo) 229s 229s gitubuntu/git_repository_test.py:1099: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpmw16pkqv/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s gitubuntu/repo_builder.py:389: AttributeError 229s ____________________ test_descendant_of[root-child1-False] _____________________ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmp7vex7qha/.git/'), a = 'root' 229s b = 'child1', expected = False 229s 229s @pytest.mark.parametrize(['a', 'b', 'expected'], 229s [ 229s ('root', 'root', False), 229s ('child1', 'root', True), 229s ('root', 'child1', False), 229s ('grandchild1', 'root', True), 229s ('child1', 'child2', False), 229s ('root', 'disjoint', False), 229s ] 229s ) 229s def test_descendant_of(pygit2_repo, a, b, expected): 229s """ 229s General test for pygit2.Repository.descendant_of(). 229s 229s This test was formerly for a temporary alternative implementation of 229s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 229s use until we updated our pinning to use a newer version of pygit2 that 229s included the pygit2.Repository.descendant_of() method. After the pinning 229s was removed and this implementation replacement took place, we kept the 229s test to ensure that actual behaviour did not change. 229s 229s This unit tests validate_upload_tag() for various parameterized cases. The 229s paramater sets assume the repository structure encoded in the Repo() call 229s below. 229s 229s :param pygit2.Repository pygit2_repo: fixture providing a temporary 229s pygit2.Repository instance to use 229s :param str a: tag name of the first commit to pass to descendant_of() 229s :param str b: tag name of the second commit to pass to descendant_of() 229s :param bool expected: the expected result of descendant_of() 229s """ 229s Repo( 229s # Unique message parameters are used in each entry here in order to 229s # ensure that otherwise-identical commits do not end up being the same 229s # commit (with the same hash, etc). 229s commits=[ 229s Commit(name='root', message='1'), 229s Commit(name='child1', parents=[Placeholder('root')], message='2'), 229s Commit(name='child2', parents=[Placeholder('root')], message='3'), 229s Commit( 229s name='grandchild1', 229s parents=[Placeholder('child1')], 229s message='4' 229s ), 229s Commit(name='disjoint', message='5'), 229s ], 229s tags={ 229s 'root': Placeholder('root'), 229s 'child1': Placeholder('child1'), 229s 'child2': Placeholder('child2'), 229s 'grandchild1': Placeholder('grandchild1'), 229s 'disjoint': Placeholder('disjoint'), 229s } 229s > ).write(pygit2_repo) 229s 229s gitubuntu/git_repository_test.py:1099: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmp7vex7qha/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s gitubuntu/repo_builder.py:389: AttributeError 229s __________________ test_descendant_of[grandchild1-root-True] ___________________ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmp8a4nah2r/.git/'), a = 'grandchild1' 229s b = 'root', expected = True 229s 229s @pytest.mark.parametrize(['a', 'b', 'expected'], 229s [ 229s ('root', 'root', False), 229s ('child1', 'root', True), 229s ('root', 'child1', False), 229s ('grandchild1', 'root', True), 229s ('child1', 'child2', False), 229s ('root', 'disjoint', False), 229s ] 229s ) 229s def test_descendant_of(pygit2_repo, a, b, expected): 229s """ 229s General test for pygit2.Repository.descendant_of(). 229s 229s This test was formerly for a temporary alternative implementation of 229s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 229s use until we updated our pinning to use a newer version of pygit2 that 229s included the pygit2.Repository.descendant_of() method. After the pinning 229s was removed and this implementation replacement took place, we kept the 229s test to ensure that actual behaviour did not change. 229s 229s This unit tests validate_upload_tag() for various parameterized cases. The 229s paramater sets assume the repository structure encoded in the Repo() call 229s below. 229s 229s :param pygit2.Repository pygit2_repo: fixture providing a temporary 229s pygit2.Repository instance to use 229s :param str a: tag name of the first commit to pass to descendant_of() 229s :param str b: tag name of the second commit to pass to descendant_of() 229s :param bool expected: the expected result of descendant_of() 229s """ 229s Repo( 229s # Unique message parameters are used in each entry here in order to 229s # ensure that otherwise-identical commits do not end up being the same 229s # commit (with the same hash, etc). 229s commits=[ 229s Commit(name='root', message='1'), 229s Commit(name='child1', parents=[Placeholder('root')], message='2'), 229s Commit(name='child2', parents=[Placeholder('root')], message='3'), 229s Commit( 229s name='grandchild1', 229s parents=[Placeholder('child1')], 229s message='4' 229s ), 229s Commit(name='disjoint', message='5'), 229s ], 229s tags={ 229s 'root': Placeholder('root'), 229s 'child1': Placeholder('child1'), 229s 'child2': Placeholder('child2'), 229s 'grandchild1': Placeholder('grandchild1'), 229s 'disjoint': Placeholder('disjoint'), 229s } 229s > ).write(pygit2_repo) 229s 229s gitubuntu/git_repository_test.py:1099: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmp8a4nah2r/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s gitubuntu/repo_builder.py:389: AttributeError 229s ___________________ test_descendant_of[child1-child2-False] ____________________ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmp0jr_ss32/.git/'), a = 'child1' 229s b = 'child2', expected = False 229s 229s @pytest.mark.parametrize(['a', 'b', 'expected'], 229s [ 229s ('root', 'root', False), 229s ('child1', 'root', True), 229s ('root', 'child1', False), 229s ('grandchild1', 'root', True), 229s ('child1', 'child2', False), 229s ('root', 'disjoint', False), 229s ] 229s ) 229s def test_descendant_of(pygit2_repo, a, b, expected): 229s """ 229s General test for pygit2.Repository.descendant_of(). 229s 229s This test was formerly for a temporary alternative implementation of 229s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 229s use until we updated our pinning to use a newer version of pygit2 that 229s included the pygit2.Repository.descendant_of() method. After the pinning 229s was removed and this implementation replacement took place, we kept the 229s test to ensure that actual behaviour did not change. 229s 229s This unit tests validate_upload_tag() for various parameterized cases. The 229s paramater sets assume the repository structure encoded in the Repo() call 229s below. 229s 229s :param pygit2.Repository pygit2_repo: fixture providing a temporary 229s pygit2.Repository instance to use 229s :param str a: tag name of the first commit to pass to descendant_of() 229s :param str b: tag name of the second commit to pass to descendant_of() 229s :param bool expected: the expected result of descendant_of() 229s """ 229s Repo( 229s # Unique message parameters are used in each entry here in order to 229s # ensure that otherwise-identical commits do not end up being the same 229s # commit (with the same hash, etc). 229s commits=[ 229s Commit(name='root', message='1'), 229s Commit(name='child1', parents=[Placeholder('root')], message='2'), 229s Commit(name='child2', parents=[Placeholder('root')], message='3'), 229s Commit( 229s name='grandchild1', 229s parents=[Placeholder('child1')], 229s message='4' 229s ), 229s Commit(name='disjoint', message='5'), 229s ], 229s tags={ 229s 'root': Placeholder('root'), 229s 'child1': Placeholder('child1'), 229s 'child2': Placeholder('child2'), 229s 'grandchild1': Placeholder('grandchild1'), 229s 'disjoint': Placeholder('disjoint'), 229s } 229s > ).write(pygit2_repo) 229s 229s gitubuntu/git_repository_test.py:1099: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmp0jr_ss32/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s gitubuntu/repo_builder.py:389: AttributeError 229s ___________________ test_descendant_of[root-disjoint-False] ____________________ 229s 229s pygit2_repo = pygit2.Repository('/tmp/tmpj48431mu/.git/'), a = 'root' 229s b = 'disjoint', expected = False 229s 229s @pytest.mark.parametrize(['a', 'b', 'expected'], 229s [ 229s ('root', 'root', False), 229s ('child1', 'root', True), 229s ('root', 'child1', False), 229s ('grandchild1', 'root', True), 229s ('child1', 'child2', False), 229s ('root', 'disjoint', False), 229s ] 229s ) 229s def test_descendant_of(pygit2_repo, a, b, expected): 229s """ 229s General test for pygit2.Repository.descendant_of(). 229s 229s This test was formerly for a temporary alternative implementation of 229s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 229s use until we updated our pinning to use a newer version of pygit2 that 229s included the pygit2.Repository.descendant_of() method. After the pinning 229s was removed and this implementation replacement took place, we kept the 229s test to ensure that actual behaviour did not change. 229s 229s This unit tests validate_upload_tag() for various parameterized cases. The 229s paramater sets assume the repository structure encoded in the Repo() call 229s below. 229s 229s :param pygit2.Repository pygit2_repo: fixture providing a temporary 229s pygit2.Repository instance to use 229s :param str a: tag name of the first commit to pass to descendant_of() 229s :param str b: tag name of the second commit to pass to descendant_of() 229s :param bool expected: the expected result of descendant_of() 229s """ 229s Repo( 229s # Unique message parameters are used in each entry here in order to 229s # ensure that otherwise-identical commits do not end up being the same 229s # commit (with the same hash, etc). 229s commits=[ 229s Commit(name='root', message='1'), 229s Commit(name='child1', parents=[Placeholder('root')], message='2'), 229s Commit(name='child2', parents=[Placeholder('root')], message='3'), 229s Commit( 229s name='grandchild1', 229s parents=[Placeholder('child1')], 229s message='4' 229s ), 229s Commit(name='disjoint', message='5'), 229s ], 229s tags={ 229s 'root': Placeholder('root'), 229s 'child1': Placeholder('child1'), 229s 'child2': Placeholder('child2'), 229s 'grandchild1': Placeholder('grandchild1'), 229s 'disjoint': Placeholder('disjoint'), 229s } 229s > ).write(pygit2_repo) 229s 229s gitubuntu/git_repository_test.py:1099: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpj48431mu/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s gitubuntu/repo_builder.py:389: AttributeError 229s _______________________________ test_create_tag ________________________________ 229s 229s repo = 229s 229s def test_create_tag(repo): 229s """create_tag() should create a tag 229s 229s :param GitUbuntuRepository repo: fixture providing a temporary 229s GitUbuntuRepository instance to use 229s """ 229s Repo( 229s commits=[Commit(name='root')], 229s tags={'root': Placeholder('root')}, 229s > ).write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository_test.py:1127: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmp0b7zy_qy/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s __________________________ test_get_all_reimport_tags __________________________ 229s 229s repo = 229s 229s def test_get_all_reimport_tags(repo): 229s """get_all_reimport_tags() should return only matching reimport tags 229s 229s :param GitUbuntuRepository repo: fixture providing a temporary 229s GitUbuntuRepository instance to use 229s """ 229s Repo( 229s commits=[Commit(name='root')], 229s tags={ 229s 'importer/reimport/import/1/0': Placeholder('root'), 229s 'importer/reimport/import/1/1': Placeholder('root'), 229s 229s # This entry must not be identified as one of version 1's reimport 229s # tags, even though it shares the same base prefix. 229s 'importer/reimport/import/11/0': Placeholder('root'), 229s }, 229s > ).write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository_test.py:1165: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpf4lm0sza/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ______________________________ test_get_head_info ______________________________ 229s 229s repo = 229s 229s def test_get_head_info(repo): 229s """get_head_info() extracts expected commit and version info from the head 229s commit 229s """ 229s Repo( 229s commits=[ 229s Commit(name='foo', tree=SourceTree(source=Source())), 229s ], 229s branches={ 229s 'importer/ubuntu/foo': Placeholder('foo'), 229s 'importer/debian/bar': Placeholder('foo'), 229s 'other/ubuntu/baz': Placeholder('foo'), 229s }, 229s ).write(repo.raw_repo) 229s foo_commit_id = ( 229s repo.raw_repo 229s .lookup_reference('refs/heads/importer/ubuntu/foo') 229s .peel(pygit2.Commit).id 229s ) 229s > assert repo.get_head_info('ubuntu', 'importer') == { 229s 'importer/ubuntu/foo': HeadInfoItem( 229s version='1-1', 229s commit_time=0, 229s commit_id=foo_commit_id, 229s ), 229s } 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository_test.py:1193: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:1952: in get_head_info 229s self.get_changelog_versions_from_treeish(str(head.peel().id)) 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:1888: in get_changelog_versions_from_treeish 229s changelog = self.get_changelog_from_treeish(treeish_string) 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 229s return Changelog.from_treeish( 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:569: in from_treeish 229s blob = follow_symlinks_to_blob( 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 229s return _follow_symlinks_to_blob( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s repo = pygit2.Repository('/tmp/tmp3dah1op8/.git/') 229s top_tree_object = 229s search_path = 'debian/changelog' 229s _rel_tree = 229s _rel_path = '' 229s 229s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 229s _rel_tree=None, _rel_path='' 229s ): 229s '''Recursively follow a path down a tree, following symlinks, to find blob 229s 229s repo: pygit2.Repository object 229s top_tree: pygit2.Tree object of the top of the tree structure 229s search_path: '/'-separated path string of blob to find 229s _rel_tree: (internal) which tree to look further into 229s _rel_path: (internal) the path we are in so far 229s ''' 229s 229s NORMAL_BLOB_MODES = set([ 229s pygit2.GIT_FILEMODE_BLOB, 229s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 229s ]) 229s 229s _rel_tree = _rel_tree or top_tree_object 229s head, tail = posixpath.split(search_path) 229s 229s # A traditional functional split would put a single entry in head with tail 229s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 229s # to make it appear to have traditional semantics. 229s if not head: 229s head = tail 229s tail = None 229s 229s entry = _rel_tree[head] 229s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _ test_import_unapplied_spi_tags[input_repo0-expected_output_refs0-validation_repo_delta0-validation_repo_expected_identical_refs0-True] _ 229s 229s get_import_commit_msg_mock = 229s get_import_tag_msg_mock = 229s repo = 229s input_repo = 229s expected_output_refs = ['refs/heads/do-not-push', 'refs/tags/importer/upstream/ubuntu/1.gz', 'refs/heads/importer/importer/ubuntu/dsc', 'refs/heads/importer/importer/ubuntu/pristine-tar'] 229s validation_repo_delta = {'update_branches': {'importer/ubuntu/trusty': }} 229s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty-proposed', 'refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1'] 229s reuse = True 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'expected_output_refs', 229s 'validation_repo_delta', 229s 'validation_repo_expected_identical_refs', 229s 'reuse', 229s ], 229s [ 229s # 1) An existing import tag (or reimport tag) with the same Git tree 229s # - Reuse import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[Commit.from_spec(name='import')], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('import'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s ], 229s # reuse: 229s True, 229s ), 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='import tag contents', 229s ), 229s Commit.from_spec(name='reimport'), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 2) An existing import tag with a different Git tree and an existing 229s # upload tag with the same Git tree 229s # - Reuse upload tag, create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s Commit.from_spec(name='upload'), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-1': Placeholder('upload'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('upload'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('upload'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 3) An existing import tag with a different Git tree and an existing 229s # upload tag with a different Git tree 229s # - Create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s Commit.from_spec( 229s name='upload', 229s mutate='The upload tag contents', 229s ), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-1': Placeholder('upload'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [Commit.from_spec( 229s name='reimport', 229s message='Test commit (new)', 229s )], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 4) An existing import tag with a different Git tree and no upload tag 229s # - Create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [Commit.from_spec( 229s name='reimport', 229s message='Test commit (new)', 229s )], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 5) No import tag and an existing upload tag with the same Git tree 229s # - Reuse upload tag, create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[Commit.from_spec(name='upload')], 229s tags={'importer/upload/1-1': Placeholder('upload')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('upload'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('upload'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 6) No import tag and an existing upload tag with a different Git tree 229s # - Create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='upload', 229s mutate='The upload tag contents', 229s ), 229s ], 229s tags={'importer/upload/1-1': Placeholder('upload')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='publish', 229s message='Test commit (new)', 229s ), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('publish'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('publish'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 7) No import tags or upload tags 229s # - Create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo(), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='publish', 229s message='Test commit (new)', 229s ), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('publish'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('publish'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1' 229s ], 229s # reuse: 229s False, 229s ), 229s ] 229s ) 229s @patch('gitubuntu.importer.get_import_tag_msg') 229s @patch('gitubuntu.importer.get_import_commit_msg') 229s def test_import_unapplied_spi_tags( 229s get_import_commit_msg_mock, 229s get_import_tag_msg_mock, 229s repo, 229s input_repo, 229s expected_output_refs, 229s validation_repo_delta, 229s validation_repo_expected_identical_refs, 229s reuse, 229s ): 229s """Test that unapplied tags are correctly created, adjusted and/or reused 229s 229s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 229s that determines the commit message to use for a given import 229s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 229s that determines the tag message to use for a given import 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param repo_builder.Repo input_repo: input repository data 229s :param list(str) expected_output_refs: refs that must exist in the output 229s repository 229s :param dict validation_repo_delta: how to transform the input 229s repository into a "validation repository", expressed as a dict to 229s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 229s input repository. The validation repository is then used for the 229s purposes of comparison against the output repository. 229s :param list(str) validation_repo_expected_identical_refs: refs that must be 229s identical between the validation repository and the output repository 229s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 229s one supplied by the input repository (assumed to have a commit message 229s of "Test commit") and not one created by the importer in this run 229s (arranged by this test to have a different commit message) 229s 229s The input repository data is written into the output repository and then a 229s fake non-native source package publication of version 1-1 in the Trusty 229s release pocket is imported into it by calling import_unapplied_spi() 229s directly. expected_output_refs, validation_repo_expected_identical_refs and 229s reuse are then asserted. It is further asserted that no other refs exist in 229s the output repository except for those listed in expected_output_refs and 229s validation_repo_expected_identical_refs. 229s """ 229s # Match the repo_builder objects 229s get_import_tag_msg_mock.return_value = 'Test tag' 229s # Importantly, the following commit message must not be the same as the 229s # commit messages used by the test input repository commits, so that we can 229s # later detect the difference between commits that were already there and 229s # new commits created by the importer for the purposes of asserting the 229s # reuse parameter correctly. 229s get_import_commit_msg_mock.return_value = b'Test commit (new)' 229s 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_tag_test.py:463: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpr0etwul0/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _ test_import_unapplied_spi_tags[input_repo1-expected_output_refs1-validation_repo_delta1-validation_repo_expected_identical_refs1-True] _ 229s 229s get_import_commit_msg_mock = 229s get_import_tag_msg_mock = 229s repo = 229s input_repo = 229s expected_output_refs = ['refs/heads/do-not-push', 'refs/tags/importer/upstream/ubuntu/1.gz', 'refs/heads/importer/importer/ubuntu/dsc', 'refs/heads/importer/importer/ubuntu/pristine-tar'] 229s validation_repo_delta = {'update_branches': {'importer/ubuntu/trusty': }} 229s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty-proposed', 'refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1', 'refs/tags/importer/reimport/import/1-1/0', 'refs/tags/importer/reimport/import/1-1/1'] 229s reuse = True 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'expected_output_refs', 229s 'validation_repo_delta', 229s 'validation_repo_expected_identical_refs', 229s 'reuse', 229s ], 229s [ 229s # 1) An existing import tag (or reimport tag) with the same Git tree 229s # - Reuse import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[Commit.from_spec(name='import')], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('import'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s ], 229s # reuse: 229s True, 229s ), 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='import tag contents', 229s ), 229s Commit.from_spec(name='reimport'), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 2) An existing import tag with a different Git tree and an existing 229s # upload tag with the same Git tree 229s # - Reuse upload tag, create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s Commit.from_spec(name='upload'), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-1': Placeholder('upload'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('upload'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('upload'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 3) An existing import tag with a different Git tree and an existing 229s # upload tag with a different Git tree 229s # - Create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s Commit.from_spec( 229s name='upload', 229s mutate='The upload tag contents', 229s ), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-1': Placeholder('upload'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [Commit.from_spec( 229s name='reimport', 229s message='Test commit (new)', 229s )], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 4) An existing import tag with a different Git tree and no upload tag 229s # - Create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [Commit.from_spec( 229s name='reimport', 229s message='Test commit (new)', 229s )], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 5) No import tag and an existing upload tag with the same Git tree 229s # - Reuse upload tag, create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[Commit.from_spec(name='upload')], 229s tags={'importer/upload/1-1': Placeholder('upload')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('upload'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('upload'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 6) No import tag and an existing upload tag with a different Git tree 229s # - Create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='upload', 229s mutate='The upload tag contents', 229s ), 229s ], 229s tags={'importer/upload/1-1': Placeholder('upload')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='publish', 229s message='Test commit (new)', 229s ), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('publish'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('publish'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 7) No import tags or upload tags 229s # - Create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo(), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='publish', 229s message='Test commit (new)', 229s ), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('publish'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('publish'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1' 229s ], 229s # reuse: 229s False, 229s ), 229s ] 229s ) 229s @patch('gitubuntu.importer.get_import_tag_msg') 229s @patch('gitubuntu.importer.get_import_commit_msg') 229s def test_import_unapplied_spi_tags( 229s get_import_commit_msg_mock, 229s get_import_tag_msg_mock, 229s repo, 229s input_repo, 229s expected_output_refs, 229s validation_repo_delta, 229s validation_repo_expected_identical_refs, 229s reuse, 229s ): 229s """Test that unapplied tags are correctly created, adjusted and/or reused 229s 229s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 229s that determines the commit message to use for a given import 229s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 229s that determines the tag message to use for a given import 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param repo_builder.Repo input_repo: input repository data 229s :param list(str) expected_output_refs: refs that must exist in the output 229s repository 229s :param dict validation_repo_delta: how to transform the input 229s repository into a "validation repository", expressed as a dict to 229s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 229s input repository. The validation repository is then used for the 229s purposes of comparison against the output repository. 229s :param list(str) validation_repo_expected_identical_refs: refs that must be 229s identical between the validation repository and the output repository 229s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 229s one supplied by the input repository (assumed to have a commit message 229s of "Test commit") and not one created by the importer in this run 229s (arranged by this test to have a different commit message) 229s 229s The input repository data is written into the output repository and then a 229s fake non-native source package publication of version 1-1 in the Trusty 229s release pocket is imported into it by calling import_unapplied_spi() 229s directly. expected_output_refs, validation_repo_expected_identical_refs and 229s reuse are then asserted. It is further asserted that no other refs exist in 229s the output repository except for those listed in expected_output_refs and 229s validation_repo_expected_identical_refs. 229s """ 229s # Match the repo_builder objects 229s get_import_tag_msg_mock.return_value = 'Test tag' 229s # Importantly, the following commit message must not be the same as the 229s # commit messages used by the test input repository commits, so that we can 229s # later detect the difference between commits that were already there and 229s # new commits created by the importer for the purposes of asserting the 229s # reuse parameter correctly. 229s get_import_commit_msg_mock.return_value = b'Test commit (new)' 229s 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_tag_test.py:463: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmp1hkuvpp0/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _ test_import_unapplied_spi_tags[input_repo2-expected_output_refs2-validation_repo_delta2-validation_repo_expected_identical_refs2-True] _ 229s 229s get_import_commit_msg_mock = 229s get_import_tag_msg_mock = 229s repo = 229s input_repo = 229s expected_output_refs = ['refs/heads/do-not-push', 'refs/tags/importer/upstream/ubuntu/1.gz', 'refs/heads/importer/importer/ubuntu/dsc', 'refs/heads/importer/importer/ubuntu/pristine-tar', 'refs/notes/importer/importer'] 229s validation_repo_delta = {'update_branches': {'importer/ubuntu/trusty': }, 'update_...ect at 0x3ff8c947fe0>, 'importer/reimport/import/1-1/1': }} 229s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty-proposed', 'refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1', 'refs/tags/importer/upload/1-1', 'refs/tags/importer/reimport/import/1-1/0', 'refs/tags/importer/reimport/import/1-1/1'] 229s reuse = True 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'expected_output_refs', 229s 'validation_repo_delta', 229s 'validation_repo_expected_identical_refs', 229s 'reuse', 229s ], 229s [ 229s # 1) An existing import tag (or reimport tag) with the same Git tree 229s # - Reuse import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[Commit.from_spec(name='import')], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('import'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s ], 229s # reuse: 229s True, 229s ), 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='import tag contents', 229s ), 229s Commit.from_spec(name='reimport'), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 2) An existing import tag with a different Git tree and an existing 229s # upload tag with the same Git tree 229s # - Reuse upload tag, create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s Commit.from_spec(name='upload'), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-1': Placeholder('upload'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('upload'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('upload'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 3) An existing import tag with a different Git tree and an existing 229s # upload tag with a different Git tree 229s # - Create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s Commit.from_spec( 229s name='upload', 229s mutate='The upload tag contents', 229s ), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-1': Placeholder('upload'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [Commit.from_spec( 229s name='reimport', 229s message='Test commit (new)', 229s )], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 4) An existing import tag with a different Git tree and no upload tag 229s # - Create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [Commit.from_spec( 229s name='reimport', 229s message='Test commit (new)', 229s )], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 5) No import tag and an existing upload tag with the same Git tree 229s # - Reuse upload tag, create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[Commit.from_spec(name='upload')], 229s tags={'importer/upload/1-1': Placeholder('upload')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('upload'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('upload'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 6) No import tag and an existing upload tag with a different Git tree 229s # - Create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='upload', 229s mutate='The upload tag contents', 229s ), 229s ], 229s tags={'importer/upload/1-1': Placeholder('upload')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='publish', 229s message='Test commit (new)', 229s ), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('publish'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('publish'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 7) No import tags or upload tags 229s # - Create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo(), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='publish', 229s message='Test commit (new)', 229s ), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('publish'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('publish'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1' 229s ], 229s # reuse: 229s False, 229s ), 229s ] 229s ) 229s @patch('gitubuntu.importer.get_import_tag_msg') 229s @patch('gitubuntu.importer.get_import_commit_msg') 229s def test_import_unapplied_spi_tags( 229s get_import_commit_msg_mock, 229s get_import_tag_msg_mock, 229s repo, 229s input_repo, 229s expected_output_refs, 229s validation_repo_delta, 229s validation_repo_expected_identical_refs, 229s reuse, 229s ): 229s """Test that unapplied tags are correctly created, adjusted and/or reused 229s 229s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 229s that determines the commit message to use for a given import 229s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 229s that determines the tag message to use for a given import 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param repo_builder.Repo input_repo: input repository data 229s :param list(str) expected_output_refs: refs that must exist in the output 229s repository 229s :param dict validation_repo_delta: how to transform the input 229s repository into a "validation repository", expressed as a dict to 229s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 229s input repository. The validation repository is then used for the 229s purposes of comparison against the output repository. 229s :param list(str) validation_repo_expected_identical_refs: refs that must be 229s identical between the validation repository and the output repository 229s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 229s one supplied by the input repository (assumed to have a commit message 229s of "Test commit") and not one created by the importer in this run 229s (arranged by this test to have a different commit message) 229s 229s The input repository data is written into the output repository and then a 229s fake non-native source package publication of version 1-1 in the Trusty 229s release pocket is imported into it by calling import_unapplied_spi() 229s directly. expected_output_refs, validation_repo_expected_identical_refs and 229s reuse are then asserted. It is further asserted that no other refs exist in 229s the output repository except for those listed in expected_output_refs and 229s validation_repo_expected_identical_refs. 229s """ 229s # Match the repo_builder objects 229s get_import_tag_msg_mock.return_value = 'Test tag' 229s # Importantly, the following commit message must not be the same as the 229s # commit messages used by the test input repository commits, so that we can 229s # later detect the difference between commits that were already there and 229s # new commits created by the importer for the purposes of asserting the 229s # reuse parameter correctly. 229s get_import_commit_msg_mock.return_value = b'Test commit (new)' 229s 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_tag_test.py:463: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpd_teem6f/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _ test_import_unapplied_spi_tags[input_repo3-expected_output_refs3-validation_repo_delta3-validation_repo_expected_identical_refs3-False] _ 229s 229s get_import_commit_msg_mock = 229s get_import_tag_msg_mock = 229s repo = 229s input_repo = 229s expected_output_refs = ['refs/heads/do-not-push', 'refs/tags/importer/upstream/ubuntu/1.gz', 'refs/heads/importer/importer/ubuntu/dsc', 'refs/heads/importer/importer/ubuntu/pristine-tar', 'refs/notes/importer/changelog', 'refs/notes/importer/importer'] 229s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/ubuntu/trusty...ect at 0x3ff8c95bb90>, 'importer/reimport/import/1-1/1': }} 229s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty-proposed', 'refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1', 'refs/tags/importer/upload/1-1', 'refs/tags/importer/reimport/import/1-1/0', 'refs/tags/importer/reimport/import/1-1/1'] 229s reuse = False 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'expected_output_refs', 229s 'validation_repo_delta', 229s 'validation_repo_expected_identical_refs', 229s 'reuse', 229s ], 229s [ 229s # 1) An existing import tag (or reimport tag) with the same Git tree 229s # - Reuse import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[Commit.from_spec(name='import')], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('import'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s ], 229s # reuse: 229s True, 229s ), 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='import tag contents', 229s ), 229s Commit.from_spec(name='reimport'), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 2) An existing import tag with a different Git tree and an existing 229s # upload tag with the same Git tree 229s # - Reuse upload tag, create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s Commit.from_spec(name='upload'), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-1': Placeholder('upload'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('upload'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('upload'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 3) An existing import tag with a different Git tree and an existing 229s # upload tag with a different Git tree 229s # - Create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s Commit.from_spec( 229s name='upload', 229s mutate='The upload tag contents', 229s ), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-1': Placeholder('upload'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [Commit.from_spec( 229s name='reimport', 229s message='Test commit (new)', 229s )], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 4) An existing import tag with a different Git tree and no upload tag 229s # - Create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [Commit.from_spec( 229s name='reimport', 229s message='Test commit (new)', 229s )], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 5) No import tag and an existing upload tag with the same Git tree 229s # - Reuse upload tag, create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[Commit.from_spec(name='upload')], 229s tags={'importer/upload/1-1': Placeholder('upload')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('upload'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('upload'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 6) No import tag and an existing upload tag with a different Git tree 229s # - Create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='upload', 229s mutate='The upload tag contents', 229s ), 229s ], 229s tags={'importer/upload/1-1': Placeholder('upload')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='publish', 229s message='Test commit (new)', 229s ), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('publish'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('publish'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 7) No import tags or upload tags 229s # - Create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo(), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='publish', 229s message='Test commit (new)', 229s ), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('publish'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('publish'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1' 229s ], 229s # reuse: 229s False, 229s ), 229s ] 229s ) 229s @patch('gitubuntu.importer.get_import_tag_msg') 229s @patch('gitubuntu.importer.get_import_commit_msg') 229s def test_import_unapplied_spi_tags( 229s get_import_commit_msg_mock, 229s get_import_tag_msg_mock, 229s repo, 229s input_repo, 229s expected_output_refs, 229s validation_repo_delta, 229s validation_repo_expected_identical_refs, 229s reuse, 229s ): 229s """Test that unapplied tags are correctly created, adjusted and/or reused 229s 229s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 229s that determines the commit message to use for a given import 229s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 229s that determines the tag message to use for a given import 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param repo_builder.Repo input_repo: input repository data 229s :param list(str) expected_output_refs: refs that must exist in the output 229s repository 229s :param dict validation_repo_delta: how to transform the input 229s repository into a "validation repository", expressed as a dict to 229s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 229s input repository. The validation repository is then used for the 229s purposes of comparison against the output repository. 229s :param list(str) validation_repo_expected_identical_refs: refs that must be 229s identical between the validation repository and the output repository 229s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 229s one supplied by the input repository (assumed to have a commit message 229s of "Test commit") and not one created by the importer in this run 229s (arranged by this test to have a different commit message) 229s 229s The input repository data is written into the output repository and then a 229s fake non-native source package publication of version 1-1 in the Trusty 229s release pocket is imported into it by calling import_unapplied_spi() 229s directly. expected_output_refs, validation_repo_expected_identical_refs and 229s reuse are then asserted. It is further asserted that no other refs exist in 229s the output repository except for those listed in expected_output_refs and 229s validation_repo_expected_identical_refs. 229s """ 229s # Match the repo_builder objects 229s get_import_tag_msg_mock.return_value = 'Test tag' 229s # Importantly, the following commit message must not be the same as the 229s # commit messages used by the test input repository commits, so that we can 229s # later detect the difference between commits that were already there and 229s # new commits created by the importer for the purposes of asserting the 229s # reuse parameter correctly. 229s get_import_commit_msg_mock.return_value = b'Test commit (new)' 229s 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_tag_test.py:463: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmp9z52e2jm/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _ test_import_unapplied_spi_tags[input_repo4-expected_output_refs4-validation_repo_delta4-validation_repo_expected_identical_refs4-False] _ 229s 229s get_import_commit_msg_mock = 229s get_import_tag_msg_mock = 229s repo = 229s input_repo = 229s expected_output_refs = ['refs/heads/do-not-push', 'refs/tags/importer/upstream/ubuntu/1.gz', 'refs/heads/importer/importer/ubuntu/dsc', 'refs/heads/importer/importer/ubuntu/pristine-tar', 'refs/notes/importer/changelog', 'refs/notes/importer/importer'] 229s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/ubuntu/trusty...ect at 0x3ff8c9583e0>, 'importer/reimport/import/1-1/1': }} 229s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty-proposed', 'refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1', 'refs/tags/importer/reimport/import/1-1/0', 'refs/tags/importer/reimport/import/1-1/1'] 229s reuse = False 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'expected_output_refs', 229s 'validation_repo_delta', 229s 'validation_repo_expected_identical_refs', 229s 'reuse', 229s ], 229s [ 229s # 1) An existing import tag (or reimport tag) with the same Git tree 229s # - Reuse import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[Commit.from_spec(name='import')], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('import'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s ], 229s # reuse: 229s True, 229s ), 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='import tag contents', 229s ), 229s Commit.from_spec(name='reimport'), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 2) An existing import tag with a different Git tree and an existing 229s # upload tag with the same Git tree 229s # - Reuse upload tag, create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s Commit.from_spec(name='upload'), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-1': Placeholder('upload'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('upload'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('upload'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 3) An existing import tag with a different Git tree and an existing 229s # upload tag with a different Git tree 229s # - Create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s Commit.from_spec( 229s name='upload', 229s mutate='The upload tag contents', 229s ), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-1': Placeholder('upload'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [Commit.from_spec( 229s name='reimport', 229s message='Test commit (new)', 229s )], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 4) An existing import tag with a different Git tree and no upload tag 229s # - Create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [Commit.from_spec( 229s name='reimport', 229s message='Test commit (new)', 229s )], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 5) No import tag and an existing upload tag with the same Git tree 229s # - Reuse upload tag, create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[Commit.from_spec(name='upload')], 229s tags={'importer/upload/1-1': Placeholder('upload')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('upload'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('upload'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 6) No import tag and an existing upload tag with a different Git tree 229s # - Create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='upload', 229s mutate='The upload tag contents', 229s ), 229s ], 229s tags={'importer/upload/1-1': Placeholder('upload')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='publish', 229s message='Test commit (new)', 229s ), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('publish'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('publish'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 7) No import tags or upload tags 229s # - Create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo(), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='publish', 229s message='Test commit (new)', 229s ), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('publish'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('publish'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1' 229s ], 229s # reuse: 229s False, 229s ), 229s ] 229s ) 229s @patch('gitubuntu.importer.get_import_tag_msg') 229s @patch('gitubuntu.importer.get_import_commit_msg') 229s def test_import_unapplied_spi_tags( 229s get_import_commit_msg_mock, 229s get_import_tag_msg_mock, 229s repo, 229s input_repo, 229s expected_output_refs, 229s validation_repo_delta, 229s validation_repo_expected_identical_refs, 229s reuse, 229s ): 229s """Test that unapplied tags are correctly created, adjusted and/or reused 229s 229s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 229s that determines the commit message to use for a given import 229s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 229s that determines the tag message to use for a given import 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param repo_builder.Repo input_repo: input repository data 229s :param list(str) expected_output_refs: refs that must exist in the output 229s repository 229s :param dict validation_repo_delta: how to transform the input 229s repository into a "validation repository", expressed as a dict to 229s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 229s input repository. The validation repository is then used for the 229s purposes of comparison against the output repository. 229s :param list(str) validation_repo_expected_identical_refs: refs that must be 229s identical between the validation repository and the output repository 229s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 229s one supplied by the input repository (assumed to have a commit message 229s of "Test commit") and not one created by the importer in this run 229s (arranged by this test to have a different commit message) 229s 229s The input repository data is written into the output repository and then a 229s fake non-native source package publication of version 1-1 in the Trusty 229s release pocket is imported into it by calling import_unapplied_spi() 229s directly. expected_output_refs, validation_repo_expected_identical_refs and 229s reuse are then asserted. It is further asserted that no other refs exist in 229s the output repository except for those listed in expected_output_refs and 229s validation_repo_expected_identical_refs. 229s """ 229s # Match the repo_builder objects 229s get_import_tag_msg_mock.return_value = 'Test tag' 229s # Importantly, the following commit message must not be the same as the 229s # commit messages used by the test input repository commits, so that we can 229s # later detect the difference between commits that were already there and 229s # new commits created by the importer for the purposes of asserting the 229s # reuse parameter correctly. 229s get_import_commit_msg_mock.return_value = b'Test commit (new)' 229s 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_tag_test.py:463: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpbupyh3ps/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _ test_import_unapplied_spi_tags[input_repo5-expected_output_refs5-validation_repo_delta5-validation_repo_expected_identical_refs5-True] _ 229s 229s get_import_commit_msg_mock = 229s get_import_tag_msg_mock = 229s repo = 229s input_repo = 229s expected_output_refs = ['refs/heads/do-not-push', 'refs/tags/importer/upstream/ubuntu/1.gz', 'refs/heads/importer/importer/ubuntu/dsc', 'refs/heads/importer/importer/ubuntu/pristine-tar', 'refs/notes/importer/importer'] 229s validation_repo_delta = {'update_branches': {'importer/ubuntu/trusty': }, 'update_tags': {'importer/import/1-1': }} 229s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1', 'refs/tags/importer/upload/1-1'] 229s reuse = True 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'expected_output_refs', 229s 'validation_repo_delta', 229s 'validation_repo_expected_identical_refs', 229s 'reuse', 229s ], 229s [ 229s # 1) An existing import tag (or reimport tag) with the same Git tree 229s # - Reuse import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[Commit.from_spec(name='import')], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('import'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s ], 229s # reuse: 229s True, 229s ), 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='import tag contents', 229s ), 229s Commit.from_spec(name='reimport'), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 2) An existing import tag with a different Git tree and an existing 229s # upload tag with the same Git tree 229s # - Reuse upload tag, create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s Commit.from_spec(name='upload'), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-1': Placeholder('upload'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('upload'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('upload'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 3) An existing import tag with a different Git tree and an existing 229s # upload tag with a different Git tree 229s # - Create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s Commit.from_spec( 229s name='upload', 229s mutate='The upload tag contents', 229s ), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-1': Placeholder('upload'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [Commit.from_spec( 229s name='reimport', 229s message='Test commit (new)', 229s )], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 4) An existing import tag with a different Git tree and no upload tag 229s # - Create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [Commit.from_spec( 229s name='reimport', 229s message='Test commit (new)', 229s )], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 5) No import tag and an existing upload tag with the same Git tree 229s # - Reuse upload tag, create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[Commit.from_spec(name='upload')], 229s tags={'importer/upload/1-1': Placeholder('upload')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('upload'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('upload'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 6) No import tag and an existing upload tag with a different Git tree 229s # - Create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='upload', 229s mutate='The upload tag contents', 229s ), 229s ], 229s tags={'importer/upload/1-1': Placeholder('upload')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='publish', 229s message='Test commit (new)', 229s ), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('publish'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('publish'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 7) No import tags or upload tags 229s # - Create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo(), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='publish', 229s message='Test commit (new)', 229s ), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('publish'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('publish'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1' 229s ], 229s # reuse: 229s False, 229s ), 229s ] 229s ) 229s @patch('gitubuntu.importer.get_import_tag_msg') 229s @patch('gitubuntu.importer.get_import_commit_msg') 229s def test_import_unapplied_spi_tags( 229s get_import_commit_msg_mock, 229s get_import_tag_msg_mock, 229s repo, 229s input_repo, 229s expected_output_refs, 229s validation_repo_delta, 229s validation_repo_expected_identical_refs, 229s reuse, 229s ): 229s """Test that unapplied tags are correctly created, adjusted and/or reused 229s 229s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 229s that determines the commit message to use for a given import 229s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 229s that determines the tag message to use for a given import 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param repo_builder.Repo input_repo: input repository data 229s :param list(str) expected_output_refs: refs that must exist in the output 229s repository 229s :param dict validation_repo_delta: how to transform the input 229s repository into a "validation repository", expressed as a dict to 229s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 229s input repository. The validation repository is then used for the 229s purposes of comparison against the output repository. 229s :param list(str) validation_repo_expected_identical_refs: refs that must be 229s identical between the validation repository and the output repository 229s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 229s one supplied by the input repository (assumed to have a commit message 229s of "Test commit") and not one created by the importer in this run 229s (arranged by this test to have a different commit message) 229s 229s The input repository data is written into the output repository and then a 229s fake non-native source package publication of version 1-1 in the Trusty 229s release pocket is imported into it by calling import_unapplied_spi() 229s directly. expected_output_refs, validation_repo_expected_identical_refs and 229s reuse are then asserted. It is further asserted that no other refs exist in 229s the output repository except for those listed in expected_output_refs and 229s validation_repo_expected_identical_refs. 229s """ 229s # Match the repo_builder objects 229s get_import_tag_msg_mock.return_value = 'Test tag' 229s # Importantly, the following commit message must not be the same as the 229s # commit messages used by the test input repository commits, so that we can 229s # later detect the difference between commits that were already there and 229s # new commits created by the importer for the purposes of asserting the 229s # reuse parameter correctly. 229s get_import_commit_msg_mock.return_value = b'Test commit (new)' 229s 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_tag_test.py:463: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpj13ahyle/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _ test_import_unapplied_spi_tags[input_repo6-expected_output_refs6-validation_repo_delta6-validation_repo_expected_identical_refs6-False] _ 229s 229s get_import_commit_msg_mock = 229s get_import_tag_msg_mock = 229s repo = 229s input_repo = 229s expected_output_refs = ['refs/heads/do-not-push', 'refs/tags/importer/upstream/ubuntu/1.gz', 'refs/heads/importer/importer/ubuntu/dsc', 'refs/heads/importer/importer/ubuntu/pristine-tar', 'refs/notes/importer/changelog', 'refs/notes/importer/importer'] 229s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/ubuntu/trusty... 0x3ff8c958c50>}, 'update_tags': {'importer/import/1-1': }} 229s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1', 'refs/tags/importer/upload/1-1'] 229s reuse = False 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'expected_output_refs', 229s 'validation_repo_delta', 229s 'validation_repo_expected_identical_refs', 229s 'reuse', 229s ], 229s [ 229s # 1) An existing import tag (or reimport tag) with the same Git tree 229s # - Reuse import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[Commit.from_spec(name='import')], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('import'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s ], 229s # reuse: 229s True, 229s ), 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='import tag contents', 229s ), 229s Commit.from_spec(name='reimport'), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 2) An existing import tag with a different Git tree and an existing 229s # upload tag with the same Git tree 229s # - Reuse upload tag, create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s Commit.from_spec(name='upload'), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-1': Placeholder('upload'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('upload'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('upload'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 3) An existing import tag with a different Git tree and an existing 229s # upload tag with a different Git tree 229s # - Create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s Commit.from_spec( 229s name='upload', 229s mutate='The upload tag contents', 229s ), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-1': Placeholder('upload'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [Commit.from_spec( 229s name='reimport', 229s message='Test commit (new)', 229s )], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 4) An existing import tag with a different Git tree and no upload tag 229s # - Create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [Commit.from_spec( 229s name='reimport', 229s message='Test commit (new)', 229s )], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 5) No import tag and an existing upload tag with the same Git tree 229s # - Reuse upload tag, create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[Commit.from_spec(name='upload')], 229s tags={'importer/upload/1-1': Placeholder('upload')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('upload'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('upload'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 6) No import tag and an existing upload tag with a different Git tree 229s # - Create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='upload', 229s mutate='The upload tag contents', 229s ), 229s ], 229s tags={'importer/upload/1-1': Placeholder('upload')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='publish', 229s message='Test commit (new)', 229s ), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('publish'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('publish'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 7) No import tags or upload tags 229s # - Create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo(), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='publish', 229s message='Test commit (new)', 229s ), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('publish'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('publish'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1' 229s ], 229s # reuse: 229s False, 229s ), 229s ] 229s ) 229s @patch('gitubuntu.importer.get_import_tag_msg') 229s @patch('gitubuntu.importer.get_import_commit_msg') 229s def test_import_unapplied_spi_tags( 229s get_import_commit_msg_mock, 229s get_import_tag_msg_mock, 229s repo, 229s input_repo, 229s expected_output_refs, 229s validation_repo_delta, 229s validation_repo_expected_identical_refs, 229s reuse, 229s ): 229s """Test that unapplied tags are correctly created, adjusted and/or reused 229s 229s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 229s that determines the commit message to use for a given import 229s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 229s that determines the tag message to use for a given import 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param repo_builder.Repo input_repo: input repository data 229s :param list(str) expected_output_refs: refs that must exist in the output 229s repository 229s :param dict validation_repo_delta: how to transform the input 229s repository into a "validation repository", expressed as a dict to 229s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 229s input repository. The validation repository is then used for the 229s purposes of comparison against the output repository. 229s :param list(str) validation_repo_expected_identical_refs: refs that must be 229s identical between the validation repository and the output repository 229s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 229s one supplied by the input repository (assumed to have a commit message 229s of "Test commit") and not one created by the importer in this run 229s (arranged by this test to have a different commit message) 229s 229s The input repository data is written into the output repository and then a 229s fake non-native source package publication of version 1-1 in the Trusty 229s release pocket is imported into it by calling import_unapplied_spi() 229s directly. expected_output_refs, validation_repo_expected_identical_refs and 229s reuse are then asserted. It is further asserted that no other refs exist in 229s the output repository except for those listed in expected_output_refs and 229s validation_repo_expected_identical_refs. 229s """ 229s # Match the repo_builder objects 229s get_import_tag_msg_mock.return_value = 'Test tag' 229s # Importantly, the following commit message must not be the same as the 229s # commit messages used by the test input repository commits, so that we can 229s # later detect the difference between commits that were already there and 229s # new commits created by the importer for the purposes of asserting the 229s # reuse parameter correctly. 229s get_import_commit_msg_mock.return_value = b'Test commit (new)' 229s 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_tag_test.py:463: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpgt5bkcrp/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _ test_import_unapplied_spi_tags[input_repo7-expected_output_refs7-validation_repo_delta7-validation_repo_expected_identical_refs7-False] _ 229s 229s get_import_commit_msg_mock = 229s get_import_tag_msg_mock = 229s repo = 229s input_repo = 229s expected_output_refs = ['refs/heads/do-not-push', 'refs/tags/importer/upstream/ubuntu/1.gz', 'refs/heads/importer/importer/ubuntu/dsc', 'refs/heads/importer/importer/ubuntu/pristine-tar', 'refs/notes/importer/changelog', 'refs/notes/importer/importer'] 229s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/ubuntu/trusty... 0x3ff8c958ef0>}, 'update_tags': {'importer/import/1-1': }} 229s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1'] 229s reuse = False 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'expected_output_refs', 229s 'validation_repo_delta', 229s 'validation_repo_expected_identical_refs', 229s 'reuse', 229s ], 229s [ 229s # 1) An existing import tag (or reimport tag) with the same Git tree 229s # - Reuse import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[Commit.from_spec(name='import')], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('import'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s ], 229s # reuse: 229s True, 229s ), 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='import tag contents', 229s ), 229s Commit.from_spec(name='reimport'), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 2) An existing import tag with a different Git tree and an existing 229s # upload tag with the same Git tree 229s # - Reuse upload tag, create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s Commit.from_spec(name='upload'), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-1': Placeholder('upload'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('upload'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('upload'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 3) An existing import tag with a different Git tree and an existing 229s # upload tag with a different Git tree 229s # - Create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s Commit.from_spec( 229s name='upload', 229s mutate='The upload tag contents', 229s ), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-1': Placeholder('upload'), 229s }, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [Commit.from_spec( 229s name='reimport', 229s message='Test commit (new)', 229s )], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 4) An existing import tag with a different Git tree and no upload tag 229s # - Create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='import', 229s mutate='The import tag contents', 229s ), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 229s }, 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [Commit.from_spec( 229s name='reimport', 229s message='Test commit (new)', 229s )], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('reimport'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty-proposed', 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 5) No import tag and an existing upload tag with the same Git tree 229s # - Reuse upload tag, create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[Commit.from_spec(name='upload')], 229s tags={'importer/upload/1-1': Placeholder('upload')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('upload'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('upload'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 6) No import tag and an existing upload tag with a different Git tree 229s # - Create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='upload', 229s mutate='The upload tag contents', 229s ), 229s ], 229s tags={'importer/upload/1-1': Placeholder('upload')}, 229s ), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='publish', 229s message='Test commit (new)', 229s ), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('publish'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('publish'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/upload/1-1', 229s ], 229s # reuse: 229s False, 229s ), 229s 229s # 7) No import tags or upload tags 229s # - Create import tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo(), 229s # expected_output_refs: 229s [ 229s 'refs/heads/do-not-push', 229s 'refs/tags/importer/upstream/ubuntu/1.gz', 229s 'refs/heads/importer/importer/ubuntu/dsc', 229s 'refs/heads/importer/importer/ubuntu/pristine-tar', 229s 'refs/notes/importer/changelog', 229s 'refs/notes/importer/importer', 229s ], 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='publish', 229s message='Test commit (new)', 229s ), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('publish'), 229s }, 229s 'update_branches': { 229s 'importer/ubuntu/trusty': Placeholder('publish'), 229s }, 229s }, 229s # validation_repo_expected_identical_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1' 229s ], 229s # reuse: 229s False, 229s ), 229s ] 229s ) 229s @patch('gitubuntu.importer.get_import_tag_msg') 229s @patch('gitubuntu.importer.get_import_commit_msg') 229s def test_import_unapplied_spi_tags( 229s get_import_commit_msg_mock, 229s get_import_tag_msg_mock, 229s repo, 229s input_repo, 229s expected_output_refs, 229s validation_repo_delta, 229s validation_repo_expected_identical_refs, 229s reuse, 229s ): 229s """Test that unapplied tags are correctly created, adjusted and/or reused 229s 229s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 229s that determines the commit message to use for a given import 229s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 229s that determines the tag message to use for a given import 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param repo_builder.Repo input_repo: input repository data 229s :param list(str) expected_output_refs: refs that must exist in the output 229s repository 229s :param dict validation_repo_delta: how to transform the input 229s repository into a "validation repository", expressed as a dict to 229s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 229s input repository. The validation repository is then used for the 229s purposes of comparison against the output repository. 229s :param list(str) validation_repo_expected_identical_refs: refs that must be 229s identical between the validation repository and the output repository 229s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 229s one supplied by the input repository (assumed to have a commit message 229s of "Test commit") and not one created by the importer in this run 229s (arranged by this test to have a different commit message) 229s 229s The input repository data is written into the output repository and then a 229s fake non-native source package publication of version 1-1 in the Trusty 229s release pocket is imported into it by calling import_unapplied_spi() 229s directly. expected_output_refs, validation_repo_expected_identical_refs and 229s reuse are then asserted. It is further asserted that no other refs exist in 229s the output repository except for those listed in expected_output_refs and 229s validation_repo_expected_identical_refs. 229s """ 229s # Match the repo_builder objects 229s get_import_tag_msg_mock.return_value = 'Test tag' 229s # Importantly, the following commit message must not be the same as the 229s # commit messages used by the test input repository commits, so that we can 229s # later detect the difference between commits that were already there and 229s # new commits created by the importer for the purposes of asserting the 229s # reuse parameter correctly. 229s get_import_commit_msg_mock.return_value = b'Test commit (new)' 229s 229s input_repo.write(repo.raw_repo) 229s 229s publish_spec = source_builder.SourceSpec( 229s version='1-1', 229s native=False, 229s ) 229s 229s with source_builder.Source(publish_spec) as dsc_path: 229s > target.import_unapplied_spi( 229s repo=repo, 229s spi=MockSPI(dsc_path, publish_spec.version), 229s namespace='importer', 229s skip_orig=False, 229s parent_overrides={}, 229s ) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_tag_test.py:471: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:2308: in import_unapplied_spi 229s import_unapplied_dsc( 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 229s commit, tag = find_or_create_unapplied_commit( 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 229s changelog_parents = get_unapplied_import_parents( 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 229s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 229s changelog = self.get_changelog_from_treeish(treeish) 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 229s return Changelog.from_treeish( 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:569: in from_treeish 229s blob = follow_symlinks_to_blob( 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 229s return _follow_symlinks_to_blob( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s repo = pygit2.Repository('/tmp/tmpr_kabnzb/.git/') 229s top_tree_object = 229s search_path = 'debian/changelog' 229s _rel_tree = 229s _rel_path = '' 229s 229s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 229s _rel_tree=None, _rel_path='' 229s ): 229s '''Recursively follow a path down a tree, following symlinks, to find blob 229s 229s repo: pygit2.Repository object 229s top_tree: pygit2.Tree object of the top of the tree structure 229s search_path: '/'-separated path string of blob to find 229s _rel_tree: (internal) which tree to look further into 229s _rel_path: (internal) the path we are in so far 229s ''' 229s 229s NORMAL_BLOB_MODES = set([ 229s pygit2.GIT_FILEMODE_BLOB, 229s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 229s ]) 229s 229s _rel_tree = _rel_tree or top_tree_object 229s head, tail = posixpath.split(search_path) 229s 229s # A traditional functional split would put a single entry in head with tail 229s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 229s # to make it appear to have traditional semantics. 229s if not head: 229s head = tail 229s tail = None 229s 229s entry = _rel_tree[head] 229s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s _ test_import_applied_spi_tags[input_repo0-validation_repo_delta0-validation_repo_expected_treewise_refs0-True] _ 229s 229s get_import_commit_msg_mock = 229s get_import_tag_msg_mock = 229s repo = 229s input_repo = 229s validation_repo_delta = {} 229s validation_repo_expected_treewise_refs = ['refs/heads/importer/ubuntu/trusty', 'refs/heads/importer/applied/ubuntu/trusty', 'refs/tags/importer/import/1-1', 'refs/tags/importer/applied/1-1'] 229s reuse = True 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'validation_repo_delta', 229s 'validation_repo_expected_treewise_refs', 229s 'reuse', 229s ], 229s [ 229s # 1) An existing applied tag (or reimport tag) with the same Git tree 229s # - Reuse applied tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec(name='unapplied', has_patches=True), 229s Commit.from_spec(name='applied', patches_applied=True), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty': Placeholder('unapplied'), 229s 'importer/applied/ubuntu/trusty': Placeholder('applied'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('unapplied'), 229s 'importer/applied/1-1': Placeholder('applied'), 229s }, 229s ), 229s # validation_repo_delta: 229s { 229s # no output repository delta 229s }, 229s # validation_repo_expected_treewise_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/heads/importer/applied/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/applied/1-1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 2) An existing applied tag with a different Git tree 229s # - Create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='unapplied', 229s has_patches=True, 229s mutate='import tag contents', 229s ), 229s Commit.from_spec( 229s name='unapplied_reimport', 229s has_patches=True, 229s ), 229s Commit.from_spec( 229s name='applied', 229s patches_applied=True, 229s mutate='import tag contents', 229s ) 229s ], 229s branches={'importer/ubuntu/trusty': Placeholder('unapplied')}, 229s tags={ 229s 'importer/import/1-1': 229s Placeholder('unapplied'), 229s 'importer/reimport/import/1-1/0': 229s Placeholder('unapplied'), 229s 'importer/reimport/import/1-1/1': 229s Placeholder('unapplied_reimport'), 229s 'importer/applied/1-1': 229s Placeholder('applied'), 229s }, 229s ), 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='applied_reimport', 229s patches_applied=True, 229s parents=[Placeholder('unapplied_reimport')], 229s ), 229s ], 229s 'update_tags': { 229s 'importer/reimport/applied/1-1/0': 229s Placeholder('applied'), 229s 'importer/reimport/applied/1-1/1': 229s Placeholder('applied_reimport'), 229s }, 229s 'update_branches': { 229s 'importer/applied/ubuntu/trusty': 229s Placeholder('applied_reimport'), 229s }, 229s }, 229s # validation_repo_expected_treewise_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/heads/importer/applied/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s 'refs/tags/importer/applied/1-1', 229s 'refs/tags/importer/reimport/applied/1-1/0', 229s 'refs/tags/importer/reimport/applied/1-1/1', 229s ], 229s # reuse: 229s False, 229s 229s marks=pytest.mark.xfail(reason='LP: #1755247'), 229s ), 229s 229s # 3) No applied tags 229s # - Create applied tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[Commit.from_spec(name='unapplied', has_patches=True)], 229s branches={'importer/ubuntu/trusty': Placeholder('unapplied')}, 229s tags={'importer/import/1-1': Placeholder('unapplied')}, 229s ), 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='applied', 229s patches_applied=True, 229s parents=[Placeholder('unapplied')], 229s ), 229s ], 229s 'update_tags': { 229s 'importer/applied/1-1': Placeholder('applied') 229s }, 229s 'update_branches': { 229s 'importer/applied/ubuntu/trusty': Placeholder('applied'), 229s }, 229s }, 229s # validation_repo_expected_treewise_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/heads/importer/applied/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/applied/1-1' 229s ], 229s # reuse: 229s False, 229s ), 229s ] 229s ) 229s @patch('gitubuntu.importer.get_import_tag_msg') 229s @patch('gitubuntu.importer.get_import_commit_msg') 229s def test_import_applied_spi_tags( 229s get_import_commit_msg_mock, 229s get_import_tag_msg_mock, 229s repo, 229s input_repo, 229s validation_repo_delta, 229s validation_repo_expected_treewise_refs, 229s reuse, 229s ): 229s """Test that applied tags are correctly created, adjusted and/or reused 229s 229s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 229s that determines the commit message to use for a given import 229s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 229s that determines the tag message to use for a given import 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param repo_builder.Repo input_repo: input repository data 229s :param dict validation_repo_delta: how to transform the input repository 229s into a "validation repository", expressed as a dict to 229s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 229s input repository. The validation repository is then used for the 229s purposes of comparison against the output repository. 229s :param list(str) validation_repo_expected_treewise_refs: refs whose trees 229s must be identical between the validation repository and the output 229s repository 229s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 229s one supplied by the input repository (assumed to have a commit message 229s of "Test commit") and not one created by the importer in this run 229s (arranged by this test to have a different commit message) 229s 229s The input repository data is written into the output repository and then a 229s fake non-native source package publication of version 1-1 in the Trusty 229s release pocket is imported into it by calling import_applied_spi() 229s directly. reuse and validation_repo_expected_treewise_refs are then 229s asserted. 229s 229s This is similar to test_unapplied_spi_tags except that it calls 229s import_applied_spi() instead of import_unapplied_spi() and only treewise 229s ref comparisons are made. 229s """ 229s # Match the repo_builder objects 229s get_import_tag_msg_mock.return_value = 'Test tag' 229s # Importantly, the following commit message must not be the same as the 229s # commit messages used by the test input repository commits, so that we can 229s # later detect the difference between commits that were already there and 229s # new commits created by the importer for the purposes of asserting the 229s # reuse parameter correctly. 229s get_import_commit_msg_mock.return_value = b'Test commit (new)' 229s 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_tag_test.py:711: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmp1lng428i/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: using patch list from debian/patches/series 229s dpkg-source: info: applying a 229s dpkg-source: info: applying b 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: using patch list from debian/patches/series 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: using patch list from debian/patches/series 229s dpkg-source: info: applying a 229s dpkg-source: info: applying b 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: using patch list from debian/patches/series 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: using patch list from debian/patches/series 229s dpkg-source: info: applying a 229s dpkg-source: info: applying b 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: using patch list from debian/patches/series 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: using patch list from debian/patches/series 229s dpkg-source: info: applying a 229s dpkg-source: info: applying b 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: using patch list from debian/patches/series 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: using patch list from debian/patches/series 229s dpkg-source: info: applying a 229s dpkg-source: info: applying b 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: using patch list from debian/patches/series 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _ test_import_applied_spi_tags[input_repo2-validation_repo_delta2-validation_repo_expected_treewise_refs2-False] _ 229s 229s get_import_commit_msg_mock = 229s get_import_tag_msg_mock = 229s repo = 229s input_repo = 229s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/applied/ubunt...0x3ff8c95a270>}, 'update_tags': {'importer/applied/1-1': }} 229s validation_repo_expected_treewise_refs = ['refs/heads/importer/ubuntu/trusty', 'refs/heads/importer/applied/ubuntu/trusty', 'refs/tags/importer/import/1-1', 'refs/tags/importer/applied/1-1'] 229s reuse = False 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'validation_repo_delta', 229s 'validation_repo_expected_treewise_refs', 229s 'reuse', 229s ], 229s [ 229s # 1) An existing applied tag (or reimport tag) with the same Git tree 229s # - Reuse applied tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec(name='unapplied', has_patches=True), 229s Commit.from_spec(name='applied', patches_applied=True), 229s ], 229s branches={ 229s 'importer/ubuntu/trusty': Placeholder('unapplied'), 229s 'importer/applied/ubuntu/trusty': Placeholder('applied'), 229s }, 229s tags={ 229s 'importer/import/1-1': Placeholder('unapplied'), 229s 'importer/applied/1-1': Placeholder('applied'), 229s }, 229s ), 229s # validation_repo_delta: 229s { 229s # no output repository delta 229s }, 229s # validation_repo_expected_treewise_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/heads/importer/applied/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/applied/1-1', 229s ], 229s # reuse: 229s True, 229s ), 229s 229s # 2) An existing applied tag with a different Git tree 229s # - Create reimport tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[ 229s Commit.from_spec( 229s name='unapplied', 229s has_patches=True, 229s mutate='import tag contents', 229s ), 229s Commit.from_spec( 229s name='unapplied_reimport', 229s has_patches=True, 229s ), 229s Commit.from_spec( 229s name='applied', 229s patches_applied=True, 229s mutate='import tag contents', 229s ) 229s ], 229s branches={'importer/ubuntu/trusty': Placeholder('unapplied')}, 229s tags={ 229s 'importer/import/1-1': 229s Placeholder('unapplied'), 229s 'importer/reimport/import/1-1/0': 229s Placeholder('unapplied'), 229s 'importer/reimport/import/1-1/1': 229s Placeholder('unapplied_reimport'), 229s 'importer/applied/1-1': 229s Placeholder('applied'), 229s }, 229s ), 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='applied_reimport', 229s patches_applied=True, 229s parents=[Placeholder('unapplied_reimport')], 229s ), 229s ], 229s 'update_tags': { 229s 'importer/reimport/applied/1-1/0': 229s Placeholder('applied'), 229s 'importer/reimport/applied/1-1/1': 229s Placeholder('applied_reimport'), 229s }, 229s 'update_branches': { 229s 'importer/applied/ubuntu/trusty': 229s Placeholder('applied_reimport'), 229s }, 229s }, 229s # validation_repo_expected_treewise_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/heads/importer/applied/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s 'refs/tags/importer/applied/1-1', 229s 'refs/tags/importer/reimport/applied/1-1/0', 229s 'refs/tags/importer/reimport/applied/1-1/1', 229s ], 229s # reuse: 229s False, 229s 229s marks=pytest.mark.xfail(reason='LP: #1755247'), 229s ), 229s 229s # 3) No applied tags 229s # - Create applied tag 229s pytest.param( 229s # input_repo: 229s repo_builder.Repo( 229s commits=[Commit.from_spec(name='unapplied', has_patches=True)], 229s branches={'importer/ubuntu/trusty': Placeholder('unapplied')}, 229s tags={'importer/import/1-1': Placeholder('unapplied')}, 229s ), 229s # validation_repo_delta: 229s { 229s 'add_commits': [ 229s Commit.from_spec( 229s name='applied', 229s patches_applied=True, 229s parents=[Placeholder('unapplied')], 229s ), 229s ], 229s 'update_tags': { 229s 'importer/applied/1-1': Placeholder('applied') 229s }, 229s 'update_branches': { 229s 'importer/applied/ubuntu/trusty': Placeholder('applied'), 229s }, 229s }, 229s # validation_repo_expected_treewise_refs: 229s [ 229s 'refs/heads/importer/ubuntu/trusty', 229s 'refs/heads/importer/applied/ubuntu/trusty', 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/applied/1-1' 229s ], 229s # reuse: 229s False, 229s ), 229s ] 229s ) 229s @patch('gitubuntu.importer.get_import_tag_msg') 229s @patch('gitubuntu.importer.get_import_commit_msg') 229s def test_import_applied_spi_tags( 229s get_import_commit_msg_mock, 229s get_import_tag_msg_mock, 229s repo, 229s input_repo, 229s validation_repo_delta, 229s validation_repo_expected_treewise_refs, 229s reuse, 229s ): 229s """Test that applied tags are correctly created, adjusted and/or reused 229s 229s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 229s that determines the commit message to use for a given import 229s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 229s that determines the tag message to use for a given import 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param repo_builder.Repo input_repo: input repository data 229s :param dict validation_repo_delta: how to transform the input repository 229s into a "validation repository", expressed as a dict to 229s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 229s input repository. The validation repository is then used for the 229s purposes of comparison against the output repository. 229s :param list(str) validation_repo_expected_treewise_refs: refs whose trees 229s must be identical between the validation repository and the output 229s repository 229s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 229s one supplied by the input repository (assumed to have a commit message 229s of "Test commit") and not one created by the importer in this run 229s (arranged by this test to have a different commit message) 229s 229s The input repository data is written into the output repository and then a 229s fake non-native source package publication of version 1-1 in the Trusty 229s release pocket is imported into it by calling import_applied_spi() 229s directly. reuse and validation_repo_expected_treewise_refs are then 229s asserted. 229s 229s This is similar to test_unapplied_spi_tags except that it calls 229s import_applied_spi() instead of import_unapplied_spi() and only treewise 229s ref comparisons are made. 229s """ 229s # Match the repo_builder objects 229s get_import_tag_msg_mock.return_value = 'Test tag' 229s # Importantly, the following commit message must not be the same as the 229s # commit messages used by the test input repository commits, so that we can 229s # later detect the difference between commits that were already there and 229s # new commits created by the importer for the purposes of asserting the 229s # reuse parameter correctly. 229s get_import_commit_msg_mock.return_value = b'Test commit (new)' 229s 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_tag_test.py:711: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpe5gxh_jg/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: using patch list from debian/patches/series 229s dpkg-source: info: applying a 229s dpkg-source: info: applying b 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: using patch list from debian/patches/series 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: using patch list from debian/patches/series 229s dpkg-source: info: applying a 229s dpkg-source: info: applying b 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: using patch list from debian/patches/series 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: using patch list from debian/patches/series 229s dpkg-source: info: applying a 229s dpkg-source: info: applying b 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: using patch list from debian/patches/series 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s __ test_get_existing_import_tags[input_repo1-PatchState.UNAPPLIED-expected1] ___ 229s 229s repo = 229s patch_state = 229s input_repo = 229s expected = ['refs/tags/importer/import/1-1'] 229s 229s @pytest.mark.parametrize( 229s 'input_repo, patch_state, expected', [ 229s ( 229s repo_builder.Repo(), 229s PatchState.UNAPPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s tags={'importer/import/1-1': repo_builder.Commit()}, 229s ), 229s PatchState.UNAPPLIED, 229s ['refs/tags/importer/import/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit(name='import'), 229s repo_builder.Commit(name='reimport1'), 229s ], 229s tags={ 229s 'importer/import/1-1': repo_builder.Commit(), 229s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 229s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 229s }, 229s ), 229s PatchState.UNAPPLIED, 229s [ 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo(), 229s PatchState.APPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s tags={'importer/applied/1-1': repo_builder.Commit()}, 229s ), 229s PatchState.APPLIED, 229s ['refs/tags/importer/applied/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit(name='applied'), 229s repo_builder.Commit(name='reimport1'), 229s ], 229s tags={ 229s 'importer/applied/1-1': repo_builder.Commit(), 229s 'importer/reimport/applied/1-1/0': repo_builder.Commit(), 229s 'importer/reimport/applied/1-1/1': repo_builder.Commit(), 229s }, 229s ), 229s PatchState.APPLIED, 229s [ 229s 'refs/tags/importer/reimport/applied/1-1/0', 229s 'refs/tags/importer/reimport/applied/1-1/1', 229s ], 229s ), 229s ], 229s ) 229s def test_get_existing_import_tags(repo, patch_state, input_repo, expected): 229s """Test that get_existing_import_tags is generally correct 229s 229s This is the general parameterised test for the common case uses of 229s target.get_existing_import_tags. 229s 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param PatchState patch_state: passed through to get_existing_import_tags 229s :param repo_builder.Repo input_repo: input repository data 229s :param list(str) expected: the names of the references that are expected to 229s be returned, in order. 229s """ 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:214: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpllv8qwl2/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s __ test_get_existing_import_tags[input_repo2-PatchState.UNAPPLIED-expected2] ___ 229s 229s repo = 229s patch_state = 229s input_repo = 229s expected = ['refs/tags/importer/reimport/import/1-1/0', 'refs/tags/importer/reimport/import/1-1/1'] 229s 229s @pytest.mark.parametrize( 229s 'input_repo, patch_state, expected', [ 229s ( 229s repo_builder.Repo(), 229s PatchState.UNAPPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s tags={'importer/import/1-1': repo_builder.Commit()}, 229s ), 229s PatchState.UNAPPLIED, 229s ['refs/tags/importer/import/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit(name='import'), 229s repo_builder.Commit(name='reimport1'), 229s ], 229s tags={ 229s 'importer/import/1-1': repo_builder.Commit(), 229s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 229s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 229s }, 229s ), 229s PatchState.UNAPPLIED, 229s [ 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo(), 229s PatchState.APPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s tags={'importer/applied/1-1': repo_builder.Commit()}, 229s ), 229s PatchState.APPLIED, 229s ['refs/tags/importer/applied/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit(name='applied'), 229s repo_builder.Commit(name='reimport1'), 229s ], 229s tags={ 229s 'importer/applied/1-1': repo_builder.Commit(), 229s 'importer/reimport/applied/1-1/0': repo_builder.Commit(), 229s 'importer/reimport/applied/1-1/1': repo_builder.Commit(), 229s }, 229s ), 229s PatchState.APPLIED, 229s [ 229s 'refs/tags/importer/reimport/applied/1-1/0', 229s 'refs/tags/importer/reimport/applied/1-1/1', 229s ], 229s ), 229s ], 229s ) 229s def test_get_existing_import_tags(repo, patch_state, input_repo, expected): 229s """Test that get_existing_import_tags is generally correct 229s 229s This is the general parameterised test for the common case uses of 229s target.get_existing_import_tags. 229s 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param PatchState patch_state: passed through to get_existing_import_tags 229s :param repo_builder.Repo input_repo: input repository data 229s :param list(str) expected: the names of the references that are expected to 229s be returned, in order. 229s """ 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:214: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpekp9o9uy/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ___ test_get_existing_import_tags[input_repo4-PatchState.APPLIED-expected4] ____ 229s 229s repo = 229s patch_state = 229s input_repo = 229s expected = ['refs/tags/importer/applied/1-1'] 229s 229s @pytest.mark.parametrize( 229s 'input_repo, patch_state, expected', [ 229s ( 229s repo_builder.Repo(), 229s PatchState.UNAPPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s tags={'importer/import/1-1': repo_builder.Commit()}, 229s ), 229s PatchState.UNAPPLIED, 229s ['refs/tags/importer/import/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit(name='import'), 229s repo_builder.Commit(name='reimport1'), 229s ], 229s tags={ 229s 'importer/import/1-1': repo_builder.Commit(), 229s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 229s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 229s }, 229s ), 229s PatchState.UNAPPLIED, 229s [ 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo(), 229s PatchState.APPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s tags={'importer/applied/1-1': repo_builder.Commit()}, 229s ), 229s PatchState.APPLIED, 229s ['refs/tags/importer/applied/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit(name='applied'), 229s repo_builder.Commit(name='reimport1'), 229s ], 229s tags={ 229s 'importer/applied/1-1': repo_builder.Commit(), 229s 'importer/reimport/applied/1-1/0': repo_builder.Commit(), 229s 'importer/reimport/applied/1-1/1': repo_builder.Commit(), 229s }, 229s ), 229s PatchState.APPLIED, 229s [ 229s 'refs/tags/importer/reimport/applied/1-1/0', 229s 'refs/tags/importer/reimport/applied/1-1/1', 229s ], 229s ), 229s ], 229s ) 229s def test_get_existing_import_tags(repo, patch_state, input_repo, expected): 229s """Test that get_existing_import_tags is generally correct 229s 229s This is the general parameterised test for the common case uses of 229s target.get_existing_import_tags. 229s 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param PatchState patch_state: passed through to get_existing_import_tags 229s :param repo_builder.Repo input_repo: input repository data 229s :param list(str) expected: the names of the references that are expected to 229s be returned, in order. 229s """ 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:214: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmp481_a85k/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ___ test_get_existing_import_tags[input_repo5-PatchState.APPLIED-expected5] ____ 229s 229s repo = 229s patch_state = 229s input_repo = 229s expected = ['refs/tags/importer/reimport/applied/1-1/0', 'refs/tags/importer/reimport/applied/1-1/1'] 229s 229s @pytest.mark.parametrize( 229s 'input_repo, patch_state, expected', [ 229s ( 229s repo_builder.Repo(), 229s PatchState.UNAPPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s tags={'importer/import/1-1': repo_builder.Commit()}, 229s ), 229s PatchState.UNAPPLIED, 229s ['refs/tags/importer/import/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit(name='import'), 229s repo_builder.Commit(name='reimport1'), 229s ], 229s tags={ 229s 'importer/import/1-1': repo_builder.Commit(), 229s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 229s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 229s }, 229s ), 229s PatchState.UNAPPLIED, 229s [ 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo(), 229s PatchState.APPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s tags={'importer/applied/1-1': repo_builder.Commit()}, 229s ), 229s PatchState.APPLIED, 229s ['refs/tags/importer/applied/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit(name='applied'), 229s repo_builder.Commit(name='reimport1'), 229s ], 229s tags={ 229s 'importer/applied/1-1': repo_builder.Commit(), 229s 'importer/reimport/applied/1-1/0': repo_builder.Commit(), 229s 'importer/reimport/applied/1-1/1': repo_builder.Commit(), 229s }, 229s ), 229s PatchState.APPLIED, 229s [ 229s 'refs/tags/importer/reimport/applied/1-1/0', 229s 'refs/tags/importer/reimport/applied/1-1/1', 229s ], 229s ), 229s ], 229s ) 229s def test_get_existing_import_tags(repo, patch_state, input_repo, expected): 229s """Test that get_existing_import_tags is generally correct 229s 229s This is the general parameterised test for the common case uses of 229s target.get_existing_import_tags. 229s 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param PatchState patch_state: passed through to get_existing_import_tags 229s :param repo_builder.Repo input_repo: input repository data 229s :param list(str) expected: the names of the references that are expected to 229s be returned, in order. 229s """ 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:214: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmppaj17win/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ____________________ test_get_existing_import_tags_ordering ____________________ 229s 229s repo = 229s 229s def test_get_existing_import_tags_ordering(repo): 229s """Test that get_existing_import_tags returns results in the correct order 229s 229s To maintain hash stability, the spec defines that multiple changelog 229s parents must appear in the order that they were published. For this to 229s work, get_existing_import_tags must return the tags in the correct order 229s even if the underlying git repository tags appear in an arbitrary order. 229s 229s :param GitUbuntuRepository repo: fixture of a temporary repository to use 229s """ 229s 229s # Construct a synthetic git repository containing tags 229s repo_builder.Repo( 229s tags={ 229s 'importer/import/1-1': repo_builder.Commit(), 229s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 229s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 229s } 229s > ).write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:240: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpn4ytiuls/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s _ test_create_import_tag[input_repo0-validation_repo_delta0-validation_repo_expected_identical_refs0] _ 229s 229s repo = 229s input_repo = 229s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-1': }} 229s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1'] 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'validation_repo_delta', 229s 'validation_repo_expected_identical_refs', 229s ], 229s [ 229s ( 229s repo_builder.Repo(), 229s { 229s 'add_commits': [ 229s repo_builder.Commit(name='import'), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('import'), 229s }, 229s }, 229s [ 229s 'refs/tags/importer/import/1-1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit(name='import')], 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s { 229s 'add_commits': [ 229s repo_builder.Commit(name='reimport'), 229s ], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s }, 229s [ 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit(name='import'), 229s repo_builder.Commit(name='reimport1'), 229s ], 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport1'), 229s }, 229s ), 229s { 229s 'add_commits': [ 229s repo_builder.Commit(name='reimport2'), 229s ], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/2': Placeholder('reimport2'), 229s }, 229s }, 229s [ 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s 'refs/tags/importer/reimport/import/1-1/2', 229s ], 229s ), 229s ], 229s ) 229s def test_create_import_tag( 229s repo, 229s input_repo, 229s validation_repo_delta, 229s validation_repo_expected_identical_refs, 229s ): 229s """ 229s Unit test that create_import_tag creates the correct import tag 229s 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param repo_builder.Repo input_repo: input repository data 229s :param dict validation_repo_delta: how to transform the input repository 229s into a "validation repository", expressed as a dict to 229s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 229s input repository. The validation repository is then used for the 229s purposes of comparison against the output repository. 229s :param list(str) validation_repo_expected_identical_refs: refs that must be 229s identical between the validation repository and the output repository 229s """ 229s publish_commit = repo.raw_repo.get( 229s repo_builder.Commit().write(repo.raw_repo) 229s ).peel(pygit2.Commit) 229s input_repo.write(repo.raw_repo) 229s 229s > target.create_import_tag(repo, publish_commit, '1-1', 'importer') 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:370: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:1379: in create_import_tag 229s repo.create_tag( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s commit_hash = '240dd844a69653244edb52c57c42d709512d64cd' 229s tag_name = 'importer/import/1-1', tag_msg = 'git-ubuntu import' 229s tagger = pygit2.Signature('git-ubuntu importer', 'ubuntu-devel-discuss@lists.ubuntu.com', 0, 0, None) 229s 229s def create_tag(self, 229s commit_hash, 229s tag_name, 229s tag_msg, 229s tagger=None, 229s ): 229s """Create a tag in the repository 229s 229s :param str commit_hash: the commit hash the tag will point to. 229s :param str tag_name: the name of the tag to be created. 229s :param str tag_msg: the text of the tag annotation. 229s :param pygit2.Signature tagger: if supplied, use this signature in the 229s created tag's "tagger" metadata. If not supplied, an arbitrary name 229s and email address is used with the current time. 229s :returns: None 229s """ 229s if not tagger: 229s tagger_time, tagger_offset = datetime_to_signature_spec( 229s datetime.datetime.now(), 229s ) 229s tagger = pygit2.Signature( 229s gitubuntu.spec.SYNTHESIZED_COMMITTER_NAME, 229s gitubuntu.spec.SYNTHESIZED_COMMITTER_EMAIL, 229s tagger_time, 229s tagger_offset, 229s ) 229s 229s logging.debug("Creating tag %s pointing to %s", tag_name, commit_hash) 229s self.raw_repo.create_tag( 229s tag_name, 229s pygit2.Oid(hex=commit_hash), 229s > pygit2.GIT_OBJ_COMMIT, 229s tagger, 229s tag_msg, 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:2114: AttributeError 229s _ test_create_import_tag[input_repo1-validation_repo_delta1-validation_repo_expected_identical_refs1] _ 229s 229s repo = 229s input_repo = 229s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/reimport/import/1...ect at 0x3ff8c986330>, 'importer/reimport/import/1-1/1': }} 229s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1', 'refs/tags/importer/reimport/import/1-1/0', 'refs/tags/importer/reimport/import/1-1/1'] 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'validation_repo_delta', 229s 'validation_repo_expected_identical_refs', 229s ], 229s [ 229s ( 229s repo_builder.Repo(), 229s { 229s 'add_commits': [ 229s repo_builder.Commit(name='import'), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('import'), 229s }, 229s }, 229s [ 229s 'refs/tags/importer/import/1-1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit(name='import')], 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s { 229s 'add_commits': [ 229s repo_builder.Commit(name='reimport'), 229s ], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s }, 229s [ 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit(name='import'), 229s repo_builder.Commit(name='reimport1'), 229s ], 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport1'), 229s }, 229s ), 229s { 229s 'add_commits': [ 229s repo_builder.Commit(name='reimport2'), 229s ], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/2': Placeholder('reimport2'), 229s }, 229s }, 229s [ 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s 'refs/tags/importer/reimport/import/1-1/2', 229s ], 229s ), 229s ], 229s ) 229s def test_create_import_tag( 229s repo, 229s input_repo, 229s validation_repo_delta, 229s validation_repo_expected_identical_refs, 229s ): 229s """ 229s Unit test that create_import_tag creates the correct import tag 229s 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param repo_builder.Repo input_repo: input repository data 229s :param dict validation_repo_delta: how to transform the input repository 229s into a "validation repository", expressed as a dict to 229s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 229s input repository. The validation repository is then used for the 229s purposes of comparison against the output repository. 229s :param list(str) validation_repo_expected_identical_refs: refs that must be 229s identical between the validation repository and the output repository 229s """ 229s publish_commit = repo.raw_repo.get( 229s repo_builder.Commit().write(repo.raw_repo) 229s ).peel(pygit2.Commit) 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:368: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmp6s3bq58h/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s _ test_create_import_tag[input_repo2-validation_repo_delta2-validation_repo_expected_identical_refs2] _ 229s 229s repo = 229s input_repo = 229s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/reimport/import/1-1/2': }} 229s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1', 'refs/tags/importer/reimport/import/1-1/0', 'refs/tags/importer/reimport/import/1-1/1', 'refs/tags/importer/reimport/import/1-1/2'] 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'validation_repo_delta', 229s 'validation_repo_expected_identical_refs', 229s ], 229s [ 229s ( 229s repo_builder.Repo(), 229s { 229s 'add_commits': [ 229s repo_builder.Commit(name='import'), 229s ], 229s 'update_tags': { 229s 'importer/import/1-1': Placeholder('import'), 229s }, 229s }, 229s [ 229s 'refs/tags/importer/import/1-1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit(name='import')], 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s { 229s 'add_commits': [ 229s repo_builder.Commit(name='reimport'), 229s ], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s }, 229s [ 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit(name='import'), 229s repo_builder.Commit(name='reimport1'), 229s ], 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport1'), 229s }, 229s ), 229s { 229s 'add_commits': [ 229s repo_builder.Commit(name='reimport2'), 229s ], 229s 'update_tags': { 229s 'importer/reimport/import/1-1/2': Placeholder('reimport2'), 229s }, 229s }, 229s [ 229s 'refs/tags/importer/import/1-1', 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s 'refs/tags/importer/reimport/import/1-1/2', 229s ], 229s ), 229s ], 229s ) 229s def test_create_import_tag( 229s repo, 229s input_repo, 229s validation_repo_delta, 229s validation_repo_expected_identical_refs, 229s ): 229s """ 229s Unit test that create_import_tag creates the correct import tag 229s 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param repo_builder.Repo input_repo: input repository data 229s :param dict validation_repo_delta: how to transform the input repository 229s into a "validation repository", expressed as a dict to 229s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 229s input repository. The validation repository is then used for the 229s purposes of comparison against the output repository. 229s :param list(str) validation_repo_expected_identical_refs: refs that must be 229s identical between the validation repository and the output repository 229s """ 229s publish_commit = repo.raw_repo.get( 229s repo_builder.Commit().write(repo.raw_repo) 229s ).peel(pygit2.Commit) 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:368: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpmw3h7j8t/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ____________ test_create_import_tag_hash_stability_on_first_import _____________ 229s 229s repo = 229s 229s def test_create_import_tag_hash_stability_on_first_import(repo): 229s """Created import tags should be hash stable on first import 229s 229s :param GitUbuntuRepository repo: fixture providing a temporary 229s GitUbuntuRepository instance to use 229s """ 229s publish_commit = repo.raw_repo.get( 229s repo_builder.Commit( 229s author=pygit2.Signature( 229s 'Hash stability test author', 229s 'newauthor@example.com', 229s 1, 229s 2, 229s ), 229s committer=pygit2.Signature( 229s 'Hash stability test committer', 229s 'newcommitter@example.com', 229s 3, 229s 4, 229s ), 229s ).write(repo.raw_repo) 229s ).peel(pygit2.Commit) 229s > target.create_import_tag(repo, publish_commit, '1-1', 'importer') 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:402: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:1379: in create_import_tag 229s repo.create_tag( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s commit_hash = '65729a1dca101328820bf4f49fbca4e9571a772a' 229s tag_name = 'importer/import/1-1', tag_msg = 'git-ubuntu import' 229s tagger = pygit2.Signature('git-ubuntu importer', 'ubuntu-devel-discuss@lists.ubuntu.com', 3, 4, None) 229s 229s def create_tag(self, 229s commit_hash, 229s tag_name, 229s tag_msg, 229s tagger=None, 229s ): 229s """Create a tag in the repository 229s 229s :param str commit_hash: the commit hash the tag will point to. 229s :param str tag_name: the name of the tag to be created. 229s :param str tag_msg: the text of the tag annotation. 229s :param pygit2.Signature tagger: if supplied, use this signature in the 229s created tag's "tagger" metadata. If not supplied, an arbitrary name 229s and email address is used with the current time. 229s :returns: None 229s """ 229s if not tagger: 229s tagger_time, tagger_offset = datetime_to_signature_spec( 229s datetime.datetime.now(), 229s ) 229s tagger = pygit2.Signature( 229s gitubuntu.spec.SYNTHESIZED_COMMITTER_NAME, 229s gitubuntu.spec.SYNTHESIZED_COMMITTER_EMAIL, 229s tagger_time, 229s tagger_offset, 229s ) 229s 229s logging.debug("Creating tag %s pointing to %s", tag_name, commit_hash) 229s self.raw_repo.create_tag( 229s tag_name, 229s pygit2.Oid(hex=commit_hash), 229s > pygit2.GIT_OBJ_COMMIT, 229s tagger, 229s tag_msg, 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:2114: AttributeError 229s ______________ test_create_import_tag_hash_stability_on_reimport _______________ 229s 229s repo = 229s 229s def test_create_import_tag_hash_stability_on_reimport(repo): 229s """Created import tags should be hash stable on reimport 229s 229s This includes both the /0 duplicate reimport tag of the original import tag 229s as well as the /1 reimport tag being created. 229s 229s :param GitUbuntuRepository repo: fixture providing a temporary 229s GitUbuntuRepository instance to use 229s """ 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit( 229s name='root', 229s author=pygit2.Signature( 229s 'Hash stability test author', 229s 'author@example.com', 229s 1, 229s 2, 229s ), 229s committer=pygit2.Signature( 229s 'Hash stability test committer', 229s 'committer@example.com', 229s 3, 229s 4, 229s ), 229s ), 229s ], 229s tags={ 229s 'importer/import/1-1': Placeholder('root'), 229s }, 229s tagger=pygit2.Signature( 229s 'Hash stability test name', 229s 'stability@example.com', 229s 5, 229s 6, 229s ), 229s > ).write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:449: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpuh0el_qp/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s _ test_create_applied_tag[input_repo0-validation_repo_delta0-validation_repo_expected_identical_refs0] _ 229s 229s repo = 229s input_repo = 229s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/applied/1-1': }} 229s validation_repo_expected_identical_refs = ['refs/tags/importer/applied/1-1'] 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'validation_repo_delta', 229s 'validation_repo_expected_identical_refs', 229s ], 229s [ 229s ( 229s repo_builder.Repo(), 229s { 229s 'add_commits': [repo_builder.Commit(name='import')], 229s 'update_tags': {'importer/applied/1-1': Placeholder('import')}, 229s }, 229s [ 229s 'refs/tags/importer/applied/1-1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit(name='import')], 229s tags={'importer/applied/1-1': Placeholder('import')}, 229s ), 229s { 229s 'add_commits': [repo_builder.Commit(name='reimport')], 229s 'update_tags': { 229s 'importer/reimport/applied/1-1/0': Placeholder('import'), 229s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 229s }, 229s }, 229s [ 229s 'refs/tags/importer/applied/1-1', 229s 'refs/tags/importer/reimport/applied/1-1/0', 229s 'refs/tags/importer/reimport/applied/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit(name='import'), 229s repo_builder.Commit(name='reimport1'), 229s ], 229s tags={ 229s 'importer/applied/1-1': Placeholder('import'), 229s 'importer/reimport/applied/1-1/0': Placeholder('import'), 229s 'importer/reimport/applied/1-1/1': Placeholder('reimport1'), 229s }, 229s ), 229s { 229s 'add_commits': [ 229s repo_builder.Commit(name='reimport2') 229s ], 229s 'update_tags': { 229s 'importer/reimport/applied/1-1/2': Placeholder('reimport2'), 229s }, 229s }, 229s [ 229s 'refs/tags/importer/applied/1-1', 229s 'refs/tags/importer/reimport/applied/1-1/0', 229s 'refs/tags/importer/reimport/applied/1-1/1', 229s 'refs/tags/importer/reimport/applied/1-1/2', 229s ], 229s ), 229s ], 229s ) 229s def test_create_applied_tag( 229s repo, 229s input_repo, 229s validation_repo_delta, 229s validation_repo_expected_identical_refs, 229s ): 229s """ 229s Unit test that create_applied_tag creates the correct import tag 229s 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param repo_builder.Repo input_repo: input repository data 229s :param dict validation_repo_delta: how to transform the input repository 229s into a "validation repository", expressed as a dict to 229s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 229s input repository. The validation repository is then used for the 229s purposes of comparison against the output repository. 229s :param list(str) validation_repo_expected_identical_refs: refs that must be 229s identical between the validation repository and the output repository 229s """ 229s publish_commit_str = str( 229s repo.raw_repo.get( 229s repo_builder.Commit().write(repo.raw_repo) 229s ).peel(pygit2.Commit).id 229s ) 229s 229s input_repo.write(repo.raw_repo) 229s 229s > target.create_applied_tag(repo, publish_commit_str, '1-1', 'importer') 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:577: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:1309: in create_applied_tag 229s repo.create_tag( 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s commit_hash = '240dd844a69653244edb52c57c42d709512d64cd' 229s tag_name = 'importer/applied/1-1', tag_msg = 'git-ubuntu import' 229s tagger = pygit2.Signature('git-ubuntu importer', 'ubuntu-devel-discuss@lists.ubuntu.com', 1732613822, 0, None) 229s 229s def create_tag(self, 229s commit_hash, 229s tag_name, 229s tag_msg, 229s tagger=None, 229s ): 229s """Create a tag in the repository 229s 229s :param str commit_hash: the commit hash the tag will point to. 229s :param str tag_name: the name of the tag to be created. 229s :param str tag_msg: the text of the tag annotation. 229s :param pygit2.Signature tagger: if supplied, use this signature in the 229s created tag's "tagger" metadata. If not supplied, an arbitrary name 229s and email address is used with the current time. 229s :returns: None 229s """ 229s if not tagger: 229s tagger_time, tagger_offset = datetime_to_signature_spec( 229s datetime.datetime.now(), 229s ) 229s tagger = pygit2.Signature( 229s gitubuntu.spec.SYNTHESIZED_COMMITTER_NAME, 229s gitubuntu.spec.SYNTHESIZED_COMMITTER_EMAIL, 229s tagger_time, 229s tagger_offset, 229s ) 229s 229s logging.debug("Creating tag %s pointing to %s", tag_name, commit_hash) 229s self.raw_repo.create_tag( 229s tag_name, 229s pygit2.Oid(hex=commit_hash), 229s > pygit2.GIT_OBJ_COMMIT, 229s tagger, 229s tag_msg, 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:2114: AttributeError 229s _ test_create_applied_tag[input_repo1-validation_repo_delta1-validation_repo_expected_identical_refs1] _ 229s 229s repo = 229s input_repo = 229s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/reimport/applied/...ct at 0x3ff8c985130>, 'importer/reimport/applied/1-1/1': }} 229s validation_repo_expected_identical_refs = ['refs/tags/importer/applied/1-1', 'refs/tags/importer/reimport/applied/1-1/0', 'refs/tags/importer/reimport/applied/1-1/1'] 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'validation_repo_delta', 229s 'validation_repo_expected_identical_refs', 229s ], 229s [ 229s ( 229s repo_builder.Repo(), 229s { 229s 'add_commits': [repo_builder.Commit(name='import')], 229s 'update_tags': {'importer/applied/1-1': Placeholder('import')}, 229s }, 229s [ 229s 'refs/tags/importer/applied/1-1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit(name='import')], 229s tags={'importer/applied/1-1': Placeholder('import')}, 229s ), 229s { 229s 'add_commits': [repo_builder.Commit(name='reimport')], 229s 'update_tags': { 229s 'importer/reimport/applied/1-1/0': Placeholder('import'), 229s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 229s }, 229s }, 229s [ 229s 'refs/tags/importer/applied/1-1', 229s 'refs/tags/importer/reimport/applied/1-1/0', 229s 'refs/tags/importer/reimport/applied/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit(name='import'), 229s repo_builder.Commit(name='reimport1'), 229s ], 229s tags={ 229s 'importer/applied/1-1': Placeholder('import'), 229s 'importer/reimport/applied/1-1/0': Placeholder('import'), 229s 'importer/reimport/applied/1-1/1': Placeholder('reimport1'), 229s }, 229s ), 229s { 229s 'add_commits': [ 229s repo_builder.Commit(name='reimport2') 229s ], 229s 'update_tags': { 229s 'importer/reimport/applied/1-1/2': Placeholder('reimport2'), 229s }, 229s }, 229s [ 229s 'refs/tags/importer/applied/1-1', 229s 'refs/tags/importer/reimport/applied/1-1/0', 229s 'refs/tags/importer/reimport/applied/1-1/1', 229s 'refs/tags/importer/reimport/applied/1-1/2', 229s ], 229s ), 229s ], 229s ) 229s def test_create_applied_tag( 229s repo, 229s input_repo, 229s validation_repo_delta, 229s validation_repo_expected_identical_refs, 229s ): 229s """ 229s Unit test that create_applied_tag creates the correct import tag 229s 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param repo_builder.Repo input_repo: input repository data 229s :param dict validation_repo_delta: how to transform the input repository 229s into a "validation repository", expressed as a dict to 229s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 229s input repository. The validation repository is then used for the 229s purposes of comparison against the output repository. 229s :param list(str) validation_repo_expected_identical_refs: refs that must be 229s identical between the validation repository and the output repository 229s """ 229s publish_commit_str = str( 229s repo.raw_repo.get( 229s repo_builder.Commit().write(repo.raw_repo) 229s ).peel(pygit2.Commit).id 229s ) 229s 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:575: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmp71x3m_jl/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s _ test_create_applied_tag[input_repo2-validation_repo_delta2-validation_repo_expected_identical_refs2] _ 229s 229s repo = 229s input_repo = 229s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/reimport/applied/1-1/2': }} 229s validation_repo_expected_identical_refs = ['refs/tags/importer/applied/1-1', 'refs/tags/importer/reimport/applied/1-1/0', 'refs/tags/importer/reimport/applied/1-1/1', 'refs/tags/importer/reimport/applied/1-1/2'] 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'validation_repo_delta', 229s 'validation_repo_expected_identical_refs', 229s ], 229s [ 229s ( 229s repo_builder.Repo(), 229s { 229s 'add_commits': [repo_builder.Commit(name='import')], 229s 'update_tags': {'importer/applied/1-1': Placeholder('import')}, 229s }, 229s [ 229s 'refs/tags/importer/applied/1-1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit(name='import')], 229s tags={'importer/applied/1-1': Placeholder('import')}, 229s ), 229s { 229s 'add_commits': [repo_builder.Commit(name='reimport')], 229s 'update_tags': { 229s 'importer/reimport/applied/1-1/0': Placeholder('import'), 229s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 229s }, 229s }, 229s [ 229s 'refs/tags/importer/applied/1-1', 229s 'refs/tags/importer/reimport/applied/1-1/0', 229s 'refs/tags/importer/reimport/applied/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit(name='import'), 229s repo_builder.Commit(name='reimport1'), 229s ], 229s tags={ 229s 'importer/applied/1-1': Placeholder('import'), 229s 'importer/reimport/applied/1-1/0': Placeholder('import'), 229s 'importer/reimport/applied/1-1/1': Placeholder('reimport1'), 229s }, 229s ), 229s { 229s 'add_commits': [ 229s repo_builder.Commit(name='reimport2') 229s ], 229s 'update_tags': { 229s 'importer/reimport/applied/1-1/2': Placeholder('reimport2'), 229s }, 229s }, 229s [ 229s 'refs/tags/importer/applied/1-1', 229s 'refs/tags/importer/reimport/applied/1-1/0', 229s 'refs/tags/importer/reimport/applied/1-1/1', 229s 'refs/tags/importer/reimport/applied/1-1/2', 229s ], 229s ), 229s ], 229s ) 229s def test_create_applied_tag( 229s repo, 229s input_repo, 229s validation_repo_delta, 229s validation_repo_expected_identical_refs, 229s ): 229s """ 229s Unit test that create_applied_tag creates the correct import tag 229s 229s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 229s temporary output repository 229s :param repo_builder.Repo input_repo: input repository data 229s :param dict validation_repo_delta: how to transform the input repository 229s into a "validation repository", expressed as a dict to 229s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 229s input repository. The validation repository is then used for the 229s purposes of comparison against the output repository. 229s :param list(str) validation_repo_expected_identical_refs: refs that must be 229s identical between the validation repository and the output repository 229s """ 229s publish_commit_str = str( 229s repo.raw_repo.get( 229s repo_builder.Commit().write(repo.raw_repo) 229s ).peel(pygit2.Commit).id 229s ) 229s 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:575: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpy6jkyyw6/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s _ test_get_changelog_parent_commits[input_repo1-parent_overrides1-changelog_versions1-PatchState.UNAPPLIED-expected_refs1] _ 229s 229s repo = 229s input_repo = 229s parent_overrides = {}, changelog_versions = ['1-2', '1-1'] 229s patch_state = 229s expected_refs = ['refs/tags/importer/import/1-1'] 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'parent_overrides', 229s 'changelog_versions', 229s 'patch_state', 229s 'expected_refs', 229s ], 229s [ 229s ( 229s repo_builder.Repo(), 229s {}, 229s ['1-2', '1-1',], 229s PatchState.UNAPPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='import')], 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.UNAPPLIED, 229s ['refs/tags/importer/import/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec(name='reimport', mutate=1), 229s ], 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.UNAPPLIED, 229s [ 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='import')], 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s {}, 229s ['1-3', '1-2', '1-1'], 229s PatchState.UNAPPLIED, 229s ['refs/tags/importer/import/1-1'], 229s ), 229s ( 229s repo_builder.Repo(), 229s {}, 229s ['1-2', '1-1',], 229s PatchState.APPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='applied')], 229s tags={'importer/applied/1-1': Placeholder('applied')}, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.APPLIED, 229s ['refs/tags/importer/applied/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec(name='reimport', mutate=1), 229s ], 229s tags={ 229s 'importer/applied/1-1': Placeholder('import'), 229s 'importer/reimport/applied/1-1/0': Placeholder('import'), 229s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.APPLIED, 229s [ 229s 'refs/tags/importer/reimport/applied/1-1/0', 229s 'refs/tags/importer/reimport/applied/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='applied')], 229s tags={'importer/applied/1-1': Placeholder('applied')}, 229s ), 229s {}, 229s ['1-3', '1-2', '1-1'], 229s PatchState.APPLIED, 229s ['refs/tags/importer/applied/1-1'], 229s ), 229s ], 229s ) 229s def test_get_changelog_parent_commits( 229s repo, 229s input_repo, 229s parent_overrides, 229s changelog_versions, 229s patch_state, 229s expected_refs, 229s ): 229s """Test that get_changelog_parent_commits is generally correct 229s 229s This is the general parameterised test for the common case uses of 229s target.get_changelog_parent_commits. 229s 229s :param GitUbuntuRepository repo: fixture providing a temporary 229s GitUbuntuRepository instance to use 229s :param repo_builder.Repo input_repo: the input repository data to use that 229s will be populated into @repo before @repo is passed through to 229s get_changelog_parent_commits 229s :param dict parent_overrides: passed through to 229s get_changelog_parent_commits. 229s :param PatchState patch_state: passed through to 229s get_changelog_parent_commits 229s :param list(str) expected_refs: the expected return value of 229s get_changelog_parent_commits expressed using a list of reference names. 229s Since get_changelog_parent_commits returns a list of commit hash 229s strings, the reference names will need to be dereferenced before 229s comparison; this way the test parameters don't need to be opaque hash 229s strings. 229s """ 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:721: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpussijawz/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _ test_get_changelog_parent_commits[input_repo2-parent_overrides2-changelog_versions2-PatchState.UNAPPLIED-expected_refs2] _ 229s 229s repo = 229s input_repo = 229s parent_overrides = {}, changelog_versions = ['1-2', '1-1'] 229s patch_state = 229s expected_refs = ['refs/tags/importer/reimport/import/1-1/0', 'refs/tags/importer/reimport/import/1-1/1'] 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'parent_overrides', 229s 'changelog_versions', 229s 'patch_state', 229s 'expected_refs', 229s ], 229s [ 229s ( 229s repo_builder.Repo(), 229s {}, 229s ['1-2', '1-1',], 229s PatchState.UNAPPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='import')], 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.UNAPPLIED, 229s ['refs/tags/importer/import/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec(name='reimport', mutate=1), 229s ], 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.UNAPPLIED, 229s [ 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='import')], 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s {}, 229s ['1-3', '1-2', '1-1'], 229s PatchState.UNAPPLIED, 229s ['refs/tags/importer/import/1-1'], 229s ), 229s ( 229s repo_builder.Repo(), 229s {}, 229s ['1-2', '1-1',], 229s PatchState.APPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='applied')], 229s tags={'importer/applied/1-1': Placeholder('applied')}, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.APPLIED, 229s ['refs/tags/importer/applied/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec(name='reimport', mutate=1), 229s ], 229s tags={ 229s 'importer/applied/1-1': Placeholder('import'), 229s 'importer/reimport/applied/1-1/0': Placeholder('import'), 229s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.APPLIED, 229s [ 229s 'refs/tags/importer/reimport/applied/1-1/0', 229s 'refs/tags/importer/reimport/applied/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='applied')], 229s tags={'importer/applied/1-1': Placeholder('applied')}, 229s ), 229s {}, 229s ['1-3', '1-2', '1-1'], 229s PatchState.APPLIED, 229s ['refs/tags/importer/applied/1-1'], 229s ), 229s ], 229s ) 229s def test_get_changelog_parent_commits( 229s repo, 229s input_repo, 229s parent_overrides, 229s changelog_versions, 229s patch_state, 229s expected_refs, 229s ): 229s """Test that get_changelog_parent_commits is generally correct 229s 229s This is the general parameterised test for the common case uses of 229s target.get_changelog_parent_commits. 229s 229s :param GitUbuntuRepository repo: fixture providing a temporary 229s GitUbuntuRepository instance to use 229s :param repo_builder.Repo input_repo: the input repository data to use that 229s will be populated into @repo before @repo is passed through to 229s get_changelog_parent_commits 229s :param dict parent_overrides: passed through to 229s get_changelog_parent_commits. 229s :param PatchState patch_state: passed through to 229s get_changelog_parent_commits 229s :param list(str) expected_refs: the expected return value of 229s get_changelog_parent_commits expressed using a list of reference names. 229s Since get_changelog_parent_commits returns a list of commit hash 229s strings, the reference names will need to be dereferenced before 229s comparison; this way the test parameters don't need to be opaque hash 229s strings. 229s """ 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:721: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmprfo5kzb9/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _ test_get_changelog_parent_commits[input_repo3-parent_overrides3-changelog_versions3-PatchState.UNAPPLIED-expected_refs3] _ 229s 229s repo = 229s input_repo = 229s parent_overrides = {}, changelog_versions = ['1-3', '1-2', '1-1'] 229s patch_state = 229s expected_refs = ['refs/tags/importer/import/1-1'] 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'parent_overrides', 229s 'changelog_versions', 229s 'patch_state', 229s 'expected_refs', 229s ], 229s [ 229s ( 229s repo_builder.Repo(), 229s {}, 229s ['1-2', '1-1',], 229s PatchState.UNAPPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='import')], 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.UNAPPLIED, 229s ['refs/tags/importer/import/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec(name='reimport', mutate=1), 229s ], 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.UNAPPLIED, 229s [ 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='import')], 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s {}, 229s ['1-3', '1-2', '1-1'], 229s PatchState.UNAPPLIED, 229s ['refs/tags/importer/import/1-1'], 229s ), 229s ( 229s repo_builder.Repo(), 229s {}, 229s ['1-2', '1-1',], 229s PatchState.APPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='applied')], 229s tags={'importer/applied/1-1': Placeholder('applied')}, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.APPLIED, 229s ['refs/tags/importer/applied/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec(name='reimport', mutate=1), 229s ], 229s tags={ 229s 'importer/applied/1-1': Placeholder('import'), 229s 'importer/reimport/applied/1-1/0': Placeholder('import'), 229s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.APPLIED, 229s [ 229s 'refs/tags/importer/reimport/applied/1-1/0', 229s 'refs/tags/importer/reimport/applied/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='applied')], 229s tags={'importer/applied/1-1': Placeholder('applied')}, 229s ), 229s {}, 229s ['1-3', '1-2', '1-1'], 229s PatchState.APPLIED, 229s ['refs/tags/importer/applied/1-1'], 229s ), 229s ], 229s ) 229s def test_get_changelog_parent_commits( 229s repo, 229s input_repo, 229s parent_overrides, 229s changelog_versions, 229s patch_state, 229s expected_refs, 229s ): 229s """Test that get_changelog_parent_commits is generally correct 229s 229s This is the general parameterised test for the common case uses of 229s target.get_changelog_parent_commits. 229s 229s :param GitUbuntuRepository repo: fixture providing a temporary 229s GitUbuntuRepository instance to use 229s :param repo_builder.Repo input_repo: the input repository data to use that 229s will be populated into @repo before @repo is passed through to 229s get_changelog_parent_commits 229s :param dict parent_overrides: passed through to 229s get_changelog_parent_commits. 229s :param PatchState patch_state: passed through to 229s get_changelog_parent_commits 229s :param list(str) expected_refs: the expected return value of 229s get_changelog_parent_commits expressed using a list of reference names. 229s Since get_changelog_parent_commits returns a list of commit hash 229s strings, the reference names will need to be dereferenced before 229s comparison; this way the test parameters don't need to be opaque hash 229s strings. 229s """ 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:721: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmppc8o0lzv/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _ test_get_changelog_parent_commits[input_repo5-parent_overrides5-changelog_versions5-PatchState.APPLIED-expected_refs5] _ 229s 229s repo = 229s input_repo = 229s parent_overrides = {}, changelog_versions = ['1-2', '1-1'] 229s patch_state = 229s expected_refs = ['refs/tags/importer/applied/1-1'] 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'parent_overrides', 229s 'changelog_versions', 229s 'patch_state', 229s 'expected_refs', 229s ], 229s [ 229s ( 229s repo_builder.Repo(), 229s {}, 229s ['1-2', '1-1',], 229s PatchState.UNAPPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='import')], 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.UNAPPLIED, 229s ['refs/tags/importer/import/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec(name='reimport', mutate=1), 229s ], 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.UNAPPLIED, 229s [ 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='import')], 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s {}, 229s ['1-3', '1-2', '1-1'], 229s PatchState.UNAPPLIED, 229s ['refs/tags/importer/import/1-1'], 229s ), 229s ( 229s repo_builder.Repo(), 229s {}, 229s ['1-2', '1-1',], 229s PatchState.APPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='applied')], 229s tags={'importer/applied/1-1': Placeholder('applied')}, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.APPLIED, 229s ['refs/tags/importer/applied/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec(name='reimport', mutate=1), 229s ], 229s tags={ 229s 'importer/applied/1-1': Placeholder('import'), 229s 'importer/reimport/applied/1-1/0': Placeholder('import'), 229s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.APPLIED, 229s [ 229s 'refs/tags/importer/reimport/applied/1-1/0', 229s 'refs/tags/importer/reimport/applied/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='applied')], 229s tags={'importer/applied/1-1': Placeholder('applied')}, 229s ), 229s {}, 229s ['1-3', '1-2', '1-1'], 229s PatchState.APPLIED, 229s ['refs/tags/importer/applied/1-1'], 229s ), 229s ], 229s ) 229s def test_get_changelog_parent_commits( 229s repo, 229s input_repo, 229s parent_overrides, 229s changelog_versions, 229s patch_state, 229s expected_refs, 229s ): 229s """Test that get_changelog_parent_commits is generally correct 229s 229s This is the general parameterised test for the common case uses of 229s target.get_changelog_parent_commits. 229s 229s :param GitUbuntuRepository repo: fixture providing a temporary 229s GitUbuntuRepository instance to use 229s :param repo_builder.Repo input_repo: the input repository data to use that 229s will be populated into @repo before @repo is passed through to 229s get_changelog_parent_commits 229s :param dict parent_overrides: passed through to 229s get_changelog_parent_commits. 229s :param PatchState patch_state: passed through to 229s get_changelog_parent_commits 229s :param list(str) expected_refs: the expected return value of 229s get_changelog_parent_commits expressed using a list of reference names. 229s Since get_changelog_parent_commits returns a list of commit hash 229s strings, the reference names will need to be dereferenced before 229s comparison; this way the test parameters don't need to be opaque hash 229s strings. 229s """ 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:721: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpndd8x2l9/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _ test_get_changelog_parent_commits[input_repo6-parent_overrides6-changelog_versions6-PatchState.APPLIED-expected_refs6] _ 229s 229s repo = 229s input_repo = 229s parent_overrides = {}, changelog_versions = ['1-2', '1-1'] 229s patch_state = 229s expected_refs = ['refs/tags/importer/reimport/applied/1-1/0', 'refs/tags/importer/reimport/applied/1-1/1'] 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'parent_overrides', 229s 'changelog_versions', 229s 'patch_state', 229s 'expected_refs', 229s ], 229s [ 229s ( 229s repo_builder.Repo(), 229s {}, 229s ['1-2', '1-1',], 229s PatchState.UNAPPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='import')], 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.UNAPPLIED, 229s ['refs/tags/importer/import/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec(name='reimport', mutate=1), 229s ], 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.UNAPPLIED, 229s [ 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='import')], 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s {}, 229s ['1-3', '1-2', '1-1'], 229s PatchState.UNAPPLIED, 229s ['refs/tags/importer/import/1-1'], 229s ), 229s ( 229s repo_builder.Repo(), 229s {}, 229s ['1-2', '1-1',], 229s PatchState.APPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='applied')], 229s tags={'importer/applied/1-1': Placeholder('applied')}, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.APPLIED, 229s ['refs/tags/importer/applied/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec(name='reimport', mutate=1), 229s ], 229s tags={ 229s 'importer/applied/1-1': Placeholder('import'), 229s 'importer/reimport/applied/1-1/0': Placeholder('import'), 229s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.APPLIED, 229s [ 229s 'refs/tags/importer/reimport/applied/1-1/0', 229s 'refs/tags/importer/reimport/applied/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='applied')], 229s tags={'importer/applied/1-1': Placeholder('applied')}, 229s ), 229s {}, 229s ['1-3', '1-2', '1-1'], 229s PatchState.APPLIED, 229s ['refs/tags/importer/applied/1-1'], 229s ), 229s ], 229s ) 229s def test_get_changelog_parent_commits( 229s repo, 229s input_repo, 229s parent_overrides, 229s changelog_versions, 229s patch_state, 229s expected_refs, 229s ): 229s """Test that get_changelog_parent_commits is generally correct 229s 229s This is the general parameterised test for the common case uses of 229s target.get_changelog_parent_commits. 229s 229s :param GitUbuntuRepository repo: fixture providing a temporary 229s GitUbuntuRepository instance to use 229s :param repo_builder.Repo input_repo: the input repository data to use that 229s will be populated into @repo before @repo is passed through to 229s get_changelog_parent_commits 229s :param dict parent_overrides: passed through to 229s get_changelog_parent_commits. 229s :param PatchState patch_state: passed through to 229s get_changelog_parent_commits 229s :param list(str) expected_refs: the expected return value of 229s get_changelog_parent_commits expressed using a list of reference names. 229s Since get_changelog_parent_commits returns a list of commit hash 229s strings, the reference names will need to be dereferenced before 229s comparison; this way the test parameters don't need to be opaque hash 229s strings. 229s """ 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:721: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpitopu3z2/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _ test_get_changelog_parent_commits[input_repo7-parent_overrides7-changelog_versions7-PatchState.APPLIED-expected_refs7] _ 229s 229s repo = 229s input_repo = 229s parent_overrides = {}, changelog_versions = ['1-3', '1-2', '1-1'] 229s patch_state = 229s expected_refs = ['refs/tags/importer/applied/1-1'] 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'parent_overrides', 229s 'changelog_versions', 229s 'patch_state', 229s 'expected_refs', 229s ], 229s [ 229s ( 229s repo_builder.Repo(), 229s {}, 229s ['1-2', '1-1',], 229s PatchState.UNAPPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='import')], 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.UNAPPLIED, 229s ['refs/tags/importer/import/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec(name='reimport', mutate=1), 229s ], 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/reimport/import/1-1/0': Placeholder('import'), 229s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.UNAPPLIED, 229s [ 229s 'refs/tags/importer/reimport/import/1-1/0', 229s 'refs/tags/importer/reimport/import/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='import')], 229s tags={'importer/import/1-1': Placeholder('import')}, 229s ), 229s {}, 229s ['1-3', '1-2', '1-1'], 229s PatchState.UNAPPLIED, 229s ['refs/tags/importer/import/1-1'], 229s ), 229s ( 229s repo_builder.Repo(), 229s {}, 229s ['1-2', '1-1',], 229s PatchState.APPLIED, 229s [], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='applied')], 229s tags={'importer/applied/1-1': Placeholder('applied')}, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.APPLIED, 229s ['refs/tags/importer/applied/1-1'], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec(name='reimport', mutate=1), 229s ], 229s tags={ 229s 'importer/applied/1-1': Placeholder('import'), 229s 'importer/reimport/applied/1-1/0': Placeholder('import'), 229s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 229s }, 229s ), 229s {}, 229s ['1-2', '1-1'], 229s PatchState.APPLIED, 229s [ 229s 'refs/tags/importer/reimport/applied/1-1/0', 229s 'refs/tags/importer/reimport/applied/1-1/1', 229s ], 229s ), 229s ( 229s repo_builder.Repo( 229s commits=[repo_builder.Commit.from_spec(name='applied')], 229s tags={'importer/applied/1-1': Placeholder('applied')}, 229s ), 229s {}, 229s ['1-3', '1-2', '1-1'], 229s PatchState.APPLIED, 229s ['refs/tags/importer/applied/1-1'], 229s ), 229s ], 229s ) 229s def test_get_changelog_parent_commits( 229s repo, 229s input_repo, 229s parent_overrides, 229s changelog_versions, 229s patch_state, 229s expected_refs, 229s ): 229s """Test that get_changelog_parent_commits is generally correct 229s 229s This is the general parameterised test for the common case uses of 229s target.get_changelog_parent_commits. 229s 229s :param GitUbuntuRepository repo: fixture providing a temporary 229s GitUbuntuRepository instance to use 229s :param repo_builder.Repo input_repo: the input repository data to use that 229s will be populated into @repo before @repo is passed through to 229s get_changelog_parent_commits 229s :param dict parent_overrides: passed through to 229s get_changelog_parent_commits. 229s :param PatchState patch_state: passed through to 229s get_changelog_parent_commits 229s :param list(str) expected_refs: the expected return value of 229s get_changelog_parent_commits expressed using a list of reference names. 229s Since get_changelog_parent_commits returns a list of commit hash 229s strings, the reference names will need to be dereferenced before 229s comparison; this way the test parameters don't need to be opaque hash 229s strings. 229s """ 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:721: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpyzije_sn/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _________ test_validate_rich_history[input_repo0-published_spec0-True] _________ 229s 229s repo = 229s input_repo = 229s published_spec = {'changelog_versions': ['1-2', '1-1']}, expected_result = True 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'published_spec', 229s 'expected_result', 229s ], 229s [ 229s ( 229s # Common case: upload tag has a changelog parent as an ancestor 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec( 229s name='upload', 229s changelog_versions=['1-2', '1-1'], 229s parents=[Placeholder('import')], 229s ), 229s ], 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-2': Placeholder('upload'), 229s }, 229s ), 229s {'changelog_versions': ['1-2', '1-1']}, 229s True, 229s ), 229s ( 229s # Upload tag is the first one, with no parents present 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec( 229s name='upload', 229s version='1-2', 229s ), 229s ], 229s tags={ 229s 'importer/upload/1-2': Placeholder('upload'), 229s }, 229s ), 229s {'changelog_versions': ['1-2']}, 229s True, 229s ), 229s ( 229s # Upload tag mismatches published tree but is otherwise correct 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec( 229s name='upload', 229s changelog_versions=['1-2', '1-1'], 229s parents=[Placeholder('import')], 229s mutate=True, 229s ), 229s ], 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-2': Placeholder('upload'), 229s }, 229s ), 229s {'changelog_versions': ['1-2', '1-1']}, 229s target.RichHistoryTreeMismatch, 229s ), 229s ( 229s # Upload tag doesn't have a changelog parent as an ancestor but is 229s # otherwise correct 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec( 229s name='upload', 229s changelog_versions=['1-2', '1-1'], 229s ), 229s ], 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-2': Placeholder('upload'), 229s }, 229s ), 229s {'changelog_versions': ['1-2', '1-1']}, 229s target.RichHistoryHasNoChangelogParentAncestor, 229s ), 229s ], 229s ) 229s def test_validate_rich_history( 229s repo, 229s input_repo, 229s published_spec, 229s expected_result, 229s ): 229s """ 229s General test for validate_rich_history(). 229s 229s This unit tests validate_rich_history() for various parameterized cases. 229s Given an input repository and the specification of a Launchpad publication 229s of a source package, we check that validate_rich_history() correctly 229s accepts or rejects the rich history corresponding to the upload tag named 229s 'importer/upload/1-2'. It is assumed that the package being imported is 229s always of version '1-2' for all parameter sets. 229s 229s Since the target function requires rich history, the case of there not 229s being rich history does not need to be tested here, as it wouldn't be 229s called in this case. 229s 229s validate_rich_history() is generic for all sourced rich history, not just 229s rich history sourced from an upload tag. But since it is independent of how 229s the rich history commit arrived, it is easiest to use upload tags to test 229s it; this results in coverage for all sources. 229s 229s :param GitUbuntuRepository repo: fixture providing a temporary 229s GitUbuntuRepository instance to use 229s :param repo_builder.Repo input_repo: input repository data 229s :param dict published_spec: the package simulated being imported from the 229s archive, specified as a dict to pass as **kwargs to 229s repo_builder.Commit.from_spec() 229s :param bool expected_result: the expected return value of, or exception 229s raised by, the call to validate_rich_history() 229s """ 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:910: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmpqa9npuep/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _________ test_validate_rich_history[input_repo1-published_spec1-True] _________ 229s 229s repo = 229s input_repo = 229s published_spec = {'changelog_versions': ['1-2']}, expected_result = True 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'published_spec', 229s 'expected_result', 229s ], 229s [ 229s ( 229s # Common case: upload tag has a changelog parent as an ancestor 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec( 229s name='upload', 229s changelog_versions=['1-2', '1-1'], 229s parents=[Placeholder('import')], 229s ), 229s ], 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-2': Placeholder('upload'), 229s }, 229s ), 229s {'changelog_versions': ['1-2', '1-1']}, 229s True, 229s ), 229s ( 229s # Upload tag is the first one, with no parents present 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec( 229s name='upload', 229s version='1-2', 229s ), 229s ], 229s tags={ 229s 'importer/upload/1-2': Placeholder('upload'), 229s }, 229s ), 229s {'changelog_versions': ['1-2']}, 229s True, 229s ), 229s ( 229s # Upload tag mismatches published tree but is otherwise correct 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec( 229s name='upload', 229s changelog_versions=['1-2', '1-1'], 229s parents=[Placeholder('import')], 229s mutate=True, 229s ), 229s ], 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-2': Placeholder('upload'), 229s }, 229s ), 229s {'changelog_versions': ['1-2', '1-1']}, 229s target.RichHistoryTreeMismatch, 229s ), 229s ( 229s # Upload tag doesn't have a changelog parent as an ancestor but is 229s # otherwise correct 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec( 229s name='upload', 229s changelog_versions=['1-2', '1-1'], 229s ), 229s ], 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-2': Placeholder('upload'), 229s }, 229s ), 229s {'changelog_versions': ['1-2', '1-1']}, 229s target.RichHistoryHasNoChangelogParentAncestor, 229s ), 229s ], 229s ) 229s def test_validate_rich_history( 229s repo, 229s input_repo, 229s published_spec, 229s expected_result, 229s ): 229s """ 229s General test for validate_rich_history(). 229s 229s This unit tests validate_rich_history() for various parameterized cases. 229s Given an input repository and the specification of a Launchpad publication 229s of a source package, we check that validate_rich_history() correctly 229s accepts or rejects the rich history corresponding to the upload tag named 229s 'importer/upload/1-2'. It is assumed that the package being imported is 229s always of version '1-2' for all parameter sets. 229s 229s Since the target function requires rich history, the case of there not 229s being rich history does not need to be tested here, as it wouldn't be 229s called in this case. 229s 229s validate_rich_history() is generic for all sourced rich history, not just 229s rich history sourced from an upload tag. But since it is independent of how 229s the rich history commit arrived, it is easiest to use upload tags to test 229s it; this results in coverage for all sources. 229s 229s :param GitUbuntuRepository repo: fixture providing a temporary 229s GitUbuntuRepository instance to use 229s :param repo_builder.Repo input_repo: input repository data 229s :param dict published_spec: the package simulated being imported from the 229s archive, specified as a dict to pass as **kwargs to 229s repo_builder.Commit.from_spec() 229s :param bool expected_result: the expected return value of, or exception 229s raised by, the call to validate_rich_history() 229s """ 229s > input_repo.write(repo.raw_repo) 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:910: 229s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 229s 229s self = 229s repo = pygit2.Repository('/tmp/tmp2qaulc42/.git/'), record = {} 229s 229s def write(self, repo, record=None): 229s replace_placeholders(self) 229s record = record or dict() 229s written_commits = [ 229s commit.write(repo=repo, record=record) 229s for commit 229s in self.commit_list 229s ] 229s for name, target in self.branches.items(): 229s repo.create_branch( 229s name, 229s repo.get(target.write(repo)).peel(pygit2.Commit), 229s ) 229s for name, target in self.tags.items(): 229s repo.create_tag( 229s name, 229s target.write(repo), 229s > pygit2.GIT_OBJ_COMMIT, 229s self.tagger.signature, 229s 'Tag message', 229s ) 229s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 229s 229s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 229s ----------------------------- Captured stdout call ----------------------------- 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 229s dpkg-source: info: using source format '3.0 (quilt)' 229s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 229s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 229s ----------------------------- Captured stderr call ----------------------------- 229s dpkg-source: warning: missing information for output field Standards-Version 229s dpkg-source: warning: missing information for output field Standards-Version 229s _ test_validate_rich_history[input_repo2-published_spec2-RichHistoryTreeMismatch] _ 229s 229s repo = 229s input_repo = 229s published_spec = {'changelog_versions': ['1-2', '1-1']} 229s expected_result = 229s 229s @pytest.mark.parametrize( 229s [ 229s 'input_repo', 229s 'published_spec', 229s 'expected_result', 229s ], 229s [ 229s ( 229s # Common case: upload tag has a changelog parent as an ancestor 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec( 229s name='upload', 229s changelog_versions=['1-2', '1-1'], 229s parents=[Placeholder('import')], 229s ), 229s ], 229s tags={ 229s 'importer/import/1-1': Placeholder('import'), 229s 'importer/upload/1-2': Placeholder('upload'), 229s }, 229s ), 229s {'changelog_versions': ['1-2', '1-1']}, 229s True, 229s ), 229s ( 229s # Upload tag is the first one, with no parents present 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec( 229s name='upload', 229s version='1-2', 229s ), 229s ], 229s tags={ 229s 'importer/upload/1-2': Placeholder('upload'), 229s }, 229s ), 229s {'changelog_versions': ['1-2']}, 229s True, 229s ), 229s ( 229s # Upload tag mismatches published tree but is otherwise correct 229s repo_builder.Repo( 229s commits=[ 229s repo_builder.Commit.from_spec(name='import'), 229s repo_builder.Commit.from_spec( 229s name='upload', 229s changelog_versions=['1-2', '1-1'], 229s parents=[Placeholder('import')], 230s mutate=True, 230s ), 230s ], 230s tags={ 230s 'importer/import/1-1': Placeholder('import'), 230s 'importer/upload/1-2': Placeholder('upload'), 230s }, 230s ), 230s {'changelog_versions': ['1-2', '1-1']}, 230s target.RichHistoryTreeMismatch, 230s ), 230s ( 230s # Upload tag doesn't have a changelog parent as an ancestor but is 230s # otherwise correct 230s repo_builder.Repo( 230s commits=[ 230s repo_builder.Commit.from_spec(name='import'), 230s repo_builder.Commit.from_spec( 230s name='upload', 230s changelog_versions=['1-2', '1-1'], 230s ), 230s ], 230s tags={ 230s 'importer/import/1-1': Placeholder('import'), 230s 'importer/upload/1-2': Placeholder('upload'), 230s }, 230s ), 230s {'changelog_versions': ['1-2', '1-1']}, 230s target.RichHistoryHasNoChangelogParentAncestor, 230s ), 230s ], 230s ) 230s def test_validate_rich_history( 230s repo, 230s input_repo, 230s published_spec, 230s expected_result, 230s ): 230s """ 230s General test for validate_rich_history(). 230s 230s This unit tests validate_rich_history() for various parameterized cases. 230s Given an input repository and the specification of a Launchpad publication 230s of a source package, we check that validate_rich_history() correctly 230s accepts or rejects the rich history corresponding to the upload tag named 230s 'importer/upload/1-2'. It is assumed that the package being imported is 230s always of version '1-2' for all parameter sets. 230s 230s Since the target function requires rich history, the case of there not 230s being rich history does not need to be tested here, as it wouldn't be 230s called in this case. 230s 230s validate_rich_history() is generic for all sourced rich history, not just 230s rich history sourced from an upload tag. But since it is independent of how 230s the rich history commit arrived, it is easiest to use upload tags to test 230s it; this results in coverage for all sources. 230s 230s :param GitUbuntuRepository repo: fixture providing a temporary 230s GitUbuntuRepository instance to use 230s :param repo_builder.Repo input_repo: input repository data 230s :param dict published_spec: the package simulated being imported from the 230s archive, specified as a dict to pass as **kwargs to 230s repo_builder.Commit.from_spec() 230s :param bool expected_result: the expected return value of, or exception 230s raised by, the call to validate_rich_history() 230s """ 230s > input_repo.write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:910: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmpj4hkgrt8/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s _ test_validate_rich_history[input_repo3-published_spec3-RichHistoryHasNoChangelogParentAncestor] _ 230s 230s repo = 230s input_repo = 230s published_spec = {'changelog_versions': ['1-2', '1-1']} 230s expected_result = 230s 230s @pytest.mark.parametrize( 230s [ 230s 'input_repo', 230s 'published_spec', 230s 'expected_result', 230s ], 230s [ 230s ( 230s # Common case: upload tag has a changelog parent as an ancestor 230s repo_builder.Repo( 230s commits=[ 230s repo_builder.Commit.from_spec(name='import'), 230s repo_builder.Commit.from_spec( 230s name='upload', 230s changelog_versions=['1-2', '1-1'], 230s parents=[Placeholder('import')], 230s ), 230s ], 230s tags={ 230s 'importer/import/1-1': Placeholder('import'), 230s 'importer/upload/1-2': Placeholder('upload'), 230s }, 230s ), 230s {'changelog_versions': ['1-2', '1-1']}, 230s True, 230s ), 230s ( 230s # Upload tag is the first one, with no parents present 230s repo_builder.Repo( 230s commits=[ 230s repo_builder.Commit.from_spec( 230s name='upload', 230s version='1-2', 230s ), 230s ], 230s tags={ 230s 'importer/upload/1-2': Placeholder('upload'), 230s }, 230s ), 230s {'changelog_versions': ['1-2']}, 230s True, 230s ), 230s ( 230s # Upload tag mismatches published tree but is otherwise correct 230s repo_builder.Repo( 230s commits=[ 230s repo_builder.Commit.from_spec(name='import'), 230s repo_builder.Commit.from_spec( 230s name='upload', 230s changelog_versions=['1-2', '1-1'], 230s parents=[Placeholder('import')], 230s mutate=True, 230s ), 230s ], 230s tags={ 230s 'importer/import/1-1': Placeholder('import'), 230s 'importer/upload/1-2': Placeholder('upload'), 230s }, 230s ), 230s {'changelog_versions': ['1-2', '1-1']}, 230s target.RichHistoryTreeMismatch, 230s ), 230s ( 230s # Upload tag doesn't have a changelog parent as an ancestor but is 230s # otherwise correct 230s repo_builder.Repo( 230s commits=[ 230s repo_builder.Commit.from_spec(name='import'), 230s repo_builder.Commit.from_spec( 230s name='upload', 230s changelog_versions=['1-2', '1-1'], 230s ), 230s ], 230s tags={ 230s 'importer/import/1-1': Placeholder('import'), 230s 'importer/upload/1-2': Placeholder('upload'), 230s }, 230s ), 230s {'changelog_versions': ['1-2', '1-1']}, 230s target.RichHistoryHasNoChangelogParentAncestor, 230s ), 230s ], 230s ) 230s def test_validate_rich_history( 230s repo, 230s input_repo, 230s published_spec, 230s expected_result, 230s ): 230s """ 230s General test for validate_rich_history(). 230s 230s This unit tests validate_rich_history() for various parameterized cases. 230s Given an input repository and the specification of a Launchpad publication 230s of a source package, we check that validate_rich_history() correctly 230s accepts or rejects the rich history corresponding to the upload tag named 230s 'importer/upload/1-2'. It is assumed that the package being imported is 230s always of version '1-2' for all parameter sets. 230s 230s Since the target function requires rich history, the case of there not 230s being rich history does not need to be tested here, as it wouldn't be 230s called in this case. 230s 230s validate_rich_history() is generic for all sourced rich history, not just 230s rich history sourced from an upload tag. But since it is independent of how 230s the rich history commit arrived, it is easiest to use upload tags to test 230s it; this results in coverage for all sources. 230s 230s :param GitUbuntuRepository repo: fixture providing a temporary 230s GitUbuntuRepository instance to use 230s :param repo_builder.Repo input_repo: input repository data 230s :param dict published_spec: the package simulated being imported from the 230s archive, specified as a dict to pass as **kwargs to 230s repo_builder.Commit.from_spec() 230s :param bool expected_result: the expected return value of, or exception 230s raised by, the call to validate_rich_history() 230s """ 230s > input_repo.write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:910: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmprmuuwtkk/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s ______________________ test_add_changelog_note_to_commit _______________________ 230s 230s repo = 230s 230s def test_add_changelog_note_to_commit(repo): 230s """add_changelog_note_to_commit should add the expected note""" 230s repo_builder.Repo( 230s commits=[ 230s repo_builder.Commit.from_spec(name='1-1'), 230s repo_builder.Commit.from_spec( 230s name='1-2', 230s changelog_versions=['1-1', '1-2'], 230s parents=[Placeholder('1-1')], 230s ), 230s ], 230s tags={'1-1': Placeholder('1-1'), '1-2': Placeholder('1-2')}, 230s > ).write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:953: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmpqbxler3f/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s ____________________ test_add_changelog_note_to_commit_utf8 ____________________ 230s 230s repo = 230s 230s def test_add_changelog_note_to_commit_utf8(repo): 230s """A changelog file with non-UTF8 should have such characters substituted 230s 230s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 230s temporary output repository 230s """ 230s test_utf8_error_changelog_path = os.path.join( 230s pkg_resources.resource_filename('gitubuntu', 'changelog_tests'), 230s 'test_utf8_error', 230s ) 230s with open(test_utf8_error_changelog_path, 'rb') as f: 230s utf8_changelog_blob = f.read() 230s 230s # We only need an example child commit with a debian/changelog file since 230s # this is the only file accessed by add_changelog_note_to_commit(). 230s # Further, the parent need only exist and can be empty. 230s repo_builder.Repo( 230s commits=[ 230s repo_builder.Commit(name='parent'), 230s repo_builder.Commit( 230s tree=repo_builder.Tree({'debian': repo_builder.Tree( 230s {'changelog': repo_builder.Blob(utf8_changelog_blob)} 230s )}), 230s name='child', 230s ) 230s ], 230s tags={'parent': Placeholder('parent'), 'child': Placeholder('child')}, 230s > ).write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:1002: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmprc9qfu9h/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s _________________ test_double_changelog_note_add_does_not_fail _________________ 230s 230s repo = 230s 230s def test_double_changelog_note_add_does_not_fail(repo): 230s """add_changelog_note_to_commit shouldn't fail if a note already exists""" 230s repo_builder.Repo( 230s commits=[ 230s repo_builder.Commit.from_spec(name='1-1'), 230s repo_builder.Commit.from_spec( 230s name='1-2', 230s changelog_versions=['1-1', '1-2'], 230s parents=[Placeholder('1-1')], 230s ), 230s ], 230s tags={'1-1': Placeholder('1-1'), '1-2': Placeholder('1-2')}, 230s > ).write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:1035: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmppge5z6do/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s ___________________________ test_create_import_note ____________________________ 230s 230s repo = 230s 230s def test_create_import_note(repo): 230s """create_import_note() should create a note in the correct ref""" 230s repo_builder.Repo( 230s commits=[repo_builder.Commit(name='root')], 230s tags={'root': repo_builder.Placeholder('root')}, 230s > ).write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:1066: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmp7p9s47ow/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s ______________________ test_create_import_note_timestamp _______________________ 230s 230s repo = 230s 230s def test_create_import_note_timestamp(repo): 230s """create_import_note() should include the timestamp in the note""" 230s repo_builder.Repo( 230s commits=[repo_builder.Commit(name='root')], 230s tags={'root': repo_builder.Placeholder('root')}, 230s > ).write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:1082: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmpdp6y1qgi/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s _______________________ test_import_creates_import_note ________________________ 230s 230s repo = 230s 230s def test_import_creates_import_note(repo): 230s """When an import runs, the note should appear in the correct ref""" 230s with source_builder.Source() as dsc_pathname: 230s > target.import_unapplied_dsc( 230s repo=repo, 230s version='1-1', 230s namespace='importer', 230s dist='ubuntu', 230s dsc_pathname=dsc_pathname, 230s head_name='ubuntu/focal', 230s skip_orig=True, 230s parent_overrides={}, 230s ) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:1102: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 230s commit, tag = find_or_create_unapplied_commit( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 230s changelog_parents = get_unapplied_import_parents( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 230s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 230s changelog = self.get_changelog_from_treeish(treeish) 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 230s return Changelog.from_treeish( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:569: in from_treeish 230s blob = follow_symlinks_to_blob( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 230s return _follow_symlinks_to_blob( 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s repo = pygit2.Repository('/tmp/tmp1np1pum0/.git/') 230s top_tree_object = 230s search_path = 'debian/changelog' 230s _rel_tree = 230s _rel_path = '' 230s 230s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 230s _rel_tree=None, _rel_path='' 230s ): 230s '''Recursively follow a path down a tree, following symlinks, to find blob 230s 230s repo: pygit2.Repository object 230s top_tree: pygit2.Tree object of the top of the tree structure 230s search_path: '/'-separated path string of blob to find 230s _rel_tree: (internal) which tree to look further into 230s _rel_path: (internal) the path we are in so far 230s ''' 230s 230s NORMAL_BLOB_MODES = set([ 230s pygit2.GIT_FILEMODE_BLOB, 230s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 230s ]) 230s 230s _rel_tree = _rel_tree or top_tree_object 230s head, tail = posixpath.split(search_path) 230s 230s # A traditional functional split would put a single entry in head with tail 230s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 230s # to make it appear to have traditional semantics. 230s if not head: 230s head = tail 230s tail = None 230s 230s entry = _rel_tree[head] 230s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s ___________________ test_import_unapplied_spi_quilt_patches ____________________ 230s 230s get_import_commit_msg_mock = 230s get_import_tag_msg_mock = 230s repo = 230s 230s @patch('gitubuntu.importer.get_import_tag_msg') 230s @patch('gitubuntu.importer.get_import_commit_msg') 230s def test_import_unapplied_spi_quilt_patches( 230s get_import_commit_msg_mock, 230s get_import_tag_msg_mock, 230s repo, 230s ): 230s """Test that a package with quilt patches is imported with correct 230s unapplied refs 230s 230s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 230s that determines the commit message to use for a given import 230s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 230s that determines the tag message to use for a given import 230s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 230s temporary output repository 230s """ 230s # Match the repo_builder objects 230s get_import_tag_msg_mock.return_value = 'Test tag' 230s get_import_commit_msg_mock.return_value = b'Test commit' 230s 230s publish_spec = source_builder.SourceSpec(has_patches=True) 230s 230s input_repo = repo_builder.Repo() 230s input_repo.write(repo.raw_repo) 230s expected_result = repo_builder.Repo( 230s commits=[ 230s repo_builder.Commit( 230s tree=repo_builder.SourceTree( 230s source_builder.Source(publish_spec) 230s ), 230s name='publish' 230s ), 230s ], 230s tags={'importer/import/1-1': Placeholder('publish')}, 230s branches={'importer/ubuntu/trusty': Placeholder('publish')}, 230s ) 230s 230s with source_builder.Source(publish_spec) as dsc_path: 230s # import_unapplied_spi currently assumes it is called from the 230s # repository directory (pristine-tar and other commands rely on 230s # this) 230s > target.import_unapplied_spi( 230s repo=repo, 230s spi=MockSPI(dsc_path, publish_spec.version), 230s namespace='importer', 230s skip_orig=False, 230s parent_overrides={}, 230s ) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:1222: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:2308: in import_unapplied_spi 230s import_unapplied_dsc( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 230s commit, tag = find_or_create_unapplied_commit( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 230s changelog_parents = get_unapplied_import_parents( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 230s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 230s changelog = self.get_changelog_from_treeish(treeish) 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 230s return Changelog.from_treeish( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:569: in from_treeish 230s blob = follow_symlinks_to_blob( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 230s return _follow_symlinks_to_blob( 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s repo = pygit2.Repository('/tmp/tmpz282lqu3/.git/') 230s top_tree_object = 230s search_path = 'debian/changelog' 230s _rel_tree = 230s _rel_path = '' 230s 230s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 230s _rel_tree=None, _rel_path='' 230s ): 230s '''Recursively follow a path down a tree, following symlinks, to find blob 230s 230s repo: pygit2.Repository object 230s top_tree: pygit2.Tree object of the top of the tree structure 230s search_path: '/'-separated path string of blob to find 230s _rel_tree: (internal) which tree to look further into 230s _rel_path: (internal) the path we are in so far 230s ''' 230s 230s NORMAL_BLOB_MODES = set([ 230s pygit2.GIT_FILEMODE_BLOB, 230s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 230s ]) 230s 230s _rel_tree = _rel_tree or top_tree_object 230s head, tail = posixpath.split(search_path) 230s 230s # A traditional functional split would put a single entry in head with tail 230s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 230s # to make it appear to have traditional semantics. 230s if not head: 230s head = tail 230s tail = None 230s 230s entry = _rel_tree[head] 230s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: using patch list from debian/patches/series 230s dpkg-source: info: applying a 230s dpkg-source: info: applying b 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: using patch list from debian/patches/series 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s _ test_import_unapplied_spi_parenting[input_repo0-changelog_versions0-validation_repo_delta0-validation_repo_expected_identical_refs0] _ 230s 230s get_import_commit_msg_mock = 230s get_import_tag_msg_mock = 230s repo = 230s input_repo = 230s changelog_versions = ['1-1'] 230s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-1': }} 230s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1'] 230s 230s @pytest.mark.parametrize( 230s [ 230s 'input_repo', 230s 'changelog_versions', 230s 'validation_repo_delta', 230s 'validation_repo_expected_identical_refs', 230s ], 230s [ 230s pytest.param( 230s repo_builder.Repo(), 230s ['1-1'], 230s { 230s 'add_commits': [ 230s repo_builder.Commit.from_spec(name='publish'), 230s ], 230s 'update_tags': {'importer/import/1-1': Placeholder('publish')}, 230s }, 230s [ 230s 'refs/tags/importer/import/1-1', 230s ] 230s ), 230s pytest.param( 230s repo_builder.Repo( 230s commits=[repo_builder.Commit.from_spec(name='import')], 230s tags={'importer/import/1-1': Placeholder('import')}, 230s ), 230s ['1-2', '1-1'], 230s { 230s 'add_commits': [ 230s repo_builder.Commit.from_spec( 230s name='publish', 230s parents=[Placeholder('import')], 230s changelog_versions=['1-2', '1-1'], 230s ), 230s ], 230s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 230s }, 230s [ 230s 'refs/tags/importer/import/1-1', 230s 'refs/tags/importer/import/1-2', 230s ], 230s ), 230s pytest.param( 230s repo_builder.Repo( 230s commits=[repo_builder.Commit.from_spec(name='import')], 230s tags={'importer/import/1-1': Placeholder('import')}, 230s ), 230s ['1-3', '1-2', '1-1'], 230s { 230s 'add_commits': [ 230s repo_builder.Commit.from_spec( 230s parents=[Placeholder('import')], 230s name='publish', 230s changelog_versions=['1-3', '1-2', '1-1'], 230s ), 230s ], 230s 'update_tags': {'importer/import/1-3': Placeholder('publish')}, 230s }, 230s [ 230s 'refs/tags/importer/import/1-1', 230s 'refs/tags/importer/import/1-3', 230s ], 230s ), 230s ( 230s repo_builder.Repo( 230s commits=[ 230s repo_builder.Commit.from_spec(name='import'), 230s repo_builder.Commit.from_spec( 230s name='reimport', 230s mutate='Reimport tag contents', 230s ), 230s ], 230s tags={ 230s 'importer/import/1-1': Placeholder('import'), 230s 'importer/reimport/import/1-1/0': Placeholder('import'), 230s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 230s }, 230s ), 230s ['1-2', '1-1'], 230s { 230s 'add_commits': [ 230s repo_builder.Commit.from_spec( 230s parents=[ 230s Placeholder('import'), 230s Placeholder('reimport'), 230s ], 230s name='publish', 230s changelog_versions=['1-2', '1-1'], 230s ), 230s ], 230s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 230s }, 230s [ 230s 'refs/tags/importer/import/1-1', 230s 'refs/tags/importer/reimport/import/1-1/0', 230s 'refs/tags/importer/reimport/import/1-1/1', 230s 'refs/tags/importer/import/1-2', 230s ], 230s ), 230s ] 230s ) 230s @patch('gitubuntu.importer.get_import_tag_msg') 230s @patch('gitubuntu.importer.get_import_commit_msg') 230s def test_import_unapplied_spi_parenting( 230s get_import_commit_msg_mock, 230s get_import_tag_msg_mock, 230s repo, 230s input_repo, 230s changelog_versions, 230s validation_repo_delta, 230s validation_repo_expected_identical_refs, 230s ): 230s """Test that unapplied import commits have the correct parents 230s 230s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 230s that determines the commit message to use for a given import 230s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 230s that determines the tag message to use for a given import 230s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 230s temporary output repository 230s :param repo_builder.Repo input_repo: input repository data 230s :param list(str) changelog_versions: the versions in the changelog of a 230s fake package to test import 230s :param dict validation_repo_delta: how to transform the input 230s repository into a "validation repository", expressed as a dict to 230s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 230s input repository. The validation repository is then used for the 230s purposes of comparison against the output repository. 230s :param list(str) validation_repo_expected_identical_refs: refs that must be 230s identical between the validation repository and the output repository 230s 230s Verify that if an import of a package is made into input_repo where the 230s package being imported has the given changelog_versions, then the output 230s repository has commits with the parents we expect. This is tested by 230s comparing specific output references against the validation repository. 230s """ 230s 230s # Match the repo_builder objects 230s get_import_tag_msg_mock.return_value = 'Test tag' 230s get_import_commit_msg_mock.return_value = b'Test commit' 230s 230s input_repo.write(repo.raw_repo) 230s 230s publish_spec = source_builder.SourceSpec( 230s changelog_versions=changelog_versions, 230s ) 230s 230s with source_builder.Source(publish_spec) as dsc_path: 230s # import_unapplied_spi currently assumes it is called from the 230s # repository directory (pristine-tar and other commands rely on 230s # this) 230s > target.import_unapplied_spi( 230s repo=repo, 230s spi=MockSPI(dsc_path, publish_spec.version), 230s namespace='importer', 230s skip_orig=False, 230s parent_overrides={}, 230s ) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:1391: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:2308: in import_unapplied_spi 230s import_unapplied_dsc( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 230s commit, tag = find_or_create_unapplied_commit( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 230s changelog_parents = get_unapplied_import_parents( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 230s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 230s changelog = self.get_changelog_from_treeish(treeish) 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 230s return Changelog.from_treeish( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:569: in from_treeish 230s blob = follow_symlinks_to_blob( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 230s return _follow_symlinks_to_blob( 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s repo = pygit2.Repository('/tmp/tmpqd09txms/.git/') 230s top_tree_object = 230s search_path = 'debian/changelog' 230s _rel_tree = 230s _rel_path = '' 230s 230s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 230s _rel_tree=None, _rel_path='' 230s ): 230s '''Recursively follow a path down a tree, following symlinks, to find blob 230s 230s repo: pygit2.Repository object 230s top_tree: pygit2.Tree object of the top of the tree structure 230s search_path: '/'-separated path string of blob to find 230s _rel_tree: (internal) which tree to look further into 230s _rel_path: (internal) the path we are in so far 230s ''' 230s 230s NORMAL_BLOB_MODES = set([ 230s pygit2.GIT_FILEMODE_BLOB, 230s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 230s ]) 230s 230s _rel_tree = _rel_tree or top_tree_object 230s head, tail = posixpath.split(search_path) 230s 230s # A traditional functional split would put a single entry in head with tail 230s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 230s # to make it appear to have traditional semantics. 230s if not head: 230s head = tail 230s tail = None 230s 230s entry = _rel_tree[head] 230s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s _ test_import_unapplied_spi_parenting[input_repo1-changelog_versions1-validation_repo_delta1-validation_repo_expected_identical_refs1] _ 230s 230s get_import_commit_msg_mock = 230s get_import_tag_msg_mock = 230s repo = 230s input_repo = 230s changelog_versions = ['1-2', '1-1'] 230s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-2': }} 230s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1', 'refs/tags/importer/import/1-2'] 230s 230s @pytest.mark.parametrize( 230s [ 230s 'input_repo', 230s 'changelog_versions', 230s 'validation_repo_delta', 230s 'validation_repo_expected_identical_refs', 230s ], 230s [ 230s pytest.param( 230s repo_builder.Repo(), 230s ['1-1'], 230s { 230s 'add_commits': [ 230s repo_builder.Commit.from_spec(name='publish'), 230s ], 230s 'update_tags': {'importer/import/1-1': Placeholder('publish')}, 230s }, 230s [ 230s 'refs/tags/importer/import/1-1', 230s ] 230s ), 230s pytest.param( 230s repo_builder.Repo( 230s commits=[repo_builder.Commit.from_spec(name='import')], 230s tags={'importer/import/1-1': Placeholder('import')}, 230s ), 230s ['1-2', '1-1'], 230s { 230s 'add_commits': [ 230s repo_builder.Commit.from_spec( 230s name='publish', 230s parents=[Placeholder('import')], 230s changelog_versions=['1-2', '1-1'], 230s ), 230s ], 230s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 230s }, 230s [ 230s 'refs/tags/importer/import/1-1', 230s 'refs/tags/importer/import/1-2', 230s ], 230s ), 230s pytest.param( 230s repo_builder.Repo( 230s commits=[repo_builder.Commit.from_spec(name='import')], 230s tags={'importer/import/1-1': Placeholder('import')}, 230s ), 230s ['1-3', '1-2', '1-1'], 230s { 230s 'add_commits': [ 230s repo_builder.Commit.from_spec( 230s parents=[Placeholder('import')], 230s name='publish', 230s changelog_versions=['1-3', '1-2', '1-1'], 230s ), 230s ], 230s 'update_tags': {'importer/import/1-3': Placeholder('publish')}, 230s }, 230s [ 230s 'refs/tags/importer/import/1-1', 230s 'refs/tags/importer/import/1-3', 230s ], 230s ), 230s ( 230s repo_builder.Repo( 230s commits=[ 230s repo_builder.Commit.from_spec(name='import'), 230s repo_builder.Commit.from_spec( 230s name='reimport', 230s mutate='Reimport tag contents', 230s ), 230s ], 230s tags={ 230s 'importer/import/1-1': Placeholder('import'), 230s 'importer/reimport/import/1-1/0': Placeholder('import'), 230s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 230s }, 230s ), 230s ['1-2', '1-1'], 230s { 230s 'add_commits': [ 230s repo_builder.Commit.from_spec( 230s parents=[ 230s Placeholder('import'), 230s Placeholder('reimport'), 230s ], 230s name='publish', 230s changelog_versions=['1-2', '1-1'], 230s ), 230s ], 230s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 230s }, 230s [ 230s 'refs/tags/importer/import/1-1', 230s 'refs/tags/importer/reimport/import/1-1/0', 230s 'refs/tags/importer/reimport/import/1-1/1', 230s 'refs/tags/importer/import/1-2', 230s ], 230s ), 230s ] 230s ) 230s @patch('gitubuntu.importer.get_import_tag_msg') 230s @patch('gitubuntu.importer.get_import_commit_msg') 230s def test_import_unapplied_spi_parenting( 230s get_import_commit_msg_mock, 230s get_import_tag_msg_mock, 230s repo, 230s input_repo, 230s changelog_versions, 230s validation_repo_delta, 230s validation_repo_expected_identical_refs, 230s ): 230s """Test that unapplied import commits have the correct parents 230s 230s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 230s that determines the commit message to use for a given import 230s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 230s that determines the tag message to use for a given import 230s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 230s temporary output repository 230s :param repo_builder.Repo input_repo: input repository data 230s :param list(str) changelog_versions: the versions in the changelog of a 230s fake package to test import 230s :param dict validation_repo_delta: how to transform the input 230s repository into a "validation repository", expressed as a dict to 230s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 230s input repository. The validation repository is then used for the 230s purposes of comparison against the output repository. 230s :param list(str) validation_repo_expected_identical_refs: refs that must be 230s identical between the validation repository and the output repository 230s 230s Verify that if an import of a package is made into input_repo where the 230s package being imported has the given changelog_versions, then the output 230s repository has commits with the parents we expect. This is tested by 230s comparing specific output references against the validation repository. 230s """ 230s 230s # Match the repo_builder objects 230s get_import_tag_msg_mock.return_value = 'Test tag' 230s get_import_commit_msg_mock.return_value = b'Test commit' 230s 230s > input_repo.write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:1381: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmpjes5e0kv/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s _ test_import_unapplied_spi_parenting[input_repo2-changelog_versions2-validation_repo_delta2-validation_repo_expected_identical_refs2] _ 230s 230s get_import_commit_msg_mock = 230s get_import_tag_msg_mock = 230s repo = 230s input_repo = 230s changelog_versions = ['1-3', '1-2', '1-1'] 230s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-3': }} 230s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1', 'refs/tags/importer/import/1-3'] 230s 230s @pytest.mark.parametrize( 230s [ 230s 'input_repo', 230s 'changelog_versions', 230s 'validation_repo_delta', 230s 'validation_repo_expected_identical_refs', 230s ], 230s [ 230s pytest.param( 230s repo_builder.Repo(), 230s ['1-1'], 230s { 230s 'add_commits': [ 230s repo_builder.Commit.from_spec(name='publish'), 230s ], 230s 'update_tags': {'importer/import/1-1': Placeholder('publish')}, 230s }, 230s [ 230s 'refs/tags/importer/import/1-1', 230s ] 230s ), 230s pytest.param( 230s repo_builder.Repo( 230s commits=[repo_builder.Commit.from_spec(name='import')], 230s tags={'importer/import/1-1': Placeholder('import')}, 230s ), 230s ['1-2', '1-1'], 230s { 230s 'add_commits': [ 230s repo_builder.Commit.from_spec( 230s name='publish', 230s parents=[Placeholder('import')], 230s changelog_versions=['1-2', '1-1'], 230s ), 230s ], 230s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 230s }, 230s [ 230s 'refs/tags/importer/import/1-1', 230s 'refs/tags/importer/import/1-2', 230s ], 230s ), 230s pytest.param( 230s repo_builder.Repo( 230s commits=[repo_builder.Commit.from_spec(name='import')], 230s tags={'importer/import/1-1': Placeholder('import')}, 230s ), 230s ['1-3', '1-2', '1-1'], 230s { 230s 'add_commits': [ 230s repo_builder.Commit.from_spec( 230s parents=[Placeholder('import')], 230s name='publish', 230s changelog_versions=['1-3', '1-2', '1-1'], 230s ), 230s ], 230s 'update_tags': {'importer/import/1-3': Placeholder('publish')}, 230s }, 230s [ 230s 'refs/tags/importer/import/1-1', 230s 'refs/tags/importer/import/1-3', 230s ], 230s ), 230s ( 230s repo_builder.Repo( 230s commits=[ 230s repo_builder.Commit.from_spec(name='import'), 230s repo_builder.Commit.from_spec( 230s name='reimport', 230s mutate='Reimport tag contents', 230s ), 230s ], 230s tags={ 230s 'importer/import/1-1': Placeholder('import'), 230s 'importer/reimport/import/1-1/0': Placeholder('import'), 230s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 230s }, 230s ), 230s ['1-2', '1-1'], 230s { 230s 'add_commits': [ 230s repo_builder.Commit.from_spec( 230s parents=[ 230s Placeholder('import'), 230s Placeholder('reimport'), 230s ], 230s name='publish', 230s changelog_versions=['1-2', '1-1'], 230s ), 230s ], 230s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 230s }, 230s [ 230s 'refs/tags/importer/import/1-1', 230s 'refs/tags/importer/reimport/import/1-1/0', 230s 'refs/tags/importer/reimport/import/1-1/1', 230s 'refs/tags/importer/import/1-2', 230s ], 230s ), 230s ] 230s ) 230s @patch('gitubuntu.importer.get_import_tag_msg') 230s @patch('gitubuntu.importer.get_import_commit_msg') 230s def test_import_unapplied_spi_parenting( 230s get_import_commit_msg_mock, 230s get_import_tag_msg_mock, 230s repo, 230s input_repo, 230s changelog_versions, 230s validation_repo_delta, 230s validation_repo_expected_identical_refs, 230s ): 230s """Test that unapplied import commits have the correct parents 230s 230s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 230s that determines the commit message to use for a given import 230s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 230s that determines the tag message to use for a given import 230s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 230s temporary output repository 230s :param repo_builder.Repo input_repo: input repository data 230s :param list(str) changelog_versions: the versions in the changelog of a 230s fake package to test import 230s :param dict validation_repo_delta: how to transform the input 230s repository into a "validation repository", expressed as a dict to 230s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 230s input repository. The validation repository is then used for the 230s purposes of comparison against the output repository. 230s :param list(str) validation_repo_expected_identical_refs: refs that must be 230s identical between the validation repository and the output repository 230s 230s Verify that if an import of a package is made into input_repo where the 230s package being imported has the given changelog_versions, then the output 230s repository has commits with the parents we expect. This is tested by 230s comparing specific output references against the validation repository. 230s """ 230s 230s # Match the repo_builder objects 230s get_import_tag_msg_mock.return_value = 'Test tag' 230s get_import_commit_msg_mock.return_value = b'Test commit' 230s 230s > input_repo.write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:1381: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmpnsr6ocks/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s _ test_import_unapplied_spi_parenting[input_repo3-changelog_versions3-validation_repo_delta3-validation_repo_expected_identical_refs3] _ 230s 230s get_import_commit_msg_mock = 230s get_import_tag_msg_mock = 230s repo = 230s input_repo = 230s changelog_versions = ['1-2', '1-1'] 230s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-2': }} 230s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1', 'refs/tags/importer/reimport/import/1-1/0', 'refs/tags/importer/reimport/import/1-1/1', 'refs/tags/importer/import/1-2'] 230s 230s @pytest.mark.parametrize( 230s [ 230s 'input_repo', 230s 'changelog_versions', 230s 'validation_repo_delta', 230s 'validation_repo_expected_identical_refs', 230s ], 230s [ 230s pytest.param( 230s repo_builder.Repo(), 230s ['1-1'], 230s { 230s 'add_commits': [ 230s repo_builder.Commit.from_spec(name='publish'), 230s ], 230s 'update_tags': {'importer/import/1-1': Placeholder('publish')}, 230s }, 230s [ 230s 'refs/tags/importer/import/1-1', 230s ] 230s ), 230s pytest.param( 230s repo_builder.Repo( 230s commits=[repo_builder.Commit.from_spec(name='import')], 230s tags={'importer/import/1-1': Placeholder('import')}, 230s ), 230s ['1-2', '1-1'], 230s { 230s 'add_commits': [ 230s repo_builder.Commit.from_spec( 230s name='publish', 230s parents=[Placeholder('import')], 230s changelog_versions=['1-2', '1-1'], 230s ), 230s ], 230s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 230s }, 230s [ 230s 'refs/tags/importer/import/1-1', 230s 'refs/tags/importer/import/1-2', 230s ], 230s ), 230s pytest.param( 230s repo_builder.Repo( 230s commits=[repo_builder.Commit.from_spec(name='import')], 230s tags={'importer/import/1-1': Placeholder('import')}, 230s ), 230s ['1-3', '1-2', '1-1'], 230s { 230s 'add_commits': [ 230s repo_builder.Commit.from_spec( 230s parents=[Placeholder('import')], 230s name='publish', 230s changelog_versions=['1-3', '1-2', '1-1'], 230s ), 230s ], 230s 'update_tags': {'importer/import/1-3': Placeholder('publish')}, 230s }, 230s [ 230s 'refs/tags/importer/import/1-1', 230s 'refs/tags/importer/import/1-3', 230s ], 230s ), 230s ( 230s repo_builder.Repo( 230s commits=[ 230s repo_builder.Commit.from_spec(name='import'), 230s repo_builder.Commit.from_spec( 230s name='reimport', 230s mutate='Reimport tag contents', 230s ), 230s ], 230s tags={ 230s 'importer/import/1-1': Placeholder('import'), 230s 'importer/reimport/import/1-1/0': Placeholder('import'), 230s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 230s }, 230s ), 230s ['1-2', '1-1'], 230s { 230s 'add_commits': [ 230s repo_builder.Commit.from_spec( 230s parents=[ 230s Placeholder('import'), 230s Placeholder('reimport'), 230s ], 230s name='publish', 230s changelog_versions=['1-2', '1-1'], 230s ), 230s ], 230s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 230s }, 230s [ 230s 'refs/tags/importer/import/1-1', 230s 'refs/tags/importer/reimport/import/1-1/0', 230s 'refs/tags/importer/reimport/import/1-1/1', 230s 'refs/tags/importer/import/1-2', 230s ], 230s ), 230s ] 230s ) 230s @patch('gitubuntu.importer.get_import_tag_msg') 230s @patch('gitubuntu.importer.get_import_commit_msg') 230s def test_import_unapplied_spi_parenting( 230s get_import_commit_msg_mock, 230s get_import_tag_msg_mock, 230s repo, 230s input_repo, 230s changelog_versions, 230s validation_repo_delta, 230s validation_repo_expected_identical_refs, 230s ): 230s """Test that unapplied import commits have the correct parents 230s 230s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 230s that determines the commit message to use for a given import 230s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 230s that determines the tag message to use for a given import 230s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 230s temporary output repository 230s :param repo_builder.Repo input_repo: input repository data 230s :param list(str) changelog_versions: the versions in the changelog of a 230s fake package to test import 230s :param dict validation_repo_delta: how to transform the input 230s repository into a "validation repository", expressed as a dict to 230s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 230s input repository. The validation repository is then used for the 230s purposes of comparison against the output repository. 230s :param list(str) validation_repo_expected_identical_refs: refs that must be 230s identical between the validation repository and the output repository 230s 230s Verify that if an import of a package is made into input_repo where the 230s package being imported has the given changelog_versions, then the output 230s repository has commits with the parents we expect. This is tested by 230s comparing specific output references against the validation repository. 230s """ 230s 230s # Match the repo_builder objects 230s get_import_tag_msg_mock.return_value = 'Test tag' 230s get_import_commit_msg_mock.return_value = b'Test commit' 230s 230s > input_repo.write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:1381: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmp_mb0o5ib/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s __________________ test_import_unapplied_spi_parent_override ___________________ 230s 230s get_import_commit_msg_mock = 230s get_import_tag_msg_mock = 230s repo = 230s 230s @patch('gitubuntu.importer.get_import_tag_msg') 230s @patch('gitubuntu.importer.get_import_commit_msg') 230s def test_import_unapplied_spi_parent_override( 230s get_import_commit_msg_mock, 230s get_import_tag_msg_mock, 230s repo, 230s ): 230s """Test import_unapplied_spi() parent_override functionality 230s 230s Test that if parent_overrides is used in the import_unapplied_spi call then 230s the resulting commit correctly uses the overridden parents specified. 230s 230s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 230s that determines the commit message to use for a given import 230s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 230s that determines the tag message to use for a given import 230s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 230s temporary output repository 230s :param repo_builder.Repo input_repo: input repository data 230s """ 230s # Match the repo_builder objects 230s get_import_tag_msg_mock.return_value = 'Test tag' 230s get_import_commit_msg_mock.return_value = b'Test commit' 230s 230s input_repo = repo_builder.Repo( 230s commits=[ 230s repo_builder.Commit.from_spec(name='import1-1', version='1-1'), 230s repo_builder.Commit.from_spec(name='import1-2', version='1-2'), 230s ], 230s tags={ 230s 'importer/import/1-1': Placeholder('import1-1'), 230s 'importer/import/1-2': Placeholder('import1-2'), 230s }, 230s ) 230s > input_repo.write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:1444: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmpj4g8ie70/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s ______________ test_import_unapplied_spi_parent_override_failure _______________ 230s 230s repo = 230s 230s def test_import_unapplied_spi_parent_override_failure(repo): 230s """ 230s Test override_parents ParentOverrideError raise 230s 230s When a parent override is specified but the specified version doesn't have 230s an import tag, an exception should be raised. 230s 230s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 230s temporary output repository 230s """ 230s repo_builder.Repo( 230s commits=[repo_builder.Commit.from_spec(name='import1-1')], 230s tags={'importer/import/1-1': Placeholder('import1-1')}, 230s > ).write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:1499: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmpu4w_v97u/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s _ test_import_applied_spi_parenting[input_repo0-expected_ancestor_commits0-expected_parent_commits0] _ 230s 230s get_import_commit_msg_mock = 230s get_import_tag_msg_mock = 230s repo = 230s input_repo = 230s expected_ancestor_commits = ['refs/tags/importer/import/1-2'] 230s expected_parent_commits = ['refs/tags/importer/applied/1-1'] 230s 230s @pytest.mark.parametrize( 230s 'input_repo, expected_ancestor_commits, expected_parent_commits', [ 230s # In general, these tests do not set applied commit parents in the 230s # input repository since we have no mechanism to do that correctly, but 230s # this doesn't matter for the purposes of these tests. 230s 230s # if only one import tag exists, then it is the parent 230s pytest.param( 230s repo_builder.Repo( 230s commits=[ 230s repo_builder.Commit.from_spec( 230s name='unapplied1', 230s has_patches=True, 230s ), 230s repo_builder.Commit.from_spec( 230s parents=[Placeholder('unapplied1')], 230s name='unapplied2', 230s changelog_versions=['1-2', '1-1'], 230s has_patches=True, 230s ), 230s repo_builder.Commit.from_spec( 230s name='applied1', 230s patches_applied=True, 230s ), 230s ], 230s # no branches: technically not possible but branches are not 230s # relevant to the test 230s branches={}, 230s tags={ 230s 'importer/import/1-1': Placeholder('unapplied1'), 230s 'importer/import/1-2': Placeholder('unapplied2'), 230s 'importer/applied/1-1': Placeholder('applied1'), 230s }, 230s ), 230s ['refs/tags/importer/import/1-2'], 230s ['refs/tags/importer/applied/1-1'], 230s ), 230s 230s # if multiple import tags exist, then do they all end up as parents? 230s pytest.param( 230s repo_builder.Repo( 230s commits=[ 230s repo_builder.Commit.from_spec( 230s name='unapplied1', 230s has_patches=True, 230s ), 230s repo_builder.Commit.from_spec( 230s parents=[Placeholder('unapplied1')], 230s name='unapplied2', 230s changelog_versions=['1-2', '1-1'], 230s has_patches=True, 230s ), 230s repo_builder.Commit.from_spec( 230s parents=[Placeholder('unapplied1')], 230s name='unapplied2reimport', 230s changelog_versions=['1-2', '1-1'], 230s has_patches=True, 230s mutate='reimport tag', 230s ), 230s repo_builder.Commit.from_spec( 230s name='applied1', 230s patches_applied=True, 230s ), 230s ], 230s # no branches: technically not possible but branches are not 230s # relevant to the test 230s branches={}, 230s tags={ 230s 'importer/import/1-1': 230s Placeholder('unapplied1'), 230s 'importer/import/1-2': 230s Placeholder('unapplied2'), 230s 'importer/reimport/import/1-2/0': 230s Placeholder('unapplied2'), 230s 'importer/reimport/import/1-2/1': 230s Placeholder('unapplied2reimport'), 230s 'importer/applied/1-1': 230s Placeholder('applied1'), 230s }, 230s ), 230s [ 230s 'refs/tags/importer/reimport/import/1-2/0', 230s 'refs/tags/importer/reimport/import/1-2/1', 230s ], 230s [ 230s 'refs/tags/importer/applied/1-1', 230s ], 230s marks=pytest.mark.xfail(reason='LP: #1755247'), 230s ), 230s 230s # do we correctly create a reimport tag because a different import 230s # already exists? 230s pytest.param( 230s repo_builder.Repo( 230s commits=[ 230s repo_builder.Commit.from_spec( 230s name='unapplied1', 230s has_patches=True, 230s ), 230s repo_builder.Commit.from_spec( 230s name='unapplied1_reimport', 230s has_patches=True, 230s mutate='reimport contents', 230s ), 230s repo_builder.Commit.from_spec( 230s parents=[Placeholder('unapplied1')], 230s name='unapplied2', 230s changelog_versions=['1-2', '1-1'], 230s has_patches=True, 230s ), 230s repo_builder.Commit.from_spec( 230s name='applied1', 230s patches_applied=True, 230s ), 230s repo_builder.Commit.from_spec( 230s name='applied1_reimport', 230s patches_applied=True, 230s mutate='reimport contents', 230s ), 230s ], 230s # no branches: technically not possible but branches are not 230s # relevant to the test 230s branches={}, 230s tags={ 230s 'importer/import/1-1': 230s Placeholder('unapplied1'), 230s 'importer/reimport/import/1-1/0': 230s Placeholder('unapplied1'), 230s 'importer/reimport/import/1-1/1': 230s Placeholder('unapplied1_reimport'), 230s 'importer/import/1-2': 230s Placeholder('unapplied2'), 230s 'importer/applied/1-1': 230s Placeholder('applied1'), 230s 'importer/reimport/applied/1-1/0': 230s Placeholder('applied1'), 230s 'importer/reimport/applied/1-1/1': 230s Placeholder('applied1_reimport'), 230s }, 230s ), 230s [ 230s 'refs/tags/importer/reimport/import/1-2/0', 230s 'refs/tags/importer/reimport/import/1-2/1', 230s ], 230s [ 230s 'refs/tags/importer/reimport/applied/1-1/0', 230s 'refs/tags/importer/reimport/applied/1-1/1', 230s ], 230s marks=pytest.mark.xfail(reason='LP: #1755247'), 230s ), 230s ], 230s ) 230s @patch('gitubuntu.importer.get_import_tag_msg') 230s @patch('gitubuntu.importer.get_import_commit_msg') 230s def test_import_applied_spi_parenting( 230s get_import_commit_msg_mock, 230s get_import_tag_msg_mock, 230s repo, 230s input_repo, 230s expected_ancestor_commits, 230s expected_parent_commits, 230s ): 230s """Test that applied import commits have the right parents 230s 230s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 230s that determines the commit message to use for a given import 230s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 230s that determines the tag message to use for a given import 230s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 230s temporary output repository 230s :param repo_builder.Repo input_repo: input repository data 230s :param list(str) expected_ancestor_commits: list of commit-ish strings that 230s must be ancestors of the 'applied/1-2' tag following the applied import 230s :param list(str) expected_parent_commits: list of commit-ish strings that 230s must be parents of the 'applied/1-2' tag following the applied import. 230s 230s A fake package with version '1-2' that has a changelog parent of '1-1' is 230s imported on top of the provided input_repo. The test fails if any 230s of the expected_ancestor_commits or expected_parent_commits are not 230s present. 230s 230s This test is ugly because we do not yet have a programmatic way 230s to get the interstitial commits of the patch applications. 230s """ 230s # Match the repo_builder objects 230s get_import_tag_msg_mock.return_value = 'Test tag' 230s get_import_commit_msg_mock.return_value = b'Test commit' 230s 230s > input_repo.write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:1698: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmp6sdael4q/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: using patch list from debian/patches/series 230s dpkg-source: info: applying a 230s dpkg-source: info: applying b 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: using patch list from debian/patches/series 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: using patch list from debian/patches/series 230s dpkg-source: info: applying a 230s dpkg-source: info: applying b 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: using patch list from debian/patches/series 230s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: using patch list from debian/patches/series 230s dpkg-source: info: applying a 230s dpkg-source: info: applying b 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: using patch list from debian/patches/series 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: using patch list from debian/patches/series 230s dpkg-source: info: applying a 230s dpkg-source: info: applying b 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: using patch list from debian/patches/series 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: using patch list from debian/patches/series 230s dpkg-source: info: applying a 230s dpkg-source: info: applying b 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: using patch list from debian/patches/series 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s _ test_authorship_date[False-Fri, 2 Feb 1971 12:34:56 +0100-expected_result0] __ 230s 230s repo = 230s override = False, input_string = 'Fri, 2 Feb 1971 12:34:56 +0100' 230s expected_result = (1971, 2, 2, 11, 34, 56, ...) 230s 230s @pytest.mark.parametrize(['override', 'input_string', 'expected_result'], [ 230s # Standard date that should parse and be used 230s (False, 'Fri, 2 Feb 1971 12:34:56 +0100', (1971, 2, 2, 11, 34, 56, 60)), 230s # Deliberately illegal date that cannot be parsed 230s (True, 'Failday, 30 Feb 1971 99:99:99 +9999', (1972, 3, 3, 12, 45, 57, 0)), 230s ]) 230s def test_authorship_date(repo, override, input_string, expected_result): 230s """Synthesized commit should use changelog or override when provided 230s 230s A synthesized commit should use the date of the changelog entry in the 230s usual case, or commit_date when an override is requested. 230s 230s :param GitUbuntuRepository repo: fixture providing a temporary 230s GitUbuntuRepository instance to use 230s :param bool override: whether a changelog date override should be requested 230s from import_unapplied_dsc() 230s :param str input_string: the timestamp part of the changelog entry to use 230s :param tuple expected_result: the expected author date of the synthesized 230s commit, specified as six parameters to datetime.datetime() followed by 230s the expected tz offset in minutes. 230s """ 230s spec = source_builder.SourceSpec(changelog_date=input_string) 230s with source_builder.Source(spec) as dsc_pathname: 230s > target.import_unapplied_dsc( 230s repo=repo, 230s version='1-1', 230s namespace='importer', 230s dist='ubuntu', 230s dsc_pathname=dsc_pathname, 230s head_name='ubuntu/focal', 230s skip_orig=True, 230s parent_overrides={}, 230s commit_date=datetime.datetime( 230s 1972, 230s 3, 230s 3, 230s 12, 230s 45, 230s 57, 230s tzinfo=datetime.timezone.utc, 230s ), 230s changelog_date_overrides=( 230s frozenset({'1-1'}) if override else frozenset() 230s ), 230s ) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:1815: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 230s commit, tag = find_or_create_unapplied_commit( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 230s changelog_parents = get_unapplied_import_parents( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 230s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 230s changelog = self.get_changelog_from_treeish(treeish) 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 230s return Changelog.from_treeish( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:569: in from_treeish 230s blob = follow_symlinks_to_blob( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 230s return _follow_symlinks_to_blob( 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s repo = pygit2.Repository('/tmp/tmp21_ch5rr/.git/') 230s top_tree_object = 230s search_path = 'debian/changelog' 230s _rel_tree = 230s _rel_path = '' 230s 230s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 230s _rel_tree=None, _rel_path='' 230s ): 230s '''Recursively follow a path down a tree, following symlinks, to find blob 230s 230s repo: pygit2.Repository object 230s top_tree: pygit2.Tree object of the top of the tree structure 230s search_path: '/'-separated path string of blob to find 230s _rel_tree: (internal) which tree to look further into 230s _rel_path: (internal) the path we are in so far 230s ''' 230s 230s NORMAL_BLOB_MODES = set([ 230s pygit2.GIT_FILEMODE_BLOB, 230s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 230s ]) 230s 230s _rel_tree = _rel_tree or top_tree_object 230s head, tail = posixpath.split(search_path) 230s 230s # A traditional functional split would put a single entry in head with tail 230s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 230s # to make it appear to have traditional semantics. 230s if not head: 230s head = tail 230s tail = None 230s 230s entry = _rel_tree[head] 230s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s _ test_authorship_date[True-Failday, 30 Feb 1971 99:99:99 +9999-expected_result1] _ 230s 230s repo = 230s override = True, input_string = 'Failday, 30 Feb 1971 99:99:99 +9999' 230s expected_result = (1972, 3, 3, 12, 45, 57, ...) 230s 230s @pytest.mark.parametrize(['override', 'input_string', 'expected_result'], [ 230s # Standard date that should parse and be used 230s (False, 'Fri, 2 Feb 1971 12:34:56 +0100', (1971, 2, 2, 11, 34, 56, 60)), 230s # Deliberately illegal date that cannot be parsed 230s (True, 'Failday, 30 Feb 1971 99:99:99 +9999', (1972, 3, 3, 12, 45, 57, 0)), 230s ]) 230s def test_authorship_date(repo, override, input_string, expected_result): 230s """Synthesized commit should use changelog or override when provided 230s 230s A synthesized commit should use the date of the changelog entry in the 230s usual case, or commit_date when an override is requested. 230s 230s :param GitUbuntuRepository repo: fixture providing a temporary 230s GitUbuntuRepository instance to use 230s :param bool override: whether a changelog date override should be requested 230s from import_unapplied_dsc() 230s :param str input_string: the timestamp part of the changelog entry to use 230s :param tuple expected_result: the expected author date of the synthesized 230s commit, specified as six parameters to datetime.datetime() followed by 230s the expected tz offset in minutes. 230s """ 230s spec = source_builder.SourceSpec(changelog_date=input_string) 230s with source_builder.Source(spec) as dsc_pathname: 230s > target.import_unapplied_dsc( 230s repo=repo, 230s version='1-1', 230s namespace='importer', 230s dist='ubuntu', 230s dsc_pathname=dsc_pathname, 230s head_name='ubuntu/focal', 230s skip_orig=True, 230s parent_overrides={}, 230s commit_date=datetime.datetime( 230s 1972, 230s 3, 230s 3, 230s 12, 230s 45, 230s 57, 230s tzinfo=datetime.timezone.utc, 230s ), 230s changelog_date_overrides=( 230s frozenset({'1-1'}) if override else frozenset() 230s ), 230s ) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:1815: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 230s commit, tag = find_or_create_unapplied_commit( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 230s changelog_parents = get_unapplied_import_parents( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 230s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 230s changelog = self.get_changelog_from_treeish(treeish) 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 230s return Changelog.from_treeish( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:569: in from_treeish 230s blob = follow_symlinks_to_blob( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 230s return _follow_symlinks_to_blob( 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s repo = pygit2.Repository('/tmp/tmpxe8cux6s/.git/') 230s top_tree_object = 230s search_path = 'debian/changelog' 230s _rel_tree = 230s _rel_path = '' 230s 230s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 230s _rel_tree=None, _rel_path='' 230s ): 230s '''Recursively follow a path down a tree, following symlinks, to find blob 230s 230s repo: pygit2.Repository object 230s top_tree: pygit2.Tree object of the top of the tree structure 230s search_path: '/'-separated path string of blob to find 230s _rel_tree: (internal) which tree to look further into 230s _rel_path: (internal) the path we are in so far 230s ''' 230s 230s NORMAL_BLOB_MODES = set([ 230s pygit2.GIT_FILEMODE_BLOB, 230s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 230s ]) 230s 230s _rel_tree = _rel_tree or top_tree_object 230s head, tail = posixpath.split(search_path) 230s 230s # A traditional functional split would put a single entry in head with tail 230s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 230s # to make it appear to have traditional semantics. 230s if not head: 230s head = tail 230s tail = None 230s 230s entry = _rel_tree[head] 230s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: srcpkg/debian/changelog(l4): ignoring invalid week day 'Failday' 230s LINE: -- git ubuntu Failday, 30 Feb 1971 99:99:99 +9999 230s dpkg-source: warning: srcpkg/debian/changelog(l4): cannot parse non-conformant date '30 Feb 1971 99:99:99 +9999' 230s LINE: -- git ubuntu Failday, 30 Feb 1971 99:99:99 +9999 230s dpkg-source: warning: missing information for output field Standards-Version 230s __________________ test_fetch_rich_history_from_changes_file ___________________ 230s 230s repo = 230s pygit2_repo = pygit2.Repository('/tmp/tmp7_xtwawy/.git/') 230s 230s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 230s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 230s def test_fetch_rich_history_from_changes_file(repo, pygit2_repo): 230s """Rich history specified in a changes file is found and validated""" 230s > rich_commit, parent_commit, import_tree = populate_rich_history( 230s import_repo=repo.raw_repo, 230s uploader_repo=pygit2_repo, 230s ) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:2111: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:2080: in populate_rich_history 230s ).write(import_repo) 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmpdcet14lu/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s ________ test_fetch_rich_history_from_changes_file_fetch_failure_retry _________ 230s 230s repo = 230s pygit2_repo = pygit2.Repository('/tmp/tmp1b_a70hs/.git/') 230s 230s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 230s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 230s def test_fetch_rich_history_from_changes_file_fetch_failure_retry( 230s repo, 230s pygit2_repo, 230s ): 230s """If rich history cannot be fetched once, it is retried""" 230s > rich_commit, parent_commit, import_tree = populate_rich_history( 230s import_repo=repo.raw_repo, 230s uploader_repo=pygit2_repo, 230s ) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:2204: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:2080: in populate_rich_history 230s ).write(import_repo) 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmp8e5ngj54/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s ____________ test_fetch_rich_history_from_changes_file_missing_ref _____________ 230s 230s repo = 230s pygit2_repo = pygit2.Repository('/tmp/tmpfkgxntb4/.git/') 230s 230s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 230s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 230s def test_fetch_rich_history_from_changes_file_missing_ref( 230s repo, 230s pygit2_repo, 230s ): 230s """If rich history is specified but the ref cannot be found, a hard 230s exception is raised 230s """ 230s > rich_commit, _, _ = populate_rich_history( 230s import_repo=repo.raw_repo, 230s uploader_repo=pygit2_repo, 230s ) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:2243: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:2080: in populate_rich_history 230s ).write(import_repo) 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmpeg5kcymz/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s ___________ test_fetch_rich_history_from_changes_file_missing_commit ___________ 230s 230s repo = 230s pygit2_repo = pygit2.Repository('/tmp/tmpwua54vgt/.git/') 230s 230s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 230s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 230s def test_fetch_rich_history_from_changes_file_missing_commit( 230s repo, 230s pygit2_repo, 230s ): 230s """If rich history is specified but the commit cannot be found, an 230s exception is raised 230s """ 230s > rich_commit, _, _ = populate_rich_history( 230s import_repo=repo.raw_repo, 230s uploader_repo=pygit2_repo, 230s ) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:2271: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:2080: in populate_rich_history 230s ).write(import_repo) 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmpcgy_o1og/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s ____________ test_fetch_rich_history_from_changes_file_not_a_commit ____________ 230s 230s repo = 230s pygit2_repo = pygit2.Repository('/tmp/tmp5o1tc6mq/.git/') 230s 230s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 230s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 230s def test_fetch_rich_history_from_changes_file_not_a_commit(repo, pygit2_repo): 230s """If rich history is specified but the commit hash resolves to something 230s other than a commit, an exception is raised 230s """ 230s > rich_commit, _, _ = populate_rich_history( 230s import_repo=repo.raw_repo, 230s uploader_repo=pygit2_repo, 230s ) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:2297: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/importer_test.py:2080: in populate_rich_history 230s ).write(import_repo) 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmp67ye0mje/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s __________________________ test_reconstruct_changelog __________________________ 230s 230s pygit2_repo = pygit2.Repository('/tmp/tmp_es5metm/.git/') 230s monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x3ff8ae4d2b0> 230s 230s @pytest.mark.skipif( 230s ENTRY_POINT_TYPE is None, 230s reason="Entry point testing not available", 230s ) 230s def test_reconstruct_changelog(pygit2_repo, monkeypatch): 230s '''The reconstruct-changelog endpoint should add the expected commit''' 230s monkeypatch.setenv('DEBFULLNAME', 'Test User') 230s monkeypatch.setenv('DEBEMAIL', 'test@example.com') 230s Repo( 230s commits=[ 230s Commit(tree=SourceTree(Source()), name='root'), 230s Commit( 230s tree=SourceTree(Source(spec=SourceSpec(mutate=1))), 230s message=' * Test changelog entry', 230s name='child', 230s parents=[Placeholder('root')], 230s ), 230s ], 230s tags={'root': Placeholder('root'), 'child': Placeholder('child')}, 230s > ).write(pygit2_repo) 230s 230s gitubuntu/integration_test.py:219: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmp_es5metm/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s gitubuntu/repo_builder.py:389: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s dpkg-source: warning: missing information for output field Standards-Version 230s ___________________ TestObjectCreation.testRepoBranchesTags ____________________ 230s 230s self = 230s 230s def testRepoBranchesTags(self): 230s graph = Repo( 230s commits=[ 230s Commit( 230s Tree({}), 230s parents=[Placeholder('parent')], 230s name='child', 230s ), 230s Commit(Tree({}), name='parent'), 230s ], 230s branches={ 230s 'branch1': Placeholder('parent'), 230s 'branch2': Commit(Tree({'foo': Blob(b'qux')})), 230s }, 230s tags={ 230s 'tag1': Placeholder('child'), 230s 'tag2': Commit(Tree({'foo': Blob(b'quz')})), 230s }, 230s ) 230s > child_ref = graph.write(self.repo) 230s 230s gitubuntu/repo_builder_test.py:154: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmpt6itjygh/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s gitubuntu/repo_builder.py:389: AttributeError 230s ______________________ TestObjectCreation.testRepoTagger _______________________ 230s 230s self = 230s 230s def testRepoTagger(self): 230s """The tagger parameter should make it through to the tag""" 230s input_repo = Repo( 230s commits=[Commit(name='root')], 230s tags={'root': Placeholder('root')}, 230s tagger=pygit2.Signature( 230s 'Test Tagger', 230s 'test@example.com', 230s 1, 230s 2, 230s ), 230s ) 230s > input_repo.write(self.repo) 230s 230s gitubuntu/repo_builder_test.py:178: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmpxgs21a5i/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s gitubuntu/repo_builder.py:389: AttributeError 230s _______________________________ test_source_tree _______________________________ 230s 230s pygit2_repo = pygit2.Repository('/tmp/tmpdmma4az_/.git/') 230s 230s def test_source_tree(pygit2_repo): 230s commit_str = Commit(SourceTree(Source())).write(pygit2_repo) 230s commit = pygit2_repo.get(commit_str) 230s > assert gitubuntu.git_repository.follow_symlinks_to_blob( 230s repo=pygit2_repo, 230s treeish_object=commit, 230s path='debian/changelog', 230s ) 230s 230s gitubuntu/repo_builder_test.py:190: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 230s return _follow_symlinks_to_blob( 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s repo = pygit2.Repository('/tmp/tmpdmma4az_/.git/') 230s top_tree_object = 230s search_path = 'debian/changelog' 230s _rel_tree = 230s _rel_path = '' 230s 230s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 230s _rel_tree=None, _rel_path='' 230s ): 230s '''Recursively follow a path down a tree, following symlinks, to find blob 230s 230s repo: pygit2.Repository object 230s top_tree: pygit2.Tree object of the top of the tree structure 230s search_path: '/'-separated path string of blob to find 230s _rel_tree: (internal) which tree to look further into 230s _rel_path: (internal) the path we are in so far 230s ''' 230s 230s NORMAL_BLOB_MODES = set([ 230s pygit2.GIT_FILEMODE_BLOB, 230s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 230s ]) 230s 230s _rel_tree = _rel_tree or top_tree_object 230s head, tail = posixpath.split(search_path) 230s 230s # A traditional functional split would put a single entry in head with tail 230s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 230s # to make it appear to have traditional semantics. 230s if not head: 230s head = tail 230s tail = None 230s 230s entry = _rel_tree[head] 230s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 230s 230s gitubuntu/git_repository.py:68: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s ______________________________ test_preservation _______________________________ 230s 230s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_preservation0') 230s repo = 230s 230s def test_preservation(tmpdir, repo): 230s """An export followed by an import should preserve rich history 230s 230s Given a minimal repository that should be able to have upload tags be 230s exported, when we import the export result into a similar repository with a 230s subtly different upload tag in which the rich history should still apply, 230s the result should be a correctly reconstructed upload tag. 230s 230s :param py.path tmpdir: the pytest standard tmpdir fixture. 230s :param repo: our standard repo fixture. 230s """ 230s Repo( 230s commits=[ 230s Commit( 230s name='1', 230s tree=Tree({ 230s 'a': Blob(b'a'), 230s }), 230s ), 230s Commit( 230s name='2', 230s parents=[Placeholder('1')], 230s tree=Tree({ 230s 'a': Blob(b'ab'), 230s }), 230s ), 230s Commit( 230s name='3', 230s parents=[Placeholder('2')], 230s tree=Tree({ 230s 'a': Blob(b'abc'), 230s }), 230s ), 230s ], 230s tags={ 230s 'importer/import/1': Placeholder('1'), 230s 'importer/upload/2': Placeholder('3'), 230s } 230s > ).write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/rich_history_test.py:51: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmp424uimyu/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s ______________________ test_preservation_multiple_parents ______________________ 230s 230s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_preservation_multiple_par0') 230s repo = 230s 230s def test_preservation_multiple_parents(tmpdir, repo): 230s """An export of rich history should omit multiple parent cases 230s 230s If an upload tag leads to multiple parents before we reach an import tag, 230s it should be excluded from the export as this type of upload tag is not 230s supported for rich history preservation. This test also serves to verify 230s code paths that handle the MultipleParentError exception in the export 230s code. 230s 230s :param py.path tmpdir: the pytest standard tmpdir fixture. 230s :param repo: our standard repo fixture. 230s """ 230s Repo( 230s commits=[ 230s Commit(name='1', message='a'), 230s Commit(name='2', message='b'), 230s Commit(name='child', parents=[Placeholder('1'), Placeholder('2')]), 230s ], 230s tags={ 230s 'importer/import/1': Placeholder('1'), 230s 'importer/upload/2': Placeholder('child'), 230s } 230s > ).write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/rich_history_test.py:102: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmpsenpz3xi/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s _________________________ test_preservation_no_parents _________________________ 230s 230s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_preservation_no_parents0') 230s repo = 230s 230s def test_preservation_no_parents(tmpdir, repo): 230s """An export of rich history should omit no parent cases 230s 230s If an upload tag leads to no parents before we reach an import tag, 230s it should be excluded from the export as this type of upload tag is not 230s supported for rich history preservation. This test also serves to verify 230s code paths that handle the NoParentError exception in the export 230s code. 230s 230s :param py.path tmpdir: the pytest standard tmpdir fixture. 230s :param repo: our standard repo fixture. 230s """ 230s Repo( 230s commits=[ 230s Commit(name='1', message='a'), 230s Commit(name='2', message='b'), 230s ], 230s tags={ 230s 'importer/import/1': Placeholder('1'), 230s 'importer/upload/2': Placeholder('2'), 230s } 230s > ).write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/rich_history_test.py:129: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmpv4xc0eeb/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s _____________ test_input_edge_cases[before_export0-before_import0] _____________ 230s 230s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_input_edge_cases_before_e0') 230s repo = 230s before_export = {'commits': [, , 'importer/upload/2': }} 230s before_import = {'commits': [], 'tags': {'importer/import/1': }} 230s 230s @pytest.mark.parametrize(['before_export', 'before_import'], [ 230s ( 230s # Commit messages with patch-like contents should not fail 230s 230s # If a commit message in rich history contains text in a patch-like 230s # format (such as a diff of some file), it should not prevent correct 230s # round-tripping. "git format-patch" followed by "git am" fails this 230s # test, for example. 230s { 230s 'commits': [ 230s Commit(name='1', message='a', tree=Tree({'a': Blob(b'a')})), 230s Commit( 230s name='2', 230s message='''First line 230s 230s Inline patch that isn't part of the real patch starts here 230s 230s --- a/foo 230s +++ b/foo 230s @@ -1 +1,2 @@ 230s foo 230s +bar 230s ''', 230s tree=Tree({'a': Blob(b'ab')}), 230s parents=[Placeholder('1')], 230s ), 230s ], 230s 'tags': { 230s 'importer/import/1': Placeholder('1'), 230s 'importer/upload/2': Placeholder('2'), 230s } 230s }, 230s { 230s 'commits': [ 230s Commit(name='b1', message='c', tree=Tree({'a': Blob(b'a')})), 230s ], 230s 'tags': {'importer/import/1': Placeholder('b1')}, 230s }, 230s ), 230s ( 230s # Commits that have no changes should round trip 230s { 230s 'commits': [ 230s Commit( 230s name='1', 230s message='a', 230s ), 230s Commit( 230s name='2', 230s message='b', 230s parents=[Placeholder('1')], 230s ), 230s ], 230s 'tags': { 230s 'importer/import/1': Placeholder('1'), 230s 'importer/upload/2': Placeholder('2'), 230s }, 230s }, 230s { 230s 'commits': [Commit(name='b1', message='c')], 230s 'tags': {'importer/import/1': Placeholder('b1')}, 230s }, 230s ), 230s ( 230s # Commits that have no commit message should round trip 230s { 230s 'commits': [ 230s Commit( 230s name='1', 230s message='a', 230s ), 230s Commit( 230s name='2', 230s message='', 230s tree=Tree({'a': Blob(b'a')}), 230s parents=[Placeholder('1')], 230s ), 230s ], 230s 'tags': { 230s 'importer/import/1': Placeholder('1'), 230s 'importer/upload/2': Placeholder('2'), 230s } 230s }, 230s { 230s 'commits': [Commit(name='b1', message='c')], 230s 'tags': {'importer/import/1': Placeholder('b1')}, 230s }, 230s ), 230s ]) 230s def test_input_edge_cases(tmpdir, repo, before_export, before_import): 230s """ 230s Edge cases in input rich history should reimport without failure 230s 230s Check that rich history preservation completes without an exception in 230s various cases. Details of each case are described in comments in the test 230s parameters above. 230s 230s Since these tests generally cover the mutated case (where rich history has 230s to be ported forward because parent commits have mutated), we must remove 230s and recreate the 'importer/import/1' tag so that it is different before 230s attempting reimport. This is done by deleting all ('importer/*') tags and 230s then using the before_import parameter to recreate it again. 230s 230s :param py.path tmpdir: the pytest standard tmpdir fixture. 230s :param GitUbuntuRepository repo: our standard repo fixture. 230s :param dict before_export: the parameters to supply to Repo() to construct 230s the repository that will be exported. 230s :param dict before_import: the parametsrs to supply to Repo() to add to the 230s repository before attempting reimport. 230s """ 230s > Repo(**before_export).write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/rich_history_test.py:260: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmpwce7nhjp/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s _____________ test_input_edge_cases[before_export1-before_import1] _____________ 230s 230s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_input_edge_cases_before_e1') 230s repo = 230s before_export = {'commits': [, , 'importer/upload/2': }} 230s before_import = {'commits': [], 'tags': {'importer/import/1': }} 230s 230s @pytest.mark.parametrize(['before_export', 'before_import'], [ 230s ( 230s # Commit messages with patch-like contents should not fail 230s 230s # If a commit message in rich history contains text in a patch-like 230s # format (such as a diff of some file), it should not prevent correct 230s # round-tripping. "git format-patch" followed by "git am" fails this 230s # test, for example. 230s { 230s 'commits': [ 230s Commit(name='1', message='a', tree=Tree({'a': Blob(b'a')})), 230s Commit( 230s name='2', 230s message='''First line 230s 230s Inline patch that isn't part of the real patch starts here 230s 230s --- a/foo 230s +++ b/foo 230s @@ -1 +1,2 @@ 230s foo 230s +bar 230s ''', 230s tree=Tree({'a': Blob(b'ab')}), 230s parents=[Placeholder('1')], 230s ), 230s ], 230s 'tags': { 230s 'importer/import/1': Placeholder('1'), 230s 'importer/upload/2': Placeholder('2'), 230s } 230s }, 230s { 230s 'commits': [ 230s Commit(name='b1', message='c', tree=Tree({'a': Blob(b'a')})), 230s ], 230s 'tags': {'importer/import/1': Placeholder('b1')}, 230s }, 230s ), 230s ( 230s # Commits that have no changes should round trip 230s { 230s 'commits': [ 230s Commit( 230s name='1', 230s message='a', 230s ), 230s Commit( 230s name='2', 230s message='b', 230s parents=[Placeholder('1')], 230s ), 230s ], 230s 'tags': { 230s 'importer/import/1': Placeholder('1'), 230s 'importer/upload/2': Placeholder('2'), 230s }, 230s }, 230s { 230s 'commits': [Commit(name='b1', message='c')], 230s 'tags': {'importer/import/1': Placeholder('b1')}, 230s }, 230s ), 230s ( 230s # Commits that have no commit message should round trip 230s { 230s 'commits': [ 230s Commit( 230s name='1', 230s message='a', 230s ), 230s Commit( 230s name='2', 230s message='', 230s tree=Tree({'a': Blob(b'a')}), 230s parents=[Placeholder('1')], 230s ), 230s ], 230s 'tags': { 230s 'importer/import/1': Placeholder('1'), 230s 'importer/upload/2': Placeholder('2'), 230s } 230s }, 230s { 230s 'commits': [Commit(name='b1', message='c')], 230s 'tags': {'importer/import/1': Placeholder('b1')}, 230s }, 230s ), 230s ]) 230s def test_input_edge_cases(tmpdir, repo, before_export, before_import): 230s """ 230s Edge cases in input rich history should reimport without failure 230s 230s Check that rich history preservation completes without an exception in 230s various cases. Details of each case are described in comments in the test 230s parameters above. 230s 230s Since these tests generally cover the mutated case (where rich history has 230s to be ported forward because parent commits have mutated), we must remove 230s and recreate the 'importer/import/1' tag so that it is different before 230s attempting reimport. This is done by deleting all ('importer/*') tags and 230s then using the before_import parameter to recreate it again. 230s 230s :param py.path tmpdir: the pytest standard tmpdir fixture. 230s :param GitUbuntuRepository repo: our standard repo fixture. 230s :param dict before_export: the parameters to supply to Repo() to construct 230s the repository that will be exported. 230s :param dict before_import: the parametsrs to supply to Repo() to add to the 230s repository before attempting reimport. 230s """ 230s > Repo(**before_export).write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/rich_history_test.py:260: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmpeuezifc9/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s _____________ test_input_edge_cases[before_export2-before_import2] _____________ 230s 230s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_input_edge_cases_before_e2') 230s repo = 230s before_export = {'commits': [, , 'importer/upload/2': }} 230s before_import = {'commits': [], 'tags': {'importer/import/1': }} 230s 230s @pytest.mark.parametrize(['before_export', 'before_import'], [ 230s ( 230s # Commit messages with patch-like contents should not fail 230s 230s # If a commit message in rich history contains text in a patch-like 230s # format (such as a diff of some file), it should not prevent correct 230s # round-tripping. "git format-patch" followed by "git am" fails this 230s # test, for example. 230s { 230s 'commits': [ 230s Commit(name='1', message='a', tree=Tree({'a': Blob(b'a')})), 230s Commit( 230s name='2', 230s message='''First line 230s 230s Inline patch that isn't part of the real patch starts here 230s 230s --- a/foo 230s +++ b/foo 230s @@ -1 +1,2 @@ 230s foo 230s +bar 230s ''', 230s tree=Tree({'a': Blob(b'ab')}), 230s parents=[Placeholder('1')], 230s ), 230s ], 230s 'tags': { 230s 'importer/import/1': Placeholder('1'), 230s 'importer/upload/2': Placeholder('2'), 230s } 230s }, 230s { 230s 'commits': [ 230s Commit(name='b1', message='c', tree=Tree({'a': Blob(b'a')})), 230s ], 230s 'tags': {'importer/import/1': Placeholder('b1')}, 230s }, 230s ), 230s ( 230s # Commits that have no changes should round trip 230s { 230s 'commits': [ 230s Commit( 230s name='1', 230s message='a', 230s ), 230s Commit( 230s name='2', 230s message='b', 230s parents=[Placeholder('1')], 230s ), 230s ], 230s 'tags': { 230s 'importer/import/1': Placeholder('1'), 230s 'importer/upload/2': Placeholder('2'), 230s }, 230s }, 230s { 230s 'commits': [Commit(name='b1', message='c')], 230s 'tags': {'importer/import/1': Placeholder('b1')}, 230s }, 230s ), 230s ( 230s # Commits that have no commit message should round trip 230s { 230s 'commits': [ 230s Commit( 230s name='1', 230s message='a', 230s ), 230s Commit( 230s name='2', 230s message='', 230s tree=Tree({'a': Blob(b'a')}), 230s parents=[Placeholder('1')], 230s ), 230s ], 230s 'tags': { 230s 'importer/import/1': Placeholder('1'), 230s 'importer/upload/2': Placeholder('2'), 230s } 230s }, 230s { 230s 'commits': [Commit(name='b1', message='c')], 230s 'tags': {'importer/import/1': Placeholder('b1')}, 230s }, 230s ), 230s ]) 230s def test_input_edge_cases(tmpdir, repo, before_export, before_import): 230s """ 230s Edge cases in input rich history should reimport without failure 230s 230s Check that rich history preservation completes without an exception in 230s various cases. Details of each case are described in comments in the test 230s parameters above. 230s 230s Since these tests generally cover the mutated case (where rich history has 230s to be ported forward because parent commits have mutated), we must remove 230s and recreate the 'importer/import/1' tag so that it is different before 230s attempting reimport. This is done by deleting all ('importer/*') tags and 230s then using the before_import parameter to recreate it again. 230s 230s :param py.path tmpdir: the pytest standard tmpdir fixture. 230s :param GitUbuntuRepository repo: our standard repo fixture. 230s :param dict before_export: the parameters to supply to Repo() to construct 230s the repository that will be exported. 230s :param dict before_import: the parametsrs to supply to Repo() to add to the 230s repository before attempting reimport. 230s """ 230s > Repo(**before_export).write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/rich_history_test.py:260: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmpo9tl8jvs/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s _______________________ test_preservation_fast_forwards ________________________ 230s 230s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_preservation_fast_forward0') 230s repo = 230s 230s def test_preservation_fast_forwards(tmpdir, repo): 230s """Rich history that can be fast forwarded should not mutate 230s 230s :param py.path tmpdir: the pytest standard tmpdir fixture. 230s :param GitUbuntuRepository repo: our standard repo fixture. 230s """ 230s Repo( 230s commits=[ 230s Commit( 230s name='1', 230s message='a', 230s ), 230s Commit( 230s name='2', 230s message='', 230s tree=Tree({'a': Blob(b'a')}), 230s parents=[Placeholder('1')], 230s ), 230s ], 230s tags={ 230s 'importer/import/1': Placeholder('1'), 230s 'importer/upload/2': Placeholder('2'), 230s } 230s > ).write(repo.raw_repo) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/rich_history_test.py:294: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s self = 230s repo = pygit2.Repository('/tmp/tmpngaax2_j/.git/'), record = {} 230s 230s def write(self, repo, record=None): 230s replace_placeholders(self) 230s record = record or dict() 230s written_commits = [ 230s commit.write(repo=repo, record=record) 230s for commit 230s in self.commit_list 230s ] 230s for name, target in self.branches.items(): 230s repo.create_branch( 230s name, 230s repo.get(target.write(repo)).peel(pygit2.Commit), 230s ) 230s for name, target in self.tags.items(): 230s repo.create_tag( 230s name, 230s target.write(repo), 230s > pygit2.GIT_OBJ_COMMIT, 230s self.tagger.signature, 230s 'Tag message', 230s ) 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/repo_builder.py:389: AttributeError 230s _______________________ test_source_create_with_version ________________________ 230s 230s repo = 230s 230s def test_source_create_with_version(repo): 230s > version = get_spec_changelog_version(repo, version='3', native=True) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/source_builder_test.py:57: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 230s changelog = repo.get_changelog_from_treeish(tree_hash) 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 230s return Changelog.from_treeish( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:569: in from_treeish 230s blob = follow_symlinks_to_blob( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 230s return _follow_symlinks_to_blob( 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s repo = pygit2.Repository('/tmp/tmp6otgi4q_/.git/') 230s top_tree_object = 230s search_path = 'debian/changelog' 230s _rel_tree = 230s _rel_path = '' 230s 230s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 230s _rel_tree=None, _rel_path='' 230s ): 230s '''Recursively follow a path down a tree, following symlinks, to find blob 230s 230s repo: pygit2.Repository object 230s top_tree: pygit2.Tree object of the top of the tree structure 230s search_path: '/'-separated path string of blob to find 230s _rel_tree: (internal) which tree to look further into 230s _rel_path: (internal) the path we are in so far 230s ''' 230s 230s NORMAL_BLOB_MODES = set([ 230s pygit2.GIT_FILEMODE_BLOB, 230s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 230s ]) 230s 230s _rel_tree = _rel_tree or top_tree_object 230s head, tail = posixpath.split(search_path) 230s 230s # A traditional functional split would put a single entry in head with tail 230s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 230s # to make it appear to have traditional semantics. 230s if not head: 230s head = tail 230s tail = None 230s 230s entry = _rel_tree[head] 230s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (native)' 230s dpkg-source: info: building source-builder-package in source-builder-package_3.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_3.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s _______________________ test_source_create_with_versions _______________________ 230s 230s repo = 230s 230s def test_source_create_with_versions(repo): 230s source_spec = target.SourceSpec(changelog_versions=['3', '4'], native=True) 230s with target.Source(source_spec) as f: 230s tree_hash = importer.dsc_to_tree_hash(repo.raw_repo, f) 230s > changelog = repo.get_changelog_from_treeish(tree_hash) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/source_builder_test.py:65: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 230s return Changelog.from_treeish( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:569: in from_treeish 230s blob = follow_symlinks_to_blob( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 230s return _follow_symlinks_to_blob( 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s repo = pygit2.Repository('/tmp/tmpnq9mb8tb/.git/') 230s top_tree_object = 230s search_path = 'debian/changelog' 230s _rel_tree = 230s _rel_path = '' 230s 230s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 230s _rel_tree=None, _rel_path='' 230s ): 230s '''Recursively follow a path down a tree, following symlinks, to find blob 230s 230s repo: pygit2.Repository object 230s top_tree: pygit2.Tree object of the top of the tree structure 230s search_path: '/'-separated path string of blob to find 230s _rel_tree: (internal) which tree to look further into 230s _rel_path: (internal) the path we are in so far 230s ''' 230s 230s NORMAL_BLOB_MODES = set([ 230s pygit2.GIT_FILEMODE_BLOB, 230s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 230s ]) 230s 230s _rel_tree = _rel_tree or top_tree_object 230s head, tail = posixpath.split(search_path) 230s 230s # A traditional functional split would put a single entry in head with tail 230s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 230s # to make it appear to have traditional semantics. 230s if not head: 230s head = tail 230s tail = None 230s 230s entry = _rel_tree[head] 230s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (native)' 230s dpkg-source: info: building source-builder-package in source-builder-package_3.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_3.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s ____________ test_source_native_source_format[True-3.0 (native)\n] _____________ 230s 230s repo = 230s native = True, expected = b'3.0 (native)\n' 230s 230s @pytest.mark.parametrize('native,expected', [ 230s (True, b"3.0 (native)\n"), 230s (False, b"3.0 (quilt)\n"), 230s ]) 230s def test_source_native_source_format(repo, native, expected): 230s with target.Source(target.SourceSpec(native=native)) as dsc_path: 230s > blob = git_repository.follow_symlinks_to_blob( 230s repo.raw_repo, 230s dsc_path_to_tree(repo, dsc_path), 230s 'debian/source/format', 230s ) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/source_builder_test.py:133: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 230s return _follow_symlinks_to_blob( 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s repo = pygit2.Repository('/tmp/tmpyxd3cv_i/.git/') 230s top_tree_object = 230s search_path = 'debian/source/format' 230s _rel_tree = 230s _rel_path = '' 230s 230s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 230s _rel_tree=None, _rel_path='' 230s ): 230s '''Recursively follow a path down a tree, following symlinks, to find blob 230s 230s repo: pygit2.Repository object 230s top_tree: pygit2.Tree object of the top of the tree structure 230s search_path: '/'-separated path string of blob to find 230s _rel_tree: (internal) which tree to look further into 230s _rel_path: (internal) the path we are in so far 230s ''' 230s 230s NORMAL_BLOB_MODES = set([ 230s pygit2.GIT_FILEMODE_BLOB, 230s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 230s ]) 230s 230s _rel_tree = _rel_tree or top_tree_object 230s head, tail = posixpath.split(search_path) 230s 230s # A traditional functional split would put a single entry in head with tail 230s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 230s # to make it appear to have traditional semantics. 230s if not head: 230s head = tail 230s tail = None 230s 230s entry = _rel_tree[head] 230s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (native)' 230s dpkg-source: info: building source-builder-package in source-builder-package_1.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s ____________ test_source_native_source_format[False-3.0 (quilt)\n] _____________ 230s 230s repo = 230s native = False, expected = b'3.0 (quilt)\n' 230s 230s @pytest.mark.parametrize('native,expected', [ 230s (True, b"3.0 (native)\n"), 230s (False, b"3.0 (quilt)\n"), 230s ]) 230s def test_source_native_source_format(repo, native, expected): 230s with target.Source(target.SourceSpec(native=native)) as dsc_path: 230s > blob = git_repository.follow_symlinks_to_blob( 230s repo.raw_repo, 230s dsc_path_to_tree(repo, dsc_path), 230s 'debian/source/format', 230s ) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/source_builder_test.py:133: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 230s return _follow_symlinks_to_blob( 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s repo = pygit2.Repository('/tmp/tmp2nhopyg9/.git/') 230s top_tree_object = 230s search_path = 'debian/source/format' 230s _rel_tree = 230s _rel_path = '' 230s 230s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 230s _rel_tree=None, _rel_path='' 230s ): 230s '''Recursively follow a path down a tree, following symlinks, to find blob 230s 230s repo: pygit2.Repository object 230s top_tree: pygit2.Tree object of the top of the tree structure 230s search_path: '/'-separated path string of blob to find 230s _rel_tree: (internal) which tree to look further into 230s _rel_path: (internal) the path we are in so far 230s ''' 230s 230s NORMAL_BLOB_MODES = set([ 230s pygit2.GIT_FILEMODE_BLOB, 230s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 230s ]) 230s 230s _rel_tree = _rel_tree or top_tree_object 230s head, tail = posixpath.split(search_path) 230s 230s # A traditional functional split would put a single entry in head with tail 230s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 230s # to make it appear to have traditional semantics. 230s if not head: 230s head = tail 230s tail = None 230s 230s entry = _rel_tree[head] 230s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s _________________________ test_source_quilt_no_patches _________________________ 230s 230s repo = 230s 230s def test_source_quilt_no_patches(repo): 230s with target.Source(target.SourceSpec()) as dsc_path: 230s top = dsc_path_to_tree(repo, dsc_path) 230s debian_entry = top['debian'] 230s > assert debian_entry.type in [pygit2.GIT_OBJ_TREE, 'tree'] 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/source_builder_test.py:144: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s ________________________ test_source_quilt_with_patches ________________________ 230s 230s repo = 230s 230s def test_source_quilt_with_patches(repo): 230s spec = target.SourceSpec(has_patches=True) 230s with target.Source(spec) as dsc_path: 230s top = dsc_path_to_tree(repo, dsc_path) 230s expected_files = ['series', 'a', 'b'] 230s for basename in expected_files: 230s > assert git_repository.follow_symlinks_to_blob( 230s repo.raw_repo, 230s top, 230s 'debian/patches/%s' % basename, 230s ) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/source_builder_test.py:156: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 230s return _follow_symlinks_to_blob( 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s repo = pygit2.Repository('/tmp/tmp5a621we_/.git/') 230s top_tree_object = 230s search_path = 'debian/patches/series' 230s _rel_tree = 230s _rel_path = '' 230s 230s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 230s _rel_tree=None, _rel_path='' 230s ): 230s '''Recursively follow a path down a tree, following symlinks, to find blob 230s 230s repo: pygit2.Repository object 230s top_tree: pygit2.Tree object of the top of the tree structure 230s search_path: '/'-separated path string of blob to find 230s _rel_tree: (internal) which tree to look further into 230s _rel_path: (internal) the path we are in so far 230s ''' 230s 230s NORMAL_BLOB_MODES = set([ 230s pygit2.GIT_FILEMODE_BLOB, 230s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 230s ]) 230s 230s _rel_tree = _rel_tree or top_tree_object 230s head, tail = posixpath.split(search_path) 230s 230s # A traditional functional split would put a single entry in head with tail 230s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 230s # to make it appear to have traditional semantics. 230s if not head: 230s head = tail 230s tail = None 230s 230s entry = _rel_tree[head] 230s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: using patch list from debian/patches/series 230s dpkg-source: info: applying a 230s dpkg-source: info: applying b 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: using patch list from debian/patches/series 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s ____________________ test_source_quilt_with_patches_applied ____________________ 230s 230s repo = 230s 230s def test_source_quilt_with_patches_applied(repo): 230s spec = target.SourceSpec(has_patches=True) 230s with target.Source(spec) as dsc_path: 230s top = dsc_path_to_tree(repo, dsc_path, patches_applied=True) 230s expected_files = [ 230s 'debian/patches/series', 230s 'debian/patches/a', 230s 'debian/patches/b', 230s 'a', 230s 'b', 230s ] 230s for filename in expected_files: 230s > assert git_repository.follow_symlinks_to_blob( 230s repo.raw_repo, 230s top, 230s filename, 230s ) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/source_builder_test.py:183: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 230s return _follow_symlinks_to_blob( 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s repo = pygit2.Repository('/tmp/tmpy0it0s6m/.git/') 230s top_tree_object = 230s search_path = 'debian/patches/series' 230s _rel_tree = 230s _rel_path = '' 230s 230s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 230s _rel_tree=None, _rel_path='' 230s ): 230s '''Recursively follow a path down a tree, following symlinks, to find blob 230s 230s repo: pygit2.Repository object 230s top_tree: pygit2.Tree object of the top of the tree structure 230s search_path: '/'-separated path string of blob to find 230s _rel_tree: (internal) which tree to look further into 230s _rel_path: (internal) the path we are in so far 230s ''' 230s 230s NORMAL_BLOB_MODES = set([ 230s pygit2.GIT_FILEMODE_BLOB, 230s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 230s ]) 230s 230s _rel_tree = _rel_tree or top_tree_object 230s head, tail = posixpath.split(search_path) 230s 230s # A traditional functional split would put a single entry in head with tail 230s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 230s # to make it appear to have traditional semantics. 230s if not head: 230s head = tail 230s tail = None 230s 230s entry = _rel_tree[head] 230s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: using patch list from debian/patches/series 230s dpkg-source: info: applying a 230s dpkg-source: info: applying b 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: using patch list from debian/patches/series 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s ______________________ test_source_version_native_default ______________________ 230s 230s repo = 230s 230s def test_source_version_native_default(repo): 230s """The default version string for a native package should not have a 230s '-' in it. 230s """ 230s > version = get_spec_changelog_version(repo, native=True) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/source_builder_test.py:194: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 230s changelog = repo.get_changelog_from_treeish(tree_hash) 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 230s return Changelog.from_treeish( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:569: in from_treeish 230s blob = follow_symlinks_to_blob( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 230s return _follow_symlinks_to_blob( 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s repo = pygit2.Repository('/tmp/tmp855aku_i/.git/') 230s top_tree_object = 230s search_path = 'debian/changelog' 230s _rel_tree = 230s _rel_path = '' 230s 230s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 230s _rel_tree=None, _rel_path='' 230s ): 230s '''Recursively follow a path down a tree, following symlinks, to find blob 230s 230s repo: pygit2.Repository object 230s top_tree: pygit2.Tree object of the top of the tree structure 230s search_path: '/'-separated path string of blob to find 230s _rel_tree: (internal) which tree to look further into 230s _rel_path: (internal) the path we are in so far 230s ''' 230s 230s NORMAL_BLOB_MODES = set([ 230s pygit2.GIT_FILEMODE_BLOB, 230s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 230s ]) 230s 230s _rel_tree = _rel_tree or top_tree_object 230s head, tail = posixpath.split(search_path) 230s 230s # A traditional functional split would put a single entry in head with tail 230s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 230s # to make it appear to have traditional semantics. 230s if not head: 230s head = tail 230s tail = None 230s 230s entry = _rel_tree[head] 230s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (native)' 230s dpkg-source: info: building source-builder-package in source-builder-package_1.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s ____________________ test_source_version_non_native_default ____________________ 230s 230s repo = 230s 230s def test_source_version_non_native_default(repo): 230s """The default version string for a non-native package should have a 230s '-' in it. 230s """ 230s > version = get_spec_changelog_version(repo, native=False) 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/source_builder_test.py:202: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 230s changelog = repo.get_changelog_from_treeish(tree_hash) 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 230s return Changelog.from_treeish( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:569: in from_treeish 230s blob = follow_symlinks_to_blob( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 230s return _follow_symlinks_to_blob( 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s repo = pygit2.Repository('/tmp/tmpeuu9y_tp/.git/') 230s top_tree_object = 230s search_path = 'debian/changelog' 230s _rel_tree = 230s _rel_path = '' 230s 230s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 230s _rel_tree=None, _rel_path='' 230s ): 230s '''Recursively follow a path down a tree, following symlinks, to find blob 230s 230s repo: pygit2.Repository object 230s top_tree: pygit2.Tree object of the top of the tree structure 230s search_path: '/'-separated path string of blob to find 230s _rel_tree: (internal) which tree to look further into 230s _rel_path: (internal) the path we are in so far 230s ''' 230s 230s NORMAL_BLOB_MODES = set([ 230s pygit2.GIT_FILEMODE_BLOB, 230s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 230s ]) 230s 230s _rel_tree = _rel_tree or top_tree_object 230s head, tail = posixpath.split(search_path) 230s 230s # A traditional functional split would put a single entry in head with tail 230s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 230s # to make it appear to have traditional semantics. 230s if not head: 230s head = tail 230s tail = None 230s 230s entry = _rel_tree[head] 230s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s _____________________ test_source_version_native_specific ______________________ 230s 230s repo = 230s 230s def test_source_version_native_specific(repo): 230s """We should be able to create a native package with a 230s native-looking version string. 230s """ 230s > version = get_spec_changelog_version(repo, native=True, version='1.0') 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/source_builder_test.py:210: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 230s changelog = repo.get_changelog_from_treeish(tree_hash) 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 230s return Changelog.from_treeish( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:569: in from_treeish 230s blob = follow_symlinks_to_blob( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 230s return _follow_symlinks_to_blob( 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s repo = pygit2.Repository('/tmp/tmplj0mwd98/.git/') 230s top_tree_object = 230s search_path = 'debian/changelog' 230s _rel_tree = 230s _rel_path = '' 230s 230s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 230s _rel_tree=None, _rel_path='' 230s ): 230s '''Recursively follow a path down a tree, following symlinks, to find blob 230s 230s repo: pygit2.Repository object 230s top_tree: pygit2.Tree object of the top of the tree structure 230s search_path: '/'-separated path string of blob to find 230s _rel_tree: (internal) which tree to look further into 230s _rel_path: (internal) the path we are in so far 230s ''' 230s 230s NORMAL_BLOB_MODES = set([ 230s pygit2.GIT_FILEMODE_BLOB, 230s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 230s ]) 230s 230s _rel_tree = _rel_tree or top_tree_object 230s head, tail = posixpath.split(search_path) 230s 230s # A traditional functional split would put a single entry in head with tail 230s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 230s # to make it appear to have traditional semantics. 230s if not head: 230s head = tail 230s tail = None 230s 230s entry = _rel_tree[head] 230s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (native)' 230s dpkg-source: info: building source-builder-package in source-builder-package_1.0.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1.0.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s ___________________ test_source_version_non_native_specific ____________________ 230s 230s repo = 230s 230s def test_source_version_non_native_specific(repo): 230s """We should be able to create a non-native package with a 230s non-native-looking version string. 230s """ 230s > version = get_spec_changelog_version(repo, native=False, version='1.0-1') 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/source_builder_test.py:218: 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 230s changelog = repo.get_changelog_from_treeish(tree_hash) 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 230s return Changelog.from_treeish( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:569: in from_treeish 230s blob = follow_symlinks_to_blob( 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 230s return _follow_symlinks_to_blob( 230s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 230s 230s repo = pygit2.Repository('/tmp/tmp8rgqqnj9/.git/') 230s top_tree_object = 230s search_path = 'debian/changelog' 230s _rel_tree = 230s _rel_path = '' 230s 230s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 230s _rel_tree=None, _rel_path='' 230s ): 230s '''Recursively follow a path down a tree, following symlinks, to find blob 230s 230s repo: pygit2.Repository object 230s top_tree: pygit2.Tree object of the top of the tree structure 230s search_path: '/'-separated path string of blob to find 230s _rel_tree: (internal) which tree to look further into 230s _rel_path: (internal) the path we are in so far 230s ''' 230s 230s NORMAL_BLOB_MODES = set([ 230s pygit2.GIT_FILEMODE_BLOB, 230s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 230s ]) 230s 230s _rel_tree = _rel_tree or top_tree_object 230s head, tail = posixpath.split(search_path) 230s 230s # A traditional functional split would put a single entry in head with tail 230s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 230s # to make it appear to have traditional semantics. 230s if not head: 230s head = tail 230s tail = None 230s 230s entry = _rel_tree[head] 230s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 230s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 230s 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/git_repository.py:68: AttributeError 230s ----------------------------- Captured stdout call ----------------------------- 230s dpkg-source: info: using source format '3.0 (quilt)' 230s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.0.orig.tar.gz 230s dpkg-source: info: building source-builder-package in source-builder-package_1.0-1.debian.tar.xz 230s dpkg-source: info: building source-builder-package in source-builder-package_1.0-1.dsc 230s ----------------------------- Captured stderr call ----------------------------- 230s dpkg-source: warning: missing information for output field Standards-Version 230s =============================== warnings summary =============================== 230s gitubuntu/__main__.py:7 230s /tmp/autopkgtest.zp0YHR/build.2Er/src/gitubuntu/__main__.py:7: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html 230s import pkg_resources 230s 230s ../../../../usr/lib/python3/dist-packages/pkg_resources/__init__.py:3154 230s /usr/lib/python3/dist-packages/pkg_resources/__init__.py:3154: DeprecationWarning: Deprecated call to `pkg_resources.declare_namespace('logilab')`. 230s Implementing implicit namespace packages (as specified in PEP 420) is preferred to `pkg_resources.declare_namespace`. See https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages 230s declare_namespace(pkg) 230s 230s -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html 230s 230s ---------- coverage: platform linux, python 3.12.7-final-0 ----------- 230s Name Stmts Miss Cover 230s --------------------------------------------------------------- 230s gitubuntu/__init__.py 0 0 100% 230s gitubuntu/__main__.py 103 94 9% 230s gitubuntu/build.py 185 131 29% 230s gitubuntu/cache.py 1 0 100% 230s gitubuntu/clone.py 70 54 23% 230s gitubuntu/dsc.py 65 16 75% 230s gitubuntu/exportorig.py 48 37 23% 230s gitubuntu/git_repository.py 1103 521 53% 230s gitubuntu/git_repository_test.py 316 40 87% 230s gitubuntu/importer.py 707 446 37% 230s gitubuntu/importer_service.py 215 22 90% 230s gitubuntu/importer_service_broker.py 60 49 18% 230s gitubuntu/importer_service_ipc.py 12 2 83% 230s gitubuntu/importer_service_poller.py 37 25 32% 230s gitubuntu/importer_service_test.py 147 0 100% 230s gitubuntu/importer_service_worker.py 87 64 26% 230s gitubuntu/importer_service_worker_test.py 18 0 100% 230s gitubuntu/importer_tag_test.py 47 20 57% 230s gitubuntu/importer_test.py 388 133 66% 230s gitubuntu/integration_test.py 67 26 61% 230s gitubuntu/logging.py 8 4 50% 230s gitubuntu/merge.py 219 192 12% 230s gitubuntu/patch_state.py 2 0 100% 230s gitubuntu/prepare_upload.py 86 3 97% 230s gitubuntu/prepare_upload_test.py 152 0 100% 230s gitubuntu/queue.py 174 148 15% 230s gitubuntu/remote.py 100 85 15% 230s gitubuntu/repo_builder.py 162 0 100% 230s gitubuntu/repo_builder_test.py 159 12 92% 230s gitubuntu/repo_comparator.py 32 25 22% 230s gitubuntu/rich_history.py 67 45 33% 230s gitubuntu/rich_history_test.py 53 31 42% 230s gitubuntu/run.py 72 12 83% 230s gitubuntu/scriptutils.py 11 0 100% 230s gitubuntu/source_builder.py 119 0 100% 230s gitubuntu/source_builder_test.py 105 18 83% 230s gitubuntu/source_information.py 339 133 61% 230s gitubuntu/source_information_test.py 78 3 96% 230s gitubuntu/spec.py 3 0 100% 230s gitubuntu/submit.py 103 86 17% 230s gitubuntu/tag.py 78 69 12% 230s gitubuntu/test_fixtures.py 29 5 83% 230s gitubuntu/test_util.py 5 0 100% 230s gitubuntu/version.py 1 0 100% 230s gitubuntu/versioning.py 124 16 87% 230s --------------------------------------------------------------- 230s TOTAL 5957 2567 57% 230s 230s =========================== short test summary info ============================ 230s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[0] 230s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[1] 230s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[2] 230s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[3] 230s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[4] 230s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob_not_found[tree1] 230s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob_not_found[tree2] 230s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob_not_found[tree3] 230s FAILED gitubuntu/git_repository_test.py::test_git_escape_dir_to_tree - Attrib... 230s FAILED gitubuntu/git_repository_test.py::test_determine_quilt_series_path[tree_data1-debian/patches/series] 230s FAILED gitubuntu/git_repository_test.py::test_determine_quilt_series_path[tree_data2-debian/patches/series] 230s FAILED gitubuntu/git_repository_test.py::test_determine_quilt_series_path[tree_data3-debian/patches/debian.series] 230s FAILED gitubuntu/git_repository_test.py::test_determine_quilt_series_path[tree_data4-debian/patches/debian.series] 230s FAILED gitubuntu/git_repository_test.py::test_quilt_env - AttributeError: mod... 230s FAILED gitubuntu/git_repository_test.py::test_repo_quilt_env - AttributeError... 230s FAILED gitubuntu/git_repository_test.py::test_repo_quilt_env_from_treeish_str 230s FAILED gitubuntu/git_repository_test.py::test_repo_find_ubuntu_merge[Common case-input_data0-pkg/import/1-1ubuntu1-pkg/import/2-1-pkg/import/1-1] 230s FAILED gitubuntu/git_repository_test.py::test_repo_find_ubuntu_merge[Ubuntu delta based on a NMU-input_data1-pkg/import/1-1.1ubuntu1-pkg/import/2-1-pkg/import/1-1.1] 230s FAILED gitubuntu/git_repository_test.py::test_repo_find_ubuntu_merge[Ubuntu upstream version head of Debian-input_data2-pkg/import/2-0ubuntu1-pkg/import/3-1-pkg/import/1-1] 230s FAILED gitubuntu/git_repository_test.py::test_commit_tree - AttributeError: m... 230s FAILED gitubuntu/git_repository_test.py::test_descendant_of[root-root-False] 230s FAILED gitubuntu/git_repository_test.py::test_descendant_of[child1-root-True] 230s FAILED gitubuntu/git_repository_test.py::test_descendant_of[root-child1-False] 230s FAILED gitubuntu/git_repository_test.py::test_descendant_of[grandchild1-root-True] 230s FAILED gitubuntu/git_repository_test.py::test_descendant_of[child1-child2-False] 230s FAILED gitubuntu/git_repository_test.py::test_descendant_of[root-disjoint-False] 230s FAILED gitubuntu/git_repository_test.py::test_create_tag - AttributeError: mo... 230s FAILED gitubuntu/git_repository_test.py::test_get_all_reimport_tags - Attribu... 230s FAILED gitubuntu/git_repository_test.py::test_get_head_info - AttributeError:... 230s FAILED gitubuntu/importer_tag_test.py::test_import_unapplied_spi_tags[input_repo0-expected_output_refs0-validation_repo_delta0-validation_repo_expected_identical_refs0-True] 230s FAILED gitubuntu/importer_tag_test.py::test_import_unapplied_spi_tags[input_repo1-expected_output_refs1-validation_repo_delta1-validation_repo_expected_identical_refs1-True] 230s FAILED gitubuntu/importer_tag_test.py::test_import_unapplied_spi_tags[input_repo2-expected_output_refs2-validation_repo_delta2-validation_repo_expected_identical_refs2-True] 230s FAILED gitubuntu/importer_tag_test.py::test_import_unapplied_spi_tags[input_repo3-expected_output_refs3-validation_repo_delta3-validation_repo_expected_identical_refs3-False] 230s FAILED gitubuntu/importer_tag_test.py::test_import_unapplied_spi_tags[input_repo4-expected_output_refs4-validation_repo_delta4-validation_repo_expected_identical_refs4-False] 230s FAILED gitubuntu/importer_tag_test.py::test_import_unapplied_spi_tags[input_repo5-expected_output_refs5-validation_repo_delta5-validation_repo_expected_identical_refs5-True] 230s FAILED gitubuntu/importer_tag_test.py::test_import_unapplied_spi_tags[input_repo6-expected_output_refs6-validation_repo_delta6-validation_repo_expected_identical_refs6-False] 230s FAILED gitubuntu/importer_tag_test.py::test_import_unapplied_spi_tags[input_repo7-expected_output_refs7-validation_repo_delta7-validation_repo_expected_identical_refs7-False] 230s FAILED gitubuntu/importer_tag_test.py::test_import_applied_spi_tags[input_repo0-validation_repo_delta0-validation_repo_expected_treewise_refs0-True] 230s FAILED gitubuntu/importer_tag_test.py::test_import_applied_spi_tags[input_repo2-validation_repo_delta2-validation_repo_expected_treewise_refs2-False] 230s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags[input_repo1-PatchState.UNAPPLIED-expected1] 230s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags[input_repo2-PatchState.UNAPPLIED-expected2] 230s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags[input_repo4-PatchState.APPLIED-expected4] 230s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags[input_repo5-PatchState.APPLIED-expected5] 230s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags_ordering - A... 230s FAILED gitubuntu/importer_test.py::test_create_import_tag[input_repo0-validation_repo_delta0-validation_repo_expected_identical_refs0] 230s FAILED gitubuntu/importer_test.py::test_create_import_tag[input_repo1-validation_repo_delta1-validation_repo_expected_identical_refs1] 230s FAILED gitubuntu/importer_test.py::test_create_import_tag[input_repo2-validation_repo_delta2-validation_repo_expected_identical_refs2] 230s FAILED gitubuntu/importer_test.py::test_create_import_tag_hash_stability_on_first_import 230s FAILED gitubuntu/importer_test.py::test_create_import_tag_hash_stability_on_reimport 230s FAILED gitubuntu/importer_test.py::test_create_applied_tag[input_repo0-validation_repo_delta0-validation_repo_expected_identical_refs0] 230s FAILED gitubuntu/importer_test.py::test_create_applied_tag[input_repo1-validation_repo_delta1-validation_repo_expected_identical_refs1] 230s FAILED gitubuntu/importer_test.py::test_create_applied_tag[input_repo2-validation_repo_delta2-validation_repo_expected_identical_refs2] 230s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo1-parent_overrides1-changelog_versions1-PatchState.UNAPPLIED-expected_refs1] 230s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo2-parent_overrides2-changelog_versions2-PatchState.UNAPPLIED-expected_refs2] 230s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo3-parent_overrides3-changelog_versions3-PatchState.UNAPPLIED-expected_refs3] 230s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo5-parent_overrides5-changelog_versions5-PatchState.APPLIED-expected_refs5] 230s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo6-parent_overrides6-changelog_versions6-PatchState.APPLIED-expected_refs6] 230s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo7-parent_overrides7-changelog_versions7-PatchState.APPLIED-expected_refs7] 230s FAILED gitubuntu/importer_test.py::test_validate_rich_history[input_repo0-published_spec0-True] 230s FAILED gitubuntu/importer_test.py::test_validate_rich_history[input_repo1-published_spec1-True] 230s FAILED gitubuntu/importer_test.py::test_validate_rich_history[input_repo2-published_spec2-RichHistoryTreeMismatch] 230s FAILED gitubuntu/importer_test.py::test_validate_rich_history[input_repo3-published_spec3-RichHistoryHasNoChangelogParentAncestor] 230s FAILED gitubuntu/importer_test.py::test_add_changelog_note_to_commit - Attrib... 230s FAILED gitubuntu/importer_test.py::test_add_changelog_note_to_commit_utf8 - A... 230s FAILED gitubuntu/importer_test.py::test_double_changelog_note_add_does_not_fail 230s FAILED gitubuntu/importer_test.py::test_create_import_note - AttributeError: ... 230s FAILED gitubuntu/importer_test.py::test_create_import_note_timestamp - Attrib... 230s FAILED gitubuntu/importer_test.py::test_import_creates_import_note - Attribut... 230s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_quilt_patches - ... 230s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parenting[input_repo0-changelog_versions0-validation_repo_delta0-validation_repo_expected_identical_refs0] 230s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parenting[input_repo1-changelog_versions1-validation_repo_delta1-validation_repo_expected_identical_refs1] 230s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parenting[input_repo2-changelog_versions2-validation_repo_delta2-validation_repo_expected_identical_refs2] 230s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parenting[input_repo3-changelog_versions3-validation_repo_delta3-validation_repo_expected_identical_refs3] 230s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parent_override 230s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parent_override_failure 230s FAILED gitubuntu/importer_test.py::test_import_applied_spi_parenting[input_repo0-expected_ancestor_commits0-expected_parent_commits0] 230s FAILED gitubuntu/importer_test.py::test_authorship_date[False-Fri, 2 Feb 1971 12:34:56 +0100-expected_result0] 230s FAILED gitubuntu/importer_test.py::test_authorship_date[True-Failday, 30 Feb 1971 99:99:99 +9999-expected_result1] 230s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file 230s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file_fetch_failure_retry 230s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file_missing_ref 230s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file_missing_commit 230s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file_not_a_commit 230s FAILED gitubuntu/integration_test.py::test_reconstruct_changelog - AttributeE... 230s FAILED gitubuntu/repo_builder_test.py::TestObjectCreation::testRepoBranchesTags 230s FAILED gitubuntu/repo_builder_test.py::TestObjectCreation::testRepoTagger - A... 230s FAILED gitubuntu/repo_builder_test.py::test_source_tree - AttributeError: mod... 230s FAILED gitubuntu/rich_history_test.py::test_preservation - AttributeError: mo... 230s FAILED gitubuntu/rich_history_test.py::test_preservation_multiple_parents - A... 230s FAILED gitubuntu/rich_history_test.py::test_preservation_no_parents - Attribu... 230s FAILED gitubuntu/rich_history_test.py::test_input_edge_cases[before_export0-before_import0] 230s FAILED gitubuntu/rich_history_test.py::test_input_edge_cases[before_export1-before_import1] 230s FAILED gitubuntu/rich_history_test.py::test_input_edge_cases[before_export2-before_import2] 230s FAILED gitubuntu/rich_history_test.py::test_preservation_fast_forwards - Attr... 230s FAILED gitubuntu/source_builder_test.py::test_source_create_with_version - At... 230s FAILED gitubuntu/source_builder_test.py::test_source_create_with_versions - A... 230s FAILED gitubuntu/source_builder_test.py::test_source_native_source_format[True-3.0 (native)\n] 230s FAILED gitubuntu/source_builder_test.py::test_source_native_source_format[False-3.0 (quilt)\n] 230s FAILED gitubuntu/source_builder_test.py::test_source_quilt_no_patches - Attri... 230s FAILED gitubuntu/source_builder_test.py::test_source_quilt_with_patches - Att... 230s FAILED gitubuntu/source_builder_test.py::test_source_quilt_with_patches_applied 230s FAILED gitubuntu/source_builder_test.py::test_source_version_native_default 230s FAILED gitubuntu/source_builder_test.py::test_source_version_non_native_default 230s FAILED gitubuntu/source_builder_test.py::test_source_version_native_specific 230s FAILED gitubuntu/source_builder_test.py::test_source_version_non_native_specific 230s ====== 105 failed, 348 passed, 3 skipped, 3 xfailed, 2 warnings in 51.30s ====== 230s pytest failed; self test will fail 230s autopkgtest [09:37:30]: test self-test: -----------------------] 231s autopkgtest [09:37:31]: test self-test: - - - - - - - - - - results - - - - - - - - - - 231s self-test FAIL non-zero exit status 1 231s autopkgtest [09:37:31]: @@@@@@@@@@@@@@@@@@@@ summary 231s self-test FAIL non-zero exit status 1 242s nova [W] Using flock in prodstack6-s390x 242s flock: timeout while waiting to get lock 242s Creating nova instance adt-plucky-s390x-git-ubuntu-20241126-093340-juju-7f2275-prod-proposed-migration-environment-15-74da48d6-3adf-462c-ba98-e5394166ce08 from image adt/ubuntu-plucky-s390x-server-20241119.img (UUID 0efe7a44-24e0-44d8-af6e-8997f14b87bd)...