0s autopkgtest [09:34:56]: starting date and time: 2024-12-03 09:34:56+0000 0s autopkgtest [09:34:56]: git checkout: be626eda Fix armhf LXD image generation for plucky 0s autopkgtest [09:34:56]: host juju-7f2275-prod-proposed-migration-environment-2; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work._nkvrbxd/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 builder-cpu2-ram4-disk20 --security-groups autopkgtest-juju-7f2275-prod-proposed-migration-environment-2@bos03-8.secgroup --name adt-plucky-amd64-git-ubuntu-20241203-093455-juju-7f2275-prod-proposed-migration-environment-2-6578e90b-454f-43cc-8196-81b1be451fab --image adt/ubuntu-plucky-amd64-server --keyname testbed-juju-7f2275-prod-proposed-migration-environment-2 --net-id=net_prod-proposed-migration-amd64 -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/ 687s autopkgtest [09:46:23]: testbed dpkg architecture: amd64 687s autopkgtest [09:46:23]: testbed apt version: 2.9.14ubuntu1 687s autopkgtest [09:46:23]: @@@@@@@@@@@@@@@@@@@@ test bed setup 688s autopkgtest [09:46:24]: testbed release detected to be: None 688s autopkgtest [09:46:24]: updating testbed package index (apt update) 689s Get:1 http://ftpmaster.internal/ubuntu plucky-proposed InRelease [73.9 kB] 689s Hit:2 http://ftpmaster.internal/ubuntu plucky InRelease 689s Hit:3 http://ftpmaster.internal/ubuntu plucky-updates InRelease 689s Hit:4 http://ftpmaster.internal/ubuntu plucky-security InRelease 689s Get:5 http://ftpmaster.internal/ubuntu plucky-proposed/universe Sources [781 kB] 689s Get:6 http://ftpmaster.internal/ubuntu plucky-proposed/main Sources [65.3 kB] 689s Get:7 http://ftpmaster.internal/ubuntu plucky-proposed/multiverse Sources [15.1 kB] 689s Get:8 http://ftpmaster.internal/ubuntu plucky-proposed/restricted Sources [9708 B] 689s Get:9 http://ftpmaster.internal/ubuntu plucky-proposed/main amd64 Packages [153 kB] 689s Get:10 http://ftpmaster.internal/ubuntu plucky-proposed/main i386 Packages [104 kB] 689s Get:11 http://ftpmaster.internal/ubuntu plucky-proposed/restricted i386 Packages [2572 B] 689s Get:12 http://ftpmaster.internal/ubuntu plucky-proposed/restricted amd64 Packages [40.6 kB] 689s Get:13 http://ftpmaster.internal/ubuntu plucky-proposed/universe i386 Packages [256 kB] 689s Get:14 http://ftpmaster.internal/ubuntu plucky-proposed/universe amd64 Packages [687 kB] 689s Get:15 http://ftpmaster.internal/ubuntu plucky-proposed/multiverse amd64 Packages [21.9 kB] 690s Get:16 http://ftpmaster.internal/ubuntu plucky-proposed/multiverse i386 Packages [6364 B] 690s Fetched 2217 kB in 1s (2280 kB/s) 691s Reading package lists... 691s Reading package lists... 692s Building dependency tree... 692s Reading state information... 692s Calculating upgrade... 692s The following packages will be upgraded: 692s gcc-14-base libatomic1 libgcc-s1 libstdc++6 692s 4 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 692s Need to get 928 kB of archives. 692s After this operation, 1024 B of additional disk space will be used. 692s Get:1 http://ftpmaster.internal/ubuntu plucky/main amd64 libatomic1 amd64 14.2.0-9ubuntu1 [10.3 kB] 692s Get:2 http://ftpmaster.internal/ubuntu plucky/main amd64 gcc-14-base amd64 14.2.0-9ubuntu1 [52.0 kB] 692s Get:3 http://ftpmaster.internal/ubuntu plucky/main amd64 libstdc++6 amd64 14.2.0-9ubuntu1 [788 kB] 693s Get:4 http://ftpmaster.internal/ubuntu plucky/main amd64 libgcc-s1 amd64 14.2.0-9ubuntu1 [78.4 kB] 693s Fetched 928 kB in 1s (1595 kB/s) 693s (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 ... 75952 files and directories currently installed.) 693s Preparing to unpack .../libatomic1_14.2.0-9ubuntu1_amd64.deb ... 693s Unpacking libatomic1:amd64 (14.2.0-9ubuntu1) over (14.2.0-8ubuntu1) ... 693s Preparing to unpack .../gcc-14-base_14.2.0-9ubuntu1_amd64.deb ... 693s Unpacking gcc-14-base:amd64 (14.2.0-9ubuntu1) over (14.2.0-8ubuntu1) ... 693s Setting up gcc-14-base:amd64 (14.2.0-9ubuntu1) ... 693s (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 ... 75952 files and directories currently installed.) 693s Preparing to unpack .../libstdc++6_14.2.0-9ubuntu1_amd64.deb ... 693s Unpacking libstdc++6:amd64 (14.2.0-9ubuntu1) over (14.2.0-8ubuntu1) ... 693s Setting up libstdc++6:amd64 (14.2.0-9ubuntu1) ... 693s (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 ... 75952 files and directories currently installed.) 693s Preparing to unpack .../libgcc-s1_14.2.0-9ubuntu1_amd64.deb ... 693s Unpacking libgcc-s1:amd64 (14.2.0-9ubuntu1) over (14.2.0-8ubuntu1) ... 694s Setting up libgcc-s1:amd64 (14.2.0-9ubuntu1) ... 694s Setting up libatomic1:amd64 (14.2.0-9ubuntu1) ... 694s Processing triggers for libc-bin (2.40-1ubuntu3) ... 694s Reading package lists... 694s Building dependency tree... 694s Reading state information... 694s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 694s autopkgtest [09:46:30]: upgrading testbed (apt dist-upgrade and autopurge) 694s Reading package lists... 695s Building dependency tree... 695s Reading state information... 695s Calculating upgrade...Starting pkgProblemResolver with broken count: 0 695s Starting 2 pkgProblemResolver with broken count: 0 695s Done 696s Entering ResolveByKeep 696s 696s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 696s Reading package lists... 696s Building dependency tree... 696s Reading state information... 697s Starting pkgProblemResolver with broken count: 0 697s Starting 2 pkgProblemResolver with broken count: 0 697s Done 697s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 700s autopkgtest [09:46:36]: testbed running kernel: Linux 6.11.0-8-generic #8-Ubuntu SMP PREEMPT_DYNAMIC Mon Sep 16 13:41:20 UTC 2024 700s autopkgtest [09:46:36]: @@@@@@@@@@@@@@@@@@@@ apt-source git-ubuntu 702s Get:1 http://ftpmaster.internal/ubuntu plucky/universe git-ubuntu 1.1-1 (dsc) [2280 B] 702s Get:2 http://ftpmaster.internal/ubuntu plucky/universe git-ubuntu 1.1-1 (tar) [179 kB] 702s Get:3 http://ftpmaster.internal/ubuntu plucky/universe git-ubuntu 1.1-1 (diff) [5776 B] 702s gpgv: Signature made Wed Jul 3 16:18:24 2024 UTC 702s gpgv: using RSA key A62D2CFBD50B9B5BF360D54B159EB5C4EFC8774C 702s gpgv: Can't check signature: No public key 702s dpkg-source: warning: cannot verify inline signature for ./git-ubuntu_1.1-1.dsc: no acceptable signature found 702s autopkgtest [09:46:38]: testing package git-ubuntu version 1.1-1 702s autopkgtest [09:46:38]: build not needed 702s autopkgtest [09:46:38]: test self-test: preparing testbed 703s Reading package lists... 703s Building dependency tree... 703s Reading state information... 703s Starting pkgProblemResolver with broken count: 0 703s Starting 2 pkgProblemResolver with broken count: 0 703s Done 704s The following NEW packages will be installed: 704s dctrl-tools debian-archive-keyring devscripts diffstat dput gettext git 704s git-buildpackage git-man git-ubuntu libb-hooks-op-check-perl 704s libclass-method-modifiers-perl libclass-xsaccessor-perl libclone-perl 704s libdevel-callchecker-perl libdynaloader-functions-perl libencode-locale-perl 704s liberror-perl libfile-dirlist-perl libfile-homedir-perl libfile-listing-perl 704s libfile-touch-perl libfile-which-perl libgit2-1.8 libgomp1 704s libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl 704s libhttp-cookies-perl libhttp-date-perl libhttp-message-perl 704s libhttp-negotiate-perl libhttp-parser2.9 libimport-into-perl libio-html-perl 704s libio-pty-perl libio-socket-ssl-perl libipc-run-perl libjs-jquery 704s libjs-jquery-hotkeys libjs-jquery-isonscreen libjs-jquery-metadata 704s libjs-jquery-tablesorter libjs-jquery-throttle-debounce libjs-sphinxdoc 704s libjs-underscore liblwp-mediatypes-perl liblwp-protocol-https-perl 704s libmodule-runtime-perl libmoo-perl libnet-http-perl libnet-ssleay-perl 704s libnorm1t64 libparams-classify-perl libpgm-5.3-0t64 libpython3.13-minimal 704s libpython3.13-stdlib librole-tiny-perl libsodium23 libsub-quote-perl 704s libsys-cpuaffinity-perl libtimedate-perl libtry-tiny-perl liburi-perl 704s libwww-perl libwww-robotrules-perl libxdelta2t64 libzmq5 patchutils pbzip2 704s perl-openssl-defaults pixz pristine-tar pylint python3-argcomplete 704s python3-astroid python3-cachetools python3-coverage python3-dateutil 704s python3-debian python3-debianbts python3-dill python3-distro-info 704s python3-gpg python3-importlib-metadata python3-iniconfig python3-isort 704s python3-jaraco.classes python3-jeepney python3-keyring python3-keyrings.alt 704s python3-launchpadlib-desktop python3-logilab-common python3-mccabe 704s python3-mypy-extensions python3-packaging python3-platformdirs 704s python3-pluggy python3-py python3-pycryptodome python3-pygit2 python3-pytest 704s python3-pytest-cov python3-secretstorage python3-tenacity python3-tomlkit 704s python3-ubuntutools python3-xdg python3-zmq python3.13 python3.13-minimal 704s quilt ubuntu-dev-tools wdiff xdelta xdelta3 704s 0 upgraded, 116 newly installed, 0 to remove and 0 not upgraded. 704s Need to get 24.1 MB of archives. 704s After this operation, 100 MB of additional disk space will be used. 704s Get:1 http://ftpmaster.internal/ubuntu plucky/main amd64 libpython3.13-minimal amd64 3.13.0-2 [879 kB] 704s Get:2 http://ftpmaster.internal/ubuntu plucky/main amd64 python3.13-minimal amd64 3.13.0-2 [2188 kB] 704s Get:3 http://ftpmaster.internal/ubuntu plucky/main amd64 libjs-jquery all 3.6.1+dfsg+~3.5.14-1 [328 kB] 705s Get:4 http://ftpmaster.internal/ubuntu plucky/universe amd64 libjs-jquery-hotkeys all 0~20130707+git2d51e3a9+dfsg-2.1 [11.5 kB] 705s Get:5 http://ftpmaster.internal/ubuntu plucky/main amd64 python3-distro-info all 1.12 [7754 B] 705s Get:6 http://ftpmaster.internal/ubuntu plucky/main amd64 dctrl-tools amd64 2.24-3build3 [106 kB] 705s Get:7 http://ftpmaster.internal/ubuntu plucky/universe amd64 debian-archive-keyring all 2023.4ubuntu1 [168 kB] 705s Get:8 http://ftpmaster.internal/ubuntu plucky/main amd64 libfile-dirlist-perl all 0.05-3 [7286 B] 705s Get:9 http://ftpmaster.internal/ubuntu plucky/main amd64 libfile-which-perl all 1.27-2 [12.5 kB] 705s Get:10 http://ftpmaster.internal/ubuntu plucky/main amd64 libfile-homedir-perl all 1.006-2 [37.0 kB] 705s Get:11 http://ftpmaster.internal/ubuntu plucky/main amd64 libfile-touch-perl all 0.12-2 [7498 B] 705s Get:12 http://ftpmaster.internal/ubuntu plucky/main amd64 libio-pty-perl amd64 1:1.20-1build3 [31.4 kB] 705s Get:13 http://ftpmaster.internal/ubuntu plucky/main amd64 libipc-run-perl all 20231003.0-2 [91.5 kB] 705s Get:14 http://ftpmaster.internal/ubuntu plucky/main amd64 libclass-method-modifiers-perl all 2.15-1 [16.1 kB] 705s Get:15 http://ftpmaster.internal/ubuntu plucky/main amd64 libclass-xsaccessor-perl amd64 1.19-4build5 [33.0 kB] 705s Get:16 http://ftpmaster.internal/ubuntu plucky/main amd64 libb-hooks-op-check-perl amd64 0.22-3build2 [9624 B] 705s Get:17 http://ftpmaster.internal/ubuntu plucky/main amd64 libdynaloader-functions-perl all 0.004-1 [11.4 kB] 705s Get:18 http://ftpmaster.internal/ubuntu plucky/main amd64 libdevel-callchecker-perl amd64 0.009-1build1 [14.2 kB] 705s Get:19 http://ftpmaster.internal/ubuntu plucky/main amd64 libparams-classify-perl amd64 0.015-2build6 [20.1 kB] 705s Get:20 http://ftpmaster.internal/ubuntu plucky/main amd64 libmodule-runtime-perl all 0.016-2 [16.4 kB] 705s Get:21 http://ftpmaster.internal/ubuntu plucky/main amd64 libimport-into-perl all 1.002005-2 [10.7 kB] 705s Get:22 http://ftpmaster.internal/ubuntu plucky/main amd64 librole-tiny-perl all 2.002004-1 [16.3 kB] 705s Get:23 http://ftpmaster.internal/ubuntu plucky/main amd64 libsub-quote-perl all 2.006008-1ubuntu1 [20.7 kB] 705s Get:24 http://ftpmaster.internal/ubuntu plucky/main amd64 libmoo-perl all 2.005005-1 [47.4 kB] 705s Get:25 http://ftpmaster.internal/ubuntu plucky/main amd64 libencode-locale-perl all 1.05-3 [11.6 kB] 705s Get:26 http://ftpmaster.internal/ubuntu plucky/main amd64 libtimedate-perl all 2.3300-2 [34.0 kB] 705s Get:27 http://ftpmaster.internal/ubuntu plucky/main amd64 libhttp-date-perl all 6.06-1 [10.2 kB] 705s Get:28 http://ftpmaster.internal/ubuntu plucky/main amd64 libfile-listing-perl all 6.16-1 [11.3 kB] 705s Get:29 http://ftpmaster.internal/ubuntu plucky/main amd64 libhtml-tagset-perl all 3.24-1 [14.1 kB] 705s Get:30 http://ftpmaster.internal/ubuntu plucky/main amd64 liburi-perl all 5.30-1 [94.4 kB] 705s Get:31 http://ftpmaster.internal/ubuntu plucky/main amd64 libhtml-parser-perl amd64 3.83-1build1 [86.2 kB] 705s Get:32 http://ftpmaster.internal/ubuntu plucky/main amd64 libhtml-tree-perl all 5.07-3 [200 kB] 705s Get:33 http://ftpmaster.internal/ubuntu plucky/main amd64 libclone-perl amd64 0.47-1 [10.7 kB] 705s Get:34 http://ftpmaster.internal/ubuntu plucky/main amd64 libio-html-perl all 1.004-3 [15.9 kB] 705s Get:35 http://ftpmaster.internal/ubuntu plucky/main amd64 liblwp-mediatypes-perl all 6.04-2 [20.1 kB] 705s Get:36 http://ftpmaster.internal/ubuntu plucky/main amd64 libhttp-message-perl all 7.00-2ubuntu1 [75.9 kB] 705s Get:37 http://ftpmaster.internal/ubuntu plucky/main amd64 libhttp-cookies-perl all 6.11-1 [18.2 kB] 705s Get:38 http://ftpmaster.internal/ubuntu plucky/main amd64 libhttp-negotiate-perl all 6.01-2 [12.4 kB] 705s Get:39 http://ftpmaster.internal/ubuntu plucky/main amd64 perl-openssl-defaults amd64 7build3 [6626 B] 705s Get:40 http://ftpmaster.internal/ubuntu plucky/main amd64 libnet-ssleay-perl amd64 1.94-2 [317 kB] 705s Get:41 http://ftpmaster.internal/ubuntu plucky/main amd64 libio-socket-ssl-perl all 2.089-1 [200 kB] 705s Get:42 http://ftpmaster.internal/ubuntu plucky/main amd64 libnet-http-perl all 6.23-1 [22.3 kB] 705s Get:43 http://ftpmaster.internal/ubuntu plucky/main amd64 liblwp-protocol-https-perl all 6.14-1 [9040 B] 705s Get:44 http://ftpmaster.internal/ubuntu plucky/main amd64 libtry-tiny-perl all 0.32-1 [21.2 kB] 705s Get:45 http://ftpmaster.internal/ubuntu plucky/main amd64 libwww-robotrules-perl all 6.02-1 [12.6 kB] 705s Get:46 http://ftpmaster.internal/ubuntu plucky/main amd64 libwww-perl all 6.77-1 [138 kB] 705s Get:47 http://ftpmaster.internal/ubuntu plucky/main amd64 patchutils amd64 0.4.2-1build3 [77.0 kB] 705s Get:48 http://ftpmaster.internal/ubuntu plucky/main amd64 wdiff amd64 1.2.2-6build1 [29.1 kB] 705s Get:49 http://ftpmaster.internal/ubuntu plucky/main amd64 devscripts all 2.24.5 [1081 kB] 705s Get:50 http://ftpmaster.internal/ubuntu plucky/main amd64 diffstat amd64 1.67-1 [33.1 kB] 705s Get:51 http://ftpmaster.internal/ubuntu plucky/main amd64 python3-debian all 0.1.49ubuntu3 [116 kB] 705s Get:52 http://ftpmaster.internal/ubuntu plucky/main amd64 python3-gpg amd64 1.24.0-2ubuntu1 [275 kB] 705s Get:53 http://ftpmaster.internal/ubuntu plucky/main amd64 python3-xdg all 0.28-2 [38.3 kB] 705s Get:54 http://ftpmaster.internal/ubuntu plucky/main amd64 dput all 1.2.4ubuntu1 [49.1 kB] 705s Get:55 http://ftpmaster.internal/ubuntu plucky/main amd64 libgomp1 amd64 14.2.0-9ubuntu1 [148 kB] 705s Get:56 http://ftpmaster.internal/ubuntu plucky/main amd64 gettext amd64 0.22.5-2 [948 kB] 705s Get:57 http://ftpmaster.internal/ubuntu plucky/main amd64 liberror-perl all 0.17029-2 [25.6 kB] 705s Get:58 http://ftpmaster.internal/ubuntu plucky/main amd64 git-man all 1:2.45.2-1.2ubuntu1 [1122 kB] 705s Get:59 http://ftpmaster.internal/ubuntu plucky/main amd64 git amd64 1:2.45.2-1.2ubuntu1 [4634 kB] 705s Get:60 http://ftpmaster.internal/ubuntu plucky/main amd64 python3-dateutil all 2.9.0-3 [80.2 kB] 705s Get:61 http://ftpmaster.internal/ubuntu plucky/main amd64 python3-importlib-metadata all 8.5.0-1 [20.7 kB] 705s Get:62 http://ftpmaster.internal/ubuntu plucky/universe amd64 git-buildpackage all 0.9.35 [677 kB] 706s Get:63 http://ftpmaster.internal/ubuntu plucky/universe amd64 libsys-cpuaffinity-perl amd64 1.13~03-2build4 [31.9 kB] 706s Get:64 http://ftpmaster.internal/ubuntu plucky/universe amd64 pbzip2 amd64 1.1.13-1build1 [40.0 kB] 706s Get:65 http://ftpmaster.internal/ubuntu plucky/universe amd64 pixz amd64 1.0.7-3 [21.8 kB] 706s Get:66 http://ftpmaster.internal/ubuntu plucky/universe amd64 libxdelta2t64 amd64 1.1.3-10.7 [50.9 kB] 706s Get:67 http://ftpmaster.internal/ubuntu plucky/universe amd64 xdelta amd64 1.1.3-10.7 [25.2 kB] 706s Get:68 http://ftpmaster.internal/ubuntu plucky/universe amd64 xdelta3 amd64 3.0.11-dfsg-1.2 [73.9 kB] 706s Get:69 http://ftpmaster.internal/ubuntu plucky/universe amd64 pristine-tar amd64 1.50+nmu2build1 [117 kB] 706s Get:70 http://ftpmaster.internal/ubuntu plucky/universe amd64 quilt all 0.68-1 [439 kB] 706s Get:71 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-debianbts all 4.1.1 [12.8 kB] 706s Get:72 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-jeepney all 0.8.0-4 [33.1 kB] 706s Get:73 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-secretstorage all 3.3.3-3 [13.7 kB] 706s Get:74 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-jaraco.classes all 3.4.0-1 [7664 B] 706s Get:75 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-keyring all 25.4.1-1 [40.5 kB] 706s Get:76 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-launchpadlib-desktop all 2.0.0-1 [1778 B] 706s Get:77 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-ubuntutools all 0.203 [67.4 kB] 706s Get:78 http://ftpmaster.internal/ubuntu plucky/universe amd64 ubuntu-dev-tools all 0.203 [93.2 kB] 706s Get:79 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-astroid all 3.3.5-1 [174 kB] 706s Get:80 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-isort all 5.13.2-2 [59.3 kB] 706s Get:81 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-mypy-extensions all 1.0.0-1 [6148 B] 706s Get:82 http://ftpmaster.internal/ubuntu plucky/main amd64 libjs-underscore all 1.13.4~dfsg+~1.11.4-3 [118 kB] 706s Get:83 http://ftpmaster.internal/ubuntu plucky/main amd64 libjs-sphinxdoc all 7.4.7-4 [158 kB] 706s Get:84 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-logilab-common all 2.0.0-1 [281 kB] 706s Get:85 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-dill all 0.3.9-1 [84.5 kB] 706s Get:86 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-mccabe all 0.7.0-1 [8678 B] 706s Get:87 http://ftpmaster.internal/ubuntu plucky/main amd64 python3-platformdirs all 4.3.6-1 [16.8 kB] 706s Get:88 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-tomlkit all 0.13.2-1 [37.6 kB] 706s Get:89 http://ftpmaster.internal/ubuntu plucky/universe amd64 pylint all 3.3.1-2 [345 kB] 706s Get:90 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-argcomplete all 3.5.1-1ubuntu1 [35.6 kB] 706s Get:91 http://ftpmaster.internal/ubuntu plucky/main amd64 python3-cachetools all 5.3.3-1 [10.3 kB] 706s Get:92 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-pycryptodome amd64 3.20.0+dfsg-3build1 [1113 kB] 706s Get:93 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-keyrings.alt all 5.0.2-1 [16.6 kB] 706s Get:94 http://ftpmaster.internal/ubuntu plucky/main amd64 libhttp-parser2.9 amd64 2.9.4-6build1 [22.3 kB] 706s Get:95 http://ftpmaster.internal/ubuntu plucky-proposed/main amd64 libgit2-1.8 amd64 1.8.4+ds-1ubuntu1 [654 kB] 706s Get:96 http://ftpmaster.internal/ubuntu plucky-proposed/universe amd64 python3-pygit2 amd64 1.16.0-2 [183 kB] 706s Get:97 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-iniconfig all 1.1.1-2 [6024 B] 706s Get:98 http://ftpmaster.internal/ubuntu plucky/main amd64 python3-packaging all 24.2-1 [51.5 kB] 706s Get:99 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-pluggy all 1.5.0-1 [21.0 kB] 706s Get:100 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-pytest all 8.3.3-1 [251 kB] 706s Get:101 http://ftpmaster.internal/ubuntu plucky/main amd64 libpython3.13-stdlib amd64 3.13.0-2 [2107 kB] 706s Get:102 http://ftpmaster.internal/ubuntu plucky/main amd64 python3.13 amd64 3.13.0-2 [719 kB] 707s Get:103 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-coverage amd64 7.4.4+dfsg1-0ubuntu3 [150 kB] 707s Get:104 http://ftpmaster.internal/ubuntu plucky/universe amd64 libjs-jquery-isonscreen all 1.2.0-1.1 [3244 B] 707s Get:105 http://ftpmaster.internal/ubuntu plucky/universe amd64 libjs-jquery-metadata all 12-4 [6582 B] 707s Get:106 http://ftpmaster.internal/ubuntu plucky/universe amd64 libjs-jquery-tablesorter all 1:2.31.3+dfsg1-4 [192 kB] 707s Get:107 http://ftpmaster.internal/ubuntu plucky/universe amd64 libjs-jquery-throttle-debounce all 1.1+dfsg.1-2 [12.5 kB] 707s Get:108 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-pytest-cov all 5.0.0-1 [21.3 kB] 707s Get:109 http://ftpmaster.internal/ubuntu plucky/main amd64 python3-tenacity all 8.5.0-0ubuntu1 [17.0 kB] 707s Get:110 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-py all 1.11.0-2 [72.7 kB] 707s Get:111 http://ftpmaster.internal/ubuntu plucky/universe amd64 libnorm1t64 amd64 1.5.9+dfsg-3.1build1 [154 kB] 707s Get:112 http://ftpmaster.internal/ubuntu plucky/universe amd64 libpgm-5.3-0t64 amd64 5.3.128~dfsg-2.1build1 [167 kB] 707s Get:113 http://ftpmaster.internal/ubuntu plucky/main amd64 libsodium23 amd64 1.0.18-1build3 [161 kB] 707s Get:114 http://ftpmaster.internal/ubuntu plucky/universe amd64 libzmq5 amd64 4.3.5-1build2 [260 kB] 707s Get:115 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-zmq amd64 24.0.1-5build2 [406 kB] 707s Get:116 http://ftpmaster.internal/ubuntu plucky/universe amd64 git-ubuntu all 1.1-1 [152 kB] 707s Fetched 24.1 MB in 3s (7512 kB/s) 707s Selecting previously unselected package libpython3.13-minimal:amd64. 707s (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 ... 75952 files and directories currently installed.) 707s Preparing to unpack .../000-libpython3.13-minimal_3.13.0-2_amd64.deb ... 707s Unpacking libpython3.13-minimal:amd64 (3.13.0-2) ... 707s Selecting previously unselected package python3.13-minimal. 707s Preparing to unpack .../001-python3.13-minimal_3.13.0-2_amd64.deb ... 707s Unpacking python3.13-minimal (3.13.0-2) ... 707s Selecting previously unselected package libjs-jquery. 708s Preparing to unpack .../002-libjs-jquery_3.6.1+dfsg+~3.5.14-1_all.deb ... 708s Unpacking libjs-jquery (3.6.1+dfsg+~3.5.14-1) ... 708s Selecting previously unselected package libjs-jquery-hotkeys. 708s Preparing to unpack .../003-libjs-jquery-hotkeys_0~20130707+git2d51e3a9+dfsg-2.1_all.deb ... 708s Unpacking libjs-jquery-hotkeys (0~20130707+git2d51e3a9+dfsg-2.1) ... 708s Selecting previously unselected package python3-distro-info. 708s Preparing to unpack .../004-python3-distro-info_1.12_all.deb ... 708s Unpacking python3-distro-info (1.12) ... 708s Selecting previously unselected package dctrl-tools. 708s Preparing to unpack .../005-dctrl-tools_2.24-3build3_amd64.deb ... 708s Unpacking dctrl-tools (2.24-3build3) ... 708s Selecting previously unselected package debian-archive-keyring. 708s Preparing to unpack .../006-debian-archive-keyring_2023.4ubuntu1_all.deb ... 708s Unpacking debian-archive-keyring (2023.4ubuntu1) ... 708s Selecting previously unselected package libfile-dirlist-perl. 708s Preparing to unpack .../007-libfile-dirlist-perl_0.05-3_all.deb ... 708s Unpacking libfile-dirlist-perl (0.05-3) ... 708s Selecting previously unselected package libfile-which-perl. 708s Preparing to unpack .../008-libfile-which-perl_1.27-2_all.deb ... 708s Unpacking libfile-which-perl (1.27-2) ... 708s Selecting previously unselected package libfile-homedir-perl. 708s Preparing to unpack .../009-libfile-homedir-perl_1.006-2_all.deb ... 708s Unpacking libfile-homedir-perl (1.006-2) ... 708s Selecting previously unselected package libfile-touch-perl. 708s Preparing to unpack .../010-libfile-touch-perl_0.12-2_all.deb ... 708s Unpacking libfile-touch-perl (0.12-2) ... 708s Selecting previously unselected package libio-pty-perl. 708s Preparing to unpack .../011-libio-pty-perl_1%3a1.20-1build3_amd64.deb ... 708s Unpacking libio-pty-perl (1:1.20-1build3) ... 708s Selecting previously unselected package libipc-run-perl. 708s Preparing to unpack .../012-libipc-run-perl_20231003.0-2_all.deb ... 708s Unpacking libipc-run-perl (20231003.0-2) ... 708s Selecting previously unselected package libclass-method-modifiers-perl. 708s Preparing to unpack .../013-libclass-method-modifiers-perl_2.15-1_all.deb ... 708s Unpacking libclass-method-modifiers-perl (2.15-1) ... 708s Selecting previously unselected package libclass-xsaccessor-perl. 708s Preparing to unpack .../014-libclass-xsaccessor-perl_1.19-4build5_amd64.deb ... 708s Unpacking libclass-xsaccessor-perl (1.19-4build5) ... 708s Selecting previously unselected package libb-hooks-op-check-perl:amd64. 708s Preparing to unpack .../015-libb-hooks-op-check-perl_0.22-3build2_amd64.deb ... 708s Unpacking libb-hooks-op-check-perl:amd64 (0.22-3build2) ... 708s Selecting previously unselected package libdynaloader-functions-perl. 708s Preparing to unpack .../016-libdynaloader-functions-perl_0.004-1_all.deb ... 708s Unpacking libdynaloader-functions-perl (0.004-1) ... 708s Selecting previously unselected package libdevel-callchecker-perl:amd64. 708s Preparing to unpack .../017-libdevel-callchecker-perl_0.009-1build1_amd64.deb ... 708s Unpacking libdevel-callchecker-perl:amd64 (0.009-1build1) ... 708s Selecting previously unselected package libparams-classify-perl:amd64. 708s Preparing to unpack .../018-libparams-classify-perl_0.015-2build6_amd64.deb ... 708s Unpacking libparams-classify-perl:amd64 (0.015-2build6) ... 708s Selecting previously unselected package libmodule-runtime-perl. 708s Preparing to unpack .../019-libmodule-runtime-perl_0.016-2_all.deb ... 708s Unpacking libmodule-runtime-perl (0.016-2) ... 708s Selecting previously unselected package libimport-into-perl. 708s Preparing to unpack .../020-libimport-into-perl_1.002005-2_all.deb ... 708s Unpacking libimport-into-perl (1.002005-2) ... 708s Selecting previously unselected package librole-tiny-perl. 708s Preparing to unpack .../021-librole-tiny-perl_2.002004-1_all.deb ... 708s Unpacking librole-tiny-perl (2.002004-1) ... 708s Selecting previously unselected package libsub-quote-perl. 708s Preparing to unpack .../022-libsub-quote-perl_2.006008-1ubuntu1_all.deb ... 708s Unpacking libsub-quote-perl (2.006008-1ubuntu1) ... 708s Selecting previously unselected package libmoo-perl. 708s Preparing to unpack .../023-libmoo-perl_2.005005-1_all.deb ... 708s Unpacking libmoo-perl (2.005005-1) ... 708s Selecting previously unselected package libencode-locale-perl. 708s Preparing to unpack .../024-libencode-locale-perl_1.05-3_all.deb ... 708s Unpacking libencode-locale-perl (1.05-3) ... 708s Selecting previously unselected package libtimedate-perl. 708s Preparing to unpack .../025-libtimedate-perl_2.3300-2_all.deb ... 708s Unpacking libtimedate-perl (2.3300-2) ... 708s Selecting previously unselected package libhttp-date-perl. 708s Preparing to unpack .../026-libhttp-date-perl_6.06-1_all.deb ... 708s Unpacking libhttp-date-perl (6.06-1) ... 708s Selecting previously unselected package libfile-listing-perl. 708s Preparing to unpack .../027-libfile-listing-perl_6.16-1_all.deb ... 708s Unpacking libfile-listing-perl (6.16-1) ... 708s Selecting previously unselected package libhtml-tagset-perl. 708s Preparing to unpack .../028-libhtml-tagset-perl_3.24-1_all.deb ... 708s Unpacking libhtml-tagset-perl (3.24-1) ... 708s Selecting previously unselected package liburi-perl. 708s Preparing to unpack .../029-liburi-perl_5.30-1_all.deb ... 708s Unpacking liburi-perl (5.30-1) ... 708s Selecting previously unselected package libhtml-parser-perl:amd64. 708s Preparing to unpack .../030-libhtml-parser-perl_3.83-1build1_amd64.deb ... 708s Unpacking libhtml-parser-perl:amd64 (3.83-1build1) ... 708s Selecting previously unselected package libhtml-tree-perl. 708s Preparing to unpack .../031-libhtml-tree-perl_5.07-3_all.deb ... 708s Unpacking libhtml-tree-perl (5.07-3) ... 708s Selecting previously unselected package libclone-perl:amd64. 708s Preparing to unpack .../032-libclone-perl_0.47-1_amd64.deb ... 708s Unpacking libclone-perl:amd64 (0.47-1) ... 708s Selecting previously unselected package libio-html-perl. 708s Preparing to unpack .../033-libio-html-perl_1.004-3_all.deb ... 708s Unpacking libio-html-perl (1.004-3) ... 708s Selecting previously unselected package liblwp-mediatypes-perl. 708s Preparing to unpack .../034-liblwp-mediatypes-perl_6.04-2_all.deb ... 708s Unpacking liblwp-mediatypes-perl (6.04-2) ... 709s Selecting previously unselected package libhttp-message-perl. 709s Preparing to unpack .../035-libhttp-message-perl_7.00-2ubuntu1_all.deb ... 709s Unpacking libhttp-message-perl (7.00-2ubuntu1) ... 709s Selecting previously unselected package libhttp-cookies-perl. 709s Preparing to unpack .../036-libhttp-cookies-perl_6.11-1_all.deb ... 709s Unpacking libhttp-cookies-perl (6.11-1) ... 709s Selecting previously unselected package libhttp-negotiate-perl. 709s Preparing to unpack .../037-libhttp-negotiate-perl_6.01-2_all.deb ... 709s Unpacking libhttp-negotiate-perl (6.01-2) ... 709s Selecting previously unselected package perl-openssl-defaults:amd64. 709s Preparing to unpack .../038-perl-openssl-defaults_7build3_amd64.deb ... 709s Unpacking perl-openssl-defaults:amd64 (7build3) ... 709s Selecting previously unselected package libnet-ssleay-perl:amd64. 709s Preparing to unpack .../039-libnet-ssleay-perl_1.94-2_amd64.deb ... 709s Unpacking libnet-ssleay-perl:amd64 (1.94-2) ... 709s Selecting previously unselected package libio-socket-ssl-perl. 709s Preparing to unpack .../040-libio-socket-ssl-perl_2.089-1_all.deb ... 709s Unpacking libio-socket-ssl-perl (2.089-1) ... 709s Selecting previously unselected package libnet-http-perl. 709s Preparing to unpack .../041-libnet-http-perl_6.23-1_all.deb ... 709s Unpacking libnet-http-perl (6.23-1) ... 709s Selecting previously unselected package liblwp-protocol-https-perl. 709s Preparing to unpack .../042-liblwp-protocol-https-perl_6.14-1_all.deb ... 709s Unpacking liblwp-protocol-https-perl (6.14-1) ... 709s Selecting previously unselected package libtry-tiny-perl. 709s Preparing to unpack .../043-libtry-tiny-perl_0.32-1_all.deb ... 709s Unpacking libtry-tiny-perl (0.32-1) ... 709s Selecting previously unselected package libwww-robotrules-perl. 709s Preparing to unpack .../044-libwww-robotrules-perl_6.02-1_all.deb ... 709s Unpacking libwww-robotrules-perl (6.02-1) ... 709s Selecting previously unselected package libwww-perl. 709s Preparing to unpack .../045-libwww-perl_6.77-1_all.deb ... 709s Unpacking libwww-perl (6.77-1) ... 709s Selecting previously unselected package patchutils. 709s Preparing to unpack .../046-patchutils_0.4.2-1build3_amd64.deb ... 709s Unpacking patchutils (0.4.2-1build3) ... 709s Selecting previously unselected package wdiff. 709s Preparing to unpack .../047-wdiff_1.2.2-6build1_amd64.deb ... 709s Unpacking wdiff (1.2.2-6build1) ... 709s Selecting previously unselected package devscripts. 709s Preparing to unpack .../048-devscripts_2.24.5_all.deb ... 709s Unpacking devscripts (2.24.5) ... 709s Selecting previously unselected package diffstat. 709s Preparing to unpack .../049-diffstat_1.67-1_amd64.deb ... 709s Unpacking diffstat (1.67-1) ... 709s Selecting previously unselected package python3-debian. 709s Preparing to unpack .../050-python3-debian_0.1.49ubuntu3_all.deb ... 709s Unpacking python3-debian (0.1.49ubuntu3) ... 709s Selecting previously unselected package python3-gpg. 709s Preparing to unpack .../051-python3-gpg_1.24.0-2ubuntu1_amd64.deb ... 709s Unpacking python3-gpg (1.24.0-2ubuntu1) ... 709s Selecting previously unselected package python3-xdg. 709s Preparing to unpack .../052-python3-xdg_0.28-2_all.deb ... 709s Unpacking python3-xdg (0.28-2) ... 709s Selecting previously unselected package dput. 709s Preparing to unpack .../053-dput_1.2.4ubuntu1_all.deb ... 709s Unpacking dput (1.2.4ubuntu1) ... 709s Selecting previously unselected package libgomp1:amd64. 709s Preparing to unpack .../054-libgomp1_14.2.0-9ubuntu1_amd64.deb ... 709s Unpacking libgomp1:amd64 (14.2.0-9ubuntu1) ... 709s Selecting previously unselected package gettext. 709s Preparing to unpack .../055-gettext_0.22.5-2_amd64.deb ... 709s Unpacking gettext (0.22.5-2) ... 709s Selecting previously unselected package liberror-perl. 709s Preparing to unpack .../056-liberror-perl_0.17029-2_all.deb ... 709s Unpacking liberror-perl (0.17029-2) ... 709s Selecting previously unselected package git-man. 709s Preparing to unpack .../057-git-man_1%3a2.45.2-1.2ubuntu1_all.deb ... 709s Unpacking git-man (1:2.45.2-1.2ubuntu1) ... 709s Selecting previously unselected package git. 709s Preparing to unpack .../058-git_1%3a2.45.2-1.2ubuntu1_amd64.deb ... 709s Unpacking git (1:2.45.2-1.2ubuntu1) ... 710s Selecting previously unselected package python3-dateutil. 710s Preparing to unpack .../059-python3-dateutil_2.9.0-3_all.deb ... 710s Unpacking python3-dateutil (2.9.0-3) ... 710s Selecting previously unselected package python3-importlib-metadata. 710s Preparing to unpack .../060-python3-importlib-metadata_8.5.0-1_all.deb ... 710s Unpacking python3-importlib-metadata (8.5.0-1) ... 710s Selecting previously unselected package git-buildpackage. 710s Preparing to unpack .../061-git-buildpackage_0.9.35_all.deb ... 710s Unpacking git-buildpackage (0.9.35) ... 710s Selecting previously unselected package libsys-cpuaffinity-perl. 710s Preparing to unpack .../062-libsys-cpuaffinity-perl_1.13~03-2build4_amd64.deb ... 710s Unpacking libsys-cpuaffinity-perl (1.13~03-2build4) ... 710s Selecting previously unselected package pbzip2. 710s Preparing to unpack .../063-pbzip2_1.1.13-1build1_amd64.deb ... 710s Unpacking pbzip2 (1.1.13-1build1) ... 710s Selecting previously unselected package pixz. 710s Preparing to unpack .../064-pixz_1.0.7-3_amd64.deb ... 710s Unpacking pixz (1.0.7-3) ... 710s Selecting previously unselected package libxdelta2t64:amd64. 710s Preparing to unpack .../065-libxdelta2t64_1.1.3-10.7_amd64.deb ... 710s Unpacking libxdelta2t64:amd64 (1.1.3-10.7) ... 710s Selecting previously unselected package xdelta. 710s Preparing to unpack .../066-xdelta_1.1.3-10.7_amd64.deb ... 710s Unpacking xdelta (1.1.3-10.7) ... 710s Selecting previously unselected package xdelta3. 710s Preparing to unpack .../067-xdelta3_3.0.11-dfsg-1.2_amd64.deb ... 710s Unpacking xdelta3 (3.0.11-dfsg-1.2) ... 710s Selecting previously unselected package pristine-tar. 710s Preparing to unpack .../068-pristine-tar_1.50+nmu2build1_amd64.deb ... 710s Unpacking pristine-tar (1.50+nmu2build1) ... 710s Selecting previously unselected package quilt. 710s Preparing to unpack .../069-quilt_0.68-1_all.deb ... 710s Unpacking quilt (0.68-1) ... 710s Selecting previously unselected package python3-debianbts. 710s Preparing to unpack .../070-python3-debianbts_4.1.1_all.deb ... 710s Unpacking python3-debianbts (4.1.1) ... 710s Selecting previously unselected package python3-jeepney. 710s Preparing to unpack .../071-python3-jeepney_0.8.0-4_all.deb ... 710s Unpacking python3-jeepney (0.8.0-4) ... 710s Selecting previously unselected package python3-secretstorage. 710s Preparing to unpack .../072-python3-secretstorage_3.3.3-3_all.deb ... 710s Unpacking python3-secretstorage (3.3.3-3) ... 710s Selecting previously unselected package python3-jaraco.classes. 710s Preparing to unpack .../073-python3-jaraco.classes_3.4.0-1_all.deb ... 710s Unpacking python3-jaraco.classes (3.4.0-1) ... 710s Selecting previously unselected package python3-keyring. 710s Preparing to unpack .../074-python3-keyring_25.4.1-1_all.deb ... 710s Unpacking python3-keyring (25.4.1-1) ... 710s Selecting previously unselected package python3-launchpadlib-desktop. 710s Preparing to unpack .../075-python3-launchpadlib-desktop_2.0.0-1_all.deb ... 710s Unpacking python3-launchpadlib-desktop (2.0.0-1) ... 710s Selecting previously unselected package python3-ubuntutools. 710s Preparing to unpack .../076-python3-ubuntutools_0.203_all.deb ... 710s Unpacking python3-ubuntutools (0.203) ... 710s Selecting previously unselected package ubuntu-dev-tools. 710s Preparing to unpack .../077-ubuntu-dev-tools_0.203_all.deb ... 710s Unpacking ubuntu-dev-tools (0.203) ... 710s Selecting previously unselected package python3-astroid. 710s Preparing to unpack .../078-python3-astroid_3.3.5-1_all.deb ... 710s Unpacking python3-astroid (3.3.5-1) ... 710s Selecting previously unselected package python3-isort. 710s Preparing to unpack .../079-python3-isort_5.13.2-2_all.deb ... 710s Unpacking python3-isort (5.13.2-2) ... 710s Selecting previously unselected package python3-mypy-extensions. 710s Preparing to unpack .../080-python3-mypy-extensions_1.0.0-1_all.deb ... 710s Unpacking python3-mypy-extensions (1.0.0-1) ... 710s Selecting previously unselected package libjs-underscore. 710s Preparing to unpack .../081-libjs-underscore_1.13.4~dfsg+~1.11.4-3_all.deb ... 710s Unpacking libjs-underscore (1.13.4~dfsg+~1.11.4-3) ... 710s Selecting previously unselected package libjs-sphinxdoc. 710s Preparing to unpack .../082-libjs-sphinxdoc_7.4.7-4_all.deb ... 710s Unpacking libjs-sphinxdoc (7.4.7-4) ... 710s Selecting previously unselected package python3-logilab-common. 710s Preparing to unpack .../083-python3-logilab-common_2.0.0-1_all.deb ... 710s Unpacking python3-logilab-common (2.0.0-1) ... 710s Selecting previously unselected package python3-dill. 710s Preparing to unpack .../084-python3-dill_0.3.9-1_all.deb ... 710s Unpacking python3-dill (0.3.9-1) ... 710s Selecting previously unselected package python3-mccabe. 710s Preparing to unpack .../085-python3-mccabe_0.7.0-1_all.deb ... 710s Unpacking python3-mccabe (0.7.0-1) ... 710s Selecting previously unselected package python3-platformdirs. 710s Preparing to unpack .../086-python3-platformdirs_4.3.6-1_all.deb ... 710s Unpacking python3-platformdirs (4.3.6-1) ... 710s Selecting previously unselected package python3-tomlkit. 710s Preparing to unpack .../087-python3-tomlkit_0.13.2-1_all.deb ... 710s Unpacking python3-tomlkit (0.13.2-1) ... 710s Selecting previously unselected package pylint. 710s Preparing to unpack .../088-pylint_3.3.1-2_all.deb ... 710s Unpacking pylint (3.3.1-2) ... 710s Selecting previously unselected package python3-argcomplete. 710s Preparing to unpack .../089-python3-argcomplete_3.5.1-1ubuntu1_all.deb ... 710s Unpacking python3-argcomplete (3.5.1-1ubuntu1) ... 710s Selecting previously unselected package python3-cachetools. 711s Preparing to unpack .../090-python3-cachetools_5.3.3-1_all.deb ... 711s Unpacking python3-cachetools (5.3.3-1) ... 711s Selecting previously unselected package python3-pycryptodome. 711s Preparing to unpack .../091-python3-pycryptodome_3.20.0+dfsg-3build1_amd64.deb ... 711s Unpacking python3-pycryptodome (3.20.0+dfsg-3build1) ... 711s Selecting previously unselected package python3-keyrings.alt. 711s Preparing to unpack .../092-python3-keyrings.alt_5.0.2-1_all.deb ... 711s Unpacking python3-keyrings.alt (5.0.2-1) ... 711s Selecting previously unselected package libhttp-parser2.9:amd64. 711s Preparing to unpack .../093-libhttp-parser2.9_2.9.4-6build1_amd64.deb ... 711s Unpacking libhttp-parser2.9:amd64 (2.9.4-6build1) ... 711s Selecting previously unselected package libgit2-1.8:amd64. 711s Preparing to unpack .../094-libgit2-1.8_1.8.4+ds-1ubuntu1_amd64.deb ... 711s Unpacking libgit2-1.8:amd64 (1.8.4+ds-1ubuntu1) ... 711s Selecting previously unselected package python3-pygit2. 711s Preparing to unpack .../095-python3-pygit2_1.16.0-2_amd64.deb ... 711s Unpacking python3-pygit2 (1.16.0-2) ... 711s Selecting previously unselected package python3-iniconfig. 711s Preparing to unpack .../096-python3-iniconfig_1.1.1-2_all.deb ... 711s Unpacking python3-iniconfig (1.1.1-2) ... 711s Selecting previously unselected package python3-packaging. 711s Preparing to unpack .../097-python3-packaging_24.2-1_all.deb ... 711s Unpacking python3-packaging (24.2-1) ... 711s Selecting previously unselected package python3-pluggy. 711s Preparing to unpack .../098-python3-pluggy_1.5.0-1_all.deb ... 711s Unpacking python3-pluggy (1.5.0-1) ... 711s Selecting previously unselected package python3-pytest. 711s Preparing to unpack .../099-python3-pytest_8.3.3-1_all.deb ... 711s Unpacking python3-pytest (8.3.3-1) ... 711s Selecting previously unselected package libpython3.13-stdlib:amd64. 711s Preparing to unpack .../100-libpython3.13-stdlib_3.13.0-2_amd64.deb ... 711s Unpacking libpython3.13-stdlib:amd64 (3.13.0-2) ... 711s Selecting previously unselected package python3.13. 711s Preparing to unpack .../101-python3.13_3.13.0-2_amd64.deb ... 711s Unpacking python3.13 (3.13.0-2) ... 711s Selecting previously unselected package python3-coverage. 711s Preparing to unpack .../102-python3-coverage_7.4.4+dfsg1-0ubuntu3_amd64.deb ... 711s Unpacking python3-coverage (7.4.4+dfsg1-0ubuntu3) ... 711s Selecting previously unselected package libjs-jquery-isonscreen. 711s Preparing to unpack .../103-libjs-jquery-isonscreen_1.2.0-1.1_all.deb ... 711s Unpacking libjs-jquery-isonscreen (1.2.0-1.1) ... 711s Selecting previously unselected package libjs-jquery-metadata. 711s Preparing to unpack .../104-libjs-jquery-metadata_12-4_all.deb ... 711s Unpacking libjs-jquery-metadata (12-4) ... 711s Selecting previously unselected package libjs-jquery-tablesorter. 711s Preparing to unpack .../105-libjs-jquery-tablesorter_1%3a2.31.3+dfsg1-4_all.deb ... 711s Unpacking libjs-jquery-tablesorter (1:2.31.3+dfsg1-4) ... 711s Selecting previously unselected package libjs-jquery-throttle-debounce. 711s Preparing to unpack .../106-libjs-jquery-throttle-debounce_1.1+dfsg.1-2_all.deb ... 711s Unpacking libjs-jquery-throttle-debounce (1.1+dfsg.1-2) ... 711s Selecting previously unselected package python3-pytest-cov. 711s Preparing to unpack .../107-python3-pytest-cov_5.0.0-1_all.deb ... 711s Unpacking python3-pytest-cov (5.0.0-1) ... 711s Selecting previously unselected package python3-tenacity. 711s Preparing to unpack .../108-python3-tenacity_8.5.0-0ubuntu1_all.deb ... 711s Unpacking python3-tenacity (8.5.0-0ubuntu1) ... 711s Selecting previously unselected package python3-py. 711s Preparing to unpack .../109-python3-py_1.11.0-2_all.deb ... 711s Unpacking python3-py (1.11.0-2) ... 711s Selecting previously unselected package libnorm1t64:amd64. 711s Preparing to unpack .../110-libnorm1t64_1.5.9+dfsg-3.1build1_amd64.deb ... 711s Unpacking libnorm1t64:amd64 (1.5.9+dfsg-3.1build1) ... 711s Selecting previously unselected package libpgm-5.3-0t64:amd64. 711s Preparing to unpack .../111-libpgm-5.3-0t64_5.3.128~dfsg-2.1build1_amd64.deb ... 711s Unpacking libpgm-5.3-0t64:amd64 (5.3.128~dfsg-2.1build1) ... 711s Selecting previously unselected package libsodium23:amd64. 711s Preparing to unpack .../112-libsodium23_1.0.18-1build3_amd64.deb ... 711s Unpacking libsodium23:amd64 (1.0.18-1build3) ... 711s Selecting previously unselected package libzmq5:amd64. 711s Preparing to unpack .../113-libzmq5_4.3.5-1build2_amd64.deb ... 711s Unpacking libzmq5:amd64 (4.3.5-1build2) ... 711s Selecting previously unselected package python3-zmq. 711s Preparing to unpack .../114-python3-zmq_24.0.1-5build2_amd64.deb ... 711s Unpacking python3-zmq (24.0.1-5build2) ... 711s Selecting previously unselected package git-ubuntu. 711s Preparing to unpack .../115-git-ubuntu_1.1-1_all.deb ... 711s Unpacking git-ubuntu (1.1-1) ... 711s Setting up python3-iniconfig (1.1.1-2) ... 712s Setting up libnorm1t64:amd64 (1.5.9+dfsg-3.1build1) ... 712s Setting up wdiff (1.2.2-6build1) ... 712s Setting up libfile-which-perl (1.27-2) ... 712s Setting up libsodium23:amd64 (1.0.18-1build3) ... 712s Setting up python3-jaraco.classes (3.4.0-1) ... 712s Setting up libxdelta2t64:amd64 (1.1.3-10.7) ... 712s Setting up python3-importlib-metadata (8.5.0-1) ... 712s Setting up xdelta (1.1.3-10.7) ... 712s Setting up libsys-cpuaffinity-perl (1.13~03-2build4) ... 712s Setting up python3-py (1.11.0-2) ... 712s Setting up libdynaloader-functions-perl (0.004-1) ... 712s Setting up libclass-method-modifiers-perl (2.15-1) ... 712s Setting up libio-pty-perl (1:1.20-1build3) ... 712s Setting up python3-cachetools (5.3.3-1) ... 712s Setting up python3-debianbts (4.1.1) ... 712s Setting up libclone-perl:amd64 (0.47-1) ... 712s Setting up libhtml-tagset-perl (3.24-1) ... 712s Setting up python3-mypy-extensions (1.0.0-1) ... 712s Setting up python3-pycryptodome (3.20.0+dfsg-3build1) ... 713s Setting up python3-tenacity (8.5.0-0ubuntu1) ... 713s Setting up liblwp-mediatypes-perl (6.04-2) ... 713s Setting up debian-archive-keyring (2023.4ubuntu1) ... 713s Setting up libtry-tiny-perl (0.32-1) ... 713s Setting up perl-openssl-defaults:amd64 (7build3) ... 713s Setting up libencode-locale-perl (1.05-3) ... 713s Setting up libjs-jquery-throttle-debounce (1.1+dfsg.1-2) ... 713s Setting up libgomp1:amd64 (14.2.0-9ubuntu1) ... 713s Setting up python3-xdg (0.28-2) ... 713s Setting up pbzip2 (1.1.13-1build1) ... 713s Setting up python3-platformdirs (4.3.6-1) ... 713s Setting up liberror-perl (0.17029-2) ... 713s Setting up libpython3.13-minimal:amd64 (3.13.0-2) ... 713s Setting up patchutils (0.4.2-1build3) ... 713s Setting up libpgm-5.3-0t64:amd64 (5.3.128~dfsg-2.1build1) ... 713s Setting up python3-packaging (24.2-1) ... 713s Setting up python3-gpg (1.24.0-2ubuntu1) ... 714s Setting up python3-dill (0.3.9-1) ... 714s Setting up python3-debian (0.1.49ubuntu3) ... 714s Setting up diffstat (1.67-1) ... 714s Setting up libio-html-perl (1.004-3) ... 714s Setting up libb-hooks-op-check-perl:amd64 (0.22-3build2) ... 714s Setting up libipc-run-perl (20231003.0-2) ... 714s Setting up python3-jeepney (0.8.0-4) ... 714s Setting up python3-isort (5.13.2-2) ... 714s Setting up python3-pluggy (1.5.0-1) ... 714s Setting up libtimedate-perl (2.3300-2) ... 714s Setting up python3-astroid (3.3.5-1) ... 715s Setting up xdelta3 (3.0.11-dfsg-1.2) ... 715s Setting up pixz (1.0.7-3) ... 715s Setting up librole-tiny-perl (2.002004-1) ... 715s Setting up python3.13-minimal (3.13.0-2) ... 715s Setting up git-man (1:2.45.2-1.2ubuntu1) ... 715s Setting up python3-dateutil (2.9.0-3) ... 716s Setting up python3-mccabe (0.7.0-1) ... 716s Setting up libsub-quote-perl (2.006008-1ubuntu1) ... 716s Setting up libclass-xsaccessor-perl (1.19-4build5) ... 716s Setting up libjs-jquery (3.6.1+dfsg+~3.5.14-1) ... 716s Setting up libfile-dirlist-perl (0.05-3) ... 716s Setting up libjs-jquery-hotkeys (0~20130707+git2d51e3a9+dfsg-2.1) ... 716s Setting up python3-argcomplete (3.5.1-1ubuntu1) ... 716s Setting up libfile-homedir-perl (1.006-2) ... 716s Setting up python3-tomlkit (0.13.2-1) ... 716s Setting up python3-distro-info (1.12) ... 716s Setting up libpython3.13-stdlib:amd64 (3.13.0-2) ... 716s Setting up liburi-perl (5.30-1) ... 716s Setting up pristine-tar (1.50+nmu2build1) ... 716s Setting up libfile-touch-perl (0.12-2) ... 716s Setting up dctrl-tools (2.24-3build3) ... 716s Setting up libhttp-parser2.9:amd64 (2.9.4-6build1) ... 716s Setting up libjs-underscore (1.13.4~dfsg+~1.11.4-3) ... 716s Setting up libnet-ssleay-perl:amd64 (1.94-2) ... 716s Setting up libhttp-date-perl (6.06-1) ... 716s Setting up gettext (0.22.5-2) ... 716s Setting up libfile-listing-perl (6.16-1) ... 716s Setting up libzmq5:amd64 (4.3.5-1build2) ... 716s Setting up python3.13 (3.13.0-2) ... 717s Setting up python3-pytest (8.3.3-1) ... 717s Setting up libnet-http-perl (6.23-1) ... 717s Setting up python3-coverage (7.4.4+dfsg1-0ubuntu3) ... 717s Setting up quilt (0.68-1) ... 717s Setting up libdevel-callchecker-perl:amd64 (0.009-1build1) ... 717s Setting up dput (1.2.4ubuntu1) ... 718s Setting up python3-secretstorage (3.3.3-3) ... 718s Setting up python3-zmq (24.0.1-5build2) ... 718s Setting up libjs-jquery-metadata (12-4) ... 718s Setting up libgit2-1.8:amd64 (1.8.4+ds-1ubuntu1) ... 718s Setting up libjs-jquery-isonscreen (1.2.0-1.1) ... 718s Setting up git (1:2.45.2-1.2ubuntu1) ... 718s Setting up libjs-sphinxdoc (7.4.7-4) ... 718s Setting up libwww-robotrules-perl (6.02-1) ... 718s Setting up libjs-jquery-tablesorter (1:2.31.3+dfsg1-4) ... 718s Setting up libhtml-parser-perl:amd64 (3.83-1build1) ... 718s Setting up python3-keyring (25.4.1-1) ... 718s Setting up libio-socket-ssl-perl (2.089-1) ... 718s Setting up libhttp-message-perl (7.00-2ubuntu1) ... 718s Setting up libhttp-negotiate-perl (6.01-2) ... 718s Setting up libhttp-cookies-perl (6.11-1) ... 718s Setting up python3-logilab-common (2.0.0-1) ... 718s Setting up python3-pygit2 (1.16.0-2) ... 718s Setting up libhtml-tree-perl (5.07-3) ... 718s Setting up libparams-classify-perl:amd64 (0.015-2build6) ... 718s Setting up python3-pytest-cov (5.0.0-1) ... 718s Setting up libmodule-runtime-perl (0.016-2) ... 718s Setting up python3-launchpadlib-desktop (2.0.0-1) ... 718s Setting up python3-keyrings.alt (5.0.2-1) ... 719s Setting up pylint (3.3.1-2) ... 719s Setting up libimport-into-perl (1.002005-2) ... 719s Setting up libmoo-perl (2.005005-1) ... 719s Setting up python3-ubuntutools (0.203) ... 719s Setting up liblwp-protocol-https-perl (6.14-1) ... 719s Setting up libwww-perl (6.77-1) ... 719s Setting up devscripts (2.24.5) ... 719s Setting up git-buildpackage (0.9.35) ... 719s Setting up ubuntu-dev-tools (0.203) ... 719s Setting up git-ubuntu (1.1-1) ... 720s Processing triggers for libc-bin (2.40-1ubuntu3) ... 720s Processing triggers for systemd (256.5-2ubuntu4) ... 720s Processing triggers for man-db (2.13.0-1) ... 721s Processing triggers for install-info (7.1.1-1) ... 722s autopkgtest [09:46:58]: test self-test: TEST_SYSTEM_TREE=1 /usr/share/git-ubuntu/self-test 722s autopkgtest [09:46:58]: test self-test: [----------------------- 723s Testing git-ubuntu system installation. 723s Testing tree in /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu 723s Working dir /tmp/autopkgtest.9FxI6v/build.5dA/src 736s pylint passed! 742s ============================= test session starts ============================== 742s platform linux -- Python 3.12.7, pytest-8.3.3, pluggy-1.5.0 742s rootdir: /tmp/autopkgtest.9FxI6v/build.5dA/src 742s configfile: pytest.ini 742s plugins: typeguard-4.4.1, cov-5.0.0 742s collected 459 items 742s 742s gitubuntu/build.py ..... [ 1%] 744s gitubuntu/git_repository_test.py ....................................... [ 9%] 755s ...FFFFF.FFF...........................F.FFFFFFF.FFF.......FFFFFFFFFF [ 24%] 755s gitubuntu/importer_service_test.py ..................................... [ 32%] 755s ..... [ 33%] 755s gitubuntu/importer_service_worker_test.py ... [ 34%] 767s gitubuntu/importer_tag_test.py FFFFFFFFFxF [ 36%] 783s gitubuntu/importer_test.py .......FF.FFFFFFFFFFF.FFF.FFF..FFFFFFFFFFFFFF [ 46%] 797s FFFFxx..FF.................................................F....FFFF. [ 61%] 799s gitubuntu/integration_test.py ...............Fsss [ 65%] 799s gitubuntu/prepare_upload_test.py .............. [ 68%] 800s gitubuntu/repo_builder_test.py .........FF.F................ [ 75%] 800s gitubuntu/rich_history_test.py FFF.FFFF [ 76%] 805s gitubuntu/source_builder_test.py .FF.......FFFFFFFFF.. [ 81%] 805s gitubuntu/source_information_test.py ................................... [ 89%] 805s ... [ 89%] 806s gitubuntu/versioning.py ............................................... [100%] 806s 806s =================================== FAILURES =================================== 806s ___________________ test_follow_symlinks_to_blob[0] ____________________ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmpmgwxtwdh/.git/') 806s tree_func = at 0x7babcfa1c180> 806s 806s @pytest.mark.parametrize('tree_func', [ 806s # The tree_func parameter is a function that accepts a mock Blob that is to 806s # represent the changelog blob itself and returns a mock Tree with the mock 806s # Blob embedded somewhere within it. The test function can then ensure that 806s # follow_symlinks_to_blob can correctly find the changelog Blob given the 806s # Tree. 806s 806s # Of course this is only expected to work if, after checking out the Tree, 806s # "cat debian/changelog" would work. But this allows us to test the various 806s # permutations of symlink following in Trees that _are_ valid. 806s 806s # Simple case 806s lambda b: Tree({ 806s 'debian': Tree({'changelog': b}), 806s }), 806s 806s # Symlink in debian/ 806s lambda b: Tree({ 806s 'debian': Tree({ 806s 'changelog.real': b, 806s 'changelog': Symlink('changelog.real'), 806s }), 806s }), 806s 806s # Symlink to parent directory 806s lambda b: Tree({ 806s 'changelog': b, 806s 'debian': Tree({ 806s 'changelog': Symlink('../changelog'), 806s }) 806s }), 806s 806s # Symlink to subdirectory 806s lambda b: Tree({ 806s 'debian': Tree({ 806s 'changelog': Symlink('subdirectory/changelog'), 806s 'subdirectory': Tree({'changelog': b}), 806s }) 806s }), 806s 806s # debian/ itself is a symlink to a different directory 806s lambda b: Tree({ 806s 'pkg': Tree({'changelog': b}), 806s 'debian': Symlink('pkg'), 806s }) 806s ]) 806s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 806s blob = Blob(b'') 806s blob_id = blob.write(pygit2_repo) 806s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 806s > result_blob = target.follow_symlinks_to_blob( 806s pygit2_repo, 806s tree, 806s 'debian/changelog', 806s ) 806s 806s gitubuntu/git_repository_test.py:342: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpmgwxtwdh/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s gitubuntu/git_repository.py:68: AttributeError 806s ___________________ test_follow_symlinks_to_blob[1] ____________________ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmpwz1tgef6/.git/') 806s tree_func = at 0x7babcfa1c220> 806s 806s @pytest.mark.parametrize('tree_func', [ 806s # The tree_func parameter is a function that accepts a mock Blob that is to 806s # represent the changelog blob itself and returns a mock Tree with the mock 806s # Blob embedded somewhere within it. The test function can then ensure that 806s # follow_symlinks_to_blob can correctly find the changelog Blob given the 806s # Tree. 806s 806s # Of course this is only expected to work if, after checking out the Tree, 806s # "cat debian/changelog" would work. But this allows us to test the various 806s # permutations of symlink following in Trees that _are_ valid. 806s 806s # Simple case 806s lambda b: Tree({ 806s 'debian': Tree({'changelog': b}), 806s }), 806s 806s # Symlink in debian/ 806s lambda b: Tree({ 806s 'debian': Tree({ 806s 'changelog.real': b, 806s 'changelog': Symlink('changelog.real'), 806s }), 806s }), 806s 806s # Symlink to parent directory 806s lambda b: Tree({ 806s 'changelog': b, 806s 'debian': Tree({ 806s 'changelog': Symlink('../changelog'), 806s }) 806s }), 806s 806s # Symlink to subdirectory 806s lambda b: Tree({ 806s 'debian': Tree({ 806s 'changelog': Symlink('subdirectory/changelog'), 806s 'subdirectory': Tree({'changelog': b}), 806s }) 806s }), 806s 806s # debian/ itself is a symlink to a different directory 806s lambda b: Tree({ 806s 'pkg': Tree({'changelog': b}), 806s 'debian': Symlink('pkg'), 806s }) 806s ]) 806s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 806s blob = Blob(b'') 806s blob_id = blob.write(pygit2_repo) 806s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 806s > result_blob = target.follow_symlinks_to_blob( 806s pygit2_repo, 806s tree, 806s 'debian/changelog', 806s ) 806s 806s gitubuntu/git_repository_test.py:342: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpwz1tgef6/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s gitubuntu/git_repository.py:68: AttributeError 806s ___________________ test_follow_symlinks_to_blob[2] ____________________ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmpli3ec_g3/.git/') 806s tree_func = at 0x7babcfa1c2c0> 806s 806s @pytest.mark.parametrize('tree_func', [ 806s # The tree_func parameter is a function that accepts a mock Blob that is to 806s # represent the changelog blob itself and returns a mock Tree with the mock 806s # Blob embedded somewhere within it. The test function can then ensure that 806s # follow_symlinks_to_blob can correctly find the changelog Blob given the 806s # Tree. 806s 806s # Of course this is only expected to work if, after checking out the Tree, 806s # "cat debian/changelog" would work. But this allows us to test the various 806s # permutations of symlink following in Trees that _are_ valid. 806s 806s # Simple case 806s lambda b: Tree({ 806s 'debian': Tree({'changelog': b}), 806s }), 806s 806s # Symlink in debian/ 806s lambda b: Tree({ 806s 'debian': Tree({ 806s 'changelog.real': b, 806s 'changelog': Symlink('changelog.real'), 806s }), 806s }), 806s 806s # Symlink to parent directory 806s lambda b: Tree({ 806s 'changelog': b, 806s 'debian': Tree({ 806s 'changelog': Symlink('../changelog'), 806s }) 806s }), 806s 806s # Symlink to subdirectory 806s lambda b: Tree({ 806s 'debian': Tree({ 806s 'changelog': Symlink('subdirectory/changelog'), 806s 'subdirectory': Tree({'changelog': b}), 806s }) 806s }), 806s 806s # debian/ itself is a symlink to a different directory 806s lambda b: Tree({ 806s 'pkg': Tree({'changelog': b}), 806s 'debian': Symlink('pkg'), 806s }) 806s ]) 806s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 806s blob = Blob(b'') 806s blob_id = blob.write(pygit2_repo) 806s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 806s > result_blob = target.follow_symlinks_to_blob( 806s pygit2_repo, 806s tree, 806s 'debian/changelog', 806s ) 806s 806s gitubuntu/git_repository_test.py:342: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpli3ec_g3/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s gitubuntu/git_repository.py:68: AttributeError 806s ___________________ test_follow_symlinks_to_blob[3] ____________________ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmp104h6fae/.git/') 806s tree_func = at 0x7babcfa1c360> 806s 806s @pytest.mark.parametrize('tree_func', [ 806s # The tree_func parameter is a function that accepts a mock Blob that is to 806s # represent the changelog blob itself and returns a mock Tree with the mock 806s # Blob embedded somewhere within it. The test function can then ensure that 806s # follow_symlinks_to_blob can correctly find the changelog Blob given the 806s # Tree. 806s 806s # Of course this is only expected to work if, after checking out the Tree, 806s # "cat debian/changelog" would work. But this allows us to test the various 806s # permutations of symlink following in Trees that _are_ valid. 806s 806s # Simple case 806s lambda b: Tree({ 806s 'debian': Tree({'changelog': b}), 806s }), 806s 806s # Symlink in debian/ 806s lambda b: Tree({ 806s 'debian': Tree({ 806s 'changelog.real': b, 806s 'changelog': Symlink('changelog.real'), 806s }), 806s }), 806s 806s # Symlink to parent directory 806s lambda b: Tree({ 806s 'changelog': b, 806s 'debian': Tree({ 806s 'changelog': Symlink('../changelog'), 806s }) 806s }), 806s 806s # Symlink to subdirectory 806s lambda b: Tree({ 806s 'debian': Tree({ 806s 'changelog': Symlink('subdirectory/changelog'), 806s 'subdirectory': Tree({'changelog': b}), 806s }) 806s }), 806s 806s # debian/ itself is a symlink to a different directory 806s lambda b: Tree({ 806s 'pkg': Tree({'changelog': b}), 806s 'debian': Symlink('pkg'), 806s }) 806s ]) 806s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 806s blob = Blob(b'') 806s blob_id = blob.write(pygit2_repo) 806s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 806s > result_blob = target.follow_symlinks_to_blob( 806s pygit2_repo, 806s tree, 806s 'debian/changelog', 806s ) 806s 806s gitubuntu/git_repository_test.py:342: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmp104h6fae/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s gitubuntu/git_repository.py:68: AttributeError 806s ___________________ test_follow_symlinks_to_blob[4] ____________________ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmp9zplncw9/.git/') 806s tree_func = at 0x7babcfa1c400> 806s 806s @pytest.mark.parametrize('tree_func', [ 806s # The tree_func parameter is a function that accepts a mock Blob that is to 806s # represent the changelog blob itself and returns a mock Tree with the mock 806s # Blob embedded somewhere within it. The test function can then ensure that 806s # follow_symlinks_to_blob can correctly find the changelog Blob given the 806s # Tree. 806s 806s # Of course this is only expected to work if, after checking out the Tree, 806s # "cat debian/changelog" would work. But this allows us to test the various 806s # permutations of symlink following in Trees that _are_ valid. 806s 806s # Simple case 806s lambda b: Tree({ 806s 'debian': Tree({'changelog': b}), 806s }), 806s 806s # Symlink in debian/ 806s lambda b: Tree({ 806s 'debian': Tree({ 806s 'changelog.real': b, 806s 'changelog': Symlink('changelog.real'), 806s }), 806s }), 806s 806s # Symlink to parent directory 806s lambda b: Tree({ 806s 'changelog': b, 806s 'debian': Tree({ 806s 'changelog': Symlink('../changelog'), 806s }) 806s }), 806s 806s # Symlink to subdirectory 806s lambda b: Tree({ 806s 'debian': Tree({ 806s 'changelog': Symlink('subdirectory/changelog'), 806s 'subdirectory': Tree({'changelog': b}), 806s }) 806s }), 806s 806s # debian/ itself is a symlink to a different directory 806s lambda b: Tree({ 806s 'pkg': Tree({'changelog': b}), 806s 'debian': Symlink('pkg'), 806s }) 806s ]) 806s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 806s blob = Blob(b'') 806s blob_id = blob.write(pygit2_repo) 806s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 806s > result_blob = target.follow_symlinks_to_blob( 806s pygit2_repo, 806s tree, 806s 'debian/changelog', 806s ) 806s 806s gitubuntu/git_repository_test.py:342: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmp9zplncw9/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s gitubuntu/git_repository.py:68: AttributeError 806s ________________ test_follow_symlinks_to_blob_not_found[tree1] _________________ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmpp9jrvece/.git/') 806s tree = 806s 806s @pytest.mark.parametrize('tree', [ 806s Tree({}), 806s Tree({'debian': Tree({})}), 806s Tree({'debian': Tree({'changelog': Symlink('other')})}), 806s Tree({'debian': Tree({'changelog': Symlink('../other')})}), 806s ]) 806s def test_follow_symlinks_to_blob_not_found(pygit2_repo, tree): 806s pygit2_tree = pygit2_repo.get(tree.write(pygit2_repo)) 806s with pytest.raises(KeyError): 806s > target.follow_symlinks_to_blob( 806s pygit2_repo, 806s pygit2_tree, 806s 'debian/changelog', 806s ) 806s 806s gitubuntu/git_repository_test.py:359: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpp9jrvece/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s gitubuntu/git_repository.py:68: AttributeError 806s ________________ test_follow_symlinks_to_blob_not_found[tree2] _________________ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmpj2pnmfov/.git/') 806s tree = 806s 806s @pytest.mark.parametrize('tree', [ 806s Tree({}), 806s Tree({'debian': Tree({})}), 806s Tree({'debian': Tree({'changelog': Symlink('other')})}), 806s Tree({'debian': Tree({'changelog': Symlink('../other')})}), 806s ]) 806s def test_follow_symlinks_to_blob_not_found(pygit2_repo, tree): 806s pygit2_tree = pygit2_repo.get(tree.write(pygit2_repo)) 806s with pytest.raises(KeyError): 806s > target.follow_symlinks_to_blob( 806s pygit2_repo, 806s pygit2_tree, 806s 'debian/changelog', 806s ) 806s 806s gitubuntu/git_repository_test.py:359: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpj2pnmfov/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s gitubuntu/git_repository.py:68: AttributeError 806s ________________ test_follow_symlinks_to_blob_not_found[tree3] _________________ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmpw8g74vov/.git/') 806s tree = 806s 806s @pytest.mark.parametrize('tree', [ 806s Tree({}), 806s Tree({'debian': Tree({})}), 806s Tree({'debian': Tree({'changelog': Symlink('other')})}), 806s Tree({'debian': Tree({'changelog': Symlink('../other')})}), 806s ]) 806s def test_follow_symlinks_to_blob_not_found(pygit2_repo, tree): 806s pygit2_tree = pygit2_repo.get(tree.write(pygit2_repo)) 806s with pytest.raises(KeyError): 806s > target.follow_symlinks_to_blob( 806s pygit2_repo, 806s pygit2_tree, 806s 'debian/changelog', 806s ) 806s 806s gitubuntu/git_repository_test.py:359: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpw8g74vov/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s gitubuntu/git_repository.py:68: AttributeError 806s _________________________ test_git_escape_dir_to_tree __________________________ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmpmo1mw0_t/.git/') 806s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_git_escape_dir_to_tree0') 806s 806s def test_git_escape_dir_to_tree(pygit2_repo, tmpdir): 806s tmpdir.mkdir('.git') 806s > tree_hash = target.GitUbuntuRepository.dir_to_tree( 806s pygit2_repo, 806s str(tmpdir), 806s escape=True, 806s ) 806s 806s gitubuntu/git_repository_test.py:668: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s gitubuntu/git_repository.py:2463: in dir_to_tree 806s replacement_oid = cls._add_missing_tree_dirs( 806s gitubuntu/git_repository.py:2397: in _add_missing_tree_dirs 806s tree_builder = cls._create_replacement_tree_builder( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s cls = 806s repo = pygit2.Repository('/tmp/tmpmo1mw0_t/.git/') 806s treeish = 806s sub_path = '' 806s 806s @classmethod 806s def _create_replacement_tree_builder(cls, repo, treeish, sub_path): 806s '''Create a replacement TreeBuilder 806s 806s Create a TreeBuilder based on an existing repository, top-level 806s tree-ish and path inside that tree. 806s 806s A sub_path of '' is taken to mean a request for a replacement 806s TreeBuilder for the top level tree. 806s 806s Returns a TreeBuilder object pre-populated with the previous contents. 806s If the path did not previously exist in the tree-ish, then return an 806s empty TreeBuilder instead. 806s ''' 806s 806s > tree = treeish.peel(pygit2.GIT_OBJ_TREE) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s gitubuntu/git_repository.py:2331: AttributeError 806s ______ test_determine_quilt_series_path[tree_data1-debian/patches/series] ______ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmpjg1rauer/.git/') 806s tree_data = 806s expected_path = 'debian/patches/series' 806s 806s @pytest.mark.parametrize('tree_data,expected_path', [ 806s # Empty tree -> default 806s (Tree({}), 'debian/patches/series'), 806s 806s # Empty debian/patches directory -> default 806s (Tree({'debian': Tree({'patches': Tree({})})}), 'debian/patches/series'), 806s 806s # Only debian/patches/series -> that one 806s ( 806s Tree({'debian': Tree({'patches': Tree({'series': Blob(b'')})})}), 806s 'debian/patches/series', 806s ), 806s 806s # Only debian/patches/debian.series -> that one 806s ( 806s Tree({'debian': Tree({'patches': Tree({ 806s 'debian.series': Blob(b'') 806s })})}), 806s 'debian/patches/debian.series', 806s ), 806s 806s # Both -> debian.series 806s ( 806s Tree({'debian': Tree({'patches': Tree({ 806s 'debian.series': Blob(b''), 806s 'series': Blob(b''), 806s })})}), 806s 'debian/patches/debian.series', 806s ), 806s ]) 806s def test_determine_quilt_series_path(pygit2_repo, tree_data, expected_path): 806s tree_obj = pygit2_repo.get(tree_data.write(pygit2_repo)) 806s > path = target.determine_quilt_series_path(pygit2_repo, tree_obj) 806s 806s gitubuntu/git_repository_test.py:708: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s gitubuntu/git_repository.py:991: in determine_quilt_series_path 806s blob = follow_symlinks_to_blob( 806s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpjg1rauer/.git/') 806s top_tree_object = 806s search_path = 'debian/patches/debian.series' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s gitubuntu/git_repository.py:68: AttributeError 806s ______ test_determine_quilt_series_path[tree_data2-debian/patches/series] ______ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmpun4bnyy9/.git/') 806s tree_data = 806s expected_path = 'debian/patches/series' 806s 806s @pytest.mark.parametrize('tree_data,expected_path', [ 806s # Empty tree -> default 806s (Tree({}), 'debian/patches/series'), 806s 806s # Empty debian/patches directory -> default 806s (Tree({'debian': Tree({'patches': Tree({})})}), 'debian/patches/series'), 806s 806s # Only debian/patches/series -> that one 806s ( 806s Tree({'debian': Tree({'patches': Tree({'series': Blob(b'')})})}), 806s 'debian/patches/series', 806s ), 806s 806s # Only debian/patches/debian.series -> that one 806s ( 806s Tree({'debian': Tree({'patches': Tree({ 806s 'debian.series': Blob(b'') 806s })})}), 806s 'debian/patches/debian.series', 806s ), 806s 806s # Both -> debian.series 806s ( 806s Tree({'debian': Tree({'patches': Tree({ 806s 'debian.series': Blob(b''), 806s 'series': Blob(b''), 806s })})}), 806s 'debian/patches/debian.series', 806s ), 806s ]) 806s def test_determine_quilt_series_path(pygit2_repo, tree_data, expected_path): 806s tree_obj = pygit2_repo.get(tree_data.write(pygit2_repo)) 806s > path = target.determine_quilt_series_path(pygit2_repo, tree_obj) 806s 806s gitubuntu/git_repository_test.py:708: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s gitubuntu/git_repository.py:991: in determine_quilt_series_path 806s blob = follow_symlinks_to_blob( 806s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpun4bnyy9/.git/') 806s top_tree_object = 806s search_path = 'debian/patches/debian.series' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s gitubuntu/git_repository.py:68: AttributeError 806s __ test_determine_quilt_series_path[tree_data3-debian/patches/debian.series] ___ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmprg2_imnn/.git/') 806s tree_data = 806s expected_path = 'debian/patches/debian.series' 806s 806s @pytest.mark.parametrize('tree_data,expected_path', [ 806s # Empty tree -> default 806s (Tree({}), 'debian/patches/series'), 806s 806s # Empty debian/patches directory -> default 806s (Tree({'debian': Tree({'patches': Tree({})})}), 'debian/patches/series'), 806s 806s # Only debian/patches/series -> that one 806s ( 806s Tree({'debian': Tree({'patches': Tree({'series': Blob(b'')})})}), 806s 'debian/patches/series', 806s ), 806s 806s # Only debian/patches/debian.series -> that one 806s ( 806s Tree({'debian': Tree({'patches': Tree({ 806s 'debian.series': Blob(b'') 806s })})}), 806s 'debian/patches/debian.series', 806s ), 806s 806s # Both -> debian.series 806s ( 806s Tree({'debian': Tree({'patches': Tree({ 806s 'debian.series': Blob(b''), 806s 'series': Blob(b''), 806s })})}), 806s 'debian/patches/debian.series', 806s ), 806s ]) 806s def test_determine_quilt_series_path(pygit2_repo, tree_data, expected_path): 806s tree_obj = pygit2_repo.get(tree_data.write(pygit2_repo)) 806s > path = target.determine_quilt_series_path(pygit2_repo, tree_obj) 806s 806s gitubuntu/git_repository_test.py:708: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s gitubuntu/git_repository.py:991: in determine_quilt_series_path 806s blob = follow_symlinks_to_blob( 806s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmprg2_imnn/.git/') 806s top_tree_object = 806s search_path = 'debian/patches/debian.series' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s gitubuntu/git_repository.py:68: AttributeError 806s __ test_determine_quilt_series_path[tree_data4-debian/patches/debian.series] ___ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmp6_t5gf_d/.git/') 806s tree_data = 806s expected_path = 'debian/patches/debian.series' 806s 806s @pytest.mark.parametrize('tree_data,expected_path', [ 806s # Empty tree -> default 806s (Tree({}), 'debian/patches/series'), 806s 806s # Empty debian/patches directory -> default 806s (Tree({'debian': Tree({'patches': Tree({})})}), 'debian/patches/series'), 806s 806s # Only debian/patches/series -> that one 806s ( 806s Tree({'debian': Tree({'patches': Tree({'series': Blob(b'')})})}), 806s 'debian/patches/series', 806s ), 806s 806s # Only debian/patches/debian.series -> that one 806s ( 806s Tree({'debian': Tree({'patches': Tree({ 806s 'debian.series': Blob(b'') 806s })})}), 806s 'debian/patches/debian.series', 806s ), 806s 806s # Both -> debian.series 806s ( 806s Tree({'debian': Tree({'patches': Tree({ 806s 'debian.series': Blob(b''), 806s 'series': Blob(b''), 806s })})}), 806s 'debian/patches/debian.series', 806s ), 806s ]) 806s def test_determine_quilt_series_path(pygit2_repo, tree_data, expected_path): 806s tree_obj = pygit2_repo.get(tree_data.write(pygit2_repo)) 806s > path = target.determine_quilt_series_path(pygit2_repo, tree_obj) 806s 806s gitubuntu/git_repository_test.py:708: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s gitubuntu/git_repository.py:991: in determine_quilt_series_path 806s blob = follow_symlinks_to_blob( 806s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmp6_t5gf_d/.git/') 806s top_tree_object = 806s search_path = 'debian/patches/debian.series' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s gitubuntu/git_repository.py:68: AttributeError 806s ________________________________ test_quilt_env ________________________________ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmpw464hpy4/.git/') 806s 806s def test_quilt_env(pygit2_repo): 806s tree_builder = Tree({'debian': 806s Tree({'patches': Tree({'debian.series': Blob(b'')})}) 806s }) 806s tree_obj = pygit2_repo.get(tree_builder.write(pygit2_repo)) 806s > env = target.quilt_env(pygit2_repo, tree_obj) 806s 806s gitubuntu/git_repository_test.py:717: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s gitubuntu/git_repository.py:1022: in quilt_env 806s 'QUILT_SERIES': determine_quilt_series_path(pygit2_repo, treeish), 806s gitubuntu/git_repository.py:991: in determine_quilt_series_path 806s blob = follow_symlinks_to_blob( 806s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpw464hpy4/.git/') 806s top_tree_object = 806s search_path = 'debian/patches/debian.series' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s gitubuntu/git_repository.py:68: AttributeError 806s _____________________________ test_repo_quilt_env ______________________________ 806s 806s repo = 806s 806s def test_repo_quilt_env(repo): 806s tree_builder = Tree({'debian': 806s Tree({'patches': Tree({'debian.series': Blob(b'')})}) 806s }) 806s tree_obj = repo.raw_repo.get(tree_builder.write(repo.raw_repo)) 806s > env = repo.quilt_env(tree_obj) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository_test.py:732: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:2575: in quilt_env 806s env.update(quilt_env(self.raw_repo, treeish)) 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:1022: in quilt_env 806s 'QUILT_SERIES': determine_quilt_series_path(pygit2_repo, treeish), 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:991: in determine_quilt_series_path 806s blob = follow_symlinks_to_blob( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpe0wdiw9x/.git/') 806s top_tree_object = 806s search_path = 'debian/patches/debian.series' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s _____________________ test_repo_quilt_env_from_treeish_str _____________________ 806s 806s repo = 806s 806s def test_repo_quilt_env_from_treeish_str(repo): 806s tree_builder = Tree({'debian': 806s Tree({'patches': Tree({'debian.series': Blob(b'')})}) 806s }) 806s tree_obj = repo.raw_repo.get(tree_builder.write(repo.raw_repo)) 806s > env = repo.quilt_env_from_treeish_str(str(tree_obj.id)) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository_test.py:757: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:2589: in quilt_env_from_treeish_str 806s return self.quilt_env(self.raw_repo.get(treeish_str)) 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:2575: in quilt_env 806s env.update(quilt_env(self.raw_repo, treeish)) 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:1022: in quilt_env 806s 'QUILT_SERIES': determine_quilt_series_path(pygit2_repo, treeish), 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:991: in determine_quilt_series_path 806s blob = follow_symlinks_to_blob( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmphgbsm63l/.git/') 806s top_tree_object = 806s search_path = 'debian/patches/debian.series' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s _ test_repo_find_ubuntu_merge[Common case-input_data0-pkg/import/1-1ubuntu1-pkg/import/2-1-pkg/import/1-1] _ 806s 806s description = 'Common case' 806s repo = 806s input_data = 806s old_ubuntu = 'pkg/import/1-1ubuntu1', new_debian = 'pkg/import/2-1' 806s expected = 'pkg/import/1-1' 806s 806s @pytest.mark.parametrize( 806s 'description, input_data, old_ubuntu, new_debian, expected', 806s [ 806s ( 806s 'Common case', 806s Repo( 806s commits=[ 806s Commit.from_spec( 806s name='old/debian' 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('old/debian')], 806s name='old/ubuntu', 806s changelog_versions=['1-1ubuntu1', '1-1'], 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('old/debian')], 806s name='new/debian', 806s changelog_versions=['2-1', '1-1'], 806s ), 806s ], 806s tags={ 806s 'pkg/import/1-1': Placeholder('old/debian'), 806s 'pkg/import/1-1ubuntu1': Placeholder('old/ubuntu'), 806s 'pkg/import/2-1': Placeholder('new/debian'), 806s }, 806s ), 806s 'pkg/import/1-1ubuntu1', 806s 'pkg/import/2-1', 806s 'pkg/import/1-1', 806s ), 806s ( 806s 'Ubuntu delta based on a NMU', 806s Repo( 806s commits=[ 806s Commit.from_spec( 806s name='fork_point' 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('fork_point')], 806s name='old/debian', 806s changelog_versions=['1-1.1', '1-1'], 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('old/debian')], 806s name='old/ubuntu', 806s changelog_versions=['1-1.1ubuntu1', '1-1.1', '1-1'], 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('fork_point')], 806s name='new/debian', 806s changelog_versions=['2-1', '1-1'], 806s ), 806s ], 806s tags={ 806s 'pkg/import/1-1': Placeholder('fork_point'), 806s 'pkg/import/1-1.1': Placeholder('old/debian'), 806s 'pkg/import/1-1.1ubuntu1': Placeholder('old/ubuntu'), 806s 'pkg/import/2-1': Placeholder('new/debian'), 806s }, 806s ), 806s 'pkg/import/1-1.1ubuntu1', 806s 'pkg/import/2-1', 806s 'pkg/import/1-1.1', 806s ), 806s ( 806s 'Ubuntu upstream version head of Debian', 806s Repo( 806s commits=[ 806s Commit.from_spec( 806s name='old/debian' 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('old/debian')], 806s name='mid_ubuntu', 806s changelog_versions=['1-1ubuntu1', '1-1'], 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('mid_ubuntu')], 806s name='old/ubuntu', 806s changelog_versions=['2-0ubuntu1', '1-1ubuntu1', '1-1'], 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('old/debian')], 806s name='new/debian', 806s changelog_versions=['3-1', '1-1'], 806s ), 806s ], 806s tags={ 806s 'pkg/import/1-1': Placeholder('old/debian'), 806s 'pkg/import/1-1ubuntu1': Placeholder('mid_ubuntu'), 806s 'pkg/import/2-0ubuntu1': Placeholder('old/ubuntu'), 806s 'pkg/import/3-1': Placeholder('new/debian'), 806s }, 806s ), 806s 'pkg/import/2-0ubuntu1', 806s 'pkg/import/3-1', 806s 'pkg/import/1-1', 806s ), 806s ], 806s ) 806s def test_repo_find_ubuntu_merge( 806s description, 806s repo, 806s input_data, 806s old_ubuntu, 806s new_debian, 806s expected, 806s ): 806s > input_data.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository_test.py:889: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmp670ra8vs/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_2.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_2-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_2-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ 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] _ 806s 806s description = 'Ubuntu delta based on a NMU' 806s repo = 806s input_data = 806s old_ubuntu = 'pkg/import/1-1.1ubuntu1', new_debian = 'pkg/import/2-1' 806s expected = 'pkg/import/1-1.1' 806s 806s @pytest.mark.parametrize( 806s 'description, input_data, old_ubuntu, new_debian, expected', 806s [ 806s ( 806s 'Common case', 806s Repo( 806s commits=[ 806s Commit.from_spec( 806s name='old/debian' 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('old/debian')], 806s name='old/ubuntu', 806s changelog_versions=['1-1ubuntu1', '1-1'], 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('old/debian')], 806s name='new/debian', 806s changelog_versions=['2-1', '1-1'], 806s ), 806s ], 806s tags={ 806s 'pkg/import/1-1': Placeholder('old/debian'), 806s 'pkg/import/1-1ubuntu1': Placeholder('old/ubuntu'), 806s 'pkg/import/2-1': Placeholder('new/debian'), 806s }, 806s ), 806s 'pkg/import/1-1ubuntu1', 806s 'pkg/import/2-1', 806s 'pkg/import/1-1', 806s ), 806s ( 806s 'Ubuntu delta based on a NMU', 806s Repo( 806s commits=[ 806s Commit.from_spec( 806s name='fork_point' 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('fork_point')], 806s name='old/debian', 806s changelog_versions=['1-1.1', '1-1'], 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('old/debian')], 806s name='old/ubuntu', 806s changelog_versions=['1-1.1ubuntu1', '1-1.1', '1-1'], 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('fork_point')], 806s name='new/debian', 806s changelog_versions=['2-1', '1-1'], 806s ), 806s ], 806s tags={ 806s 'pkg/import/1-1': Placeholder('fork_point'), 806s 'pkg/import/1-1.1': Placeholder('old/debian'), 806s 'pkg/import/1-1.1ubuntu1': Placeholder('old/ubuntu'), 806s 'pkg/import/2-1': Placeholder('new/debian'), 806s }, 806s ), 806s 'pkg/import/1-1.1ubuntu1', 806s 'pkg/import/2-1', 806s 'pkg/import/1-1.1', 806s ), 806s ( 806s 'Ubuntu upstream version head of Debian', 806s Repo( 806s commits=[ 806s Commit.from_spec( 806s name='old/debian' 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('old/debian')], 806s name='mid_ubuntu', 806s changelog_versions=['1-1ubuntu1', '1-1'], 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('mid_ubuntu')], 806s name='old/ubuntu', 806s changelog_versions=['2-0ubuntu1', '1-1ubuntu1', '1-1'], 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('old/debian')], 806s name='new/debian', 806s changelog_versions=['3-1', '1-1'], 806s ), 806s ], 806s tags={ 806s 'pkg/import/1-1': Placeholder('old/debian'), 806s 'pkg/import/1-1ubuntu1': Placeholder('mid_ubuntu'), 806s 'pkg/import/2-0ubuntu1': Placeholder('old/ubuntu'), 806s 'pkg/import/3-1': Placeholder('new/debian'), 806s }, 806s ), 806s 'pkg/import/2-0ubuntu1', 806s 'pkg/import/3-1', 806s 'pkg/import/1-1', 806s ), 806s ], 806s ) 806s def test_repo_find_ubuntu_merge( 806s description, 806s repo, 806s input_data, 806s old_ubuntu, 806s new_debian, 806s expected, 806s ): 806s > input_data.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository_test.py:889: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmp94362oc_/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1ubuntu1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1ubuntu1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_2.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_2-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_2-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ 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] _ 806s 806s description = 'Ubuntu upstream version head of Debian' 806s repo = 806s input_data = 806s old_ubuntu = 'pkg/import/2-0ubuntu1', new_debian = 'pkg/import/3-1' 806s expected = 'pkg/import/1-1' 806s 806s @pytest.mark.parametrize( 806s 'description, input_data, old_ubuntu, new_debian, expected', 806s [ 806s ( 806s 'Common case', 806s Repo( 806s commits=[ 806s Commit.from_spec( 806s name='old/debian' 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('old/debian')], 806s name='old/ubuntu', 806s changelog_versions=['1-1ubuntu1', '1-1'], 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('old/debian')], 806s name='new/debian', 806s changelog_versions=['2-1', '1-1'], 806s ), 806s ], 806s tags={ 806s 'pkg/import/1-1': Placeholder('old/debian'), 806s 'pkg/import/1-1ubuntu1': Placeholder('old/ubuntu'), 806s 'pkg/import/2-1': Placeholder('new/debian'), 806s }, 806s ), 806s 'pkg/import/1-1ubuntu1', 806s 'pkg/import/2-1', 806s 'pkg/import/1-1', 806s ), 806s ( 806s 'Ubuntu delta based on a NMU', 806s Repo( 806s commits=[ 806s Commit.from_spec( 806s name='fork_point' 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('fork_point')], 806s name='old/debian', 806s changelog_versions=['1-1.1', '1-1'], 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('old/debian')], 806s name='old/ubuntu', 806s changelog_versions=['1-1.1ubuntu1', '1-1.1', '1-1'], 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('fork_point')], 806s name='new/debian', 806s changelog_versions=['2-1', '1-1'], 806s ), 806s ], 806s tags={ 806s 'pkg/import/1-1': Placeholder('fork_point'), 806s 'pkg/import/1-1.1': Placeholder('old/debian'), 806s 'pkg/import/1-1.1ubuntu1': Placeholder('old/ubuntu'), 806s 'pkg/import/2-1': Placeholder('new/debian'), 806s }, 806s ), 806s 'pkg/import/1-1.1ubuntu1', 806s 'pkg/import/2-1', 806s 'pkg/import/1-1.1', 806s ), 806s ( 806s 'Ubuntu upstream version head of Debian', 806s Repo( 806s commits=[ 806s Commit.from_spec( 806s name='old/debian' 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('old/debian')], 806s name='mid_ubuntu', 806s changelog_versions=['1-1ubuntu1', '1-1'], 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('mid_ubuntu')], 806s name='old/ubuntu', 806s changelog_versions=['2-0ubuntu1', '1-1ubuntu1', '1-1'], 806s ), 806s Commit.from_spec( 806s parents=[Placeholder('old/debian')], 806s name='new/debian', 806s changelog_versions=['3-1', '1-1'], 806s ), 806s ], 806s tags={ 806s 'pkg/import/1-1': Placeholder('old/debian'), 806s 'pkg/import/1-1ubuntu1': Placeholder('mid_ubuntu'), 806s 'pkg/import/2-0ubuntu1': Placeholder('old/ubuntu'), 806s 'pkg/import/3-1': Placeholder('new/debian'), 806s }, 806s ), 806s 'pkg/import/2-0ubuntu1', 806s 'pkg/import/3-1', 806s 'pkg/import/1-1', 806s ), 806s ], 806s ) 806s def test_repo_find_ubuntu_merge( 806s description, 806s repo, 806s input_data, 806s old_ubuntu, 806s new_debian, 806s expected, 806s ): 806s > input_data.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository_test.py:889: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmps3aiuuy2/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_2.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_2-0ubuntu1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_2-0ubuntu1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_3.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_3-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_3-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _______________________________ test_commit_tree _______________________________ 806s 806s repo = 806s 806s def test_commit_tree(repo): 806s # Construct a repository with an initial commit on the master branch so 806s # that we can verify later parentage and lack of branch movement 806s parent_commit_oid = Repo( 806s commits=[Commit(name='master')], 806s branches={'master': Placeholder('master')} 806s ).write(repo.raw_repo) 806s repo.raw_repo.lookup_reference('HEAD').set_target('refs/heads/master') 806s 806s # Construct a tree inside the repository with a debian/changelog in it to 806s # feed to the method under test 806s test_changelog_path = os.path.join( 806s pkg_resources.resource_filename('gitubuntu', 'changelog_tests'), 806s 'test_date_1', 806s ) 806s with open(test_changelog_path, 'rb') as f: 806s test_changelog_bytes = f.read() 806s test_changelog_blob = Blob(test_changelog_bytes) 806s source_tree = Tree({'debian': Tree({'changelog': test_changelog_blob})}) 806s source_tree_oid = source_tree.write(repo.raw_repo) 806s 806s # Call the method under test 806s > commit_oid = repo.commit_source_tree( 806s tree=source_tree_oid, 806s parents=[parent_commit_oid], 806s log_message='test_commit_msg', 806s commit_date=datetime.datetime( 806s 1971, # year 806s 2, # month 806s 3, # day 806s 4, # hours 806s 5, # minutes 806s 6, # seconds 806s 7, # milliseconds (this should get truncated down to 0) 806s datetime.timezone(datetime.timedelta(hours=-8)) 806s ), 806s ) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository_test.py:993: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:2299: in commit_source_tree 806s changelog = self.get_changelog_from_treeish(str(tree)) 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 806s return Changelog.from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:569: in from_treeish 806s blob = follow_symlinks_to_blob( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmp0ukzzts9/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s _____________________ test_descendant_of[root-root-False] ______________________ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmpkl76c54e/.git/'), a = 'root' 806s b = 'root', expected = False 806s 806s @pytest.mark.parametrize(['a', 'b', 'expected'], 806s [ 806s ('root', 'root', False), 806s ('child1', 'root', True), 806s ('root', 'child1', False), 806s ('grandchild1', 'root', True), 806s ('child1', 'child2', False), 806s ('root', 'disjoint', False), 806s ] 806s ) 806s def test_descendant_of(pygit2_repo, a, b, expected): 806s """ 806s General test for pygit2.Repository.descendant_of(). 806s 806s This test was formerly for a temporary alternative implementation of 806s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 806s use until we updated our pinning to use a newer version of pygit2 that 806s included the pygit2.Repository.descendant_of() method. After the pinning 806s was removed and this implementation replacement took place, we kept the 806s test to ensure that actual behaviour did not change. 806s 806s This unit tests validate_upload_tag() for various parameterized cases. The 806s paramater sets assume the repository structure encoded in the Repo() call 806s below. 806s 806s :param pygit2.Repository pygit2_repo: fixture providing a temporary 806s pygit2.Repository instance to use 806s :param str a: tag name of the first commit to pass to descendant_of() 806s :param str b: tag name of the second commit to pass to descendant_of() 806s :param bool expected: the expected result of descendant_of() 806s """ 806s Repo( 806s # Unique message parameters are used in each entry here in order to 806s # ensure that otherwise-identical commits do not end up being the same 806s # commit (with the same hash, etc). 806s commits=[ 806s Commit(name='root', message='1'), 806s Commit(name='child1', parents=[Placeholder('root')], message='2'), 806s Commit(name='child2', parents=[Placeholder('root')], message='3'), 806s Commit( 806s name='grandchild1', 806s parents=[Placeholder('child1')], 806s message='4' 806s ), 806s Commit(name='disjoint', message='5'), 806s ], 806s tags={ 806s 'root': Placeholder('root'), 806s 'child1': Placeholder('child1'), 806s 'child2': Placeholder('child2'), 806s 'grandchild1': Placeholder('grandchild1'), 806s 'disjoint': Placeholder('disjoint'), 806s } 806s > ).write(pygit2_repo) 806s 806s gitubuntu/git_repository_test.py:1099: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpkl76c54e/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s gitubuntu/repo_builder.py:389: AttributeError 806s _____________________ test_descendant_of[child1-root-True] _____________________ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmpjtxu14m6/.git/'), a = 'child1' 806s b = 'root', expected = True 806s 806s @pytest.mark.parametrize(['a', 'b', 'expected'], 806s [ 806s ('root', 'root', False), 806s ('child1', 'root', True), 806s ('root', 'child1', False), 806s ('grandchild1', 'root', True), 806s ('child1', 'child2', False), 806s ('root', 'disjoint', False), 806s ] 806s ) 806s def test_descendant_of(pygit2_repo, a, b, expected): 806s """ 806s General test for pygit2.Repository.descendant_of(). 806s 806s This test was formerly for a temporary alternative implementation of 806s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 806s use until we updated our pinning to use a newer version of pygit2 that 806s included the pygit2.Repository.descendant_of() method. After the pinning 806s was removed and this implementation replacement took place, we kept the 806s test to ensure that actual behaviour did not change. 806s 806s This unit tests validate_upload_tag() for various parameterized cases. The 806s paramater sets assume the repository structure encoded in the Repo() call 806s below. 806s 806s :param pygit2.Repository pygit2_repo: fixture providing a temporary 806s pygit2.Repository instance to use 806s :param str a: tag name of the first commit to pass to descendant_of() 806s :param str b: tag name of the second commit to pass to descendant_of() 806s :param bool expected: the expected result of descendant_of() 806s """ 806s Repo( 806s # Unique message parameters are used in each entry here in order to 806s # ensure that otherwise-identical commits do not end up being the same 806s # commit (with the same hash, etc). 806s commits=[ 806s Commit(name='root', message='1'), 806s Commit(name='child1', parents=[Placeholder('root')], message='2'), 806s Commit(name='child2', parents=[Placeholder('root')], message='3'), 806s Commit( 806s name='grandchild1', 806s parents=[Placeholder('child1')], 806s message='4' 806s ), 806s Commit(name='disjoint', message='5'), 806s ], 806s tags={ 806s 'root': Placeholder('root'), 806s 'child1': Placeholder('child1'), 806s 'child2': Placeholder('child2'), 806s 'grandchild1': Placeholder('grandchild1'), 806s 'disjoint': Placeholder('disjoint'), 806s } 806s > ).write(pygit2_repo) 806s 806s gitubuntu/git_repository_test.py:1099: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpjtxu14m6/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s gitubuntu/repo_builder.py:389: AttributeError 806s ____________________ test_descendant_of[root-child1-False] _____________________ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmpdnl9mhrv/.git/'), a = 'root' 806s b = 'child1', expected = False 806s 806s @pytest.mark.parametrize(['a', 'b', 'expected'], 806s [ 806s ('root', 'root', False), 806s ('child1', 'root', True), 806s ('root', 'child1', False), 806s ('grandchild1', 'root', True), 806s ('child1', 'child2', False), 806s ('root', 'disjoint', False), 806s ] 806s ) 806s def test_descendant_of(pygit2_repo, a, b, expected): 806s """ 806s General test for pygit2.Repository.descendant_of(). 806s 806s This test was formerly for a temporary alternative implementation of 806s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 806s use until we updated our pinning to use a newer version of pygit2 that 806s included the pygit2.Repository.descendant_of() method. After the pinning 806s was removed and this implementation replacement took place, we kept the 806s test to ensure that actual behaviour did not change. 806s 806s This unit tests validate_upload_tag() for various parameterized cases. The 806s paramater sets assume the repository structure encoded in the Repo() call 806s below. 806s 806s :param pygit2.Repository pygit2_repo: fixture providing a temporary 806s pygit2.Repository instance to use 806s :param str a: tag name of the first commit to pass to descendant_of() 806s :param str b: tag name of the second commit to pass to descendant_of() 806s :param bool expected: the expected result of descendant_of() 806s """ 806s Repo( 806s # Unique message parameters are used in each entry here in order to 806s # ensure that otherwise-identical commits do not end up being the same 806s # commit (with the same hash, etc). 806s commits=[ 806s Commit(name='root', message='1'), 806s Commit(name='child1', parents=[Placeholder('root')], message='2'), 806s Commit(name='child2', parents=[Placeholder('root')], message='3'), 806s Commit( 806s name='grandchild1', 806s parents=[Placeholder('child1')], 806s message='4' 806s ), 806s Commit(name='disjoint', message='5'), 806s ], 806s tags={ 806s 'root': Placeholder('root'), 806s 'child1': Placeholder('child1'), 806s 'child2': Placeholder('child2'), 806s 'grandchild1': Placeholder('grandchild1'), 806s 'disjoint': Placeholder('disjoint'), 806s } 806s > ).write(pygit2_repo) 806s 806s gitubuntu/git_repository_test.py:1099: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpdnl9mhrv/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s gitubuntu/repo_builder.py:389: AttributeError 806s __________________ test_descendant_of[grandchild1-root-True] ___________________ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmpjkx79zmz/.git/'), a = 'grandchild1' 806s b = 'root', expected = True 806s 806s @pytest.mark.parametrize(['a', 'b', 'expected'], 806s [ 806s ('root', 'root', False), 806s ('child1', 'root', True), 806s ('root', 'child1', False), 806s ('grandchild1', 'root', True), 806s ('child1', 'child2', False), 806s ('root', 'disjoint', False), 806s ] 806s ) 806s def test_descendant_of(pygit2_repo, a, b, expected): 806s """ 806s General test for pygit2.Repository.descendant_of(). 806s 806s This test was formerly for a temporary alternative implementation of 806s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 806s use until we updated our pinning to use a newer version of pygit2 that 806s included the pygit2.Repository.descendant_of() method. After the pinning 806s was removed and this implementation replacement took place, we kept the 806s test to ensure that actual behaviour did not change. 806s 806s This unit tests validate_upload_tag() for various parameterized cases. The 806s paramater sets assume the repository structure encoded in the Repo() call 806s below. 806s 806s :param pygit2.Repository pygit2_repo: fixture providing a temporary 806s pygit2.Repository instance to use 806s :param str a: tag name of the first commit to pass to descendant_of() 806s :param str b: tag name of the second commit to pass to descendant_of() 806s :param bool expected: the expected result of descendant_of() 806s """ 806s Repo( 806s # Unique message parameters are used in each entry here in order to 806s # ensure that otherwise-identical commits do not end up being the same 806s # commit (with the same hash, etc). 806s commits=[ 806s Commit(name='root', message='1'), 806s Commit(name='child1', parents=[Placeholder('root')], message='2'), 806s Commit(name='child2', parents=[Placeholder('root')], message='3'), 806s Commit( 806s name='grandchild1', 806s parents=[Placeholder('child1')], 806s message='4' 806s ), 806s Commit(name='disjoint', message='5'), 806s ], 806s tags={ 806s 'root': Placeholder('root'), 806s 'child1': Placeholder('child1'), 806s 'child2': Placeholder('child2'), 806s 'grandchild1': Placeholder('grandchild1'), 806s 'disjoint': Placeholder('disjoint'), 806s } 806s > ).write(pygit2_repo) 806s 806s gitubuntu/git_repository_test.py:1099: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpjkx79zmz/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s gitubuntu/repo_builder.py:389: AttributeError 806s ___________________ test_descendant_of[child1-child2-False] ____________________ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmpi19lap77/.git/'), a = 'child1' 806s b = 'child2', expected = False 806s 806s @pytest.mark.parametrize(['a', 'b', 'expected'], 806s [ 806s ('root', 'root', False), 806s ('child1', 'root', True), 806s ('root', 'child1', False), 806s ('grandchild1', 'root', True), 806s ('child1', 'child2', False), 806s ('root', 'disjoint', False), 806s ] 806s ) 806s def test_descendant_of(pygit2_repo, a, b, expected): 806s """ 806s General test for pygit2.Repository.descendant_of(). 806s 806s This test was formerly for a temporary alternative implementation of 806s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 806s use until we updated our pinning to use a newer version of pygit2 that 806s included the pygit2.Repository.descendant_of() method. After the pinning 806s was removed and this implementation replacement took place, we kept the 806s test to ensure that actual behaviour did not change. 806s 806s This unit tests validate_upload_tag() for various parameterized cases. The 806s paramater sets assume the repository structure encoded in the Repo() call 806s below. 806s 806s :param pygit2.Repository pygit2_repo: fixture providing a temporary 806s pygit2.Repository instance to use 806s :param str a: tag name of the first commit to pass to descendant_of() 806s :param str b: tag name of the second commit to pass to descendant_of() 806s :param bool expected: the expected result of descendant_of() 806s """ 806s Repo( 806s # Unique message parameters are used in each entry here in order to 806s # ensure that otherwise-identical commits do not end up being the same 806s # commit (with the same hash, etc). 806s commits=[ 806s Commit(name='root', message='1'), 806s Commit(name='child1', parents=[Placeholder('root')], message='2'), 806s Commit(name='child2', parents=[Placeholder('root')], message='3'), 806s Commit( 806s name='grandchild1', 806s parents=[Placeholder('child1')], 806s message='4' 806s ), 806s Commit(name='disjoint', message='5'), 806s ], 806s tags={ 806s 'root': Placeholder('root'), 806s 'child1': Placeholder('child1'), 806s 'child2': Placeholder('child2'), 806s 'grandchild1': Placeholder('grandchild1'), 806s 'disjoint': Placeholder('disjoint'), 806s } 806s > ).write(pygit2_repo) 806s 806s gitubuntu/git_repository_test.py:1099: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpi19lap77/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s gitubuntu/repo_builder.py:389: AttributeError 806s ___________________ test_descendant_of[root-disjoint-False] ____________________ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmpzq1phsh3/.git/'), a = 'root' 806s b = 'disjoint', expected = False 806s 806s @pytest.mark.parametrize(['a', 'b', 'expected'], 806s [ 806s ('root', 'root', False), 806s ('child1', 'root', True), 806s ('root', 'child1', False), 806s ('grandchild1', 'root', True), 806s ('child1', 'child2', False), 806s ('root', 'disjoint', False), 806s ] 806s ) 806s def test_descendant_of(pygit2_repo, a, b, expected): 806s """ 806s General test for pygit2.Repository.descendant_of(). 806s 806s This test was formerly for a temporary alternative implementation of 806s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 806s use until we updated our pinning to use a newer version of pygit2 that 806s included the pygit2.Repository.descendant_of() method. After the pinning 806s was removed and this implementation replacement took place, we kept the 806s test to ensure that actual behaviour did not change. 806s 806s This unit tests validate_upload_tag() for various parameterized cases. The 806s paramater sets assume the repository structure encoded in the Repo() call 806s below. 806s 806s :param pygit2.Repository pygit2_repo: fixture providing a temporary 806s pygit2.Repository instance to use 806s :param str a: tag name of the first commit to pass to descendant_of() 806s :param str b: tag name of the second commit to pass to descendant_of() 806s :param bool expected: the expected result of descendant_of() 806s """ 806s Repo( 806s # Unique message parameters are used in each entry here in order to 806s # ensure that otherwise-identical commits do not end up being the same 806s # commit (with the same hash, etc). 806s commits=[ 806s Commit(name='root', message='1'), 806s Commit(name='child1', parents=[Placeholder('root')], message='2'), 806s Commit(name='child2', parents=[Placeholder('root')], message='3'), 806s Commit( 806s name='grandchild1', 806s parents=[Placeholder('child1')], 806s message='4' 806s ), 806s Commit(name='disjoint', message='5'), 806s ], 806s tags={ 806s 'root': Placeholder('root'), 806s 'child1': Placeholder('child1'), 806s 'child2': Placeholder('child2'), 806s 'grandchild1': Placeholder('grandchild1'), 806s 'disjoint': Placeholder('disjoint'), 806s } 806s > ).write(pygit2_repo) 806s 806s gitubuntu/git_repository_test.py:1099: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpzq1phsh3/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s gitubuntu/repo_builder.py:389: AttributeError 806s _______________________________ test_create_tag ________________________________ 806s 806s repo = 806s 806s def test_create_tag(repo): 806s """create_tag() should create a tag 806s 806s :param GitUbuntuRepository repo: fixture providing a temporary 806s GitUbuntuRepository instance to use 806s """ 806s Repo( 806s commits=[Commit(name='root')], 806s tags={'root': Placeholder('root')}, 806s > ).write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository_test.py:1127: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmp7v4n4ilt/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s __________________________ test_get_all_reimport_tags __________________________ 806s 806s repo = 806s 806s def test_get_all_reimport_tags(repo): 806s """get_all_reimport_tags() should return only matching reimport tags 806s 806s :param GitUbuntuRepository repo: fixture providing a temporary 806s GitUbuntuRepository instance to use 806s """ 806s Repo( 806s commits=[Commit(name='root')], 806s tags={ 806s 'importer/reimport/import/1/0': Placeholder('root'), 806s 'importer/reimport/import/1/1': Placeholder('root'), 806s 806s # This entry must not be identified as one of version 1's reimport 806s # tags, even though it shares the same base prefix. 806s 'importer/reimport/import/11/0': Placeholder('root'), 806s }, 806s > ).write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository_test.py:1165: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpfnfg3i85/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ______________________________ test_get_head_info ______________________________ 806s 806s repo = 806s 806s def test_get_head_info(repo): 806s """get_head_info() extracts expected commit and version info from the head 806s commit 806s """ 806s Repo( 806s commits=[ 806s Commit(name='foo', tree=SourceTree(source=Source())), 806s ], 806s branches={ 806s 'importer/ubuntu/foo': Placeholder('foo'), 806s 'importer/debian/bar': Placeholder('foo'), 806s 'other/ubuntu/baz': Placeholder('foo'), 806s }, 806s ).write(repo.raw_repo) 806s foo_commit_id = ( 806s repo.raw_repo 806s .lookup_reference('refs/heads/importer/ubuntu/foo') 806s .peel(pygit2.Commit).id 806s ) 806s > assert repo.get_head_info('ubuntu', 'importer') == { 806s 'importer/ubuntu/foo': HeadInfoItem( 806s version='1-1', 806s commit_time=0, 806s commit_id=foo_commit_id, 806s ), 806s } 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository_test.py:1193: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:1952: in get_head_info 806s self.get_changelog_versions_from_treeish(str(head.peel().id)) 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:1888: in get_changelog_versions_from_treeish 806s changelog = self.get_changelog_from_treeish(treeish_string) 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 806s return Changelog.from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:569: in from_treeish 806s blob = follow_symlinks_to_blob( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpo54yzr4b/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_import_unapplied_spi_tags[input_repo0-expected_output_refs0-validation_repo_delta0-validation_repo_expected_identical_refs0-True] _ 806s 806s get_import_commit_msg_mock = 806s get_import_tag_msg_mock = 806s repo = 806s input_repo = 806s 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'] 806s validation_repo_delta = {'update_branches': {'importer/ubuntu/trusty': }} 806s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty-proposed', 'refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1'] 806s reuse = True 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'expected_output_refs', 806s 'validation_repo_delta', 806s 'validation_repo_expected_identical_refs', 806s 'reuse', 806s ], 806s [ 806s # 1) An existing import tag (or reimport tag) with the same Git tree 806s # - Reuse import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[Commit.from_spec(name='import')], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('import'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s ], 806s # reuse: 806s True, 806s ), 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='import tag contents', 806s ), 806s Commit.from_spec(name='reimport'), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 2) An existing import tag with a different Git tree and an existing 806s # upload tag with the same Git tree 806s # - Reuse upload tag, create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s Commit.from_spec(name='upload'), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-1': Placeholder('upload'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('upload'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('upload'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 3) An existing import tag with a different Git tree and an existing 806s # upload tag with a different Git tree 806s # - Create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s Commit.from_spec( 806s name='upload', 806s mutate='The upload tag contents', 806s ), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-1': Placeholder('upload'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [Commit.from_spec( 806s name='reimport', 806s message='Test commit (new)', 806s )], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 4) An existing import tag with a different Git tree and no upload tag 806s # - Create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [Commit.from_spec( 806s name='reimport', 806s message='Test commit (new)', 806s )], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 5) No import tag and an existing upload tag with the same Git tree 806s # - Reuse upload tag, create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[Commit.from_spec(name='upload')], 806s tags={'importer/upload/1-1': Placeholder('upload')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('upload'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('upload'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 6) No import tag and an existing upload tag with a different Git tree 806s # - Create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='upload', 806s mutate='The upload tag contents', 806s ), 806s ], 806s tags={'importer/upload/1-1': Placeholder('upload')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='publish', 806s message='Test commit (new)', 806s ), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('publish'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('publish'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 7) No import tags or upload tags 806s # - Create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo(), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='publish', 806s message='Test commit (new)', 806s ), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('publish'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('publish'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1' 806s ], 806s # reuse: 806s False, 806s ), 806s ] 806s ) 806s @patch('gitubuntu.importer.get_import_tag_msg') 806s @patch('gitubuntu.importer.get_import_commit_msg') 806s def test_import_unapplied_spi_tags( 806s get_import_commit_msg_mock, 806s get_import_tag_msg_mock, 806s repo, 806s input_repo, 806s expected_output_refs, 806s validation_repo_delta, 806s validation_repo_expected_identical_refs, 806s reuse, 806s ): 806s """Test that unapplied tags are correctly created, adjusted and/or reused 806s 806s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 806s that determines the commit message to use for a given import 806s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 806s that determines the tag message to use for a given import 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param list(str) expected_output_refs: refs that must exist in the output 806s repository 806s :param dict validation_repo_delta: how to transform the input 806s repository into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_identical_refs: refs that must be 806s identical between the validation repository and the output repository 806s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 806s one supplied by the input repository (assumed to have a commit message 806s of "Test commit") and not one created by the importer in this run 806s (arranged by this test to have a different commit message) 806s 806s The input repository data is written into the output repository and then a 806s fake non-native source package publication of version 1-1 in the Trusty 806s release pocket is imported into it by calling import_unapplied_spi() 806s directly. expected_output_refs, validation_repo_expected_identical_refs and 806s reuse are then asserted. It is further asserted that no other refs exist in 806s the output repository except for those listed in expected_output_refs and 806s validation_repo_expected_identical_refs. 806s """ 806s # Match the repo_builder objects 806s get_import_tag_msg_mock.return_value = 'Test tag' 806s # Importantly, the following commit message must not be the same as the 806s # commit messages used by the test input repository commits, so that we can 806s # later detect the difference between commits that were already there and 806s # new commits created by the importer for the purposes of asserting the 806s # reuse parameter correctly. 806s get_import_commit_msg_mock.return_value = b'Test commit (new)' 806s 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_tag_test.py:463: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpala1s1xd/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_import_unapplied_spi_tags[input_repo1-expected_output_refs1-validation_repo_delta1-validation_repo_expected_identical_refs1-True] _ 806s 806s get_import_commit_msg_mock = 806s get_import_tag_msg_mock = 806s repo = 806s input_repo = 806s 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'] 806s validation_repo_delta = {'update_branches': {'importer/ubuntu/trusty': }} 806s 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'] 806s reuse = True 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'expected_output_refs', 806s 'validation_repo_delta', 806s 'validation_repo_expected_identical_refs', 806s 'reuse', 806s ], 806s [ 806s # 1) An existing import tag (or reimport tag) with the same Git tree 806s # - Reuse import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[Commit.from_spec(name='import')], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('import'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s ], 806s # reuse: 806s True, 806s ), 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='import tag contents', 806s ), 806s Commit.from_spec(name='reimport'), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 2) An existing import tag with a different Git tree and an existing 806s # upload tag with the same Git tree 806s # - Reuse upload tag, create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s Commit.from_spec(name='upload'), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-1': Placeholder('upload'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('upload'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('upload'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 3) An existing import tag with a different Git tree and an existing 806s # upload tag with a different Git tree 806s # - Create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s Commit.from_spec( 806s name='upload', 806s mutate='The upload tag contents', 806s ), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-1': Placeholder('upload'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [Commit.from_spec( 806s name='reimport', 806s message='Test commit (new)', 806s )], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 4) An existing import tag with a different Git tree and no upload tag 806s # - Create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [Commit.from_spec( 806s name='reimport', 806s message='Test commit (new)', 806s )], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 5) No import tag and an existing upload tag with the same Git tree 806s # - Reuse upload tag, create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[Commit.from_spec(name='upload')], 806s tags={'importer/upload/1-1': Placeholder('upload')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('upload'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('upload'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 6) No import tag and an existing upload tag with a different Git tree 806s # - Create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='upload', 806s mutate='The upload tag contents', 806s ), 806s ], 806s tags={'importer/upload/1-1': Placeholder('upload')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='publish', 806s message='Test commit (new)', 806s ), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('publish'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('publish'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 7) No import tags or upload tags 806s # - Create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo(), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='publish', 806s message='Test commit (new)', 806s ), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('publish'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('publish'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1' 806s ], 806s # reuse: 806s False, 806s ), 806s ] 806s ) 806s @patch('gitubuntu.importer.get_import_tag_msg') 806s @patch('gitubuntu.importer.get_import_commit_msg') 806s def test_import_unapplied_spi_tags( 806s get_import_commit_msg_mock, 806s get_import_tag_msg_mock, 806s repo, 806s input_repo, 806s expected_output_refs, 806s validation_repo_delta, 806s validation_repo_expected_identical_refs, 806s reuse, 806s ): 806s """Test that unapplied tags are correctly created, adjusted and/or reused 806s 806s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 806s that determines the commit message to use for a given import 806s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 806s that determines the tag message to use for a given import 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param list(str) expected_output_refs: refs that must exist in the output 806s repository 806s :param dict validation_repo_delta: how to transform the input 806s repository into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_identical_refs: refs that must be 806s identical between the validation repository and the output repository 806s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 806s one supplied by the input repository (assumed to have a commit message 806s of "Test commit") and not one created by the importer in this run 806s (arranged by this test to have a different commit message) 806s 806s The input repository data is written into the output repository and then a 806s fake non-native source package publication of version 1-1 in the Trusty 806s release pocket is imported into it by calling import_unapplied_spi() 806s directly. expected_output_refs, validation_repo_expected_identical_refs and 806s reuse are then asserted. It is further asserted that no other refs exist in 806s the output repository except for those listed in expected_output_refs and 806s validation_repo_expected_identical_refs. 806s """ 806s # Match the repo_builder objects 806s get_import_tag_msg_mock.return_value = 'Test tag' 806s # Importantly, the following commit message must not be the same as the 806s # commit messages used by the test input repository commits, so that we can 806s # later detect the difference between commits that were already there and 806s # new commits created by the importer for the purposes of asserting the 806s # reuse parameter correctly. 806s get_import_commit_msg_mock.return_value = b'Test commit (new)' 806s 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_tag_test.py:463: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpi1b3oyh9/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_import_unapplied_spi_tags[input_repo2-expected_output_refs2-validation_repo_delta2-validation_repo_expected_identical_refs2-True] _ 806s 806s get_import_commit_msg_mock = 806s get_import_tag_msg_mock = 806s repo = 806s input_repo = 806s 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'] 806s validation_repo_delta = {'update_branches': {'importer/ubuntu/trusty': }, 'update...t at 0x7babcf9f7710>, 'importer/reimport/import/1-1/1': }} 806s 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'] 806s reuse = True 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'expected_output_refs', 806s 'validation_repo_delta', 806s 'validation_repo_expected_identical_refs', 806s 'reuse', 806s ], 806s [ 806s # 1) An existing import tag (or reimport tag) with the same Git tree 806s # - Reuse import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[Commit.from_spec(name='import')], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('import'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s ], 806s # reuse: 806s True, 806s ), 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='import tag contents', 806s ), 806s Commit.from_spec(name='reimport'), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 2) An existing import tag with a different Git tree and an existing 806s # upload tag with the same Git tree 806s # - Reuse upload tag, create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s Commit.from_spec(name='upload'), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-1': Placeholder('upload'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('upload'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('upload'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 3) An existing import tag with a different Git tree and an existing 806s # upload tag with a different Git tree 806s # - Create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s Commit.from_spec( 806s name='upload', 806s mutate='The upload tag contents', 806s ), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-1': Placeholder('upload'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [Commit.from_spec( 806s name='reimport', 806s message='Test commit (new)', 806s )], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 4) An existing import tag with a different Git tree and no upload tag 806s # - Create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [Commit.from_spec( 806s name='reimport', 806s message='Test commit (new)', 806s )], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 5) No import tag and an existing upload tag with the same Git tree 806s # - Reuse upload tag, create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[Commit.from_spec(name='upload')], 806s tags={'importer/upload/1-1': Placeholder('upload')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('upload'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('upload'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 6) No import tag and an existing upload tag with a different Git tree 806s # - Create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='upload', 806s mutate='The upload tag contents', 806s ), 806s ], 806s tags={'importer/upload/1-1': Placeholder('upload')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='publish', 806s message='Test commit (new)', 806s ), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('publish'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('publish'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 7) No import tags or upload tags 806s # - Create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo(), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='publish', 806s message='Test commit (new)', 806s ), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('publish'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('publish'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1' 806s ], 806s # reuse: 806s False, 806s ), 806s ] 806s ) 806s @patch('gitubuntu.importer.get_import_tag_msg') 806s @patch('gitubuntu.importer.get_import_commit_msg') 806s def test_import_unapplied_spi_tags( 806s get_import_commit_msg_mock, 806s get_import_tag_msg_mock, 806s repo, 806s input_repo, 806s expected_output_refs, 806s validation_repo_delta, 806s validation_repo_expected_identical_refs, 806s reuse, 806s ): 806s """Test that unapplied tags are correctly created, adjusted and/or reused 806s 806s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 806s that determines the commit message to use for a given import 806s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 806s that determines the tag message to use for a given import 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param list(str) expected_output_refs: refs that must exist in the output 806s repository 806s :param dict validation_repo_delta: how to transform the input 806s repository into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_identical_refs: refs that must be 806s identical between the validation repository and the output repository 806s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 806s one supplied by the input repository (assumed to have a commit message 806s of "Test commit") and not one created by the importer in this run 806s (arranged by this test to have a different commit message) 806s 806s The input repository data is written into the output repository and then a 806s fake non-native source package publication of version 1-1 in the Trusty 806s release pocket is imported into it by calling import_unapplied_spi() 806s directly. expected_output_refs, validation_repo_expected_identical_refs and 806s reuse are then asserted. It is further asserted that no other refs exist in 806s the output repository except for those listed in expected_output_refs and 806s validation_repo_expected_identical_refs. 806s """ 806s # Match the repo_builder objects 806s get_import_tag_msg_mock.return_value = 'Test tag' 806s # Importantly, the following commit message must not be the same as the 806s # commit messages used by the test input repository commits, so that we can 806s # later detect the difference between commits that were already there and 806s # new commits created by the importer for the purposes of asserting the 806s # reuse parameter correctly. 806s get_import_commit_msg_mock.return_value = b'Test commit (new)' 806s 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_tag_test.py:463: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmphianzg4l/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_import_unapplied_spi_tags[input_repo3-expected_output_refs3-validation_repo_delta3-validation_repo_expected_identical_refs3-False] _ 806s 806s get_import_commit_msg_mock = 806s get_import_tag_msg_mock = 806s repo = 806s input_repo = 806s 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'] 806s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/ubuntu/trust...t at 0x7babcf9f7d70>, 'importer/reimport/import/1-1/1': }} 806s 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'] 806s reuse = False 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'expected_output_refs', 806s 'validation_repo_delta', 806s 'validation_repo_expected_identical_refs', 806s 'reuse', 806s ], 806s [ 806s # 1) An existing import tag (or reimport tag) with the same Git tree 806s # - Reuse import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[Commit.from_spec(name='import')], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('import'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s ], 806s # reuse: 806s True, 806s ), 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='import tag contents', 806s ), 806s Commit.from_spec(name='reimport'), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 2) An existing import tag with a different Git tree and an existing 806s # upload tag with the same Git tree 806s # - Reuse upload tag, create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s Commit.from_spec(name='upload'), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-1': Placeholder('upload'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('upload'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('upload'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 3) An existing import tag with a different Git tree and an existing 806s # upload tag with a different Git tree 806s # - Create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s Commit.from_spec( 806s name='upload', 806s mutate='The upload tag contents', 806s ), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-1': Placeholder('upload'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [Commit.from_spec( 806s name='reimport', 806s message='Test commit (new)', 806s )], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 4) An existing import tag with a different Git tree and no upload tag 806s # - Create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [Commit.from_spec( 806s name='reimport', 806s message='Test commit (new)', 806s )], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 5) No import tag and an existing upload tag with the same Git tree 806s # - Reuse upload tag, create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[Commit.from_spec(name='upload')], 806s tags={'importer/upload/1-1': Placeholder('upload')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('upload'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('upload'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 6) No import tag and an existing upload tag with a different Git tree 806s # - Create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='upload', 806s mutate='The upload tag contents', 806s ), 806s ], 806s tags={'importer/upload/1-1': Placeholder('upload')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='publish', 806s message='Test commit (new)', 806s ), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('publish'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('publish'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 7) No import tags or upload tags 806s # - Create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo(), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='publish', 806s message='Test commit (new)', 806s ), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('publish'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('publish'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1' 806s ], 806s # reuse: 806s False, 806s ), 806s ] 806s ) 806s @patch('gitubuntu.importer.get_import_tag_msg') 806s @patch('gitubuntu.importer.get_import_commit_msg') 806s def test_import_unapplied_spi_tags( 806s get_import_commit_msg_mock, 806s get_import_tag_msg_mock, 806s repo, 806s input_repo, 806s expected_output_refs, 806s validation_repo_delta, 806s validation_repo_expected_identical_refs, 806s reuse, 806s ): 806s """Test that unapplied tags are correctly created, adjusted and/or reused 806s 806s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 806s that determines the commit message to use for a given import 806s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 806s that determines the tag message to use for a given import 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param list(str) expected_output_refs: refs that must exist in the output 806s repository 806s :param dict validation_repo_delta: how to transform the input 806s repository into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_identical_refs: refs that must be 806s identical between the validation repository and the output repository 806s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 806s one supplied by the input repository (assumed to have a commit message 806s of "Test commit") and not one created by the importer in this run 806s (arranged by this test to have a different commit message) 806s 806s The input repository data is written into the output repository and then a 806s fake non-native source package publication of version 1-1 in the Trusty 806s release pocket is imported into it by calling import_unapplied_spi() 806s directly. expected_output_refs, validation_repo_expected_identical_refs and 806s reuse are then asserted. It is further asserted that no other refs exist in 806s the output repository except for those listed in expected_output_refs and 806s validation_repo_expected_identical_refs. 806s """ 806s # Match the repo_builder objects 806s get_import_tag_msg_mock.return_value = 'Test tag' 806s # Importantly, the following commit message must not be the same as the 806s # commit messages used by the test input repository commits, so that we can 806s # later detect the difference between commits that were already there and 806s # new commits created by the importer for the purposes of asserting the 806s # reuse parameter correctly. 806s get_import_commit_msg_mock.return_value = b'Test commit (new)' 806s 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_tag_test.py:463: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmppa2sax3k/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_import_unapplied_spi_tags[input_repo4-expected_output_refs4-validation_repo_delta4-validation_repo_expected_identical_refs4-False] _ 806s 806s get_import_commit_msg_mock = 806s get_import_tag_msg_mock = 806s repo = 806s input_repo = 806s 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'] 806s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/ubuntu/trust...t at 0x7babcf93d3a0>, 'importer/reimport/import/1-1/1': }} 806s 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'] 806s reuse = False 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'expected_output_refs', 806s 'validation_repo_delta', 806s 'validation_repo_expected_identical_refs', 806s 'reuse', 806s ], 806s [ 806s # 1) An existing import tag (or reimport tag) with the same Git tree 806s # - Reuse import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[Commit.from_spec(name='import')], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('import'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s ], 806s # reuse: 806s True, 806s ), 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='import tag contents', 806s ), 806s Commit.from_spec(name='reimport'), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 2) An existing import tag with a different Git tree and an existing 806s # upload tag with the same Git tree 806s # - Reuse upload tag, create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s Commit.from_spec(name='upload'), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-1': Placeholder('upload'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('upload'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('upload'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 3) An existing import tag with a different Git tree and an existing 806s # upload tag with a different Git tree 806s # - Create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s Commit.from_spec( 806s name='upload', 806s mutate='The upload tag contents', 806s ), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-1': Placeholder('upload'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [Commit.from_spec( 806s name='reimport', 806s message='Test commit (new)', 806s )], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 4) An existing import tag with a different Git tree and no upload tag 806s # - Create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [Commit.from_spec( 806s name='reimport', 806s message='Test commit (new)', 806s )], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 5) No import tag and an existing upload tag with the same Git tree 806s # - Reuse upload tag, create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[Commit.from_spec(name='upload')], 806s tags={'importer/upload/1-1': Placeholder('upload')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('upload'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('upload'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 6) No import tag and an existing upload tag with a different Git tree 806s # - Create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='upload', 806s mutate='The upload tag contents', 806s ), 806s ], 806s tags={'importer/upload/1-1': Placeholder('upload')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='publish', 806s message='Test commit (new)', 806s ), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('publish'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('publish'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 7) No import tags or upload tags 806s # - Create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo(), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='publish', 806s message='Test commit (new)', 806s ), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('publish'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('publish'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1' 806s ], 806s # reuse: 806s False, 806s ), 806s ] 806s ) 806s @patch('gitubuntu.importer.get_import_tag_msg') 806s @patch('gitubuntu.importer.get_import_commit_msg') 806s def test_import_unapplied_spi_tags( 806s get_import_commit_msg_mock, 806s get_import_tag_msg_mock, 806s repo, 806s input_repo, 806s expected_output_refs, 806s validation_repo_delta, 806s validation_repo_expected_identical_refs, 806s reuse, 806s ): 806s """Test that unapplied tags are correctly created, adjusted and/or reused 806s 806s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 806s that determines the commit message to use for a given import 806s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 806s that determines the tag message to use for a given import 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param list(str) expected_output_refs: refs that must exist in the output 806s repository 806s :param dict validation_repo_delta: how to transform the input 806s repository into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_identical_refs: refs that must be 806s identical between the validation repository and the output repository 806s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 806s one supplied by the input repository (assumed to have a commit message 806s of "Test commit") and not one created by the importer in this run 806s (arranged by this test to have a different commit message) 806s 806s The input repository data is written into the output repository and then a 806s fake non-native source package publication of version 1-1 in the Trusty 806s release pocket is imported into it by calling import_unapplied_spi() 806s directly. expected_output_refs, validation_repo_expected_identical_refs and 806s reuse are then asserted. It is further asserted that no other refs exist in 806s the output repository except for those listed in expected_output_refs and 806s validation_repo_expected_identical_refs. 806s """ 806s # Match the repo_builder objects 806s get_import_tag_msg_mock.return_value = 'Test tag' 806s # Importantly, the following commit message must not be the same as the 806s # commit messages used by the test input repository commits, so that we can 806s # later detect the difference between commits that were already there and 806s # new commits created by the importer for the purposes of asserting the 806s # reuse parameter correctly. 806s get_import_commit_msg_mock.return_value = b'Test commit (new)' 806s 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_tag_test.py:463: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmp6n8zye9o/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_import_unapplied_spi_tags[input_repo5-expected_output_refs5-validation_repo_delta5-validation_repo_expected_identical_refs5-True] _ 806s 806s get_import_commit_msg_mock = 806s get_import_tag_msg_mock = 806s repo = 806s input_repo = 806s 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'] 806s validation_repo_delta = {'update_branches': {'importer/ubuntu/trusty': }, 'update_tags': {'importer/import/1-1': }} 806s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1', 'refs/tags/importer/upload/1-1'] 806s reuse = True 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'expected_output_refs', 806s 'validation_repo_delta', 806s 'validation_repo_expected_identical_refs', 806s 'reuse', 806s ], 806s [ 806s # 1) An existing import tag (or reimport tag) with the same Git tree 806s # - Reuse import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[Commit.from_spec(name='import')], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('import'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s ], 806s # reuse: 806s True, 806s ), 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='import tag contents', 806s ), 806s Commit.from_spec(name='reimport'), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 2) An existing import tag with a different Git tree and an existing 806s # upload tag with the same Git tree 806s # - Reuse upload tag, create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s Commit.from_spec(name='upload'), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-1': Placeholder('upload'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('upload'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('upload'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 3) An existing import tag with a different Git tree and an existing 806s # upload tag with a different Git tree 806s # - Create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s Commit.from_spec( 806s name='upload', 806s mutate='The upload tag contents', 806s ), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-1': Placeholder('upload'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [Commit.from_spec( 806s name='reimport', 806s message='Test commit (new)', 806s )], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 4) An existing import tag with a different Git tree and no upload tag 806s # - Create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [Commit.from_spec( 806s name='reimport', 806s message='Test commit (new)', 806s )], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 5) No import tag and an existing upload tag with the same Git tree 806s # - Reuse upload tag, create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[Commit.from_spec(name='upload')], 806s tags={'importer/upload/1-1': Placeholder('upload')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('upload'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('upload'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 6) No import tag and an existing upload tag with a different Git tree 806s # - Create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='upload', 806s mutate='The upload tag contents', 806s ), 806s ], 806s tags={'importer/upload/1-1': Placeholder('upload')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='publish', 806s message='Test commit (new)', 806s ), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('publish'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('publish'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 7) No import tags or upload tags 806s # - Create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo(), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='publish', 806s message='Test commit (new)', 806s ), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('publish'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('publish'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1' 806s ], 806s # reuse: 806s False, 806s ), 806s ] 806s ) 806s @patch('gitubuntu.importer.get_import_tag_msg') 806s @patch('gitubuntu.importer.get_import_commit_msg') 806s def test_import_unapplied_spi_tags( 806s get_import_commit_msg_mock, 806s get_import_tag_msg_mock, 806s repo, 806s input_repo, 806s expected_output_refs, 806s validation_repo_delta, 806s validation_repo_expected_identical_refs, 806s reuse, 806s ): 806s """Test that unapplied tags are correctly created, adjusted and/or reused 806s 806s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 806s that determines the commit message to use for a given import 806s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 806s that determines the tag message to use for a given import 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param list(str) expected_output_refs: refs that must exist in the output 806s repository 806s :param dict validation_repo_delta: how to transform the input 806s repository into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_identical_refs: refs that must be 806s identical between the validation repository and the output repository 806s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 806s one supplied by the input repository (assumed to have a commit message 806s of "Test commit") and not one created by the importer in this run 806s (arranged by this test to have a different commit message) 806s 806s The input repository data is written into the output repository and then a 806s fake non-native source package publication of version 1-1 in the Trusty 806s release pocket is imported into it by calling import_unapplied_spi() 806s directly. expected_output_refs, validation_repo_expected_identical_refs and 806s reuse are then asserted. It is further asserted that no other refs exist in 806s the output repository except for those listed in expected_output_refs and 806s validation_repo_expected_identical_refs. 806s """ 806s # Match the repo_builder objects 806s get_import_tag_msg_mock.return_value = 'Test tag' 806s # Importantly, the following commit message must not be the same as the 806s # commit messages used by the test input repository commits, so that we can 806s # later detect the difference between commits that were already there and 806s # new commits created by the importer for the purposes of asserting the 806s # reuse parameter correctly. 806s get_import_commit_msg_mock.return_value = b'Test commit (new)' 806s 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_tag_test.py:463: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpzfh2foqu/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_import_unapplied_spi_tags[input_repo6-expected_output_refs6-validation_repo_delta6-validation_repo_expected_identical_refs6-False] _ 806s 806s get_import_commit_msg_mock = 806s get_import_tag_msg_mock = 806s repo = 806s input_repo = 806s 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'] 806s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/ubuntu/trust...x7babcf93c200>}, 'update_tags': {'importer/import/1-1': }} 806s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1', 'refs/tags/importer/upload/1-1'] 806s reuse = False 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'expected_output_refs', 806s 'validation_repo_delta', 806s 'validation_repo_expected_identical_refs', 806s 'reuse', 806s ], 806s [ 806s # 1) An existing import tag (or reimport tag) with the same Git tree 806s # - Reuse import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[Commit.from_spec(name='import')], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('import'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s ], 806s # reuse: 806s True, 806s ), 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='import tag contents', 806s ), 806s Commit.from_spec(name='reimport'), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 2) An existing import tag with a different Git tree and an existing 806s # upload tag with the same Git tree 806s # - Reuse upload tag, create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s Commit.from_spec(name='upload'), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-1': Placeholder('upload'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('upload'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('upload'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 3) An existing import tag with a different Git tree and an existing 806s # upload tag with a different Git tree 806s # - Create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s Commit.from_spec( 806s name='upload', 806s mutate='The upload tag contents', 806s ), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-1': Placeholder('upload'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [Commit.from_spec( 806s name='reimport', 806s message='Test commit (new)', 806s )], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 4) An existing import tag with a different Git tree and no upload tag 806s # - Create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [Commit.from_spec( 806s name='reimport', 806s message='Test commit (new)', 806s )], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 5) No import tag and an existing upload tag with the same Git tree 806s # - Reuse upload tag, create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[Commit.from_spec(name='upload')], 806s tags={'importer/upload/1-1': Placeholder('upload')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('upload'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('upload'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 6) No import tag and an existing upload tag with a different Git tree 806s # - Create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='upload', 806s mutate='The upload tag contents', 806s ), 806s ], 806s tags={'importer/upload/1-1': Placeholder('upload')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='publish', 806s message='Test commit (new)', 806s ), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('publish'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('publish'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 7) No import tags or upload tags 806s # - Create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo(), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='publish', 806s message='Test commit (new)', 806s ), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('publish'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('publish'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1' 806s ], 806s # reuse: 806s False, 806s ), 806s ] 806s ) 806s @patch('gitubuntu.importer.get_import_tag_msg') 806s @patch('gitubuntu.importer.get_import_commit_msg') 806s def test_import_unapplied_spi_tags( 806s get_import_commit_msg_mock, 806s get_import_tag_msg_mock, 806s repo, 806s input_repo, 806s expected_output_refs, 806s validation_repo_delta, 806s validation_repo_expected_identical_refs, 806s reuse, 806s ): 806s """Test that unapplied tags are correctly created, adjusted and/or reused 806s 806s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 806s that determines the commit message to use for a given import 806s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 806s that determines the tag message to use for a given import 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param list(str) expected_output_refs: refs that must exist in the output 806s repository 806s :param dict validation_repo_delta: how to transform the input 806s repository into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_identical_refs: refs that must be 806s identical between the validation repository and the output repository 806s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 806s one supplied by the input repository (assumed to have a commit message 806s of "Test commit") and not one created by the importer in this run 806s (arranged by this test to have a different commit message) 806s 806s The input repository data is written into the output repository and then a 806s fake non-native source package publication of version 1-1 in the Trusty 806s release pocket is imported into it by calling import_unapplied_spi() 806s directly. expected_output_refs, validation_repo_expected_identical_refs and 806s reuse are then asserted. It is further asserted that no other refs exist in 806s the output repository except for those listed in expected_output_refs and 806s validation_repo_expected_identical_refs. 806s """ 806s # Match the repo_builder objects 806s get_import_tag_msg_mock.return_value = 'Test tag' 806s # Importantly, the following commit message must not be the same as the 806s # commit messages used by the test input repository commits, so that we can 806s # later detect the difference between commits that were already there and 806s # new commits created by the importer for the purposes of asserting the 806s # reuse parameter correctly. 806s get_import_commit_msg_mock.return_value = b'Test commit (new)' 806s 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_tag_test.py:463: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmp0gjdhym2/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_import_unapplied_spi_tags[input_repo7-expected_output_refs7-validation_repo_delta7-validation_repo_expected_identical_refs7-False] _ 806s 806s get_import_commit_msg_mock = 806s get_import_tag_msg_mock = 806s repo = 806s input_repo = 806s 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'] 806s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/ubuntu/trust...x7babcf93c500>}, 'update_tags': {'importer/import/1-1': }} 806s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1'] 806s reuse = False 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'expected_output_refs', 806s 'validation_repo_delta', 806s 'validation_repo_expected_identical_refs', 806s 'reuse', 806s ], 806s [ 806s # 1) An existing import tag (or reimport tag) with the same Git tree 806s # - Reuse import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[Commit.from_spec(name='import')], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('import'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s ], 806s # reuse: 806s True, 806s ), 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='import tag contents', 806s ), 806s Commit.from_spec(name='reimport'), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 2) An existing import tag with a different Git tree and an existing 806s # upload tag with the same Git tree 806s # - Reuse upload tag, create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s Commit.from_spec(name='upload'), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-1': Placeholder('upload'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('upload'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('upload'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 3) An existing import tag with a different Git tree and an existing 806s # upload tag with a different Git tree 806s # - Create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s Commit.from_spec( 806s name='upload', 806s mutate='The upload tag contents', 806s ), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-1': Placeholder('upload'), 806s }, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [Commit.from_spec( 806s name='reimport', 806s message='Test commit (new)', 806s )], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 4) An existing import tag with a different Git tree and no upload tag 806s # - Create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='import', 806s mutate='The import tag contents', 806s ), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 806s }, 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [Commit.from_spec( 806s name='reimport', 806s message='Test commit (new)', 806s )], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('reimport'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty-proposed', 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 5) No import tag and an existing upload tag with the same Git tree 806s # - Reuse upload tag, create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[Commit.from_spec(name='upload')], 806s tags={'importer/upload/1-1': Placeholder('upload')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('upload'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('upload'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 6) No import tag and an existing upload tag with a different Git tree 806s # - Create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='upload', 806s mutate='The upload tag contents', 806s ), 806s ], 806s tags={'importer/upload/1-1': Placeholder('upload')}, 806s ), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='publish', 806s message='Test commit (new)', 806s ), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('publish'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('publish'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/upload/1-1', 806s ], 806s # reuse: 806s False, 806s ), 806s 806s # 7) No import tags or upload tags 806s # - Create import tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo(), 806s # expected_output_refs: 806s [ 806s 'refs/heads/do-not-push', 806s 'refs/tags/importer/upstream/ubuntu/1.gz', 806s 'refs/heads/importer/importer/ubuntu/dsc', 806s 'refs/heads/importer/importer/ubuntu/pristine-tar', 806s 'refs/notes/importer/changelog', 806s 'refs/notes/importer/importer', 806s ], 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='publish', 806s message='Test commit (new)', 806s ), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('publish'), 806s }, 806s 'update_branches': { 806s 'importer/ubuntu/trusty': Placeholder('publish'), 806s }, 806s }, 806s # validation_repo_expected_identical_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1' 806s ], 806s # reuse: 806s False, 806s ), 806s ] 806s ) 806s @patch('gitubuntu.importer.get_import_tag_msg') 806s @patch('gitubuntu.importer.get_import_commit_msg') 806s def test_import_unapplied_spi_tags( 806s get_import_commit_msg_mock, 806s get_import_tag_msg_mock, 806s repo, 806s input_repo, 806s expected_output_refs, 806s validation_repo_delta, 806s validation_repo_expected_identical_refs, 806s reuse, 806s ): 806s """Test that unapplied tags are correctly created, adjusted and/or reused 806s 806s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 806s that determines the commit message to use for a given import 806s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 806s that determines the tag message to use for a given import 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param list(str) expected_output_refs: refs that must exist in the output 806s repository 806s :param dict validation_repo_delta: how to transform the input 806s repository into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_identical_refs: refs that must be 806s identical between the validation repository and the output repository 806s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 806s one supplied by the input repository (assumed to have a commit message 806s of "Test commit") and not one created by the importer in this run 806s (arranged by this test to have a different commit message) 806s 806s The input repository data is written into the output repository and then a 806s fake non-native source package publication of version 1-1 in the Trusty 806s release pocket is imported into it by calling import_unapplied_spi() 806s directly. expected_output_refs, validation_repo_expected_identical_refs and 806s reuse are then asserted. It is further asserted that no other refs exist in 806s the output repository except for those listed in expected_output_refs and 806s validation_repo_expected_identical_refs. 806s """ 806s # Match the repo_builder objects 806s get_import_tag_msg_mock.return_value = 'Test tag' 806s # Importantly, the following commit message must not be the same as the 806s # commit messages used by the test input repository commits, so that we can 806s # later detect the difference between commits that were already there and 806s # new commits created by the importer for the purposes of asserting the 806s # reuse parameter correctly. 806s get_import_commit_msg_mock.return_value = b'Test commit (new)' 806s 806s input_repo.write(repo.raw_repo) 806s 806s publish_spec = source_builder.SourceSpec( 806s version='1-1', 806s native=False, 806s ) 806s 806s with source_builder.Source(publish_spec) as dsc_path: 806s > target.import_unapplied_spi( 806s repo=repo, 806s spi=MockSPI(dsc_path, publish_spec.version), 806s namespace='importer', 806s skip_orig=False, 806s parent_overrides={}, 806s ) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_tag_test.py:471: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:2308: in import_unapplied_spi 806s import_unapplied_dsc( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 806s commit, tag = find_or_create_unapplied_commit( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 806s changelog_parents = get_unapplied_import_parents( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 806s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 806s changelog = self.get_changelog_from_treeish(treeish) 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 806s return Changelog.from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:569: in from_treeish 806s blob = follow_symlinks_to_blob( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpgtdt5trg/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_import_applied_spi_tags[input_repo0-validation_repo_delta0-validation_repo_expected_treewise_refs0-True] _ 806s 806s get_import_commit_msg_mock = 806s get_import_tag_msg_mock = 806s repo = 806s input_repo = 806s validation_repo_delta = {} 806s 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'] 806s reuse = True 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'validation_repo_delta', 806s 'validation_repo_expected_treewise_refs', 806s 'reuse', 806s ], 806s [ 806s # 1) An existing applied tag (or reimport tag) with the same Git tree 806s # - Reuse applied tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec(name='unapplied', has_patches=True), 806s Commit.from_spec(name='applied', patches_applied=True), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty': Placeholder('unapplied'), 806s 'importer/applied/ubuntu/trusty': Placeholder('applied'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('unapplied'), 806s 'importer/applied/1-1': Placeholder('applied'), 806s }, 806s ), 806s # validation_repo_delta: 806s { 806s # no output repository delta 806s }, 806s # validation_repo_expected_treewise_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/heads/importer/applied/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/applied/1-1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 2) An existing applied tag with a different Git tree 806s # - Create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='unapplied', 806s has_patches=True, 806s mutate='import tag contents', 806s ), 806s Commit.from_spec( 806s name='unapplied_reimport', 806s has_patches=True, 806s ), 806s Commit.from_spec( 806s name='applied', 806s patches_applied=True, 806s mutate='import tag contents', 806s ) 806s ], 806s branches={'importer/ubuntu/trusty': Placeholder('unapplied')}, 806s tags={ 806s 'importer/import/1-1': 806s Placeholder('unapplied'), 806s 'importer/reimport/import/1-1/0': 806s Placeholder('unapplied'), 806s 'importer/reimport/import/1-1/1': 806s Placeholder('unapplied_reimport'), 806s 'importer/applied/1-1': 806s Placeholder('applied'), 806s }, 806s ), 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='applied_reimport', 806s patches_applied=True, 806s parents=[Placeholder('unapplied_reimport')], 806s ), 806s ], 806s 'update_tags': { 806s 'importer/reimport/applied/1-1/0': 806s Placeholder('applied'), 806s 'importer/reimport/applied/1-1/1': 806s Placeholder('applied_reimport'), 806s }, 806s 'update_branches': { 806s 'importer/applied/ubuntu/trusty': 806s Placeholder('applied_reimport'), 806s }, 806s }, 806s # validation_repo_expected_treewise_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/heads/importer/applied/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s 'refs/tags/importer/applied/1-1', 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s ], 806s # reuse: 806s False, 806s 806s marks=pytest.mark.xfail(reason='LP: #1755247'), 806s ), 806s 806s # 3) No applied tags 806s # - Create applied tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[Commit.from_spec(name='unapplied', has_patches=True)], 806s branches={'importer/ubuntu/trusty': Placeholder('unapplied')}, 806s tags={'importer/import/1-1': Placeholder('unapplied')}, 806s ), 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='applied', 806s patches_applied=True, 806s parents=[Placeholder('unapplied')], 806s ), 806s ], 806s 'update_tags': { 806s 'importer/applied/1-1': Placeholder('applied') 806s }, 806s 'update_branches': { 806s 'importer/applied/ubuntu/trusty': Placeholder('applied'), 806s }, 806s }, 806s # validation_repo_expected_treewise_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/heads/importer/applied/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/applied/1-1' 806s ], 806s # reuse: 806s False, 806s ), 806s ] 806s ) 806s @patch('gitubuntu.importer.get_import_tag_msg') 806s @patch('gitubuntu.importer.get_import_commit_msg') 806s def test_import_applied_spi_tags( 806s get_import_commit_msg_mock, 806s get_import_tag_msg_mock, 806s repo, 806s input_repo, 806s validation_repo_delta, 806s validation_repo_expected_treewise_refs, 806s reuse, 806s ): 806s """Test that applied tags are correctly created, adjusted and/or reused 806s 806s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 806s that determines the commit message to use for a given import 806s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 806s that determines the tag message to use for a given import 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param dict validation_repo_delta: how to transform the input repository 806s into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_treewise_refs: refs whose trees 806s must be identical between the validation repository and the output 806s repository 806s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 806s one supplied by the input repository (assumed to have a commit message 806s of "Test commit") and not one created by the importer in this run 806s (arranged by this test to have a different commit message) 806s 806s The input repository data is written into the output repository and then a 806s fake non-native source package publication of version 1-1 in the Trusty 806s release pocket is imported into it by calling import_applied_spi() 806s directly. reuse and validation_repo_expected_treewise_refs are then 806s asserted. 806s 806s This is similar to test_unapplied_spi_tags except that it calls 806s import_applied_spi() instead of import_unapplied_spi() and only treewise 806s ref comparisons are made. 806s """ 806s # Match the repo_builder objects 806s get_import_tag_msg_mock.return_value = 'Test tag' 806s # Importantly, the following commit message must not be the same as the 806s # commit messages used by the test input repository commits, so that we can 806s # later detect the difference between commits that were already there and 806s # new commits created by the importer for the purposes of asserting the 806s # reuse parameter correctly. 806s get_import_commit_msg_mock.return_value = b'Test commit (new)' 806s 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_tag_test.py:711: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpjgqvonoz/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: applying a 806s dpkg-source: info: applying b 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: applying a 806s dpkg-source: info: applying b 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: applying a 806s dpkg-source: info: applying b 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: applying a 806s dpkg-source: info: applying b 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: applying a 806s dpkg-source: info: applying b 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_import_applied_spi_tags[input_repo2-validation_repo_delta2-validation_repo_expected_treewise_refs2-False] _ 806s 806s get_import_commit_msg_mock = 806s get_import_tag_msg_mock = 806s repo = 806s input_repo = 806s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/applied/ubun...7babcf93de50>}, 'update_tags': {'importer/applied/1-1': }} 806s 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'] 806s reuse = False 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'validation_repo_delta', 806s 'validation_repo_expected_treewise_refs', 806s 'reuse', 806s ], 806s [ 806s # 1) An existing applied tag (or reimport tag) with the same Git tree 806s # - Reuse applied tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec(name='unapplied', has_patches=True), 806s Commit.from_spec(name='applied', patches_applied=True), 806s ], 806s branches={ 806s 'importer/ubuntu/trusty': Placeholder('unapplied'), 806s 'importer/applied/ubuntu/trusty': Placeholder('applied'), 806s }, 806s tags={ 806s 'importer/import/1-1': Placeholder('unapplied'), 806s 'importer/applied/1-1': Placeholder('applied'), 806s }, 806s ), 806s # validation_repo_delta: 806s { 806s # no output repository delta 806s }, 806s # validation_repo_expected_treewise_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/heads/importer/applied/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/applied/1-1', 806s ], 806s # reuse: 806s True, 806s ), 806s 806s # 2) An existing applied tag with a different Git tree 806s # - Create reimport tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[ 806s Commit.from_spec( 806s name='unapplied', 806s has_patches=True, 806s mutate='import tag contents', 806s ), 806s Commit.from_spec( 806s name='unapplied_reimport', 806s has_patches=True, 806s ), 806s Commit.from_spec( 806s name='applied', 806s patches_applied=True, 806s mutate='import tag contents', 806s ) 806s ], 806s branches={'importer/ubuntu/trusty': Placeholder('unapplied')}, 806s tags={ 806s 'importer/import/1-1': 806s Placeholder('unapplied'), 806s 'importer/reimport/import/1-1/0': 806s Placeholder('unapplied'), 806s 'importer/reimport/import/1-1/1': 806s Placeholder('unapplied_reimport'), 806s 'importer/applied/1-1': 806s Placeholder('applied'), 806s }, 806s ), 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='applied_reimport', 806s patches_applied=True, 806s parents=[Placeholder('unapplied_reimport')], 806s ), 806s ], 806s 'update_tags': { 806s 'importer/reimport/applied/1-1/0': 806s Placeholder('applied'), 806s 'importer/reimport/applied/1-1/1': 806s Placeholder('applied_reimport'), 806s }, 806s 'update_branches': { 806s 'importer/applied/ubuntu/trusty': 806s Placeholder('applied_reimport'), 806s }, 806s }, 806s # validation_repo_expected_treewise_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/heads/importer/applied/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s 'refs/tags/importer/applied/1-1', 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s ], 806s # reuse: 806s False, 806s 806s marks=pytest.mark.xfail(reason='LP: #1755247'), 806s ), 806s 806s # 3) No applied tags 806s # - Create applied tag 806s pytest.param( 806s # input_repo: 806s repo_builder.Repo( 806s commits=[Commit.from_spec(name='unapplied', has_patches=True)], 806s branches={'importer/ubuntu/trusty': Placeholder('unapplied')}, 806s tags={'importer/import/1-1': Placeholder('unapplied')}, 806s ), 806s # validation_repo_delta: 806s { 806s 'add_commits': [ 806s Commit.from_spec( 806s name='applied', 806s patches_applied=True, 806s parents=[Placeholder('unapplied')], 806s ), 806s ], 806s 'update_tags': { 806s 'importer/applied/1-1': Placeholder('applied') 806s }, 806s 'update_branches': { 806s 'importer/applied/ubuntu/trusty': Placeholder('applied'), 806s }, 806s }, 806s # validation_repo_expected_treewise_refs: 806s [ 806s 'refs/heads/importer/ubuntu/trusty', 806s 'refs/heads/importer/applied/ubuntu/trusty', 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/applied/1-1' 806s ], 806s # reuse: 806s False, 806s ), 806s ] 806s ) 806s @patch('gitubuntu.importer.get_import_tag_msg') 806s @patch('gitubuntu.importer.get_import_commit_msg') 806s def test_import_applied_spi_tags( 806s get_import_commit_msg_mock, 806s get_import_tag_msg_mock, 806s repo, 806s input_repo, 806s validation_repo_delta, 806s validation_repo_expected_treewise_refs, 806s reuse, 806s ): 806s """Test that applied tags are correctly created, adjusted and/or reused 806s 806s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 806s that determines the commit message to use for a given import 806s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 806s that determines the tag message to use for a given import 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param dict validation_repo_delta: how to transform the input repository 806s into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_treewise_refs: refs whose trees 806s must be identical between the validation repository and the output 806s repository 806s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 806s one supplied by the input repository (assumed to have a commit message 806s of "Test commit") and not one created by the importer in this run 806s (arranged by this test to have a different commit message) 806s 806s The input repository data is written into the output repository and then a 806s fake non-native source package publication of version 1-1 in the Trusty 806s release pocket is imported into it by calling import_applied_spi() 806s directly. reuse and validation_repo_expected_treewise_refs are then 806s asserted. 806s 806s This is similar to test_unapplied_spi_tags except that it calls 806s import_applied_spi() instead of import_unapplied_spi() and only treewise 806s ref comparisons are made. 806s """ 806s # Match the repo_builder objects 806s get_import_tag_msg_mock.return_value = 'Test tag' 806s # Importantly, the following commit message must not be the same as the 806s # commit messages used by the test input repository commits, so that we can 806s # later detect the difference between commits that were already there and 806s # new commits created by the importer for the purposes of asserting the 806s # reuse parameter correctly. 806s get_import_commit_msg_mock.return_value = b'Test commit (new)' 806s 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_tag_test.py:711: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmp1ik3dx1t/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: applying a 806s dpkg-source: info: applying b 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: applying a 806s dpkg-source: info: applying b 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: applying a 806s dpkg-source: info: applying b 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s __ test_get_existing_import_tags[input_repo1-PatchState.UNAPPLIED-expected1] ___ 806s 806s repo = 806s patch_state = 806s input_repo = 806s expected = ['refs/tags/importer/import/1-1'] 806s 806s @pytest.mark.parametrize( 806s 'input_repo, patch_state, expected', [ 806s ( 806s repo_builder.Repo(), 806s PatchState.UNAPPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s tags={'importer/import/1-1': repo_builder.Commit()}, 806s ), 806s PatchState.UNAPPLIED, 806s ['refs/tags/importer/import/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit(name='import'), 806s repo_builder.Commit(name='reimport1'), 806s ], 806s tags={ 806s 'importer/import/1-1': repo_builder.Commit(), 806s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 806s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 806s }, 806s ), 806s PatchState.UNAPPLIED, 806s [ 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo(), 806s PatchState.APPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s tags={'importer/applied/1-1': repo_builder.Commit()}, 806s ), 806s PatchState.APPLIED, 806s ['refs/tags/importer/applied/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit(name='applied'), 806s repo_builder.Commit(name='reimport1'), 806s ], 806s tags={ 806s 'importer/applied/1-1': repo_builder.Commit(), 806s 'importer/reimport/applied/1-1/0': repo_builder.Commit(), 806s 'importer/reimport/applied/1-1/1': repo_builder.Commit(), 806s }, 806s ), 806s PatchState.APPLIED, 806s [ 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s ], 806s ), 806s ], 806s ) 806s def test_get_existing_import_tags(repo, patch_state, input_repo, expected): 806s """Test that get_existing_import_tags is generally correct 806s 806s This is the general parameterised test for the common case uses of 806s target.get_existing_import_tags. 806s 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param PatchState patch_state: passed through to get_existing_import_tags 806s :param repo_builder.Repo input_repo: input repository data 806s :param list(str) expected: the names of the references that are expected to 806s be returned, in order. 806s """ 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:214: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpqh37_r16/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s __ test_get_existing_import_tags[input_repo2-PatchState.UNAPPLIED-expected2] ___ 806s 806s repo = 806s patch_state = 806s input_repo = 806s expected = ['refs/tags/importer/reimport/import/1-1/0', 'refs/tags/importer/reimport/import/1-1/1'] 806s 806s @pytest.mark.parametrize( 806s 'input_repo, patch_state, expected', [ 806s ( 806s repo_builder.Repo(), 806s PatchState.UNAPPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s tags={'importer/import/1-1': repo_builder.Commit()}, 806s ), 806s PatchState.UNAPPLIED, 806s ['refs/tags/importer/import/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit(name='import'), 806s repo_builder.Commit(name='reimport1'), 806s ], 806s tags={ 806s 'importer/import/1-1': repo_builder.Commit(), 806s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 806s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 806s }, 806s ), 806s PatchState.UNAPPLIED, 806s [ 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo(), 806s PatchState.APPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s tags={'importer/applied/1-1': repo_builder.Commit()}, 806s ), 806s PatchState.APPLIED, 806s ['refs/tags/importer/applied/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit(name='applied'), 806s repo_builder.Commit(name='reimport1'), 806s ], 806s tags={ 806s 'importer/applied/1-1': repo_builder.Commit(), 806s 'importer/reimport/applied/1-1/0': repo_builder.Commit(), 806s 'importer/reimport/applied/1-1/1': repo_builder.Commit(), 806s }, 806s ), 806s PatchState.APPLIED, 806s [ 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s ], 806s ), 806s ], 806s ) 806s def test_get_existing_import_tags(repo, patch_state, input_repo, expected): 806s """Test that get_existing_import_tags is generally correct 806s 806s This is the general parameterised test for the common case uses of 806s target.get_existing_import_tags. 806s 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param PatchState patch_state: passed through to get_existing_import_tags 806s :param repo_builder.Repo input_repo: input repository data 806s :param list(str) expected: the names of the references that are expected to 806s be returned, in order. 806s """ 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:214: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmp6dc2loe7/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ___ test_get_existing_import_tags[input_repo4-PatchState.APPLIED-expected4] ____ 806s 806s repo = 806s patch_state = 806s input_repo = 806s expected = ['refs/tags/importer/applied/1-1'] 806s 806s @pytest.mark.parametrize( 806s 'input_repo, patch_state, expected', [ 806s ( 806s repo_builder.Repo(), 806s PatchState.UNAPPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s tags={'importer/import/1-1': repo_builder.Commit()}, 806s ), 806s PatchState.UNAPPLIED, 806s ['refs/tags/importer/import/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit(name='import'), 806s repo_builder.Commit(name='reimport1'), 806s ], 806s tags={ 806s 'importer/import/1-1': repo_builder.Commit(), 806s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 806s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 806s }, 806s ), 806s PatchState.UNAPPLIED, 806s [ 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo(), 806s PatchState.APPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s tags={'importer/applied/1-1': repo_builder.Commit()}, 806s ), 806s PatchState.APPLIED, 806s ['refs/tags/importer/applied/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit(name='applied'), 806s repo_builder.Commit(name='reimport1'), 806s ], 806s tags={ 806s 'importer/applied/1-1': repo_builder.Commit(), 806s 'importer/reimport/applied/1-1/0': repo_builder.Commit(), 806s 'importer/reimport/applied/1-1/1': repo_builder.Commit(), 806s }, 806s ), 806s PatchState.APPLIED, 806s [ 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s ], 806s ), 806s ], 806s ) 806s def test_get_existing_import_tags(repo, patch_state, input_repo, expected): 806s """Test that get_existing_import_tags is generally correct 806s 806s This is the general parameterised test for the common case uses of 806s target.get_existing_import_tags. 806s 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param PatchState patch_state: passed through to get_existing_import_tags 806s :param repo_builder.Repo input_repo: input repository data 806s :param list(str) expected: the names of the references that are expected to 806s be returned, in order. 806s """ 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:214: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmppl7mk80n/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ___ test_get_existing_import_tags[input_repo5-PatchState.APPLIED-expected5] ____ 806s 806s repo = 806s patch_state = 806s input_repo = 806s expected = ['refs/tags/importer/reimport/applied/1-1/0', 'refs/tags/importer/reimport/applied/1-1/1'] 806s 806s @pytest.mark.parametrize( 806s 'input_repo, patch_state, expected', [ 806s ( 806s repo_builder.Repo(), 806s PatchState.UNAPPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s tags={'importer/import/1-1': repo_builder.Commit()}, 806s ), 806s PatchState.UNAPPLIED, 806s ['refs/tags/importer/import/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit(name='import'), 806s repo_builder.Commit(name='reimport1'), 806s ], 806s tags={ 806s 'importer/import/1-1': repo_builder.Commit(), 806s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 806s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 806s }, 806s ), 806s PatchState.UNAPPLIED, 806s [ 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo(), 806s PatchState.APPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s tags={'importer/applied/1-1': repo_builder.Commit()}, 806s ), 806s PatchState.APPLIED, 806s ['refs/tags/importer/applied/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit(name='applied'), 806s repo_builder.Commit(name='reimport1'), 806s ], 806s tags={ 806s 'importer/applied/1-1': repo_builder.Commit(), 806s 'importer/reimport/applied/1-1/0': repo_builder.Commit(), 806s 'importer/reimport/applied/1-1/1': repo_builder.Commit(), 806s }, 806s ), 806s PatchState.APPLIED, 806s [ 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s ], 806s ), 806s ], 806s ) 806s def test_get_existing_import_tags(repo, patch_state, input_repo, expected): 806s """Test that get_existing_import_tags is generally correct 806s 806s This is the general parameterised test for the common case uses of 806s target.get_existing_import_tags. 806s 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param PatchState patch_state: passed through to get_existing_import_tags 806s :param repo_builder.Repo input_repo: input repository data 806s :param list(str) expected: the names of the references that are expected to 806s be returned, in order. 806s """ 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:214: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmp4guv2ff5/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ____________________ test_get_existing_import_tags_ordering ____________________ 806s 806s repo = 806s 806s def test_get_existing_import_tags_ordering(repo): 806s """Test that get_existing_import_tags returns results in the correct order 806s 806s To maintain hash stability, the spec defines that multiple changelog 806s parents must appear in the order that they were published. For this to 806s work, get_existing_import_tags must return the tags in the correct order 806s even if the underlying git repository tags appear in an arbitrary order. 806s 806s :param GitUbuntuRepository repo: fixture of a temporary repository to use 806s """ 806s 806s # Construct a synthetic git repository containing tags 806s repo_builder.Repo( 806s tags={ 806s 'importer/import/1-1': repo_builder.Commit(), 806s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 806s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 806s } 806s > ).write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:240: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpa8sfpwfm/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s _ test_create_import_tag[input_repo0-validation_repo_delta0-validation_repo_expected_identical_refs0] _ 806s 806s repo = 806s input_repo = 806s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-1': }} 806s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1'] 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'validation_repo_delta', 806s 'validation_repo_expected_identical_refs', 806s ], 806s [ 806s ( 806s repo_builder.Repo(), 806s { 806s 'add_commits': [ 806s repo_builder.Commit(name='import'), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('import'), 806s }, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s { 806s 'add_commits': [ 806s repo_builder.Commit(name='reimport'), 806s ], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit(name='import'), 806s repo_builder.Commit(name='reimport1'), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport1'), 806s }, 806s ), 806s { 806s 'add_commits': [ 806s repo_builder.Commit(name='reimport2'), 806s ], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/2': Placeholder('reimport2'), 806s }, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s 'refs/tags/importer/reimport/import/1-1/2', 806s ], 806s ), 806s ], 806s ) 806s def test_create_import_tag( 806s repo, 806s input_repo, 806s validation_repo_delta, 806s validation_repo_expected_identical_refs, 806s ): 806s """ 806s Unit test that create_import_tag creates the correct import tag 806s 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param dict validation_repo_delta: how to transform the input repository 806s into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_identical_refs: refs that must be 806s identical between the validation repository and the output repository 806s """ 806s publish_commit = repo.raw_repo.get( 806s repo_builder.Commit().write(repo.raw_repo) 806s ).peel(pygit2.Commit) 806s input_repo.write(repo.raw_repo) 806s 806s > target.create_import_tag(repo, publish_commit, '1-1', 'importer') 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:370: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:1379: in create_import_tag 806s repo.create_tag( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s commit_hash = '240dd844a69653244edb52c57c42d709512d64cd' 806s tag_name = 'importer/import/1-1', tag_msg = 'git-ubuntu import' 806s tagger = pygit2.Signature('git-ubuntu importer', 'ubuntu-devel-discuss@lists.ubuntu.com', 0, 0, None) 806s 806s def create_tag(self, 806s commit_hash, 806s tag_name, 806s tag_msg, 806s tagger=None, 806s ): 806s """Create a tag in the repository 806s 806s :param str commit_hash: the commit hash the tag will point to. 806s :param str tag_name: the name of the tag to be created. 806s :param str tag_msg: the text of the tag annotation. 806s :param pygit2.Signature tagger: if supplied, use this signature in the 806s created tag's "tagger" metadata. If not supplied, an arbitrary name 806s and email address is used with the current time. 806s :returns: None 806s """ 806s if not tagger: 806s tagger_time, tagger_offset = datetime_to_signature_spec( 806s datetime.datetime.now(), 806s ) 806s tagger = pygit2.Signature( 806s gitubuntu.spec.SYNTHESIZED_COMMITTER_NAME, 806s gitubuntu.spec.SYNTHESIZED_COMMITTER_EMAIL, 806s tagger_time, 806s tagger_offset, 806s ) 806s 806s logging.debug("Creating tag %s pointing to %s", tag_name, commit_hash) 806s self.raw_repo.create_tag( 806s tag_name, 806s pygit2.Oid(hex=commit_hash), 806s > pygit2.GIT_OBJ_COMMIT, 806s tagger, 806s tag_msg, 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:2114: AttributeError 806s _ test_create_import_tag[input_repo1-validation_repo_delta1-validation_repo_expected_identical_refs1] _ 806s 806s repo = 806s input_repo = 806s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/reimport/import/...t at 0x7babd0256ba0>, 'importer/reimport/import/1-1/1': }} 806s 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'] 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'validation_repo_delta', 806s 'validation_repo_expected_identical_refs', 806s ], 806s [ 806s ( 806s repo_builder.Repo(), 806s { 806s 'add_commits': [ 806s repo_builder.Commit(name='import'), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('import'), 806s }, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s { 806s 'add_commits': [ 806s repo_builder.Commit(name='reimport'), 806s ], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit(name='import'), 806s repo_builder.Commit(name='reimport1'), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport1'), 806s }, 806s ), 806s { 806s 'add_commits': [ 806s repo_builder.Commit(name='reimport2'), 806s ], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/2': Placeholder('reimport2'), 806s }, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s 'refs/tags/importer/reimport/import/1-1/2', 806s ], 806s ), 806s ], 806s ) 806s def test_create_import_tag( 806s repo, 806s input_repo, 806s validation_repo_delta, 806s validation_repo_expected_identical_refs, 806s ): 806s """ 806s Unit test that create_import_tag creates the correct import tag 806s 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param dict validation_repo_delta: how to transform the input repository 806s into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_identical_refs: refs that must be 806s identical between the validation repository and the output repository 806s """ 806s publish_commit = repo.raw_repo.get( 806s repo_builder.Commit().write(repo.raw_repo) 806s ).peel(pygit2.Commit) 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:368: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmp09epy1fp/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s _ test_create_import_tag[input_repo2-validation_repo_delta2-validation_repo_expected_identical_refs2] _ 806s 806s repo = 806s input_repo = 806s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/reimport/import/1-1/2': }} 806s 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'] 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'validation_repo_delta', 806s 'validation_repo_expected_identical_refs', 806s ], 806s [ 806s ( 806s repo_builder.Repo(), 806s { 806s 'add_commits': [ 806s repo_builder.Commit(name='import'), 806s ], 806s 'update_tags': { 806s 'importer/import/1-1': Placeholder('import'), 806s }, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s { 806s 'add_commits': [ 806s repo_builder.Commit(name='reimport'), 806s ], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit(name='import'), 806s repo_builder.Commit(name='reimport1'), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport1'), 806s }, 806s ), 806s { 806s 'add_commits': [ 806s repo_builder.Commit(name='reimport2'), 806s ], 806s 'update_tags': { 806s 'importer/reimport/import/1-1/2': Placeholder('reimport2'), 806s }, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s 'refs/tags/importer/reimport/import/1-1/2', 806s ], 806s ), 806s ], 806s ) 806s def test_create_import_tag( 806s repo, 806s input_repo, 806s validation_repo_delta, 806s validation_repo_expected_identical_refs, 806s ): 806s """ 806s Unit test that create_import_tag creates the correct import tag 806s 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param dict validation_repo_delta: how to transform the input repository 806s into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_identical_refs: refs that must be 806s identical between the validation repository and the output repository 806s """ 806s publish_commit = repo.raw_repo.get( 806s repo_builder.Commit().write(repo.raw_repo) 806s ).peel(pygit2.Commit) 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:368: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpf1cxnidt/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ____________ test_create_import_tag_hash_stability_on_first_import _____________ 806s 806s repo = 806s 806s def test_create_import_tag_hash_stability_on_first_import(repo): 806s """Created import tags should be hash stable on first import 806s 806s :param GitUbuntuRepository repo: fixture providing a temporary 806s GitUbuntuRepository instance to use 806s """ 806s publish_commit = repo.raw_repo.get( 806s repo_builder.Commit( 806s author=pygit2.Signature( 806s 'Hash stability test author', 806s 'newauthor@example.com', 806s 1, 806s 2, 806s ), 806s committer=pygit2.Signature( 806s 'Hash stability test committer', 806s 'newcommitter@example.com', 806s 3, 806s 4, 806s ), 806s ).write(repo.raw_repo) 806s ).peel(pygit2.Commit) 806s > target.create_import_tag(repo, publish_commit, '1-1', 'importer') 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:402: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:1379: in create_import_tag 806s repo.create_tag( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s commit_hash = '65729a1dca101328820bf4f49fbca4e9571a772a' 806s tag_name = 'importer/import/1-1', tag_msg = 'git-ubuntu import' 806s tagger = pygit2.Signature('git-ubuntu importer', 'ubuntu-devel-discuss@lists.ubuntu.com', 3, 4, None) 806s 806s def create_tag(self, 806s commit_hash, 806s tag_name, 806s tag_msg, 806s tagger=None, 806s ): 806s """Create a tag in the repository 806s 806s :param str commit_hash: the commit hash the tag will point to. 806s :param str tag_name: the name of the tag to be created. 806s :param str tag_msg: the text of the tag annotation. 806s :param pygit2.Signature tagger: if supplied, use this signature in the 806s created tag's "tagger" metadata. If not supplied, an arbitrary name 806s and email address is used with the current time. 806s :returns: None 806s """ 806s if not tagger: 806s tagger_time, tagger_offset = datetime_to_signature_spec( 806s datetime.datetime.now(), 806s ) 806s tagger = pygit2.Signature( 806s gitubuntu.spec.SYNTHESIZED_COMMITTER_NAME, 806s gitubuntu.spec.SYNTHESIZED_COMMITTER_EMAIL, 806s tagger_time, 806s tagger_offset, 806s ) 806s 806s logging.debug("Creating tag %s pointing to %s", tag_name, commit_hash) 806s self.raw_repo.create_tag( 806s tag_name, 806s pygit2.Oid(hex=commit_hash), 806s > pygit2.GIT_OBJ_COMMIT, 806s tagger, 806s tag_msg, 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:2114: AttributeError 806s ______________ test_create_import_tag_hash_stability_on_reimport _______________ 806s 806s repo = 806s 806s def test_create_import_tag_hash_stability_on_reimport(repo): 806s """Created import tags should be hash stable on reimport 806s 806s This includes both the /0 duplicate reimport tag of the original import tag 806s as well as the /1 reimport tag being created. 806s 806s :param GitUbuntuRepository repo: fixture providing a temporary 806s GitUbuntuRepository instance to use 806s """ 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit( 806s name='root', 806s author=pygit2.Signature( 806s 'Hash stability test author', 806s 'author@example.com', 806s 1, 806s 2, 806s ), 806s committer=pygit2.Signature( 806s 'Hash stability test committer', 806s 'committer@example.com', 806s 3, 806s 4, 806s ), 806s ), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('root'), 806s }, 806s tagger=pygit2.Signature( 806s 'Hash stability test name', 806s 'stability@example.com', 806s 5, 806s 6, 806s ), 806s > ).write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:449: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpznqhfryi/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s _ test_create_applied_tag[input_repo0-validation_repo_delta0-validation_repo_expected_identical_refs0] _ 806s 806s repo = 806s input_repo = 806s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/applied/1-1': }} 806s validation_repo_expected_identical_refs = ['refs/tags/importer/applied/1-1'] 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'validation_repo_delta', 806s 'validation_repo_expected_identical_refs', 806s ], 806s [ 806s ( 806s repo_builder.Repo(), 806s { 806s 'add_commits': [repo_builder.Commit(name='import')], 806s 'update_tags': {'importer/applied/1-1': Placeholder('import')}, 806s }, 806s [ 806s 'refs/tags/importer/applied/1-1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit(name='import')], 806s tags={'importer/applied/1-1': Placeholder('import')}, 806s ), 806s { 806s 'add_commits': [repo_builder.Commit(name='reimport')], 806s 'update_tags': { 806s 'importer/reimport/applied/1-1/0': Placeholder('import'), 806s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 806s }, 806s }, 806s [ 806s 'refs/tags/importer/applied/1-1', 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit(name='import'), 806s repo_builder.Commit(name='reimport1'), 806s ], 806s tags={ 806s 'importer/applied/1-1': Placeholder('import'), 806s 'importer/reimport/applied/1-1/0': Placeholder('import'), 806s 'importer/reimport/applied/1-1/1': Placeholder('reimport1'), 806s }, 806s ), 806s { 806s 'add_commits': [ 806s repo_builder.Commit(name='reimport2') 806s ], 806s 'update_tags': { 806s 'importer/reimport/applied/1-1/2': Placeholder('reimport2'), 806s }, 806s }, 806s [ 806s 'refs/tags/importer/applied/1-1', 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s 'refs/tags/importer/reimport/applied/1-1/2', 806s ], 806s ), 806s ], 806s ) 806s def test_create_applied_tag( 806s repo, 806s input_repo, 806s validation_repo_delta, 806s validation_repo_expected_identical_refs, 806s ): 806s """ 806s Unit test that create_applied_tag creates the correct import tag 806s 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param dict validation_repo_delta: how to transform the input repository 806s into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_identical_refs: refs that must be 806s identical between the validation repository and the output repository 806s """ 806s publish_commit_str = str( 806s repo.raw_repo.get( 806s repo_builder.Commit().write(repo.raw_repo) 806s ).peel(pygit2.Commit).id 806s ) 806s 806s input_repo.write(repo.raw_repo) 806s 806s > target.create_applied_tag(repo, publish_commit_str, '1-1', 'importer') 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:577: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:1309: in create_applied_tag 806s repo.create_tag( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s commit_hash = '240dd844a69653244edb52c57c42d709512d64cd' 806s tag_name = 'importer/applied/1-1', tag_msg = 'git-ubuntu import' 806s tagger = pygit2.Signature('git-ubuntu importer', 'ubuntu-devel-discuss@lists.ubuntu.com', 1733219264, 0, None) 806s 806s def create_tag(self, 806s commit_hash, 806s tag_name, 806s tag_msg, 806s tagger=None, 806s ): 806s """Create a tag in the repository 806s 806s :param str commit_hash: the commit hash the tag will point to. 806s :param str tag_name: the name of the tag to be created. 806s :param str tag_msg: the text of the tag annotation. 806s :param pygit2.Signature tagger: if supplied, use this signature in the 806s created tag's "tagger" metadata. If not supplied, an arbitrary name 806s and email address is used with the current time. 806s :returns: None 806s """ 806s if not tagger: 806s tagger_time, tagger_offset = datetime_to_signature_spec( 806s datetime.datetime.now(), 806s ) 806s tagger = pygit2.Signature( 806s gitubuntu.spec.SYNTHESIZED_COMMITTER_NAME, 806s gitubuntu.spec.SYNTHESIZED_COMMITTER_EMAIL, 806s tagger_time, 806s tagger_offset, 806s ) 806s 806s logging.debug("Creating tag %s pointing to %s", tag_name, commit_hash) 806s self.raw_repo.create_tag( 806s tag_name, 806s pygit2.Oid(hex=commit_hash), 806s > pygit2.GIT_OBJ_COMMIT, 806s tagger, 806s tag_msg, 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:2114: AttributeError 806s _ test_create_applied_tag[input_repo1-validation_repo_delta1-validation_repo_expected_identical_refs1] _ 806s 806s repo = 806s input_repo = 806s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/reimport/applied... at 0x7babd0255a00>, 'importer/reimport/applied/1-1/1': }} 806s 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'] 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'validation_repo_delta', 806s 'validation_repo_expected_identical_refs', 806s ], 806s [ 806s ( 806s repo_builder.Repo(), 806s { 806s 'add_commits': [repo_builder.Commit(name='import')], 806s 'update_tags': {'importer/applied/1-1': Placeholder('import')}, 806s }, 806s [ 806s 'refs/tags/importer/applied/1-1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit(name='import')], 806s tags={'importer/applied/1-1': Placeholder('import')}, 806s ), 806s { 806s 'add_commits': [repo_builder.Commit(name='reimport')], 806s 'update_tags': { 806s 'importer/reimport/applied/1-1/0': Placeholder('import'), 806s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 806s }, 806s }, 806s [ 806s 'refs/tags/importer/applied/1-1', 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit(name='import'), 806s repo_builder.Commit(name='reimport1'), 806s ], 806s tags={ 806s 'importer/applied/1-1': Placeholder('import'), 806s 'importer/reimport/applied/1-1/0': Placeholder('import'), 806s 'importer/reimport/applied/1-1/1': Placeholder('reimport1'), 806s }, 806s ), 806s { 806s 'add_commits': [ 806s repo_builder.Commit(name='reimport2') 806s ], 806s 'update_tags': { 806s 'importer/reimport/applied/1-1/2': Placeholder('reimport2'), 806s }, 806s }, 806s [ 806s 'refs/tags/importer/applied/1-1', 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s 'refs/tags/importer/reimport/applied/1-1/2', 806s ], 806s ), 806s ], 806s ) 806s def test_create_applied_tag( 806s repo, 806s input_repo, 806s validation_repo_delta, 806s validation_repo_expected_identical_refs, 806s ): 806s """ 806s Unit test that create_applied_tag creates the correct import tag 806s 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param dict validation_repo_delta: how to transform the input repository 806s into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_identical_refs: refs that must be 806s identical between the validation repository and the output repository 806s """ 806s publish_commit_str = str( 806s repo.raw_repo.get( 806s repo_builder.Commit().write(repo.raw_repo) 806s ).peel(pygit2.Commit).id 806s ) 806s 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:575: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmp8_yr39li/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s _ test_create_applied_tag[input_repo2-validation_repo_delta2-validation_repo_expected_identical_refs2] _ 806s 806s repo = 806s input_repo = 806s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/reimport/applied/1-1/2': }} 806s 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'] 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'validation_repo_delta', 806s 'validation_repo_expected_identical_refs', 806s ], 806s [ 806s ( 806s repo_builder.Repo(), 806s { 806s 'add_commits': [repo_builder.Commit(name='import')], 806s 'update_tags': {'importer/applied/1-1': Placeholder('import')}, 806s }, 806s [ 806s 'refs/tags/importer/applied/1-1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit(name='import')], 806s tags={'importer/applied/1-1': Placeholder('import')}, 806s ), 806s { 806s 'add_commits': [repo_builder.Commit(name='reimport')], 806s 'update_tags': { 806s 'importer/reimport/applied/1-1/0': Placeholder('import'), 806s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 806s }, 806s }, 806s [ 806s 'refs/tags/importer/applied/1-1', 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit(name='import'), 806s repo_builder.Commit(name='reimport1'), 806s ], 806s tags={ 806s 'importer/applied/1-1': Placeholder('import'), 806s 'importer/reimport/applied/1-1/0': Placeholder('import'), 806s 'importer/reimport/applied/1-1/1': Placeholder('reimport1'), 806s }, 806s ), 806s { 806s 'add_commits': [ 806s repo_builder.Commit(name='reimport2') 806s ], 806s 'update_tags': { 806s 'importer/reimport/applied/1-1/2': Placeholder('reimport2'), 806s }, 806s }, 806s [ 806s 'refs/tags/importer/applied/1-1', 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s 'refs/tags/importer/reimport/applied/1-1/2', 806s ], 806s ), 806s ], 806s ) 806s def test_create_applied_tag( 806s repo, 806s input_repo, 806s validation_repo_delta, 806s validation_repo_expected_identical_refs, 806s ): 806s """ 806s Unit test that create_applied_tag creates the correct import tag 806s 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param dict validation_repo_delta: how to transform the input repository 806s into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_identical_refs: refs that must be 806s identical between the validation repository and the output repository 806s """ 806s publish_commit_str = str( 806s repo.raw_repo.get( 806s repo_builder.Commit().write(repo.raw_repo) 806s ).peel(pygit2.Commit).id 806s ) 806s 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:575: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpblubekg6/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s _ test_get_changelog_parent_commits[input_repo1-parent_overrides1-changelog_versions1-PatchState.UNAPPLIED-expected_refs1] _ 806s 806s repo = 806s input_repo = 806s parent_overrides = {}, changelog_versions = ['1-2', '1-1'] 806s patch_state = 806s expected_refs = ['refs/tags/importer/import/1-1'] 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'parent_overrides', 806s 'changelog_versions', 806s 'patch_state', 806s 'expected_refs', 806s ], 806s [ 806s ( 806s repo_builder.Repo(), 806s {}, 806s ['1-2', '1-1',], 806s PatchState.UNAPPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.UNAPPLIED, 806s ['refs/tags/importer/import/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec(name='reimport', mutate=1), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.UNAPPLIED, 806s [ 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s {}, 806s ['1-3', '1-2', '1-1'], 806s PatchState.UNAPPLIED, 806s ['refs/tags/importer/import/1-1'], 806s ), 806s ( 806s repo_builder.Repo(), 806s {}, 806s ['1-2', '1-1',], 806s PatchState.APPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='applied')], 806s tags={'importer/applied/1-1': Placeholder('applied')}, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.APPLIED, 806s ['refs/tags/importer/applied/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec(name='reimport', mutate=1), 806s ], 806s tags={ 806s 'importer/applied/1-1': Placeholder('import'), 806s 'importer/reimport/applied/1-1/0': Placeholder('import'), 806s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.APPLIED, 806s [ 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='applied')], 806s tags={'importer/applied/1-1': Placeholder('applied')}, 806s ), 806s {}, 806s ['1-3', '1-2', '1-1'], 806s PatchState.APPLIED, 806s ['refs/tags/importer/applied/1-1'], 806s ), 806s ], 806s ) 806s def test_get_changelog_parent_commits( 806s repo, 806s input_repo, 806s parent_overrides, 806s changelog_versions, 806s patch_state, 806s expected_refs, 806s ): 806s """Test that get_changelog_parent_commits is generally correct 806s 806s This is the general parameterised test for the common case uses of 806s target.get_changelog_parent_commits. 806s 806s :param GitUbuntuRepository repo: fixture providing a temporary 806s GitUbuntuRepository instance to use 806s :param repo_builder.Repo input_repo: the input repository data to use that 806s will be populated into @repo before @repo is passed through to 806s get_changelog_parent_commits 806s :param dict parent_overrides: passed through to 806s get_changelog_parent_commits. 806s :param PatchState patch_state: passed through to 806s get_changelog_parent_commits 806s :param list(str) expected_refs: the expected return value of 806s get_changelog_parent_commits expressed using a list of reference names. 806s Since get_changelog_parent_commits returns a list of commit hash 806s strings, the reference names will need to be dereferenced before 806s comparison; this way the test parameters don't need to be opaque hash 806s strings. 806s """ 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:721: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpeqfn0n4g/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_get_changelog_parent_commits[input_repo2-parent_overrides2-changelog_versions2-PatchState.UNAPPLIED-expected_refs2] _ 806s 806s repo = 806s input_repo = 806s parent_overrides = {}, changelog_versions = ['1-2', '1-1'] 806s patch_state = 806s expected_refs = ['refs/tags/importer/reimport/import/1-1/0', 'refs/tags/importer/reimport/import/1-1/1'] 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'parent_overrides', 806s 'changelog_versions', 806s 'patch_state', 806s 'expected_refs', 806s ], 806s [ 806s ( 806s repo_builder.Repo(), 806s {}, 806s ['1-2', '1-1',], 806s PatchState.UNAPPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.UNAPPLIED, 806s ['refs/tags/importer/import/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec(name='reimport', mutate=1), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.UNAPPLIED, 806s [ 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s {}, 806s ['1-3', '1-2', '1-1'], 806s PatchState.UNAPPLIED, 806s ['refs/tags/importer/import/1-1'], 806s ), 806s ( 806s repo_builder.Repo(), 806s {}, 806s ['1-2', '1-1',], 806s PatchState.APPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='applied')], 806s tags={'importer/applied/1-1': Placeholder('applied')}, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.APPLIED, 806s ['refs/tags/importer/applied/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec(name='reimport', mutate=1), 806s ], 806s tags={ 806s 'importer/applied/1-1': Placeholder('import'), 806s 'importer/reimport/applied/1-1/0': Placeholder('import'), 806s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.APPLIED, 806s [ 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='applied')], 806s tags={'importer/applied/1-1': Placeholder('applied')}, 806s ), 806s {}, 806s ['1-3', '1-2', '1-1'], 806s PatchState.APPLIED, 806s ['refs/tags/importer/applied/1-1'], 806s ), 806s ], 806s ) 806s def test_get_changelog_parent_commits( 806s repo, 806s input_repo, 806s parent_overrides, 806s changelog_versions, 806s patch_state, 806s expected_refs, 806s ): 806s """Test that get_changelog_parent_commits is generally correct 806s 806s This is the general parameterised test for the common case uses of 806s target.get_changelog_parent_commits. 806s 806s :param GitUbuntuRepository repo: fixture providing a temporary 806s GitUbuntuRepository instance to use 806s :param repo_builder.Repo input_repo: the input repository data to use that 806s will be populated into @repo before @repo is passed through to 806s get_changelog_parent_commits 806s :param dict parent_overrides: passed through to 806s get_changelog_parent_commits. 806s :param PatchState patch_state: passed through to 806s get_changelog_parent_commits 806s :param list(str) expected_refs: the expected return value of 806s get_changelog_parent_commits expressed using a list of reference names. 806s Since get_changelog_parent_commits returns a list of commit hash 806s strings, the reference names will need to be dereferenced before 806s comparison; this way the test parameters don't need to be opaque hash 806s strings. 806s """ 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:721: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmp84x4d1tc/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_get_changelog_parent_commits[input_repo3-parent_overrides3-changelog_versions3-PatchState.UNAPPLIED-expected_refs3] _ 806s 806s repo = 806s input_repo = 806s parent_overrides = {}, changelog_versions = ['1-3', '1-2', '1-1'] 806s patch_state = 806s expected_refs = ['refs/tags/importer/import/1-1'] 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'parent_overrides', 806s 'changelog_versions', 806s 'patch_state', 806s 'expected_refs', 806s ], 806s [ 806s ( 806s repo_builder.Repo(), 806s {}, 806s ['1-2', '1-1',], 806s PatchState.UNAPPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.UNAPPLIED, 806s ['refs/tags/importer/import/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec(name='reimport', mutate=1), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.UNAPPLIED, 806s [ 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s {}, 806s ['1-3', '1-2', '1-1'], 806s PatchState.UNAPPLIED, 806s ['refs/tags/importer/import/1-1'], 806s ), 806s ( 806s repo_builder.Repo(), 806s {}, 806s ['1-2', '1-1',], 806s PatchState.APPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='applied')], 806s tags={'importer/applied/1-1': Placeholder('applied')}, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.APPLIED, 806s ['refs/tags/importer/applied/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec(name='reimport', mutate=1), 806s ], 806s tags={ 806s 'importer/applied/1-1': Placeholder('import'), 806s 'importer/reimport/applied/1-1/0': Placeholder('import'), 806s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.APPLIED, 806s [ 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='applied')], 806s tags={'importer/applied/1-1': Placeholder('applied')}, 806s ), 806s {}, 806s ['1-3', '1-2', '1-1'], 806s PatchState.APPLIED, 806s ['refs/tags/importer/applied/1-1'], 806s ), 806s ], 806s ) 806s def test_get_changelog_parent_commits( 806s repo, 806s input_repo, 806s parent_overrides, 806s changelog_versions, 806s patch_state, 806s expected_refs, 806s ): 806s """Test that get_changelog_parent_commits is generally correct 806s 806s This is the general parameterised test for the common case uses of 806s target.get_changelog_parent_commits. 806s 806s :param GitUbuntuRepository repo: fixture providing a temporary 806s GitUbuntuRepository instance to use 806s :param repo_builder.Repo input_repo: the input repository data to use that 806s will be populated into @repo before @repo is passed through to 806s get_changelog_parent_commits 806s :param dict parent_overrides: passed through to 806s get_changelog_parent_commits. 806s :param PatchState patch_state: passed through to 806s get_changelog_parent_commits 806s :param list(str) expected_refs: the expected return value of 806s get_changelog_parent_commits expressed using a list of reference names. 806s Since get_changelog_parent_commits returns a list of commit hash 806s strings, the reference names will need to be dereferenced before 806s comparison; this way the test parameters don't need to be opaque hash 806s strings. 806s """ 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:721: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpdlr8y8qv/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_get_changelog_parent_commits[input_repo5-parent_overrides5-changelog_versions5-PatchState.APPLIED-expected_refs5] _ 806s 806s repo = 806s input_repo = 806s parent_overrides = {}, changelog_versions = ['1-2', '1-1'] 806s patch_state = 806s expected_refs = ['refs/tags/importer/applied/1-1'] 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'parent_overrides', 806s 'changelog_versions', 806s 'patch_state', 806s 'expected_refs', 806s ], 806s [ 806s ( 806s repo_builder.Repo(), 806s {}, 806s ['1-2', '1-1',], 806s PatchState.UNAPPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.UNAPPLIED, 806s ['refs/tags/importer/import/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec(name='reimport', mutate=1), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.UNAPPLIED, 806s [ 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s {}, 806s ['1-3', '1-2', '1-1'], 806s PatchState.UNAPPLIED, 806s ['refs/tags/importer/import/1-1'], 806s ), 806s ( 806s repo_builder.Repo(), 806s {}, 806s ['1-2', '1-1',], 806s PatchState.APPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='applied')], 806s tags={'importer/applied/1-1': Placeholder('applied')}, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.APPLIED, 806s ['refs/tags/importer/applied/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec(name='reimport', mutate=1), 806s ], 806s tags={ 806s 'importer/applied/1-1': Placeholder('import'), 806s 'importer/reimport/applied/1-1/0': Placeholder('import'), 806s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.APPLIED, 806s [ 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='applied')], 806s tags={'importer/applied/1-1': Placeholder('applied')}, 806s ), 806s {}, 806s ['1-3', '1-2', '1-1'], 806s PatchState.APPLIED, 806s ['refs/tags/importer/applied/1-1'], 806s ), 806s ], 806s ) 806s def test_get_changelog_parent_commits( 806s repo, 806s input_repo, 806s parent_overrides, 806s changelog_versions, 806s patch_state, 806s expected_refs, 806s ): 806s """Test that get_changelog_parent_commits is generally correct 806s 806s This is the general parameterised test for the common case uses of 806s target.get_changelog_parent_commits. 806s 806s :param GitUbuntuRepository repo: fixture providing a temporary 806s GitUbuntuRepository instance to use 806s :param repo_builder.Repo input_repo: the input repository data to use that 806s will be populated into @repo before @repo is passed through to 806s get_changelog_parent_commits 806s :param dict parent_overrides: passed through to 806s get_changelog_parent_commits. 806s :param PatchState patch_state: passed through to 806s get_changelog_parent_commits 806s :param list(str) expected_refs: the expected return value of 806s get_changelog_parent_commits expressed using a list of reference names. 806s Since get_changelog_parent_commits returns a list of commit hash 806s strings, the reference names will need to be dereferenced before 806s comparison; this way the test parameters don't need to be opaque hash 806s strings. 806s """ 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:721: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpghtqicie/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_get_changelog_parent_commits[input_repo6-parent_overrides6-changelog_versions6-PatchState.APPLIED-expected_refs6] _ 806s 806s repo = 806s input_repo = 806s parent_overrides = {}, changelog_versions = ['1-2', '1-1'] 806s patch_state = 806s expected_refs = ['refs/tags/importer/reimport/applied/1-1/0', 'refs/tags/importer/reimport/applied/1-1/1'] 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'parent_overrides', 806s 'changelog_versions', 806s 'patch_state', 806s 'expected_refs', 806s ], 806s [ 806s ( 806s repo_builder.Repo(), 806s {}, 806s ['1-2', '1-1',], 806s PatchState.UNAPPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.UNAPPLIED, 806s ['refs/tags/importer/import/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec(name='reimport', mutate=1), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.UNAPPLIED, 806s [ 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s {}, 806s ['1-3', '1-2', '1-1'], 806s PatchState.UNAPPLIED, 806s ['refs/tags/importer/import/1-1'], 806s ), 806s ( 806s repo_builder.Repo(), 806s {}, 806s ['1-2', '1-1',], 806s PatchState.APPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='applied')], 806s tags={'importer/applied/1-1': Placeholder('applied')}, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.APPLIED, 806s ['refs/tags/importer/applied/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec(name='reimport', mutate=1), 806s ], 806s tags={ 806s 'importer/applied/1-1': Placeholder('import'), 806s 'importer/reimport/applied/1-1/0': Placeholder('import'), 806s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.APPLIED, 806s [ 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='applied')], 806s tags={'importer/applied/1-1': Placeholder('applied')}, 806s ), 806s {}, 806s ['1-3', '1-2', '1-1'], 806s PatchState.APPLIED, 806s ['refs/tags/importer/applied/1-1'], 806s ), 806s ], 806s ) 806s def test_get_changelog_parent_commits( 806s repo, 806s input_repo, 806s parent_overrides, 806s changelog_versions, 806s patch_state, 806s expected_refs, 806s ): 806s """Test that get_changelog_parent_commits is generally correct 806s 806s This is the general parameterised test for the common case uses of 806s target.get_changelog_parent_commits. 806s 806s :param GitUbuntuRepository repo: fixture providing a temporary 806s GitUbuntuRepository instance to use 806s :param repo_builder.Repo input_repo: the input repository data to use that 806s will be populated into @repo before @repo is passed through to 806s get_changelog_parent_commits 806s :param dict parent_overrides: passed through to 806s get_changelog_parent_commits. 806s :param PatchState patch_state: passed through to 806s get_changelog_parent_commits 806s :param list(str) expected_refs: the expected return value of 806s get_changelog_parent_commits expressed using a list of reference names. 806s Since get_changelog_parent_commits returns a list of commit hash 806s strings, the reference names will need to be dereferenced before 806s comparison; this way the test parameters don't need to be opaque hash 806s strings. 806s """ 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:721: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpajseo3e4/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_get_changelog_parent_commits[input_repo7-parent_overrides7-changelog_versions7-PatchState.APPLIED-expected_refs7] _ 806s 806s repo = 806s input_repo = 806s parent_overrides = {}, changelog_versions = ['1-3', '1-2', '1-1'] 806s patch_state = 806s expected_refs = ['refs/tags/importer/applied/1-1'] 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'parent_overrides', 806s 'changelog_versions', 806s 'patch_state', 806s 'expected_refs', 806s ], 806s [ 806s ( 806s repo_builder.Repo(), 806s {}, 806s ['1-2', '1-1',], 806s PatchState.UNAPPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.UNAPPLIED, 806s ['refs/tags/importer/import/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec(name='reimport', mutate=1), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.UNAPPLIED, 806s [ 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s {}, 806s ['1-3', '1-2', '1-1'], 806s PatchState.UNAPPLIED, 806s ['refs/tags/importer/import/1-1'], 806s ), 806s ( 806s repo_builder.Repo(), 806s {}, 806s ['1-2', '1-1',], 806s PatchState.APPLIED, 806s [], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='applied')], 806s tags={'importer/applied/1-1': Placeholder('applied')}, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.APPLIED, 806s ['refs/tags/importer/applied/1-1'], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec(name='reimport', mutate=1), 806s ], 806s tags={ 806s 'importer/applied/1-1': Placeholder('import'), 806s 'importer/reimport/applied/1-1/0': Placeholder('import'), 806s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s {}, 806s ['1-2', '1-1'], 806s PatchState.APPLIED, 806s [ 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='applied')], 806s tags={'importer/applied/1-1': Placeholder('applied')}, 806s ), 806s {}, 806s ['1-3', '1-2', '1-1'], 806s PatchState.APPLIED, 806s ['refs/tags/importer/applied/1-1'], 806s ), 806s ], 806s ) 806s def test_get_changelog_parent_commits( 806s repo, 806s input_repo, 806s parent_overrides, 806s changelog_versions, 806s patch_state, 806s expected_refs, 806s ): 806s """Test that get_changelog_parent_commits is generally correct 806s 806s This is the general parameterised test for the common case uses of 806s target.get_changelog_parent_commits. 806s 806s :param GitUbuntuRepository repo: fixture providing a temporary 806s GitUbuntuRepository instance to use 806s :param repo_builder.Repo input_repo: the input repository data to use that 806s will be populated into @repo before @repo is passed through to 806s get_changelog_parent_commits 806s :param dict parent_overrides: passed through to 806s get_changelog_parent_commits. 806s :param PatchState patch_state: passed through to 806s get_changelog_parent_commits 806s :param list(str) expected_refs: the expected return value of 806s get_changelog_parent_commits expressed using a list of reference names. 806s Since get_changelog_parent_commits returns a list of commit hash 806s strings, the reference names will need to be dereferenced before 806s comparison; this way the test parameters don't need to be opaque hash 806s strings. 806s """ 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:721: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmp9y5jmugq/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _________ test_validate_rich_history[input_repo0-published_spec0-True] _________ 806s 806s repo = 806s input_repo = 806s published_spec = {'changelog_versions': ['1-2', '1-1']}, expected_result = True 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'published_spec', 806s 'expected_result', 806s ], 806s [ 806s ( 806s # Common case: upload tag has a changelog parent as an ancestor 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec( 806s name='upload', 806s changelog_versions=['1-2', '1-1'], 806s parents=[Placeholder('import')], 806s ), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-2': Placeholder('upload'), 806s }, 806s ), 806s {'changelog_versions': ['1-2', '1-1']}, 806s True, 806s ), 806s ( 806s # Upload tag is the first one, with no parents present 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec( 806s name='upload', 806s version='1-2', 806s ), 806s ], 806s tags={ 806s 'importer/upload/1-2': Placeholder('upload'), 806s }, 806s ), 806s {'changelog_versions': ['1-2']}, 806s True, 806s ), 806s ( 806s # Upload tag mismatches published tree but is otherwise correct 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec( 806s name='upload', 806s changelog_versions=['1-2', '1-1'], 806s parents=[Placeholder('import')], 806s mutate=True, 806s ), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-2': Placeholder('upload'), 806s }, 806s ), 806s {'changelog_versions': ['1-2', '1-1']}, 806s target.RichHistoryTreeMismatch, 806s ), 806s ( 806s # Upload tag doesn't have a changelog parent as an ancestor but is 806s # otherwise correct 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec( 806s name='upload', 806s changelog_versions=['1-2', '1-1'], 806s ), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-2': Placeholder('upload'), 806s }, 806s ), 806s {'changelog_versions': ['1-2', '1-1']}, 806s target.RichHistoryHasNoChangelogParentAncestor, 806s ), 806s ], 806s ) 806s def test_validate_rich_history( 806s repo, 806s input_repo, 806s published_spec, 806s expected_result, 806s ): 806s """ 806s General test for validate_rich_history(). 806s 806s This unit tests validate_rich_history() for various parameterized cases. 806s Given an input repository and the specification of a Launchpad publication 806s of a source package, we check that validate_rich_history() correctly 806s accepts or rejects the rich history corresponding to the upload tag named 806s 'importer/upload/1-2'. It is assumed that the package being imported is 806s always of version '1-2' for all parameter sets. 806s 806s Since the target function requires rich history, the case of there not 806s being rich history does not need to be tested here, as it wouldn't be 806s called in this case. 806s 806s validate_rich_history() is generic for all sourced rich history, not just 806s rich history sourced from an upload tag. But since it is independent of how 806s the rich history commit arrived, it is easiest to use upload tags to test 806s it; this results in coverage for all sources. 806s 806s :param GitUbuntuRepository repo: fixture providing a temporary 806s GitUbuntuRepository instance to use 806s :param repo_builder.Repo input_repo: input repository data 806s :param dict published_spec: the package simulated being imported from the 806s archive, specified as a dict to pass as **kwargs to 806s repo_builder.Commit.from_spec() 806s :param bool expected_result: the expected return value of, or exception 806s raised by, the call to validate_rich_history() 806s """ 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:910: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpg7jaj_9p/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _________ test_validate_rich_history[input_repo1-published_spec1-True] _________ 806s 806s repo = 806s input_repo = 806s published_spec = {'changelog_versions': ['1-2']}, expected_result = True 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'published_spec', 806s 'expected_result', 806s ], 806s [ 806s ( 806s # Common case: upload tag has a changelog parent as an ancestor 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec( 806s name='upload', 806s changelog_versions=['1-2', '1-1'], 806s parents=[Placeholder('import')], 806s ), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-2': Placeholder('upload'), 806s }, 806s ), 806s {'changelog_versions': ['1-2', '1-1']}, 806s True, 806s ), 806s ( 806s # Upload tag is the first one, with no parents present 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec( 806s name='upload', 806s version='1-2', 806s ), 806s ], 806s tags={ 806s 'importer/upload/1-2': Placeholder('upload'), 806s }, 806s ), 806s {'changelog_versions': ['1-2']}, 806s True, 806s ), 806s ( 806s # Upload tag mismatches published tree but is otherwise correct 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec( 806s name='upload', 806s changelog_versions=['1-2', '1-1'], 806s parents=[Placeholder('import')], 806s mutate=True, 806s ), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-2': Placeholder('upload'), 806s }, 806s ), 806s {'changelog_versions': ['1-2', '1-1']}, 806s target.RichHistoryTreeMismatch, 806s ), 806s ( 806s # Upload tag doesn't have a changelog parent as an ancestor but is 806s # otherwise correct 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec( 806s name='upload', 806s changelog_versions=['1-2', '1-1'], 806s ), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-2': Placeholder('upload'), 806s }, 806s ), 806s {'changelog_versions': ['1-2', '1-1']}, 806s target.RichHistoryHasNoChangelogParentAncestor, 806s ), 806s ], 806s ) 806s def test_validate_rich_history( 806s repo, 806s input_repo, 806s published_spec, 806s expected_result, 806s ): 806s """ 806s General test for validate_rich_history(). 806s 806s This unit tests validate_rich_history() for various parameterized cases. 806s Given an input repository and the specification of a Launchpad publication 806s of a source package, we check that validate_rich_history() correctly 806s accepts or rejects the rich history corresponding to the upload tag named 806s 'importer/upload/1-2'. It is assumed that the package being imported is 806s always of version '1-2' for all parameter sets. 806s 806s Since the target function requires rich history, the case of there not 806s being rich history does not need to be tested here, as it wouldn't be 806s called in this case. 806s 806s validate_rich_history() is generic for all sourced rich history, not just 806s rich history sourced from an upload tag. But since it is independent of how 806s the rich history commit arrived, it is easiest to use upload tags to test 806s it; this results in coverage for all sources. 806s 806s :param GitUbuntuRepository repo: fixture providing a temporary 806s GitUbuntuRepository instance to use 806s :param repo_builder.Repo input_repo: input repository data 806s :param dict published_spec: the package simulated being imported from the 806s archive, specified as a dict to pass as **kwargs to 806s repo_builder.Commit.from_spec() 806s :param bool expected_result: the expected return value of, or exception 806s raised by, the call to validate_rich_history() 806s """ 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:910: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpydhrds21/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_validate_rich_history[input_repo2-published_spec2-RichHistoryTreeMismatch] _ 806s 806s repo = 806s input_repo = 806s published_spec = {'changelog_versions': ['1-2', '1-1']} 806s expected_result = 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'published_spec', 806s 'expected_result', 806s ], 806s [ 806s ( 806s # Common case: upload tag has a changelog parent as an ancestor 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec( 806s name='upload', 806s changelog_versions=['1-2', '1-1'], 806s parents=[Placeholder('import')], 806s ), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-2': Placeholder('upload'), 806s }, 806s ), 806s {'changelog_versions': ['1-2', '1-1']}, 806s True, 806s ), 806s ( 806s # Upload tag is the first one, with no parents present 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec( 806s name='upload', 806s version='1-2', 806s ), 806s ], 806s tags={ 806s 'importer/upload/1-2': Placeholder('upload'), 806s }, 806s ), 806s {'changelog_versions': ['1-2']}, 806s True, 806s ), 806s ( 806s # Upload tag mismatches published tree but is otherwise correct 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec( 806s name='upload', 806s changelog_versions=['1-2', '1-1'], 806s parents=[Placeholder('import')], 806s mutate=True, 806s ), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-2': Placeholder('upload'), 806s }, 806s ), 806s {'changelog_versions': ['1-2', '1-1']}, 806s target.RichHistoryTreeMismatch, 806s ), 806s ( 806s # Upload tag doesn't have a changelog parent as an ancestor but is 806s # otherwise correct 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec( 806s name='upload', 806s changelog_versions=['1-2', '1-1'], 806s ), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-2': Placeholder('upload'), 806s }, 806s ), 806s {'changelog_versions': ['1-2', '1-1']}, 806s target.RichHistoryHasNoChangelogParentAncestor, 806s ), 806s ], 806s ) 806s def test_validate_rich_history( 806s repo, 806s input_repo, 806s published_spec, 806s expected_result, 806s ): 806s """ 806s General test for validate_rich_history(). 806s 806s This unit tests validate_rich_history() for various parameterized cases. 806s Given an input repository and the specification of a Launchpad publication 806s of a source package, we check that validate_rich_history() correctly 806s accepts or rejects the rich history corresponding to the upload tag named 806s 'importer/upload/1-2'. It is assumed that the package being imported is 806s always of version '1-2' for all parameter sets. 806s 806s Since the target function requires rich history, the case of there not 806s being rich history does not need to be tested here, as it wouldn't be 806s called in this case. 806s 806s validate_rich_history() is generic for all sourced rich history, not just 806s rich history sourced from an upload tag. But since it is independent of how 806s the rich history commit arrived, it is easiest to use upload tags to test 806s it; this results in coverage for all sources. 806s 806s :param GitUbuntuRepository repo: fixture providing a temporary 806s GitUbuntuRepository instance to use 806s :param repo_builder.Repo input_repo: input repository data 806s :param dict published_spec: the package simulated being imported from the 806s archive, specified as a dict to pass as **kwargs to 806s repo_builder.Commit.from_spec() 806s :param bool expected_result: the expected return value of, or exception 806s raised by, the call to validate_rich_history() 806s """ 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:910: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmphj63v_u5/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_validate_rich_history[input_repo3-published_spec3-RichHistoryHasNoChangelogParentAncestor] _ 806s 806s repo = 806s input_repo = 806s published_spec = {'changelog_versions': ['1-2', '1-1']} 806s expected_result = 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'published_spec', 806s 'expected_result', 806s ], 806s [ 806s ( 806s # Common case: upload tag has a changelog parent as an ancestor 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec( 806s name='upload', 806s changelog_versions=['1-2', '1-1'], 806s parents=[Placeholder('import')], 806s ), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-2': Placeholder('upload'), 806s }, 806s ), 806s {'changelog_versions': ['1-2', '1-1']}, 806s True, 806s ), 806s ( 806s # Upload tag is the first one, with no parents present 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec( 806s name='upload', 806s version='1-2', 806s ), 806s ], 806s tags={ 806s 'importer/upload/1-2': Placeholder('upload'), 806s }, 806s ), 806s {'changelog_versions': ['1-2']}, 806s True, 806s ), 806s ( 806s # Upload tag mismatches published tree but is otherwise correct 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec( 806s name='upload', 806s changelog_versions=['1-2', '1-1'], 806s parents=[Placeholder('import')], 806s mutate=True, 806s ), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-2': Placeholder('upload'), 806s }, 806s ), 806s {'changelog_versions': ['1-2', '1-1']}, 806s target.RichHistoryTreeMismatch, 806s ), 806s ( 806s # Upload tag doesn't have a changelog parent as an ancestor but is 806s # otherwise correct 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec( 806s name='upload', 806s changelog_versions=['1-2', '1-1'], 806s ), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/upload/1-2': Placeholder('upload'), 806s }, 806s ), 806s {'changelog_versions': ['1-2', '1-1']}, 806s target.RichHistoryHasNoChangelogParentAncestor, 806s ), 806s ], 806s ) 806s def test_validate_rich_history( 806s repo, 806s input_repo, 806s published_spec, 806s expected_result, 806s ): 806s """ 806s General test for validate_rich_history(). 806s 806s This unit tests validate_rich_history() for various parameterized cases. 806s Given an input repository and the specification of a Launchpad publication 806s of a source package, we check that validate_rich_history() correctly 806s accepts or rejects the rich history corresponding to the upload tag named 806s 'importer/upload/1-2'. It is assumed that the package being imported is 806s always of version '1-2' for all parameter sets. 806s 806s Since the target function requires rich history, the case of there not 806s being rich history does not need to be tested here, as it wouldn't be 806s called in this case. 806s 806s validate_rich_history() is generic for all sourced rich history, not just 806s rich history sourced from an upload tag. But since it is independent of how 806s the rich history commit arrived, it is easiest to use upload tags to test 806s it; this results in coverage for all sources. 806s 806s :param GitUbuntuRepository repo: fixture providing a temporary 806s GitUbuntuRepository instance to use 806s :param repo_builder.Repo input_repo: input repository data 806s :param dict published_spec: the package simulated being imported from the 806s archive, specified as a dict to pass as **kwargs to 806s repo_builder.Commit.from_spec() 806s :param bool expected_result: the expected return value of, or exception 806s raised by, the call to validate_rich_history() 806s """ 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:910: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpkg9pyphh/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s ______________________ test_add_changelog_note_to_commit _______________________ 806s 806s repo = 806s 806s def test_add_changelog_note_to_commit(repo): 806s """add_changelog_note_to_commit should add the expected note""" 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='1-1'), 806s repo_builder.Commit.from_spec( 806s name='1-2', 806s changelog_versions=['1-1', '1-2'], 806s parents=[Placeholder('1-1')], 806s ), 806s ], 806s tags={'1-1': Placeholder('1-1'), '1-2': Placeholder('1-2')}, 806s > ).write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:953: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpoqh_fnsp/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s ____________________ test_add_changelog_note_to_commit_utf8 ____________________ 806s 806s repo = 806s 806s def test_add_changelog_note_to_commit_utf8(repo): 806s """A changelog file with non-UTF8 should have such characters substituted 806s 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s """ 806s test_utf8_error_changelog_path = os.path.join( 806s pkg_resources.resource_filename('gitubuntu', 'changelog_tests'), 806s 'test_utf8_error', 806s ) 806s with open(test_utf8_error_changelog_path, 'rb') as f: 806s utf8_changelog_blob = f.read() 806s 806s # We only need an example child commit with a debian/changelog file since 806s # this is the only file accessed by add_changelog_note_to_commit(). 806s # Further, the parent need only exist and can be empty. 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit(name='parent'), 806s repo_builder.Commit( 806s tree=repo_builder.Tree({'debian': repo_builder.Tree( 806s {'changelog': repo_builder.Blob(utf8_changelog_blob)} 806s )}), 806s name='child', 806s ) 806s ], 806s tags={'parent': Placeholder('parent'), 'child': Placeholder('child')}, 806s > ).write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:1002: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpjqmx8od1/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s _________________ test_double_changelog_note_add_does_not_fail _________________ 806s 806s repo = 806s 806s def test_double_changelog_note_add_does_not_fail(repo): 806s """add_changelog_note_to_commit shouldn't fail if a note already exists""" 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='1-1'), 806s repo_builder.Commit.from_spec( 806s name='1-2', 806s changelog_versions=['1-1', '1-2'], 806s parents=[Placeholder('1-1')], 806s ), 806s ], 806s tags={'1-1': Placeholder('1-1'), '1-2': Placeholder('1-2')}, 806s > ).write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:1035: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpxf03lndv/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s ___________________________ test_create_import_note ____________________________ 806s 806s repo = 806s 806s def test_create_import_note(repo): 806s """create_import_note() should create a note in the correct ref""" 806s repo_builder.Repo( 806s commits=[repo_builder.Commit(name='root')], 806s tags={'root': repo_builder.Placeholder('root')}, 806s > ).write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:1066: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpfb24pr55/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ______________________ test_create_import_note_timestamp _______________________ 806s 806s repo = 806s 806s def test_create_import_note_timestamp(repo): 806s """create_import_note() should include the timestamp in the note""" 806s repo_builder.Repo( 806s commits=[repo_builder.Commit(name='root')], 806s tags={'root': repo_builder.Placeholder('root')}, 806s > ).write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:1082: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpa80j_fpf/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s _______________________ test_import_creates_import_note ________________________ 806s 806s repo = 806s 806s def test_import_creates_import_note(repo): 806s """When an import runs, the note should appear in the correct ref""" 806s with source_builder.Source() as dsc_pathname: 806s > target.import_unapplied_dsc( 806s repo=repo, 806s version='1-1', 806s namespace='importer', 806s dist='ubuntu', 806s dsc_pathname=dsc_pathname, 806s head_name='ubuntu/focal', 806s skip_orig=True, 806s parent_overrides={}, 806s ) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:1102: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 806s commit, tag = find_or_create_unapplied_commit( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 806s changelog_parents = get_unapplied_import_parents( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 806s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 806s changelog = self.get_changelog_from_treeish(treeish) 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 806s return Changelog.from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:569: in from_treeish 806s blob = follow_symlinks_to_blob( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpay_33jwh/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s ___________________ test_import_unapplied_spi_quilt_patches ____________________ 806s 806s get_import_commit_msg_mock = 806s get_import_tag_msg_mock = 806s repo = 806s 806s @patch('gitubuntu.importer.get_import_tag_msg') 806s @patch('gitubuntu.importer.get_import_commit_msg') 806s def test_import_unapplied_spi_quilt_patches( 806s get_import_commit_msg_mock, 806s get_import_tag_msg_mock, 806s repo, 806s ): 806s """Test that a package with quilt patches is imported with correct 806s unapplied refs 806s 806s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 806s that determines the commit message to use for a given import 806s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 806s that determines the tag message to use for a given import 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s """ 806s # Match the repo_builder objects 806s get_import_tag_msg_mock.return_value = 'Test tag' 806s get_import_commit_msg_mock.return_value = b'Test commit' 806s 806s publish_spec = source_builder.SourceSpec(has_patches=True) 806s 806s input_repo = repo_builder.Repo() 806s input_repo.write(repo.raw_repo) 806s expected_result = repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit( 806s tree=repo_builder.SourceTree( 806s source_builder.Source(publish_spec) 806s ), 806s name='publish' 806s ), 806s ], 806s tags={'importer/import/1-1': Placeholder('publish')}, 806s branches={'importer/ubuntu/trusty': Placeholder('publish')}, 806s ) 806s 806s with source_builder.Source(publish_spec) as dsc_path: 806s # import_unapplied_spi currently assumes it is called from the 806s # repository directory (pristine-tar and other commands rely on 806s # this) 806s > target.import_unapplied_spi( 806s repo=repo, 806s spi=MockSPI(dsc_path, publish_spec.version), 806s namespace='importer', 806s skip_orig=False, 806s parent_overrides={}, 806s ) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:1222: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:2308: in import_unapplied_spi 806s import_unapplied_dsc( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 806s commit, tag = find_or_create_unapplied_commit( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 806s changelog_parents = get_unapplied_import_parents( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 806s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 806s changelog = self.get_changelog_from_treeish(treeish) 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 806s return Changelog.from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:569: in from_treeish 806s blob = follow_symlinks_to_blob( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmp8jqcnuip/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: applying a 806s dpkg-source: info: applying b 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_import_unapplied_spi_parenting[input_repo0-changelog_versions0-validation_repo_delta0-validation_repo_expected_identical_refs0] _ 806s 806s get_import_commit_msg_mock = 806s get_import_tag_msg_mock = 806s repo = 806s input_repo = 806s changelog_versions = ['1-1'] 806s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-1': }} 806s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1'] 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'changelog_versions', 806s 'validation_repo_delta', 806s 'validation_repo_expected_identical_refs', 806s ], 806s [ 806s pytest.param( 806s repo_builder.Repo(), 806s ['1-1'], 806s { 806s 'add_commits': [ 806s repo_builder.Commit.from_spec(name='publish'), 806s ], 806s 'update_tags': {'importer/import/1-1': Placeholder('publish')}, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s ] 806s ), 806s pytest.param( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s ['1-2', '1-1'], 806s { 806s 'add_commits': [ 806s repo_builder.Commit.from_spec( 806s name='publish', 806s parents=[Placeholder('import')], 806s changelog_versions=['1-2', '1-1'], 806s ), 806s ], 806s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/import/1-2', 806s ], 806s ), 806s pytest.param( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s ['1-3', '1-2', '1-1'], 806s { 806s 'add_commits': [ 806s repo_builder.Commit.from_spec( 806s parents=[Placeholder('import')], 806s name='publish', 806s changelog_versions=['1-3', '1-2', '1-1'], 806s ), 806s ], 806s 'update_tags': {'importer/import/1-3': Placeholder('publish')}, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/import/1-3', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec( 806s name='reimport', 806s mutate='Reimport tag contents', 806s ), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s ['1-2', '1-1'], 806s { 806s 'add_commits': [ 806s repo_builder.Commit.from_spec( 806s parents=[ 806s Placeholder('import'), 806s Placeholder('reimport'), 806s ], 806s name='publish', 806s changelog_versions=['1-2', '1-1'], 806s ), 806s ], 806s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s 'refs/tags/importer/import/1-2', 806s ], 806s ), 806s ] 806s ) 806s @patch('gitubuntu.importer.get_import_tag_msg') 806s @patch('gitubuntu.importer.get_import_commit_msg') 806s def test_import_unapplied_spi_parenting( 806s get_import_commit_msg_mock, 806s get_import_tag_msg_mock, 806s repo, 806s input_repo, 806s changelog_versions, 806s validation_repo_delta, 806s validation_repo_expected_identical_refs, 806s ): 806s """Test that unapplied import commits have the correct parents 806s 806s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 806s that determines the commit message to use for a given import 806s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 806s that determines the tag message to use for a given import 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param list(str) changelog_versions: the versions in the changelog of a 806s fake package to test import 806s :param dict validation_repo_delta: how to transform the input 806s repository into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_identical_refs: refs that must be 806s identical between the validation repository and the output repository 806s 806s Verify that if an import of a package is made into input_repo where the 806s package being imported has the given changelog_versions, then the output 806s repository has commits with the parents we expect. This is tested by 806s comparing specific output references against the validation repository. 806s """ 806s 806s # Match the repo_builder objects 806s get_import_tag_msg_mock.return_value = 'Test tag' 806s get_import_commit_msg_mock.return_value = b'Test commit' 806s 806s input_repo.write(repo.raw_repo) 806s 806s publish_spec = source_builder.SourceSpec( 806s changelog_versions=changelog_versions, 806s ) 806s 806s with source_builder.Source(publish_spec) as dsc_path: 806s # import_unapplied_spi currently assumes it is called from the 806s # repository directory (pristine-tar and other commands rely on 806s # this) 806s > target.import_unapplied_spi( 806s repo=repo, 806s spi=MockSPI(dsc_path, publish_spec.version), 806s namespace='importer', 806s skip_orig=False, 806s parent_overrides={}, 806s ) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:1391: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:2308: in import_unapplied_spi 806s import_unapplied_dsc( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 806s commit, tag = find_or_create_unapplied_commit( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 806s changelog_parents = get_unapplied_import_parents( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 806s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 806s changelog = self.get_changelog_from_treeish(treeish) 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 806s return Changelog.from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:569: in from_treeish 806s blob = follow_symlinks_to_blob( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpyjfgh7yb/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_import_unapplied_spi_parenting[input_repo1-changelog_versions1-validation_repo_delta1-validation_repo_expected_identical_refs1] _ 806s 806s get_import_commit_msg_mock = 806s get_import_tag_msg_mock = 806s repo = 806s input_repo = 806s changelog_versions = ['1-2', '1-1'] 806s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-2': }} 806s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1', 'refs/tags/importer/import/1-2'] 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'changelog_versions', 806s 'validation_repo_delta', 806s 'validation_repo_expected_identical_refs', 806s ], 806s [ 806s pytest.param( 806s repo_builder.Repo(), 806s ['1-1'], 806s { 806s 'add_commits': [ 806s repo_builder.Commit.from_spec(name='publish'), 806s ], 806s 'update_tags': {'importer/import/1-1': Placeholder('publish')}, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s ] 806s ), 806s pytest.param( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s ['1-2', '1-1'], 806s { 806s 'add_commits': [ 806s repo_builder.Commit.from_spec( 806s name='publish', 806s parents=[Placeholder('import')], 806s changelog_versions=['1-2', '1-1'], 806s ), 806s ], 806s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/import/1-2', 806s ], 806s ), 806s pytest.param( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s ['1-3', '1-2', '1-1'], 806s { 806s 'add_commits': [ 806s repo_builder.Commit.from_spec( 806s parents=[Placeholder('import')], 806s name='publish', 806s changelog_versions=['1-3', '1-2', '1-1'], 806s ), 806s ], 806s 'update_tags': {'importer/import/1-3': Placeholder('publish')}, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/import/1-3', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec( 806s name='reimport', 806s mutate='Reimport tag contents', 806s ), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s ['1-2', '1-1'], 806s { 806s 'add_commits': [ 806s repo_builder.Commit.from_spec( 806s parents=[ 806s Placeholder('import'), 806s Placeholder('reimport'), 806s ], 806s name='publish', 806s changelog_versions=['1-2', '1-1'], 806s ), 806s ], 806s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s 'refs/tags/importer/import/1-2', 806s ], 806s ), 806s ] 806s ) 806s @patch('gitubuntu.importer.get_import_tag_msg') 806s @patch('gitubuntu.importer.get_import_commit_msg') 806s def test_import_unapplied_spi_parenting( 806s get_import_commit_msg_mock, 806s get_import_tag_msg_mock, 806s repo, 806s input_repo, 806s changelog_versions, 806s validation_repo_delta, 806s validation_repo_expected_identical_refs, 806s ): 806s """Test that unapplied import commits have the correct parents 806s 806s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 806s that determines the commit message to use for a given import 806s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 806s that determines the tag message to use for a given import 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param list(str) changelog_versions: the versions in the changelog of a 806s fake package to test import 806s :param dict validation_repo_delta: how to transform the input 806s repository into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_identical_refs: refs that must be 806s identical between the validation repository and the output repository 806s 806s Verify that if an import of a package is made into input_repo where the 806s package being imported has the given changelog_versions, then the output 806s repository has commits with the parents we expect. This is tested by 806s comparing specific output references against the validation repository. 806s """ 806s 806s # Match the repo_builder objects 806s get_import_tag_msg_mock.return_value = 'Test tag' 806s get_import_commit_msg_mock.return_value = b'Test commit' 806s 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:1381: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpc46gda_w/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_import_unapplied_spi_parenting[input_repo2-changelog_versions2-validation_repo_delta2-validation_repo_expected_identical_refs2] _ 806s 806s get_import_commit_msg_mock = 806s get_import_tag_msg_mock = 806s repo = 806s input_repo = 806s changelog_versions = ['1-3', '1-2', '1-1'] 806s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-3': }} 806s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1', 'refs/tags/importer/import/1-3'] 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'changelog_versions', 806s 'validation_repo_delta', 806s 'validation_repo_expected_identical_refs', 806s ], 806s [ 806s pytest.param( 806s repo_builder.Repo(), 806s ['1-1'], 806s { 806s 'add_commits': [ 806s repo_builder.Commit.from_spec(name='publish'), 806s ], 806s 'update_tags': {'importer/import/1-1': Placeholder('publish')}, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s ] 806s ), 806s pytest.param( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s ['1-2', '1-1'], 806s { 806s 'add_commits': [ 806s repo_builder.Commit.from_spec( 806s name='publish', 806s parents=[Placeholder('import')], 806s changelog_versions=['1-2', '1-1'], 806s ), 806s ], 806s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/import/1-2', 806s ], 806s ), 806s pytest.param( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s ['1-3', '1-2', '1-1'], 806s { 806s 'add_commits': [ 806s repo_builder.Commit.from_spec( 806s parents=[Placeholder('import')], 806s name='publish', 806s changelog_versions=['1-3', '1-2', '1-1'], 806s ), 806s ], 806s 'update_tags': {'importer/import/1-3': Placeholder('publish')}, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/import/1-3', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec( 806s name='reimport', 806s mutate='Reimport tag contents', 806s ), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s ['1-2', '1-1'], 806s { 806s 'add_commits': [ 806s repo_builder.Commit.from_spec( 806s parents=[ 806s Placeholder('import'), 806s Placeholder('reimport'), 806s ], 806s name='publish', 806s changelog_versions=['1-2', '1-1'], 806s ), 806s ], 806s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s 'refs/tags/importer/import/1-2', 806s ], 806s ), 806s ] 806s ) 806s @patch('gitubuntu.importer.get_import_tag_msg') 806s @patch('gitubuntu.importer.get_import_commit_msg') 806s def test_import_unapplied_spi_parenting( 806s get_import_commit_msg_mock, 806s get_import_tag_msg_mock, 806s repo, 806s input_repo, 806s changelog_versions, 806s validation_repo_delta, 806s validation_repo_expected_identical_refs, 806s ): 806s """Test that unapplied import commits have the correct parents 806s 806s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 806s that determines the commit message to use for a given import 806s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 806s that determines the tag message to use for a given import 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param list(str) changelog_versions: the versions in the changelog of a 806s fake package to test import 806s :param dict validation_repo_delta: how to transform the input 806s repository into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_identical_refs: refs that must be 806s identical between the validation repository and the output repository 806s 806s Verify that if an import of a package is made into input_repo where the 806s package being imported has the given changelog_versions, then the output 806s repository has commits with the parents we expect. This is tested by 806s comparing specific output references against the validation repository. 806s """ 806s 806s # Match the repo_builder objects 806s get_import_tag_msg_mock.return_value = 'Test tag' 806s get_import_commit_msg_mock.return_value = b'Test commit' 806s 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:1381: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpj0xxsjmz/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_import_unapplied_spi_parenting[input_repo3-changelog_versions3-validation_repo_delta3-validation_repo_expected_identical_refs3] _ 806s 806s get_import_commit_msg_mock = 806s get_import_tag_msg_mock = 806s repo = 806s input_repo = 806s changelog_versions = ['1-2', '1-1'] 806s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-2': }} 806s 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'] 806s 806s @pytest.mark.parametrize( 806s [ 806s 'input_repo', 806s 'changelog_versions', 806s 'validation_repo_delta', 806s 'validation_repo_expected_identical_refs', 806s ], 806s [ 806s pytest.param( 806s repo_builder.Repo(), 806s ['1-1'], 806s { 806s 'add_commits': [ 806s repo_builder.Commit.from_spec(name='publish'), 806s ], 806s 'update_tags': {'importer/import/1-1': Placeholder('publish')}, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s ] 806s ), 806s pytest.param( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s ['1-2', '1-1'], 806s { 806s 'add_commits': [ 806s repo_builder.Commit.from_spec( 806s name='publish', 806s parents=[Placeholder('import')], 806s changelog_versions=['1-2', '1-1'], 806s ), 806s ], 806s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/import/1-2', 806s ], 806s ), 806s pytest.param( 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import')], 806s tags={'importer/import/1-1': Placeholder('import')}, 806s ), 806s ['1-3', '1-2', '1-1'], 806s { 806s 'add_commits': [ 806s repo_builder.Commit.from_spec( 806s parents=[Placeholder('import')], 806s name='publish', 806s changelog_versions=['1-3', '1-2', '1-1'], 806s ), 806s ], 806s 'update_tags': {'importer/import/1-3': Placeholder('publish')}, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/import/1-3', 806s ], 806s ), 806s ( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import'), 806s repo_builder.Commit.from_spec( 806s name='reimport', 806s mutate='Reimport tag contents', 806s ), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import'), 806s 'importer/reimport/import/1-1/0': Placeholder('import'), 806s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 806s }, 806s ), 806s ['1-2', '1-1'], 806s { 806s 'add_commits': [ 806s repo_builder.Commit.from_spec( 806s parents=[ 806s Placeholder('import'), 806s Placeholder('reimport'), 806s ], 806s name='publish', 806s changelog_versions=['1-2', '1-1'], 806s ), 806s ], 806s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 806s }, 806s [ 806s 'refs/tags/importer/import/1-1', 806s 'refs/tags/importer/reimport/import/1-1/0', 806s 'refs/tags/importer/reimport/import/1-1/1', 806s 'refs/tags/importer/import/1-2', 806s ], 806s ), 806s ] 806s ) 806s @patch('gitubuntu.importer.get_import_tag_msg') 806s @patch('gitubuntu.importer.get_import_commit_msg') 806s def test_import_unapplied_spi_parenting( 806s get_import_commit_msg_mock, 806s get_import_tag_msg_mock, 806s repo, 806s input_repo, 806s changelog_versions, 806s validation_repo_delta, 806s validation_repo_expected_identical_refs, 806s ): 806s """Test that unapplied import commits have the correct parents 806s 806s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 806s that determines the commit message to use for a given import 806s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 806s that determines the tag message to use for a given import 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param list(str) changelog_versions: the versions in the changelog of a 806s fake package to test import 806s :param dict validation_repo_delta: how to transform the input 806s repository into a "validation repository", expressed as a dict to 806s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 806s input repository. The validation repository is then used for the 806s purposes of comparison against the output repository. 806s :param list(str) validation_repo_expected_identical_refs: refs that must be 806s identical between the validation repository and the output repository 806s 806s Verify that if an import of a package is made into input_repo where the 806s package being imported has the given changelog_versions, then the output 806s repository has commits with the parents we expect. This is tested by 806s comparing specific output references against the validation repository. 806s """ 806s 806s # Match the repo_builder objects 806s get_import_tag_msg_mock.return_value = 'Test tag' 806s get_import_commit_msg_mock.return_value = b'Test commit' 806s 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:1381: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpj_8dlgtw/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s __________________ test_import_unapplied_spi_parent_override ___________________ 806s 806s get_import_commit_msg_mock = 806s get_import_tag_msg_mock = 806s repo = 806s 806s @patch('gitubuntu.importer.get_import_tag_msg') 806s @patch('gitubuntu.importer.get_import_commit_msg') 806s def test_import_unapplied_spi_parent_override( 806s get_import_commit_msg_mock, 806s get_import_tag_msg_mock, 806s repo, 806s ): 806s """Test import_unapplied_spi() parent_override functionality 806s 806s Test that if parent_overrides is used in the import_unapplied_spi call then 806s the resulting commit correctly uses the overridden parents specified. 806s 806s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 806s that determines the commit message to use for a given import 806s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 806s that determines the tag message to use for a given import 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s """ 806s # Match the repo_builder objects 806s get_import_tag_msg_mock.return_value = 'Test tag' 806s get_import_commit_msg_mock.return_value = b'Test commit' 806s 806s input_repo = repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec(name='import1-1', version='1-1'), 806s repo_builder.Commit.from_spec(name='import1-2', version='1-2'), 806s ], 806s tags={ 806s 'importer/import/1-1': Placeholder('import1-1'), 806s 'importer/import/1-2': Placeholder('import1-2'), 806s }, 806s ) 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:1444: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpslqois8k/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s ______________ test_import_unapplied_spi_parent_override_failure _______________ 806s 806s repo = 806s 806s def test_import_unapplied_spi_parent_override_failure(repo): 806s """ 806s Test override_parents ParentOverrideError raise 806s 806s When a parent override is specified but the specified version doesn't have 806s an import tag, an exception should be raised. 806s 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s """ 806s repo_builder.Repo( 806s commits=[repo_builder.Commit.from_spec(name='import1-1')], 806s tags={'importer/import/1-1': Placeholder('import1-1')}, 806s > ).write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:1499: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmp2eqw_6gc/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_import_applied_spi_parenting[input_repo0-expected_ancestor_commits0-expected_parent_commits0] _ 806s 806s get_import_commit_msg_mock = 806s get_import_tag_msg_mock = 806s repo = 806s input_repo = 806s expected_ancestor_commits = ['refs/tags/importer/import/1-2'] 806s expected_parent_commits = ['refs/tags/importer/applied/1-1'] 806s 806s @pytest.mark.parametrize( 806s 'input_repo, expected_ancestor_commits, expected_parent_commits', [ 806s # In general, these tests do not set applied commit parents in the 806s # input repository since we have no mechanism to do that correctly, but 806s # this doesn't matter for the purposes of these tests. 806s 806s # if only one import tag exists, then it is the parent 806s pytest.param( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec( 806s name='unapplied1', 806s has_patches=True, 806s ), 806s repo_builder.Commit.from_spec( 806s parents=[Placeholder('unapplied1')], 806s name='unapplied2', 806s changelog_versions=['1-2', '1-1'], 806s has_patches=True, 806s ), 806s repo_builder.Commit.from_spec( 806s name='applied1', 806s patches_applied=True, 806s ), 806s ], 806s # no branches: technically not possible but branches are not 806s # relevant to the test 806s branches={}, 806s tags={ 806s 'importer/import/1-1': Placeholder('unapplied1'), 806s 'importer/import/1-2': Placeholder('unapplied2'), 806s 'importer/applied/1-1': Placeholder('applied1'), 806s }, 806s ), 806s ['refs/tags/importer/import/1-2'], 806s ['refs/tags/importer/applied/1-1'], 806s ), 806s 806s # if multiple import tags exist, then do they all end up as parents? 806s pytest.param( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec( 806s name='unapplied1', 806s has_patches=True, 806s ), 806s repo_builder.Commit.from_spec( 806s parents=[Placeholder('unapplied1')], 806s name='unapplied2', 806s changelog_versions=['1-2', '1-1'], 806s has_patches=True, 806s ), 806s repo_builder.Commit.from_spec( 806s parents=[Placeholder('unapplied1')], 806s name='unapplied2reimport', 806s changelog_versions=['1-2', '1-1'], 806s has_patches=True, 806s mutate='reimport tag', 806s ), 806s repo_builder.Commit.from_spec( 806s name='applied1', 806s patches_applied=True, 806s ), 806s ], 806s # no branches: technically not possible but branches are not 806s # relevant to the test 806s branches={}, 806s tags={ 806s 'importer/import/1-1': 806s Placeholder('unapplied1'), 806s 'importer/import/1-2': 806s Placeholder('unapplied2'), 806s 'importer/reimport/import/1-2/0': 806s Placeholder('unapplied2'), 806s 'importer/reimport/import/1-2/1': 806s Placeholder('unapplied2reimport'), 806s 'importer/applied/1-1': 806s Placeholder('applied1'), 806s }, 806s ), 806s [ 806s 'refs/tags/importer/reimport/import/1-2/0', 806s 'refs/tags/importer/reimport/import/1-2/1', 806s ], 806s [ 806s 'refs/tags/importer/applied/1-1', 806s ], 806s marks=pytest.mark.xfail(reason='LP: #1755247'), 806s ), 806s 806s # do we correctly create a reimport tag because a different import 806s # already exists? 806s pytest.param( 806s repo_builder.Repo( 806s commits=[ 806s repo_builder.Commit.from_spec( 806s name='unapplied1', 806s has_patches=True, 806s ), 806s repo_builder.Commit.from_spec( 806s name='unapplied1_reimport', 806s has_patches=True, 806s mutate='reimport contents', 806s ), 806s repo_builder.Commit.from_spec( 806s parents=[Placeholder('unapplied1')], 806s name='unapplied2', 806s changelog_versions=['1-2', '1-1'], 806s has_patches=True, 806s ), 806s repo_builder.Commit.from_spec( 806s name='applied1', 806s patches_applied=True, 806s ), 806s repo_builder.Commit.from_spec( 806s name='applied1_reimport', 806s patches_applied=True, 806s mutate='reimport contents', 806s ), 806s ], 806s # no branches: technically not possible but branches are not 806s # relevant to the test 806s branches={}, 806s tags={ 806s 'importer/import/1-1': 806s Placeholder('unapplied1'), 806s 'importer/reimport/import/1-1/0': 806s Placeholder('unapplied1'), 806s 'importer/reimport/import/1-1/1': 806s Placeholder('unapplied1_reimport'), 806s 'importer/import/1-2': 806s Placeholder('unapplied2'), 806s 'importer/applied/1-1': 806s Placeholder('applied1'), 806s 'importer/reimport/applied/1-1/0': 806s Placeholder('applied1'), 806s 'importer/reimport/applied/1-1/1': 806s Placeholder('applied1_reimport'), 806s }, 806s ), 806s [ 806s 'refs/tags/importer/reimport/import/1-2/0', 806s 'refs/tags/importer/reimport/import/1-2/1', 806s ], 806s [ 806s 'refs/tags/importer/reimport/applied/1-1/0', 806s 'refs/tags/importer/reimport/applied/1-1/1', 806s ], 806s marks=pytest.mark.xfail(reason='LP: #1755247'), 806s ), 806s ], 806s ) 806s @patch('gitubuntu.importer.get_import_tag_msg') 806s @patch('gitubuntu.importer.get_import_commit_msg') 806s def test_import_applied_spi_parenting( 806s get_import_commit_msg_mock, 806s get_import_tag_msg_mock, 806s repo, 806s input_repo, 806s expected_ancestor_commits, 806s expected_parent_commits, 806s ): 806s """Test that applied import commits have the right parents 806s 806s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 806s that determines the commit message to use for a given import 806s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 806s that determines the tag message to use for a given import 806s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 806s temporary output repository 806s :param repo_builder.Repo input_repo: input repository data 806s :param list(str) expected_ancestor_commits: list of commit-ish strings that 806s must be ancestors of the 'applied/1-2' tag following the applied import 806s :param list(str) expected_parent_commits: list of commit-ish strings that 806s must be parents of the 'applied/1-2' tag following the applied import. 806s 806s A fake package with version '1-2' that has a changelog parent of '1-1' is 806s imported on top of the provided input_repo. The test fails if any 806s of the expected_ancestor_commits or expected_parent_commits are not 806s present. 806s 806s This test is ugly because we do not yet have a programmatic way 806s to get the interstitial commits of the patch applications. 806s """ 806s # Match the repo_builder objects 806s get_import_tag_msg_mock.return_value = 'Test tag' 806s get_import_commit_msg_mock.return_value = b'Test commit' 806s 806s > input_repo.write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:1698: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpcqvx8ftf/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: applying a 806s dpkg-source: info: applying b 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: applying a 806s dpkg-source: info: applying b 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: applying a 806s dpkg-source: info: applying b 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: applying a 806s dpkg-source: info: applying b 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: applying a 806s dpkg-source: info: applying b 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_authorship_date[False-Fri, 2 Feb 1971 12:34:56 +0100-expected_result0] __ 806s 806s repo = 806s override = False, input_string = 'Fri, 2 Feb 1971 12:34:56 +0100' 806s expected_result = (1971, 2, 2, 11, 34, 56, ...) 806s 806s @pytest.mark.parametrize(['override', 'input_string', 'expected_result'], [ 806s # Standard date that should parse and be used 806s (False, 'Fri, 2 Feb 1971 12:34:56 +0100', (1971, 2, 2, 11, 34, 56, 60)), 806s # Deliberately illegal date that cannot be parsed 806s (True, 'Failday, 30 Feb 1971 99:99:99 +9999', (1972, 3, 3, 12, 45, 57, 0)), 806s ]) 806s def test_authorship_date(repo, override, input_string, expected_result): 806s """Synthesized commit should use changelog or override when provided 806s 806s A synthesized commit should use the date of the changelog entry in the 806s usual case, or commit_date when an override is requested. 806s 806s :param GitUbuntuRepository repo: fixture providing a temporary 806s GitUbuntuRepository instance to use 806s :param bool override: whether a changelog date override should be requested 806s from import_unapplied_dsc() 806s :param str input_string: the timestamp part of the changelog entry to use 806s :param tuple expected_result: the expected author date of the synthesized 806s commit, specified as six parameters to datetime.datetime() followed by 806s the expected tz offset in minutes. 806s """ 806s spec = source_builder.SourceSpec(changelog_date=input_string) 806s with source_builder.Source(spec) as dsc_pathname: 806s > target.import_unapplied_dsc( 806s repo=repo, 806s version='1-1', 806s namespace='importer', 806s dist='ubuntu', 806s dsc_pathname=dsc_pathname, 806s head_name='ubuntu/focal', 806s skip_orig=True, 806s parent_overrides={}, 806s commit_date=datetime.datetime( 806s 1972, 806s 3, 806s 3, 806s 12, 806s 45, 806s 57, 806s tzinfo=datetime.timezone.utc, 806s ), 806s changelog_date_overrides=( 806s frozenset({'1-1'}) if override else frozenset() 806s ), 806s ) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:1815: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 806s commit, tag = find_or_create_unapplied_commit( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 806s changelog_parents = get_unapplied_import_parents( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 806s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 806s changelog = self.get_changelog_from_treeish(treeish) 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 806s return Changelog.from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:569: in from_treeish 806s blob = follow_symlinks_to_blob( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmp2lb45cpc/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s _ test_authorship_date[True-Failday, 30 Feb 1971 99:99:99 +9999-expected_result1] _ 806s 806s repo = 806s override = True, input_string = 'Failday, 30 Feb 1971 99:99:99 +9999' 806s expected_result = (1972, 3, 3, 12, 45, 57, ...) 806s 806s @pytest.mark.parametrize(['override', 'input_string', 'expected_result'], [ 806s # Standard date that should parse and be used 806s (False, 'Fri, 2 Feb 1971 12:34:56 +0100', (1971, 2, 2, 11, 34, 56, 60)), 806s # Deliberately illegal date that cannot be parsed 806s (True, 'Failday, 30 Feb 1971 99:99:99 +9999', (1972, 3, 3, 12, 45, 57, 0)), 806s ]) 806s def test_authorship_date(repo, override, input_string, expected_result): 806s """Synthesized commit should use changelog or override when provided 806s 806s A synthesized commit should use the date of the changelog entry in the 806s usual case, or commit_date when an override is requested. 806s 806s :param GitUbuntuRepository repo: fixture providing a temporary 806s GitUbuntuRepository instance to use 806s :param bool override: whether a changelog date override should be requested 806s from import_unapplied_dsc() 806s :param str input_string: the timestamp part of the changelog entry to use 806s :param tuple expected_result: the expected author date of the synthesized 806s commit, specified as six parameters to datetime.datetime() followed by 806s the expected tz offset in minutes. 806s """ 806s spec = source_builder.SourceSpec(changelog_date=input_string) 806s with source_builder.Source(spec) as dsc_pathname: 806s > target.import_unapplied_dsc( 806s repo=repo, 806s version='1-1', 806s namespace='importer', 806s dist='ubuntu', 806s dsc_pathname=dsc_pathname, 806s head_name='ubuntu/focal', 806s skip_orig=True, 806s parent_overrides={}, 806s commit_date=datetime.datetime( 806s 1972, 806s 3, 806s 3, 806s 12, 806s 45, 806s 57, 806s tzinfo=datetime.timezone.utc, 806s ), 806s changelog_date_overrides=( 806s frozenset({'1-1'}) if override else frozenset() 806s ), 806s ) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:1815: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 806s commit, tag = find_or_create_unapplied_commit( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 806s changelog_parents = get_unapplied_import_parents( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 806s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 806s changelog = self.get_changelog_from_treeish(treeish) 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 806s return Changelog.from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:569: in from_treeish 806s blob = follow_symlinks_to_blob( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpc47w5evy/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: srcpkg/debian/changelog(l4): ignoring invalid week day 'Failday' 806s LINE: -- git ubuntu Failday, 30 Feb 1971 99:99:99 +9999 806s dpkg-source: warning: srcpkg/debian/changelog(l4): cannot parse non-conformant date '30 Feb 1971 99:99:99 +9999' 806s LINE: -- git ubuntu Failday, 30 Feb 1971 99:99:99 +9999 806s dpkg-source: warning: missing information for output field Standards-Version 806s __________________ test_fetch_rich_history_from_changes_file ___________________ 806s 806s repo = 806s pygit2_repo = pygit2.Repository('/tmp/tmpv10cyyu_/.git/') 806s 806s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 806s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 806s def test_fetch_rich_history_from_changes_file(repo, pygit2_repo): 806s """Rich history specified in a changes file is found and validated""" 806s > rich_commit, parent_commit, import_tree = populate_rich_history( 806s import_repo=repo.raw_repo, 806s uploader_repo=pygit2_repo, 806s ) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:2111: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:2080: in populate_rich_history 806s ).write(import_repo) 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmp_cr_jq7k/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s ________ test_fetch_rich_history_from_changes_file_fetch_failure_retry _________ 806s 806s repo = 806s pygit2_repo = pygit2.Repository('/tmp/tmpywpp1qqf/.git/') 806s 806s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 806s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 806s def test_fetch_rich_history_from_changes_file_fetch_failure_retry( 806s repo, 806s pygit2_repo, 806s ): 806s """If rich history cannot be fetched once, it is retried""" 806s > rich_commit, parent_commit, import_tree = populate_rich_history( 806s import_repo=repo.raw_repo, 806s uploader_repo=pygit2_repo, 806s ) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:2204: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:2080: in populate_rich_history 806s ).write(import_repo) 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpntxfnjb9/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s ____________ test_fetch_rich_history_from_changes_file_missing_ref _____________ 806s 806s repo = 806s pygit2_repo = pygit2.Repository('/tmp/tmpujfs5ia1/.git/') 806s 806s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 806s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 806s def test_fetch_rich_history_from_changes_file_missing_ref( 806s repo, 806s pygit2_repo, 806s ): 806s """If rich history is specified but the ref cannot be found, a hard 806s exception is raised 806s """ 806s > rich_commit, _, _ = populate_rich_history( 806s import_repo=repo.raw_repo, 806s uploader_repo=pygit2_repo, 806s ) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:2243: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:2080: in populate_rich_history 806s ).write(import_repo) 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpyxpie3mm/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s ___________ test_fetch_rich_history_from_changes_file_missing_commit ___________ 806s 806s repo = 806s pygit2_repo = pygit2.Repository('/tmp/tmpjug1rpu7/.git/') 806s 806s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 806s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 806s def test_fetch_rich_history_from_changes_file_missing_commit( 806s repo, 806s pygit2_repo, 806s ): 806s """If rich history is specified but the commit cannot be found, an 806s exception is raised 806s """ 806s > rich_commit, _, _ = populate_rich_history( 806s import_repo=repo.raw_repo, 806s uploader_repo=pygit2_repo, 806s ) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:2271: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:2080: in populate_rich_history 806s ).write(import_repo) 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpb2ycbx3l/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s ____________ test_fetch_rich_history_from_changes_file_not_a_commit ____________ 806s 806s repo = 806s pygit2_repo = pygit2.Repository('/tmp/tmp1orsz58v/.git/') 806s 806s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 806s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 806s def test_fetch_rich_history_from_changes_file_not_a_commit(repo, pygit2_repo): 806s """If rich history is specified but the commit hash resolves to something 806s other than a commit, an exception is raised 806s """ 806s > rich_commit, _, _ = populate_rich_history( 806s import_repo=repo.raw_repo, 806s uploader_repo=pygit2_repo, 806s ) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:2297: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/importer_test.py:2080: in populate_rich_history 806s ).write(import_repo) 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpx7klm46d/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s __________________________ test_reconstruct_changelog __________________________ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmprs1he1ul/.git/') 806s monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7babcf4b9b80> 806s 806s @pytest.mark.skipif( 806s ENTRY_POINT_TYPE is None, 806s reason="Entry point testing not available", 806s ) 806s def test_reconstruct_changelog(pygit2_repo, monkeypatch): 806s '''The reconstruct-changelog endpoint should add the expected commit''' 806s monkeypatch.setenv('DEBFULLNAME', 'Test User') 806s monkeypatch.setenv('DEBEMAIL', 'test@example.com') 806s Repo( 806s commits=[ 806s Commit(tree=SourceTree(Source()), name='root'), 806s Commit( 806s tree=SourceTree(Source(spec=SourceSpec(mutate=1))), 806s message=' * Test changelog entry', 806s name='child', 806s parents=[Placeholder('root')], 806s ), 806s ], 806s tags={'root': Placeholder('root'), 'child': Placeholder('child')}, 806s > ).write(pygit2_repo) 806s 806s gitubuntu/integration_test.py:219: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmprs1he1ul/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s gitubuntu/repo_builder.py:389: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s dpkg-source: warning: missing information for output field Standards-Version 806s ___________________ TestObjectCreation.testRepoBranchesTags ____________________ 806s 806s self = 806s 806s def testRepoBranchesTags(self): 806s graph = Repo( 806s commits=[ 806s Commit( 806s Tree({}), 806s parents=[Placeholder('parent')], 806s name='child', 806s ), 806s Commit(Tree({}), name='parent'), 806s ], 806s branches={ 806s 'branch1': Placeholder('parent'), 806s 'branch2': Commit(Tree({'foo': Blob(b'qux')})), 806s }, 806s tags={ 806s 'tag1': Placeholder('child'), 806s 'tag2': Commit(Tree({'foo': Blob(b'quz')})), 806s }, 806s ) 806s > child_ref = graph.write(self.repo) 806s 806s gitubuntu/repo_builder_test.py:154: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpetljfeic/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s gitubuntu/repo_builder.py:389: AttributeError 806s ______________________ TestObjectCreation.testRepoTagger _______________________ 806s 806s self = 806s 806s def testRepoTagger(self): 806s """The tagger parameter should make it through to the tag""" 806s input_repo = Repo( 806s commits=[Commit(name='root')], 806s tags={'root': Placeholder('root')}, 806s tagger=pygit2.Signature( 806s 'Test Tagger', 806s 'test@example.com', 806s 1, 806s 2, 806s ), 806s ) 806s > input_repo.write(self.repo) 806s 806s gitubuntu/repo_builder_test.py:178: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpv17q87fn/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s gitubuntu/repo_builder.py:389: AttributeError 806s _______________________________ test_source_tree _______________________________ 806s 806s pygit2_repo = pygit2.Repository('/tmp/tmph_nmhjf7/.git/') 806s 806s def test_source_tree(pygit2_repo): 806s commit_str = Commit(SourceTree(Source())).write(pygit2_repo) 806s commit = pygit2_repo.get(commit_str) 806s > assert gitubuntu.git_repository.follow_symlinks_to_blob( 806s repo=pygit2_repo, 806s treeish_object=commit, 806s path='debian/changelog', 806s ) 806s 806s gitubuntu/repo_builder_test.py:190: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmph_nmhjf7/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s gitubuntu/git_repository.py:68: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s ______________________________ test_preservation _______________________________ 806s 806s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_preservation0') 806s repo = 806s 806s def test_preservation(tmpdir, repo): 806s """An export followed by an import should preserve rich history 806s 806s Given a minimal repository that should be able to have upload tags be 806s exported, when we import the export result into a similar repository with a 806s subtly different upload tag in which the rich history should still apply, 806s the result should be a correctly reconstructed upload tag. 806s 806s :param py.path tmpdir: the pytest standard tmpdir fixture. 806s :param repo: our standard repo fixture. 806s """ 806s Repo( 806s commits=[ 806s Commit( 806s name='1', 806s tree=Tree({ 806s 'a': Blob(b'a'), 806s }), 806s ), 806s Commit( 806s name='2', 806s parents=[Placeholder('1')], 806s tree=Tree({ 806s 'a': Blob(b'ab'), 806s }), 806s ), 806s Commit( 806s name='3', 806s parents=[Placeholder('2')], 806s tree=Tree({ 806s 'a': Blob(b'abc'), 806s }), 806s ), 806s ], 806s tags={ 806s 'importer/import/1': Placeholder('1'), 806s 'importer/upload/2': Placeholder('3'), 806s } 806s > ).write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/rich_history_test.py:51: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpr6bcd0m_/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s ______________________ test_preservation_multiple_parents ______________________ 806s 806s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_preservation_multiple_par0') 806s repo = 806s 806s def test_preservation_multiple_parents(tmpdir, repo): 806s """An export of rich history should omit multiple parent cases 806s 806s If an upload tag leads to multiple parents before we reach an import tag, 806s it should be excluded from the export as this type of upload tag is not 806s supported for rich history preservation. This test also serves to verify 806s code paths that handle the MultipleParentError exception in the export 806s code. 806s 806s :param py.path tmpdir: the pytest standard tmpdir fixture. 806s :param repo: our standard repo fixture. 806s """ 806s Repo( 806s commits=[ 806s Commit(name='1', message='a'), 806s Commit(name='2', message='b'), 806s Commit(name='child', parents=[Placeholder('1'), Placeholder('2')]), 806s ], 806s tags={ 806s 'importer/import/1': Placeholder('1'), 806s 'importer/upload/2': Placeholder('child'), 806s } 806s > ).write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/rich_history_test.py:102: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmp9e7sq81v/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s _________________________ test_preservation_no_parents _________________________ 806s 806s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_preservation_no_parents0') 806s repo = 806s 806s def test_preservation_no_parents(tmpdir, repo): 806s """An export of rich history should omit no parent cases 806s 806s If an upload tag leads to no parents before we reach an import tag, 806s it should be excluded from the export as this type of upload tag is not 806s supported for rich history preservation. This test also serves to verify 806s code paths that handle the NoParentError exception in the export 806s code. 806s 806s :param py.path tmpdir: the pytest standard tmpdir fixture. 806s :param repo: our standard repo fixture. 806s """ 806s Repo( 806s commits=[ 806s Commit(name='1', message='a'), 806s Commit(name='2', message='b'), 806s ], 806s tags={ 806s 'importer/import/1': Placeholder('1'), 806s 'importer/upload/2': Placeholder('2'), 806s } 806s > ).write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/rich_history_test.py:129: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmp5ke82yaz/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s _____________ test_input_edge_cases[before_export0-before_import0] _____________ 806s 806s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_input_edge_cases_before_e0') 806s repo = 806s before_export = {'commits': [, , 'importer/upload/2': }} 806s before_import = {'commits': [], 'tags': {'importer/import/1': }} 806s 806s @pytest.mark.parametrize(['before_export', 'before_import'], [ 806s ( 806s # Commit messages with patch-like contents should not fail 806s 806s # If a commit message in rich history contains text in a patch-like 806s # format (such as a diff of some file), it should not prevent correct 806s # round-tripping. "git format-patch" followed by "git am" fails this 806s # test, for example. 806s { 806s 'commits': [ 806s Commit(name='1', message='a', tree=Tree({'a': Blob(b'a')})), 806s Commit( 806s name='2', 806s message='''First line 806s 806s Inline patch that isn't part of the real patch starts here 806s 806s --- a/foo 806s +++ b/foo 806s @@ -1 +1,2 @@ 806s foo 806s +bar 806s ''', 806s tree=Tree({'a': Blob(b'ab')}), 806s parents=[Placeholder('1')], 806s ), 806s ], 806s 'tags': { 806s 'importer/import/1': Placeholder('1'), 806s 'importer/upload/2': Placeholder('2'), 806s } 806s }, 806s { 806s 'commits': [ 806s Commit(name='b1', message='c', tree=Tree({'a': Blob(b'a')})), 806s ], 806s 'tags': {'importer/import/1': Placeholder('b1')}, 806s }, 806s ), 806s ( 806s # Commits that have no changes should round trip 806s { 806s 'commits': [ 806s Commit( 806s name='1', 806s message='a', 806s ), 806s Commit( 806s name='2', 806s message='b', 806s parents=[Placeholder('1')], 806s ), 806s ], 806s 'tags': { 806s 'importer/import/1': Placeholder('1'), 806s 'importer/upload/2': Placeholder('2'), 806s }, 806s }, 806s { 806s 'commits': [Commit(name='b1', message='c')], 806s 'tags': {'importer/import/1': Placeholder('b1')}, 806s }, 806s ), 806s ( 806s # Commits that have no commit message should round trip 806s { 806s 'commits': [ 806s Commit( 806s name='1', 806s message='a', 806s ), 806s Commit( 806s name='2', 806s message='', 806s tree=Tree({'a': Blob(b'a')}), 806s parents=[Placeholder('1')], 806s ), 806s ], 806s 'tags': { 806s 'importer/import/1': Placeholder('1'), 806s 'importer/upload/2': Placeholder('2'), 806s } 806s }, 806s { 806s 'commits': [Commit(name='b1', message='c')], 806s 'tags': {'importer/import/1': Placeholder('b1')}, 806s }, 806s ), 806s ]) 806s def test_input_edge_cases(tmpdir, repo, before_export, before_import): 806s """ 806s Edge cases in input rich history should reimport without failure 806s 806s Check that rich history preservation completes without an exception in 806s various cases. Details of each case are described in comments in the test 806s parameters above. 806s 806s Since these tests generally cover the mutated case (where rich history has 806s to be ported forward because parent commits have mutated), we must remove 806s and recreate the 'importer/import/1' tag so that it is different before 806s attempting reimport. This is done by deleting all ('importer/*') tags and 806s then using the before_import parameter to recreate it again. 806s 806s :param py.path tmpdir: the pytest standard tmpdir fixture. 806s :param GitUbuntuRepository repo: our standard repo fixture. 806s :param dict before_export: the parameters to supply to Repo() to construct 806s the repository that will be exported. 806s :param dict before_import: the parametsrs to supply to Repo() to add to the 806s repository before attempting reimport. 806s """ 806s > Repo(**before_export).write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/rich_history_test.py:260: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpil_b62_d/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s _____________ test_input_edge_cases[before_export1-before_import1] _____________ 806s 806s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_input_edge_cases_before_e1') 806s repo = 806s before_export = {'commits': [, , 'importer/upload/2': }} 806s before_import = {'commits': [], 'tags': {'importer/import/1': }} 806s 806s @pytest.mark.parametrize(['before_export', 'before_import'], [ 806s ( 806s # Commit messages with patch-like contents should not fail 806s 806s # If a commit message in rich history contains text in a patch-like 806s # format (such as a diff of some file), it should not prevent correct 806s # round-tripping. "git format-patch" followed by "git am" fails this 806s # test, for example. 806s { 806s 'commits': [ 806s Commit(name='1', message='a', tree=Tree({'a': Blob(b'a')})), 806s Commit( 806s name='2', 806s message='''First line 806s 806s Inline patch that isn't part of the real patch starts here 806s 806s --- a/foo 806s +++ b/foo 806s @@ -1 +1,2 @@ 806s foo 806s +bar 806s ''', 806s tree=Tree({'a': Blob(b'ab')}), 806s parents=[Placeholder('1')], 806s ), 806s ], 806s 'tags': { 806s 'importer/import/1': Placeholder('1'), 806s 'importer/upload/2': Placeholder('2'), 806s } 806s }, 806s { 806s 'commits': [ 806s Commit(name='b1', message='c', tree=Tree({'a': Blob(b'a')})), 806s ], 806s 'tags': {'importer/import/1': Placeholder('b1')}, 806s }, 806s ), 806s ( 806s # Commits that have no changes should round trip 806s { 806s 'commits': [ 806s Commit( 806s name='1', 806s message='a', 806s ), 806s Commit( 806s name='2', 806s message='b', 806s parents=[Placeholder('1')], 806s ), 806s ], 806s 'tags': { 806s 'importer/import/1': Placeholder('1'), 806s 'importer/upload/2': Placeholder('2'), 806s }, 806s }, 806s { 806s 'commits': [Commit(name='b1', message='c')], 806s 'tags': {'importer/import/1': Placeholder('b1')}, 806s }, 806s ), 806s ( 806s # Commits that have no commit message should round trip 806s { 806s 'commits': [ 806s Commit( 806s name='1', 806s message='a', 806s ), 806s Commit( 806s name='2', 806s message='', 806s tree=Tree({'a': Blob(b'a')}), 806s parents=[Placeholder('1')], 806s ), 806s ], 806s 'tags': { 806s 'importer/import/1': Placeholder('1'), 806s 'importer/upload/2': Placeholder('2'), 806s } 806s }, 806s { 806s 'commits': [Commit(name='b1', message='c')], 806s 'tags': {'importer/import/1': Placeholder('b1')}, 806s }, 806s ), 806s ]) 806s def test_input_edge_cases(tmpdir, repo, before_export, before_import): 806s """ 806s Edge cases in input rich history should reimport without failure 806s 806s Check that rich history preservation completes without an exception in 806s various cases. Details of each case are described in comments in the test 806s parameters above. 806s 806s Since these tests generally cover the mutated case (where rich history has 806s to be ported forward because parent commits have mutated), we must remove 806s and recreate the 'importer/import/1' tag so that it is different before 806s attempting reimport. This is done by deleting all ('importer/*') tags and 806s then using the before_import parameter to recreate it again. 806s 806s :param py.path tmpdir: the pytest standard tmpdir fixture. 806s :param GitUbuntuRepository repo: our standard repo fixture. 806s :param dict before_export: the parameters to supply to Repo() to construct 806s the repository that will be exported. 806s :param dict before_import: the parametsrs to supply to Repo() to add to the 806s repository before attempting reimport. 806s """ 806s > Repo(**before_export).write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/rich_history_test.py:260: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpn4644vlu/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s _____________ test_input_edge_cases[before_export2-before_import2] _____________ 806s 806s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_input_edge_cases_before_e2') 806s repo = 806s before_export = {'commits': [, , 'importer/upload/2': }} 806s before_import = {'commits': [], 'tags': {'importer/import/1': }} 806s 806s @pytest.mark.parametrize(['before_export', 'before_import'], [ 806s ( 806s # Commit messages with patch-like contents should not fail 806s 806s # If a commit message in rich history contains text in a patch-like 806s # format (such as a diff of some file), it should not prevent correct 806s # round-tripping. "git format-patch" followed by "git am" fails this 806s # test, for example. 806s { 806s 'commits': [ 806s Commit(name='1', message='a', tree=Tree({'a': Blob(b'a')})), 806s Commit( 806s name='2', 806s message='''First line 806s 806s Inline patch that isn't part of the real patch starts here 806s 806s --- a/foo 806s +++ b/foo 806s @@ -1 +1,2 @@ 806s foo 806s +bar 806s ''', 806s tree=Tree({'a': Blob(b'ab')}), 806s parents=[Placeholder('1')], 806s ), 806s ], 806s 'tags': { 806s 'importer/import/1': Placeholder('1'), 806s 'importer/upload/2': Placeholder('2'), 806s } 806s }, 806s { 806s 'commits': [ 806s Commit(name='b1', message='c', tree=Tree({'a': Blob(b'a')})), 806s ], 806s 'tags': {'importer/import/1': Placeholder('b1')}, 806s }, 806s ), 806s ( 806s # Commits that have no changes should round trip 806s { 806s 'commits': [ 806s Commit( 806s name='1', 806s message='a', 806s ), 806s Commit( 806s name='2', 806s message='b', 806s parents=[Placeholder('1')], 806s ), 806s ], 806s 'tags': { 806s 'importer/import/1': Placeholder('1'), 806s 'importer/upload/2': Placeholder('2'), 806s }, 806s }, 806s { 806s 'commits': [Commit(name='b1', message='c')], 806s 'tags': {'importer/import/1': Placeholder('b1')}, 806s }, 806s ), 806s ( 806s # Commits that have no commit message should round trip 806s { 806s 'commits': [ 806s Commit( 806s name='1', 806s message='a', 806s ), 806s Commit( 806s name='2', 806s message='', 806s tree=Tree({'a': Blob(b'a')}), 806s parents=[Placeholder('1')], 806s ), 806s ], 806s 'tags': { 806s 'importer/import/1': Placeholder('1'), 806s 'importer/upload/2': Placeholder('2'), 806s } 806s }, 806s { 806s 'commits': [Commit(name='b1', message='c')], 806s 'tags': {'importer/import/1': Placeholder('b1')}, 806s }, 806s ), 806s ]) 806s def test_input_edge_cases(tmpdir, repo, before_export, before_import): 806s """ 806s Edge cases in input rich history should reimport without failure 806s 806s Check that rich history preservation completes without an exception in 806s various cases. Details of each case are described in comments in the test 806s parameters above. 806s 806s Since these tests generally cover the mutated case (where rich history has 806s to be ported forward because parent commits have mutated), we must remove 806s and recreate the 'importer/import/1' tag so that it is different before 806s attempting reimport. This is done by deleting all ('importer/*') tags and 806s then using the before_import parameter to recreate it again. 806s 806s :param py.path tmpdir: the pytest standard tmpdir fixture. 806s :param GitUbuntuRepository repo: our standard repo fixture. 806s :param dict before_export: the parameters to supply to Repo() to construct 806s the repository that will be exported. 806s :param dict before_import: the parametsrs to supply to Repo() to add to the 806s repository before attempting reimport. 806s """ 806s > Repo(**before_export).write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/rich_history_test.py:260: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpm2imahdi/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s _______________________ test_preservation_fast_forwards ________________________ 806s 806s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_preservation_fast_forward0') 806s repo = 806s 806s def test_preservation_fast_forwards(tmpdir, repo): 806s """Rich history that can be fast forwarded should not mutate 806s 806s :param py.path tmpdir: the pytest standard tmpdir fixture. 806s :param GitUbuntuRepository repo: our standard repo fixture. 806s """ 806s Repo( 806s commits=[ 806s Commit( 806s name='1', 806s message='a', 806s ), 806s Commit( 806s name='2', 806s message='', 806s tree=Tree({'a': Blob(b'a')}), 806s parents=[Placeholder('1')], 806s ), 806s ], 806s tags={ 806s 'importer/import/1': Placeholder('1'), 806s 'importer/upload/2': Placeholder('2'), 806s } 806s > ).write(repo.raw_repo) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/rich_history_test.py:294: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s self = 806s repo = pygit2.Repository('/tmp/tmpatm06y8z/.git/'), record = {} 806s 806s def write(self, repo, record=None): 806s replace_placeholders(self) 806s record = record or dict() 806s written_commits = [ 806s commit.write(repo=repo, record=record) 806s for commit 806s in self.commit_list 806s ] 806s for name, target in self.branches.items(): 806s repo.create_branch( 806s name, 806s repo.get(target.write(repo)).peel(pygit2.Commit), 806s ) 806s for name, target in self.tags.items(): 806s repo.create_tag( 806s name, 806s target.write(repo), 806s > pygit2.GIT_OBJ_COMMIT, 806s self.tagger.signature, 806s 'Tag message', 806s ) 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/repo_builder.py:389: AttributeError 806s _______________________ test_source_create_with_version ________________________ 806s 806s repo = 806s 806s def test_source_create_with_version(repo): 806s > version = get_spec_changelog_version(repo, version='3', native=True) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/source_builder_test.py:57: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 806s changelog = repo.get_changelog_from_treeish(tree_hash) 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 806s return Changelog.from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:569: in from_treeish 806s blob = follow_symlinks_to_blob( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpxz79s17j/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (native)' 806s dpkg-source: info: building source-builder-package in source-builder-package_3.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_3.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s _______________________ test_source_create_with_versions _______________________ 806s 806s repo = 806s 806s def test_source_create_with_versions(repo): 806s source_spec = target.SourceSpec(changelog_versions=['3', '4'], native=True) 806s with target.Source(source_spec) as f: 806s tree_hash = importer.dsc_to_tree_hash(repo.raw_repo, f) 806s > changelog = repo.get_changelog_from_treeish(tree_hash) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/source_builder_test.py:65: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 806s return Changelog.from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:569: in from_treeish 806s blob = follow_symlinks_to_blob( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpn4xv7hma/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (native)' 806s dpkg-source: info: building source-builder-package in source-builder-package_3.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_3.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s ____________ test_source_native_source_format[True-3.0 (native)\n] _____________ 806s 806s repo = 806s native = True, expected = b'3.0 (native)\n' 806s 806s @pytest.mark.parametrize('native,expected', [ 806s (True, b"3.0 (native)\n"), 806s (False, b"3.0 (quilt)\n"), 806s ]) 806s def test_source_native_source_format(repo, native, expected): 806s with target.Source(target.SourceSpec(native=native)) as dsc_path: 806s > blob = git_repository.follow_symlinks_to_blob( 806s repo.raw_repo, 806s dsc_path_to_tree(repo, dsc_path), 806s 'debian/source/format', 806s ) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/source_builder_test.py:133: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmp5jeegbpt/.git/') 806s top_tree_object = 806s search_path = 'debian/source/format' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (native)' 806s dpkg-source: info: building source-builder-package in source-builder-package_1.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s ____________ test_source_native_source_format[False-3.0 (quilt)\n] _____________ 806s 806s repo = 806s native = False, expected = b'3.0 (quilt)\n' 806s 806s @pytest.mark.parametrize('native,expected', [ 806s (True, b"3.0 (native)\n"), 806s (False, b"3.0 (quilt)\n"), 806s ]) 806s def test_source_native_source_format(repo, native, expected): 806s with target.Source(target.SourceSpec(native=native)) as dsc_path: 806s > blob = git_repository.follow_symlinks_to_blob( 806s repo.raw_repo, 806s dsc_path_to_tree(repo, dsc_path), 806s 'debian/source/format', 806s ) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/source_builder_test.py:133: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmp5ag39bly/.git/') 806s top_tree_object = 806s search_path = 'debian/source/format' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s _________________________ test_source_quilt_no_patches _________________________ 806s 806s repo = 806s 806s def test_source_quilt_no_patches(repo): 806s with target.Source(target.SourceSpec()) as dsc_path: 806s top = dsc_path_to_tree(repo, dsc_path) 806s debian_entry = top['debian'] 806s > assert debian_entry.type in [pygit2.GIT_OBJ_TREE, 'tree'] 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/source_builder_test.py:144: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s ________________________ test_source_quilt_with_patches ________________________ 806s 806s repo = 806s 806s def test_source_quilt_with_patches(repo): 806s spec = target.SourceSpec(has_patches=True) 806s with target.Source(spec) as dsc_path: 806s top = dsc_path_to_tree(repo, dsc_path) 806s expected_files = ['series', 'a', 'b'] 806s for basename in expected_files: 806s > assert git_repository.follow_symlinks_to_blob( 806s repo.raw_repo, 806s top, 806s 'debian/patches/%s' % basename, 806s ) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/source_builder_test.py:156: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmp9w_lrfa0/.git/') 806s top_tree_object = 806s search_path = 'debian/patches/series' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: applying a 806s dpkg-source: info: applying b 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s ____________________ test_source_quilt_with_patches_applied ____________________ 806s 806s repo = 806s 806s def test_source_quilt_with_patches_applied(repo): 806s spec = target.SourceSpec(has_patches=True) 806s with target.Source(spec) as dsc_path: 806s top = dsc_path_to_tree(repo, dsc_path, patches_applied=True) 806s expected_files = [ 806s 'debian/patches/series', 806s 'debian/patches/a', 806s 'debian/patches/b', 806s 'a', 806s 'b', 806s ] 806s for filename in expected_files: 806s > assert git_repository.follow_symlinks_to_blob( 806s repo.raw_repo, 806s top, 806s filename, 806s ) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/source_builder_test.py:183: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpyeepkqu6/.git/') 806s top_tree_object = 806s search_path = 'debian/patches/series' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: applying a 806s dpkg-source: info: applying b 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: using patch list from debian/patches/series 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s ______________________ test_source_version_native_default ______________________ 806s 806s repo = 806s 806s def test_source_version_native_default(repo): 806s """The default version string for a native package should not have a 806s '-' in it. 806s """ 806s > version = get_spec_changelog_version(repo, native=True) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/source_builder_test.py:194: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 806s changelog = repo.get_changelog_from_treeish(tree_hash) 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 806s return Changelog.from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:569: in from_treeish 806s blob = follow_symlinks_to_blob( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmp9qto1e2h/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (native)' 806s dpkg-source: info: building source-builder-package in source-builder-package_1.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s ____________________ test_source_version_non_native_default ____________________ 806s 806s repo = 806s 806s def test_source_version_non_native_default(repo): 806s """The default version string for a non-native package should have a 806s '-' in it. 806s """ 806s > version = get_spec_changelog_version(repo, native=False) 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/source_builder_test.py:202: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 806s changelog = repo.get_changelog_from_treeish(tree_hash) 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 806s return Changelog.from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:569: in from_treeish 806s blob = follow_symlinks_to_blob( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmp4u4nuoqc/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s _____________________ test_source_version_native_specific ______________________ 806s 806s repo = 806s 806s def test_source_version_native_specific(repo): 806s """We should be able to create a native package with a 806s native-looking version string. 806s """ 806s > version = get_spec_changelog_version(repo, native=True, version='1.0') 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/source_builder_test.py:210: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 806s changelog = repo.get_changelog_from_treeish(tree_hash) 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 806s return Changelog.from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:569: in from_treeish 806s blob = follow_symlinks_to_blob( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmphib89izv/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (native)' 806s dpkg-source: info: building source-builder-package in source-builder-package_1.0.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1.0.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s ___________________ test_source_version_non_native_specific ____________________ 806s 806s repo = 806s 806s def test_source_version_non_native_specific(repo): 806s """We should be able to create a non-native package with a 806s non-native-looking version string. 806s """ 806s > version = get_spec_changelog_version(repo, native=False, version='1.0-1') 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/source_builder_test.py:218: 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 806s changelog = repo.get_changelog_from_treeish(tree_hash) 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 806s return Changelog.from_treeish( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:569: in from_treeish 806s blob = follow_symlinks_to_blob( 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 806s return _follow_symlinks_to_blob( 806s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 806s 806s repo = pygit2.Repository('/tmp/tmpc2j144c5/.git/') 806s top_tree_object = 806s search_path = 'debian/changelog' 806s _rel_tree = 806s _rel_path = '' 806s 806s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 806s _rel_tree=None, _rel_path='' 806s ): 806s '''Recursively follow a path down a tree, following symlinks, to find blob 806s 806s repo: pygit2.Repository object 806s top_tree: pygit2.Tree object of the top of the tree structure 806s search_path: '/'-separated path string of blob to find 806s _rel_tree: (internal) which tree to look further into 806s _rel_path: (internal) the path we are in so far 806s ''' 806s 806s NORMAL_BLOB_MODES = set([ 806s pygit2.GIT_FILEMODE_BLOB, 806s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 806s ]) 806s 806s _rel_tree = _rel_tree or top_tree_object 806s head, tail = posixpath.split(search_path) 806s 806s # A traditional functional split would put a single entry in head with tail 806s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 806s # to make it appear to have traditional semantics. 806s if not head: 806s head = tail 806s tail = None 806s 806s entry = _rel_tree[head] 806s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 806s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 806s 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/git_repository.py:68: AttributeError 806s ----------------------------- Captured stdout call ----------------------------- 806s dpkg-source: info: using source format '3.0 (quilt)' 806s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.0.orig.tar.gz 806s dpkg-source: info: building source-builder-package in source-builder-package_1.0-1.debian.tar.xz 806s dpkg-source: info: building source-builder-package in source-builder-package_1.0-1.dsc 806s ----------------------------- Captured stderr call ----------------------------- 806s dpkg-source: warning: missing information for output field Standards-Version 806s =============================== warnings summary =============================== 806s gitubuntu/__main__.py:7 806s /tmp/autopkgtest.9FxI6v/build.5dA/src/gitubuntu/__main__.py:7: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html 806s import pkg_resources 806s 806s ../../../../usr/lib/python3/dist-packages/pkg_resources/__init__.py:3154 806s /usr/lib/python3/dist-packages/pkg_resources/__init__.py:3154: DeprecationWarning: Deprecated call to `pkg_resources.declare_namespace('logilab')`. 806s 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 806s declare_namespace(pkg) 806s 806s -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html 806s 806s ---------- coverage: platform linux, python 3.12.7-final-0 ----------- 806s Name Stmts Miss Cover 806s --------------------------------------------------------------- 806s gitubuntu/__init__.py 0 0 100% 806s gitubuntu/__main__.py 103 94 9% 806s gitubuntu/build.py 185 131 29% 806s gitubuntu/cache.py 1 0 100% 806s gitubuntu/clone.py 70 54 23% 806s gitubuntu/dsc.py 65 16 75% 806s gitubuntu/exportorig.py 48 37 23% 806s gitubuntu/git_repository.py 1103 521 53% 806s gitubuntu/git_repository_test.py 316 40 87% 806s gitubuntu/importer.py 707 446 37% 806s gitubuntu/importer_service.py 215 22 90% 806s gitubuntu/importer_service_broker.py 60 49 18% 806s gitubuntu/importer_service_ipc.py 12 2 83% 806s gitubuntu/importer_service_poller.py 37 25 32% 806s gitubuntu/importer_service_test.py 147 0 100% 806s gitubuntu/importer_service_worker.py 87 64 26% 806s gitubuntu/importer_service_worker_test.py 18 0 100% 806s gitubuntu/importer_tag_test.py 47 20 57% 806s gitubuntu/importer_test.py 388 133 66% 806s gitubuntu/integration_test.py 67 26 61% 806s gitubuntu/logging.py 8 4 50% 806s gitubuntu/merge.py 219 192 12% 806s gitubuntu/patch_state.py 2 0 100% 806s gitubuntu/prepare_upload.py 86 3 97% 806s gitubuntu/prepare_upload_test.py 152 0 100% 806s gitubuntu/queue.py 174 148 15% 806s gitubuntu/remote.py 100 85 15% 806s gitubuntu/repo_builder.py 162 0 100% 806s gitubuntu/repo_builder_test.py 159 12 92% 806s gitubuntu/repo_comparator.py 32 25 22% 806s gitubuntu/rich_history.py 67 45 33% 806s gitubuntu/rich_history_test.py 53 31 42% 806s gitubuntu/run.py 72 12 83% 806s gitubuntu/scriptutils.py 11 0 100% 806s gitubuntu/source_builder.py 119 0 100% 806s gitubuntu/source_builder_test.py 105 18 83% 806s gitubuntu/source_information.py 339 133 61% 806s gitubuntu/source_information_test.py 78 3 96% 806s gitubuntu/spec.py 3 0 100% 806s gitubuntu/submit.py 103 86 17% 806s gitubuntu/tag.py 78 69 12% 806s gitubuntu/test_fixtures.py 29 5 83% 806s gitubuntu/test_util.py 5 0 100% 806s gitubuntu/version.py 1 0 100% 806s gitubuntu/versioning.py 124 16 87% 806s --------------------------------------------------------------- 806s TOTAL 5957 2567 57% 806s 806s =========================== short test summary info ============================ 806s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[0] 806s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[1] 806s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[2] 806s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[3] 806s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[4] 806s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob_not_found[tree1] 806s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob_not_found[tree2] 806s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob_not_found[tree3] 806s FAILED gitubuntu/git_repository_test.py::test_git_escape_dir_to_tree - Attrib... 806s FAILED gitubuntu/git_repository_test.py::test_determine_quilt_series_path[tree_data1-debian/patches/series] 806s FAILED gitubuntu/git_repository_test.py::test_determine_quilt_series_path[tree_data2-debian/patches/series] 806s FAILED gitubuntu/git_repository_test.py::test_determine_quilt_series_path[tree_data3-debian/patches/debian.series] 806s FAILED gitubuntu/git_repository_test.py::test_determine_quilt_series_path[tree_data4-debian/patches/debian.series] 806s FAILED gitubuntu/git_repository_test.py::test_quilt_env - AttributeError: mod... 806s FAILED gitubuntu/git_repository_test.py::test_repo_quilt_env - AttributeError... 806s FAILED gitubuntu/git_repository_test.py::test_repo_quilt_env_from_treeish_str 806s 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] 806s 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] 806s 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] 806s FAILED gitubuntu/git_repository_test.py::test_commit_tree - AttributeError: m... 806s FAILED gitubuntu/git_repository_test.py::test_descendant_of[root-root-False] 806s FAILED gitubuntu/git_repository_test.py::test_descendant_of[child1-root-True] 806s FAILED gitubuntu/git_repository_test.py::test_descendant_of[root-child1-False] 806s FAILED gitubuntu/git_repository_test.py::test_descendant_of[grandchild1-root-True] 806s FAILED gitubuntu/git_repository_test.py::test_descendant_of[child1-child2-False] 806s FAILED gitubuntu/git_repository_test.py::test_descendant_of[root-disjoint-False] 806s FAILED gitubuntu/git_repository_test.py::test_create_tag - AttributeError: mo... 806s FAILED gitubuntu/git_repository_test.py::test_get_all_reimport_tags - Attribu... 806s FAILED gitubuntu/git_repository_test.py::test_get_head_info - AttributeError:... 806s 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] 806s 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] 806s 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] 806s 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] 806s 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] 806s 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] 806s 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] 806s 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] 806s FAILED gitubuntu/importer_tag_test.py::test_import_applied_spi_tags[input_repo0-validation_repo_delta0-validation_repo_expected_treewise_refs0-True] 806s FAILED gitubuntu/importer_tag_test.py::test_import_applied_spi_tags[input_repo2-validation_repo_delta2-validation_repo_expected_treewise_refs2-False] 806s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags[input_repo1-PatchState.UNAPPLIED-expected1] 806s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags[input_repo2-PatchState.UNAPPLIED-expected2] 806s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags[input_repo4-PatchState.APPLIED-expected4] 806s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags[input_repo5-PatchState.APPLIED-expected5] 806s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags_ordering - A... 806s FAILED gitubuntu/importer_test.py::test_create_import_tag[input_repo0-validation_repo_delta0-validation_repo_expected_identical_refs0] 806s FAILED gitubuntu/importer_test.py::test_create_import_tag[input_repo1-validation_repo_delta1-validation_repo_expected_identical_refs1] 806s FAILED gitubuntu/importer_test.py::test_create_import_tag[input_repo2-validation_repo_delta2-validation_repo_expected_identical_refs2] 806s FAILED gitubuntu/importer_test.py::test_create_import_tag_hash_stability_on_first_import 806s FAILED gitubuntu/importer_test.py::test_create_import_tag_hash_stability_on_reimport 806s FAILED gitubuntu/importer_test.py::test_create_applied_tag[input_repo0-validation_repo_delta0-validation_repo_expected_identical_refs0] 806s FAILED gitubuntu/importer_test.py::test_create_applied_tag[input_repo1-validation_repo_delta1-validation_repo_expected_identical_refs1] 806s FAILED gitubuntu/importer_test.py::test_create_applied_tag[input_repo2-validation_repo_delta2-validation_repo_expected_identical_refs2] 806s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo1-parent_overrides1-changelog_versions1-PatchState.UNAPPLIED-expected_refs1] 806s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo2-parent_overrides2-changelog_versions2-PatchState.UNAPPLIED-expected_refs2] 806s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo3-parent_overrides3-changelog_versions3-PatchState.UNAPPLIED-expected_refs3] 806s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo5-parent_overrides5-changelog_versions5-PatchState.APPLIED-expected_refs5] 806s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo6-parent_overrides6-changelog_versions6-PatchState.APPLIED-expected_refs6] 806s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo7-parent_overrides7-changelog_versions7-PatchState.APPLIED-expected_refs7] 806s FAILED gitubuntu/importer_test.py::test_validate_rich_history[input_repo0-published_spec0-True] 806s FAILED gitubuntu/importer_test.py::test_validate_rich_history[input_repo1-published_spec1-True] 806s FAILED gitubuntu/importer_test.py::test_validate_rich_history[input_repo2-published_spec2-RichHistoryTreeMismatch] 806s FAILED gitubuntu/importer_test.py::test_validate_rich_history[input_repo3-published_spec3-RichHistoryHasNoChangelogParentAncestor] 806s FAILED gitubuntu/importer_test.py::test_add_changelog_note_to_commit - Attrib... 806s FAILED gitubuntu/importer_test.py::test_add_changelog_note_to_commit_utf8 - A... 806s FAILED gitubuntu/importer_test.py::test_double_changelog_note_add_does_not_fail 806s FAILED gitubuntu/importer_test.py::test_create_import_note - AttributeError: ... 806s FAILED gitubuntu/importer_test.py::test_create_import_note_timestamp - Attrib... 806s FAILED gitubuntu/importer_test.py::test_import_creates_import_note - Attribut... 806s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_quilt_patches - ... 806s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parenting[input_repo0-changelog_versions0-validation_repo_delta0-validation_repo_expected_identical_refs0] 806s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parenting[input_repo1-changelog_versions1-validation_repo_delta1-validation_repo_expected_identical_refs1] 806s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parenting[input_repo2-changelog_versions2-validation_repo_delta2-validation_repo_expected_identical_refs2] 806s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parenting[input_repo3-changelog_versions3-validation_repo_delta3-validation_repo_expected_identical_refs3] 806s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parent_override 806s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parent_override_failure 806s FAILED gitubuntu/importer_test.py::test_import_applied_spi_parenting[input_repo0-expected_ancestor_commits0-expected_parent_commits0] 806s FAILED gitubuntu/importer_test.py::test_authorship_date[False-Fri, 2 Feb 1971 12:34:56 +0100-expected_result0] 806s FAILED gitubuntu/importer_test.py::test_authorship_date[True-Failday, 30 Feb 1971 99:99:99 +9999-expected_result1] 806s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file 806s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file_fetch_failure_retry 806s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file_missing_ref 806s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file_missing_commit 806s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file_not_a_commit 806s FAILED gitubuntu/integration_test.py::test_reconstruct_changelog - AttributeE... 806s FAILED gitubuntu/repo_builder_test.py::TestObjectCreation::testRepoBranchesTags 806s FAILED gitubuntu/repo_builder_test.py::TestObjectCreation::testRepoTagger - A... 806s FAILED gitubuntu/repo_builder_test.py::test_source_tree - AttributeError: mod... 806s FAILED gitubuntu/rich_history_test.py::test_preservation - AttributeError: mo... 806s FAILED gitubuntu/rich_history_test.py::test_preservation_multiple_parents - A... 806s FAILED gitubuntu/rich_history_test.py::test_preservation_no_parents - Attribu... 806s FAILED gitubuntu/rich_history_test.py::test_input_edge_cases[before_export0-before_import0] 806s FAILED gitubuntu/rich_history_test.py::test_input_edge_cases[before_export1-before_import1] 806s FAILED gitubuntu/rich_history_test.py::test_input_edge_cases[before_export2-before_import2] 806s FAILED gitubuntu/rich_history_test.py::test_preservation_fast_forwards - Attr... 806s FAILED gitubuntu/source_builder_test.py::test_source_create_with_version - At... 806s FAILED gitubuntu/source_builder_test.py::test_source_create_with_versions - A... 806s FAILED gitubuntu/source_builder_test.py::test_source_native_source_format[True-3.0 (native)\n] 806s FAILED gitubuntu/source_builder_test.py::test_source_native_source_format[False-3.0 (quilt)\n] 806s FAILED gitubuntu/source_builder_test.py::test_source_quilt_no_patches - Attri... 806s FAILED gitubuntu/source_builder_test.py::test_source_quilt_with_patches - Att... 806s FAILED gitubuntu/source_builder_test.py::test_source_quilt_with_patches_applied 806s FAILED gitubuntu/source_builder_test.py::test_source_version_native_default 806s FAILED gitubuntu/source_builder_test.py::test_source_version_non_native_default 806s FAILED gitubuntu/source_builder_test.py::test_source_version_native_specific 806s FAILED gitubuntu/source_builder_test.py::test_source_version_non_native_specific 806s = 105 failed, 348 passed, 3 skipped, 3 xfailed, 2 warnings in 69.63s (0:01:09) = 806s pytest failed; self test will fail 806s autopkgtest [09:48:22]: test self-test: -----------------------] 807s self-test FAIL non-zero exit status 1 807s autopkgtest [09:48:23]: test self-test: - - - - - - - - - - results - - - - - - - - - - 807s autopkgtest [09:48:23]: @@@@@@@@@@@@@@@@@@@@ summary 807s self-test FAIL non-zero exit status 1 819s nova [W] Skipping flock for amd64 819s Creating nova instance adt-plucky-amd64-git-ubuntu-20241203-093455-juju-7f2275-prod-proposed-migration-environment-2-6578e90b-454f-43cc-8196-81b1be451fab from image adt/ubuntu-plucky-amd64-server-20241203.img (UUID 9e8e99d5-3366-42e6-8f42-63b527e5abcc)... 819s nova [W] nova quota exceeded (attempt #0) 819s nova [W] nova quota exceeded (attempt #1)