0s autopkgtest [23:17:19]: starting date and time: 2024-11-28 23:17:19+0000 0s autopkgtest [23:17:19]: git checkout: be626eda Fix armhf LXD image generation for plucky 0s autopkgtest [23:17:19]: host juju-7f2275-prod-proposed-migration-environment-2; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.3gh_vuxp/out --timeout-copy=6000 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --apt-pocket=proposed=src:python-pygit2 --apt-upgrade git-ubuntu --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 --env=ADT_TEST_TRIGGERS=python-pygit2/1.16.0-2 -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest-s390x --security-groups autopkgtest-juju-7f2275-prod-proposed-migration-environment-2@bos03-s390x-1.secgroup --name adt-plucky-s390x-git-ubuntu-20241128-231719-juju-7f2275-prod-proposed-migration-environment-2-a6abbbe8-fe56-4516-8280-635c143225ea --image adt/ubuntu-plucky-s390x-server --keyname testbed-juju-7f2275-prod-proposed-migration-environment-2 --net-id=net_prod-proposed-migration-s390x -e TERM=linux -e ''"'"'http_proxy=http://squid.internal:3128'"'"'' -e ''"'"'https_proxy=http://squid.internal:3128'"'"'' -e ''"'"'no_proxy=127.0.0.1,127.0.1.1,login.ubuntu.com,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,keyserver.ubuntu.com,launchpadlibrarian.net,launchpadcontent.net,launchpad.net,10.24.0.0/24,keystone.ps5.canonical.com,objectstorage.prodstack5.canonical.com'"'"'' --mirror=http://ftpmaster.internal/ubuntu/ 144s autopkgtest [23:19:43]: testbed dpkg architecture: s390x 144s autopkgtest [23:19:43]: testbed apt version: 2.9.14ubuntu1 145s autopkgtest [23:19:44]: @@@@@@@@@@@@@@@@@@@@ test bed setup 145s autopkgtest [23:19:44]: testbed release detected to be: None 145s autopkgtest [23:19:44]: updating testbed package index (apt update) 146s Get:1 http://ftpmaster.internal/ubuntu plucky-proposed InRelease [73.9 kB] 146s Hit:2 http://ftpmaster.internal/ubuntu plucky InRelease 146s Hit:3 http://ftpmaster.internal/ubuntu plucky-updates InRelease 146s Hit:4 http://ftpmaster.internal/ubuntu plucky-security InRelease 146s Get:5 http://ftpmaster.internal/ubuntu plucky-proposed/main Sources [64.0 kB] 146s Get:6 http://ftpmaster.internal/ubuntu plucky-proposed/universe Sources [772 kB] 147s Get:7 http://ftpmaster.internal/ubuntu plucky-proposed/restricted Sources [9708 B] 147s Get:8 http://ftpmaster.internal/ubuntu plucky-proposed/multiverse Sources [14.4 kB] 147s Get:9 http://ftpmaster.internal/ubuntu plucky-proposed/main s390x Packages [91.4 kB] 147s Get:10 http://ftpmaster.internal/ubuntu plucky-proposed/restricted s390x Packages [928 B] 147s Get:11 http://ftpmaster.internal/ubuntu plucky-proposed/universe s390x Packages [600 kB] 148s Get:12 http://ftpmaster.internal/ubuntu plucky-proposed/multiverse s390x Packages [6956 B] 148s Fetched 1633 kB in 2s (670 kB/s) 149s Reading package lists... 149s Reading package lists... 149s Building dependency tree... 149s Reading state information... 149s Calculating upgrade... 150s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 150s Reading package lists... 150s Building dependency tree... 150s Reading state information... 150s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 150s autopkgtest [23:19:49]: upgrading testbed (apt dist-upgrade and autopurge) 150s Reading package lists... 150s Building dependency tree... 150s Reading state information... 150s Calculating upgrade...Starting pkgProblemResolver with broken count: 0 150s Starting 2 pkgProblemResolver with broken count: 0 150s Done 150s Entering ResolveByKeep 151s 151s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 151s Reading package lists... 151s Building dependency tree... 151s Reading state information... 151s Starting pkgProblemResolver with broken count: 0 151s Starting 2 pkgProblemResolver with broken count: 0 151s Done 151s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 154s autopkgtest [23:19:53]: testbed running kernel: Linux 6.11.0-8-generic #8-Ubuntu SMP Mon Sep 16 12:49:35 UTC 2024 154s autopkgtest [23:19:53]: @@@@@@@@@@@@@@@@@@@@ apt-source git-ubuntu 155s Get:1 http://ftpmaster.internal/ubuntu plucky/universe git-ubuntu 1.1-1 (dsc) [2280 B] 155s Get:2 http://ftpmaster.internal/ubuntu plucky/universe git-ubuntu 1.1-1 (tar) [179 kB] 155s Get:3 http://ftpmaster.internal/ubuntu plucky/universe git-ubuntu 1.1-1 (diff) [5776 B] 155s gpgv: Signature made Wed Jul 3 16:18:24 2024 UTC 155s gpgv: using RSA key A62D2CFBD50B9B5BF360D54B159EB5C4EFC8774C 155s gpgv: Can't check signature: No public key 155s dpkg-source: warning: cannot verify inline signature for ./git-ubuntu_1.1-1.dsc: no acceptable signature found 155s autopkgtest [23:19:54]: testing package git-ubuntu version 1.1-1 156s autopkgtest [23:19:55]: build not needed 156s autopkgtest [23:19:55]: test self-test: preparing testbed 156s Reading package lists... 156s Building dependency tree... 156s Reading state information... 157s Starting pkgProblemResolver with broken count: 0 157s Starting 2 pkgProblemResolver with broken count: 0 157s Done 157s The following NEW packages will be installed: 157s dctrl-tools debian-archive-keyring devscripts diffstat dput gettext git 157s git-buildpackage git-man git-ubuntu libb-hooks-op-check-perl 157s libclass-method-modifiers-perl libclass-xsaccessor-perl libclone-perl 157s libdevel-callchecker-perl libdynaloader-functions-perl libencode-locale-perl 157s liberror-perl libfile-dirlist-perl libfile-homedir-perl libfile-listing-perl 157s libfile-touch-perl libfile-which-perl libgit2-1.8 libgomp1 157s libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl 157s libhttp-cookies-perl libhttp-date-perl libhttp-message-perl 157s libhttp-negotiate-perl libhttp-parser2.9 libimport-into-perl libio-html-perl 157s libio-pty-perl libio-socket-ssl-perl libipc-run-perl libjs-jquery 157s libjs-jquery-hotkeys libjs-jquery-isonscreen libjs-jquery-metadata 157s libjs-jquery-tablesorter libjs-jquery-throttle-debounce libjs-sphinxdoc 157s libjs-underscore liblwp-mediatypes-perl liblwp-protocol-https-perl 157s libmodule-runtime-perl libmoo-perl libnet-http-perl libnet-ssleay-perl 157s libnorm1t64 libparams-classify-perl libpgm-5.3-0t64 libpython3.13-minimal 157s libpython3.13-stdlib librole-tiny-perl libsodium23 libsub-quote-perl 157s libsys-cpuaffinity-perl libtimedate-perl libtry-tiny-perl liburi-perl 157s libwww-perl libwww-robotrules-perl libxdelta2t64 libzmq5 patchutils pbzip2 157s perl-openssl-defaults pixz pristine-tar pylint python3-argcomplete 157s python3-astroid python3-cachetools python3-coverage python3-dateutil 157s python3-debian python3-debianbts python3-dill python3-distro-info 157s python3-gpg python3-importlib-metadata python3-iniconfig python3-isort 157s python3-jaraco.classes python3-jeepney python3-keyring python3-keyrings.alt 157s python3-launchpadlib-desktop python3-logilab-common python3-mccabe 157s python3-mypy-extensions python3-packaging python3-platformdirs 157s python3-pluggy python3-py python3-pycryptodome python3-pygit2 python3-pytest 157s python3-pytest-cov python3-secretstorage python3-tenacity python3-tomlkit 157s python3-ubuntutools python3-xdg python3-zmq python3.13 python3.13-minimal 157s quilt ubuntu-dev-tools wdiff xdelta xdelta3 157s 0 upgraded, 116 newly installed, 0 to remove and 0 not upgraded. 157s Need to get 23.5 MB of archives. 157s After this operation, 97.8 MB of additional disk space will be used. 157s Get:1 http://ftpmaster.internal/ubuntu plucky/main s390x libpython3.13-minimal s390x 3.13.0-2 [877 kB] 158s Get:2 http://ftpmaster.internal/ubuntu plucky/main s390x python3.13-minimal s390x 3.13.0-2 [2172 kB] 160s Get:3 http://ftpmaster.internal/ubuntu plucky/main s390x libjs-jquery all 3.6.1+dfsg+~3.5.14-1 [328 kB] 161s Get:4 http://ftpmaster.internal/ubuntu plucky/universe s390x libjs-jquery-hotkeys all 0~20130707+git2d51e3a9+dfsg-2.1 [11.5 kB] 161s Get:5 http://ftpmaster.internal/ubuntu plucky/main s390x python3-distro-info all 1.12 [7754 B] 161s Get:6 http://ftpmaster.internal/ubuntu plucky/main s390x dctrl-tools s390x 2.24-3build3 [106 kB] 161s Get:7 http://ftpmaster.internal/ubuntu plucky/universe s390x debian-archive-keyring all 2023.4ubuntu1 [168 kB] 161s Get:8 http://ftpmaster.internal/ubuntu plucky/main s390x libfile-dirlist-perl all 0.05-3 [7286 B] 161s Get:9 http://ftpmaster.internal/ubuntu plucky/main s390x libfile-which-perl all 1.27-2 [12.5 kB] 161s Get:10 http://ftpmaster.internal/ubuntu plucky/main s390x libfile-homedir-perl all 1.006-2 [37.0 kB] 161s Get:11 http://ftpmaster.internal/ubuntu plucky/main s390x libfile-touch-perl all 0.12-2 [7498 B] 161s Get:12 http://ftpmaster.internal/ubuntu plucky/main s390x libio-pty-perl s390x 1:1.20-1build3 [31.6 kB] 161s Get:13 http://ftpmaster.internal/ubuntu plucky/main s390x libipc-run-perl all 20231003.0-2 [91.5 kB] 161s Get:14 http://ftpmaster.internal/ubuntu plucky/main s390x libclass-method-modifiers-perl all 2.15-1 [16.1 kB] 161s Get:15 http://ftpmaster.internal/ubuntu plucky/main s390x libclass-xsaccessor-perl s390x 1.19-4build5 [34.2 kB] 161s Get:16 http://ftpmaster.internal/ubuntu plucky/main s390x libb-hooks-op-check-perl s390x 0.22-3build2 [9566 B] 161s Get:17 http://ftpmaster.internal/ubuntu plucky/main s390x libdynaloader-functions-perl all 0.004-1 [11.4 kB] 161s Get:18 http://ftpmaster.internal/ubuntu plucky/main s390x libdevel-callchecker-perl s390x 0.009-1build1 [14.2 kB] 161s Get:19 http://ftpmaster.internal/ubuntu plucky/main s390x libparams-classify-perl s390x 0.015-2build6 [20.6 kB] 162s Get:20 http://ftpmaster.internal/ubuntu plucky/main s390x libmodule-runtime-perl all 0.016-2 [16.4 kB] 162s Get:21 http://ftpmaster.internal/ubuntu plucky/main s390x libimport-into-perl all 1.002005-2 [10.7 kB] 162s Get:22 http://ftpmaster.internal/ubuntu plucky/main s390x librole-tiny-perl all 2.002004-1 [16.3 kB] 162s Get:23 http://ftpmaster.internal/ubuntu plucky/main s390x libsub-quote-perl all 2.006008-1ubuntu1 [20.7 kB] 162s Get:24 http://ftpmaster.internal/ubuntu plucky/main s390x libmoo-perl all 2.005005-1 [47.4 kB] 162s Get:25 http://ftpmaster.internal/ubuntu plucky/main s390x libencode-locale-perl all 1.05-3 [11.6 kB] 162s Get:26 http://ftpmaster.internal/ubuntu plucky/main s390x libtimedate-perl all 2.3300-2 [34.0 kB] 162s Get:27 http://ftpmaster.internal/ubuntu plucky/main s390x libhttp-date-perl all 6.06-1 [10.2 kB] 162s Get:28 http://ftpmaster.internal/ubuntu plucky/main s390x libfile-listing-perl all 6.16-1 [11.3 kB] 162s Get:29 http://ftpmaster.internal/ubuntu plucky/main s390x libhtml-tagset-perl all 3.24-1 [14.1 kB] 162s Get:30 http://ftpmaster.internal/ubuntu plucky/main s390x liburi-perl all 5.30-1 [94.4 kB] 162s Get:31 http://ftpmaster.internal/ubuntu plucky/main s390x libhtml-parser-perl s390x 3.83-1build1 [87.8 kB] 162s Get:32 http://ftpmaster.internal/ubuntu plucky/main s390x libhtml-tree-perl all 5.07-3 [200 kB] 162s Get:33 http://ftpmaster.internal/ubuntu plucky/main s390x libclone-perl s390x 0.47-1 [10.7 kB] 162s Get:34 http://ftpmaster.internal/ubuntu plucky/main s390x libio-html-perl all 1.004-3 [15.9 kB] 162s Get:35 http://ftpmaster.internal/ubuntu plucky/main s390x liblwp-mediatypes-perl all 6.04-2 [20.1 kB] 162s Get:36 http://ftpmaster.internal/ubuntu plucky/main s390x libhttp-message-perl all 7.00-2ubuntu1 [75.9 kB] 163s Get:37 http://ftpmaster.internal/ubuntu plucky/main s390x libhttp-cookies-perl all 6.11-1 [18.2 kB] 163s Get:38 http://ftpmaster.internal/ubuntu plucky/main s390x libhttp-negotiate-perl all 6.01-2 [12.4 kB] 163s Get:39 http://ftpmaster.internal/ubuntu plucky/main s390x perl-openssl-defaults s390x 7build3 [6628 B] 163s Get:40 http://ftpmaster.internal/ubuntu plucky/main s390x libnet-ssleay-perl s390x 1.94-2 [319 kB] 163s Get:41 http://ftpmaster.internal/ubuntu plucky/main s390x libio-socket-ssl-perl all 2.089-1 [200 kB] 163s Get:42 http://ftpmaster.internal/ubuntu plucky/main s390x libnet-http-perl all 6.23-1 [22.3 kB] 163s Get:43 http://ftpmaster.internal/ubuntu plucky/main s390x liblwp-protocol-https-perl all 6.14-1 [9040 B] 164s Get:44 http://ftpmaster.internal/ubuntu plucky/main s390x libtry-tiny-perl all 0.32-1 [21.2 kB] 164s Get:45 http://ftpmaster.internal/ubuntu plucky/main s390x libwww-robotrules-perl all 6.02-1 [12.6 kB] 164s Get:46 http://ftpmaster.internal/ubuntu plucky/main s390x libwww-perl all 6.77-1 [138 kB] 164s Get:47 http://ftpmaster.internal/ubuntu plucky/main s390x patchutils s390x 0.4.2-1build3 [79.2 kB] 164s Get:48 http://ftpmaster.internal/ubuntu plucky/main s390x wdiff s390x 1.2.2-6build1 [29.3 kB] 164s Get:49 http://ftpmaster.internal/ubuntu plucky/main s390x devscripts all 2.24.4 [1081 kB] 166s Get:50 http://ftpmaster.internal/ubuntu plucky/main s390x diffstat s390x 1.67-1 [33.1 kB] 166s Get:51 http://ftpmaster.internal/ubuntu plucky/main s390x python3-debian all 0.1.49ubuntu3 [116 kB] 166s Get:52 http://ftpmaster.internal/ubuntu plucky/main s390x python3-gpg s390x 1.24.0-2ubuntu1 [259 kB] 166s Get:53 http://ftpmaster.internal/ubuntu plucky/main s390x python3-xdg all 0.28-2 [38.3 kB] 166s Get:54 http://ftpmaster.internal/ubuntu plucky/main s390x dput all 1.2.4ubuntu1 [49.1 kB] 166s Get:55 http://ftpmaster.internal/ubuntu plucky/main s390x libgomp1 s390x 14.2.0-8ubuntu1 [151 kB] 167s Get:56 http://ftpmaster.internal/ubuntu plucky/main s390x gettext s390x 0.22.5-2 [996 kB] 168s Get:57 http://ftpmaster.internal/ubuntu plucky/main s390x liberror-perl all 0.17029-2 [25.6 kB] 168s Get:58 http://ftpmaster.internal/ubuntu plucky/main s390x git-man all 1:2.45.2-1.2ubuntu1 [1122 kB] 170s Get:59 http://ftpmaster.internal/ubuntu plucky/main s390x git s390x 1:2.45.2-1.2ubuntu1 [4154 kB] 176s Get:60 http://ftpmaster.internal/ubuntu plucky/main s390x python3-dateutil all 2.9.0-3 [80.2 kB] 176s Get:61 http://ftpmaster.internal/ubuntu plucky/main s390x python3-importlib-metadata all 8.5.0-1 [20.7 kB] 176s Get:62 http://ftpmaster.internal/ubuntu plucky/universe s390x git-buildpackage all 0.9.35 [677 kB] 177s Get:63 http://ftpmaster.internal/ubuntu plucky/universe s390x libsys-cpuaffinity-perl s390x 1.13~03-2build4 [32.2 kB] 177s Get:64 http://ftpmaster.internal/ubuntu plucky/universe s390x pbzip2 s390x 1.1.13-1build1 [37.9 kB] 177s Get:65 http://ftpmaster.internal/ubuntu plucky/universe s390x pixz s390x 1.0.7-3 [22.6 kB] 177s Get:66 http://ftpmaster.internal/ubuntu plucky/universe s390x libxdelta2t64 s390x 1.1.3-10.7 [56.4 kB] 177s Get:67 http://ftpmaster.internal/ubuntu plucky/universe s390x xdelta s390x 1.1.3-10.7 [25.3 kB] 177s Get:68 http://ftpmaster.internal/ubuntu plucky/universe s390x xdelta3 s390x 3.0.11-dfsg-1.2 [72.0 kB] 177s Get:69 http://ftpmaster.internal/ubuntu plucky/universe s390x pristine-tar s390x 1.50+nmu2build1 [127 kB] 177s Get:70 http://ftpmaster.internal/ubuntu plucky/universe s390x quilt all 0.68-1 [439 kB] 178s Get:71 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-debianbts all 4.1.1 [12.8 kB] 178s Get:72 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-jeepney all 0.8.0-4 [33.1 kB] 178s Get:73 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-secretstorage all 3.3.3-3 [13.7 kB] 178s Get:74 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-jaraco.classes all 3.4.0-1 [7664 B] 178s Get:75 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-keyring all 25.4.1-1 [40.5 kB] 178s Get:76 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-launchpadlib-desktop all 2.0.0-1 [1778 B] 178s Get:77 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-ubuntutools all 0.203 [67.4 kB] 178s Get:78 http://ftpmaster.internal/ubuntu plucky/universe s390x ubuntu-dev-tools all 0.203 [93.2 kB] 178s Get:79 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-astroid all 3.3.5-1 [174 kB] 179s Get:80 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-isort all 5.13.2-2 [59.3 kB] 179s Get:81 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-mypy-extensions all 1.0.0-1 [6148 B] 179s Get:82 http://ftpmaster.internal/ubuntu plucky/main s390x libjs-underscore all 1.13.4~dfsg+~1.11.4-3 [118 kB] 179s Get:83 http://ftpmaster.internal/ubuntu plucky/main s390x libjs-sphinxdoc all 7.4.7-4 [158 kB] 179s Get:84 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-logilab-common all 2.0.0-1 [281 kB] 180s Get:85 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-dill all 0.3.9-1 [84.5 kB] 180s Get:86 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-mccabe all 0.7.0-1 [8678 B] 180s Get:87 http://ftpmaster.internal/ubuntu plucky/main s390x python3-platformdirs all 4.3.6-1 [16.8 kB] 180s Get:88 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-tomlkit all 0.13.2-1 [37.6 kB] 180s Get:89 http://ftpmaster.internal/ubuntu plucky/universe s390x pylint all 3.3.1-2 [345 kB] 180s Get:90 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-argcomplete all 3.5.1-1ubuntu1 [35.6 kB] 180s Get:91 http://ftpmaster.internal/ubuntu plucky/main s390x python3-cachetools all 5.3.3-1 [10.3 kB] 180s Get:92 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-pycryptodome s390x 3.20.0+dfsg-3build1 [1094 kB] 182s Get:93 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-keyrings.alt all 5.0.2-1 [16.6 kB] 182s Get:94 http://ftpmaster.internal/ubuntu plucky/main s390x libhttp-parser2.9 s390x 2.9.4-6build1 [24.7 kB] 182s Get:95 http://ftpmaster.internal/ubuntu plucky-proposed/main s390x libgit2-1.8 s390x 1.8.4+ds-1ubuntu1 [568 kB] 183s Get:96 http://ftpmaster.internal/ubuntu plucky-proposed/universe s390x python3-pygit2 s390x 1.16.0-2 [187 kB] 183s Get:97 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-iniconfig all 1.1.1-2 [6024 B] 183s Get:98 http://ftpmaster.internal/ubuntu plucky/main s390x python3-packaging all 24.2-1 [51.5 kB] 183s Get:99 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-pluggy all 1.5.0-1 [21.0 kB] 183s Get:100 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-pytest all 8.3.3-1 [251 kB] 184s Get:101 http://ftpmaster.internal/ubuntu plucky/main s390x libpython3.13-stdlib s390x 3.13.0-2 [2086 kB] 187s Get:102 http://ftpmaster.internal/ubuntu plucky/main s390x python3.13 s390x 3.13.0-2 [719 kB] 188s Get:103 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-coverage s390x 7.4.4+dfsg1-0ubuntu3 [150 kB] 188s Get:104 http://ftpmaster.internal/ubuntu plucky/universe s390x libjs-jquery-isonscreen all 1.2.0-1.1 [3244 B] 188s Get:105 http://ftpmaster.internal/ubuntu plucky/universe s390x libjs-jquery-metadata all 12-4 [6582 B] 188s Get:106 http://ftpmaster.internal/ubuntu plucky/universe s390x libjs-jquery-tablesorter all 1:2.31.3+dfsg1-4 [192 kB] 189s Get:107 http://ftpmaster.internal/ubuntu plucky/universe s390x libjs-jquery-throttle-debounce all 1.1+dfsg.1-2 [12.5 kB] 189s Get:108 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-pytest-cov all 5.0.0-1 [21.3 kB] 189s Get:109 http://ftpmaster.internal/ubuntu plucky/main s390x python3-tenacity all 8.5.0-0ubuntu1 [17.0 kB] 189s Get:110 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-py all 1.11.0-2 [72.7 kB] 189s Get:111 http://ftpmaster.internal/ubuntu plucky/universe s390x libnorm1t64 s390x 1.5.9+dfsg-3.1build1 [158 kB] 189s Get:112 http://ftpmaster.internal/ubuntu plucky/universe s390x libpgm-5.3-0t64 s390x 5.3.128~dfsg-2.1build1 [169 kB] 189s Get:113 http://ftpmaster.internal/ubuntu plucky/main s390x libsodium23 s390x 1.0.18-1build3 [138 kB] 189s Get:114 http://ftpmaster.internal/ubuntu plucky/universe s390x libzmq5 s390x 4.3.5-1build2 [258 kB] 190s Get:115 http://ftpmaster.internal/ubuntu plucky/universe s390x python3-zmq s390x 24.0.1-5build2 [379 kB] 190s Get:116 http://ftpmaster.internal/ubuntu plucky/universe s390x git-ubuntu all 1.1-1 [152 kB] 191s Fetched 23.5 MB in 34s (699 kB/s) 191s Selecting previously unselected package libpython3.13-minimal:s390x. 191s (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 ... 55869 files and directories currently installed.) 191s Preparing to unpack .../000-libpython3.13-minimal_3.13.0-2_s390x.deb ... 191s Unpacking libpython3.13-minimal:s390x (3.13.0-2) ... 191s Selecting previously unselected package python3.13-minimal. 191s Preparing to unpack .../001-python3.13-minimal_3.13.0-2_s390x.deb ... 191s Unpacking python3.13-minimal (3.13.0-2) ... 191s Selecting previously unselected package libjs-jquery. 191s Preparing to unpack .../002-libjs-jquery_3.6.1+dfsg+~3.5.14-1_all.deb ... 191s Unpacking libjs-jquery (3.6.1+dfsg+~3.5.14-1) ... 191s Selecting previously unselected package libjs-jquery-hotkeys. 191s Preparing to unpack .../003-libjs-jquery-hotkeys_0~20130707+git2d51e3a9+dfsg-2.1_all.deb ... 191s Unpacking libjs-jquery-hotkeys (0~20130707+git2d51e3a9+dfsg-2.1) ... 191s Selecting previously unselected package python3-distro-info. 191s Preparing to unpack .../004-python3-distro-info_1.12_all.deb ... 191s Unpacking python3-distro-info (1.12) ... 191s Selecting previously unselected package dctrl-tools. 191s Preparing to unpack .../005-dctrl-tools_2.24-3build3_s390x.deb ... 191s Unpacking dctrl-tools (2.24-3build3) ... 191s Selecting previously unselected package debian-archive-keyring. 191s Preparing to unpack .../006-debian-archive-keyring_2023.4ubuntu1_all.deb ... 191s Unpacking debian-archive-keyring (2023.4ubuntu1) ... 191s Selecting previously unselected package libfile-dirlist-perl. 191s Preparing to unpack .../007-libfile-dirlist-perl_0.05-3_all.deb ... 191s Unpacking libfile-dirlist-perl (0.05-3) ... 191s Selecting previously unselected package libfile-which-perl. 191s Preparing to unpack .../008-libfile-which-perl_1.27-2_all.deb ... 191s Unpacking libfile-which-perl (1.27-2) ... 191s Selecting previously unselected package libfile-homedir-perl. 191s Preparing to unpack .../009-libfile-homedir-perl_1.006-2_all.deb ... 191s Unpacking libfile-homedir-perl (1.006-2) ... 191s Selecting previously unselected package libfile-touch-perl. 191s Preparing to unpack .../010-libfile-touch-perl_0.12-2_all.deb ... 191s Unpacking libfile-touch-perl (0.12-2) ... 191s Selecting previously unselected package libio-pty-perl. 191s Preparing to unpack .../011-libio-pty-perl_1%3a1.20-1build3_s390x.deb ... 191s Unpacking libio-pty-perl (1:1.20-1build3) ... 191s Selecting previously unselected package libipc-run-perl. 191s Preparing to unpack .../012-libipc-run-perl_20231003.0-2_all.deb ... 191s Unpacking libipc-run-perl (20231003.0-2) ... 191s Selecting previously unselected package libclass-method-modifiers-perl. 191s Preparing to unpack .../013-libclass-method-modifiers-perl_2.15-1_all.deb ... 191s Unpacking libclass-method-modifiers-perl (2.15-1) ... 191s Selecting previously unselected package libclass-xsaccessor-perl. 191s Preparing to unpack .../014-libclass-xsaccessor-perl_1.19-4build5_s390x.deb ... 191s Unpacking libclass-xsaccessor-perl (1.19-4build5) ... 191s Selecting previously unselected package libb-hooks-op-check-perl:s390x. 191s Preparing to unpack .../015-libb-hooks-op-check-perl_0.22-3build2_s390x.deb ... 191s Unpacking libb-hooks-op-check-perl:s390x (0.22-3build2) ... 191s Selecting previously unselected package libdynaloader-functions-perl. 191s Preparing to unpack .../016-libdynaloader-functions-perl_0.004-1_all.deb ... 191s Unpacking libdynaloader-functions-perl (0.004-1) ... 191s Selecting previously unselected package libdevel-callchecker-perl:s390x. 191s Preparing to unpack .../017-libdevel-callchecker-perl_0.009-1build1_s390x.deb ... 191s Unpacking libdevel-callchecker-perl:s390x (0.009-1build1) ... 191s Selecting previously unselected package libparams-classify-perl:s390x. 191s Preparing to unpack .../018-libparams-classify-perl_0.015-2build6_s390x.deb ... 191s Unpacking libparams-classify-perl:s390x (0.015-2build6) ... 191s Selecting previously unselected package libmodule-runtime-perl. 191s Preparing to unpack .../019-libmodule-runtime-perl_0.016-2_all.deb ... 191s Unpacking libmodule-runtime-perl (0.016-2) ... 191s Selecting previously unselected package libimport-into-perl. 191s Preparing to unpack .../020-libimport-into-perl_1.002005-2_all.deb ... 191s Unpacking libimport-into-perl (1.002005-2) ... 191s Selecting previously unselected package librole-tiny-perl. 191s Preparing to unpack .../021-librole-tiny-perl_2.002004-1_all.deb ... 191s Unpacking librole-tiny-perl (2.002004-1) ... 191s Selecting previously unselected package libsub-quote-perl. 191s Preparing to unpack .../022-libsub-quote-perl_2.006008-1ubuntu1_all.deb ... 191s Unpacking libsub-quote-perl (2.006008-1ubuntu1) ... 191s Selecting previously unselected package libmoo-perl. 191s Preparing to unpack .../023-libmoo-perl_2.005005-1_all.deb ... 191s Unpacking libmoo-perl (2.005005-1) ... 191s Selecting previously unselected package libencode-locale-perl. 191s Preparing to unpack .../024-libencode-locale-perl_1.05-3_all.deb ... 191s Unpacking libencode-locale-perl (1.05-3) ... 191s Selecting previously unselected package libtimedate-perl. 191s Preparing to unpack .../025-libtimedate-perl_2.3300-2_all.deb ... 191s Unpacking libtimedate-perl (2.3300-2) ... 191s Selecting previously unselected package libhttp-date-perl. 191s Preparing to unpack .../026-libhttp-date-perl_6.06-1_all.deb ... 191s Unpacking libhttp-date-perl (6.06-1) ... 191s Selecting previously unselected package libfile-listing-perl. 191s Preparing to unpack .../027-libfile-listing-perl_6.16-1_all.deb ... 191s Unpacking libfile-listing-perl (6.16-1) ... 191s Selecting previously unselected package libhtml-tagset-perl. 191s Preparing to unpack .../028-libhtml-tagset-perl_3.24-1_all.deb ... 191s Unpacking libhtml-tagset-perl (3.24-1) ... 191s Selecting previously unselected package liburi-perl. 191s Preparing to unpack .../029-liburi-perl_5.30-1_all.deb ... 191s Unpacking liburi-perl (5.30-1) ... 191s Selecting previously unselected package libhtml-parser-perl:s390x. 191s Preparing to unpack .../030-libhtml-parser-perl_3.83-1build1_s390x.deb ... 191s Unpacking libhtml-parser-perl:s390x (3.83-1build1) ... 191s Selecting previously unselected package libhtml-tree-perl. 191s Preparing to unpack .../031-libhtml-tree-perl_5.07-3_all.deb ... 191s Unpacking libhtml-tree-perl (5.07-3) ... 191s Selecting previously unselected package libclone-perl:s390x. 191s Preparing to unpack .../032-libclone-perl_0.47-1_s390x.deb ... 191s Unpacking libclone-perl:s390x (0.47-1) ... 191s Selecting previously unselected package libio-html-perl. 191s Preparing to unpack .../033-libio-html-perl_1.004-3_all.deb ... 191s Unpacking libio-html-perl (1.004-3) ... 191s Selecting previously unselected package liblwp-mediatypes-perl. 191s Preparing to unpack .../034-liblwp-mediatypes-perl_6.04-2_all.deb ... 191s Unpacking liblwp-mediatypes-perl (6.04-2) ... 191s Selecting previously unselected package libhttp-message-perl. 191s Preparing to unpack .../035-libhttp-message-perl_7.00-2ubuntu1_all.deb ... 191s Unpacking libhttp-message-perl (7.00-2ubuntu1) ... 191s Selecting previously unselected package libhttp-cookies-perl. 191s Preparing to unpack .../036-libhttp-cookies-perl_6.11-1_all.deb ... 191s Unpacking libhttp-cookies-perl (6.11-1) ... 191s Selecting previously unselected package libhttp-negotiate-perl. 191s Preparing to unpack .../037-libhttp-negotiate-perl_6.01-2_all.deb ... 191s Unpacking libhttp-negotiate-perl (6.01-2) ... 192s Selecting previously unselected package perl-openssl-defaults:s390x. 192s Preparing to unpack .../038-perl-openssl-defaults_7build3_s390x.deb ... 192s Unpacking perl-openssl-defaults:s390x (7build3) ... 192s Selecting previously unselected package libnet-ssleay-perl:s390x. 192s Preparing to unpack .../039-libnet-ssleay-perl_1.94-2_s390x.deb ... 192s Unpacking libnet-ssleay-perl:s390x (1.94-2) ... 192s Selecting previously unselected package libio-socket-ssl-perl. 192s Preparing to unpack .../040-libio-socket-ssl-perl_2.089-1_all.deb ... 192s Unpacking libio-socket-ssl-perl (2.089-1) ... 192s Selecting previously unselected package libnet-http-perl. 192s Preparing to unpack .../041-libnet-http-perl_6.23-1_all.deb ... 192s Unpacking libnet-http-perl (6.23-1) ... 192s Selecting previously unselected package liblwp-protocol-https-perl. 192s Preparing to unpack .../042-liblwp-protocol-https-perl_6.14-1_all.deb ... 192s Unpacking liblwp-protocol-https-perl (6.14-1) ... 192s Selecting previously unselected package libtry-tiny-perl. 192s Preparing to unpack .../043-libtry-tiny-perl_0.32-1_all.deb ... 192s Unpacking libtry-tiny-perl (0.32-1) ... 192s Selecting previously unselected package libwww-robotrules-perl. 192s Preparing to unpack .../044-libwww-robotrules-perl_6.02-1_all.deb ... 192s Unpacking libwww-robotrules-perl (6.02-1) ... 192s Selecting previously unselected package libwww-perl. 192s Preparing to unpack .../045-libwww-perl_6.77-1_all.deb ... 192s Unpacking libwww-perl (6.77-1) ... 192s Selecting previously unselected package patchutils. 192s Preparing to unpack .../046-patchutils_0.4.2-1build3_s390x.deb ... 192s Unpacking patchutils (0.4.2-1build3) ... 192s Selecting previously unselected package wdiff. 192s Preparing to unpack .../047-wdiff_1.2.2-6build1_s390x.deb ... 192s Unpacking wdiff (1.2.2-6build1) ... 192s Selecting previously unselected package devscripts. 192s Preparing to unpack .../048-devscripts_2.24.4_all.deb ... 192s Unpacking devscripts (2.24.4) ... 192s Selecting previously unselected package diffstat. 192s Preparing to unpack .../049-diffstat_1.67-1_s390x.deb ... 192s Unpacking diffstat (1.67-1) ... 192s Selecting previously unselected package python3-debian. 192s Preparing to unpack .../050-python3-debian_0.1.49ubuntu3_all.deb ... 192s Unpacking python3-debian (0.1.49ubuntu3) ... 192s Selecting previously unselected package python3-gpg. 192s Preparing to unpack .../051-python3-gpg_1.24.0-2ubuntu1_s390x.deb ... 192s Unpacking python3-gpg (1.24.0-2ubuntu1) ... 192s Selecting previously unselected package python3-xdg. 192s Preparing to unpack .../052-python3-xdg_0.28-2_all.deb ... 192s Unpacking python3-xdg (0.28-2) ... 192s Selecting previously unselected package dput. 192s Preparing to unpack .../053-dput_1.2.4ubuntu1_all.deb ... 192s Unpacking dput (1.2.4ubuntu1) ... 192s Selecting previously unselected package libgomp1:s390x. 192s Preparing to unpack .../054-libgomp1_14.2.0-8ubuntu1_s390x.deb ... 192s Unpacking libgomp1:s390x (14.2.0-8ubuntu1) ... 192s Selecting previously unselected package gettext. 192s Preparing to unpack .../055-gettext_0.22.5-2_s390x.deb ... 192s Unpacking gettext (0.22.5-2) ... 192s Selecting previously unselected package liberror-perl. 192s Preparing to unpack .../056-liberror-perl_0.17029-2_all.deb ... 192s Unpacking liberror-perl (0.17029-2) ... 192s Selecting previously unselected package git-man. 192s Preparing to unpack .../057-git-man_1%3a2.45.2-1.2ubuntu1_all.deb ... 192s Unpacking git-man (1:2.45.2-1.2ubuntu1) ... 192s Selecting previously unselected package git. 192s Preparing to unpack .../058-git_1%3a2.45.2-1.2ubuntu1_s390x.deb ... 192s Unpacking git (1:2.45.2-1.2ubuntu1) ... 192s Selecting previously unselected package python3-dateutil. 192s Preparing to unpack .../059-python3-dateutil_2.9.0-3_all.deb ... 192s Unpacking python3-dateutil (2.9.0-3) ... 192s Selecting previously unselected package python3-importlib-metadata. 192s Preparing to unpack .../060-python3-importlib-metadata_8.5.0-1_all.deb ... 192s Unpacking python3-importlib-metadata (8.5.0-1) ... 192s Selecting previously unselected package git-buildpackage. 192s Preparing to unpack .../061-git-buildpackage_0.9.35_all.deb ... 192s Unpacking git-buildpackage (0.9.35) ... 192s Selecting previously unselected package libsys-cpuaffinity-perl. 192s Preparing to unpack .../062-libsys-cpuaffinity-perl_1.13~03-2build4_s390x.deb ... 192s Unpacking libsys-cpuaffinity-perl (1.13~03-2build4) ... 192s Selecting previously unselected package pbzip2. 192s Preparing to unpack .../063-pbzip2_1.1.13-1build1_s390x.deb ... 192s Unpacking pbzip2 (1.1.13-1build1) ... 192s Selecting previously unselected package pixz. 192s Preparing to unpack .../064-pixz_1.0.7-3_s390x.deb ... 192s Unpacking pixz (1.0.7-3) ... 192s Selecting previously unselected package libxdelta2t64:s390x. 192s Preparing to unpack .../065-libxdelta2t64_1.1.3-10.7_s390x.deb ... 192s Unpacking libxdelta2t64:s390x (1.1.3-10.7) ... 192s Selecting previously unselected package xdelta. 192s Preparing to unpack .../066-xdelta_1.1.3-10.7_s390x.deb ... 192s Unpacking xdelta (1.1.3-10.7) ... 192s Selecting previously unselected package xdelta3. 192s Preparing to unpack .../067-xdelta3_3.0.11-dfsg-1.2_s390x.deb ... 192s Unpacking xdelta3 (3.0.11-dfsg-1.2) ... 192s Selecting previously unselected package pristine-tar. 192s Preparing to unpack .../068-pristine-tar_1.50+nmu2build1_s390x.deb ... 192s Unpacking pristine-tar (1.50+nmu2build1) ... 192s Selecting previously unselected package quilt. 192s Preparing to unpack .../069-quilt_0.68-1_all.deb ... 192s Unpacking quilt (0.68-1) ... 192s Selecting previously unselected package python3-debianbts. 192s Preparing to unpack .../070-python3-debianbts_4.1.1_all.deb ... 192s Unpacking python3-debianbts (4.1.1) ... 192s Selecting previously unselected package python3-jeepney. 192s Preparing to unpack .../071-python3-jeepney_0.8.0-4_all.deb ... 192s Unpacking python3-jeepney (0.8.0-4) ... 192s Selecting previously unselected package python3-secretstorage. 192s Preparing to unpack .../072-python3-secretstorage_3.3.3-3_all.deb ... 192s Unpacking python3-secretstorage (3.3.3-3) ... 192s Selecting previously unselected package python3-jaraco.classes. 192s Preparing to unpack .../073-python3-jaraco.classes_3.4.0-1_all.deb ... 192s Unpacking python3-jaraco.classes (3.4.0-1) ... 192s Selecting previously unselected package python3-keyring. 192s Preparing to unpack .../074-python3-keyring_25.4.1-1_all.deb ... 192s Unpacking python3-keyring (25.4.1-1) ... 192s Selecting previously unselected package python3-launchpadlib-desktop. 192s Preparing to unpack .../075-python3-launchpadlib-desktop_2.0.0-1_all.deb ... 192s Unpacking python3-launchpadlib-desktop (2.0.0-1) ... 192s Selecting previously unselected package python3-ubuntutools. 192s Preparing to unpack .../076-python3-ubuntutools_0.203_all.deb ... 192s Unpacking python3-ubuntutools (0.203) ... 192s Selecting previously unselected package ubuntu-dev-tools. 192s Preparing to unpack .../077-ubuntu-dev-tools_0.203_all.deb ... 192s Unpacking ubuntu-dev-tools (0.203) ... 192s Selecting previously unselected package python3-astroid. 192s Preparing to unpack .../078-python3-astroid_3.3.5-1_all.deb ... 192s Unpacking python3-astroid (3.3.5-1) ... 192s Selecting previously unselected package python3-isort. 192s Preparing to unpack .../079-python3-isort_5.13.2-2_all.deb ... 192s Unpacking python3-isort (5.13.2-2) ... 192s Selecting previously unselected package python3-mypy-extensions. 192s Preparing to unpack .../080-python3-mypy-extensions_1.0.0-1_all.deb ... 192s Unpacking python3-mypy-extensions (1.0.0-1) ... 192s Selecting previously unselected package libjs-underscore. 192s Preparing to unpack .../081-libjs-underscore_1.13.4~dfsg+~1.11.4-3_all.deb ... 192s Unpacking libjs-underscore (1.13.4~dfsg+~1.11.4-3) ... 192s Selecting previously unselected package libjs-sphinxdoc. 192s Preparing to unpack .../082-libjs-sphinxdoc_7.4.7-4_all.deb ... 192s Unpacking libjs-sphinxdoc (7.4.7-4) ... 192s Selecting previously unselected package python3-logilab-common. 192s Preparing to unpack .../083-python3-logilab-common_2.0.0-1_all.deb ... 192s Unpacking python3-logilab-common (2.0.0-1) ... 192s Selecting previously unselected package python3-dill. 192s Preparing to unpack .../084-python3-dill_0.3.9-1_all.deb ... 192s Unpacking python3-dill (0.3.9-1) ... 192s Selecting previously unselected package python3-mccabe. 192s Preparing to unpack .../085-python3-mccabe_0.7.0-1_all.deb ... 192s Unpacking python3-mccabe (0.7.0-1) ... 192s Selecting previously unselected package python3-platformdirs. 192s Preparing to unpack .../086-python3-platformdirs_4.3.6-1_all.deb ... 192s Unpacking python3-platformdirs (4.3.6-1) ... 192s Selecting previously unselected package python3-tomlkit. 192s Preparing to unpack .../087-python3-tomlkit_0.13.2-1_all.deb ... 192s Unpacking python3-tomlkit (0.13.2-1) ... 192s Selecting previously unselected package pylint. 192s Preparing to unpack .../088-pylint_3.3.1-2_all.deb ... 192s Unpacking pylint (3.3.1-2) ... 192s Selecting previously unselected package python3-argcomplete. 192s Preparing to unpack .../089-python3-argcomplete_3.5.1-1ubuntu1_all.deb ... 192s Unpacking python3-argcomplete (3.5.1-1ubuntu1) ... 192s Selecting previously unselected package python3-cachetools. 192s Preparing to unpack .../090-python3-cachetools_5.3.3-1_all.deb ... 192s Unpacking python3-cachetools (5.3.3-1) ... 192s Selecting previously unselected package python3-pycryptodome. 192s Preparing to unpack .../091-python3-pycryptodome_3.20.0+dfsg-3build1_s390x.deb ... 192s Unpacking python3-pycryptodome (3.20.0+dfsg-3build1) ... 192s Selecting previously unselected package python3-keyrings.alt. 192s Preparing to unpack .../092-python3-keyrings.alt_5.0.2-1_all.deb ... 192s Unpacking python3-keyrings.alt (5.0.2-1) ... 192s Selecting previously unselected package libhttp-parser2.9:s390x. 192s Preparing to unpack .../093-libhttp-parser2.9_2.9.4-6build1_s390x.deb ... 192s Unpacking libhttp-parser2.9:s390x (2.9.4-6build1) ... 192s Selecting previously unselected package libgit2-1.8:s390x. 192s Preparing to unpack .../094-libgit2-1.8_1.8.4+ds-1ubuntu1_s390x.deb ... 192s Unpacking libgit2-1.8:s390x (1.8.4+ds-1ubuntu1) ... 192s Selecting previously unselected package python3-pygit2. 192s Preparing to unpack .../095-python3-pygit2_1.16.0-2_s390x.deb ... 192s Unpacking python3-pygit2 (1.16.0-2) ... 192s Selecting previously unselected package python3-iniconfig. 192s Preparing to unpack .../096-python3-iniconfig_1.1.1-2_all.deb ... 192s Unpacking python3-iniconfig (1.1.1-2) ... 192s Selecting previously unselected package python3-packaging. 192s Preparing to unpack .../097-python3-packaging_24.2-1_all.deb ... 192s Unpacking python3-packaging (24.2-1) ... 192s Selecting previously unselected package python3-pluggy. 192s Preparing to unpack .../098-python3-pluggy_1.5.0-1_all.deb ... 192s Unpacking python3-pluggy (1.5.0-1) ... 192s Selecting previously unselected package python3-pytest. 192s Preparing to unpack .../099-python3-pytest_8.3.3-1_all.deb ... 192s Unpacking python3-pytest (8.3.3-1) ... 192s Selecting previously unselected package libpython3.13-stdlib:s390x. 192s Preparing to unpack .../100-libpython3.13-stdlib_3.13.0-2_s390x.deb ... 192s Unpacking libpython3.13-stdlib:s390x (3.13.0-2) ... 193s Selecting previously unselected package python3.13. 193s Preparing to unpack .../101-python3.13_3.13.0-2_s390x.deb ... 193s Unpacking python3.13 (3.13.0-2) ... 193s Selecting previously unselected package python3-coverage. 193s Preparing to unpack .../102-python3-coverage_7.4.4+dfsg1-0ubuntu3_s390x.deb ... 193s Unpacking python3-coverage (7.4.4+dfsg1-0ubuntu3) ... 193s Selecting previously unselected package libjs-jquery-isonscreen. 193s Preparing to unpack .../103-libjs-jquery-isonscreen_1.2.0-1.1_all.deb ... 193s Unpacking libjs-jquery-isonscreen (1.2.0-1.1) ... 193s Selecting previously unselected package libjs-jquery-metadata. 193s Preparing to unpack .../104-libjs-jquery-metadata_12-4_all.deb ... 193s Unpacking libjs-jquery-metadata (12-4) ... 193s Selecting previously unselected package libjs-jquery-tablesorter. 193s Preparing to unpack .../105-libjs-jquery-tablesorter_1%3a2.31.3+dfsg1-4_all.deb ... 193s Unpacking libjs-jquery-tablesorter (1:2.31.3+dfsg1-4) ... 193s Selecting previously unselected package libjs-jquery-throttle-debounce. 193s Preparing to unpack .../106-libjs-jquery-throttle-debounce_1.1+dfsg.1-2_all.deb ... 193s Unpacking libjs-jquery-throttle-debounce (1.1+dfsg.1-2) ... 193s Selecting previously unselected package python3-pytest-cov. 193s Preparing to unpack .../107-python3-pytest-cov_5.0.0-1_all.deb ... 193s Unpacking python3-pytest-cov (5.0.0-1) ... 193s Selecting previously unselected package python3-tenacity. 193s Preparing to unpack .../108-python3-tenacity_8.5.0-0ubuntu1_all.deb ... 193s Unpacking python3-tenacity (8.5.0-0ubuntu1) ... 193s Selecting previously unselected package python3-py. 193s Preparing to unpack .../109-python3-py_1.11.0-2_all.deb ... 193s Unpacking python3-py (1.11.0-2) ... 193s Selecting previously unselected package libnorm1t64:s390x. 193s Preparing to unpack .../110-libnorm1t64_1.5.9+dfsg-3.1build1_s390x.deb ... 193s Unpacking libnorm1t64:s390x (1.5.9+dfsg-3.1build1) ... 193s Selecting previously unselected package libpgm-5.3-0t64:s390x. 193s Preparing to unpack .../111-libpgm-5.3-0t64_5.3.128~dfsg-2.1build1_s390x.deb ... 193s Unpacking libpgm-5.3-0t64:s390x (5.3.128~dfsg-2.1build1) ... 193s Selecting previously unselected package libsodium23:s390x. 193s Preparing to unpack .../112-libsodium23_1.0.18-1build3_s390x.deb ... 193s Unpacking libsodium23:s390x (1.0.18-1build3) ... 193s Selecting previously unselected package libzmq5:s390x. 193s Preparing to unpack .../113-libzmq5_4.3.5-1build2_s390x.deb ... 193s Unpacking libzmq5:s390x (4.3.5-1build2) ... 193s Selecting previously unselected package python3-zmq. 193s Preparing to unpack .../114-python3-zmq_24.0.1-5build2_s390x.deb ... 193s Unpacking python3-zmq (24.0.1-5build2) ... 193s Selecting previously unselected package git-ubuntu. 193s Preparing to unpack .../115-git-ubuntu_1.1-1_all.deb ... 193s Unpacking git-ubuntu (1.1-1) ... 193s Setting up python3-iniconfig (1.1.1-2) ... 193s Setting up libnorm1t64:s390x (1.5.9+dfsg-3.1build1) ... 193s Setting up wdiff (1.2.2-6build1) ... 193s Setting up libfile-which-perl (1.27-2) ... 193s Setting up libsodium23:s390x (1.0.18-1build3) ... 193s Setting up python3-jaraco.classes (3.4.0-1) ... 193s Setting up libxdelta2t64:s390x (1.1.3-10.7) ... 193s Setting up python3-importlib-metadata (8.5.0-1) ... 193s Setting up xdelta (1.1.3-10.7) ... 193s Setting up libsys-cpuaffinity-perl (1.13~03-2build4) ... 193s Setting up python3-py (1.11.0-2) ... 193s Setting up libdynaloader-functions-perl (0.004-1) ... 193s Setting up libclass-method-modifiers-perl (2.15-1) ... 193s Setting up libio-pty-perl (1:1.20-1build3) ... 193s Setting up python3-cachetools (5.3.3-1) ... 193s Setting up python3-debianbts (4.1.1) ... 193s Setting up libclone-perl:s390x (0.47-1) ... 193s Setting up libhtml-tagset-perl (3.24-1) ... 193s Setting up python3-mypy-extensions (1.0.0-1) ... 193s Setting up python3-pycryptodome (3.20.0+dfsg-3build1) ... 194s Setting up python3-tenacity (8.5.0-0ubuntu1) ... 194s Setting up liblwp-mediatypes-perl (6.04-2) ... 194s Setting up debian-archive-keyring (2023.4ubuntu1) ... 194s Setting up libtry-tiny-perl (0.32-1) ... 194s Setting up perl-openssl-defaults:s390x (7build3) ... 194s Setting up libencode-locale-perl (1.05-3) ... 194s Setting up libjs-jquery-throttle-debounce (1.1+dfsg.1-2) ... 194s Setting up libgomp1:s390x (14.2.0-8ubuntu1) ... 194s Setting up python3-xdg (0.28-2) ... 194s Setting up pbzip2 (1.1.13-1build1) ... 194s Setting up python3-platformdirs (4.3.6-1) ... 194s Setting up liberror-perl (0.17029-2) ... 194s Setting up libpython3.13-minimal:s390x (3.13.0-2) ... 194s Setting up patchutils (0.4.2-1build3) ... 194s Setting up libpgm-5.3-0t64:s390x (5.3.128~dfsg-2.1build1) ... 194s Setting up python3-packaging (24.2-1) ... 194s Setting up python3-gpg (1.24.0-2ubuntu1) ... 194s Setting up python3-dill (0.3.9-1) ... 195s Setting up python3-debian (0.1.49ubuntu3) ... 195s Setting up diffstat (1.67-1) ... 195s Setting up libio-html-perl (1.004-3) ... 195s Setting up libb-hooks-op-check-perl:s390x (0.22-3build2) ... 195s Setting up libipc-run-perl (20231003.0-2) ... 195s Setting up python3-jeepney (0.8.0-4) ... 195s Setting up python3-isort (5.13.2-2) ... 195s Setting up python3-pluggy (1.5.0-1) ... 195s Setting up libtimedate-perl (2.3300-2) ... 195s Setting up python3-astroid (3.3.5-1) ... 195s Setting up xdelta3 (3.0.11-dfsg-1.2) ... 195s Setting up pixz (1.0.7-3) ... 195s Setting up librole-tiny-perl (2.002004-1) ... 195s Setting up python3.13-minimal (3.13.0-2) ... 196s Setting up git-man (1:2.45.2-1.2ubuntu1) ... 196s Setting up python3-dateutil (2.9.0-3) ... 196s Setting up python3-mccabe (0.7.0-1) ... 196s Setting up libsub-quote-perl (2.006008-1ubuntu1) ... 196s Setting up libclass-xsaccessor-perl (1.19-4build5) ... 196s Setting up libjs-jquery (3.6.1+dfsg+~3.5.14-1) ... 196s Setting up libfile-dirlist-perl (0.05-3) ... 197s Setting up libjs-jquery-hotkeys (0~20130707+git2d51e3a9+dfsg-2.1) ... 197s Setting up python3-argcomplete (3.5.1-1ubuntu1) ... 197s Setting up libfile-homedir-perl (1.006-2) ... 197s Setting up python3-tomlkit (0.13.2-1) ... 197s Setting up python3-distro-info (1.12) ... 197s Setting up libpython3.13-stdlib:s390x (3.13.0-2) ... 197s Setting up liburi-perl (5.30-1) ... 197s Setting up pristine-tar (1.50+nmu2build1) ... 197s Setting up libfile-touch-perl (0.12-2) ... 197s Setting up dctrl-tools (2.24-3build3) ... 197s Setting up libhttp-parser2.9:s390x (2.9.4-6build1) ... 197s Setting up libjs-underscore (1.13.4~dfsg+~1.11.4-3) ... 197s Setting up libnet-ssleay-perl:s390x (1.94-2) ... 197s Setting up libhttp-date-perl (6.06-1) ... 197s Setting up gettext (0.22.5-2) ... 197s Setting up libfile-listing-perl (6.16-1) ... 197s Setting up libzmq5:s390x (4.3.5-1build2) ... 197s Setting up python3.13 (3.13.0-2) ... 198s Setting up python3-pytest (8.3.3-1) ... 198s Setting up libnet-http-perl (6.23-1) ... 198s Setting up python3-coverage (7.4.4+dfsg1-0ubuntu3) ... 198s Setting up quilt (0.68-1) ... 198s Setting up libdevel-callchecker-perl:s390x (0.009-1build1) ... 198s Setting up dput (1.2.4ubuntu1) ... 198s Setting up python3-secretstorage (3.3.3-3) ... 198s Setting up python3-zmq (24.0.1-5build2) ... 199s Setting up libjs-jquery-metadata (12-4) ... 199s Setting up libgit2-1.8:s390x (1.8.4+ds-1ubuntu1) ... 199s Setting up libjs-jquery-isonscreen (1.2.0-1.1) ... 199s Setting up git (1:2.45.2-1.2ubuntu1) ... 199s Setting up libjs-sphinxdoc (7.4.7-4) ... 199s Setting up libwww-robotrules-perl (6.02-1) ... 199s Setting up libjs-jquery-tablesorter (1:2.31.3+dfsg1-4) ... 199s Setting up libhtml-parser-perl:s390x (3.83-1build1) ... 199s Setting up python3-keyring (25.4.1-1) ... 199s Setting up libio-socket-ssl-perl (2.089-1) ... 199s Setting up libhttp-message-perl (7.00-2ubuntu1) ... 199s Setting up libhttp-negotiate-perl (6.01-2) ... 199s Setting up libhttp-cookies-perl (6.11-1) ... 199s Setting up python3-logilab-common (2.0.0-1) ... 199s Setting up python3-pygit2 (1.16.0-2) ... 199s Setting up libhtml-tree-perl (5.07-3) ... 199s Setting up libparams-classify-perl:s390x (0.015-2build6) ... 199s Setting up python3-pytest-cov (5.0.0-1) ... 199s Setting up libmodule-runtime-perl (0.016-2) ... 199s Setting up python3-launchpadlib-desktop (2.0.0-1) ... 199s Setting up python3-keyrings.alt (5.0.2-1) ... 199s Setting up pylint (3.3.1-2) ... 200s Setting up libimport-into-perl (1.002005-2) ... 200s Setting up libmoo-perl (2.005005-1) ... 200s Setting up python3-ubuntutools (0.203) ... 200s Setting up liblwp-protocol-https-perl (6.14-1) ... 200s Setting up libwww-perl (6.77-1) ... 200s Setting up devscripts (2.24.4) ... 200s Setting up git-buildpackage (0.9.35) ... 200s Setting up ubuntu-dev-tools (0.203) ... 200s Setting up git-ubuntu (1.1-1) ... 200s Processing triggers for libc-bin (2.40-1ubuntu3) ... 200s Processing triggers for systemd (256.5-2ubuntu4) ... 200s Processing triggers for man-db (2.13.0-1) ... 201s Processing triggers for install-info (7.1.1-1) ... 202s autopkgtest [23:20:41]: test self-test: TEST_SYSTEM_TREE=1 /usr/share/git-ubuntu/self-test 202s autopkgtest [23:20:41]: test self-test: [----------------------- 202s Testing git-ubuntu system installation. 202s Testing tree in /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu 202s Working dir /tmp/autopkgtest.mn2my0/build.QvA/src 211s pylint passed! 217s ============================= test session starts ============================== 217s platform linux -- Python 3.12.7, pytest-8.3.3, pluggy-1.5.0 217s rootdir: /tmp/autopkgtest.mn2my0/build.QvA/src 217s configfile: pytest.ini 217s plugins: cov-5.0.0, typeguard-4.4.1 217s collected 459 items 217s 217s gitubuntu/build.py ..... [ 1%] 219s gitubuntu/git_repository_test.py ....................................... [ 9%] 227s ...FFFFF.FFF...........................F.FFFFFFF.FFF.......FFFFFFFFFF [ 24%] 228s gitubuntu/importer_service_test.py ..................................... [ 32%] 228s ..... [ 33%] 228s gitubuntu/importer_service_worker_test.py ... [ 34%] 236s gitubuntu/importer_tag_test.py FFFFFFFFFxF [ 36%] 248s gitubuntu/importer_test.py .......FF.FFFFFFFFFFF.FFF.FFF..FFFFFFFFFFFFFF [ 46%] 259s FFFFxx..FF.................................................F....FFFF. [ 61%] 260s gitubuntu/integration_test.py ...............Fsss [ 65%] 260s gitubuntu/prepare_upload_test.py .............. [ 68%] 260s gitubuntu/repo_builder_test.py .........FF.F................ [ 75%] 260s gitubuntu/rich_history_test.py FFF.FFFF [ 76%] 264s gitubuntu/source_builder_test.py .FF.......FFFFFFFFF.. [ 81%] 264s gitubuntu/source_information_test.py ................................... [ 89%] 264s ... [ 89%] 265s gitubuntu/versioning.py ............................................... [100%] 265s 265s =================================== FAILURES =================================== 265s ___________________ test_follow_symlinks_to_blob[0] ____________________ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmp9ou5zy2p/.git/') 265s tree_func = at 0x3ffb79f42c0> 265s 265s @pytest.mark.parametrize('tree_func', [ 265s # The tree_func parameter is a function that accepts a mock Blob that is to 265s # represent the changelog blob itself and returns a mock Tree with the mock 265s # Blob embedded somewhere within it. The test function can then ensure that 265s # follow_symlinks_to_blob can correctly find the changelog Blob given the 265s # Tree. 265s 265s # Of course this is only expected to work if, after checking out the Tree, 265s # "cat debian/changelog" would work. But this allows us to test the various 265s # permutations of symlink following in Trees that _are_ valid. 265s 265s # Simple case 265s lambda b: Tree({ 265s 'debian': Tree({'changelog': b}), 265s }), 265s 265s # Symlink in debian/ 265s lambda b: Tree({ 265s 'debian': Tree({ 265s 'changelog.real': b, 265s 'changelog': Symlink('changelog.real'), 265s }), 265s }), 265s 265s # Symlink to parent directory 265s lambda b: Tree({ 265s 'changelog': b, 265s 'debian': Tree({ 265s 'changelog': Symlink('../changelog'), 265s }) 265s }), 265s 265s # Symlink to subdirectory 265s lambda b: Tree({ 265s 'debian': Tree({ 265s 'changelog': Symlink('subdirectory/changelog'), 265s 'subdirectory': Tree({'changelog': b}), 265s }) 265s }), 265s 265s # debian/ itself is a symlink to a different directory 265s lambda b: Tree({ 265s 'pkg': Tree({'changelog': b}), 265s 'debian': Symlink('pkg'), 265s }) 265s ]) 265s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 265s blob = Blob(b'') 265s blob_id = blob.write(pygit2_repo) 265s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 265s > result_blob = target.follow_symlinks_to_blob( 265s pygit2_repo, 265s tree, 265s 'debian/changelog', 265s ) 265s 265s gitubuntu/git_repository_test.py:342: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmp9ou5zy2p/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s gitubuntu/git_repository.py:68: AttributeError 265s ___________________ test_follow_symlinks_to_blob[1] ____________________ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmp5__hmtyd/.git/') 265s tree_func = at 0x3ffb79f4360> 265s 265s @pytest.mark.parametrize('tree_func', [ 265s # The tree_func parameter is a function that accepts a mock Blob that is to 265s # represent the changelog blob itself and returns a mock Tree with the mock 265s # Blob embedded somewhere within it. The test function can then ensure that 265s # follow_symlinks_to_blob can correctly find the changelog Blob given the 265s # Tree. 265s 265s # Of course this is only expected to work if, after checking out the Tree, 265s # "cat debian/changelog" would work. But this allows us to test the various 265s # permutations of symlink following in Trees that _are_ valid. 265s 265s # Simple case 265s lambda b: Tree({ 265s 'debian': Tree({'changelog': b}), 265s }), 265s 265s # Symlink in debian/ 265s lambda b: Tree({ 265s 'debian': Tree({ 265s 'changelog.real': b, 265s 'changelog': Symlink('changelog.real'), 265s }), 265s }), 265s 265s # Symlink to parent directory 265s lambda b: Tree({ 265s 'changelog': b, 265s 'debian': Tree({ 265s 'changelog': Symlink('../changelog'), 265s }) 265s }), 265s 265s # Symlink to subdirectory 265s lambda b: Tree({ 265s 'debian': Tree({ 265s 'changelog': Symlink('subdirectory/changelog'), 265s 'subdirectory': Tree({'changelog': b}), 265s }) 265s }), 265s 265s # debian/ itself is a symlink to a different directory 265s lambda b: Tree({ 265s 'pkg': Tree({'changelog': b}), 265s 'debian': Symlink('pkg'), 265s }) 265s ]) 265s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 265s blob = Blob(b'') 265s blob_id = blob.write(pygit2_repo) 265s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 265s > result_blob = target.follow_symlinks_to_blob( 265s pygit2_repo, 265s tree, 265s 'debian/changelog', 265s ) 265s 265s gitubuntu/git_repository_test.py:342: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmp5__hmtyd/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s gitubuntu/git_repository.py:68: AttributeError 265s ___________________ test_follow_symlinks_to_blob[2] ____________________ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmpnexxst5c/.git/') 265s tree_func = at 0x3ffb79f4400> 265s 265s @pytest.mark.parametrize('tree_func', [ 265s # The tree_func parameter is a function that accepts a mock Blob that is to 265s # represent the changelog blob itself and returns a mock Tree with the mock 265s # Blob embedded somewhere within it. The test function can then ensure that 265s # follow_symlinks_to_blob can correctly find the changelog Blob given the 265s # Tree. 265s 265s # Of course this is only expected to work if, after checking out the Tree, 265s # "cat debian/changelog" would work. But this allows us to test the various 265s # permutations of symlink following in Trees that _are_ valid. 265s 265s # Simple case 265s lambda b: Tree({ 265s 'debian': Tree({'changelog': b}), 265s }), 265s 265s # Symlink in debian/ 265s lambda b: Tree({ 265s 'debian': Tree({ 265s 'changelog.real': b, 265s 'changelog': Symlink('changelog.real'), 265s }), 265s }), 265s 265s # Symlink to parent directory 265s lambda b: Tree({ 265s 'changelog': b, 265s 'debian': Tree({ 265s 'changelog': Symlink('../changelog'), 265s }) 265s }), 265s 265s # Symlink to subdirectory 265s lambda b: Tree({ 265s 'debian': Tree({ 265s 'changelog': Symlink('subdirectory/changelog'), 265s 'subdirectory': Tree({'changelog': b}), 265s }) 265s }), 265s 265s # debian/ itself is a symlink to a different directory 265s lambda b: Tree({ 265s 'pkg': Tree({'changelog': b}), 265s 'debian': Symlink('pkg'), 265s }) 265s ]) 265s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 265s blob = Blob(b'') 265s blob_id = blob.write(pygit2_repo) 265s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 265s > result_blob = target.follow_symlinks_to_blob( 265s pygit2_repo, 265s tree, 265s 'debian/changelog', 265s ) 265s 265s gitubuntu/git_repository_test.py:342: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpnexxst5c/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s gitubuntu/git_repository.py:68: AttributeError 265s ___________________ test_follow_symlinks_to_blob[3] ____________________ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmpy0xcd2fp/.git/') 265s tree_func = at 0x3ffb79f44a0> 265s 265s @pytest.mark.parametrize('tree_func', [ 265s # The tree_func parameter is a function that accepts a mock Blob that is to 265s # represent the changelog blob itself and returns a mock Tree with the mock 265s # Blob embedded somewhere within it. The test function can then ensure that 265s # follow_symlinks_to_blob can correctly find the changelog Blob given the 265s # Tree. 265s 265s # Of course this is only expected to work if, after checking out the Tree, 265s # "cat debian/changelog" would work. But this allows us to test the various 265s # permutations of symlink following in Trees that _are_ valid. 265s 265s # Simple case 265s lambda b: Tree({ 265s 'debian': Tree({'changelog': b}), 265s }), 265s 265s # Symlink in debian/ 265s lambda b: Tree({ 265s 'debian': Tree({ 265s 'changelog.real': b, 265s 'changelog': Symlink('changelog.real'), 265s }), 265s }), 265s 265s # Symlink to parent directory 265s lambda b: Tree({ 265s 'changelog': b, 265s 'debian': Tree({ 265s 'changelog': Symlink('../changelog'), 265s }) 265s }), 265s 265s # Symlink to subdirectory 265s lambda b: Tree({ 265s 'debian': Tree({ 265s 'changelog': Symlink('subdirectory/changelog'), 265s 'subdirectory': Tree({'changelog': b}), 265s }) 265s }), 265s 265s # debian/ itself is a symlink to a different directory 265s lambda b: Tree({ 265s 'pkg': Tree({'changelog': b}), 265s 'debian': Symlink('pkg'), 265s }) 265s ]) 265s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 265s blob = Blob(b'') 265s blob_id = blob.write(pygit2_repo) 265s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 265s > result_blob = target.follow_symlinks_to_blob( 265s pygit2_repo, 265s tree, 265s 'debian/changelog', 265s ) 265s 265s gitubuntu/git_repository_test.py:342: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpy0xcd2fp/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s gitubuntu/git_repository.py:68: AttributeError 265s ___________________ test_follow_symlinks_to_blob[4] ____________________ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmpc1jyyuxi/.git/') 265s tree_func = at 0x3ffb79f4540> 265s 265s @pytest.mark.parametrize('tree_func', [ 265s # The tree_func parameter is a function that accepts a mock Blob that is to 265s # represent the changelog blob itself and returns a mock Tree with the mock 265s # Blob embedded somewhere within it. The test function can then ensure that 265s # follow_symlinks_to_blob can correctly find the changelog Blob given the 265s # Tree. 265s 265s # Of course this is only expected to work if, after checking out the Tree, 265s # "cat debian/changelog" would work. But this allows us to test the various 265s # permutations of symlink following in Trees that _are_ valid. 265s 265s # Simple case 265s lambda b: Tree({ 265s 'debian': Tree({'changelog': b}), 265s }), 265s 265s # Symlink in debian/ 265s lambda b: Tree({ 265s 'debian': Tree({ 265s 'changelog.real': b, 265s 'changelog': Symlink('changelog.real'), 265s }), 265s }), 265s 265s # Symlink to parent directory 265s lambda b: Tree({ 265s 'changelog': b, 265s 'debian': Tree({ 265s 'changelog': Symlink('../changelog'), 265s }) 265s }), 265s 265s # Symlink to subdirectory 265s lambda b: Tree({ 265s 'debian': Tree({ 265s 'changelog': Symlink('subdirectory/changelog'), 265s 'subdirectory': Tree({'changelog': b}), 265s }) 265s }), 265s 265s # debian/ itself is a symlink to a different directory 265s lambda b: Tree({ 265s 'pkg': Tree({'changelog': b}), 265s 'debian': Symlink('pkg'), 265s }) 265s ]) 265s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 265s blob = Blob(b'') 265s blob_id = blob.write(pygit2_repo) 265s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 265s > result_blob = target.follow_symlinks_to_blob( 265s pygit2_repo, 265s tree, 265s 'debian/changelog', 265s ) 265s 265s gitubuntu/git_repository_test.py:342: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpc1jyyuxi/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s gitubuntu/git_repository.py:68: AttributeError 265s ________________ test_follow_symlinks_to_blob_not_found[tree1] _________________ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmp2_53kts8/.git/') 265s tree = 265s 265s @pytest.mark.parametrize('tree', [ 265s Tree({}), 265s Tree({'debian': Tree({})}), 265s Tree({'debian': Tree({'changelog': Symlink('other')})}), 265s Tree({'debian': Tree({'changelog': Symlink('../other')})}), 265s ]) 265s def test_follow_symlinks_to_blob_not_found(pygit2_repo, tree): 265s pygit2_tree = pygit2_repo.get(tree.write(pygit2_repo)) 265s with pytest.raises(KeyError): 265s > target.follow_symlinks_to_blob( 265s pygit2_repo, 265s pygit2_tree, 265s 'debian/changelog', 265s ) 265s 265s gitubuntu/git_repository_test.py:359: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmp2_53kts8/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s gitubuntu/git_repository.py:68: AttributeError 265s ________________ test_follow_symlinks_to_blob_not_found[tree2] _________________ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmpl77zriiz/.git/') 265s tree = 265s 265s @pytest.mark.parametrize('tree', [ 265s Tree({}), 265s Tree({'debian': Tree({})}), 265s Tree({'debian': Tree({'changelog': Symlink('other')})}), 265s Tree({'debian': Tree({'changelog': Symlink('../other')})}), 265s ]) 265s def test_follow_symlinks_to_blob_not_found(pygit2_repo, tree): 265s pygit2_tree = pygit2_repo.get(tree.write(pygit2_repo)) 265s with pytest.raises(KeyError): 265s > target.follow_symlinks_to_blob( 265s pygit2_repo, 265s pygit2_tree, 265s 'debian/changelog', 265s ) 265s 265s gitubuntu/git_repository_test.py:359: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpl77zriiz/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s gitubuntu/git_repository.py:68: AttributeError 265s ________________ test_follow_symlinks_to_blob_not_found[tree3] _________________ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmpubpeurrr/.git/') 265s tree = 265s 265s @pytest.mark.parametrize('tree', [ 265s Tree({}), 265s Tree({'debian': Tree({})}), 265s Tree({'debian': Tree({'changelog': Symlink('other')})}), 265s Tree({'debian': Tree({'changelog': Symlink('../other')})}), 265s ]) 265s def test_follow_symlinks_to_blob_not_found(pygit2_repo, tree): 265s pygit2_tree = pygit2_repo.get(tree.write(pygit2_repo)) 265s with pytest.raises(KeyError): 265s > target.follow_symlinks_to_blob( 265s pygit2_repo, 265s pygit2_tree, 265s 'debian/changelog', 265s ) 265s 265s gitubuntu/git_repository_test.py:359: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpubpeurrr/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s gitubuntu/git_repository.py:68: AttributeError 265s _________________________ test_git_escape_dir_to_tree __________________________ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmpokgvr8i8/.git/') 265s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_git_escape_dir_to_tree0') 265s 265s def test_git_escape_dir_to_tree(pygit2_repo, tmpdir): 265s tmpdir.mkdir('.git') 265s > tree_hash = target.GitUbuntuRepository.dir_to_tree( 265s pygit2_repo, 265s str(tmpdir), 265s escape=True, 265s ) 265s 265s gitubuntu/git_repository_test.py:668: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s gitubuntu/git_repository.py:2463: in dir_to_tree 265s replacement_oid = cls._add_missing_tree_dirs( 265s gitubuntu/git_repository.py:2397: in _add_missing_tree_dirs 265s tree_builder = cls._create_replacement_tree_builder( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s cls = 265s repo = pygit2.Repository('/tmp/tmpokgvr8i8/.git/') 265s treeish = 265s sub_path = '' 265s 265s @classmethod 265s def _create_replacement_tree_builder(cls, repo, treeish, sub_path): 265s '''Create a replacement TreeBuilder 265s 265s Create a TreeBuilder based on an existing repository, top-level 265s tree-ish and path inside that tree. 265s 265s A sub_path of '' is taken to mean a request for a replacement 265s TreeBuilder for the top level tree. 265s 265s Returns a TreeBuilder object pre-populated with the previous contents. 265s If the path did not previously exist in the tree-ish, then return an 265s empty TreeBuilder instead. 265s ''' 265s 265s > tree = treeish.peel(pygit2.GIT_OBJ_TREE) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s gitubuntu/git_repository.py:2331: AttributeError 265s ______ test_determine_quilt_series_path[tree_data1-debian/patches/series] ______ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmp85os3gf1/.git/') 265s tree_data = 265s expected_path = 'debian/patches/series' 265s 265s @pytest.mark.parametrize('tree_data,expected_path', [ 265s # Empty tree -> default 265s (Tree({}), 'debian/patches/series'), 265s 265s # Empty debian/patches directory -> default 265s (Tree({'debian': Tree({'patches': Tree({})})}), 'debian/patches/series'), 265s 265s # Only debian/patches/series -> that one 265s ( 265s Tree({'debian': Tree({'patches': Tree({'series': Blob(b'')})})}), 265s 'debian/patches/series', 265s ), 265s 265s # Only debian/patches/debian.series -> that one 265s ( 265s Tree({'debian': Tree({'patches': Tree({ 265s 'debian.series': Blob(b'') 265s })})}), 265s 'debian/patches/debian.series', 265s ), 265s 265s # Both -> debian.series 265s ( 265s Tree({'debian': Tree({'patches': Tree({ 265s 'debian.series': Blob(b''), 265s 'series': Blob(b''), 265s })})}), 265s 'debian/patches/debian.series', 265s ), 265s ]) 265s def test_determine_quilt_series_path(pygit2_repo, tree_data, expected_path): 265s tree_obj = pygit2_repo.get(tree_data.write(pygit2_repo)) 265s > path = target.determine_quilt_series_path(pygit2_repo, tree_obj) 265s 265s gitubuntu/git_repository_test.py:708: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s gitubuntu/git_repository.py:991: in determine_quilt_series_path 265s blob = follow_symlinks_to_blob( 265s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmp85os3gf1/.git/') 265s top_tree_object = 265s search_path = 'debian/patches/debian.series' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s gitubuntu/git_repository.py:68: AttributeError 265s ______ test_determine_quilt_series_path[tree_data2-debian/patches/series] ______ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmppxre1hzu/.git/') 265s tree_data = 265s expected_path = 'debian/patches/series' 265s 265s @pytest.mark.parametrize('tree_data,expected_path', [ 265s # Empty tree -> default 265s (Tree({}), 'debian/patches/series'), 265s 265s # Empty debian/patches directory -> default 265s (Tree({'debian': Tree({'patches': Tree({})})}), 'debian/patches/series'), 265s 265s # Only debian/patches/series -> that one 265s ( 265s Tree({'debian': Tree({'patches': Tree({'series': Blob(b'')})})}), 265s 'debian/patches/series', 265s ), 265s 265s # Only debian/patches/debian.series -> that one 265s ( 265s Tree({'debian': Tree({'patches': Tree({ 265s 'debian.series': Blob(b'') 265s })})}), 265s 'debian/patches/debian.series', 265s ), 265s 265s # Both -> debian.series 265s ( 265s Tree({'debian': Tree({'patches': Tree({ 265s 'debian.series': Blob(b''), 265s 'series': Blob(b''), 265s })})}), 265s 'debian/patches/debian.series', 265s ), 265s ]) 265s def test_determine_quilt_series_path(pygit2_repo, tree_data, expected_path): 265s tree_obj = pygit2_repo.get(tree_data.write(pygit2_repo)) 265s > path = target.determine_quilt_series_path(pygit2_repo, tree_obj) 265s 265s gitubuntu/git_repository_test.py:708: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s gitubuntu/git_repository.py:991: in determine_quilt_series_path 265s blob = follow_symlinks_to_blob( 265s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmppxre1hzu/.git/') 265s top_tree_object = 265s search_path = 'debian/patches/debian.series' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s gitubuntu/git_repository.py:68: AttributeError 265s __ test_determine_quilt_series_path[tree_data3-debian/patches/debian.series] ___ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmpoptmppcv/.git/') 265s tree_data = 265s expected_path = 'debian/patches/debian.series' 265s 265s @pytest.mark.parametrize('tree_data,expected_path', [ 265s # Empty tree -> default 265s (Tree({}), 'debian/patches/series'), 265s 265s # Empty debian/patches directory -> default 265s (Tree({'debian': Tree({'patches': Tree({})})}), 'debian/patches/series'), 265s 265s # Only debian/patches/series -> that one 265s ( 265s Tree({'debian': Tree({'patches': Tree({'series': Blob(b'')})})}), 265s 'debian/patches/series', 265s ), 265s 265s # Only debian/patches/debian.series -> that one 265s ( 265s Tree({'debian': Tree({'patches': Tree({ 265s 'debian.series': Blob(b'') 265s })})}), 265s 'debian/patches/debian.series', 265s ), 265s 265s # Both -> debian.series 265s ( 265s Tree({'debian': Tree({'patches': Tree({ 265s 'debian.series': Blob(b''), 265s 'series': Blob(b''), 265s })})}), 265s 'debian/patches/debian.series', 265s ), 265s ]) 265s def test_determine_quilt_series_path(pygit2_repo, tree_data, expected_path): 265s tree_obj = pygit2_repo.get(tree_data.write(pygit2_repo)) 265s > path = target.determine_quilt_series_path(pygit2_repo, tree_obj) 265s 265s gitubuntu/git_repository_test.py:708: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s gitubuntu/git_repository.py:991: in determine_quilt_series_path 265s blob = follow_symlinks_to_blob( 265s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpoptmppcv/.git/') 265s top_tree_object = 265s search_path = 'debian/patches/debian.series' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s gitubuntu/git_repository.py:68: AttributeError 265s __ test_determine_quilt_series_path[tree_data4-debian/patches/debian.series] ___ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmpmni36hlq/.git/') 265s tree_data = 265s expected_path = 'debian/patches/debian.series' 265s 265s @pytest.mark.parametrize('tree_data,expected_path', [ 265s # Empty tree -> default 265s (Tree({}), 'debian/patches/series'), 265s 265s # Empty debian/patches directory -> default 265s (Tree({'debian': Tree({'patches': Tree({})})}), 'debian/patches/series'), 265s 265s # Only debian/patches/series -> that one 265s ( 265s Tree({'debian': Tree({'patches': Tree({'series': Blob(b'')})})}), 265s 'debian/patches/series', 265s ), 265s 265s # Only debian/patches/debian.series -> that one 265s ( 265s Tree({'debian': Tree({'patches': Tree({ 265s 'debian.series': Blob(b'') 265s })})}), 265s 'debian/patches/debian.series', 265s ), 265s 265s # Both -> debian.series 265s ( 265s Tree({'debian': Tree({'patches': Tree({ 265s 'debian.series': Blob(b''), 265s 'series': Blob(b''), 265s })})}), 265s 'debian/patches/debian.series', 265s ), 265s ]) 265s def test_determine_quilt_series_path(pygit2_repo, tree_data, expected_path): 265s tree_obj = pygit2_repo.get(tree_data.write(pygit2_repo)) 265s > path = target.determine_quilt_series_path(pygit2_repo, tree_obj) 265s 265s gitubuntu/git_repository_test.py:708: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s gitubuntu/git_repository.py:991: in determine_quilt_series_path 265s blob = follow_symlinks_to_blob( 265s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpmni36hlq/.git/') 265s top_tree_object = 265s search_path = 'debian/patches/debian.series' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s gitubuntu/git_repository.py:68: AttributeError 265s ________________________________ test_quilt_env ________________________________ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmpb2pqtkjn/.git/') 265s 265s def test_quilt_env(pygit2_repo): 265s tree_builder = Tree({'debian': 265s Tree({'patches': Tree({'debian.series': Blob(b'')})}) 265s }) 265s tree_obj = pygit2_repo.get(tree_builder.write(pygit2_repo)) 265s > env = target.quilt_env(pygit2_repo, tree_obj) 265s 265s gitubuntu/git_repository_test.py:717: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s gitubuntu/git_repository.py:1022: in quilt_env 265s 'QUILT_SERIES': determine_quilt_series_path(pygit2_repo, treeish), 265s gitubuntu/git_repository.py:991: in determine_quilt_series_path 265s blob = follow_symlinks_to_blob( 265s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpb2pqtkjn/.git/') 265s top_tree_object = 265s search_path = 'debian/patches/debian.series' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s gitubuntu/git_repository.py:68: AttributeError 265s _____________________________ test_repo_quilt_env ______________________________ 265s 265s repo = 265s 265s def test_repo_quilt_env(repo): 265s tree_builder = Tree({'debian': 265s Tree({'patches': Tree({'debian.series': Blob(b'')})}) 265s }) 265s tree_obj = repo.raw_repo.get(tree_builder.write(repo.raw_repo)) 265s > env = repo.quilt_env(tree_obj) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository_test.py:732: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:2575: in quilt_env 265s env.update(quilt_env(self.raw_repo, treeish)) 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:1022: in quilt_env 265s 'QUILT_SERIES': determine_quilt_series_path(pygit2_repo, treeish), 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:991: in determine_quilt_series_path 265s blob = follow_symlinks_to_blob( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmp8h60son5/.git/') 265s top_tree_object = 265s search_path = 'debian/patches/debian.series' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s _____________________ test_repo_quilt_env_from_treeish_str _____________________ 265s 265s repo = 265s 265s def test_repo_quilt_env_from_treeish_str(repo): 265s tree_builder = Tree({'debian': 265s Tree({'patches': Tree({'debian.series': Blob(b'')})}) 265s }) 265s tree_obj = repo.raw_repo.get(tree_builder.write(repo.raw_repo)) 265s > env = repo.quilt_env_from_treeish_str(str(tree_obj.id)) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository_test.py:757: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:2589: in quilt_env_from_treeish_str 265s return self.quilt_env(self.raw_repo.get(treeish_str)) 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:2575: in quilt_env 265s env.update(quilt_env(self.raw_repo, treeish)) 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:1022: in quilt_env 265s 'QUILT_SERIES': determine_quilt_series_path(pygit2_repo, treeish), 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:991: in determine_quilt_series_path 265s blob = follow_symlinks_to_blob( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmp4etdlt3a/.git/') 265s top_tree_object = 265s search_path = 'debian/patches/debian.series' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s _ test_repo_find_ubuntu_merge[Common case-input_data0-pkg/import/1-1ubuntu1-pkg/import/2-1-pkg/import/1-1] _ 265s 265s description = 'Common case' 265s repo = 265s input_data = 265s old_ubuntu = 'pkg/import/1-1ubuntu1', new_debian = 'pkg/import/2-1' 265s expected = 'pkg/import/1-1' 265s 265s @pytest.mark.parametrize( 265s 'description, input_data, old_ubuntu, new_debian, expected', 265s [ 265s ( 265s 'Common case', 265s Repo( 265s commits=[ 265s Commit.from_spec( 265s name='old/debian' 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('old/debian')], 265s name='old/ubuntu', 265s changelog_versions=['1-1ubuntu1', '1-1'], 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('old/debian')], 265s name='new/debian', 265s changelog_versions=['2-1', '1-1'], 265s ), 265s ], 265s tags={ 265s 'pkg/import/1-1': Placeholder('old/debian'), 265s 'pkg/import/1-1ubuntu1': Placeholder('old/ubuntu'), 265s 'pkg/import/2-1': Placeholder('new/debian'), 265s }, 265s ), 265s 'pkg/import/1-1ubuntu1', 265s 'pkg/import/2-1', 265s 'pkg/import/1-1', 265s ), 265s ( 265s 'Ubuntu delta based on a NMU', 265s Repo( 265s commits=[ 265s Commit.from_spec( 265s name='fork_point' 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('fork_point')], 265s name='old/debian', 265s changelog_versions=['1-1.1', '1-1'], 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('old/debian')], 265s name='old/ubuntu', 265s changelog_versions=['1-1.1ubuntu1', '1-1.1', '1-1'], 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('fork_point')], 265s name='new/debian', 265s changelog_versions=['2-1', '1-1'], 265s ), 265s ], 265s tags={ 265s 'pkg/import/1-1': Placeholder('fork_point'), 265s 'pkg/import/1-1.1': Placeholder('old/debian'), 265s 'pkg/import/1-1.1ubuntu1': Placeholder('old/ubuntu'), 265s 'pkg/import/2-1': Placeholder('new/debian'), 265s }, 265s ), 265s 'pkg/import/1-1.1ubuntu1', 265s 'pkg/import/2-1', 265s 'pkg/import/1-1.1', 265s ), 265s ( 265s 'Ubuntu upstream version head of Debian', 265s Repo( 265s commits=[ 265s Commit.from_spec( 265s name='old/debian' 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('old/debian')], 265s name='mid_ubuntu', 265s changelog_versions=['1-1ubuntu1', '1-1'], 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('mid_ubuntu')], 265s name='old/ubuntu', 265s changelog_versions=['2-0ubuntu1', '1-1ubuntu1', '1-1'], 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('old/debian')], 265s name='new/debian', 265s changelog_versions=['3-1', '1-1'], 265s ), 265s ], 265s tags={ 265s 'pkg/import/1-1': Placeholder('old/debian'), 265s 'pkg/import/1-1ubuntu1': Placeholder('mid_ubuntu'), 265s 'pkg/import/2-0ubuntu1': Placeholder('old/ubuntu'), 265s 'pkg/import/3-1': Placeholder('new/debian'), 265s }, 265s ), 265s 'pkg/import/2-0ubuntu1', 265s 'pkg/import/3-1', 265s 'pkg/import/1-1', 265s ), 265s ], 265s ) 265s def test_repo_find_ubuntu_merge( 265s description, 265s repo, 265s input_data, 265s old_ubuntu, 265s new_debian, 265s expected, 265s ): 265s > input_data.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository_test.py:889: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpb_591vm_/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_2.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_2-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_2-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ 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] _ 265s 265s description = 'Ubuntu delta based on a NMU' 265s repo = 265s input_data = 265s old_ubuntu = 'pkg/import/1-1.1ubuntu1', new_debian = 'pkg/import/2-1' 265s expected = 'pkg/import/1-1.1' 265s 265s @pytest.mark.parametrize( 265s 'description, input_data, old_ubuntu, new_debian, expected', 265s [ 265s ( 265s 'Common case', 265s Repo( 265s commits=[ 265s Commit.from_spec( 265s name='old/debian' 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('old/debian')], 265s name='old/ubuntu', 265s changelog_versions=['1-1ubuntu1', '1-1'], 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('old/debian')], 265s name='new/debian', 265s changelog_versions=['2-1', '1-1'], 265s ), 265s ], 265s tags={ 265s 'pkg/import/1-1': Placeholder('old/debian'), 265s 'pkg/import/1-1ubuntu1': Placeholder('old/ubuntu'), 265s 'pkg/import/2-1': Placeholder('new/debian'), 265s }, 265s ), 265s 'pkg/import/1-1ubuntu1', 265s 'pkg/import/2-1', 265s 'pkg/import/1-1', 265s ), 265s ( 265s 'Ubuntu delta based on a NMU', 265s Repo( 265s commits=[ 265s Commit.from_spec( 265s name='fork_point' 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('fork_point')], 265s name='old/debian', 265s changelog_versions=['1-1.1', '1-1'], 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('old/debian')], 265s name='old/ubuntu', 265s changelog_versions=['1-1.1ubuntu1', '1-1.1', '1-1'], 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('fork_point')], 265s name='new/debian', 265s changelog_versions=['2-1', '1-1'], 265s ), 265s ], 265s tags={ 265s 'pkg/import/1-1': Placeholder('fork_point'), 265s 'pkg/import/1-1.1': Placeholder('old/debian'), 265s 'pkg/import/1-1.1ubuntu1': Placeholder('old/ubuntu'), 265s 'pkg/import/2-1': Placeholder('new/debian'), 265s }, 265s ), 265s 'pkg/import/1-1.1ubuntu1', 265s 'pkg/import/2-1', 265s 'pkg/import/1-1.1', 265s ), 265s ( 265s 'Ubuntu upstream version head of Debian', 265s Repo( 265s commits=[ 265s Commit.from_spec( 265s name='old/debian' 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('old/debian')], 265s name='mid_ubuntu', 265s changelog_versions=['1-1ubuntu1', '1-1'], 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('mid_ubuntu')], 265s name='old/ubuntu', 265s changelog_versions=['2-0ubuntu1', '1-1ubuntu1', '1-1'], 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('old/debian')], 265s name='new/debian', 265s changelog_versions=['3-1', '1-1'], 265s ), 265s ], 265s tags={ 265s 'pkg/import/1-1': Placeholder('old/debian'), 265s 'pkg/import/1-1ubuntu1': Placeholder('mid_ubuntu'), 265s 'pkg/import/2-0ubuntu1': Placeholder('old/ubuntu'), 265s 'pkg/import/3-1': Placeholder('new/debian'), 265s }, 265s ), 265s 'pkg/import/2-0ubuntu1', 265s 'pkg/import/3-1', 265s 'pkg/import/1-1', 265s ), 265s ], 265s ) 265s def test_repo_find_ubuntu_merge( 265s description, 265s repo, 265s input_data, 265s old_ubuntu, 265s new_debian, 265s expected, 265s ): 265s > input_data.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository_test.py:889: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpkaszkg9i/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1ubuntu1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1ubuntu1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_2.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_2-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_2-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ 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] _ 265s 265s description = 'Ubuntu upstream version head of Debian' 265s repo = 265s input_data = 265s old_ubuntu = 'pkg/import/2-0ubuntu1', new_debian = 'pkg/import/3-1' 265s expected = 'pkg/import/1-1' 265s 265s @pytest.mark.parametrize( 265s 'description, input_data, old_ubuntu, new_debian, expected', 265s [ 265s ( 265s 'Common case', 265s Repo( 265s commits=[ 265s Commit.from_spec( 265s name='old/debian' 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('old/debian')], 265s name='old/ubuntu', 265s changelog_versions=['1-1ubuntu1', '1-1'], 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('old/debian')], 265s name='new/debian', 265s changelog_versions=['2-1', '1-1'], 265s ), 265s ], 265s tags={ 265s 'pkg/import/1-1': Placeholder('old/debian'), 265s 'pkg/import/1-1ubuntu1': Placeholder('old/ubuntu'), 265s 'pkg/import/2-1': Placeholder('new/debian'), 265s }, 265s ), 265s 'pkg/import/1-1ubuntu1', 265s 'pkg/import/2-1', 265s 'pkg/import/1-1', 265s ), 265s ( 265s 'Ubuntu delta based on a NMU', 265s Repo( 265s commits=[ 265s Commit.from_spec( 265s name='fork_point' 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('fork_point')], 265s name='old/debian', 265s changelog_versions=['1-1.1', '1-1'], 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('old/debian')], 265s name='old/ubuntu', 265s changelog_versions=['1-1.1ubuntu1', '1-1.1', '1-1'], 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('fork_point')], 265s name='new/debian', 265s changelog_versions=['2-1', '1-1'], 265s ), 265s ], 265s tags={ 265s 'pkg/import/1-1': Placeholder('fork_point'), 265s 'pkg/import/1-1.1': Placeholder('old/debian'), 265s 'pkg/import/1-1.1ubuntu1': Placeholder('old/ubuntu'), 265s 'pkg/import/2-1': Placeholder('new/debian'), 265s }, 265s ), 265s 'pkg/import/1-1.1ubuntu1', 265s 'pkg/import/2-1', 265s 'pkg/import/1-1.1', 265s ), 265s ( 265s 'Ubuntu upstream version head of Debian', 265s Repo( 265s commits=[ 265s Commit.from_spec( 265s name='old/debian' 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('old/debian')], 265s name='mid_ubuntu', 265s changelog_versions=['1-1ubuntu1', '1-1'], 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('mid_ubuntu')], 265s name='old/ubuntu', 265s changelog_versions=['2-0ubuntu1', '1-1ubuntu1', '1-1'], 265s ), 265s Commit.from_spec( 265s parents=[Placeholder('old/debian')], 265s name='new/debian', 265s changelog_versions=['3-1', '1-1'], 265s ), 265s ], 265s tags={ 265s 'pkg/import/1-1': Placeholder('old/debian'), 265s 'pkg/import/1-1ubuntu1': Placeholder('mid_ubuntu'), 265s 'pkg/import/2-0ubuntu1': Placeholder('old/ubuntu'), 265s 'pkg/import/3-1': Placeholder('new/debian'), 265s }, 265s ), 265s 'pkg/import/2-0ubuntu1', 265s 'pkg/import/3-1', 265s 'pkg/import/1-1', 265s ), 265s ], 265s ) 265s def test_repo_find_ubuntu_merge( 265s description, 265s repo, 265s input_data, 265s old_ubuntu, 265s new_debian, 265s expected, 265s ): 265s > input_data.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository_test.py:889: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp5fyl_28a/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_2.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_2-0ubuntu1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_2-0ubuntu1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_3.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_3-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_3-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _______________________________ test_commit_tree _______________________________ 265s 265s repo = 265s 265s def test_commit_tree(repo): 265s # Construct a repository with an initial commit on the master branch so 265s # that we can verify later parentage and lack of branch movement 265s parent_commit_oid = Repo( 265s commits=[Commit(name='master')], 265s branches={'master': Placeholder('master')} 265s ).write(repo.raw_repo) 265s repo.raw_repo.lookup_reference('HEAD').set_target('refs/heads/master') 265s 265s # Construct a tree inside the repository with a debian/changelog in it to 265s # feed to the method under test 265s test_changelog_path = os.path.join( 265s pkg_resources.resource_filename('gitubuntu', 'changelog_tests'), 265s 'test_date_1', 265s ) 265s with open(test_changelog_path, 'rb') as f: 265s test_changelog_bytes = f.read() 265s test_changelog_blob = Blob(test_changelog_bytes) 265s source_tree = Tree({'debian': Tree({'changelog': test_changelog_blob})}) 265s source_tree_oid = source_tree.write(repo.raw_repo) 265s 265s # Call the method under test 265s > commit_oid = repo.commit_source_tree( 265s tree=source_tree_oid, 265s parents=[parent_commit_oid], 265s log_message='test_commit_msg', 265s commit_date=datetime.datetime( 265s 1971, # year 265s 2, # month 265s 3, # day 265s 4, # hours 265s 5, # minutes 265s 6, # seconds 265s 7, # milliseconds (this should get truncated down to 0) 265s datetime.timezone(datetime.timedelta(hours=-8)) 265s ), 265s ) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository_test.py:993: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:2299: in commit_source_tree 265s changelog = self.get_changelog_from_treeish(str(tree)) 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 265s return Changelog.from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:569: in from_treeish 265s blob = follow_symlinks_to_blob( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmp1vlp3jkr/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s _____________________ test_descendant_of[root-root-False] ______________________ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmplr699ls7/.git/'), a = 'root' 265s b = 'root', expected = False 265s 265s @pytest.mark.parametrize(['a', 'b', 'expected'], 265s [ 265s ('root', 'root', False), 265s ('child1', 'root', True), 265s ('root', 'child1', False), 265s ('grandchild1', 'root', True), 265s ('child1', 'child2', False), 265s ('root', 'disjoint', False), 265s ] 265s ) 265s def test_descendant_of(pygit2_repo, a, b, expected): 265s """ 265s General test for pygit2.Repository.descendant_of(). 265s 265s This test was formerly for a temporary alternative implementation of 265s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 265s use until we updated our pinning to use a newer version of pygit2 that 265s included the pygit2.Repository.descendant_of() method. After the pinning 265s was removed and this implementation replacement took place, we kept the 265s test to ensure that actual behaviour did not change. 265s 265s This unit tests validate_upload_tag() for various parameterized cases. The 265s paramater sets assume the repository structure encoded in the Repo() call 265s below. 265s 265s :param pygit2.Repository pygit2_repo: fixture providing a temporary 265s pygit2.Repository instance to use 265s :param str a: tag name of the first commit to pass to descendant_of() 265s :param str b: tag name of the second commit to pass to descendant_of() 265s :param bool expected: the expected result of descendant_of() 265s """ 265s Repo( 265s # Unique message parameters are used in each entry here in order to 265s # ensure that otherwise-identical commits do not end up being the same 265s # commit (with the same hash, etc). 265s commits=[ 265s Commit(name='root', message='1'), 265s Commit(name='child1', parents=[Placeholder('root')], message='2'), 265s Commit(name='child2', parents=[Placeholder('root')], message='3'), 265s Commit( 265s name='grandchild1', 265s parents=[Placeholder('child1')], 265s message='4' 265s ), 265s Commit(name='disjoint', message='5'), 265s ], 265s tags={ 265s 'root': Placeholder('root'), 265s 'child1': Placeholder('child1'), 265s 'child2': Placeholder('child2'), 265s 'grandchild1': Placeholder('grandchild1'), 265s 'disjoint': Placeholder('disjoint'), 265s } 265s > ).write(pygit2_repo) 265s 265s gitubuntu/git_repository_test.py:1099: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmplr699ls7/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s gitubuntu/repo_builder.py:389: AttributeError 265s _____________________ test_descendant_of[child1-root-True] _____________________ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmpk8i7vlcm/.git/'), a = 'child1' 265s b = 'root', expected = True 265s 265s @pytest.mark.parametrize(['a', 'b', 'expected'], 265s [ 265s ('root', 'root', False), 265s ('child1', 'root', True), 265s ('root', 'child1', False), 265s ('grandchild1', 'root', True), 265s ('child1', 'child2', False), 265s ('root', 'disjoint', False), 265s ] 265s ) 265s def test_descendant_of(pygit2_repo, a, b, expected): 265s """ 265s General test for pygit2.Repository.descendant_of(). 265s 265s This test was formerly for a temporary alternative implementation of 265s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 265s use until we updated our pinning to use a newer version of pygit2 that 265s included the pygit2.Repository.descendant_of() method. After the pinning 265s was removed and this implementation replacement took place, we kept the 265s test to ensure that actual behaviour did not change. 265s 265s This unit tests validate_upload_tag() for various parameterized cases. The 265s paramater sets assume the repository structure encoded in the Repo() call 265s below. 265s 265s :param pygit2.Repository pygit2_repo: fixture providing a temporary 265s pygit2.Repository instance to use 265s :param str a: tag name of the first commit to pass to descendant_of() 265s :param str b: tag name of the second commit to pass to descendant_of() 265s :param bool expected: the expected result of descendant_of() 265s """ 265s Repo( 265s # Unique message parameters are used in each entry here in order to 265s # ensure that otherwise-identical commits do not end up being the same 265s # commit (with the same hash, etc). 265s commits=[ 265s Commit(name='root', message='1'), 265s Commit(name='child1', parents=[Placeholder('root')], message='2'), 265s Commit(name='child2', parents=[Placeholder('root')], message='3'), 265s Commit( 265s name='grandchild1', 265s parents=[Placeholder('child1')], 265s message='4' 265s ), 265s Commit(name='disjoint', message='5'), 265s ], 265s tags={ 265s 'root': Placeholder('root'), 265s 'child1': Placeholder('child1'), 265s 'child2': Placeholder('child2'), 265s 'grandchild1': Placeholder('grandchild1'), 265s 'disjoint': Placeholder('disjoint'), 265s } 265s > ).write(pygit2_repo) 265s 265s gitubuntu/git_repository_test.py:1099: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpk8i7vlcm/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s gitubuntu/repo_builder.py:389: AttributeError 265s ____________________ test_descendant_of[root-child1-False] _____________________ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmpbwdufg6f/.git/'), a = 'root' 265s b = 'child1', expected = False 265s 265s @pytest.mark.parametrize(['a', 'b', 'expected'], 265s [ 265s ('root', 'root', False), 265s ('child1', 'root', True), 265s ('root', 'child1', False), 265s ('grandchild1', 'root', True), 265s ('child1', 'child2', False), 265s ('root', 'disjoint', False), 265s ] 265s ) 265s def test_descendant_of(pygit2_repo, a, b, expected): 265s """ 265s General test for pygit2.Repository.descendant_of(). 265s 265s This test was formerly for a temporary alternative implementation of 265s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 265s use until we updated our pinning to use a newer version of pygit2 that 265s included the pygit2.Repository.descendant_of() method. After the pinning 265s was removed and this implementation replacement took place, we kept the 265s test to ensure that actual behaviour did not change. 265s 265s This unit tests validate_upload_tag() for various parameterized cases. The 265s paramater sets assume the repository structure encoded in the Repo() call 265s below. 265s 265s :param pygit2.Repository pygit2_repo: fixture providing a temporary 265s pygit2.Repository instance to use 265s :param str a: tag name of the first commit to pass to descendant_of() 265s :param str b: tag name of the second commit to pass to descendant_of() 265s :param bool expected: the expected result of descendant_of() 265s """ 265s Repo( 265s # Unique message parameters are used in each entry here in order to 265s # ensure that otherwise-identical commits do not end up being the same 265s # commit (with the same hash, etc). 265s commits=[ 265s Commit(name='root', message='1'), 265s Commit(name='child1', parents=[Placeholder('root')], message='2'), 265s Commit(name='child2', parents=[Placeholder('root')], message='3'), 265s Commit( 265s name='grandchild1', 265s parents=[Placeholder('child1')], 265s message='4' 265s ), 265s Commit(name='disjoint', message='5'), 265s ], 265s tags={ 265s 'root': Placeholder('root'), 265s 'child1': Placeholder('child1'), 265s 'child2': Placeholder('child2'), 265s 'grandchild1': Placeholder('grandchild1'), 265s 'disjoint': Placeholder('disjoint'), 265s } 265s > ).write(pygit2_repo) 265s 265s gitubuntu/git_repository_test.py:1099: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpbwdufg6f/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s gitubuntu/repo_builder.py:389: AttributeError 265s __________________ test_descendant_of[grandchild1-root-True] ___________________ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmpbh31rhtg/.git/'), a = 'grandchild1' 265s b = 'root', expected = True 265s 265s @pytest.mark.parametrize(['a', 'b', 'expected'], 265s [ 265s ('root', 'root', False), 265s ('child1', 'root', True), 265s ('root', 'child1', False), 265s ('grandchild1', 'root', True), 265s ('child1', 'child2', False), 265s ('root', 'disjoint', False), 265s ] 265s ) 265s def test_descendant_of(pygit2_repo, a, b, expected): 265s """ 265s General test for pygit2.Repository.descendant_of(). 265s 265s This test was formerly for a temporary alternative implementation of 265s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 265s use until we updated our pinning to use a newer version of pygit2 that 265s included the pygit2.Repository.descendant_of() method. After the pinning 265s was removed and this implementation replacement took place, we kept the 265s test to ensure that actual behaviour did not change. 265s 265s This unit tests validate_upload_tag() for various parameterized cases. The 265s paramater sets assume the repository structure encoded in the Repo() call 265s below. 265s 265s :param pygit2.Repository pygit2_repo: fixture providing a temporary 265s pygit2.Repository instance to use 265s :param str a: tag name of the first commit to pass to descendant_of() 265s :param str b: tag name of the second commit to pass to descendant_of() 265s :param bool expected: the expected result of descendant_of() 265s """ 265s Repo( 265s # Unique message parameters are used in each entry here in order to 265s # ensure that otherwise-identical commits do not end up being the same 265s # commit (with the same hash, etc). 265s commits=[ 265s Commit(name='root', message='1'), 265s Commit(name='child1', parents=[Placeholder('root')], message='2'), 265s Commit(name='child2', parents=[Placeholder('root')], message='3'), 265s Commit( 265s name='grandchild1', 265s parents=[Placeholder('child1')], 265s message='4' 265s ), 265s Commit(name='disjoint', message='5'), 265s ], 265s tags={ 265s 'root': Placeholder('root'), 265s 'child1': Placeholder('child1'), 265s 'child2': Placeholder('child2'), 265s 'grandchild1': Placeholder('grandchild1'), 265s 'disjoint': Placeholder('disjoint'), 265s } 265s > ).write(pygit2_repo) 265s 265s gitubuntu/git_repository_test.py:1099: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpbh31rhtg/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s gitubuntu/repo_builder.py:389: AttributeError 265s ___________________ test_descendant_of[child1-child2-False] ____________________ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmpuk4w7_0u/.git/'), a = 'child1' 265s b = 'child2', expected = False 265s 265s @pytest.mark.parametrize(['a', 'b', 'expected'], 265s [ 265s ('root', 'root', False), 265s ('child1', 'root', True), 265s ('root', 'child1', False), 265s ('grandchild1', 'root', True), 265s ('child1', 'child2', False), 265s ('root', 'disjoint', False), 265s ] 265s ) 265s def test_descendant_of(pygit2_repo, a, b, expected): 265s """ 265s General test for pygit2.Repository.descendant_of(). 265s 265s This test was formerly for a temporary alternative implementation of 265s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 265s use until we updated our pinning to use a newer version of pygit2 that 265s included the pygit2.Repository.descendant_of() method. After the pinning 265s was removed and this implementation replacement took place, we kept the 265s test to ensure that actual behaviour did not change. 265s 265s This unit tests validate_upload_tag() for various parameterized cases. The 265s paramater sets assume the repository structure encoded in the Repo() call 265s below. 265s 265s :param pygit2.Repository pygit2_repo: fixture providing a temporary 265s pygit2.Repository instance to use 265s :param str a: tag name of the first commit to pass to descendant_of() 265s :param str b: tag name of the second commit to pass to descendant_of() 265s :param bool expected: the expected result of descendant_of() 265s """ 265s Repo( 265s # Unique message parameters are used in each entry here in order to 265s # ensure that otherwise-identical commits do not end up being the same 265s # commit (with the same hash, etc). 265s commits=[ 265s Commit(name='root', message='1'), 265s Commit(name='child1', parents=[Placeholder('root')], message='2'), 265s Commit(name='child2', parents=[Placeholder('root')], message='3'), 265s Commit( 265s name='grandchild1', 265s parents=[Placeholder('child1')], 265s message='4' 265s ), 265s Commit(name='disjoint', message='5'), 265s ], 265s tags={ 265s 'root': Placeholder('root'), 265s 'child1': Placeholder('child1'), 265s 'child2': Placeholder('child2'), 265s 'grandchild1': Placeholder('grandchild1'), 265s 'disjoint': Placeholder('disjoint'), 265s } 265s > ).write(pygit2_repo) 265s 265s gitubuntu/git_repository_test.py:1099: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpuk4w7_0u/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s gitubuntu/repo_builder.py:389: AttributeError 265s ___________________ test_descendant_of[root-disjoint-False] ____________________ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmprb54rwzw/.git/'), a = 'root' 265s b = 'disjoint', expected = False 265s 265s @pytest.mark.parametrize(['a', 'b', 'expected'], 265s [ 265s ('root', 'root', False), 265s ('child1', 'root', True), 265s ('root', 'child1', False), 265s ('grandchild1', 'root', True), 265s ('child1', 'child2', False), 265s ('root', 'disjoint', False), 265s ] 265s ) 265s def test_descendant_of(pygit2_repo, a, b, expected): 265s """ 265s General test for pygit2.Repository.descendant_of(). 265s 265s This test was formerly for a temporary alternative implementation of 265s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 265s use until we updated our pinning to use a newer version of pygit2 that 265s included the pygit2.Repository.descendant_of() method. After the pinning 265s was removed and this implementation replacement took place, we kept the 265s test to ensure that actual behaviour did not change. 265s 265s This unit tests validate_upload_tag() for various parameterized cases. The 265s paramater sets assume the repository structure encoded in the Repo() call 265s below. 265s 265s :param pygit2.Repository pygit2_repo: fixture providing a temporary 265s pygit2.Repository instance to use 265s :param str a: tag name of the first commit to pass to descendant_of() 265s :param str b: tag name of the second commit to pass to descendant_of() 265s :param bool expected: the expected result of descendant_of() 265s """ 265s Repo( 265s # Unique message parameters are used in each entry here in order to 265s # ensure that otherwise-identical commits do not end up being the same 265s # commit (with the same hash, etc). 265s commits=[ 265s Commit(name='root', message='1'), 265s Commit(name='child1', parents=[Placeholder('root')], message='2'), 265s Commit(name='child2', parents=[Placeholder('root')], message='3'), 265s Commit( 265s name='grandchild1', 265s parents=[Placeholder('child1')], 265s message='4' 265s ), 265s Commit(name='disjoint', message='5'), 265s ], 265s tags={ 265s 'root': Placeholder('root'), 265s 'child1': Placeholder('child1'), 265s 'child2': Placeholder('child2'), 265s 'grandchild1': Placeholder('grandchild1'), 265s 'disjoint': Placeholder('disjoint'), 265s } 265s > ).write(pygit2_repo) 265s 265s gitubuntu/git_repository_test.py:1099: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmprb54rwzw/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s gitubuntu/repo_builder.py:389: AttributeError 265s _______________________________ test_create_tag ________________________________ 265s 265s repo = 265s 265s def test_create_tag(repo): 265s """create_tag() should create a tag 265s 265s :param GitUbuntuRepository repo: fixture providing a temporary 265s GitUbuntuRepository instance to use 265s """ 265s Repo( 265s commits=[Commit(name='root')], 265s tags={'root': Placeholder('root')}, 265s > ).write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository_test.py:1127: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp28js6_py/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s __________________________ test_get_all_reimport_tags __________________________ 265s 265s repo = 265s 265s def test_get_all_reimport_tags(repo): 265s """get_all_reimport_tags() should return only matching reimport tags 265s 265s :param GitUbuntuRepository repo: fixture providing a temporary 265s GitUbuntuRepository instance to use 265s """ 265s Repo( 265s commits=[Commit(name='root')], 265s tags={ 265s 'importer/reimport/import/1/0': Placeholder('root'), 265s 'importer/reimport/import/1/1': Placeholder('root'), 265s 265s # This entry must not be identified as one of version 1's reimport 265s # tags, even though it shares the same base prefix. 265s 'importer/reimport/import/11/0': Placeholder('root'), 265s }, 265s > ).write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository_test.py:1165: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp9uj1p94k/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ______________________________ test_get_head_info ______________________________ 265s 265s repo = 265s 265s def test_get_head_info(repo): 265s """get_head_info() extracts expected commit and version info from the head 265s commit 265s """ 265s Repo( 265s commits=[ 265s Commit(name='foo', tree=SourceTree(source=Source())), 265s ], 265s branches={ 265s 'importer/ubuntu/foo': Placeholder('foo'), 265s 'importer/debian/bar': Placeholder('foo'), 265s 'other/ubuntu/baz': Placeholder('foo'), 265s }, 265s ).write(repo.raw_repo) 265s foo_commit_id = ( 265s repo.raw_repo 265s .lookup_reference('refs/heads/importer/ubuntu/foo') 265s .peel(pygit2.Commit).id 265s ) 265s > assert repo.get_head_info('ubuntu', 'importer') == { 265s 'importer/ubuntu/foo': HeadInfoItem( 265s version='1-1', 265s commit_time=0, 265s commit_id=foo_commit_id, 265s ), 265s } 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository_test.py:1193: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:1952: in get_head_info 265s self.get_changelog_versions_from_treeish(str(head.peel().id)) 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:1888: in get_changelog_versions_from_treeish 265s changelog = self.get_changelog_from_treeish(treeish_string) 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 265s return Changelog.from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:569: in from_treeish 265s blob = follow_symlinks_to_blob( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmp2weq2ayj/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_import_unapplied_spi_tags[input_repo0-expected_output_refs0-validation_repo_delta0-validation_repo_expected_identical_refs0-True] _ 265s 265s get_import_commit_msg_mock = 265s get_import_tag_msg_mock = 265s repo = 265s input_repo = 265s 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'] 265s validation_repo_delta = {'update_branches': {'importer/ubuntu/trusty': }} 265s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty-proposed', 'refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1'] 265s reuse = True 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'expected_output_refs', 265s 'validation_repo_delta', 265s 'validation_repo_expected_identical_refs', 265s 'reuse', 265s ], 265s [ 265s # 1) An existing import tag (or reimport tag) with the same Git tree 265s # - Reuse import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[Commit.from_spec(name='import')], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('import'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s ], 265s # reuse: 265s True, 265s ), 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='import tag contents', 265s ), 265s Commit.from_spec(name='reimport'), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 2) An existing import tag with a different Git tree and an existing 265s # upload tag with the same Git tree 265s # - Reuse upload tag, create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s Commit.from_spec(name='upload'), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-1': Placeholder('upload'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('upload'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('upload'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 3) An existing import tag with a different Git tree and an existing 265s # upload tag with a different Git tree 265s # - Create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s Commit.from_spec( 265s name='upload', 265s mutate='The upload tag contents', 265s ), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-1': Placeholder('upload'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [Commit.from_spec( 265s name='reimport', 265s message='Test commit (new)', 265s )], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 4) An existing import tag with a different Git tree and no upload tag 265s # - Create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [Commit.from_spec( 265s name='reimport', 265s message='Test commit (new)', 265s )], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 5) No import tag and an existing upload tag with the same Git tree 265s # - Reuse upload tag, create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[Commit.from_spec(name='upload')], 265s tags={'importer/upload/1-1': Placeholder('upload')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('upload'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('upload'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 6) No import tag and an existing upload tag with a different Git tree 265s # - Create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='upload', 265s mutate='The upload tag contents', 265s ), 265s ], 265s tags={'importer/upload/1-1': Placeholder('upload')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='publish', 265s message='Test commit (new)', 265s ), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('publish'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('publish'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 7) No import tags or upload tags 265s # - Create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo(), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='publish', 265s message='Test commit (new)', 265s ), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('publish'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('publish'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1' 265s ], 265s # reuse: 265s False, 265s ), 265s ] 265s ) 265s @patch('gitubuntu.importer.get_import_tag_msg') 265s @patch('gitubuntu.importer.get_import_commit_msg') 265s def test_import_unapplied_spi_tags( 265s get_import_commit_msg_mock, 265s get_import_tag_msg_mock, 265s repo, 265s input_repo, 265s expected_output_refs, 265s validation_repo_delta, 265s validation_repo_expected_identical_refs, 265s reuse, 265s ): 265s """Test that unapplied tags are correctly created, adjusted and/or reused 265s 265s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 265s that determines the commit message to use for a given import 265s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 265s that determines the tag message to use for a given import 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param list(str) expected_output_refs: refs that must exist in the output 265s repository 265s :param dict validation_repo_delta: how to transform the input 265s repository into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_identical_refs: refs that must be 265s identical between the validation repository and the output repository 265s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 265s one supplied by the input repository (assumed to have a commit message 265s of "Test commit") and not one created by the importer in this run 265s (arranged by this test to have a different commit message) 265s 265s The input repository data is written into the output repository and then a 265s fake non-native source package publication of version 1-1 in the Trusty 265s release pocket is imported into it by calling import_unapplied_spi() 265s directly. expected_output_refs, validation_repo_expected_identical_refs and 265s reuse are then asserted. It is further asserted that no other refs exist in 265s the output repository except for those listed in expected_output_refs and 265s validation_repo_expected_identical_refs. 265s """ 265s # Match the repo_builder objects 265s get_import_tag_msg_mock.return_value = 'Test tag' 265s # Importantly, the following commit message must not be the same as the 265s # commit messages used by the test input repository commits, so that we can 265s # later detect the difference between commits that were already there and 265s # new commits created by the importer for the purposes of asserting the 265s # reuse parameter correctly. 265s get_import_commit_msg_mock.return_value = b'Test commit (new)' 265s 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_tag_test.py:463: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp8fdk69k9/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_import_unapplied_spi_tags[input_repo1-expected_output_refs1-validation_repo_delta1-validation_repo_expected_identical_refs1-True] _ 265s 265s get_import_commit_msg_mock = 265s get_import_tag_msg_mock = 265s repo = 265s input_repo = 265s 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'] 265s validation_repo_delta = {'update_branches': {'importer/ubuntu/trusty': }} 265s 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'] 265s reuse = True 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'expected_output_refs', 265s 'validation_repo_delta', 265s 'validation_repo_expected_identical_refs', 265s 'reuse', 265s ], 265s [ 265s # 1) An existing import tag (or reimport tag) with the same Git tree 265s # - Reuse import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[Commit.from_spec(name='import')], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('import'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s ], 265s # reuse: 265s True, 265s ), 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='import tag contents', 265s ), 265s Commit.from_spec(name='reimport'), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 2) An existing import tag with a different Git tree and an existing 265s # upload tag with the same Git tree 265s # - Reuse upload tag, create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s Commit.from_spec(name='upload'), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-1': Placeholder('upload'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('upload'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('upload'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 3) An existing import tag with a different Git tree and an existing 265s # upload tag with a different Git tree 265s # - Create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s Commit.from_spec( 265s name='upload', 265s mutate='The upload tag contents', 265s ), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-1': Placeholder('upload'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [Commit.from_spec( 265s name='reimport', 265s message='Test commit (new)', 265s )], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 4) An existing import tag with a different Git tree and no upload tag 265s # - Create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [Commit.from_spec( 265s name='reimport', 265s message='Test commit (new)', 265s )], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 5) No import tag and an existing upload tag with the same Git tree 265s # - Reuse upload tag, create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[Commit.from_spec(name='upload')], 265s tags={'importer/upload/1-1': Placeholder('upload')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('upload'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('upload'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 6) No import tag and an existing upload tag with a different Git tree 265s # - Create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='upload', 265s mutate='The upload tag contents', 265s ), 265s ], 265s tags={'importer/upload/1-1': Placeholder('upload')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='publish', 265s message='Test commit (new)', 265s ), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('publish'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('publish'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 7) No import tags or upload tags 265s # - Create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo(), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='publish', 265s message='Test commit (new)', 265s ), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('publish'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('publish'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1' 265s ], 265s # reuse: 265s False, 265s ), 265s ] 265s ) 265s @patch('gitubuntu.importer.get_import_tag_msg') 265s @patch('gitubuntu.importer.get_import_commit_msg') 265s def test_import_unapplied_spi_tags( 265s get_import_commit_msg_mock, 265s get_import_tag_msg_mock, 265s repo, 265s input_repo, 265s expected_output_refs, 265s validation_repo_delta, 265s validation_repo_expected_identical_refs, 265s reuse, 265s ): 265s """Test that unapplied tags are correctly created, adjusted and/or reused 265s 265s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 265s that determines the commit message to use for a given import 265s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 265s that determines the tag message to use for a given import 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param list(str) expected_output_refs: refs that must exist in the output 265s repository 265s :param dict validation_repo_delta: how to transform the input 265s repository into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_identical_refs: refs that must be 265s identical between the validation repository and the output repository 265s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 265s one supplied by the input repository (assumed to have a commit message 265s of "Test commit") and not one created by the importer in this run 265s (arranged by this test to have a different commit message) 265s 265s The input repository data is written into the output repository and then a 265s fake non-native source package publication of version 1-1 in the Trusty 265s release pocket is imported into it by calling import_unapplied_spi() 265s directly. expected_output_refs, validation_repo_expected_identical_refs and 265s reuse are then asserted. It is further asserted that no other refs exist in 265s the output repository except for those listed in expected_output_refs and 265s validation_repo_expected_identical_refs. 265s """ 265s # Match the repo_builder objects 265s get_import_tag_msg_mock.return_value = 'Test tag' 265s # Importantly, the following commit message must not be the same as the 265s # commit messages used by the test input repository commits, so that we can 265s # later detect the difference between commits that were already there and 265s # new commits created by the importer for the purposes of asserting the 265s # reuse parameter correctly. 265s get_import_commit_msg_mock.return_value = b'Test commit (new)' 265s 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_tag_test.py:463: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp2nb8cl_h/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_import_unapplied_spi_tags[input_repo2-expected_output_refs2-validation_repo_delta2-validation_repo_expected_identical_refs2-True] _ 265s 265s get_import_commit_msg_mock = 265s get_import_tag_msg_mock = 265s repo = 265s input_repo = 265s 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'] 265s validation_repo_delta = {'update_branches': {'importer/ubuntu/trusty': }, 'update_...ect at 0x3ffb6ca3560>, 'importer/reimport/import/1-1/1': }} 265s 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'] 265s reuse = True 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'expected_output_refs', 265s 'validation_repo_delta', 265s 'validation_repo_expected_identical_refs', 265s 'reuse', 265s ], 265s [ 265s # 1) An existing import tag (or reimport tag) with the same Git tree 265s # - Reuse import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[Commit.from_spec(name='import')], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('import'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s ], 265s # reuse: 265s True, 265s ), 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='import tag contents', 265s ), 265s Commit.from_spec(name='reimport'), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 2) An existing import tag with a different Git tree and an existing 265s # upload tag with the same Git tree 265s # - Reuse upload tag, create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s Commit.from_spec(name='upload'), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-1': Placeholder('upload'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('upload'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('upload'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 3) An existing import tag with a different Git tree and an existing 265s # upload tag with a different Git tree 265s # - Create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s Commit.from_spec( 265s name='upload', 265s mutate='The upload tag contents', 265s ), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-1': Placeholder('upload'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [Commit.from_spec( 265s name='reimport', 265s message='Test commit (new)', 265s )], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 4) An existing import tag with a different Git tree and no upload tag 265s # - Create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [Commit.from_spec( 265s name='reimport', 265s message='Test commit (new)', 265s )], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 5) No import tag and an existing upload tag with the same Git tree 265s # - Reuse upload tag, create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[Commit.from_spec(name='upload')], 265s tags={'importer/upload/1-1': Placeholder('upload')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('upload'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('upload'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 6) No import tag and an existing upload tag with a different Git tree 265s # - Create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='upload', 265s mutate='The upload tag contents', 265s ), 265s ], 265s tags={'importer/upload/1-1': Placeholder('upload')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='publish', 265s message='Test commit (new)', 265s ), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('publish'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('publish'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 7) No import tags or upload tags 265s # - Create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo(), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='publish', 265s message='Test commit (new)', 265s ), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('publish'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('publish'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1' 265s ], 265s # reuse: 265s False, 265s ), 265s ] 265s ) 265s @patch('gitubuntu.importer.get_import_tag_msg') 265s @patch('gitubuntu.importer.get_import_commit_msg') 265s def test_import_unapplied_spi_tags( 265s get_import_commit_msg_mock, 265s get_import_tag_msg_mock, 265s repo, 265s input_repo, 265s expected_output_refs, 265s validation_repo_delta, 265s validation_repo_expected_identical_refs, 265s reuse, 265s ): 265s """Test that unapplied tags are correctly created, adjusted and/or reused 265s 265s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 265s that determines the commit message to use for a given import 265s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 265s that determines the tag message to use for a given import 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param list(str) expected_output_refs: refs that must exist in the output 265s repository 265s :param dict validation_repo_delta: how to transform the input 265s repository into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_identical_refs: refs that must be 265s identical between the validation repository and the output repository 265s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 265s one supplied by the input repository (assumed to have a commit message 265s of "Test commit") and not one created by the importer in this run 265s (arranged by this test to have a different commit message) 265s 265s The input repository data is written into the output repository and then a 265s fake non-native source package publication of version 1-1 in the Trusty 265s release pocket is imported into it by calling import_unapplied_spi() 265s directly. expected_output_refs, validation_repo_expected_identical_refs and 265s reuse are then asserted. It is further asserted that no other refs exist in 265s the output repository except for those listed in expected_output_refs and 265s validation_repo_expected_identical_refs. 265s """ 265s # Match the repo_builder objects 265s get_import_tag_msg_mock.return_value = 'Test tag' 265s # Importantly, the following commit message must not be the same as the 265s # commit messages used by the test input repository commits, so that we can 265s # later detect the difference between commits that were already there and 265s # new commits created by the importer for the purposes of asserting the 265s # reuse parameter correctly. 265s get_import_commit_msg_mock.return_value = b'Test commit (new)' 265s 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_tag_test.py:463: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmps6qo0j19/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_import_unapplied_spi_tags[input_repo3-expected_output_refs3-validation_repo_delta3-validation_repo_expected_identical_refs3-False] _ 265s 265s get_import_commit_msg_mock = 265s get_import_tag_msg_mock = 265s repo = 265s input_repo = 265s 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'] 265s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/ubuntu/trusty...ect at 0x3ffb6ca3bf0>, 'importer/reimport/import/1-1/1': }} 265s 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'] 265s reuse = False 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'expected_output_refs', 265s 'validation_repo_delta', 265s 'validation_repo_expected_identical_refs', 265s 'reuse', 265s ], 265s [ 265s # 1) An existing import tag (or reimport tag) with the same Git tree 265s # - Reuse import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[Commit.from_spec(name='import')], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('import'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s ], 265s # reuse: 265s True, 265s ), 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='import tag contents', 265s ), 265s Commit.from_spec(name='reimport'), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 2) An existing import tag with a different Git tree and an existing 265s # upload tag with the same Git tree 265s # - Reuse upload tag, create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s Commit.from_spec(name='upload'), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-1': Placeholder('upload'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('upload'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('upload'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 3) An existing import tag with a different Git tree and an existing 265s # upload tag with a different Git tree 265s # - Create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s Commit.from_spec( 265s name='upload', 265s mutate='The upload tag contents', 265s ), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-1': Placeholder('upload'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [Commit.from_spec( 265s name='reimport', 265s message='Test commit (new)', 265s )], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 4) An existing import tag with a different Git tree and no upload tag 265s # - Create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [Commit.from_spec( 265s name='reimport', 265s message='Test commit (new)', 265s )], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 5) No import tag and an existing upload tag with the same Git tree 265s # - Reuse upload tag, create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[Commit.from_spec(name='upload')], 265s tags={'importer/upload/1-1': Placeholder('upload')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('upload'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('upload'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 6) No import tag and an existing upload tag with a different Git tree 265s # - Create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='upload', 265s mutate='The upload tag contents', 265s ), 265s ], 265s tags={'importer/upload/1-1': Placeholder('upload')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='publish', 265s message='Test commit (new)', 265s ), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('publish'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('publish'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 7) No import tags or upload tags 265s # - Create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo(), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='publish', 265s message='Test commit (new)', 265s ), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('publish'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('publish'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1' 265s ], 265s # reuse: 265s False, 265s ), 265s ] 265s ) 265s @patch('gitubuntu.importer.get_import_tag_msg') 265s @patch('gitubuntu.importer.get_import_commit_msg') 265s def test_import_unapplied_spi_tags( 265s get_import_commit_msg_mock, 265s get_import_tag_msg_mock, 265s repo, 265s input_repo, 265s expected_output_refs, 265s validation_repo_delta, 265s validation_repo_expected_identical_refs, 265s reuse, 265s ): 265s """Test that unapplied tags are correctly created, adjusted and/or reused 265s 265s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 265s that determines the commit message to use for a given import 265s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 265s that determines the tag message to use for a given import 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param list(str) expected_output_refs: refs that must exist in the output 265s repository 265s :param dict validation_repo_delta: how to transform the input 265s repository into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_identical_refs: refs that must be 265s identical between the validation repository and the output repository 265s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 265s one supplied by the input repository (assumed to have a commit message 265s of "Test commit") and not one created by the importer in this run 265s (arranged by this test to have a different commit message) 265s 265s The input repository data is written into the output repository and then a 265s fake non-native source package publication of version 1-1 in the Trusty 265s release pocket is imported into it by calling import_unapplied_spi() 265s directly. expected_output_refs, validation_repo_expected_identical_refs and 265s reuse are then asserted. It is further asserted that no other refs exist in 265s the output repository except for those listed in expected_output_refs and 265s validation_repo_expected_identical_refs. 265s """ 265s # Match the repo_builder objects 265s get_import_tag_msg_mock.return_value = 'Test tag' 265s # Importantly, the following commit message must not be the same as the 265s # commit messages used by the test input repository commits, so that we can 265s # later detect the difference between commits that were already there and 265s # new commits created by the importer for the purposes of asserting the 265s # reuse parameter correctly. 265s get_import_commit_msg_mock.return_value = b'Test commit (new)' 265s 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_tag_test.py:463: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpk1uivdjj/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_import_unapplied_spi_tags[input_repo4-expected_output_refs4-validation_repo_delta4-validation_repo_expected_identical_refs4-False] _ 265s 265s get_import_commit_msg_mock = 265s get_import_tag_msg_mock = 265s repo = 265s input_repo = 265s 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'] 265s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/ubuntu/trusty...ect at 0x3ffb6c9cb60>, 'importer/reimport/import/1-1/1': }} 265s 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'] 265s reuse = False 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'expected_output_refs', 265s 'validation_repo_delta', 265s 'validation_repo_expected_identical_refs', 265s 'reuse', 265s ], 265s [ 265s # 1) An existing import tag (or reimport tag) with the same Git tree 265s # - Reuse import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[Commit.from_spec(name='import')], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('import'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s ], 265s # reuse: 265s True, 265s ), 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='import tag contents', 265s ), 265s Commit.from_spec(name='reimport'), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 2) An existing import tag with a different Git tree and an existing 265s # upload tag with the same Git tree 265s # - Reuse upload tag, create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s Commit.from_spec(name='upload'), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-1': Placeholder('upload'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('upload'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('upload'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 3) An existing import tag with a different Git tree and an existing 265s # upload tag with a different Git tree 265s # - Create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s Commit.from_spec( 265s name='upload', 265s mutate='The upload tag contents', 265s ), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-1': Placeholder('upload'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [Commit.from_spec( 265s name='reimport', 265s message='Test commit (new)', 265s )], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 4) An existing import tag with a different Git tree and no upload tag 265s # - Create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [Commit.from_spec( 265s name='reimport', 265s message='Test commit (new)', 265s )], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 5) No import tag and an existing upload tag with the same Git tree 265s # - Reuse upload tag, create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[Commit.from_spec(name='upload')], 265s tags={'importer/upload/1-1': Placeholder('upload')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('upload'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('upload'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 6) No import tag and an existing upload tag with a different Git tree 265s # - Create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='upload', 265s mutate='The upload tag contents', 265s ), 265s ], 265s tags={'importer/upload/1-1': Placeholder('upload')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='publish', 265s message='Test commit (new)', 265s ), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('publish'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('publish'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 7) No import tags or upload tags 265s # - Create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo(), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='publish', 265s message='Test commit (new)', 265s ), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('publish'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('publish'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1' 265s ], 265s # reuse: 265s False, 265s ), 265s ] 265s ) 265s @patch('gitubuntu.importer.get_import_tag_msg') 265s @patch('gitubuntu.importer.get_import_commit_msg') 265s def test_import_unapplied_spi_tags( 265s get_import_commit_msg_mock, 265s get_import_tag_msg_mock, 265s repo, 265s input_repo, 265s expected_output_refs, 265s validation_repo_delta, 265s validation_repo_expected_identical_refs, 265s reuse, 265s ): 265s """Test that unapplied tags are correctly created, adjusted and/or reused 265s 265s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 265s that determines the commit message to use for a given import 265s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 265s that determines the tag message to use for a given import 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param list(str) expected_output_refs: refs that must exist in the output 265s repository 265s :param dict validation_repo_delta: how to transform the input 265s repository into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_identical_refs: refs that must be 265s identical between the validation repository and the output repository 265s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 265s one supplied by the input repository (assumed to have a commit message 265s of "Test commit") and not one created by the importer in this run 265s (arranged by this test to have a different commit message) 265s 265s The input repository data is written into the output repository and then a 265s fake non-native source package publication of version 1-1 in the Trusty 265s release pocket is imported into it by calling import_unapplied_spi() 265s directly. expected_output_refs, validation_repo_expected_identical_refs and 265s reuse are then asserted. It is further asserted that no other refs exist in 265s the output repository except for those listed in expected_output_refs and 265s validation_repo_expected_identical_refs. 265s """ 265s # Match the repo_builder objects 265s get_import_tag_msg_mock.return_value = 'Test tag' 265s # Importantly, the following commit message must not be the same as the 265s # commit messages used by the test input repository commits, so that we can 265s # later detect the difference between commits that were already there and 265s # new commits created by the importer for the purposes of asserting the 265s # reuse parameter correctly. 265s get_import_commit_msg_mock.return_value = b'Test commit (new)' 265s 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_tag_test.py:463: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpetaka11h/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_import_unapplied_spi_tags[input_repo5-expected_output_refs5-validation_repo_delta5-validation_repo_expected_identical_refs5-True] _ 265s 265s get_import_commit_msg_mock = 265s get_import_tag_msg_mock = 265s repo = 265s input_repo = 265s 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'] 265s validation_repo_delta = {'update_branches': {'importer/ubuntu/trusty': }, 'update_tags': {'importer/import/1-1': }} 265s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1', 'refs/tags/importer/upload/1-1'] 265s reuse = True 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'expected_output_refs', 265s 'validation_repo_delta', 265s 'validation_repo_expected_identical_refs', 265s 'reuse', 265s ], 265s [ 265s # 1) An existing import tag (or reimport tag) with the same Git tree 265s # - Reuse import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[Commit.from_spec(name='import')], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('import'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s ], 265s # reuse: 265s True, 265s ), 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='import tag contents', 265s ), 265s Commit.from_spec(name='reimport'), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 2) An existing import tag with a different Git tree and an existing 265s # upload tag with the same Git tree 265s # - Reuse upload tag, create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s Commit.from_spec(name='upload'), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-1': Placeholder('upload'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('upload'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('upload'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 3) An existing import tag with a different Git tree and an existing 265s # upload tag with a different Git tree 265s # - Create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s Commit.from_spec( 265s name='upload', 265s mutate='The upload tag contents', 265s ), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-1': Placeholder('upload'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [Commit.from_spec( 265s name='reimport', 265s message='Test commit (new)', 265s )], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 4) An existing import tag with a different Git tree and no upload tag 265s # - Create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [Commit.from_spec( 265s name='reimport', 265s message='Test commit (new)', 265s )], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 5) No import tag and an existing upload tag with the same Git tree 265s # - Reuse upload tag, create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[Commit.from_spec(name='upload')], 265s tags={'importer/upload/1-1': Placeholder('upload')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('upload'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('upload'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 6) No import tag and an existing upload tag with a different Git tree 265s # - Create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='upload', 265s mutate='The upload tag contents', 265s ), 265s ], 265s tags={'importer/upload/1-1': Placeholder('upload')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='publish', 265s message='Test commit (new)', 265s ), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('publish'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('publish'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 7) No import tags or upload tags 265s # - Create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo(), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='publish', 265s message='Test commit (new)', 265s ), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('publish'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('publish'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1' 265s ], 265s # reuse: 265s False, 265s ), 265s ] 265s ) 265s @patch('gitubuntu.importer.get_import_tag_msg') 265s @patch('gitubuntu.importer.get_import_commit_msg') 265s def test_import_unapplied_spi_tags( 265s get_import_commit_msg_mock, 265s get_import_tag_msg_mock, 265s repo, 265s input_repo, 265s expected_output_refs, 265s validation_repo_delta, 265s validation_repo_expected_identical_refs, 265s reuse, 265s ): 265s """Test that unapplied tags are correctly created, adjusted and/or reused 265s 265s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 265s that determines the commit message to use for a given import 265s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 265s that determines the tag message to use for a given import 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param list(str) expected_output_refs: refs that must exist in the output 265s repository 265s :param dict validation_repo_delta: how to transform the input 265s repository into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_identical_refs: refs that must be 265s identical between the validation repository and the output repository 265s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 265s one supplied by the input repository (assumed to have a commit message 265s of "Test commit") and not one created by the importer in this run 265s (arranged by this test to have a different commit message) 265s 265s The input repository data is written into the output repository and then a 265s fake non-native source package publication of version 1-1 in the Trusty 265s release pocket is imported into it by calling import_unapplied_spi() 265s directly. expected_output_refs, validation_repo_expected_identical_refs and 265s reuse are then asserted. It is further asserted that no other refs exist in 265s the output repository except for those listed in expected_output_refs and 265s validation_repo_expected_identical_refs. 265s """ 265s # Match the repo_builder objects 265s get_import_tag_msg_mock.return_value = 'Test tag' 265s # Importantly, the following commit message must not be the same as the 265s # commit messages used by the test input repository commits, so that we can 265s # later detect the difference between commits that were already there and 265s # new commits created by the importer for the purposes of asserting the 265s # reuse parameter correctly. 265s get_import_commit_msg_mock.return_value = b'Test commit (new)' 265s 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_tag_test.py:463: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp2zi5nfn3/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_import_unapplied_spi_tags[input_repo6-expected_output_refs6-validation_repo_delta6-validation_repo_expected_identical_refs6-False] _ 265s 265s get_import_commit_msg_mock = 265s get_import_tag_msg_mock = 265s repo = 265s input_repo = 265s 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'] 265s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/ubuntu/trusty... 0x3ffb6c9c530>}, 'update_tags': {'importer/import/1-1': }} 265s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1', 'refs/tags/importer/upload/1-1'] 265s reuse = False 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'expected_output_refs', 265s 'validation_repo_delta', 265s 'validation_repo_expected_identical_refs', 265s 'reuse', 265s ], 265s [ 265s # 1) An existing import tag (or reimport tag) with the same Git tree 265s # - Reuse import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[Commit.from_spec(name='import')], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('import'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s ], 265s # reuse: 265s True, 265s ), 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='import tag contents', 265s ), 265s Commit.from_spec(name='reimport'), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 2) An existing import tag with a different Git tree and an existing 265s # upload tag with the same Git tree 265s # - Reuse upload tag, create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s Commit.from_spec(name='upload'), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-1': Placeholder('upload'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('upload'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('upload'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 3) An existing import tag with a different Git tree and an existing 265s # upload tag with a different Git tree 265s # - Create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s Commit.from_spec( 265s name='upload', 265s mutate='The upload tag contents', 265s ), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-1': Placeholder('upload'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [Commit.from_spec( 265s name='reimport', 265s message='Test commit (new)', 265s )], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 4) An existing import tag with a different Git tree and no upload tag 265s # - Create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [Commit.from_spec( 265s name='reimport', 265s message='Test commit (new)', 265s )], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 5) No import tag and an existing upload tag with the same Git tree 265s # - Reuse upload tag, create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[Commit.from_spec(name='upload')], 265s tags={'importer/upload/1-1': Placeholder('upload')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('upload'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('upload'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 6) No import tag and an existing upload tag with a different Git tree 265s # - Create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='upload', 265s mutate='The upload tag contents', 265s ), 265s ], 265s tags={'importer/upload/1-1': Placeholder('upload')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='publish', 265s message='Test commit (new)', 265s ), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('publish'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('publish'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 7) No import tags or upload tags 265s # - Create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo(), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='publish', 265s message='Test commit (new)', 265s ), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('publish'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('publish'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1' 265s ], 265s # reuse: 265s False, 265s ), 265s ] 265s ) 265s @patch('gitubuntu.importer.get_import_tag_msg') 265s @patch('gitubuntu.importer.get_import_commit_msg') 265s def test_import_unapplied_spi_tags( 265s get_import_commit_msg_mock, 265s get_import_tag_msg_mock, 265s repo, 265s input_repo, 265s expected_output_refs, 265s validation_repo_delta, 265s validation_repo_expected_identical_refs, 265s reuse, 265s ): 265s """Test that unapplied tags are correctly created, adjusted and/or reused 265s 265s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 265s that determines the commit message to use for a given import 265s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 265s that determines the tag message to use for a given import 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param list(str) expected_output_refs: refs that must exist in the output 265s repository 265s :param dict validation_repo_delta: how to transform the input 265s repository into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_identical_refs: refs that must be 265s identical between the validation repository and the output repository 265s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 265s one supplied by the input repository (assumed to have a commit message 265s of "Test commit") and not one created by the importer in this run 265s (arranged by this test to have a different commit message) 265s 265s The input repository data is written into the output repository and then a 265s fake non-native source package publication of version 1-1 in the Trusty 265s release pocket is imported into it by calling import_unapplied_spi() 265s directly. expected_output_refs, validation_repo_expected_identical_refs and 265s reuse are then asserted. It is further asserted that no other refs exist in 265s the output repository except for those listed in expected_output_refs and 265s validation_repo_expected_identical_refs. 265s """ 265s # Match the repo_builder objects 265s get_import_tag_msg_mock.return_value = 'Test tag' 265s # Importantly, the following commit message must not be the same as the 265s # commit messages used by the test input repository commits, so that we can 265s # later detect the difference between commits that were already there and 265s # new commits created by the importer for the purposes of asserting the 265s # reuse parameter correctly. 265s get_import_commit_msg_mock.return_value = b'Test commit (new)' 265s 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_tag_test.py:463: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpjl7y2bdj/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_import_unapplied_spi_tags[input_repo7-expected_output_refs7-validation_repo_delta7-validation_repo_expected_identical_refs7-False] _ 265s 265s get_import_commit_msg_mock = 265s get_import_tag_msg_mock = 265s repo = 265s input_repo = 265s 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'] 265s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/ubuntu/trusty... 0x3ffb6c9c830>}, 'update_tags': {'importer/import/1-1': }} 265s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1'] 265s reuse = False 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'expected_output_refs', 265s 'validation_repo_delta', 265s 'validation_repo_expected_identical_refs', 265s 'reuse', 265s ], 265s [ 265s # 1) An existing import tag (or reimport tag) with the same Git tree 265s # - Reuse import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[Commit.from_spec(name='import')], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('import'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s ], 265s # reuse: 265s True, 265s ), 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='import tag contents', 265s ), 265s Commit.from_spec(name='reimport'), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 2) An existing import tag with a different Git tree and an existing 265s # upload tag with the same Git tree 265s # - Reuse upload tag, create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s Commit.from_spec(name='upload'), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-1': Placeholder('upload'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('upload'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('upload'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 3) An existing import tag with a different Git tree and an existing 265s # upload tag with a different Git tree 265s # - Create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s Commit.from_spec( 265s name='upload', 265s mutate='The upload tag contents', 265s ), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-1': Placeholder('upload'), 265s }, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [Commit.from_spec( 265s name='reimport', 265s message='Test commit (new)', 265s )], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 4) An existing import tag with a different Git tree and no upload tag 265s # - Create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='import', 265s mutate='The import tag contents', 265s ), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 265s }, 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [Commit.from_spec( 265s name='reimport', 265s message='Test commit (new)', 265s )], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('reimport'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty-proposed', 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 5) No import tag and an existing upload tag with the same Git tree 265s # - Reuse upload tag, create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[Commit.from_spec(name='upload')], 265s tags={'importer/upload/1-1': Placeholder('upload')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('upload'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('upload'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 6) No import tag and an existing upload tag with a different Git tree 265s # - Create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='upload', 265s mutate='The upload tag contents', 265s ), 265s ], 265s tags={'importer/upload/1-1': Placeholder('upload')}, 265s ), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='publish', 265s message='Test commit (new)', 265s ), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('publish'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('publish'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/upload/1-1', 265s ], 265s # reuse: 265s False, 265s ), 265s 265s # 7) No import tags or upload tags 265s # - Create import tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo(), 265s # expected_output_refs: 265s [ 265s 'refs/heads/do-not-push', 265s 'refs/tags/importer/upstream/ubuntu/1.gz', 265s 'refs/heads/importer/importer/ubuntu/dsc', 265s 'refs/heads/importer/importer/ubuntu/pristine-tar', 265s 'refs/notes/importer/changelog', 265s 'refs/notes/importer/importer', 265s ], 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='publish', 265s message='Test commit (new)', 265s ), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('publish'), 265s }, 265s 'update_branches': { 265s 'importer/ubuntu/trusty': Placeholder('publish'), 265s }, 265s }, 265s # validation_repo_expected_identical_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1' 265s ], 265s # reuse: 265s False, 265s ), 265s ] 265s ) 265s @patch('gitubuntu.importer.get_import_tag_msg') 265s @patch('gitubuntu.importer.get_import_commit_msg') 265s def test_import_unapplied_spi_tags( 265s get_import_commit_msg_mock, 265s get_import_tag_msg_mock, 265s repo, 265s input_repo, 265s expected_output_refs, 265s validation_repo_delta, 265s validation_repo_expected_identical_refs, 265s reuse, 265s ): 265s """Test that unapplied tags are correctly created, adjusted and/or reused 265s 265s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 265s that determines the commit message to use for a given import 265s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 265s that determines the tag message to use for a given import 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param list(str) expected_output_refs: refs that must exist in the output 265s repository 265s :param dict validation_repo_delta: how to transform the input 265s repository into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_identical_refs: refs that must be 265s identical between the validation repository and the output repository 265s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 265s one supplied by the input repository (assumed to have a commit message 265s of "Test commit") and not one created by the importer in this run 265s (arranged by this test to have a different commit message) 265s 265s The input repository data is written into the output repository and then a 265s fake non-native source package publication of version 1-1 in the Trusty 265s release pocket is imported into it by calling import_unapplied_spi() 265s directly. expected_output_refs, validation_repo_expected_identical_refs and 265s reuse are then asserted. It is further asserted that no other refs exist in 265s the output repository except for those listed in expected_output_refs and 265s validation_repo_expected_identical_refs. 265s """ 265s # Match the repo_builder objects 265s get_import_tag_msg_mock.return_value = 'Test tag' 265s # Importantly, the following commit message must not be the same as the 265s # commit messages used by the test input repository commits, so that we can 265s # later detect the difference between commits that were already there and 265s # new commits created by the importer for the purposes of asserting the 265s # reuse parameter correctly. 265s get_import_commit_msg_mock.return_value = b'Test commit (new)' 265s 265s input_repo.write(repo.raw_repo) 265s 265s publish_spec = source_builder.SourceSpec( 265s version='1-1', 265s native=False, 265s ) 265s 265s with source_builder.Source(publish_spec) as dsc_path: 265s > target.import_unapplied_spi( 265s repo=repo, 265s spi=MockSPI(dsc_path, publish_spec.version), 265s namespace='importer', 265s skip_orig=False, 265s parent_overrides={}, 265s ) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_tag_test.py:471: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:2308: in import_unapplied_spi 265s import_unapplied_dsc( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 265s commit, tag = find_or_create_unapplied_commit( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 265s changelog_parents = get_unapplied_import_parents( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 265s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 265s changelog = self.get_changelog_from_treeish(treeish) 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 265s return Changelog.from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:569: in from_treeish 265s blob = follow_symlinks_to_blob( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpp9dq3gmr/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_import_applied_spi_tags[input_repo0-validation_repo_delta0-validation_repo_expected_treewise_refs0-True] _ 265s 265s get_import_commit_msg_mock = 265s get_import_tag_msg_mock = 265s repo = 265s input_repo = 265s validation_repo_delta = {} 265s 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'] 265s reuse = True 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'validation_repo_delta', 265s 'validation_repo_expected_treewise_refs', 265s 'reuse', 265s ], 265s [ 265s # 1) An existing applied tag (or reimport tag) with the same Git tree 265s # - Reuse applied tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec(name='unapplied', has_patches=True), 265s Commit.from_spec(name='applied', patches_applied=True), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty': Placeholder('unapplied'), 265s 'importer/applied/ubuntu/trusty': Placeholder('applied'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('unapplied'), 265s 'importer/applied/1-1': Placeholder('applied'), 265s }, 265s ), 265s # validation_repo_delta: 265s { 265s # no output repository delta 265s }, 265s # validation_repo_expected_treewise_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/heads/importer/applied/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/applied/1-1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 2) An existing applied tag with a different Git tree 265s # - Create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='unapplied', 265s has_patches=True, 265s mutate='import tag contents', 265s ), 265s Commit.from_spec( 265s name='unapplied_reimport', 265s has_patches=True, 265s ), 265s Commit.from_spec( 265s name='applied', 265s patches_applied=True, 265s mutate='import tag contents', 265s ) 265s ], 265s branches={'importer/ubuntu/trusty': Placeholder('unapplied')}, 265s tags={ 265s 'importer/import/1-1': 265s Placeholder('unapplied'), 265s 'importer/reimport/import/1-1/0': 265s Placeholder('unapplied'), 265s 'importer/reimport/import/1-1/1': 265s Placeholder('unapplied_reimport'), 265s 'importer/applied/1-1': 265s Placeholder('applied'), 265s }, 265s ), 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='applied_reimport', 265s patches_applied=True, 265s parents=[Placeholder('unapplied_reimport')], 265s ), 265s ], 265s 'update_tags': { 265s 'importer/reimport/applied/1-1/0': 265s Placeholder('applied'), 265s 'importer/reimport/applied/1-1/1': 265s Placeholder('applied_reimport'), 265s }, 265s 'update_branches': { 265s 'importer/applied/ubuntu/trusty': 265s Placeholder('applied_reimport'), 265s }, 265s }, 265s # validation_repo_expected_treewise_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/heads/importer/applied/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s 'refs/tags/importer/applied/1-1', 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s ], 265s # reuse: 265s False, 265s 265s marks=pytest.mark.xfail(reason='LP: #1755247'), 265s ), 265s 265s # 3) No applied tags 265s # - Create applied tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[Commit.from_spec(name='unapplied', has_patches=True)], 265s branches={'importer/ubuntu/trusty': Placeholder('unapplied')}, 265s tags={'importer/import/1-1': Placeholder('unapplied')}, 265s ), 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='applied', 265s patches_applied=True, 265s parents=[Placeholder('unapplied')], 265s ), 265s ], 265s 'update_tags': { 265s 'importer/applied/1-1': Placeholder('applied') 265s }, 265s 'update_branches': { 265s 'importer/applied/ubuntu/trusty': Placeholder('applied'), 265s }, 265s }, 265s # validation_repo_expected_treewise_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/heads/importer/applied/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/applied/1-1' 265s ], 265s # reuse: 265s False, 265s ), 265s ] 265s ) 265s @patch('gitubuntu.importer.get_import_tag_msg') 265s @patch('gitubuntu.importer.get_import_commit_msg') 265s def test_import_applied_spi_tags( 265s get_import_commit_msg_mock, 265s get_import_tag_msg_mock, 265s repo, 265s input_repo, 265s validation_repo_delta, 265s validation_repo_expected_treewise_refs, 265s reuse, 265s ): 265s """Test that applied tags are correctly created, adjusted and/or reused 265s 265s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 265s that determines the commit message to use for a given import 265s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 265s that determines the tag message to use for a given import 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param dict validation_repo_delta: how to transform the input repository 265s into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_treewise_refs: refs whose trees 265s must be identical between the validation repository and the output 265s repository 265s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 265s one supplied by the input repository (assumed to have a commit message 265s of "Test commit") and not one created by the importer in this run 265s (arranged by this test to have a different commit message) 265s 265s The input repository data is written into the output repository and then a 265s fake non-native source package publication of version 1-1 in the Trusty 265s release pocket is imported into it by calling import_applied_spi() 265s directly. reuse and validation_repo_expected_treewise_refs are then 265s asserted. 265s 265s This is similar to test_unapplied_spi_tags except that it calls 265s import_applied_spi() instead of import_unapplied_spi() and only treewise 265s ref comparisons are made. 265s """ 265s # Match the repo_builder objects 265s get_import_tag_msg_mock.return_value = 'Test tag' 265s # Importantly, the following commit message must not be the same as the 265s # commit messages used by the test input repository commits, so that we can 265s # later detect the difference between commits that were already there and 265s # new commits created by the importer for the purposes of asserting the 265s # reuse parameter correctly. 265s get_import_commit_msg_mock.return_value = b'Test commit (new)' 265s 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_tag_test.py:711: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp62l6vgia/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: applying a 265s dpkg-source: info: applying b 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: applying a 265s dpkg-source: info: applying b 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: applying a 265s dpkg-source: info: applying b 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: applying a 265s dpkg-source: info: applying b 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: applying a 265s dpkg-source: info: applying b 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_import_applied_spi_tags[input_repo2-validation_repo_delta2-validation_repo_expected_treewise_refs2-False] _ 265s 265s get_import_commit_msg_mock = 265s get_import_tag_msg_mock = 265s repo = 265s input_repo = 265s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/applied/ubunt...0x3ffb6c9dcd0>}, 'update_tags': {'importer/applied/1-1': }} 265s 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'] 265s reuse = False 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'validation_repo_delta', 265s 'validation_repo_expected_treewise_refs', 265s 'reuse', 265s ], 265s [ 265s # 1) An existing applied tag (or reimport tag) with the same Git tree 265s # - Reuse applied tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec(name='unapplied', has_patches=True), 265s Commit.from_spec(name='applied', patches_applied=True), 265s ], 265s branches={ 265s 'importer/ubuntu/trusty': Placeholder('unapplied'), 265s 'importer/applied/ubuntu/trusty': Placeholder('applied'), 265s }, 265s tags={ 265s 'importer/import/1-1': Placeholder('unapplied'), 265s 'importer/applied/1-1': Placeholder('applied'), 265s }, 265s ), 265s # validation_repo_delta: 265s { 265s # no output repository delta 265s }, 265s # validation_repo_expected_treewise_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/heads/importer/applied/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/applied/1-1', 265s ], 265s # reuse: 265s True, 265s ), 265s 265s # 2) An existing applied tag with a different Git tree 265s # - Create reimport tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[ 265s Commit.from_spec( 265s name='unapplied', 265s has_patches=True, 265s mutate='import tag contents', 265s ), 265s Commit.from_spec( 265s name='unapplied_reimport', 265s has_patches=True, 265s ), 265s Commit.from_spec( 265s name='applied', 265s patches_applied=True, 265s mutate='import tag contents', 265s ) 265s ], 265s branches={'importer/ubuntu/trusty': Placeholder('unapplied')}, 265s tags={ 265s 'importer/import/1-1': 265s Placeholder('unapplied'), 265s 'importer/reimport/import/1-1/0': 265s Placeholder('unapplied'), 265s 'importer/reimport/import/1-1/1': 265s Placeholder('unapplied_reimport'), 265s 'importer/applied/1-1': 265s Placeholder('applied'), 265s }, 265s ), 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='applied_reimport', 265s patches_applied=True, 265s parents=[Placeholder('unapplied_reimport')], 265s ), 265s ], 265s 'update_tags': { 265s 'importer/reimport/applied/1-1/0': 265s Placeholder('applied'), 265s 'importer/reimport/applied/1-1/1': 265s Placeholder('applied_reimport'), 265s }, 265s 'update_branches': { 265s 'importer/applied/ubuntu/trusty': 265s Placeholder('applied_reimport'), 265s }, 265s }, 265s # validation_repo_expected_treewise_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/heads/importer/applied/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s 'refs/tags/importer/applied/1-1', 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s ], 265s # reuse: 265s False, 265s 265s marks=pytest.mark.xfail(reason='LP: #1755247'), 265s ), 265s 265s # 3) No applied tags 265s # - Create applied tag 265s pytest.param( 265s # input_repo: 265s repo_builder.Repo( 265s commits=[Commit.from_spec(name='unapplied', has_patches=True)], 265s branches={'importer/ubuntu/trusty': Placeholder('unapplied')}, 265s tags={'importer/import/1-1': Placeholder('unapplied')}, 265s ), 265s # validation_repo_delta: 265s { 265s 'add_commits': [ 265s Commit.from_spec( 265s name='applied', 265s patches_applied=True, 265s parents=[Placeholder('unapplied')], 265s ), 265s ], 265s 'update_tags': { 265s 'importer/applied/1-1': Placeholder('applied') 265s }, 265s 'update_branches': { 265s 'importer/applied/ubuntu/trusty': Placeholder('applied'), 265s }, 265s }, 265s # validation_repo_expected_treewise_refs: 265s [ 265s 'refs/heads/importer/ubuntu/trusty', 265s 'refs/heads/importer/applied/ubuntu/trusty', 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/applied/1-1' 265s ], 265s # reuse: 265s False, 265s ), 265s ] 265s ) 265s @patch('gitubuntu.importer.get_import_tag_msg') 265s @patch('gitubuntu.importer.get_import_commit_msg') 265s def test_import_applied_spi_tags( 265s get_import_commit_msg_mock, 265s get_import_tag_msg_mock, 265s repo, 265s input_repo, 265s validation_repo_delta, 265s validation_repo_expected_treewise_refs, 265s reuse, 265s ): 265s """Test that applied tags are correctly created, adjusted and/or reused 265s 265s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 265s that determines the commit message to use for a given import 265s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 265s that determines the tag message to use for a given import 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param dict validation_repo_delta: how to transform the input repository 265s into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_treewise_refs: refs whose trees 265s must be identical between the validation repository and the output 265s repository 265s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 265s one supplied by the input repository (assumed to have a commit message 265s of "Test commit") and not one created by the importer in this run 265s (arranged by this test to have a different commit message) 265s 265s The input repository data is written into the output repository and then a 265s fake non-native source package publication of version 1-1 in the Trusty 265s release pocket is imported into it by calling import_applied_spi() 265s directly. reuse and validation_repo_expected_treewise_refs are then 265s asserted. 265s 265s This is similar to test_unapplied_spi_tags except that it calls 265s import_applied_spi() instead of import_unapplied_spi() and only treewise 265s ref comparisons are made. 265s """ 265s # Match the repo_builder objects 265s get_import_tag_msg_mock.return_value = 'Test tag' 265s # Importantly, the following commit message must not be the same as the 265s # commit messages used by the test input repository commits, so that we can 265s # later detect the difference between commits that were already there and 265s # new commits created by the importer for the purposes of asserting the 265s # reuse parameter correctly. 265s get_import_commit_msg_mock.return_value = b'Test commit (new)' 265s 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_tag_test.py:711: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpgjtt6m0s/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: applying a 265s dpkg-source: info: applying b 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: applying a 265s dpkg-source: info: applying b 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: applying a 265s dpkg-source: info: applying b 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s __ test_get_existing_import_tags[input_repo1-PatchState.UNAPPLIED-expected1] ___ 265s 265s repo = 265s patch_state = 265s input_repo = 265s expected = ['refs/tags/importer/import/1-1'] 265s 265s @pytest.mark.parametrize( 265s 'input_repo, patch_state, expected', [ 265s ( 265s repo_builder.Repo(), 265s PatchState.UNAPPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s tags={'importer/import/1-1': repo_builder.Commit()}, 265s ), 265s PatchState.UNAPPLIED, 265s ['refs/tags/importer/import/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit(name='import'), 265s repo_builder.Commit(name='reimport1'), 265s ], 265s tags={ 265s 'importer/import/1-1': repo_builder.Commit(), 265s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 265s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 265s }, 265s ), 265s PatchState.UNAPPLIED, 265s [ 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo(), 265s PatchState.APPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s tags={'importer/applied/1-1': repo_builder.Commit()}, 265s ), 265s PatchState.APPLIED, 265s ['refs/tags/importer/applied/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit(name='applied'), 265s repo_builder.Commit(name='reimport1'), 265s ], 265s tags={ 265s 'importer/applied/1-1': repo_builder.Commit(), 265s 'importer/reimport/applied/1-1/0': repo_builder.Commit(), 265s 'importer/reimport/applied/1-1/1': repo_builder.Commit(), 265s }, 265s ), 265s PatchState.APPLIED, 265s [ 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s ], 265s ), 265s ], 265s ) 265s def test_get_existing_import_tags(repo, patch_state, input_repo, expected): 265s """Test that get_existing_import_tags is generally correct 265s 265s This is the general parameterised test for the common case uses of 265s target.get_existing_import_tags. 265s 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param PatchState patch_state: passed through to get_existing_import_tags 265s :param repo_builder.Repo input_repo: input repository data 265s :param list(str) expected: the names of the references that are expected to 265s be returned, in order. 265s """ 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:214: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp9acxmj3k/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s __ test_get_existing_import_tags[input_repo2-PatchState.UNAPPLIED-expected2] ___ 265s 265s repo = 265s patch_state = 265s input_repo = 265s expected = ['refs/tags/importer/reimport/import/1-1/0', 'refs/tags/importer/reimport/import/1-1/1'] 265s 265s @pytest.mark.parametrize( 265s 'input_repo, patch_state, expected', [ 265s ( 265s repo_builder.Repo(), 265s PatchState.UNAPPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s tags={'importer/import/1-1': repo_builder.Commit()}, 265s ), 265s PatchState.UNAPPLIED, 265s ['refs/tags/importer/import/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit(name='import'), 265s repo_builder.Commit(name='reimport1'), 265s ], 265s tags={ 265s 'importer/import/1-1': repo_builder.Commit(), 265s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 265s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 265s }, 265s ), 265s PatchState.UNAPPLIED, 265s [ 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo(), 265s PatchState.APPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s tags={'importer/applied/1-1': repo_builder.Commit()}, 265s ), 265s PatchState.APPLIED, 265s ['refs/tags/importer/applied/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit(name='applied'), 265s repo_builder.Commit(name='reimport1'), 265s ], 265s tags={ 265s 'importer/applied/1-1': repo_builder.Commit(), 265s 'importer/reimport/applied/1-1/0': repo_builder.Commit(), 265s 'importer/reimport/applied/1-1/1': repo_builder.Commit(), 265s }, 265s ), 265s PatchState.APPLIED, 265s [ 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s ], 265s ), 265s ], 265s ) 265s def test_get_existing_import_tags(repo, patch_state, input_repo, expected): 265s """Test that get_existing_import_tags is generally correct 265s 265s This is the general parameterised test for the common case uses of 265s target.get_existing_import_tags. 265s 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param PatchState patch_state: passed through to get_existing_import_tags 265s :param repo_builder.Repo input_repo: input repository data 265s :param list(str) expected: the names of the references that are expected to 265s be returned, in order. 265s """ 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:214: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpz8vpd7kv/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ___ test_get_existing_import_tags[input_repo4-PatchState.APPLIED-expected4] ____ 265s 265s repo = 265s patch_state = 265s input_repo = 265s expected = ['refs/tags/importer/applied/1-1'] 265s 265s @pytest.mark.parametrize( 265s 'input_repo, patch_state, expected', [ 265s ( 265s repo_builder.Repo(), 265s PatchState.UNAPPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s tags={'importer/import/1-1': repo_builder.Commit()}, 265s ), 265s PatchState.UNAPPLIED, 265s ['refs/tags/importer/import/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit(name='import'), 265s repo_builder.Commit(name='reimport1'), 265s ], 265s tags={ 265s 'importer/import/1-1': repo_builder.Commit(), 265s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 265s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 265s }, 265s ), 265s PatchState.UNAPPLIED, 265s [ 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo(), 265s PatchState.APPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s tags={'importer/applied/1-1': repo_builder.Commit()}, 265s ), 265s PatchState.APPLIED, 265s ['refs/tags/importer/applied/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit(name='applied'), 265s repo_builder.Commit(name='reimport1'), 265s ], 265s tags={ 265s 'importer/applied/1-1': repo_builder.Commit(), 265s 'importer/reimport/applied/1-1/0': repo_builder.Commit(), 265s 'importer/reimport/applied/1-1/1': repo_builder.Commit(), 265s }, 265s ), 265s PatchState.APPLIED, 265s [ 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s ], 265s ), 265s ], 265s ) 265s def test_get_existing_import_tags(repo, patch_state, input_repo, expected): 265s """Test that get_existing_import_tags is generally correct 265s 265s This is the general parameterised test for the common case uses of 265s target.get_existing_import_tags. 265s 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param PatchState patch_state: passed through to get_existing_import_tags 265s :param repo_builder.Repo input_repo: input repository data 265s :param list(str) expected: the names of the references that are expected to 265s be returned, in order. 265s """ 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:214: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpuqmcbfgw/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ___ test_get_existing_import_tags[input_repo5-PatchState.APPLIED-expected5] ____ 265s 265s repo = 265s patch_state = 265s input_repo = 265s expected = ['refs/tags/importer/reimport/applied/1-1/0', 'refs/tags/importer/reimport/applied/1-1/1'] 265s 265s @pytest.mark.parametrize( 265s 'input_repo, patch_state, expected', [ 265s ( 265s repo_builder.Repo(), 265s PatchState.UNAPPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s tags={'importer/import/1-1': repo_builder.Commit()}, 265s ), 265s PatchState.UNAPPLIED, 265s ['refs/tags/importer/import/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit(name='import'), 265s repo_builder.Commit(name='reimport1'), 265s ], 265s tags={ 265s 'importer/import/1-1': repo_builder.Commit(), 265s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 265s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 265s }, 265s ), 265s PatchState.UNAPPLIED, 265s [ 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo(), 265s PatchState.APPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s tags={'importer/applied/1-1': repo_builder.Commit()}, 265s ), 265s PatchState.APPLIED, 265s ['refs/tags/importer/applied/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit(name='applied'), 265s repo_builder.Commit(name='reimport1'), 265s ], 265s tags={ 265s 'importer/applied/1-1': repo_builder.Commit(), 265s 'importer/reimport/applied/1-1/0': repo_builder.Commit(), 265s 'importer/reimport/applied/1-1/1': repo_builder.Commit(), 265s }, 265s ), 265s PatchState.APPLIED, 265s [ 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s ], 265s ), 265s ], 265s ) 265s def test_get_existing_import_tags(repo, patch_state, input_repo, expected): 265s """Test that get_existing_import_tags is generally correct 265s 265s This is the general parameterised test for the common case uses of 265s target.get_existing_import_tags. 265s 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param PatchState patch_state: passed through to get_existing_import_tags 265s :param repo_builder.Repo input_repo: input repository data 265s :param list(str) expected: the names of the references that are expected to 265s be returned, in order. 265s """ 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:214: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpg590slyq/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ____________________ test_get_existing_import_tags_ordering ____________________ 265s 265s repo = 265s 265s def test_get_existing_import_tags_ordering(repo): 265s """Test that get_existing_import_tags returns results in the correct order 265s 265s To maintain hash stability, the spec defines that multiple changelog 265s parents must appear in the order that they were published. For this to 265s work, get_existing_import_tags must return the tags in the correct order 265s even if the underlying git repository tags appear in an arbitrary order. 265s 265s :param GitUbuntuRepository repo: fixture of a temporary repository to use 265s """ 265s 265s # Construct a synthetic git repository containing tags 265s repo_builder.Repo( 265s tags={ 265s 'importer/import/1-1': repo_builder.Commit(), 265s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 265s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 265s } 265s > ).write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:240: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpe89_ppky/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s _ test_create_import_tag[input_repo0-validation_repo_delta0-validation_repo_expected_identical_refs0] _ 265s 265s repo = 265s input_repo = 265s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-1': }} 265s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1'] 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'validation_repo_delta', 265s 'validation_repo_expected_identical_refs', 265s ], 265s [ 265s ( 265s repo_builder.Repo(), 265s { 265s 'add_commits': [ 265s repo_builder.Commit(name='import'), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('import'), 265s }, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s { 265s 'add_commits': [ 265s repo_builder.Commit(name='reimport'), 265s ], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit(name='import'), 265s repo_builder.Commit(name='reimport1'), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport1'), 265s }, 265s ), 265s { 265s 'add_commits': [ 265s repo_builder.Commit(name='reimport2'), 265s ], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/2': Placeholder('reimport2'), 265s }, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s 'refs/tags/importer/reimport/import/1-1/2', 265s ], 265s ), 265s ], 265s ) 265s def test_create_import_tag( 265s repo, 265s input_repo, 265s validation_repo_delta, 265s validation_repo_expected_identical_refs, 265s ): 265s """ 265s Unit test that create_import_tag creates the correct import tag 265s 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param dict validation_repo_delta: how to transform the input repository 265s into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_identical_refs: refs that must be 265s identical between the validation repository and the output repository 265s """ 265s publish_commit = repo.raw_repo.get( 265s repo_builder.Commit().write(repo.raw_repo) 265s ).peel(pygit2.Commit) 265s input_repo.write(repo.raw_repo) 265s 265s > target.create_import_tag(repo, publish_commit, '1-1', 'importer') 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:370: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:1379: in create_import_tag 265s repo.create_tag( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s commit_hash = '240dd844a69653244edb52c57c42d709512d64cd' 265s tag_name = 'importer/import/1-1', tag_msg = 'git-ubuntu import' 265s tagger = pygit2.Signature('git-ubuntu importer', 'ubuntu-devel-discuss@lists.ubuntu.com', 0, 0, None) 265s 265s def create_tag(self, 265s commit_hash, 265s tag_name, 265s tag_msg, 265s tagger=None, 265s ): 265s """Create a tag in the repository 265s 265s :param str commit_hash: the commit hash the tag will point to. 265s :param str tag_name: the name of the tag to be created. 265s :param str tag_msg: the text of the tag annotation. 265s :param pygit2.Signature tagger: if supplied, use this signature in the 265s created tag's "tagger" metadata. If not supplied, an arbitrary name 265s and email address is used with the current time. 265s :returns: None 265s """ 265s if not tagger: 265s tagger_time, tagger_offset = datetime_to_signature_spec( 265s datetime.datetime.now(), 265s ) 265s tagger = pygit2.Signature( 265s gitubuntu.spec.SYNTHESIZED_COMMITTER_NAME, 265s gitubuntu.spec.SYNTHESIZED_COMMITTER_EMAIL, 265s tagger_time, 265s tagger_offset, 265s ) 265s 265s logging.debug("Creating tag %s pointing to %s", tag_name, commit_hash) 265s self.raw_repo.create_tag( 265s tag_name, 265s pygit2.Oid(hex=commit_hash), 265s > pygit2.GIT_OBJ_COMMIT, 265s tagger, 265s tag_msg, 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:2114: AttributeError 265s _ test_create_import_tag[input_repo1-validation_repo_delta1-validation_repo_expected_identical_refs1] _ 265s 265s repo = 265s input_repo = 265s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/reimport/import/1...ect at 0x3ffb6ccdfd0>, 'importer/reimport/import/1-1/1': }} 265s 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'] 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'validation_repo_delta', 265s 'validation_repo_expected_identical_refs', 265s ], 265s [ 265s ( 265s repo_builder.Repo(), 265s { 265s 'add_commits': [ 265s repo_builder.Commit(name='import'), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('import'), 265s }, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s { 265s 'add_commits': [ 265s repo_builder.Commit(name='reimport'), 265s ], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit(name='import'), 265s repo_builder.Commit(name='reimport1'), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport1'), 265s }, 265s ), 265s { 265s 'add_commits': [ 265s repo_builder.Commit(name='reimport2'), 265s ], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/2': Placeholder('reimport2'), 265s }, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s 'refs/tags/importer/reimport/import/1-1/2', 265s ], 265s ), 265s ], 265s ) 265s def test_create_import_tag( 265s repo, 265s input_repo, 265s validation_repo_delta, 265s validation_repo_expected_identical_refs, 265s ): 265s """ 265s Unit test that create_import_tag creates the correct import tag 265s 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param dict validation_repo_delta: how to transform the input repository 265s into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_identical_refs: refs that must be 265s identical between the validation repository and the output repository 265s """ 265s publish_commit = repo.raw_repo.get( 265s repo_builder.Commit().write(repo.raw_repo) 265s ).peel(pygit2.Commit) 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:368: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpmd_ur88c/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s _ test_create_import_tag[input_repo2-validation_repo_delta2-validation_repo_expected_identical_refs2] _ 265s 265s repo = 265s input_repo = 265s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/reimport/import/1-1/2': }} 265s 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'] 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'validation_repo_delta', 265s 'validation_repo_expected_identical_refs', 265s ], 265s [ 265s ( 265s repo_builder.Repo(), 265s { 265s 'add_commits': [ 265s repo_builder.Commit(name='import'), 265s ], 265s 'update_tags': { 265s 'importer/import/1-1': Placeholder('import'), 265s }, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s { 265s 'add_commits': [ 265s repo_builder.Commit(name='reimport'), 265s ], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit(name='import'), 265s repo_builder.Commit(name='reimport1'), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport1'), 265s }, 265s ), 265s { 265s 'add_commits': [ 265s repo_builder.Commit(name='reimport2'), 265s ], 265s 'update_tags': { 265s 'importer/reimport/import/1-1/2': Placeholder('reimport2'), 265s }, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s 'refs/tags/importer/reimport/import/1-1/2', 265s ], 265s ), 265s ], 265s ) 265s def test_create_import_tag( 265s repo, 265s input_repo, 265s validation_repo_delta, 265s validation_repo_expected_identical_refs, 265s ): 265s """ 265s Unit test that create_import_tag creates the correct import tag 265s 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param dict validation_repo_delta: how to transform the input repository 265s into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_identical_refs: refs that must be 265s identical between the validation repository and the output repository 265s """ 265s publish_commit = repo.raw_repo.get( 265s repo_builder.Commit().write(repo.raw_repo) 265s ).peel(pygit2.Commit) 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:368: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmptxyp66ha/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ____________ test_create_import_tag_hash_stability_on_first_import _____________ 265s 265s repo = 265s 265s def test_create_import_tag_hash_stability_on_first_import(repo): 265s """Created import tags should be hash stable on first import 265s 265s :param GitUbuntuRepository repo: fixture providing a temporary 265s GitUbuntuRepository instance to use 265s """ 265s publish_commit = repo.raw_repo.get( 265s repo_builder.Commit( 265s author=pygit2.Signature( 265s 'Hash stability test author', 265s 'newauthor@example.com', 265s 1, 265s 2, 265s ), 265s committer=pygit2.Signature( 265s 'Hash stability test committer', 265s 'newcommitter@example.com', 265s 3, 265s 4, 265s ), 265s ).write(repo.raw_repo) 265s ).peel(pygit2.Commit) 265s > target.create_import_tag(repo, publish_commit, '1-1', 'importer') 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:402: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:1379: in create_import_tag 265s repo.create_tag( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s commit_hash = '65729a1dca101328820bf4f49fbca4e9571a772a' 265s tag_name = 'importer/import/1-1', tag_msg = 'git-ubuntu import' 265s tagger = pygit2.Signature('git-ubuntu importer', 'ubuntu-devel-discuss@lists.ubuntu.com', 3, 4, None) 265s 265s def create_tag(self, 265s commit_hash, 265s tag_name, 265s tag_msg, 265s tagger=None, 265s ): 265s """Create a tag in the repository 265s 265s :param str commit_hash: the commit hash the tag will point to. 265s :param str tag_name: the name of the tag to be created. 265s :param str tag_msg: the text of the tag annotation. 265s :param pygit2.Signature tagger: if supplied, use this signature in the 265s created tag's "tagger" metadata. If not supplied, an arbitrary name 265s and email address is used with the current time. 265s :returns: None 265s """ 265s if not tagger: 265s tagger_time, tagger_offset = datetime_to_signature_spec( 265s datetime.datetime.now(), 265s ) 265s tagger = pygit2.Signature( 265s gitubuntu.spec.SYNTHESIZED_COMMITTER_NAME, 265s gitubuntu.spec.SYNTHESIZED_COMMITTER_EMAIL, 265s tagger_time, 265s tagger_offset, 265s ) 265s 265s logging.debug("Creating tag %s pointing to %s", tag_name, commit_hash) 265s self.raw_repo.create_tag( 265s tag_name, 265s pygit2.Oid(hex=commit_hash), 265s > pygit2.GIT_OBJ_COMMIT, 265s tagger, 265s tag_msg, 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:2114: AttributeError 265s ______________ test_create_import_tag_hash_stability_on_reimport _______________ 265s 265s repo = 265s 265s def test_create_import_tag_hash_stability_on_reimport(repo): 265s """Created import tags should be hash stable on reimport 265s 265s This includes both the /0 duplicate reimport tag of the original import tag 265s as well as the /1 reimport tag being created. 265s 265s :param GitUbuntuRepository repo: fixture providing a temporary 265s GitUbuntuRepository instance to use 265s """ 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit( 265s name='root', 265s author=pygit2.Signature( 265s 'Hash stability test author', 265s 'author@example.com', 265s 1, 265s 2, 265s ), 265s committer=pygit2.Signature( 265s 'Hash stability test committer', 265s 'committer@example.com', 265s 3, 265s 4, 265s ), 265s ), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('root'), 265s }, 265s tagger=pygit2.Signature( 265s 'Hash stability test name', 265s 'stability@example.com', 265s 5, 265s 6, 265s ), 265s > ).write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:449: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpdhwozpqn/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s _ test_create_applied_tag[input_repo0-validation_repo_delta0-validation_repo_expected_identical_refs0] _ 265s 265s repo = 265s input_repo = 265s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/applied/1-1': }} 265s validation_repo_expected_identical_refs = ['refs/tags/importer/applied/1-1'] 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'validation_repo_delta', 265s 'validation_repo_expected_identical_refs', 265s ], 265s [ 265s ( 265s repo_builder.Repo(), 265s { 265s 'add_commits': [repo_builder.Commit(name='import')], 265s 'update_tags': {'importer/applied/1-1': Placeholder('import')}, 265s }, 265s [ 265s 'refs/tags/importer/applied/1-1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit(name='import')], 265s tags={'importer/applied/1-1': Placeholder('import')}, 265s ), 265s { 265s 'add_commits': [repo_builder.Commit(name='reimport')], 265s 'update_tags': { 265s 'importer/reimport/applied/1-1/0': Placeholder('import'), 265s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 265s }, 265s }, 265s [ 265s 'refs/tags/importer/applied/1-1', 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit(name='import'), 265s repo_builder.Commit(name='reimport1'), 265s ], 265s tags={ 265s 'importer/applied/1-1': Placeholder('import'), 265s 'importer/reimport/applied/1-1/0': Placeholder('import'), 265s 'importer/reimport/applied/1-1/1': Placeholder('reimport1'), 265s }, 265s ), 265s { 265s 'add_commits': [ 265s repo_builder.Commit(name='reimport2') 265s ], 265s 'update_tags': { 265s 'importer/reimport/applied/1-1/2': Placeholder('reimport2'), 265s }, 265s }, 265s [ 265s 'refs/tags/importer/applied/1-1', 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s 'refs/tags/importer/reimport/applied/1-1/2', 265s ], 265s ), 265s ], 265s ) 265s def test_create_applied_tag( 265s repo, 265s input_repo, 265s validation_repo_delta, 265s validation_repo_expected_identical_refs, 265s ): 265s """ 265s Unit test that create_applied_tag creates the correct import tag 265s 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param dict validation_repo_delta: how to transform the input repository 265s into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_identical_refs: refs that must be 265s identical between the validation repository and the output repository 265s """ 265s publish_commit_str = str( 265s repo.raw_repo.get( 265s repo_builder.Commit().write(repo.raw_repo) 265s ).peel(pygit2.Commit).id 265s ) 265s 265s input_repo.write(repo.raw_repo) 265s 265s > target.create_applied_tag(repo, publish_commit_str, '1-1', 'importer') 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:577: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:1309: in create_applied_tag 265s repo.create_tag( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s commit_hash = '240dd844a69653244edb52c57c42d709512d64cd' 265s tag_name = 'importer/applied/1-1', tag_msg = 'git-ubuntu import' 265s tagger = pygit2.Signature('git-ubuntu importer', 'ubuntu-devel-discuss@lists.ubuntu.com', 1732836076, 0, None) 265s 265s def create_tag(self, 265s commit_hash, 265s tag_name, 265s tag_msg, 265s tagger=None, 265s ): 265s """Create a tag in the repository 265s 265s :param str commit_hash: the commit hash the tag will point to. 265s :param str tag_name: the name of the tag to be created. 265s :param str tag_msg: the text of the tag annotation. 265s :param pygit2.Signature tagger: if supplied, use this signature in the 265s created tag's "tagger" metadata. If not supplied, an arbitrary name 265s and email address is used with the current time. 265s :returns: None 265s """ 265s if not tagger: 265s tagger_time, tagger_offset = datetime_to_signature_spec( 265s datetime.datetime.now(), 265s ) 265s tagger = pygit2.Signature( 265s gitubuntu.spec.SYNTHESIZED_COMMITTER_NAME, 265s gitubuntu.spec.SYNTHESIZED_COMMITTER_EMAIL, 265s tagger_time, 265s tagger_offset, 265s ) 265s 265s logging.debug("Creating tag %s pointing to %s", tag_name, commit_hash) 265s self.raw_repo.create_tag( 265s tag_name, 265s pygit2.Oid(hex=commit_hash), 265s > pygit2.GIT_OBJ_COMMIT, 265s tagger, 265s tag_msg, 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:2114: AttributeError 265s _ test_create_applied_tag[input_repo1-validation_repo_delta1-validation_repo_expected_identical_refs1] _ 265s 265s repo = 265s input_repo = 265s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/reimport/applied/...ct at 0x3ffb6cccf20>, 'importer/reimport/applied/1-1/1': }} 265s 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'] 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'validation_repo_delta', 265s 'validation_repo_expected_identical_refs', 265s ], 265s [ 265s ( 265s repo_builder.Repo(), 265s { 265s 'add_commits': [repo_builder.Commit(name='import')], 265s 'update_tags': {'importer/applied/1-1': Placeholder('import')}, 265s }, 265s [ 265s 'refs/tags/importer/applied/1-1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit(name='import')], 265s tags={'importer/applied/1-1': Placeholder('import')}, 265s ), 265s { 265s 'add_commits': [repo_builder.Commit(name='reimport')], 265s 'update_tags': { 265s 'importer/reimport/applied/1-1/0': Placeholder('import'), 265s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 265s }, 265s }, 265s [ 265s 'refs/tags/importer/applied/1-1', 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit(name='import'), 265s repo_builder.Commit(name='reimport1'), 265s ], 265s tags={ 265s 'importer/applied/1-1': Placeholder('import'), 265s 'importer/reimport/applied/1-1/0': Placeholder('import'), 265s 'importer/reimport/applied/1-1/1': Placeholder('reimport1'), 265s }, 265s ), 265s { 265s 'add_commits': [ 265s repo_builder.Commit(name='reimport2') 265s ], 265s 'update_tags': { 265s 'importer/reimport/applied/1-1/2': Placeholder('reimport2'), 265s }, 265s }, 265s [ 265s 'refs/tags/importer/applied/1-1', 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s 'refs/tags/importer/reimport/applied/1-1/2', 265s ], 265s ), 265s ], 265s ) 265s def test_create_applied_tag( 265s repo, 265s input_repo, 265s validation_repo_delta, 265s validation_repo_expected_identical_refs, 265s ): 265s """ 265s Unit test that create_applied_tag creates the correct import tag 265s 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param dict validation_repo_delta: how to transform the input repository 265s into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_identical_refs: refs that must be 265s identical between the validation repository and the output repository 265s """ 265s publish_commit_str = str( 265s repo.raw_repo.get( 265s repo_builder.Commit().write(repo.raw_repo) 265s ).peel(pygit2.Commit).id 265s ) 265s 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:575: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpi3fabfe9/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s _ test_create_applied_tag[input_repo2-validation_repo_delta2-validation_repo_expected_identical_refs2] _ 265s 265s repo = 265s input_repo = 265s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/reimport/applied/1-1/2': }} 265s 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'] 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'validation_repo_delta', 265s 'validation_repo_expected_identical_refs', 265s ], 265s [ 265s ( 265s repo_builder.Repo(), 265s { 265s 'add_commits': [repo_builder.Commit(name='import')], 265s 'update_tags': {'importer/applied/1-1': Placeholder('import')}, 265s }, 265s [ 265s 'refs/tags/importer/applied/1-1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit(name='import')], 265s tags={'importer/applied/1-1': Placeholder('import')}, 265s ), 265s { 265s 'add_commits': [repo_builder.Commit(name='reimport')], 265s 'update_tags': { 265s 'importer/reimport/applied/1-1/0': Placeholder('import'), 265s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 265s }, 265s }, 265s [ 265s 'refs/tags/importer/applied/1-1', 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit(name='import'), 265s repo_builder.Commit(name='reimport1'), 265s ], 265s tags={ 265s 'importer/applied/1-1': Placeholder('import'), 265s 'importer/reimport/applied/1-1/0': Placeholder('import'), 265s 'importer/reimport/applied/1-1/1': Placeholder('reimport1'), 265s }, 265s ), 265s { 265s 'add_commits': [ 265s repo_builder.Commit(name='reimport2') 265s ], 265s 'update_tags': { 265s 'importer/reimport/applied/1-1/2': Placeholder('reimport2'), 265s }, 265s }, 265s [ 265s 'refs/tags/importer/applied/1-1', 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s 'refs/tags/importer/reimport/applied/1-1/2', 265s ], 265s ), 265s ], 265s ) 265s def test_create_applied_tag( 265s repo, 265s input_repo, 265s validation_repo_delta, 265s validation_repo_expected_identical_refs, 265s ): 265s """ 265s Unit test that create_applied_tag creates the correct import tag 265s 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param dict validation_repo_delta: how to transform the input repository 265s into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_identical_refs: refs that must be 265s identical between the validation repository and the output repository 265s """ 265s publish_commit_str = str( 265s repo.raw_repo.get( 265s repo_builder.Commit().write(repo.raw_repo) 265s ).peel(pygit2.Commit).id 265s ) 265s 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:575: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpv8zmj06n/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s _ test_get_changelog_parent_commits[input_repo1-parent_overrides1-changelog_versions1-PatchState.UNAPPLIED-expected_refs1] _ 265s 265s repo = 265s input_repo = 265s parent_overrides = {}, changelog_versions = ['1-2', '1-1'] 265s patch_state = 265s expected_refs = ['refs/tags/importer/import/1-1'] 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'parent_overrides', 265s 'changelog_versions', 265s 'patch_state', 265s 'expected_refs', 265s ], 265s [ 265s ( 265s repo_builder.Repo(), 265s {}, 265s ['1-2', '1-1',], 265s PatchState.UNAPPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.UNAPPLIED, 265s ['refs/tags/importer/import/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec(name='reimport', mutate=1), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.UNAPPLIED, 265s [ 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s {}, 265s ['1-3', '1-2', '1-1'], 265s PatchState.UNAPPLIED, 265s ['refs/tags/importer/import/1-1'], 265s ), 265s ( 265s repo_builder.Repo(), 265s {}, 265s ['1-2', '1-1',], 265s PatchState.APPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='applied')], 265s tags={'importer/applied/1-1': Placeholder('applied')}, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.APPLIED, 265s ['refs/tags/importer/applied/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec(name='reimport', mutate=1), 265s ], 265s tags={ 265s 'importer/applied/1-1': Placeholder('import'), 265s 'importer/reimport/applied/1-1/0': Placeholder('import'), 265s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.APPLIED, 265s [ 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='applied')], 265s tags={'importer/applied/1-1': Placeholder('applied')}, 265s ), 265s {}, 265s ['1-3', '1-2', '1-1'], 265s PatchState.APPLIED, 265s ['refs/tags/importer/applied/1-1'], 265s ), 265s ], 265s ) 265s def test_get_changelog_parent_commits( 265s repo, 265s input_repo, 265s parent_overrides, 265s changelog_versions, 265s patch_state, 265s expected_refs, 265s ): 265s """Test that get_changelog_parent_commits is generally correct 265s 265s This is the general parameterised test for the common case uses of 265s target.get_changelog_parent_commits. 265s 265s :param GitUbuntuRepository repo: fixture providing a temporary 265s GitUbuntuRepository instance to use 265s :param repo_builder.Repo input_repo: the input repository data to use that 265s will be populated into @repo before @repo is passed through to 265s get_changelog_parent_commits 265s :param dict parent_overrides: passed through to 265s get_changelog_parent_commits. 265s :param PatchState patch_state: passed through to 265s get_changelog_parent_commits 265s :param list(str) expected_refs: the expected return value of 265s get_changelog_parent_commits expressed using a list of reference names. 265s Since get_changelog_parent_commits returns a list of commit hash 265s strings, the reference names will need to be dereferenced before 265s comparison; this way the test parameters don't need to be opaque hash 265s strings. 265s """ 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:721: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp1i1t48wu/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_get_changelog_parent_commits[input_repo2-parent_overrides2-changelog_versions2-PatchState.UNAPPLIED-expected_refs2] _ 265s 265s repo = 265s input_repo = 265s parent_overrides = {}, changelog_versions = ['1-2', '1-1'] 265s patch_state = 265s expected_refs = ['refs/tags/importer/reimport/import/1-1/0', 'refs/tags/importer/reimport/import/1-1/1'] 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'parent_overrides', 265s 'changelog_versions', 265s 'patch_state', 265s 'expected_refs', 265s ], 265s [ 265s ( 265s repo_builder.Repo(), 265s {}, 265s ['1-2', '1-1',], 265s PatchState.UNAPPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.UNAPPLIED, 265s ['refs/tags/importer/import/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec(name='reimport', mutate=1), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.UNAPPLIED, 265s [ 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s {}, 265s ['1-3', '1-2', '1-1'], 265s PatchState.UNAPPLIED, 265s ['refs/tags/importer/import/1-1'], 265s ), 265s ( 265s repo_builder.Repo(), 265s {}, 265s ['1-2', '1-1',], 265s PatchState.APPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='applied')], 265s tags={'importer/applied/1-1': Placeholder('applied')}, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.APPLIED, 265s ['refs/tags/importer/applied/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec(name='reimport', mutate=1), 265s ], 265s tags={ 265s 'importer/applied/1-1': Placeholder('import'), 265s 'importer/reimport/applied/1-1/0': Placeholder('import'), 265s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.APPLIED, 265s [ 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='applied')], 265s tags={'importer/applied/1-1': Placeholder('applied')}, 265s ), 265s {}, 265s ['1-3', '1-2', '1-1'], 265s PatchState.APPLIED, 265s ['refs/tags/importer/applied/1-1'], 265s ), 265s ], 265s ) 265s def test_get_changelog_parent_commits( 265s repo, 265s input_repo, 265s parent_overrides, 265s changelog_versions, 265s patch_state, 265s expected_refs, 265s ): 265s """Test that get_changelog_parent_commits is generally correct 265s 265s This is the general parameterised test for the common case uses of 265s target.get_changelog_parent_commits. 265s 265s :param GitUbuntuRepository repo: fixture providing a temporary 265s GitUbuntuRepository instance to use 265s :param repo_builder.Repo input_repo: the input repository data to use that 265s will be populated into @repo before @repo is passed through to 265s get_changelog_parent_commits 265s :param dict parent_overrides: passed through to 265s get_changelog_parent_commits. 265s :param PatchState patch_state: passed through to 265s get_changelog_parent_commits 265s :param list(str) expected_refs: the expected return value of 265s get_changelog_parent_commits expressed using a list of reference names. 265s Since get_changelog_parent_commits returns a list of commit hash 265s strings, the reference names will need to be dereferenced before 265s comparison; this way the test parameters don't need to be opaque hash 265s strings. 265s """ 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:721: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp3rhtxcl6/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_get_changelog_parent_commits[input_repo3-parent_overrides3-changelog_versions3-PatchState.UNAPPLIED-expected_refs3] _ 265s 265s repo = 265s input_repo = 265s parent_overrides = {}, changelog_versions = ['1-3', '1-2', '1-1'] 265s patch_state = 265s expected_refs = ['refs/tags/importer/import/1-1'] 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'parent_overrides', 265s 'changelog_versions', 265s 'patch_state', 265s 'expected_refs', 265s ], 265s [ 265s ( 265s repo_builder.Repo(), 265s {}, 265s ['1-2', '1-1',], 265s PatchState.UNAPPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.UNAPPLIED, 265s ['refs/tags/importer/import/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec(name='reimport', mutate=1), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.UNAPPLIED, 265s [ 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s {}, 265s ['1-3', '1-2', '1-1'], 265s PatchState.UNAPPLIED, 265s ['refs/tags/importer/import/1-1'], 265s ), 265s ( 265s repo_builder.Repo(), 265s {}, 265s ['1-2', '1-1',], 265s PatchState.APPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='applied')], 265s tags={'importer/applied/1-1': Placeholder('applied')}, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.APPLIED, 265s ['refs/tags/importer/applied/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec(name='reimport', mutate=1), 265s ], 265s tags={ 265s 'importer/applied/1-1': Placeholder('import'), 265s 'importer/reimport/applied/1-1/0': Placeholder('import'), 265s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.APPLIED, 265s [ 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='applied')], 265s tags={'importer/applied/1-1': Placeholder('applied')}, 265s ), 265s {}, 265s ['1-3', '1-2', '1-1'], 265s PatchState.APPLIED, 265s ['refs/tags/importer/applied/1-1'], 265s ), 265s ], 265s ) 265s def test_get_changelog_parent_commits( 265s repo, 265s input_repo, 265s parent_overrides, 265s changelog_versions, 265s patch_state, 265s expected_refs, 265s ): 265s """Test that get_changelog_parent_commits is generally correct 265s 265s This is the general parameterised test for the common case uses of 265s target.get_changelog_parent_commits. 265s 265s :param GitUbuntuRepository repo: fixture providing a temporary 265s GitUbuntuRepository instance to use 265s :param repo_builder.Repo input_repo: the input repository data to use that 265s will be populated into @repo before @repo is passed through to 265s get_changelog_parent_commits 265s :param dict parent_overrides: passed through to 265s get_changelog_parent_commits. 265s :param PatchState patch_state: passed through to 265s get_changelog_parent_commits 265s :param list(str) expected_refs: the expected return value of 265s get_changelog_parent_commits expressed using a list of reference names. 265s Since get_changelog_parent_commits returns a list of commit hash 265s strings, the reference names will need to be dereferenced before 265s comparison; this way the test parameters don't need to be opaque hash 265s strings. 265s """ 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:721: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpgmdjlbi9/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_get_changelog_parent_commits[input_repo5-parent_overrides5-changelog_versions5-PatchState.APPLIED-expected_refs5] _ 265s 265s repo = 265s input_repo = 265s parent_overrides = {}, changelog_versions = ['1-2', '1-1'] 265s patch_state = 265s expected_refs = ['refs/tags/importer/applied/1-1'] 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'parent_overrides', 265s 'changelog_versions', 265s 'patch_state', 265s 'expected_refs', 265s ], 265s [ 265s ( 265s repo_builder.Repo(), 265s {}, 265s ['1-2', '1-1',], 265s PatchState.UNAPPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.UNAPPLIED, 265s ['refs/tags/importer/import/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec(name='reimport', mutate=1), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.UNAPPLIED, 265s [ 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s {}, 265s ['1-3', '1-2', '1-1'], 265s PatchState.UNAPPLIED, 265s ['refs/tags/importer/import/1-1'], 265s ), 265s ( 265s repo_builder.Repo(), 265s {}, 265s ['1-2', '1-1',], 265s PatchState.APPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='applied')], 265s tags={'importer/applied/1-1': Placeholder('applied')}, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.APPLIED, 265s ['refs/tags/importer/applied/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec(name='reimport', mutate=1), 265s ], 265s tags={ 265s 'importer/applied/1-1': Placeholder('import'), 265s 'importer/reimport/applied/1-1/0': Placeholder('import'), 265s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.APPLIED, 265s [ 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='applied')], 265s tags={'importer/applied/1-1': Placeholder('applied')}, 265s ), 265s {}, 265s ['1-3', '1-2', '1-1'], 265s PatchState.APPLIED, 265s ['refs/tags/importer/applied/1-1'], 265s ), 265s ], 265s ) 265s def test_get_changelog_parent_commits( 265s repo, 265s input_repo, 265s parent_overrides, 265s changelog_versions, 265s patch_state, 265s expected_refs, 265s ): 265s """Test that get_changelog_parent_commits is generally correct 265s 265s This is the general parameterised test for the common case uses of 265s target.get_changelog_parent_commits. 265s 265s :param GitUbuntuRepository repo: fixture providing a temporary 265s GitUbuntuRepository instance to use 265s :param repo_builder.Repo input_repo: the input repository data to use that 265s will be populated into @repo before @repo is passed through to 265s get_changelog_parent_commits 265s :param dict parent_overrides: passed through to 265s get_changelog_parent_commits. 265s :param PatchState patch_state: passed through to 265s get_changelog_parent_commits 265s :param list(str) expected_refs: the expected return value of 265s get_changelog_parent_commits expressed using a list of reference names. 265s Since get_changelog_parent_commits returns a list of commit hash 265s strings, the reference names will need to be dereferenced before 265s comparison; this way the test parameters don't need to be opaque hash 265s strings. 265s """ 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:721: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpona4i_5w/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_get_changelog_parent_commits[input_repo6-parent_overrides6-changelog_versions6-PatchState.APPLIED-expected_refs6] _ 265s 265s repo = 265s input_repo = 265s parent_overrides = {}, changelog_versions = ['1-2', '1-1'] 265s patch_state = 265s expected_refs = ['refs/tags/importer/reimport/applied/1-1/0', 'refs/tags/importer/reimport/applied/1-1/1'] 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'parent_overrides', 265s 'changelog_versions', 265s 'patch_state', 265s 'expected_refs', 265s ], 265s [ 265s ( 265s repo_builder.Repo(), 265s {}, 265s ['1-2', '1-1',], 265s PatchState.UNAPPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.UNAPPLIED, 265s ['refs/tags/importer/import/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec(name='reimport', mutate=1), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.UNAPPLIED, 265s [ 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s {}, 265s ['1-3', '1-2', '1-1'], 265s PatchState.UNAPPLIED, 265s ['refs/tags/importer/import/1-1'], 265s ), 265s ( 265s repo_builder.Repo(), 265s {}, 265s ['1-2', '1-1',], 265s PatchState.APPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='applied')], 265s tags={'importer/applied/1-1': Placeholder('applied')}, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.APPLIED, 265s ['refs/tags/importer/applied/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec(name='reimport', mutate=1), 265s ], 265s tags={ 265s 'importer/applied/1-1': Placeholder('import'), 265s 'importer/reimport/applied/1-1/0': Placeholder('import'), 265s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.APPLIED, 265s [ 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='applied')], 265s tags={'importer/applied/1-1': Placeholder('applied')}, 265s ), 265s {}, 265s ['1-3', '1-2', '1-1'], 265s PatchState.APPLIED, 265s ['refs/tags/importer/applied/1-1'], 265s ), 265s ], 265s ) 265s def test_get_changelog_parent_commits( 265s repo, 265s input_repo, 265s parent_overrides, 265s changelog_versions, 265s patch_state, 265s expected_refs, 265s ): 265s """Test that get_changelog_parent_commits is generally correct 265s 265s This is the general parameterised test for the common case uses of 265s target.get_changelog_parent_commits. 265s 265s :param GitUbuntuRepository repo: fixture providing a temporary 265s GitUbuntuRepository instance to use 265s :param repo_builder.Repo input_repo: the input repository data to use that 265s will be populated into @repo before @repo is passed through to 265s get_changelog_parent_commits 265s :param dict parent_overrides: passed through to 265s get_changelog_parent_commits. 265s :param PatchState patch_state: passed through to 265s get_changelog_parent_commits 265s :param list(str) expected_refs: the expected return value of 265s get_changelog_parent_commits expressed using a list of reference names. 265s Since get_changelog_parent_commits returns a list of commit hash 265s strings, the reference names will need to be dereferenced before 265s comparison; this way the test parameters don't need to be opaque hash 265s strings. 265s """ 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:721: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp2dy_72bp/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_get_changelog_parent_commits[input_repo7-parent_overrides7-changelog_versions7-PatchState.APPLIED-expected_refs7] _ 265s 265s repo = 265s input_repo = 265s parent_overrides = {}, changelog_versions = ['1-3', '1-2', '1-1'] 265s patch_state = 265s expected_refs = ['refs/tags/importer/applied/1-1'] 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'parent_overrides', 265s 'changelog_versions', 265s 'patch_state', 265s 'expected_refs', 265s ], 265s [ 265s ( 265s repo_builder.Repo(), 265s {}, 265s ['1-2', '1-1',], 265s PatchState.UNAPPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.UNAPPLIED, 265s ['refs/tags/importer/import/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec(name='reimport', mutate=1), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.UNAPPLIED, 265s [ 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s {}, 265s ['1-3', '1-2', '1-1'], 265s PatchState.UNAPPLIED, 265s ['refs/tags/importer/import/1-1'], 265s ), 265s ( 265s repo_builder.Repo(), 265s {}, 265s ['1-2', '1-1',], 265s PatchState.APPLIED, 265s [], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='applied')], 265s tags={'importer/applied/1-1': Placeholder('applied')}, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.APPLIED, 265s ['refs/tags/importer/applied/1-1'], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec(name='reimport', mutate=1), 265s ], 265s tags={ 265s 'importer/applied/1-1': Placeholder('import'), 265s 'importer/reimport/applied/1-1/0': Placeholder('import'), 265s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s {}, 265s ['1-2', '1-1'], 265s PatchState.APPLIED, 265s [ 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='applied')], 265s tags={'importer/applied/1-1': Placeholder('applied')}, 265s ), 265s {}, 265s ['1-3', '1-2', '1-1'], 265s PatchState.APPLIED, 265s ['refs/tags/importer/applied/1-1'], 265s ), 265s ], 265s ) 265s def test_get_changelog_parent_commits( 265s repo, 265s input_repo, 265s parent_overrides, 265s changelog_versions, 265s patch_state, 265s expected_refs, 265s ): 265s """Test that get_changelog_parent_commits is generally correct 265s 265s This is the general parameterised test for the common case uses of 265s target.get_changelog_parent_commits. 265s 265s :param GitUbuntuRepository repo: fixture providing a temporary 265s GitUbuntuRepository instance to use 265s :param repo_builder.Repo input_repo: the input repository data to use that 265s will be populated into @repo before @repo is passed through to 265s get_changelog_parent_commits 265s :param dict parent_overrides: passed through to 265s get_changelog_parent_commits. 265s :param PatchState patch_state: passed through to 265s get_changelog_parent_commits 265s :param list(str) expected_refs: the expected return value of 265s get_changelog_parent_commits expressed using a list of reference names. 265s Since get_changelog_parent_commits returns a list of commit hash 265s strings, the reference names will need to be dereferenced before 265s comparison; this way the test parameters don't need to be opaque hash 265s strings. 265s """ 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:721: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpumbskyjm/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _________ test_validate_rich_history[input_repo0-published_spec0-True] _________ 265s 265s repo = 265s input_repo = 265s published_spec = {'changelog_versions': ['1-2', '1-1']}, expected_result = True 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'published_spec', 265s 'expected_result', 265s ], 265s [ 265s ( 265s # Common case: upload tag has a changelog parent as an ancestor 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec( 265s name='upload', 265s changelog_versions=['1-2', '1-1'], 265s parents=[Placeholder('import')], 265s ), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-2': Placeholder('upload'), 265s }, 265s ), 265s {'changelog_versions': ['1-2', '1-1']}, 265s True, 265s ), 265s ( 265s # Upload tag is the first one, with no parents present 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec( 265s name='upload', 265s version='1-2', 265s ), 265s ], 265s tags={ 265s 'importer/upload/1-2': Placeholder('upload'), 265s }, 265s ), 265s {'changelog_versions': ['1-2']}, 265s True, 265s ), 265s ( 265s # Upload tag mismatches published tree but is otherwise correct 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec( 265s name='upload', 265s changelog_versions=['1-2', '1-1'], 265s parents=[Placeholder('import')], 265s mutate=True, 265s ), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-2': Placeholder('upload'), 265s }, 265s ), 265s {'changelog_versions': ['1-2', '1-1']}, 265s target.RichHistoryTreeMismatch, 265s ), 265s ( 265s # Upload tag doesn't have a changelog parent as an ancestor but is 265s # otherwise correct 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec( 265s name='upload', 265s changelog_versions=['1-2', '1-1'], 265s ), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-2': Placeholder('upload'), 265s }, 265s ), 265s {'changelog_versions': ['1-2', '1-1']}, 265s target.RichHistoryHasNoChangelogParentAncestor, 265s ), 265s ], 265s ) 265s def test_validate_rich_history( 265s repo, 265s input_repo, 265s published_spec, 265s expected_result, 265s ): 265s """ 265s General test for validate_rich_history(). 265s 265s This unit tests validate_rich_history() for various parameterized cases. 265s Given an input repository and the specification of a Launchpad publication 265s of a source package, we check that validate_rich_history() correctly 265s accepts or rejects the rich history corresponding to the upload tag named 265s 'importer/upload/1-2'. It is assumed that the package being imported is 265s always of version '1-2' for all parameter sets. 265s 265s Since the target function requires rich history, the case of there not 265s being rich history does not need to be tested here, as it wouldn't be 265s called in this case. 265s 265s validate_rich_history() is generic for all sourced rich history, not just 265s rich history sourced from an upload tag. But since it is independent of how 265s the rich history commit arrived, it is easiest to use upload tags to test 265s it; this results in coverage for all sources. 265s 265s :param GitUbuntuRepository repo: fixture providing a temporary 265s GitUbuntuRepository instance to use 265s :param repo_builder.Repo input_repo: input repository data 265s :param dict published_spec: the package simulated being imported from the 265s archive, specified as a dict to pass as **kwargs to 265s repo_builder.Commit.from_spec() 265s :param bool expected_result: the expected return value of, or exception 265s raised by, the call to validate_rich_history() 265s """ 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:910: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpg1syay82/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _________ test_validate_rich_history[input_repo1-published_spec1-True] _________ 265s 265s repo = 265s input_repo = 265s published_spec = {'changelog_versions': ['1-2']}, expected_result = True 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'published_spec', 265s 'expected_result', 265s ], 265s [ 265s ( 265s # Common case: upload tag has a changelog parent as an ancestor 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec( 265s name='upload', 265s changelog_versions=['1-2', '1-1'], 265s parents=[Placeholder('import')], 265s ), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-2': Placeholder('upload'), 265s }, 265s ), 265s {'changelog_versions': ['1-2', '1-1']}, 265s True, 265s ), 265s ( 265s # Upload tag is the first one, with no parents present 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec( 265s name='upload', 265s version='1-2', 265s ), 265s ], 265s tags={ 265s 'importer/upload/1-2': Placeholder('upload'), 265s }, 265s ), 265s {'changelog_versions': ['1-2']}, 265s True, 265s ), 265s ( 265s # Upload tag mismatches published tree but is otherwise correct 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec( 265s name='upload', 265s changelog_versions=['1-2', '1-1'], 265s parents=[Placeholder('import')], 265s mutate=True, 265s ), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-2': Placeholder('upload'), 265s }, 265s ), 265s {'changelog_versions': ['1-2', '1-1']}, 265s target.RichHistoryTreeMismatch, 265s ), 265s ( 265s # Upload tag doesn't have a changelog parent as an ancestor but is 265s # otherwise correct 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec( 265s name='upload', 265s changelog_versions=['1-2', '1-1'], 265s ), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-2': Placeholder('upload'), 265s }, 265s ), 265s {'changelog_versions': ['1-2', '1-1']}, 265s target.RichHistoryHasNoChangelogParentAncestor, 265s ), 265s ], 265s ) 265s def test_validate_rich_history( 265s repo, 265s input_repo, 265s published_spec, 265s expected_result, 265s ): 265s """ 265s General test for validate_rich_history(). 265s 265s This unit tests validate_rich_history() for various parameterized cases. 265s Given an input repository and the specification of a Launchpad publication 265s of a source package, we check that validate_rich_history() correctly 265s accepts or rejects the rich history corresponding to the upload tag named 265s 'importer/upload/1-2'. It is assumed that the package being imported is 265s always of version '1-2' for all parameter sets. 265s 265s Since the target function requires rich history, the case of there not 265s being rich history does not need to be tested here, as it wouldn't be 265s called in this case. 265s 265s validate_rich_history() is generic for all sourced rich history, not just 265s rich history sourced from an upload tag. But since it is independent of how 265s the rich history commit arrived, it is easiest to use upload tags to test 265s it; this results in coverage for all sources. 265s 265s :param GitUbuntuRepository repo: fixture providing a temporary 265s GitUbuntuRepository instance to use 265s :param repo_builder.Repo input_repo: input repository data 265s :param dict published_spec: the package simulated being imported from the 265s archive, specified as a dict to pass as **kwargs to 265s repo_builder.Commit.from_spec() 265s :param bool expected_result: the expected return value of, or exception 265s raised by, the call to validate_rich_history() 265s """ 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:910: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpmojsvvjx/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_validate_rich_history[input_repo2-published_spec2-RichHistoryTreeMismatch] _ 265s 265s repo = 265s input_repo = 265s published_spec = {'changelog_versions': ['1-2', '1-1']} 265s expected_result = 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'published_spec', 265s 'expected_result', 265s ], 265s [ 265s ( 265s # Common case: upload tag has a changelog parent as an ancestor 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec( 265s name='upload', 265s changelog_versions=['1-2', '1-1'], 265s parents=[Placeholder('import')], 265s ), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-2': Placeholder('upload'), 265s }, 265s ), 265s {'changelog_versions': ['1-2', '1-1']}, 265s True, 265s ), 265s ( 265s # Upload tag is the first one, with no parents present 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec( 265s name='upload', 265s version='1-2', 265s ), 265s ], 265s tags={ 265s 'importer/upload/1-2': Placeholder('upload'), 265s }, 265s ), 265s {'changelog_versions': ['1-2']}, 265s True, 265s ), 265s ( 265s # Upload tag mismatches published tree but is otherwise correct 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec( 265s name='upload', 265s changelog_versions=['1-2', '1-1'], 265s parents=[Placeholder('import')], 265s mutate=True, 265s ), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-2': Placeholder('upload'), 265s }, 265s ), 265s {'changelog_versions': ['1-2', '1-1']}, 265s target.RichHistoryTreeMismatch, 265s ), 265s ( 265s # Upload tag doesn't have a changelog parent as an ancestor but is 265s # otherwise correct 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec( 265s name='upload', 265s changelog_versions=['1-2', '1-1'], 265s ), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-2': Placeholder('upload'), 265s }, 265s ), 265s {'changelog_versions': ['1-2', '1-1']}, 265s target.RichHistoryHasNoChangelogParentAncestor, 265s ), 265s ], 265s ) 265s def test_validate_rich_history( 265s repo, 265s input_repo, 265s published_spec, 265s expected_result, 265s ): 265s """ 265s General test for validate_rich_history(). 265s 265s This unit tests validate_rich_history() for various parameterized cases. 265s Given an input repository and the specification of a Launchpad publication 265s of a source package, we check that validate_rich_history() correctly 265s accepts or rejects the rich history corresponding to the upload tag named 265s 'importer/upload/1-2'. It is assumed that the package being imported is 265s always of version '1-2' for all parameter sets. 265s 265s Since the target function requires rich history, the case of there not 265s being rich history does not need to be tested here, as it wouldn't be 265s called in this case. 265s 265s validate_rich_history() is generic for all sourced rich history, not just 265s rich history sourced from an upload tag. But since it is independent of how 265s the rich history commit arrived, it is easiest to use upload tags to test 265s it; this results in coverage for all sources. 265s 265s :param GitUbuntuRepository repo: fixture providing a temporary 265s GitUbuntuRepository instance to use 265s :param repo_builder.Repo input_repo: input repository data 265s :param dict published_spec: the package simulated being imported from the 265s archive, specified as a dict to pass as **kwargs to 265s repo_builder.Commit.from_spec() 265s :param bool expected_result: the expected return value of, or exception 265s raised by, the call to validate_rich_history() 265s """ 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:910: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmph3brdt39/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_validate_rich_history[input_repo3-published_spec3-RichHistoryHasNoChangelogParentAncestor] _ 265s 265s repo = 265s input_repo = 265s published_spec = {'changelog_versions': ['1-2', '1-1']} 265s expected_result = 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'published_spec', 265s 'expected_result', 265s ], 265s [ 265s ( 265s # Common case: upload tag has a changelog parent as an ancestor 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec( 265s name='upload', 265s changelog_versions=['1-2', '1-1'], 265s parents=[Placeholder('import')], 265s ), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-2': Placeholder('upload'), 265s }, 265s ), 265s {'changelog_versions': ['1-2', '1-1']}, 265s True, 265s ), 265s ( 265s # Upload tag is the first one, with no parents present 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec( 265s name='upload', 265s version='1-2', 265s ), 265s ], 265s tags={ 265s 'importer/upload/1-2': Placeholder('upload'), 265s }, 265s ), 265s {'changelog_versions': ['1-2']}, 265s True, 265s ), 265s ( 265s # Upload tag mismatches published tree but is otherwise correct 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec( 265s name='upload', 265s changelog_versions=['1-2', '1-1'], 265s parents=[Placeholder('import')], 265s mutate=True, 265s ), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-2': Placeholder('upload'), 265s }, 265s ), 265s {'changelog_versions': ['1-2', '1-1']}, 265s target.RichHistoryTreeMismatch, 265s ), 265s ( 265s # Upload tag doesn't have a changelog parent as an ancestor but is 265s # otherwise correct 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec( 265s name='upload', 265s changelog_versions=['1-2', '1-1'], 265s ), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/upload/1-2': Placeholder('upload'), 265s }, 265s ), 265s {'changelog_versions': ['1-2', '1-1']}, 265s target.RichHistoryHasNoChangelogParentAncestor, 265s ), 265s ], 265s ) 265s def test_validate_rich_history( 265s repo, 265s input_repo, 265s published_spec, 265s expected_result, 265s ): 265s """ 265s General test for validate_rich_history(). 265s 265s This unit tests validate_rich_history() for various parameterized cases. 265s Given an input repository and the specification of a Launchpad publication 265s of a source package, we check that validate_rich_history() correctly 265s accepts or rejects the rich history corresponding to the upload tag named 265s 'importer/upload/1-2'. It is assumed that the package being imported is 265s always of version '1-2' for all parameter sets. 265s 265s Since the target function requires rich history, the case of there not 265s being rich history does not need to be tested here, as it wouldn't be 265s called in this case. 265s 265s validate_rich_history() is generic for all sourced rich history, not just 265s rich history sourced from an upload tag. But since it is independent of how 265s the rich history commit arrived, it is easiest to use upload tags to test 265s it; this results in coverage for all sources. 265s 265s :param GitUbuntuRepository repo: fixture providing a temporary 265s GitUbuntuRepository instance to use 265s :param repo_builder.Repo input_repo: input repository data 265s :param dict published_spec: the package simulated being imported from the 265s archive, specified as a dict to pass as **kwargs to 265s repo_builder.Commit.from_spec() 265s :param bool expected_result: the expected return value of, or exception 265s raised by, the call to validate_rich_history() 265s """ 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:910: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp3kcrgwp8/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s ______________________ test_add_changelog_note_to_commit _______________________ 265s 265s repo = 265s 265s def test_add_changelog_note_to_commit(repo): 265s """add_changelog_note_to_commit should add the expected note""" 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='1-1'), 265s repo_builder.Commit.from_spec( 265s name='1-2', 265s changelog_versions=['1-1', '1-2'], 265s parents=[Placeholder('1-1')], 265s ), 265s ], 265s tags={'1-1': Placeholder('1-1'), '1-2': Placeholder('1-2')}, 265s > ).write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:953: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp6ls_p79u/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s ____________________ test_add_changelog_note_to_commit_utf8 ____________________ 265s 265s repo = 265s 265s def test_add_changelog_note_to_commit_utf8(repo): 265s """A changelog file with non-UTF8 should have such characters substituted 265s 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s """ 265s test_utf8_error_changelog_path = os.path.join( 265s pkg_resources.resource_filename('gitubuntu', 'changelog_tests'), 265s 'test_utf8_error', 265s ) 265s with open(test_utf8_error_changelog_path, 'rb') as f: 265s utf8_changelog_blob = f.read() 265s 265s # We only need an example child commit with a debian/changelog file since 265s # this is the only file accessed by add_changelog_note_to_commit(). 265s # Further, the parent need only exist and can be empty. 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit(name='parent'), 265s repo_builder.Commit( 265s tree=repo_builder.Tree({'debian': repo_builder.Tree( 265s {'changelog': repo_builder.Blob(utf8_changelog_blob)} 265s )}), 265s name='child', 265s ) 265s ], 265s tags={'parent': Placeholder('parent'), 'child': Placeholder('child')}, 265s > ).write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:1002: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpgqwx8apq/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s _________________ test_double_changelog_note_add_does_not_fail _________________ 265s 265s repo = 265s 265s def test_double_changelog_note_add_does_not_fail(repo): 265s """add_changelog_note_to_commit shouldn't fail if a note already exists""" 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='1-1'), 265s repo_builder.Commit.from_spec( 265s name='1-2', 265s changelog_versions=['1-1', '1-2'], 265s parents=[Placeholder('1-1')], 265s ), 265s ], 265s tags={'1-1': Placeholder('1-1'), '1-2': Placeholder('1-2')}, 265s > ).write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:1035: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpsbsi_2hh/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s ___________________________ test_create_import_note ____________________________ 265s 265s repo = 265s 265s def test_create_import_note(repo): 265s """create_import_note() should create a note in the correct ref""" 265s repo_builder.Repo( 265s commits=[repo_builder.Commit(name='root')], 265s tags={'root': repo_builder.Placeholder('root')}, 265s > ).write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:1066: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpyb8oaqsb/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ______________________ test_create_import_note_timestamp _______________________ 265s 265s repo = 265s 265s def test_create_import_note_timestamp(repo): 265s """create_import_note() should include the timestamp in the note""" 265s repo_builder.Repo( 265s commits=[repo_builder.Commit(name='root')], 265s tags={'root': repo_builder.Placeholder('root')}, 265s > ).write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:1082: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpusp7rsgw/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s _______________________ test_import_creates_import_note ________________________ 265s 265s repo = 265s 265s def test_import_creates_import_note(repo): 265s """When an import runs, the note should appear in the correct ref""" 265s with source_builder.Source() as dsc_pathname: 265s > target.import_unapplied_dsc( 265s repo=repo, 265s version='1-1', 265s namespace='importer', 265s dist='ubuntu', 265s dsc_pathname=dsc_pathname, 265s head_name='ubuntu/focal', 265s skip_orig=True, 265s parent_overrides={}, 265s ) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:1102: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 265s commit, tag = find_or_create_unapplied_commit( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 265s changelog_parents = get_unapplied_import_parents( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 265s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 265s changelog = self.get_changelog_from_treeish(treeish) 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 265s return Changelog.from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:569: in from_treeish 265s blob = follow_symlinks_to_blob( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpab3_t4u0/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s ___________________ test_import_unapplied_spi_quilt_patches ____________________ 265s 265s get_import_commit_msg_mock = 265s get_import_tag_msg_mock = 265s repo = 265s 265s @patch('gitubuntu.importer.get_import_tag_msg') 265s @patch('gitubuntu.importer.get_import_commit_msg') 265s def test_import_unapplied_spi_quilt_patches( 265s get_import_commit_msg_mock, 265s get_import_tag_msg_mock, 265s repo, 265s ): 265s """Test that a package with quilt patches is imported with correct 265s unapplied refs 265s 265s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 265s that determines the commit message to use for a given import 265s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 265s that determines the tag message to use for a given import 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s """ 265s # Match the repo_builder objects 265s get_import_tag_msg_mock.return_value = 'Test tag' 265s get_import_commit_msg_mock.return_value = b'Test commit' 265s 265s publish_spec = source_builder.SourceSpec(has_patches=True) 265s 265s input_repo = repo_builder.Repo() 265s input_repo.write(repo.raw_repo) 265s expected_result = repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit( 265s tree=repo_builder.SourceTree( 265s source_builder.Source(publish_spec) 265s ), 265s name='publish' 265s ), 265s ], 265s tags={'importer/import/1-1': Placeholder('publish')}, 265s branches={'importer/ubuntu/trusty': Placeholder('publish')}, 265s ) 265s 265s with source_builder.Source(publish_spec) as dsc_path: 265s # import_unapplied_spi currently assumes it is called from the 265s # repository directory (pristine-tar and other commands rely on 265s # this) 265s > target.import_unapplied_spi( 265s repo=repo, 265s spi=MockSPI(dsc_path, publish_spec.version), 265s namespace='importer', 265s skip_orig=False, 265s parent_overrides={}, 265s ) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:1222: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:2308: in import_unapplied_spi 265s import_unapplied_dsc( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 265s commit, tag = find_or_create_unapplied_commit( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 265s changelog_parents = get_unapplied_import_parents( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 265s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 265s changelog = self.get_changelog_from_treeish(treeish) 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 265s return Changelog.from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:569: in from_treeish 265s blob = follow_symlinks_to_blob( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmp4pss664q/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: applying a 265s dpkg-source: info: applying b 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_import_unapplied_spi_parenting[input_repo0-changelog_versions0-validation_repo_delta0-validation_repo_expected_identical_refs0] _ 265s 265s get_import_commit_msg_mock = 265s get_import_tag_msg_mock = 265s repo = 265s input_repo = 265s changelog_versions = ['1-1'] 265s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-1': }} 265s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1'] 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'changelog_versions', 265s 'validation_repo_delta', 265s 'validation_repo_expected_identical_refs', 265s ], 265s [ 265s pytest.param( 265s repo_builder.Repo(), 265s ['1-1'], 265s { 265s 'add_commits': [ 265s repo_builder.Commit.from_spec(name='publish'), 265s ], 265s 'update_tags': {'importer/import/1-1': Placeholder('publish')}, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s ] 265s ), 265s pytest.param( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s ['1-2', '1-1'], 265s { 265s 'add_commits': [ 265s repo_builder.Commit.from_spec( 265s name='publish', 265s parents=[Placeholder('import')], 265s changelog_versions=['1-2', '1-1'], 265s ), 265s ], 265s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/import/1-2', 265s ], 265s ), 265s pytest.param( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s ['1-3', '1-2', '1-1'], 265s { 265s 'add_commits': [ 265s repo_builder.Commit.from_spec( 265s parents=[Placeholder('import')], 265s name='publish', 265s changelog_versions=['1-3', '1-2', '1-1'], 265s ), 265s ], 265s 'update_tags': {'importer/import/1-3': Placeholder('publish')}, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/import/1-3', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec( 265s name='reimport', 265s mutate='Reimport tag contents', 265s ), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s ['1-2', '1-1'], 265s { 265s 'add_commits': [ 265s repo_builder.Commit.from_spec( 265s parents=[ 265s Placeholder('import'), 265s Placeholder('reimport'), 265s ], 265s name='publish', 265s changelog_versions=['1-2', '1-1'], 265s ), 265s ], 265s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s 'refs/tags/importer/import/1-2', 265s ], 265s ), 265s ] 265s ) 265s @patch('gitubuntu.importer.get_import_tag_msg') 265s @patch('gitubuntu.importer.get_import_commit_msg') 265s def test_import_unapplied_spi_parenting( 265s get_import_commit_msg_mock, 265s get_import_tag_msg_mock, 265s repo, 265s input_repo, 265s changelog_versions, 265s validation_repo_delta, 265s validation_repo_expected_identical_refs, 265s ): 265s """Test that unapplied import commits have the correct parents 265s 265s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 265s that determines the commit message to use for a given import 265s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 265s that determines the tag message to use for a given import 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param list(str) changelog_versions: the versions in the changelog of a 265s fake package to test import 265s :param dict validation_repo_delta: how to transform the input 265s repository into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_identical_refs: refs that must be 265s identical between the validation repository and the output repository 265s 265s Verify that if an import of a package is made into input_repo where the 265s package being imported has the given changelog_versions, then the output 265s repository has commits with the parents we expect. This is tested by 265s comparing specific output references against the validation repository. 265s """ 265s 265s # Match the repo_builder objects 265s get_import_tag_msg_mock.return_value = 'Test tag' 265s get_import_commit_msg_mock.return_value = b'Test commit' 265s 265s input_repo.write(repo.raw_repo) 265s 265s publish_spec = source_builder.SourceSpec( 265s changelog_versions=changelog_versions, 265s ) 265s 265s with source_builder.Source(publish_spec) as dsc_path: 265s # import_unapplied_spi currently assumes it is called from the 265s # repository directory (pristine-tar and other commands rely on 265s # this) 265s > target.import_unapplied_spi( 265s repo=repo, 265s spi=MockSPI(dsc_path, publish_spec.version), 265s namespace='importer', 265s skip_orig=False, 265s parent_overrides={}, 265s ) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:1391: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:2308: in import_unapplied_spi 265s import_unapplied_dsc( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 265s commit, tag = find_or_create_unapplied_commit( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 265s changelog_parents = get_unapplied_import_parents( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 265s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 265s changelog = self.get_changelog_from_treeish(treeish) 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 265s return Changelog.from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:569: in from_treeish 265s blob = follow_symlinks_to_blob( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmp1_86r7zx/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_import_unapplied_spi_parenting[input_repo1-changelog_versions1-validation_repo_delta1-validation_repo_expected_identical_refs1] _ 265s 265s get_import_commit_msg_mock = 265s get_import_tag_msg_mock = 265s repo = 265s input_repo = 265s changelog_versions = ['1-2', '1-1'] 265s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-2': }} 265s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1', 'refs/tags/importer/import/1-2'] 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'changelog_versions', 265s 'validation_repo_delta', 265s 'validation_repo_expected_identical_refs', 265s ], 265s [ 265s pytest.param( 265s repo_builder.Repo(), 265s ['1-1'], 265s { 265s 'add_commits': [ 265s repo_builder.Commit.from_spec(name='publish'), 265s ], 265s 'update_tags': {'importer/import/1-1': Placeholder('publish')}, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s ] 265s ), 265s pytest.param( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s ['1-2', '1-1'], 265s { 265s 'add_commits': [ 265s repo_builder.Commit.from_spec( 265s name='publish', 265s parents=[Placeholder('import')], 265s changelog_versions=['1-2', '1-1'], 265s ), 265s ], 265s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/import/1-2', 265s ], 265s ), 265s pytest.param( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s ['1-3', '1-2', '1-1'], 265s { 265s 'add_commits': [ 265s repo_builder.Commit.from_spec( 265s parents=[Placeholder('import')], 265s name='publish', 265s changelog_versions=['1-3', '1-2', '1-1'], 265s ), 265s ], 265s 'update_tags': {'importer/import/1-3': Placeholder('publish')}, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/import/1-3', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec( 265s name='reimport', 265s mutate='Reimport tag contents', 265s ), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s ['1-2', '1-1'], 265s { 265s 'add_commits': [ 265s repo_builder.Commit.from_spec( 265s parents=[ 265s Placeholder('import'), 265s Placeholder('reimport'), 265s ], 265s name='publish', 265s changelog_versions=['1-2', '1-1'], 265s ), 265s ], 265s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s 'refs/tags/importer/import/1-2', 265s ], 265s ), 265s ] 265s ) 265s @patch('gitubuntu.importer.get_import_tag_msg') 265s @patch('gitubuntu.importer.get_import_commit_msg') 265s def test_import_unapplied_spi_parenting( 265s get_import_commit_msg_mock, 265s get_import_tag_msg_mock, 265s repo, 265s input_repo, 265s changelog_versions, 265s validation_repo_delta, 265s validation_repo_expected_identical_refs, 265s ): 265s """Test that unapplied import commits have the correct parents 265s 265s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 265s that determines the commit message to use for a given import 265s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 265s that determines the tag message to use for a given import 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param list(str) changelog_versions: the versions in the changelog of a 265s fake package to test import 265s :param dict validation_repo_delta: how to transform the input 265s repository into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_identical_refs: refs that must be 265s identical between the validation repository and the output repository 265s 265s Verify that if an import of a package is made into input_repo where the 265s package being imported has the given changelog_versions, then the output 265s repository has commits with the parents we expect. This is tested by 265s comparing specific output references against the validation repository. 265s """ 265s 265s # Match the repo_builder objects 265s get_import_tag_msg_mock.return_value = 'Test tag' 265s get_import_commit_msg_mock.return_value = b'Test commit' 265s 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:1381: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp_yw_byw0/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_import_unapplied_spi_parenting[input_repo2-changelog_versions2-validation_repo_delta2-validation_repo_expected_identical_refs2] _ 265s 265s get_import_commit_msg_mock = 265s get_import_tag_msg_mock = 265s repo = 265s input_repo = 265s changelog_versions = ['1-3', '1-2', '1-1'] 265s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-3': }} 265s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1', 'refs/tags/importer/import/1-3'] 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'changelog_versions', 265s 'validation_repo_delta', 265s 'validation_repo_expected_identical_refs', 265s ], 265s [ 265s pytest.param( 265s repo_builder.Repo(), 265s ['1-1'], 265s { 265s 'add_commits': [ 265s repo_builder.Commit.from_spec(name='publish'), 265s ], 265s 'update_tags': {'importer/import/1-1': Placeholder('publish')}, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s ] 265s ), 265s pytest.param( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s ['1-2', '1-1'], 265s { 265s 'add_commits': [ 265s repo_builder.Commit.from_spec( 265s name='publish', 265s parents=[Placeholder('import')], 265s changelog_versions=['1-2', '1-1'], 265s ), 265s ], 265s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/import/1-2', 265s ], 265s ), 265s pytest.param( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s ['1-3', '1-2', '1-1'], 265s { 265s 'add_commits': [ 265s repo_builder.Commit.from_spec( 265s parents=[Placeholder('import')], 265s name='publish', 265s changelog_versions=['1-3', '1-2', '1-1'], 265s ), 265s ], 265s 'update_tags': {'importer/import/1-3': Placeholder('publish')}, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/import/1-3', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec( 265s name='reimport', 265s mutate='Reimport tag contents', 265s ), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s ['1-2', '1-1'], 265s { 265s 'add_commits': [ 265s repo_builder.Commit.from_spec( 265s parents=[ 265s Placeholder('import'), 265s Placeholder('reimport'), 265s ], 265s name='publish', 265s changelog_versions=['1-2', '1-1'], 265s ), 265s ], 265s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s 'refs/tags/importer/import/1-2', 265s ], 265s ), 265s ] 265s ) 265s @patch('gitubuntu.importer.get_import_tag_msg') 265s @patch('gitubuntu.importer.get_import_commit_msg') 265s def test_import_unapplied_spi_parenting( 265s get_import_commit_msg_mock, 265s get_import_tag_msg_mock, 265s repo, 265s input_repo, 265s changelog_versions, 265s validation_repo_delta, 265s validation_repo_expected_identical_refs, 265s ): 265s """Test that unapplied import commits have the correct parents 265s 265s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 265s that determines the commit message to use for a given import 265s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 265s that determines the tag message to use for a given import 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param list(str) changelog_versions: the versions in the changelog of a 265s fake package to test import 265s :param dict validation_repo_delta: how to transform the input 265s repository into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_identical_refs: refs that must be 265s identical between the validation repository and the output repository 265s 265s Verify that if an import of a package is made into input_repo where the 265s package being imported has the given changelog_versions, then the output 265s repository has commits with the parents we expect. This is tested by 265s comparing specific output references against the validation repository. 265s """ 265s 265s # Match the repo_builder objects 265s get_import_tag_msg_mock.return_value = 'Test tag' 265s get_import_commit_msg_mock.return_value = b'Test commit' 265s 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:1381: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpns39mbcq/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_import_unapplied_spi_parenting[input_repo3-changelog_versions3-validation_repo_delta3-validation_repo_expected_identical_refs3] _ 265s 265s get_import_commit_msg_mock = 265s get_import_tag_msg_mock = 265s repo = 265s input_repo = 265s changelog_versions = ['1-2', '1-1'] 265s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-2': }} 265s 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'] 265s 265s @pytest.mark.parametrize( 265s [ 265s 'input_repo', 265s 'changelog_versions', 265s 'validation_repo_delta', 265s 'validation_repo_expected_identical_refs', 265s ], 265s [ 265s pytest.param( 265s repo_builder.Repo(), 265s ['1-1'], 265s { 265s 'add_commits': [ 265s repo_builder.Commit.from_spec(name='publish'), 265s ], 265s 'update_tags': {'importer/import/1-1': Placeholder('publish')}, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s ] 265s ), 265s pytest.param( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s ['1-2', '1-1'], 265s { 265s 'add_commits': [ 265s repo_builder.Commit.from_spec( 265s name='publish', 265s parents=[Placeholder('import')], 265s changelog_versions=['1-2', '1-1'], 265s ), 265s ], 265s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/import/1-2', 265s ], 265s ), 265s pytest.param( 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import')], 265s tags={'importer/import/1-1': Placeholder('import')}, 265s ), 265s ['1-3', '1-2', '1-1'], 265s { 265s 'add_commits': [ 265s repo_builder.Commit.from_spec( 265s parents=[Placeholder('import')], 265s name='publish', 265s changelog_versions=['1-3', '1-2', '1-1'], 265s ), 265s ], 265s 'update_tags': {'importer/import/1-3': Placeholder('publish')}, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/import/1-3', 265s ], 265s ), 265s ( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import'), 265s repo_builder.Commit.from_spec( 265s name='reimport', 265s mutate='Reimport tag contents', 265s ), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import'), 265s 'importer/reimport/import/1-1/0': Placeholder('import'), 265s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 265s }, 265s ), 265s ['1-2', '1-1'], 265s { 265s 'add_commits': [ 265s repo_builder.Commit.from_spec( 265s parents=[ 265s Placeholder('import'), 265s Placeholder('reimport'), 265s ], 265s name='publish', 265s changelog_versions=['1-2', '1-1'], 265s ), 265s ], 265s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 265s }, 265s [ 265s 'refs/tags/importer/import/1-1', 265s 'refs/tags/importer/reimport/import/1-1/0', 265s 'refs/tags/importer/reimport/import/1-1/1', 265s 'refs/tags/importer/import/1-2', 265s ], 265s ), 265s ] 265s ) 265s @patch('gitubuntu.importer.get_import_tag_msg') 265s @patch('gitubuntu.importer.get_import_commit_msg') 265s def test_import_unapplied_spi_parenting( 265s get_import_commit_msg_mock, 265s get_import_tag_msg_mock, 265s repo, 265s input_repo, 265s changelog_versions, 265s validation_repo_delta, 265s validation_repo_expected_identical_refs, 265s ): 265s """Test that unapplied import commits have the correct parents 265s 265s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 265s that determines the commit message to use for a given import 265s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 265s that determines the tag message to use for a given import 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param list(str) changelog_versions: the versions in the changelog of a 265s fake package to test import 265s :param dict validation_repo_delta: how to transform the input 265s repository into a "validation repository", expressed as a dict to 265s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 265s input repository. The validation repository is then used for the 265s purposes of comparison against the output repository. 265s :param list(str) validation_repo_expected_identical_refs: refs that must be 265s identical between the validation repository and the output repository 265s 265s Verify that if an import of a package is made into input_repo where the 265s package being imported has the given changelog_versions, then the output 265s repository has commits with the parents we expect. This is tested by 265s comparing specific output references against the validation repository. 265s """ 265s 265s # Match the repo_builder objects 265s get_import_tag_msg_mock.return_value = 'Test tag' 265s get_import_commit_msg_mock.return_value = b'Test commit' 265s 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:1381: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp8fao5sra/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s __________________ test_import_unapplied_spi_parent_override ___________________ 265s 265s get_import_commit_msg_mock = 265s get_import_tag_msg_mock = 265s repo = 265s 265s @patch('gitubuntu.importer.get_import_tag_msg') 265s @patch('gitubuntu.importer.get_import_commit_msg') 265s def test_import_unapplied_spi_parent_override( 265s get_import_commit_msg_mock, 265s get_import_tag_msg_mock, 265s repo, 265s ): 265s """Test import_unapplied_spi() parent_override functionality 265s 265s Test that if parent_overrides is used in the import_unapplied_spi call then 265s the resulting commit correctly uses the overridden parents specified. 265s 265s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 265s that determines the commit message to use for a given import 265s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 265s that determines the tag message to use for a given import 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s """ 265s # Match the repo_builder objects 265s get_import_tag_msg_mock.return_value = 'Test tag' 265s get_import_commit_msg_mock.return_value = b'Test commit' 265s 265s input_repo = repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec(name='import1-1', version='1-1'), 265s repo_builder.Commit.from_spec(name='import1-2', version='1-2'), 265s ], 265s tags={ 265s 'importer/import/1-1': Placeholder('import1-1'), 265s 'importer/import/1-2': Placeholder('import1-2'), 265s }, 265s ) 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:1444: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmptdik3w8c/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s ______________ test_import_unapplied_spi_parent_override_failure _______________ 265s 265s repo = 265s 265s def test_import_unapplied_spi_parent_override_failure(repo): 265s """ 265s Test override_parents ParentOverrideError raise 265s 265s When a parent override is specified but the specified version doesn't have 265s an import tag, an exception should be raised. 265s 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s """ 265s repo_builder.Repo( 265s commits=[repo_builder.Commit.from_spec(name='import1-1')], 265s tags={'importer/import/1-1': Placeholder('import1-1')}, 265s > ).write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:1499: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpz294_jm0/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_import_applied_spi_parenting[input_repo0-expected_ancestor_commits0-expected_parent_commits0] _ 265s 265s get_import_commit_msg_mock = 265s get_import_tag_msg_mock = 265s repo = 265s input_repo = 265s expected_ancestor_commits = ['refs/tags/importer/import/1-2'] 265s expected_parent_commits = ['refs/tags/importer/applied/1-1'] 265s 265s @pytest.mark.parametrize( 265s 'input_repo, expected_ancestor_commits, expected_parent_commits', [ 265s # In general, these tests do not set applied commit parents in the 265s # input repository since we have no mechanism to do that correctly, but 265s # this doesn't matter for the purposes of these tests. 265s 265s # if only one import tag exists, then it is the parent 265s pytest.param( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec( 265s name='unapplied1', 265s has_patches=True, 265s ), 265s repo_builder.Commit.from_spec( 265s parents=[Placeholder('unapplied1')], 265s name='unapplied2', 265s changelog_versions=['1-2', '1-1'], 265s has_patches=True, 265s ), 265s repo_builder.Commit.from_spec( 265s name='applied1', 265s patches_applied=True, 265s ), 265s ], 265s # no branches: technically not possible but branches are not 265s # relevant to the test 265s branches={}, 265s tags={ 265s 'importer/import/1-1': Placeholder('unapplied1'), 265s 'importer/import/1-2': Placeholder('unapplied2'), 265s 'importer/applied/1-1': Placeholder('applied1'), 265s }, 265s ), 265s ['refs/tags/importer/import/1-2'], 265s ['refs/tags/importer/applied/1-1'], 265s ), 265s 265s # if multiple import tags exist, then do they all end up as parents? 265s pytest.param( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec( 265s name='unapplied1', 265s has_patches=True, 265s ), 265s repo_builder.Commit.from_spec( 265s parents=[Placeholder('unapplied1')], 265s name='unapplied2', 265s changelog_versions=['1-2', '1-1'], 265s has_patches=True, 265s ), 265s repo_builder.Commit.from_spec( 265s parents=[Placeholder('unapplied1')], 265s name='unapplied2reimport', 265s changelog_versions=['1-2', '1-1'], 265s has_patches=True, 265s mutate='reimport tag', 265s ), 265s repo_builder.Commit.from_spec( 265s name='applied1', 265s patches_applied=True, 265s ), 265s ], 265s # no branches: technically not possible but branches are not 265s # relevant to the test 265s branches={}, 265s tags={ 265s 'importer/import/1-1': 265s Placeholder('unapplied1'), 265s 'importer/import/1-2': 265s Placeholder('unapplied2'), 265s 'importer/reimport/import/1-2/0': 265s Placeholder('unapplied2'), 265s 'importer/reimport/import/1-2/1': 265s Placeholder('unapplied2reimport'), 265s 'importer/applied/1-1': 265s Placeholder('applied1'), 265s }, 265s ), 265s [ 265s 'refs/tags/importer/reimport/import/1-2/0', 265s 'refs/tags/importer/reimport/import/1-2/1', 265s ], 265s [ 265s 'refs/tags/importer/applied/1-1', 265s ], 265s marks=pytest.mark.xfail(reason='LP: #1755247'), 265s ), 265s 265s # do we correctly create a reimport tag because a different import 265s # already exists? 265s pytest.param( 265s repo_builder.Repo( 265s commits=[ 265s repo_builder.Commit.from_spec( 265s name='unapplied1', 265s has_patches=True, 265s ), 265s repo_builder.Commit.from_spec( 265s name='unapplied1_reimport', 265s has_patches=True, 265s mutate='reimport contents', 265s ), 265s repo_builder.Commit.from_spec( 265s parents=[Placeholder('unapplied1')], 265s name='unapplied2', 265s changelog_versions=['1-2', '1-1'], 265s has_patches=True, 265s ), 265s repo_builder.Commit.from_spec( 265s name='applied1', 265s patches_applied=True, 265s ), 265s repo_builder.Commit.from_spec( 265s name='applied1_reimport', 265s patches_applied=True, 265s mutate='reimport contents', 265s ), 265s ], 265s # no branches: technically not possible but branches are not 265s # relevant to the test 265s branches={}, 265s tags={ 265s 'importer/import/1-1': 265s Placeholder('unapplied1'), 265s 'importer/reimport/import/1-1/0': 265s Placeholder('unapplied1'), 265s 'importer/reimport/import/1-1/1': 265s Placeholder('unapplied1_reimport'), 265s 'importer/import/1-2': 265s Placeholder('unapplied2'), 265s 'importer/applied/1-1': 265s Placeholder('applied1'), 265s 'importer/reimport/applied/1-1/0': 265s Placeholder('applied1'), 265s 'importer/reimport/applied/1-1/1': 265s Placeholder('applied1_reimport'), 265s }, 265s ), 265s [ 265s 'refs/tags/importer/reimport/import/1-2/0', 265s 'refs/tags/importer/reimport/import/1-2/1', 265s ], 265s [ 265s 'refs/tags/importer/reimport/applied/1-1/0', 265s 'refs/tags/importer/reimport/applied/1-1/1', 265s ], 265s marks=pytest.mark.xfail(reason='LP: #1755247'), 265s ), 265s ], 265s ) 265s @patch('gitubuntu.importer.get_import_tag_msg') 265s @patch('gitubuntu.importer.get_import_commit_msg') 265s def test_import_applied_spi_parenting( 265s get_import_commit_msg_mock, 265s get_import_tag_msg_mock, 265s repo, 265s input_repo, 265s expected_ancestor_commits, 265s expected_parent_commits, 265s ): 265s """Test that applied import commits have the right parents 265s 265s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 265s that determines the commit message to use for a given import 265s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 265s that determines the tag message to use for a given import 265s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 265s temporary output repository 265s :param repo_builder.Repo input_repo: input repository data 265s :param list(str) expected_ancestor_commits: list of commit-ish strings that 265s must be ancestors of the 'applied/1-2' tag following the applied import 265s :param list(str) expected_parent_commits: list of commit-ish strings that 265s must be parents of the 'applied/1-2' tag following the applied import. 265s 265s A fake package with version '1-2' that has a changelog parent of '1-1' is 265s imported on top of the provided input_repo. The test fails if any 265s of the expected_ancestor_commits or expected_parent_commits are not 265s present. 265s 265s This test is ugly because we do not yet have a programmatic way 265s to get the interstitial commits of the patch applications. 265s """ 265s # Match the repo_builder objects 265s get_import_tag_msg_mock.return_value = 'Test tag' 265s get_import_commit_msg_mock.return_value = b'Test commit' 265s 265s > input_repo.write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:1698: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp8nc24mj4/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: applying a 265s dpkg-source: info: applying b 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: applying a 265s dpkg-source: info: applying b 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: applying a 265s dpkg-source: info: applying b 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: applying a 265s dpkg-source: info: applying b 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: applying a 265s dpkg-source: info: applying b 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_authorship_date[False-Fri, 2 Feb 1971 12:34:56 +0100-expected_result0] __ 265s 265s repo = 265s override = False, input_string = 'Fri, 2 Feb 1971 12:34:56 +0100' 265s expected_result = (1971, 2, 2, 11, 34, 56, ...) 265s 265s @pytest.mark.parametrize(['override', 'input_string', 'expected_result'], [ 265s # Standard date that should parse and be used 265s (False, 'Fri, 2 Feb 1971 12:34:56 +0100', (1971, 2, 2, 11, 34, 56, 60)), 265s # Deliberately illegal date that cannot be parsed 265s (True, 'Failday, 30 Feb 1971 99:99:99 +9999', (1972, 3, 3, 12, 45, 57, 0)), 265s ]) 265s def test_authorship_date(repo, override, input_string, expected_result): 265s """Synthesized commit should use changelog or override when provided 265s 265s A synthesized commit should use the date of the changelog entry in the 265s usual case, or commit_date when an override is requested. 265s 265s :param GitUbuntuRepository repo: fixture providing a temporary 265s GitUbuntuRepository instance to use 265s :param bool override: whether a changelog date override should be requested 265s from import_unapplied_dsc() 265s :param str input_string: the timestamp part of the changelog entry to use 265s :param tuple expected_result: the expected author date of the synthesized 265s commit, specified as six parameters to datetime.datetime() followed by 265s the expected tz offset in minutes. 265s """ 265s spec = source_builder.SourceSpec(changelog_date=input_string) 265s with source_builder.Source(spec) as dsc_pathname: 265s > target.import_unapplied_dsc( 265s repo=repo, 265s version='1-1', 265s namespace='importer', 265s dist='ubuntu', 265s dsc_pathname=dsc_pathname, 265s head_name='ubuntu/focal', 265s skip_orig=True, 265s parent_overrides={}, 265s commit_date=datetime.datetime( 265s 1972, 265s 3, 265s 3, 265s 12, 265s 45, 265s 57, 265s tzinfo=datetime.timezone.utc, 265s ), 265s changelog_date_overrides=( 265s frozenset({'1-1'}) if override else frozenset() 265s ), 265s ) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:1815: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 265s commit, tag = find_or_create_unapplied_commit( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 265s changelog_parents = get_unapplied_import_parents( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 265s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 265s changelog = self.get_changelog_from_treeish(treeish) 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 265s return Changelog.from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:569: in from_treeish 265s blob = follow_symlinks_to_blob( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpjw4p7148/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s _ test_authorship_date[True-Failday, 30 Feb 1971 99:99:99 +9999-expected_result1] _ 265s 265s repo = 265s override = True, input_string = 'Failday, 30 Feb 1971 99:99:99 +9999' 265s expected_result = (1972, 3, 3, 12, 45, 57, ...) 265s 265s @pytest.mark.parametrize(['override', 'input_string', 'expected_result'], [ 265s # Standard date that should parse and be used 265s (False, 'Fri, 2 Feb 1971 12:34:56 +0100', (1971, 2, 2, 11, 34, 56, 60)), 265s # Deliberately illegal date that cannot be parsed 265s (True, 'Failday, 30 Feb 1971 99:99:99 +9999', (1972, 3, 3, 12, 45, 57, 0)), 265s ]) 265s def test_authorship_date(repo, override, input_string, expected_result): 265s """Synthesized commit should use changelog or override when provided 265s 265s A synthesized commit should use the date of the changelog entry in the 265s usual case, or commit_date when an override is requested. 265s 265s :param GitUbuntuRepository repo: fixture providing a temporary 265s GitUbuntuRepository instance to use 265s :param bool override: whether a changelog date override should be requested 265s from import_unapplied_dsc() 265s :param str input_string: the timestamp part of the changelog entry to use 265s :param tuple expected_result: the expected author date of the synthesized 265s commit, specified as six parameters to datetime.datetime() followed by 265s the expected tz offset in minutes. 265s """ 265s spec = source_builder.SourceSpec(changelog_date=input_string) 265s with source_builder.Source(spec) as dsc_pathname: 265s > target.import_unapplied_dsc( 265s repo=repo, 265s version='1-1', 265s namespace='importer', 265s dist='ubuntu', 265s dsc_pathname=dsc_pathname, 265s head_name='ubuntu/focal', 265s skip_orig=True, 265s parent_overrides={}, 265s commit_date=datetime.datetime( 265s 1972, 265s 3, 265s 3, 265s 12, 265s 45, 265s 57, 265s tzinfo=datetime.timezone.utc, 265s ), 265s changelog_date_overrides=( 265s frozenset({'1-1'}) if override else frozenset() 265s ), 265s ) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:1815: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 265s commit, tag = find_or_create_unapplied_commit( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 265s changelog_parents = get_unapplied_import_parents( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 265s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 265s changelog = self.get_changelog_from_treeish(treeish) 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 265s return Changelog.from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:569: in from_treeish 265s blob = follow_symlinks_to_blob( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmp6k4oi864/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: srcpkg/debian/changelog(l4): ignoring invalid week day 'Failday' 265s LINE: -- git ubuntu Failday, 30 Feb 1971 99:99:99 +9999 265s dpkg-source: warning: srcpkg/debian/changelog(l4): cannot parse non-conformant date '30 Feb 1971 99:99:99 +9999' 265s LINE: -- git ubuntu Failday, 30 Feb 1971 99:99:99 +9999 265s dpkg-source: warning: missing information for output field Standards-Version 265s __________________ test_fetch_rich_history_from_changes_file ___________________ 265s 265s repo = 265s pygit2_repo = pygit2.Repository('/tmp/tmpzse3xt01/.git/') 265s 265s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 265s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 265s def test_fetch_rich_history_from_changes_file(repo, pygit2_repo): 265s """Rich history specified in a changes file is found and validated""" 265s > rich_commit, parent_commit, import_tree = populate_rich_history( 265s import_repo=repo.raw_repo, 265s uploader_repo=pygit2_repo, 265s ) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:2111: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:2080: in populate_rich_history 265s ).write(import_repo) 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmphwtkv5tx/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s ________ test_fetch_rich_history_from_changes_file_fetch_failure_retry _________ 265s 265s repo = 265s pygit2_repo = pygit2.Repository('/tmp/tmp2l1pv74u/.git/') 265s 265s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 265s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 265s def test_fetch_rich_history_from_changes_file_fetch_failure_retry( 265s repo, 265s pygit2_repo, 265s ): 265s """If rich history cannot be fetched once, it is retried""" 265s > rich_commit, parent_commit, import_tree = populate_rich_history( 265s import_repo=repo.raw_repo, 265s uploader_repo=pygit2_repo, 265s ) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:2204: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:2080: in populate_rich_history 265s ).write(import_repo) 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp4rk9sg1u/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s ____________ test_fetch_rich_history_from_changes_file_missing_ref _____________ 265s 265s repo = 265s pygit2_repo = pygit2.Repository('/tmp/tmpi0pucz4u/.git/') 265s 265s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 265s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 265s def test_fetch_rich_history_from_changes_file_missing_ref( 265s repo, 265s pygit2_repo, 265s ): 265s """If rich history is specified but the ref cannot be found, a hard 265s exception is raised 265s """ 265s > rich_commit, _, _ = populate_rich_history( 265s import_repo=repo.raw_repo, 265s uploader_repo=pygit2_repo, 265s ) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:2243: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:2080: in populate_rich_history 265s ).write(import_repo) 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpotopry1r/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s ___________ test_fetch_rich_history_from_changes_file_missing_commit ___________ 265s 265s repo = 265s pygit2_repo = pygit2.Repository('/tmp/tmptw28ja5q/.git/') 265s 265s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 265s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 265s def test_fetch_rich_history_from_changes_file_missing_commit( 265s repo, 265s pygit2_repo, 265s ): 265s """If rich history is specified but the commit cannot be found, an 265s exception is raised 265s """ 265s > rich_commit, _, _ = populate_rich_history( 265s import_repo=repo.raw_repo, 265s uploader_repo=pygit2_repo, 265s ) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:2271: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:2080: in populate_rich_history 265s ).write(import_repo) 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpzan993pe/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s ____________ test_fetch_rich_history_from_changes_file_not_a_commit ____________ 265s 265s repo = 265s pygit2_repo = pygit2.Repository('/tmp/tmpi4meinuk/.git/') 265s 265s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 265s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 265s def test_fetch_rich_history_from_changes_file_not_a_commit(repo, pygit2_repo): 265s """If rich history is specified but the commit hash resolves to something 265s other than a commit, an exception is raised 265s """ 265s > rich_commit, _, _ = populate_rich_history( 265s import_repo=repo.raw_repo, 265s uploader_repo=pygit2_repo, 265s ) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:2297: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/importer_test.py:2080: in populate_rich_history 265s ).write(import_repo) 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpkagivfot/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s __________________________ test_reconstruct_changelog __________________________ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmpft4tkj2p/.git/') 265s monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x3ffb6b6dd60> 265s 265s @pytest.mark.skipif( 265s ENTRY_POINT_TYPE is None, 265s reason="Entry point testing not available", 265s ) 265s def test_reconstruct_changelog(pygit2_repo, monkeypatch): 265s '''The reconstruct-changelog endpoint should add the expected commit''' 265s monkeypatch.setenv('DEBFULLNAME', 'Test User') 265s monkeypatch.setenv('DEBEMAIL', 'test@example.com') 265s Repo( 265s commits=[ 265s Commit(tree=SourceTree(Source()), name='root'), 265s Commit( 265s tree=SourceTree(Source(spec=SourceSpec(mutate=1))), 265s message=' * Test changelog entry', 265s name='child', 265s parents=[Placeholder('root')], 265s ), 265s ], 265s tags={'root': Placeholder('root'), 'child': Placeholder('child')}, 265s > ).write(pygit2_repo) 265s 265s gitubuntu/integration_test.py:219: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpft4tkj2p/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s gitubuntu/repo_builder.py:389: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s dpkg-source: warning: missing information for output field Standards-Version 265s ___________________ TestObjectCreation.testRepoBranchesTags ____________________ 265s 265s self = 265s 265s def testRepoBranchesTags(self): 265s graph = Repo( 265s commits=[ 265s Commit( 265s Tree({}), 265s parents=[Placeholder('parent')], 265s name='child', 265s ), 265s Commit(Tree({}), name='parent'), 265s ], 265s branches={ 265s 'branch1': Placeholder('parent'), 265s 'branch2': Commit(Tree({'foo': Blob(b'qux')})), 265s }, 265s tags={ 265s 'tag1': Placeholder('child'), 265s 'tag2': Commit(Tree({'foo': Blob(b'quz')})), 265s }, 265s ) 265s > child_ref = graph.write(self.repo) 265s 265s gitubuntu/repo_builder_test.py:154: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpk3bspmlz/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s gitubuntu/repo_builder.py:389: AttributeError 265s ______________________ TestObjectCreation.testRepoTagger _______________________ 265s 265s self = 265s 265s def testRepoTagger(self): 265s """The tagger parameter should make it through to the tag""" 265s input_repo = Repo( 265s commits=[Commit(name='root')], 265s tags={'root': Placeholder('root')}, 265s tagger=pygit2.Signature( 265s 'Test Tagger', 265s 'test@example.com', 265s 1, 265s 2, 265s ), 265s ) 265s > input_repo.write(self.repo) 265s 265s gitubuntu/repo_builder_test.py:178: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpuzb7552u/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s gitubuntu/repo_builder.py:389: AttributeError 265s _______________________________ test_source_tree _______________________________ 265s 265s pygit2_repo = pygit2.Repository('/tmp/tmpgvia532_/.git/') 265s 265s def test_source_tree(pygit2_repo): 265s commit_str = Commit(SourceTree(Source())).write(pygit2_repo) 265s commit = pygit2_repo.get(commit_str) 265s > assert gitubuntu.git_repository.follow_symlinks_to_blob( 265s repo=pygit2_repo, 265s treeish_object=commit, 265s path='debian/changelog', 265s ) 265s 265s gitubuntu/repo_builder_test.py:190: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpgvia532_/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s gitubuntu/git_repository.py:68: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s ______________________________ test_preservation _______________________________ 265s 265s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_preservation0') 265s repo = 265s 265s def test_preservation(tmpdir, repo): 265s """An export followed by an import should preserve rich history 265s 265s Given a minimal repository that should be able to have upload tags be 265s exported, when we import the export result into a similar repository with a 265s subtly different upload tag in which the rich history should still apply, 265s the result should be a correctly reconstructed upload tag. 265s 265s :param py.path tmpdir: the pytest standard tmpdir fixture. 265s :param repo: our standard repo fixture. 265s """ 265s Repo( 265s commits=[ 265s Commit( 265s name='1', 265s tree=Tree({ 265s 'a': Blob(b'a'), 265s }), 265s ), 265s Commit( 265s name='2', 265s parents=[Placeholder('1')], 265s tree=Tree({ 265s 'a': Blob(b'ab'), 265s }), 265s ), 265s Commit( 265s name='3', 265s parents=[Placeholder('2')], 265s tree=Tree({ 265s 'a': Blob(b'abc'), 265s }), 265s ), 265s ], 265s tags={ 265s 'importer/import/1': Placeholder('1'), 265s 'importer/upload/2': Placeholder('3'), 265s } 265s > ).write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/rich_history_test.py:51: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmptazyqqmx/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s ______________________ test_preservation_multiple_parents ______________________ 265s 265s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_preservation_multiple_par0') 265s repo = 265s 265s def test_preservation_multiple_parents(tmpdir, repo): 265s """An export of rich history should omit multiple parent cases 265s 265s If an upload tag leads to multiple parents before we reach an import tag, 265s it should be excluded from the export as this type of upload tag is not 265s supported for rich history preservation. This test also serves to verify 265s code paths that handle the MultipleParentError exception in the export 265s code. 265s 265s :param py.path tmpdir: the pytest standard tmpdir fixture. 265s :param repo: our standard repo fixture. 265s """ 265s Repo( 265s commits=[ 265s Commit(name='1', message='a'), 265s Commit(name='2', message='b'), 265s Commit(name='child', parents=[Placeholder('1'), Placeholder('2')]), 265s ], 265s tags={ 265s 'importer/import/1': Placeholder('1'), 265s 'importer/upload/2': Placeholder('child'), 265s } 265s > ).write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/rich_history_test.py:102: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpbo16a9kr/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s _________________________ test_preservation_no_parents _________________________ 265s 265s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_preservation_no_parents0') 265s repo = 265s 265s def test_preservation_no_parents(tmpdir, repo): 265s """An export of rich history should omit no parent cases 265s 265s If an upload tag leads to no parents before we reach an import tag, 265s it should be excluded from the export as this type of upload tag is not 265s supported for rich history preservation. This test also serves to verify 265s code paths that handle the NoParentError exception in the export 265s code. 265s 265s :param py.path tmpdir: the pytest standard tmpdir fixture. 265s :param repo: our standard repo fixture. 265s """ 265s Repo( 265s commits=[ 265s Commit(name='1', message='a'), 265s Commit(name='2', message='b'), 265s ], 265s tags={ 265s 'importer/import/1': Placeholder('1'), 265s 'importer/upload/2': Placeholder('2'), 265s } 265s > ).write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/rich_history_test.py:129: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp26x0mou9/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s _____________ test_input_edge_cases[before_export0-before_import0] _____________ 265s 265s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_input_edge_cases_before_e0') 265s repo = 265s before_export = {'commits': [, , 'importer/upload/2': }} 265s before_import = {'commits': [], 'tags': {'importer/import/1': }} 265s 265s @pytest.mark.parametrize(['before_export', 'before_import'], [ 265s ( 265s # Commit messages with patch-like contents should not fail 265s 265s # If a commit message in rich history contains text in a patch-like 265s # format (such as a diff of some file), it should not prevent correct 265s # round-tripping. "git format-patch" followed by "git am" fails this 265s # test, for example. 265s { 265s 'commits': [ 265s Commit(name='1', message='a', tree=Tree({'a': Blob(b'a')})), 265s Commit( 265s name='2', 265s message='''First line 265s 265s Inline patch that isn't part of the real patch starts here 265s 265s --- a/foo 265s +++ b/foo 265s @@ -1 +1,2 @@ 265s foo 265s +bar 265s ''', 265s tree=Tree({'a': Blob(b'ab')}), 265s parents=[Placeholder('1')], 265s ), 265s ], 265s 'tags': { 265s 'importer/import/1': Placeholder('1'), 265s 'importer/upload/2': Placeholder('2'), 265s } 265s }, 265s { 265s 'commits': [ 265s Commit(name='b1', message='c', tree=Tree({'a': Blob(b'a')})), 265s ], 265s 'tags': {'importer/import/1': Placeholder('b1')}, 265s }, 265s ), 265s ( 265s # Commits that have no changes should round trip 265s { 265s 'commits': [ 265s Commit( 265s name='1', 265s message='a', 265s ), 265s Commit( 265s name='2', 265s message='b', 265s parents=[Placeholder('1')], 265s ), 265s ], 265s 'tags': { 265s 'importer/import/1': Placeholder('1'), 265s 'importer/upload/2': Placeholder('2'), 265s }, 265s }, 265s { 265s 'commits': [Commit(name='b1', message='c')], 265s 'tags': {'importer/import/1': Placeholder('b1')}, 265s }, 265s ), 265s ( 265s # Commits that have no commit message should round trip 265s { 265s 'commits': [ 265s Commit( 265s name='1', 265s message='a', 265s ), 265s Commit( 265s name='2', 265s message='', 265s tree=Tree({'a': Blob(b'a')}), 265s parents=[Placeholder('1')], 265s ), 265s ], 265s 'tags': { 265s 'importer/import/1': Placeholder('1'), 265s 'importer/upload/2': Placeholder('2'), 265s } 265s }, 265s { 265s 'commits': [Commit(name='b1', message='c')], 265s 'tags': {'importer/import/1': Placeholder('b1')}, 265s }, 265s ), 265s ]) 265s def test_input_edge_cases(tmpdir, repo, before_export, before_import): 265s """ 265s Edge cases in input rich history should reimport without failure 265s 265s Check that rich history preservation completes without an exception in 265s various cases. Details of each case are described in comments in the test 265s parameters above. 265s 265s Since these tests generally cover the mutated case (where rich history has 265s to be ported forward because parent commits have mutated), we must remove 265s and recreate the 'importer/import/1' tag so that it is different before 265s attempting reimport. This is done by deleting all ('importer/*') tags and 265s then using the before_import parameter to recreate it again. 265s 265s :param py.path tmpdir: the pytest standard tmpdir fixture. 265s :param GitUbuntuRepository repo: our standard repo fixture. 265s :param dict before_export: the parameters to supply to Repo() to construct 265s the repository that will be exported. 265s :param dict before_import: the parametsrs to supply to Repo() to add to the 265s repository before attempting reimport. 265s """ 265s > Repo(**before_export).write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/rich_history_test.py:260: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp7cexfvpf/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s _____________ test_input_edge_cases[before_export1-before_import1] _____________ 265s 265s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_input_edge_cases_before_e1') 265s repo = 265s before_export = {'commits': [, , 'importer/upload/2': }} 265s before_import = {'commits': [], 'tags': {'importer/import/1': }} 265s 265s @pytest.mark.parametrize(['before_export', 'before_import'], [ 265s ( 265s # Commit messages with patch-like contents should not fail 265s 265s # If a commit message in rich history contains text in a patch-like 265s # format (such as a diff of some file), it should not prevent correct 265s # round-tripping. "git format-patch" followed by "git am" fails this 265s # test, for example. 265s { 265s 'commits': [ 265s Commit(name='1', message='a', tree=Tree({'a': Blob(b'a')})), 265s Commit( 265s name='2', 265s message='''First line 265s 265s Inline patch that isn't part of the real patch starts here 265s 265s --- a/foo 265s +++ b/foo 265s @@ -1 +1,2 @@ 265s foo 265s +bar 265s ''', 265s tree=Tree({'a': Blob(b'ab')}), 265s parents=[Placeholder('1')], 265s ), 265s ], 265s 'tags': { 265s 'importer/import/1': Placeholder('1'), 265s 'importer/upload/2': Placeholder('2'), 265s } 265s }, 265s { 265s 'commits': [ 265s Commit(name='b1', message='c', tree=Tree({'a': Blob(b'a')})), 265s ], 265s 'tags': {'importer/import/1': Placeholder('b1')}, 265s }, 265s ), 265s ( 265s # Commits that have no changes should round trip 265s { 265s 'commits': [ 265s Commit( 265s name='1', 265s message='a', 265s ), 265s Commit( 265s name='2', 265s message='b', 265s parents=[Placeholder('1')], 265s ), 265s ], 265s 'tags': { 265s 'importer/import/1': Placeholder('1'), 265s 'importer/upload/2': Placeholder('2'), 265s }, 265s }, 265s { 265s 'commits': [Commit(name='b1', message='c')], 265s 'tags': {'importer/import/1': Placeholder('b1')}, 265s }, 265s ), 265s ( 265s # Commits that have no commit message should round trip 265s { 265s 'commits': [ 265s Commit( 265s name='1', 265s message='a', 265s ), 265s Commit( 265s name='2', 265s message='', 265s tree=Tree({'a': Blob(b'a')}), 265s parents=[Placeholder('1')], 265s ), 265s ], 265s 'tags': { 265s 'importer/import/1': Placeholder('1'), 265s 'importer/upload/2': Placeholder('2'), 265s } 265s }, 265s { 265s 'commits': [Commit(name='b1', message='c')], 265s 'tags': {'importer/import/1': Placeholder('b1')}, 265s }, 265s ), 265s ]) 265s def test_input_edge_cases(tmpdir, repo, before_export, before_import): 265s """ 265s Edge cases in input rich history should reimport without failure 265s 265s Check that rich history preservation completes without an exception in 265s various cases. Details of each case are described in comments in the test 265s parameters above. 265s 265s Since these tests generally cover the mutated case (where rich history has 265s to be ported forward because parent commits have mutated), we must remove 265s and recreate the 'importer/import/1' tag so that it is different before 265s attempting reimport. This is done by deleting all ('importer/*') tags and 265s then using the before_import parameter to recreate it again. 265s 265s :param py.path tmpdir: the pytest standard tmpdir fixture. 265s :param GitUbuntuRepository repo: our standard repo fixture. 265s :param dict before_export: the parameters to supply to Repo() to construct 265s the repository that will be exported. 265s :param dict before_import: the parametsrs to supply to Repo() to add to the 265s repository before attempting reimport. 265s """ 265s > Repo(**before_export).write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/rich_history_test.py:260: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmprr25xely/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s _____________ test_input_edge_cases[before_export2-before_import2] _____________ 265s 265s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_input_edge_cases_before_e2') 265s repo = 265s before_export = {'commits': [, , 'importer/upload/2': }} 265s before_import = {'commits': [], 'tags': {'importer/import/1': }} 265s 265s @pytest.mark.parametrize(['before_export', 'before_import'], [ 265s ( 265s # Commit messages with patch-like contents should not fail 265s 265s # If a commit message in rich history contains text in a patch-like 265s # format (such as a diff of some file), it should not prevent correct 265s # round-tripping. "git format-patch" followed by "git am" fails this 265s # test, for example. 265s { 265s 'commits': [ 265s Commit(name='1', message='a', tree=Tree({'a': Blob(b'a')})), 265s Commit( 265s name='2', 265s message='''First line 265s 265s Inline patch that isn't part of the real patch starts here 265s 265s --- a/foo 265s +++ b/foo 265s @@ -1 +1,2 @@ 265s foo 265s +bar 265s ''', 265s tree=Tree({'a': Blob(b'ab')}), 265s parents=[Placeholder('1')], 265s ), 265s ], 265s 'tags': { 265s 'importer/import/1': Placeholder('1'), 265s 'importer/upload/2': Placeholder('2'), 265s } 265s }, 265s { 265s 'commits': [ 265s Commit(name='b1', message='c', tree=Tree({'a': Blob(b'a')})), 265s ], 265s 'tags': {'importer/import/1': Placeholder('b1')}, 265s }, 265s ), 265s ( 265s # Commits that have no changes should round trip 265s { 265s 'commits': [ 265s Commit( 265s name='1', 265s message='a', 265s ), 265s Commit( 265s name='2', 265s message='b', 265s parents=[Placeholder('1')], 265s ), 265s ], 265s 'tags': { 265s 'importer/import/1': Placeholder('1'), 265s 'importer/upload/2': Placeholder('2'), 265s }, 265s }, 265s { 265s 'commits': [Commit(name='b1', message='c')], 265s 'tags': {'importer/import/1': Placeholder('b1')}, 265s }, 265s ), 265s ( 265s # Commits that have no commit message should round trip 265s { 265s 'commits': [ 265s Commit( 265s name='1', 265s message='a', 265s ), 265s Commit( 265s name='2', 265s message='', 265s tree=Tree({'a': Blob(b'a')}), 265s parents=[Placeholder('1')], 265s ), 265s ], 265s 'tags': { 265s 'importer/import/1': Placeholder('1'), 265s 'importer/upload/2': Placeholder('2'), 265s } 265s }, 265s { 265s 'commits': [Commit(name='b1', message='c')], 265s 'tags': {'importer/import/1': Placeholder('b1')}, 265s }, 265s ), 265s ]) 265s def test_input_edge_cases(tmpdir, repo, before_export, before_import): 265s """ 265s Edge cases in input rich history should reimport without failure 265s 265s Check that rich history preservation completes without an exception in 265s various cases. Details of each case are described in comments in the test 265s parameters above. 265s 265s Since these tests generally cover the mutated case (where rich history has 265s to be ported forward because parent commits have mutated), we must remove 265s and recreate the 'importer/import/1' tag so that it is different before 265s attempting reimport. This is done by deleting all ('importer/*') tags and 265s then using the before_import parameter to recreate it again. 265s 265s :param py.path tmpdir: the pytest standard tmpdir fixture. 265s :param GitUbuntuRepository repo: our standard repo fixture. 265s :param dict before_export: the parameters to supply to Repo() to construct 265s the repository that will be exported. 265s :param dict before_import: the parametsrs to supply to Repo() to add to the 265s repository before attempting reimport. 265s """ 265s > Repo(**before_export).write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/rich_history_test.py:260: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmp22eahka6/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s _______________________ test_preservation_fast_forwards ________________________ 265s 265s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_preservation_fast_forward0') 265s repo = 265s 265s def test_preservation_fast_forwards(tmpdir, repo): 265s """Rich history that can be fast forwarded should not mutate 265s 265s :param py.path tmpdir: the pytest standard tmpdir fixture. 265s :param GitUbuntuRepository repo: our standard repo fixture. 265s """ 265s Repo( 265s commits=[ 265s Commit( 265s name='1', 265s message='a', 265s ), 265s Commit( 265s name='2', 265s message='', 265s tree=Tree({'a': Blob(b'a')}), 265s parents=[Placeholder('1')], 265s ), 265s ], 265s tags={ 265s 'importer/import/1': Placeholder('1'), 265s 'importer/upload/2': Placeholder('2'), 265s } 265s > ).write(repo.raw_repo) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/rich_history_test.py:294: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s self = 265s repo = pygit2.Repository('/tmp/tmpacwltb24/.git/'), record = {} 265s 265s def write(self, repo, record=None): 265s replace_placeholders(self) 265s record = record or dict() 265s written_commits = [ 265s commit.write(repo=repo, record=record) 265s for commit 265s in self.commit_list 265s ] 265s for name, target in self.branches.items(): 265s repo.create_branch( 265s name, 265s repo.get(target.write(repo)).peel(pygit2.Commit), 265s ) 265s for name, target in self.tags.items(): 265s repo.create_tag( 265s name, 265s target.write(repo), 265s > pygit2.GIT_OBJ_COMMIT, 265s self.tagger.signature, 265s 'Tag message', 265s ) 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/repo_builder.py:389: AttributeError 265s _______________________ test_source_create_with_version ________________________ 265s 265s repo = 265s 265s def test_source_create_with_version(repo): 265s > version = get_spec_changelog_version(repo, version='3', native=True) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/source_builder_test.py:57: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 265s changelog = repo.get_changelog_from_treeish(tree_hash) 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 265s return Changelog.from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:569: in from_treeish 265s blob = follow_symlinks_to_blob( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpg4i8bb3j/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (native)' 265s dpkg-source: info: building source-builder-package in source-builder-package_3.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_3.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s _______________________ test_source_create_with_versions _______________________ 265s 265s repo = 265s 265s def test_source_create_with_versions(repo): 265s source_spec = target.SourceSpec(changelog_versions=['3', '4'], native=True) 265s with target.Source(source_spec) as f: 265s tree_hash = importer.dsc_to_tree_hash(repo.raw_repo, f) 265s > changelog = repo.get_changelog_from_treeish(tree_hash) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/source_builder_test.py:65: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 265s return Changelog.from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:569: in from_treeish 265s blob = follow_symlinks_to_blob( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmp0c22sp1f/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (native)' 265s dpkg-source: info: building source-builder-package in source-builder-package_3.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_3.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s ____________ test_source_native_source_format[True-3.0 (native)\n] _____________ 265s 265s repo = 265s native = True, expected = b'3.0 (native)\n' 265s 265s @pytest.mark.parametrize('native,expected', [ 265s (True, b"3.0 (native)\n"), 265s (False, b"3.0 (quilt)\n"), 265s ]) 265s def test_source_native_source_format(repo, native, expected): 265s with target.Source(target.SourceSpec(native=native)) as dsc_path: 265s > blob = git_repository.follow_symlinks_to_blob( 265s repo.raw_repo, 265s dsc_path_to_tree(repo, dsc_path), 265s 'debian/source/format', 265s ) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/source_builder_test.py:133: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpqeokxieq/.git/') 265s top_tree_object = 265s search_path = 'debian/source/format' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (native)' 265s dpkg-source: info: building source-builder-package in source-builder-package_1.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s ____________ test_source_native_source_format[False-3.0 (quilt)\n] _____________ 265s 265s repo = 265s native = False, expected = b'3.0 (quilt)\n' 265s 265s @pytest.mark.parametrize('native,expected', [ 265s (True, b"3.0 (native)\n"), 265s (False, b"3.0 (quilt)\n"), 265s ]) 265s def test_source_native_source_format(repo, native, expected): 265s with target.Source(target.SourceSpec(native=native)) as dsc_path: 265s > blob = git_repository.follow_symlinks_to_blob( 265s repo.raw_repo, 265s dsc_path_to_tree(repo, dsc_path), 265s 'debian/source/format', 265s ) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/source_builder_test.py:133: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpt6df6_6p/.git/') 265s top_tree_object = 265s search_path = 'debian/source/format' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s _________________________ test_source_quilt_no_patches _________________________ 265s 265s repo = 265s 265s def test_source_quilt_no_patches(repo): 265s with target.Source(target.SourceSpec()) as dsc_path: 265s top = dsc_path_to_tree(repo, dsc_path) 265s debian_entry = top['debian'] 265s > assert debian_entry.type in [pygit2.GIT_OBJ_TREE, 'tree'] 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/source_builder_test.py:144: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s ________________________ test_source_quilt_with_patches ________________________ 265s 265s repo = 265s 265s def test_source_quilt_with_patches(repo): 265s spec = target.SourceSpec(has_patches=True) 265s with target.Source(spec) as dsc_path: 265s top = dsc_path_to_tree(repo, dsc_path) 265s expected_files = ['series', 'a', 'b'] 265s for basename in expected_files: 265s > assert git_repository.follow_symlinks_to_blob( 265s repo.raw_repo, 265s top, 265s 'debian/patches/%s' % basename, 265s ) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/source_builder_test.py:156: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpto4vilbt/.git/') 265s top_tree_object = 265s search_path = 'debian/patches/series' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: applying a 265s dpkg-source: info: applying b 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s ____________________ test_source_quilt_with_patches_applied ____________________ 265s 265s repo = 265s 265s def test_source_quilt_with_patches_applied(repo): 265s spec = target.SourceSpec(has_patches=True) 265s with target.Source(spec) as dsc_path: 265s top = dsc_path_to_tree(repo, dsc_path, patches_applied=True) 265s expected_files = [ 265s 'debian/patches/series', 265s 'debian/patches/a', 265s 'debian/patches/b', 265s 'a', 265s 'b', 265s ] 265s for filename in expected_files: 265s > assert git_repository.follow_symlinks_to_blob( 265s repo.raw_repo, 265s top, 265s filename, 265s ) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/source_builder_test.py:183: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpn074hudb/.git/') 265s top_tree_object = 265s search_path = 'debian/patches/series' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: applying a 265s dpkg-source: info: applying b 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: using patch list from debian/patches/series 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s ______________________ test_source_version_native_default ______________________ 265s 265s repo = 265s 265s def test_source_version_native_default(repo): 265s """The default version string for a native package should not have a 265s '-' in it. 265s """ 265s > version = get_spec_changelog_version(repo, native=True) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/source_builder_test.py:194: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 265s changelog = repo.get_changelog_from_treeish(tree_hash) 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 265s return Changelog.from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:569: in from_treeish 265s blob = follow_symlinks_to_blob( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpj8z73zfz/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (native)' 265s dpkg-source: info: building source-builder-package in source-builder-package_1.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s ____________________ test_source_version_non_native_default ____________________ 265s 265s repo = 265s 265s def test_source_version_non_native_default(repo): 265s """The default version string for a non-native package should have a 265s '-' in it. 265s """ 265s > version = get_spec_changelog_version(repo, native=False) 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/source_builder_test.py:202: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 265s changelog = repo.get_changelog_from_treeish(tree_hash) 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 265s return Changelog.from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:569: in from_treeish 265s blob = follow_symlinks_to_blob( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmp67m2w7qm/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s _____________________ test_source_version_native_specific ______________________ 265s 265s repo = 265s 265s def test_source_version_native_specific(repo): 265s """We should be able to create a native package with a 265s native-looking version string. 265s """ 265s > version = get_spec_changelog_version(repo, native=True, version='1.0') 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/source_builder_test.py:210: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 265s changelog = repo.get_changelog_from_treeish(tree_hash) 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 265s return Changelog.from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:569: in from_treeish 265s blob = follow_symlinks_to_blob( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpdsv5t0kl/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (native)' 265s dpkg-source: info: building source-builder-package in source-builder-package_1.0.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1.0.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s ___________________ test_source_version_non_native_specific ____________________ 265s 265s repo = 265s 265s def test_source_version_non_native_specific(repo): 265s """We should be able to create a non-native package with a 265s non-native-looking version string. 265s """ 265s > version = get_spec_changelog_version(repo, native=False, version='1.0-1') 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/source_builder_test.py:218: 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 265s changelog = repo.get_changelog_from_treeish(tree_hash) 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 265s return Changelog.from_treeish( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:569: in from_treeish 265s blob = follow_symlinks_to_blob( 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 265s return _follow_symlinks_to_blob( 265s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265s 265s repo = pygit2.Repository('/tmp/tmpui1u_35h/.git/') 265s top_tree_object = 265s search_path = 'debian/changelog' 265s _rel_tree = 265s _rel_path = '' 265s 265s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 265s _rel_tree=None, _rel_path='' 265s ): 265s '''Recursively follow a path down a tree, following symlinks, to find blob 265s 265s repo: pygit2.Repository object 265s top_tree: pygit2.Tree object of the top of the tree structure 265s search_path: '/'-separated path string of blob to find 265s _rel_tree: (internal) which tree to look further into 265s _rel_path: (internal) the path we are in so far 265s ''' 265s 265s NORMAL_BLOB_MODES = set([ 265s pygit2.GIT_FILEMODE_BLOB, 265s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 265s ]) 265s 265s _rel_tree = _rel_tree or top_tree_object 265s head, tail = posixpath.split(search_path) 265s 265s # A traditional functional split would put a single entry in head with tail 265s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 265s # to make it appear to have traditional semantics. 265s if not head: 265s head = tail 265s tail = None 265s 265s entry = _rel_tree[head] 265s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 265s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 265s 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/git_repository.py:68: AttributeError 265s ----------------------------- Captured stdout call ----------------------------- 265s dpkg-source: info: using source format '3.0 (quilt)' 265s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.0.orig.tar.gz 265s dpkg-source: info: building source-builder-package in source-builder-package_1.0-1.debian.tar.xz 265s dpkg-source: info: building source-builder-package in source-builder-package_1.0-1.dsc 265s ----------------------------- Captured stderr call ----------------------------- 265s dpkg-source: warning: missing information for output field Standards-Version 265s =============================== warnings summary =============================== 265s gitubuntu/__main__.py:7 265s /tmp/autopkgtest.mn2my0/build.QvA/src/gitubuntu/__main__.py:7: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html 265s import pkg_resources 265s 265s ../../../../usr/lib/python3/dist-packages/pkg_resources/__init__.py:3154 265s /usr/lib/python3/dist-packages/pkg_resources/__init__.py:3154: DeprecationWarning: Deprecated call to `pkg_resources.declare_namespace('logilab')`. 265s 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 265s declare_namespace(pkg) 265s 265s -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html 265s 265s ---------- coverage: platform linux, python 3.12.7-final-0 ----------- 265s Name Stmts Miss Cover 265s --------------------------------------------------------------- 265s gitubuntu/__init__.py 0 0 100% 265s gitubuntu/__main__.py 103 94 9% 265s gitubuntu/build.py 185 131 29% 265s gitubuntu/cache.py 1 0 100% 265s gitubuntu/clone.py 70 54 23% 265s gitubuntu/dsc.py 65 16 75% 265s gitubuntu/exportorig.py 48 37 23% 265s gitubuntu/git_repository.py 1103 521 53% 265s gitubuntu/git_repository_test.py 316 40 87% 265s gitubuntu/importer.py 707 446 37% 265s gitubuntu/importer_service.py 215 22 90% 265s gitubuntu/importer_service_broker.py 60 49 18% 265s gitubuntu/importer_service_ipc.py 12 2 83% 265s gitubuntu/importer_service_poller.py 37 25 32% 265s gitubuntu/importer_service_test.py 147 0 100% 265s gitubuntu/importer_service_worker.py 87 64 26% 265s gitubuntu/importer_service_worker_test.py 18 0 100% 265s gitubuntu/importer_tag_test.py 47 20 57% 265s gitubuntu/importer_test.py 388 133 66% 265s gitubuntu/integration_test.py 67 26 61% 265s gitubuntu/logging.py 8 4 50% 265s gitubuntu/merge.py 219 192 12% 265s gitubuntu/patch_state.py 2 0 100% 265s gitubuntu/prepare_upload.py 86 3 97% 265s gitubuntu/prepare_upload_test.py 152 0 100% 265s gitubuntu/queue.py 174 148 15% 265s gitubuntu/remote.py 100 85 15% 265s gitubuntu/repo_builder.py 162 0 100% 265s gitubuntu/repo_builder_test.py 159 12 92% 265s gitubuntu/repo_comparator.py 32 25 22% 265s gitubuntu/rich_history.py 67 45 33% 265s gitubuntu/rich_history_test.py 53 31 42% 265s gitubuntu/run.py 72 12 83% 265s gitubuntu/scriptutils.py 11 0 100% 265s gitubuntu/source_builder.py 119 0 100% 265s gitubuntu/source_builder_test.py 105 18 83% 265s gitubuntu/source_information.py 339 133 61% 265s gitubuntu/source_information_test.py 78 3 96% 265s gitubuntu/spec.py 3 0 100% 265s gitubuntu/submit.py 103 86 17% 265s gitubuntu/tag.py 78 69 12% 265s gitubuntu/test_fixtures.py 29 5 83% 265s gitubuntu/test_util.py 5 0 100% 265s gitubuntu/version.py 1 0 100% 265s gitubuntu/versioning.py 124 16 87% 265s --------------------------------------------------------------- 265s TOTAL 5957 2567 57% 265s 265s =========================== short test summary info ============================ 265s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[0] 265s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[1] 265s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[2] 265s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[3] 265s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[4] 265s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob_not_found[tree1] 265s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob_not_found[tree2] 265s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob_not_found[tree3] 265s FAILED gitubuntu/git_repository_test.py::test_git_escape_dir_to_tree - Attrib... 265s FAILED gitubuntu/git_repository_test.py::test_determine_quilt_series_path[tree_data1-debian/patches/series] 265s FAILED gitubuntu/git_repository_test.py::test_determine_quilt_series_path[tree_data2-debian/patches/series] 265s FAILED gitubuntu/git_repository_test.py::test_determine_quilt_series_path[tree_data3-debian/patches/debian.series] 265s FAILED gitubuntu/git_repository_test.py::test_determine_quilt_series_path[tree_data4-debian/patches/debian.series] 265s FAILED gitubuntu/git_repository_test.py::test_quilt_env - AttributeError: mod... 265s FAILED gitubuntu/git_repository_test.py::test_repo_quilt_env - AttributeError... 265s FAILED gitubuntu/git_repository_test.py::test_repo_quilt_env_from_treeish_str 265s 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] 265s 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] 265s 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] 265s FAILED gitubuntu/git_repository_test.py::test_commit_tree - AttributeError: m... 265s FAILED gitubuntu/git_repository_test.py::test_descendant_of[root-root-False] 265s FAILED gitubuntu/git_repository_test.py::test_descendant_of[child1-root-True] 265s FAILED gitubuntu/git_repository_test.py::test_descendant_of[root-child1-False] 265s FAILED gitubuntu/git_repository_test.py::test_descendant_of[grandchild1-root-True] 265s FAILED gitubuntu/git_repository_test.py::test_descendant_of[child1-child2-False] 265s FAILED gitubuntu/git_repository_test.py::test_descendant_of[root-disjoint-False] 265s FAILED gitubuntu/git_repository_test.py::test_create_tag - AttributeError: mo... 265s FAILED gitubuntu/git_repository_test.py::test_get_all_reimport_tags - Attribu... 265s FAILED gitubuntu/git_repository_test.py::test_get_head_info - AttributeError:... 265s 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] 265s 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] 265s 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] 265s 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] 265s 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] 265s 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] 265s 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] 265s 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] 265s FAILED gitubuntu/importer_tag_test.py::test_import_applied_spi_tags[input_repo0-validation_repo_delta0-validation_repo_expected_treewise_refs0-True] 265s FAILED gitubuntu/importer_tag_test.py::test_import_applied_spi_tags[input_repo2-validation_repo_delta2-validation_repo_expected_treewise_refs2-False] 265s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags[input_repo1-PatchState.UNAPPLIED-expected1] 265s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags[input_repo2-PatchState.UNAPPLIED-expected2] 265s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags[input_repo4-PatchState.APPLIED-expected4] 265s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags[input_repo5-PatchState.APPLIED-expected5] 265s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags_ordering - A... 265s FAILED gitubuntu/importer_test.py::test_create_import_tag[input_repo0-validation_repo_delta0-validation_repo_expected_identical_refs0] 265s FAILED gitubuntu/importer_test.py::test_create_import_tag[input_repo1-validation_repo_delta1-validation_repo_expected_identical_refs1] 265s FAILED gitubuntu/importer_test.py::test_create_import_tag[input_repo2-validation_repo_delta2-validation_repo_expected_identical_refs2] 265s FAILED gitubuntu/importer_test.py::test_create_import_tag_hash_stability_on_first_import 265s FAILED gitubuntu/importer_test.py::test_create_import_tag_hash_stability_on_reimport 265s FAILED gitubuntu/importer_test.py::test_create_applied_tag[input_repo0-validation_repo_delta0-validation_repo_expected_identical_refs0] 265s FAILED gitubuntu/importer_test.py::test_create_applied_tag[input_repo1-validation_repo_delta1-validation_repo_expected_identical_refs1] 265s FAILED gitubuntu/importer_test.py::test_create_applied_tag[input_repo2-validation_repo_delta2-validation_repo_expected_identical_refs2] 265s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo1-parent_overrides1-changelog_versions1-PatchState.UNAPPLIED-expected_refs1] 265s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo2-parent_overrides2-changelog_versions2-PatchState.UNAPPLIED-expected_refs2] 265s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo3-parent_overrides3-changelog_versions3-PatchState.UNAPPLIED-expected_refs3] 265s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo5-parent_overrides5-changelog_versions5-PatchState.APPLIED-expected_refs5] 265s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo6-parent_overrides6-changelog_versions6-PatchState.APPLIED-expected_refs6] 265s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo7-parent_overrides7-changelog_versions7-PatchState.APPLIED-expected_refs7] 265s FAILED gitubuntu/importer_test.py::test_validate_rich_history[input_repo0-published_spec0-True] 265s FAILED gitubuntu/importer_test.py::test_validate_rich_history[input_repo1-published_spec1-True] 265s FAILED gitubuntu/importer_test.py::test_validate_rich_history[input_repo2-published_spec2-RichHistoryTreeMismatch] 265s FAILED gitubuntu/importer_test.py::test_validate_rich_history[input_repo3-published_spec3-RichHistoryHasNoChangelogParentAncestor] 265s FAILED gitubuntu/importer_test.py::test_add_changelog_note_to_commit - Attrib... 265s FAILED gitubuntu/importer_test.py::test_add_changelog_note_to_commit_utf8 - A... 265s FAILED gitubuntu/importer_test.py::test_double_changelog_note_add_does_not_fail 265s FAILED gitubuntu/importer_test.py::test_create_import_note - AttributeError: ... 265s FAILED gitubuntu/importer_test.py::test_create_import_note_timestamp - Attrib... 265s FAILED gitubuntu/importer_test.py::test_import_creates_import_note - Attribut... 265s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_quilt_patches - ... 265s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parenting[input_repo0-changelog_versions0-validation_repo_delta0-validation_repo_expected_identical_refs0] 265s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parenting[input_repo1-changelog_versions1-validation_repo_delta1-validation_repo_expected_identical_refs1] 265s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parenting[input_repo2-changelog_versions2-validation_repo_delta2-validation_repo_expected_identical_refs2] 265s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parenting[input_repo3-changelog_versions3-validation_repo_delta3-validation_repo_expected_identical_refs3] 265s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parent_override 265s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parent_override_failure 265s FAILED gitubuntu/importer_test.py::test_import_applied_spi_parenting[input_repo0-expected_ancestor_commits0-expected_parent_commits0] 265s FAILED gitubuntu/importer_test.py::test_authorship_date[False-Fri, 2 Feb 1971 12:34:56 +0100-expected_result0] 265s FAILED gitubuntu/importer_test.py::test_authorship_date[True-Failday, 30 Feb 1971 99:99:99 +9999-expected_result1] 265s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file 265s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file_fetch_failure_retry 265s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file_missing_ref 265s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file_missing_commit 265s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file_not_a_commit 265s FAILED gitubuntu/integration_test.py::test_reconstruct_changelog - AttributeE... 265s FAILED gitubuntu/repo_builder_test.py::TestObjectCreation::testRepoBranchesTags 265s FAILED gitubuntu/repo_builder_test.py::TestObjectCreation::testRepoTagger - A... 265s FAILED gitubuntu/repo_builder_test.py::test_source_tree - AttributeError: mod... 265s FAILED gitubuntu/rich_history_test.py::test_preservation - AttributeError: mo... 265s FAILED gitubuntu/rich_history_test.py::test_preservation_multiple_parents - A... 265s FAILED gitubuntu/rich_history_test.py::test_preservation_no_parents - Attribu... 265s FAILED gitubuntu/rich_history_test.py::test_input_edge_cases[before_export0-before_import0] 265s FAILED gitubuntu/rich_history_test.py::test_input_edge_cases[before_export1-before_import1] 265s FAILED gitubuntu/rich_history_test.py::test_input_edge_cases[before_export2-before_import2] 265s FAILED gitubuntu/rich_history_test.py::test_preservation_fast_forwards - Attr... 265s FAILED gitubuntu/source_builder_test.py::test_source_create_with_version - At... 265s FAILED gitubuntu/source_builder_test.py::test_source_create_with_versions - A... 265s FAILED gitubuntu/source_builder_test.py::test_source_native_source_format[True-3.0 (native)\n] 265s FAILED gitubuntu/source_builder_test.py::test_source_native_source_format[False-3.0 (quilt)\n] 265s FAILED gitubuntu/source_builder_test.py::test_source_quilt_no_patches - Attri... 265s FAILED gitubuntu/source_builder_test.py::test_source_quilt_with_patches - Att... 265s FAILED gitubuntu/source_builder_test.py::test_source_quilt_with_patches_applied 265s FAILED gitubuntu/source_builder_test.py::test_source_version_native_default 265s FAILED gitubuntu/source_builder_test.py::test_source_version_non_native_default 265s FAILED gitubuntu/source_builder_test.py::test_source_version_native_specific 265s FAILED gitubuntu/source_builder_test.py::test_source_version_non_native_specific 265s ====== 105 failed, 348 passed, 3 skipped, 3 xfailed, 2 warnings in 53.53s ====== 265s pytest failed; self test will fail 266s autopkgtest [23:21:45]: test self-test: -----------------------] 266s autopkgtest [23:21:45]: test self-test: - - - - - - - - - - results - - - - - - - - - - 266s self-test FAIL non-zero exit status 1 267s autopkgtest [23:21:46]: @@@@@@@@@@@@@@@@@@@@ summary 267s self-test FAIL non-zero exit status 1 278s nova [W] Using flock in prodstack6-s390x 278s flock: timeout while waiting to get lock 278s Creating nova instance adt-plucky-s390x-git-ubuntu-20241128-231719-juju-7f2275-prod-proposed-migration-environment-2-a6abbbe8-fe56-4516-8280-635c143225ea from image adt/ubuntu-plucky-s390x-server-20241128.img (UUID c33169e3-d7b9-4c3f-97d1-5abdde151062)...