0s autopkgtest [09:33:42]: starting date and time: 2024-11-26 09:33:42+0000 0s autopkgtest [09:33:42]: git checkout: 6408f825 Correct logic in old-systemd fallback code 0s autopkgtest [09:33:42]: host juju-7f2275-prod-proposed-migration-environment-9; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.r7o3k3fj/out --timeout-copy=6000 --setup-commands 'ln -s /dev/null /etc/systemd/system/bluetooth.service; printf "http_proxy=http://squid.internal:3128\nhttps_proxy=http://squid.internal:3128\nno_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\n" >> /etc/environment' --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 -- lxd -r lxd-armhf-10.145.243.115 lxd-armhf-10.145.243.115:autopkgtest/ubuntu/plucky/armhf 65s autopkgtest [09:34:47]: testbed dpkg architecture: armhf 67s autopkgtest [09:34:49]: testbed apt version: 2.9.14ubuntu1 67s autopkgtest [09:34:49]: @@@@@@@@@@@@@@@@@@@@ test bed setup 76s Get:1 http://ftpmaster.internal/ubuntu plucky-proposed InRelease [73.9 kB] 76s Get:2 http://ftpmaster.internal/ubuntu plucky-proposed/main Sources [58.7 kB] 76s Get:3 http://ftpmaster.internal/ubuntu plucky-proposed/universe Sources [811 kB] 77s Get:4 http://ftpmaster.internal/ubuntu plucky-proposed/multiverse Sources [14.2 kB] 77s Get:5 http://ftpmaster.internal/ubuntu plucky-proposed/restricted Sources [9708 B] 77s Get:6 http://ftpmaster.internal/ubuntu plucky-proposed/main armhf Packages [67.4 kB] 77s Get:7 http://ftpmaster.internal/ubuntu plucky-proposed/restricted armhf Packages [928 B] 77s Get:8 http://ftpmaster.internal/ubuntu plucky-proposed/universe armhf Packages [596 kB] 77s Get:9 http://ftpmaster.internal/ubuntu plucky-proposed/multiverse armhf Packages [6096 B] 77s Fetched 1638 kB in 1s (1517 kB/s) 77s Reading package lists... 97s tee: /proc/self/fd/2: Permission denied 119s Hit:1 http://ftpmaster.internal/ubuntu plucky-proposed InRelease 119s Hit:2 http://ftpmaster.internal/ubuntu plucky InRelease 119s Hit:3 http://ftpmaster.internal/ubuntu plucky-updates InRelease 119s Hit:4 http://ftpmaster.internal/ubuntu plucky-security InRelease 120s Reading package lists... 120s Reading package lists... 121s Building dependency tree... 121s Reading state information... 121s Calculating upgrade... 122s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 122s Reading package lists... 122s Building dependency tree... 122s Reading state information... 123s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 125s autopkgtest [09:35:47]: rebooting testbed after setup commands that affected boot 212s autopkgtest [09:37:14]: testbed running kernel: Linux 6.8.0-49-generic #49~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 6 18:12:14 UTC 2 256s autopkgtest [09:37:58]: @@@@@@@@@@@@@@@@@@@@ apt-source git-ubuntu 271s Get:1 http://ftpmaster.internal/ubuntu plucky/universe git-ubuntu 1.1-1 (dsc) [2280 B] 271s Get:2 http://ftpmaster.internal/ubuntu plucky/universe git-ubuntu 1.1-1 (tar) [179 kB] 271s Get:3 http://ftpmaster.internal/ubuntu plucky/universe git-ubuntu 1.1-1 (diff) [5776 B] 272s gpgv: Signature made Wed Jul 3 16:18:24 2024 UTC 272s gpgv: using RSA key A62D2CFBD50B9B5BF360D54B159EB5C4EFC8774C 272s gpgv: Can't check signature: No public key 272s dpkg-source: warning: cannot verify inline signature for ./git-ubuntu_1.1-1.dsc: no acceptable signature found 272s autopkgtest [09:38:14]: testing package git-ubuntu version 1.1-1 275s autopkgtest [09:38:17]: build not needed 278s autopkgtest [09:38:20]: test self-test: preparing testbed 290s Reading package lists... 290s Building dependency tree... 290s Reading state information... 291s Starting pkgProblemResolver with broken count: 0 291s Starting 2 pkgProblemResolver with broken count: 0 291s Done 291s The following additional packages will be installed: 291s dctrl-tools debian-archive-keyring devscripts diffstat dput gettext git 291s git-buildpackage git-man git-ubuntu libb-hooks-op-check-perl 291s libclass-method-modifiers-perl libclass-xsaccessor-perl libclone-perl 291s libdevel-callchecker-perl libdynaloader-functions-perl libencode-locale-perl 291s liberror-perl libfile-dirlist-perl libfile-homedir-perl libfile-listing-perl 291s libfile-touch-perl libfile-which-perl libgit2-1.8 libgomp1 291s libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl 291s libhttp-cookies-perl libhttp-date-perl libhttp-message-perl 291s libhttp-negotiate-perl libhttp-parser2.9 libimport-into-perl libio-html-perl 291s libio-pty-perl libio-socket-ssl-perl libipc-run-perl libjs-jquery 292s libjs-jquery-hotkeys libjs-jquery-isonscreen libjs-jquery-metadata 292s libjs-jquery-tablesorter libjs-jquery-throttle-debounce libjs-sphinxdoc 292s libjs-underscore liblwp-mediatypes-perl liblwp-protocol-https-perl 292s libmodule-runtime-perl libmoo-perl libnet-http-perl libnet-ssleay-perl 292s libnorm1t64 libparams-classify-perl libpgm-5.3-0t64 libpython3.13-minimal 292s libpython3.13-stdlib librole-tiny-perl libsodium23 libsub-quote-perl 292s libsys-cpuaffinity-perl libtimedate-perl libtry-tiny-perl liburi-perl 292s libwww-perl libwww-robotrules-perl libxdelta2t64 libzmq5 patchutils pbzip2 292s perl-openssl-defaults pixz pristine-tar pylint python3-argcomplete 292s python3-astroid python3-cachetools python3-coverage python3-dateutil 292s python3-debian python3-debianbts python3-dill python3-distro-info 292s python3-gpg python3-importlib-metadata python3-iniconfig python3-isort 292s python3-jaraco.classes python3-jeepney python3-keyring python3-keyrings.alt 292s python3-launchpadlib-desktop python3-logilab-common python3-mccabe 292s python3-mypy-extensions python3-packaging python3-platformdirs 292s python3-pluggy python3-py python3-pycryptodome python3-pygit2 python3-pytest 292s python3-pytest-cov python3-secretstorage python3-tenacity python3-tomlkit 292s python3-ubuntutools python3-xdg python3-zmq python3.13 python3.13-minimal 292s quilt ubuntu-dev-tools wdiff xdelta xdelta3 292s Suggested packages: 292s debtags adequate at autopkgtest bls-standalone bsd-mailx | mailx 292s build-essential check-all-the-things cvs-buildpackage debhelper diffoscope 292s disorderfs docker.io dose-extra duck elpa-devscripts faketime gnuplot 292s how-can-i-help libauthen-sasl-perl libdbd-pg-perl libfile-desktopentry-perl 292s libterm-size-perl libyaml-syck-perl mmdebstrap mutt piuparts 292s postgresql-client pristine-lfs python3-pycurl ratt reprotest 292s svn-buildpackage w3m debian-keyring equivs libgitlab-api-v4-perl 292s libsoap-lite-perl lintian mini-dinstall autopoint gettext-doc 292s libasprintf-dev libgettextpo-dev git-daemon-run | git-daemon-sysvinit 292s git-doc git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn 292s python3-notify2 unzip libdata-dump-perl libio-compress-brotli-perl 292s libcrypt-ssleay-perl libscalar-number-perl libxstring-perl libsub-name-perl 292s libbusiness-isbn-perl libmime-base32-perl libregexp-ipv6-perl 292s libauthen-ntlm-perl python-coverage-doc python3-objgraph gir1.2-secret-1 292s gnome-keyring libkf5wallet-bin python3-shtab subversion python-pygit2-doc 292s gnome-keyring | libkf5wallet-bin | keepassxc python-secretstorage-doc 292s python-tenacity-doc python-pyxdg-doc python3.13-venv python3.13-doc 292s binfmt-support default-mta | mail-transport-agent graphviz procmail bzr 292s | brz bzr-builddeb | brz-debian qemu-user-static wdiff-doc 292s Recommended packages: 292s libdistro-info-perl libgit-wrapper-perl libjson-perl liblist-compare-perl 292s libstring-shellquote-perl licensecheck lintian python3-magic python3-unidiff 292s unzip python3-paramiko cowbuilder | pbuilder | sbuild libhtml-format-perl 292s javascript-common libnamespace-clean-perl libdata-dump-perl 292s libhtml-form-perl libhttp-daemon-perl libmailtools-perl python3-tk arch-test 292s debian-keyring debootstrap genisoimage sbuild | pbuilder | cowbuilder 292s python3-dns reportbug 292s The following NEW packages will be installed: 292s autopkgtest-satdep dctrl-tools debian-archive-keyring devscripts diffstat 292s dput gettext git git-buildpackage git-man git-ubuntu 292s libb-hooks-op-check-perl libclass-method-modifiers-perl 292s libclass-xsaccessor-perl libclone-perl libdevel-callchecker-perl 292s libdynaloader-functions-perl libencode-locale-perl liberror-perl 292s libfile-dirlist-perl libfile-homedir-perl libfile-listing-perl 292s libfile-touch-perl libfile-which-perl libgit2-1.8 libgomp1 292s libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl 292s libhttp-cookies-perl libhttp-date-perl libhttp-message-perl 292s libhttp-negotiate-perl libhttp-parser2.9 libimport-into-perl libio-html-perl 292s libio-pty-perl libio-socket-ssl-perl libipc-run-perl libjs-jquery 292s libjs-jquery-hotkeys libjs-jquery-isonscreen libjs-jquery-metadata 292s libjs-jquery-tablesorter libjs-jquery-throttle-debounce libjs-sphinxdoc 292s libjs-underscore liblwp-mediatypes-perl liblwp-protocol-https-perl 292s libmodule-runtime-perl libmoo-perl libnet-http-perl libnet-ssleay-perl 292s libnorm1t64 libparams-classify-perl libpgm-5.3-0t64 libpython3.13-minimal 292s libpython3.13-stdlib librole-tiny-perl libsodium23 libsub-quote-perl 292s libsys-cpuaffinity-perl libtimedate-perl libtry-tiny-perl liburi-perl 292s libwww-perl libwww-robotrules-perl libxdelta2t64 libzmq5 patchutils pbzip2 292s perl-openssl-defaults pixz pristine-tar pylint python3-argcomplete 292s python3-astroid python3-cachetools python3-coverage python3-dateutil 292s python3-debian python3-debianbts python3-dill python3-distro-info 292s python3-gpg python3-importlib-metadata python3-iniconfig python3-isort 292s python3-jaraco.classes python3-jeepney python3-keyring python3-keyrings.alt 292s python3-launchpadlib-desktop python3-logilab-common python3-mccabe 292s python3-mypy-extensions python3-packaging python3-platformdirs 292s python3-pluggy python3-py python3-pycryptodome python3-pygit2 python3-pytest 292s python3-pytest-cov python3-secretstorage python3-tenacity python3-tomlkit 292s python3-ubuntutools python3-xdg python3-zmq python3.13 python3.13-minimal 292s quilt ubuntu-dev-tools wdiff xdelta xdelta3 292s 0 upgraded, 117 newly installed, 0 to remove and 0 not upgraded. 292s Need to get 23.2 MB/23.2 MB of archives. 292s After this operation, 92.5 MB of additional disk space will be used. 292s Get:1 /tmp/autopkgtest.BjXTEZ/1-autopkgtest-satdep.deb autopkgtest-satdep armhf 0 [712 B] 292s Get:2 http://ftpmaster.internal/ubuntu plucky/main armhf libpython3.13-minimal armhf 3.13.0-2 [866 kB] 292s Get:3 http://ftpmaster.internal/ubuntu plucky/main armhf python3.13-minimal armhf 3.13.0-2 [1854 kB] 292s Get:4 http://ftpmaster.internal/ubuntu plucky/main armhf libjs-jquery all 3.6.1+dfsg+~3.5.14-1 [328 kB] 292s Get:5 http://ftpmaster.internal/ubuntu plucky/universe armhf libjs-jquery-hotkeys all 0~20130707+git2d51e3a9+dfsg-2.1 [11.5 kB] 292s Get:6 http://ftpmaster.internal/ubuntu plucky/main armhf python3-distro-info all 1.12 [7754 B] 292s Get:7 http://ftpmaster.internal/ubuntu plucky/main armhf dctrl-tools armhf 2.24-3build3 [94.7 kB] 292s Get:8 http://ftpmaster.internal/ubuntu plucky/universe armhf debian-archive-keyring all 2023.4ubuntu1 [168 kB] 292s Get:9 http://ftpmaster.internal/ubuntu plucky/main armhf libfile-dirlist-perl all 0.05-3 [7286 B] 292s Get:10 http://ftpmaster.internal/ubuntu plucky/main armhf libfile-which-perl all 1.27-2 [12.5 kB] 292s Get:11 http://ftpmaster.internal/ubuntu plucky/main armhf libfile-homedir-perl all 1.006-2 [37.0 kB] 292s Get:12 http://ftpmaster.internal/ubuntu plucky/main armhf libfile-touch-perl all 0.12-2 [7498 B] 292s Get:13 http://ftpmaster.internal/ubuntu plucky/main armhf libio-pty-perl armhf 1:1.20-1build3 [31.0 kB] 292s Get:14 http://ftpmaster.internal/ubuntu plucky/main armhf libipc-run-perl all 20231003.0-2 [91.5 kB] 292s Get:15 http://ftpmaster.internal/ubuntu plucky/main armhf libclass-method-modifiers-perl all 2.15-1 [16.1 kB] 292s Get:16 http://ftpmaster.internal/ubuntu plucky/main armhf libclass-xsaccessor-perl armhf 1.19-4build5 [32.3 kB] 292s Get:17 http://ftpmaster.internal/ubuntu plucky/main armhf libb-hooks-op-check-perl armhf 0.22-3build2 [9174 B] 292s Get:18 http://ftpmaster.internal/ubuntu plucky/main armhf libdynaloader-functions-perl all 0.004-1 [11.4 kB] 292s Get:19 http://ftpmaster.internal/ubuntu plucky/main armhf libdevel-callchecker-perl armhf 0.009-1build1 [14.0 kB] 292s Get:20 http://ftpmaster.internal/ubuntu plucky/main armhf libparams-classify-perl armhf 0.015-2build6 [18.8 kB] 292s Get:21 http://ftpmaster.internal/ubuntu plucky/main armhf libmodule-runtime-perl all 0.016-2 [16.4 kB] 292s Get:22 http://ftpmaster.internal/ubuntu plucky/main armhf libimport-into-perl all 1.002005-2 [10.7 kB] 293s Get:23 http://ftpmaster.internal/ubuntu plucky/main armhf librole-tiny-perl all 2.002004-1 [16.3 kB] 293s Get:24 http://ftpmaster.internal/ubuntu plucky/main armhf libsub-quote-perl all 2.006008-1ubuntu1 [20.7 kB] 293s Get:25 http://ftpmaster.internal/ubuntu plucky/main armhf libmoo-perl all 2.005005-1 [47.4 kB] 293s Get:26 http://ftpmaster.internal/ubuntu plucky/main armhf libencode-locale-perl all 1.05-3 [11.6 kB] 293s Get:27 http://ftpmaster.internal/ubuntu plucky/main armhf libtimedate-perl all 2.3300-2 [34.0 kB] 293s Get:28 http://ftpmaster.internal/ubuntu plucky/main armhf libhttp-date-perl all 6.06-1 [10.2 kB] 293s Get:29 http://ftpmaster.internal/ubuntu plucky/main armhf libfile-listing-perl all 6.16-1 [11.3 kB] 293s Get:30 http://ftpmaster.internal/ubuntu plucky/main armhf libhtml-tagset-perl all 3.24-1 [14.1 kB] 293s Get:31 http://ftpmaster.internal/ubuntu plucky/main armhf liburi-perl all 5.30-1 [94.4 kB] 293s Get:32 http://ftpmaster.internal/ubuntu plucky/main armhf libhtml-parser-perl armhf 3.83-1build1 [83.1 kB] 293s Get:33 http://ftpmaster.internal/ubuntu plucky/main armhf libhtml-tree-perl all 5.07-3 [200 kB] 293s Get:34 http://ftpmaster.internal/ubuntu plucky/main armhf libclone-perl armhf 0.47-1 [10.0 kB] 293s Get:35 http://ftpmaster.internal/ubuntu plucky/main armhf libio-html-perl all 1.004-3 [15.9 kB] 293s Get:36 http://ftpmaster.internal/ubuntu plucky/main armhf liblwp-mediatypes-perl all 6.04-2 [20.1 kB] 293s Get:37 http://ftpmaster.internal/ubuntu plucky/main armhf libhttp-message-perl all 7.00-2ubuntu1 [75.9 kB] 293s Get:38 http://ftpmaster.internal/ubuntu plucky/main armhf libhttp-cookies-perl all 6.11-1 [18.2 kB] 293s Get:39 http://ftpmaster.internal/ubuntu plucky/main armhf libhttp-negotiate-perl all 6.01-2 [12.4 kB] 293s Get:40 http://ftpmaster.internal/ubuntu plucky/main armhf perl-openssl-defaults armhf 7build3 [6628 B] 293s Get:41 http://ftpmaster.internal/ubuntu plucky/main armhf libnet-ssleay-perl armhf 1.94-2 [298 kB] 293s Get:42 http://ftpmaster.internal/ubuntu plucky/main armhf libio-socket-ssl-perl all 2.089-1 [200 kB] 293s Get:43 http://ftpmaster.internal/ubuntu plucky/main armhf libnet-http-perl all 6.23-1 [22.3 kB] 293s Get:44 http://ftpmaster.internal/ubuntu plucky/main armhf liblwp-protocol-https-perl all 6.14-1 [9040 B] 293s Get:45 http://ftpmaster.internal/ubuntu plucky/main armhf libtry-tiny-perl all 0.32-1 [21.2 kB] 293s Get:46 http://ftpmaster.internal/ubuntu plucky/main armhf libwww-robotrules-perl all 6.02-1 [12.6 kB] 293s Get:47 http://ftpmaster.internal/ubuntu plucky/main armhf libwww-perl all 6.77-1 [138 kB] 293s Get:48 http://ftpmaster.internal/ubuntu plucky/main armhf patchutils armhf 0.4.2-1build3 [73.2 kB] 293s Get:49 http://ftpmaster.internal/ubuntu plucky/main armhf wdiff armhf 1.2.2-6build1 [29.0 kB] 293s Get:50 http://ftpmaster.internal/ubuntu plucky/main armhf devscripts all 2.24.3 [1080 kB] 293s Get:51 http://ftpmaster.internal/ubuntu plucky/main armhf diffstat armhf 1.67-1 [28.9 kB] 293s Get:52 http://ftpmaster.internal/ubuntu plucky/main armhf python3-debian all 0.1.49ubuntu3 [116 kB] 293s Get:53 http://ftpmaster.internal/ubuntu plucky/main armhf python3-gpg armhf 1.24.0-2ubuntu1 [239 kB] 293s Get:54 http://ftpmaster.internal/ubuntu plucky/main armhf python3-xdg all 0.28-2 [38.3 kB] 293s Get:55 http://ftpmaster.internal/ubuntu plucky/main armhf dput all 1.2.4ubuntu1 [49.1 kB] 293s Get:56 http://ftpmaster.internal/ubuntu plucky/main armhf libgomp1 armhf 14.2.0-8ubuntu1 [125 kB] 293s Get:57 http://ftpmaster.internal/ubuntu plucky/main armhf gettext armhf 0.22.5-2 [995 kB] 293s Get:58 http://ftpmaster.internal/ubuntu plucky/main armhf liberror-perl all 0.17029-2 [25.6 kB] 293s Get:59 http://ftpmaster.internal/ubuntu plucky/main armhf git-man all 1:2.45.2-1.2ubuntu1 [1122 kB] 293s Get:60 http://ftpmaster.internal/ubuntu plucky/main armhf git armhf 1:2.45.2-1.2ubuntu1 [4509 kB] 293s Get:61 http://ftpmaster.internal/ubuntu plucky/main armhf python3-dateutil all 2.9.0-3 [80.2 kB] 293s Get:62 http://ftpmaster.internal/ubuntu plucky/main armhf python3-importlib-metadata all 8.5.0-1 [20.7 kB] 293s Get:63 http://ftpmaster.internal/ubuntu plucky/universe armhf git-buildpackage all 0.9.35 [677 kB] 293s Get:64 http://ftpmaster.internal/ubuntu plucky/universe armhf libsys-cpuaffinity-perl armhf 1.13~03-2build4 [31.2 kB] 293s Get:65 http://ftpmaster.internal/ubuntu plucky/universe armhf pbzip2 armhf 1.1.13-1build1 [39.0 kB] 293s Get:66 http://ftpmaster.internal/ubuntu plucky/universe armhf pixz armhf 1.0.7-3 [20.4 kB] 293s Get:67 http://ftpmaster.internal/ubuntu plucky/universe armhf libxdelta2t64 armhf 1.1.3-10.7 [43.3 kB] 293s Get:68 http://ftpmaster.internal/ubuntu plucky/universe armhf xdelta armhf 1.1.3-10.7 [23.5 kB] 293s Get:69 http://ftpmaster.internal/ubuntu plucky/universe armhf xdelta3 armhf 3.0.11-dfsg-1.2 [72.8 kB] 293s Get:70 http://ftpmaster.internal/ubuntu plucky/universe armhf pristine-tar armhf 1.50+nmu2build1 [104 kB] 293s Get:71 http://ftpmaster.internal/ubuntu plucky/universe armhf quilt all 0.68-1 [439 kB] 293s Get:72 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-debianbts all 4.1.1 [12.8 kB] 293s Get:73 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-jeepney all 0.8.0-4 [33.1 kB] 293s Get:74 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-secretstorage all 3.3.3-3 [13.7 kB] 293s Get:75 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-jaraco.classes all 3.4.0-1 [7664 B] 293s Get:76 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-keyring all 25.4.1-1 [40.5 kB] 293s Get:77 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-launchpadlib-desktop all 2.0.0-1 [1778 B] 293s Get:78 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-ubuntutools all 0.203 [67.4 kB] 293s Get:79 http://ftpmaster.internal/ubuntu plucky/universe armhf ubuntu-dev-tools all 0.203 [93.2 kB] 293s Get:80 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-astroid all 3.3.5-1 [174 kB] 293s Get:81 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-isort all 5.13.2-2 [59.3 kB] 293s Get:82 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-mypy-extensions all 1.0.0-1 [6148 B] 293s Get:83 http://ftpmaster.internal/ubuntu plucky/main armhf libjs-underscore all 1.13.4~dfsg+~1.11.4-3 [118 kB] 293s Get:84 http://ftpmaster.internal/ubuntu plucky/main armhf libjs-sphinxdoc all 7.4.7-4 [158 kB] 293s Get:85 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-logilab-common all 2.0.0-1 [281 kB] 293s Get:86 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-dill all 0.3.9-1 [84.5 kB] 293s Get:87 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-mccabe all 0.7.0-1 [8678 B] 293s Get:88 http://ftpmaster.internal/ubuntu plucky/main armhf python3-platformdirs all 4.3.6-1 [16.8 kB] 293s Get:89 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-tomlkit all 0.13.2-1 [37.6 kB] 293s Get:90 http://ftpmaster.internal/ubuntu plucky/universe armhf pylint all 3.3.1-2 [345 kB] 294s Get:91 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-argcomplete all 3.5.1-1ubuntu1 [35.6 kB] 294s Get:92 http://ftpmaster.internal/ubuntu plucky/main armhf python3-cachetools all 5.3.3-1 [10.3 kB] 294s Get:93 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-pycryptodome armhf 3.20.0+dfsg-3build1 [1089 kB] 294s Get:94 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-keyrings.alt all 5.0.2-1 [16.6 kB] 294s Get:95 http://ftpmaster.internal/ubuntu plucky/main armhf libhttp-parser2.9 armhf 2.9.4-6build1 [21.1 kB] 294s Get:96 http://ftpmaster.internal/ubuntu plucky-proposed/main armhf libgit2-1.8 armhf 1.8.4+ds-1ubuntu1 [452 kB] 294s Get:97 http://ftpmaster.internal/ubuntu plucky-proposed/universe armhf python3-pygit2 armhf 1.16.0-2 [172 kB] 294s Get:98 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-iniconfig all 1.1.1-2 [6024 B] 294s Get:99 http://ftpmaster.internal/ubuntu plucky/main armhf python3-packaging all 24.2-1 [51.5 kB] 294s Get:100 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-pluggy all 1.5.0-1 [21.0 kB] 294s Get:101 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-pytest all 8.3.3-1 [251 kB] 294s Get:102 http://ftpmaster.internal/ubuntu plucky/main armhf libpython3.13-stdlib armhf 3.13.0-2 [1972 kB] 294s Get:103 http://ftpmaster.internal/ubuntu plucky/main armhf python3.13 armhf 3.13.0-2 [719 kB] 294s Get:104 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-coverage armhf 7.4.4+dfsg1-0ubuntu3 [148 kB] 294s Get:105 http://ftpmaster.internal/ubuntu plucky/universe armhf libjs-jquery-isonscreen all 1.2.0-1.1 [3244 B] 294s Get:106 http://ftpmaster.internal/ubuntu plucky/universe armhf libjs-jquery-metadata all 12-4 [6582 B] 294s Get:107 http://ftpmaster.internal/ubuntu plucky/universe armhf libjs-jquery-tablesorter all 1:2.31.3+dfsg1-4 [192 kB] 294s Get:108 http://ftpmaster.internal/ubuntu plucky/universe armhf libjs-jquery-throttle-debounce all 1.1+dfsg.1-2 [12.5 kB] 294s Get:109 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-pytest-cov all 5.0.0-1 [21.3 kB] 294s Get:110 http://ftpmaster.internal/ubuntu plucky/main armhf python3-tenacity all 8.5.0-0ubuntu1 [17.0 kB] 294s Get:111 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-py all 1.11.0-2 [72.7 kB] 294s Get:112 http://ftpmaster.internal/ubuntu plucky/universe armhf libnorm1t64 armhf 1.5.9+dfsg-3.1build1 [206 kB] 294s Get:113 http://ftpmaster.internal/ubuntu plucky/universe armhf libpgm-5.3-0t64 armhf 5.3.128~dfsg-2.1build1 [171 kB] 294s Get:114 http://ftpmaster.internal/ubuntu plucky/main armhf libsodium23 armhf 1.0.18-1build3 [139 kB] 294s Get:115 http://ftpmaster.internal/ubuntu plucky/universe armhf libzmq5 armhf 4.3.5-1build2 [262 kB] 294s Get:116 http://ftpmaster.internal/ubuntu plucky/universe armhf python3-zmq armhf 24.0.1-5build2 [352 kB] 294s Get:117 http://ftpmaster.internal/ubuntu plucky/universe armhf git-ubuntu all 1.1-1 [152 kB] 295s Fetched 23.2 MB in 3s (8177 kB/s) 295s Selecting previously unselected package libpython3.13-minimal:armhf. 295s (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 ... 59609 files and directories currently installed.) 295s Preparing to unpack .../000-libpython3.13-minimal_3.13.0-2_armhf.deb ... 295s Unpacking libpython3.13-minimal:armhf (3.13.0-2) ... 295s Selecting previously unselected package python3.13-minimal. 295s Preparing to unpack .../001-python3.13-minimal_3.13.0-2_armhf.deb ... 295s Unpacking python3.13-minimal (3.13.0-2) ... 295s Selecting previously unselected package libjs-jquery. 295s Preparing to unpack .../002-libjs-jquery_3.6.1+dfsg+~3.5.14-1_all.deb ... 295s Unpacking libjs-jquery (3.6.1+dfsg+~3.5.14-1) ... 295s Selecting previously unselected package libjs-jquery-hotkeys. 295s Preparing to unpack .../003-libjs-jquery-hotkeys_0~20130707+git2d51e3a9+dfsg-2.1_all.deb ... 295s Unpacking libjs-jquery-hotkeys (0~20130707+git2d51e3a9+dfsg-2.1) ... 295s Selecting previously unselected package python3-distro-info. 295s Preparing to unpack .../004-python3-distro-info_1.12_all.deb ... 295s Unpacking python3-distro-info (1.12) ... 295s Selecting previously unselected package dctrl-tools. 295s Preparing to unpack .../005-dctrl-tools_2.24-3build3_armhf.deb ... 295s Unpacking dctrl-tools (2.24-3build3) ... 295s Selecting previously unselected package debian-archive-keyring. 295s Preparing to unpack .../006-debian-archive-keyring_2023.4ubuntu1_all.deb ... 296s Unpacking debian-archive-keyring (2023.4ubuntu1) ... 296s Selecting previously unselected package libfile-dirlist-perl. 296s Preparing to unpack .../007-libfile-dirlist-perl_0.05-3_all.deb ... 296s Unpacking libfile-dirlist-perl (0.05-3) ... 296s Selecting previously unselected package libfile-which-perl. 296s Preparing to unpack .../008-libfile-which-perl_1.27-2_all.deb ... 296s Unpacking libfile-which-perl (1.27-2) ... 296s Selecting previously unselected package libfile-homedir-perl. 296s Preparing to unpack .../009-libfile-homedir-perl_1.006-2_all.deb ... 296s Unpacking libfile-homedir-perl (1.006-2) ... 296s Selecting previously unselected package libfile-touch-perl. 296s Preparing to unpack .../010-libfile-touch-perl_0.12-2_all.deb ... 296s Unpacking libfile-touch-perl (0.12-2) ... 296s Selecting previously unselected package libio-pty-perl. 296s Preparing to unpack .../011-libio-pty-perl_1%3a1.20-1build3_armhf.deb ... 296s Unpacking libio-pty-perl (1:1.20-1build3) ... 296s Selecting previously unselected package libipc-run-perl. 296s Preparing to unpack .../012-libipc-run-perl_20231003.0-2_all.deb ... 296s Unpacking libipc-run-perl (20231003.0-2) ... 296s Selecting previously unselected package libclass-method-modifiers-perl. 296s Preparing to unpack .../013-libclass-method-modifiers-perl_2.15-1_all.deb ... 296s Unpacking libclass-method-modifiers-perl (2.15-1) ... 296s Selecting previously unselected package libclass-xsaccessor-perl. 296s Preparing to unpack .../014-libclass-xsaccessor-perl_1.19-4build5_armhf.deb ... 296s Unpacking libclass-xsaccessor-perl (1.19-4build5) ... 296s Selecting previously unselected package libb-hooks-op-check-perl:armhf. 296s Preparing to unpack .../015-libb-hooks-op-check-perl_0.22-3build2_armhf.deb ... 296s Unpacking libb-hooks-op-check-perl:armhf (0.22-3build2) ... 296s Selecting previously unselected package libdynaloader-functions-perl. 296s Preparing to unpack .../016-libdynaloader-functions-perl_0.004-1_all.deb ... 296s Unpacking libdynaloader-functions-perl (0.004-1) ... 296s Selecting previously unselected package libdevel-callchecker-perl:armhf. 296s Preparing to unpack .../017-libdevel-callchecker-perl_0.009-1build1_armhf.deb ... 296s Unpacking libdevel-callchecker-perl:armhf (0.009-1build1) ... 296s Selecting previously unselected package libparams-classify-perl:armhf. 296s Preparing to unpack .../018-libparams-classify-perl_0.015-2build6_armhf.deb ... 296s Unpacking libparams-classify-perl:armhf (0.015-2build6) ... 296s Selecting previously unselected package libmodule-runtime-perl. 296s Preparing to unpack .../019-libmodule-runtime-perl_0.016-2_all.deb ... 296s Unpacking libmodule-runtime-perl (0.016-2) ... 296s Selecting previously unselected package libimport-into-perl. 296s Preparing to unpack .../020-libimport-into-perl_1.002005-2_all.deb ... 296s Unpacking libimport-into-perl (1.002005-2) ... 296s Selecting previously unselected package librole-tiny-perl. 296s Preparing to unpack .../021-librole-tiny-perl_2.002004-1_all.deb ... 296s Unpacking librole-tiny-perl (2.002004-1) ... 296s Selecting previously unselected package libsub-quote-perl. 296s Preparing to unpack .../022-libsub-quote-perl_2.006008-1ubuntu1_all.deb ... 296s Unpacking libsub-quote-perl (2.006008-1ubuntu1) ... 296s Selecting previously unselected package libmoo-perl. 296s Preparing to unpack .../023-libmoo-perl_2.005005-1_all.deb ... 296s Unpacking libmoo-perl (2.005005-1) ... 296s Selecting previously unselected package libencode-locale-perl. 296s Preparing to unpack .../024-libencode-locale-perl_1.05-3_all.deb ... 296s Unpacking libencode-locale-perl (1.05-3) ... 296s Selecting previously unselected package libtimedate-perl. 296s Preparing to unpack .../025-libtimedate-perl_2.3300-2_all.deb ... 296s Unpacking libtimedate-perl (2.3300-2) ... 296s Selecting previously unselected package libhttp-date-perl. 296s Preparing to unpack .../026-libhttp-date-perl_6.06-1_all.deb ... 296s Unpacking libhttp-date-perl (6.06-1) ... 296s Selecting previously unselected package libfile-listing-perl. 296s Preparing to unpack .../027-libfile-listing-perl_6.16-1_all.deb ... 296s Unpacking libfile-listing-perl (6.16-1) ... 296s Selecting previously unselected package libhtml-tagset-perl. 296s Preparing to unpack .../028-libhtml-tagset-perl_3.24-1_all.deb ... 296s Unpacking libhtml-tagset-perl (3.24-1) ... 296s Selecting previously unselected package liburi-perl. 296s Preparing to unpack .../029-liburi-perl_5.30-1_all.deb ... 296s Unpacking liburi-perl (5.30-1) ... 296s Selecting previously unselected package libhtml-parser-perl:armhf. 296s Preparing to unpack .../030-libhtml-parser-perl_3.83-1build1_armhf.deb ... 296s Unpacking libhtml-parser-perl:armhf (3.83-1build1) ... 296s Selecting previously unselected package libhtml-tree-perl. 296s Preparing to unpack .../031-libhtml-tree-perl_5.07-3_all.deb ... 296s Unpacking libhtml-tree-perl (5.07-3) ... 296s Selecting previously unselected package libclone-perl:armhf. 296s Preparing to unpack .../032-libclone-perl_0.47-1_armhf.deb ... 296s Unpacking libclone-perl:armhf (0.47-1) ... 296s Selecting previously unselected package libio-html-perl. 296s Preparing to unpack .../033-libio-html-perl_1.004-3_all.deb ... 296s Unpacking libio-html-perl (1.004-3) ... 296s Selecting previously unselected package liblwp-mediatypes-perl. 296s Preparing to unpack .../034-liblwp-mediatypes-perl_6.04-2_all.deb ... 296s Unpacking liblwp-mediatypes-perl (6.04-2) ... 296s Selecting previously unselected package libhttp-message-perl. 296s Preparing to unpack .../035-libhttp-message-perl_7.00-2ubuntu1_all.deb ... 296s Unpacking libhttp-message-perl (7.00-2ubuntu1) ... 297s Selecting previously unselected package libhttp-cookies-perl. 297s Preparing to unpack .../036-libhttp-cookies-perl_6.11-1_all.deb ... 297s Unpacking libhttp-cookies-perl (6.11-1) ... 297s Selecting previously unselected package libhttp-negotiate-perl. 297s Preparing to unpack .../037-libhttp-negotiate-perl_6.01-2_all.deb ... 297s Unpacking libhttp-negotiate-perl (6.01-2) ... 297s Selecting previously unselected package perl-openssl-defaults:armhf. 297s Preparing to unpack .../038-perl-openssl-defaults_7build3_armhf.deb ... 297s Unpacking perl-openssl-defaults:armhf (7build3) ... 297s Selecting previously unselected package libnet-ssleay-perl:armhf. 297s Preparing to unpack .../039-libnet-ssleay-perl_1.94-2_armhf.deb ... 297s Unpacking libnet-ssleay-perl:armhf (1.94-2) ... 297s Selecting previously unselected package libio-socket-ssl-perl. 297s Preparing to unpack .../040-libio-socket-ssl-perl_2.089-1_all.deb ... 297s Unpacking libio-socket-ssl-perl (2.089-1) ... 297s Selecting previously unselected package libnet-http-perl. 297s Preparing to unpack .../041-libnet-http-perl_6.23-1_all.deb ... 297s Unpacking libnet-http-perl (6.23-1) ... 297s Selecting previously unselected package liblwp-protocol-https-perl. 297s Preparing to unpack .../042-liblwp-protocol-https-perl_6.14-1_all.deb ... 297s Unpacking liblwp-protocol-https-perl (6.14-1) ... 297s Selecting previously unselected package libtry-tiny-perl. 297s Preparing to unpack .../043-libtry-tiny-perl_0.32-1_all.deb ... 297s Unpacking libtry-tiny-perl (0.32-1) ... 297s Selecting previously unselected package libwww-robotrules-perl. 297s Preparing to unpack .../044-libwww-robotrules-perl_6.02-1_all.deb ... 297s Unpacking libwww-robotrules-perl (6.02-1) ... 297s Selecting previously unselected package libwww-perl. 297s Preparing to unpack .../045-libwww-perl_6.77-1_all.deb ... 297s Unpacking libwww-perl (6.77-1) ... 297s Selecting previously unselected package patchutils. 297s Preparing to unpack .../046-patchutils_0.4.2-1build3_armhf.deb ... 297s Unpacking patchutils (0.4.2-1build3) ... 297s Selecting previously unselected package wdiff. 297s Preparing to unpack .../047-wdiff_1.2.2-6build1_armhf.deb ... 297s Unpacking wdiff (1.2.2-6build1) ... 297s Selecting previously unselected package devscripts. 297s Preparing to unpack .../048-devscripts_2.24.3_all.deb ... 297s Unpacking devscripts (2.24.3) ... 297s Selecting previously unselected package diffstat. 297s Preparing to unpack .../049-diffstat_1.67-1_armhf.deb ... 297s Unpacking diffstat (1.67-1) ... 297s Selecting previously unselected package python3-debian. 297s Preparing to unpack .../050-python3-debian_0.1.49ubuntu3_all.deb ... 297s Unpacking python3-debian (0.1.49ubuntu3) ... 297s Selecting previously unselected package python3-gpg. 297s Preparing to unpack .../051-python3-gpg_1.24.0-2ubuntu1_armhf.deb ... 297s Unpacking python3-gpg (1.24.0-2ubuntu1) ... 297s Selecting previously unselected package python3-xdg. 297s Preparing to unpack .../052-python3-xdg_0.28-2_all.deb ... 297s Unpacking python3-xdg (0.28-2) ... 297s Selecting previously unselected package dput. 297s Preparing to unpack .../053-dput_1.2.4ubuntu1_all.deb ... 297s Unpacking dput (1.2.4ubuntu1) ... 297s Selecting previously unselected package libgomp1:armhf. 297s Preparing to unpack .../054-libgomp1_14.2.0-8ubuntu1_armhf.deb ... 297s Unpacking libgomp1:armhf (14.2.0-8ubuntu1) ... 297s Selecting previously unselected package gettext. 297s Preparing to unpack .../055-gettext_0.22.5-2_armhf.deb ... 297s Unpacking gettext (0.22.5-2) ... 297s Selecting previously unselected package liberror-perl. 297s Preparing to unpack .../056-liberror-perl_0.17029-2_all.deb ... 297s Unpacking liberror-perl (0.17029-2) ... 297s Selecting previously unselected package git-man. 297s Preparing to unpack .../057-git-man_1%3a2.45.2-1.2ubuntu1_all.deb ... 297s Unpacking git-man (1:2.45.2-1.2ubuntu1) ... 297s Selecting previously unselected package git. 297s Preparing to unpack .../058-git_1%3a2.45.2-1.2ubuntu1_armhf.deb ... 297s Unpacking git (1:2.45.2-1.2ubuntu1) ... 298s Selecting previously unselected package python3-dateutil. 298s Preparing to unpack .../059-python3-dateutil_2.9.0-3_all.deb ... 298s Unpacking python3-dateutil (2.9.0-3) ... 298s Selecting previously unselected package python3-importlib-metadata. 298s Preparing to unpack .../060-python3-importlib-metadata_8.5.0-1_all.deb ... 298s Unpacking python3-importlib-metadata (8.5.0-1) ... 298s Selecting previously unselected package git-buildpackage. 298s Preparing to unpack .../061-git-buildpackage_0.9.35_all.deb ... 298s Unpacking git-buildpackage (0.9.35) ... 298s Selecting previously unselected package libsys-cpuaffinity-perl. 298s Preparing to unpack .../062-libsys-cpuaffinity-perl_1.13~03-2build4_armhf.deb ... 298s Unpacking libsys-cpuaffinity-perl (1.13~03-2build4) ... 298s Selecting previously unselected package pbzip2. 298s Preparing to unpack .../063-pbzip2_1.1.13-1build1_armhf.deb ... 298s Unpacking pbzip2 (1.1.13-1build1) ... 298s Selecting previously unselected package pixz. 298s Preparing to unpack .../064-pixz_1.0.7-3_armhf.deb ... 298s Unpacking pixz (1.0.7-3) ... 298s Selecting previously unselected package libxdelta2t64:armhf. 298s Preparing to unpack .../065-libxdelta2t64_1.1.3-10.7_armhf.deb ... 298s Unpacking libxdelta2t64:armhf (1.1.3-10.7) ... 298s Selecting previously unselected package xdelta. 298s Preparing to unpack .../066-xdelta_1.1.3-10.7_armhf.deb ... 298s Unpacking xdelta (1.1.3-10.7) ... 298s Selecting previously unselected package xdelta3. 298s Preparing to unpack .../067-xdelta3_3.0.11-dfsg-1.2_armhf.deb ... 298s Unpacking xdelta3 (3.0.11-dfsg-1.2) ... 298s Selecting previously unselected package pristine-tar. 298s Preparing to unpack .../068-pristine-tar_1.50+nmu2build1_armhf.deb ... 298s Unpacking pristine-tar (1.50+nmu2build1) ... 298s Selecting previously unselected package quilt. 298s Preparing to unpack .../069-quilt_0.68-1_all.deb ... 298s Unpacking quilt (0.68-1) ... 298s Selecting previously unselected package python3-debianbts. 298s Preparing to unpack .../070-python3-debianbts_4.1.1_all.deb ... 298s Unpacking python3-debianbts (4.1.1) ... 298s Selecting previously unselected package python3-jeepney. 298s Preparing to unpack .../071-python3-jeepney_0.8.0-4_all.deb ... 298s Unpacking python3-jeepney (0.8.0-4) ... 298s Selecting previously unselected package python3-secretstorage. 298s Preparing to unpack .../072-python3-secretstorage_3.3.3-3_all.deb ... 298s Unpacking python3-secretstorage (3.3.3-3) ... 298s Selecting previously unselected package python3-jaraco.classes. 298s Preparing to unpack .../073-python3-jaraco.classes_3.4.0-1_all.deb ... 298s Unpacking python3-jaraco.classes (3.4.0-1) ... 298s Selecting previously unselected package python3-keyring. 298s Preparing to unpack .../074-python3-keyring_25.4.1-1_all.deb ... 298s Unpacking python3-keyring (25.4.1-1) ... 298s Selecting previously unselected package python3-launchpadlib-desktop. 298s Preparing to unpack .../075-python3-launchpadlib-desktop_2.0.0-1_all.deb ... 298s Unpacking python3-launchpadlib-desktop (2.0.0-1) ... 298s Selecting previously unselected package python3-ubuntutools. 298s Preparing to unpack .../076-python3-ubuntutools_0.203_all.deb ... 298s Unpacking python3-ubuntutools (0.203) ... 298s Selecting previously unselected package ubuntu-dev-tools. 298s Preparing to unpack .../077-ubuntu-dev-tools_0.203_all.deb ... 298s Unpacking ubuntu-dev-tools (0.203) ... 299s Selecting previously unselected package python3-astroid. 299s Preparing to unpack .../078-python3-astroid_3.3.5-1_all.deb ... 299s Unpacking python3-astroid (3.3.5-1) ... 299s Selecting previously unselected package python3-isort. 299s Preparing to unpack .../079-python3-isort_5.13.2-2_all.deb ... 299s Unpacking python3-isort (5.13.2-2) ... 299s Selecting previously unselected package python3-mypy-extensions. 299s Preparing to unpack .../080-python3-mypy-extensions_1.0.0-1_all.deb ... 299s Unpacking python3-mypy-extensions (1.0.0-1) ... 299s Selecting previously unselected package libjs-underscore. 299s Preparing to unpack .../081-libjs-underscore_1.13.4~dfsg+~1.11.4-3_all.deb ... 299s Unpacking libjs-underscore (1.13.4~dfsg+~1.11.4-3) ... 299s Selecting previously unselected package libjs-sphinxdoc. 299s Preparing to unpack .../082-libjs-sphinxdoc_7.4.7-4_all.deb ... 299s Unpacking libjs-sphinxdoc (7.4.7-4) ... 299s Selecting previously unselected package python3-logilab-common. 299s Preparing to unpack .../083-python3-logilab-common_2.0.0-1_all.deb ... 299s Unpacking python3-logilab-common (2.0.0-1) ... 299s Selecting previously unselected package python3-dill. 299s Preparing to unpack .../084-python3-dill_0.3.9-1_all.deb ... 299s Unpacking python3-dill (0.3.9-1) ... 299s Selecting previously unselected package python3-mccabe. 299s Preparing to unpack .../085-python3-mccabe_0.7.0-1_all.deb ... 299s Unpacking python3-mccabe (0.7.0-1) ... 299s Selecting previously unselected package python3-platformdirs. 299s Preparing to unpack .../086-python3-platformdirs_4.3.6-1_all.deb ... 299s Unpacking python3-platformdirs (4.3.6-1) ... 299s Selecting previously unselected package python3-tomlkit. 299s Preparing to unpack .../087-python3-tomlkit_0.13.2-1_all.deb ... 299s Unpacking python3-tomlkit (0.13.2-1) ... 299s Selecting previously unselected package pylint. 299s Preparing to unpack .../088-pylint_3.3.1-2_all.deb ... 299s Unpacking pylint (3.3.1-2) ... 299s Selecting previously unselected package python3-argcomplete. 299s Preparing to unpack .../089-python3-argcomplete_3.5.1-1ubuntu1_all.deb ... 299s Unpacking python3-argcomplete (3.5.1-1ubuntu1) ... 299s Selecting previously unselected package python3-cachetools. 299s Preparing to unpack .../090-python3-cachetools_5.3.3-1_all.deb ... 299s Unpacking python3-cachetools (5.3.3-1) ... 299s Selecting previously unselected package python3-pycryptodome. 299s Preparing to unpack .../091-python3-pycryptodome_3.20.0+dfsg-3build1_armhf.deb ... 299s Unpacking python3-pycryptodome (3.20.0+dfsg-3build1) ... 299s Selecting previously unselected package python3-keyrings.alt. 299s Preparing to unpack .../092-python3-keyrings.alt_5.0.2-1_all.deb ... 299s Unpacking python3-keyrings.alt (5.0.2-1) ... 299s Selecting previously unselected package libhttp-parser2.9:armhf. 299s Preparing to unpack .../093-libhttp-parser2.9_2.9.4-6build1_armhf.deb ... 299s Unpacking libhttp-parser2.9:armhf (2.9.4-6build1) ... 299s Selecting previously unselected package libgit2-1.8:armhf. 299s Preparing to unpack .../094-libgit2-1.8_1.8.4+ds-1ubuntu1_armhf.deb ... 299s Unpacking libgit2-1.8:armhf (1.8.4+ds-1ubuntu1) ... 299s Selecting previously unselected package python3-pygit2. 299s Preparing to unpack .../095-python3-pygit2_1.16.0-2_armhf.deb ... 299s Unpacking python3-pygit2 (1.16.0-2) ... 299s Selecting previously unselected package python3-iniconfig. 299s Preparing to unpack .../096-python3-iniconfig_1.1.1-2_all.deb ... 299s Unpacking python3-iniconfig (1.1.1-2) ... 299s Selecting previously unselected package python3-packaging. 299s Preparing to unpack .../097-python3-packaging_24.2-1_all.deb ... 299s Unpacking python3-packaging (24.2-1) ... 299s Selecting previously unselected package python3-pluggy. 300s Preparing to unpack .../098-python3-pluggy_1.5.0-1_all.deb ... 300s Unpacking python3-pluggy (1.5.0-1) ... 300s Selecting previously unselected package python3-pytest. 300s Preparing to unpack .../099-python3-pytest_8.3.3-1_all.deb ... 300s Unpacking python3-pytest (8.3.3-1) ... 300s Selecting previously unselected package libpython3.13-stdlib:armhf. 300s Preparing to unpack .../100-libpython3.13-stdlib_3.13.0-2_armhf.deb ... 300s Unpacking libpython3.13-stdlib:armhf (3.13.0-2) ... 300s Selecting previously unselected package python3.13. 300s Preparing to unpack .../101-python3.13_3.13.0-2_armhf.deb ... 300s Unpacking python3.13 (3.13.0-2) ... 300s Selecting previously unselected package python3-coverage. 300s Preparing to unpack .../102-python3-coverage_7.4.4+dfsg1-0ubuntu3_armhf.deb ... 300s Unpacking python3-coverage (7.4.4+dfsg1-0ubuntu3) ... 300s Selecting previously unselected package libjs-jquery-isonscreen. 300s Preparing to unpack .../103-libjs-jquery-isonscreen_1.2.0-1.1_all.deb ... 300s Unpacking libjs-jquery-isonscreen (1.2.0-1.1) ... 300s Selecting previously unselected package libjs-jquery-metadata. 300s Preparing to unpack .../104-libjs-jquery-metadata_12-4_all.deb ... 300s Unpacking libjs-jquery-metadata (12-4) ... 300s Selecting previously unselected package libjs-jquery-tablesorter. 300s Preparing to unpack .../105-libjs-jquery-tablesorter_1%3a2.31.3+dfsg1-4_all.deb ... 300s Unpacking libjs-jquery-tablesorter (1:2.31.3+dfsg1-4) ... 300s Selecting previously unselected package libjs-jquery-throttle-debounce. 300s Preparing to unpack .../106-libjs-jquery-throttle-debounce_1.1+dfsg.1-2_all.deb ... 300s Unpacking libjs-jquery-throttle-debounce (1.1+dfsg.1-2) ... 300s Selecting previously unselected package python3-pytest-cov. 300s Preparing to unpack .../107-python3-pytest-cov_5.0.0-1_all.deb ... 300s Unpacking python3-pytest-cov (5.0.0-1) ... 300s Selecting previously unselected package python3-tenacity. 300s Preparing to unpack .../108-python3-tenacity_8.5.0-0ubuntu1_all.deb ... 300s Unpacking python3-tenacity (8.5.0-0ubuntu1) ... 300s Selecting previously unselected package python3-py. 300s Preparing to unpack .../109-python3-py_1.11.0-2_all.deb ... 300s Unpacking python3-py (1.11.0-2) ... 300s Selecting previously unselected package libnorm1t64:armhf. 300s Preparing to unpack .../110-libnorm1t64_1.5.9+dfsg-3.1build1_armhf.deb ... 300s Unpacking libnorm1t64:armhf (1.5.9+dfsg-3.1build1) ... 300s Selecting previously unselected package libpgm-5.3-0t64:armhf. 300s Preparing to unpack .../111-libpgm-5.3-0t64_5.3.128~dfsg-2.1build1_armhf.deb ... 300s Unpacking libpgm-5.3-0t64:armhf (5.3.128~dfsg-2.1build1) ... 300s Selecting previously unselected package libsodium23:armhf. 300s Preparing to unpack .../112-libsodium23_1.0.18-1build3_armhf.deb ... 300s Unpacking libsodium23:armhf (1.0.18-1build3) ... 300s Selecting previously unselected package libzmq5:armhf. 300s Preparing to unpack .../113-libzmq5_4.3.5-1build2_armhf.deb ... 300s Unpacking libzmq5:armhf (4.3.5-1build2) ... 300s Selecting previously unselected package python3-zmq. 300s Preparing to unpack .../114-python3-zmq_24.0.1-5build2_armhf.deb ... 300s Unpacking python3-zmq (24.0.1-5build2) ... 300s Selecting previously unselected package git-ubuntu. 300s Preparing to unpack .../115-git-ubuntu_1.1-1_all.deb ... 300s Unpacking git-ubuntu (1.1-1) ... 300s Selecting previously unselected package autopkgtest-satdep. 300s Preparing to unpack .../116-1-autopkgtest-satdep.deb ... 300s Unpacking autopkgtest-satdep (0) ... 300s Setting up python3-iniconfig (1.1.1-2) ... 301s Setting up libnorm1t64:armhf (1.5.9+dfsg-3.1build1) ... 301s Setting up wdiff (1.2.2-6build1) ... 301s Setting up libfile-which-perl (1.27-2) ... 301s Setting up libsodium23:armhf (1.0.18-1build3) ... 301s Setting up python3-jaraco.classes (3.4.0-1) ... 301s Setting up libxdelta2t64:armhf (1.1.3-10.7) ... 301s Setting up python3-importlib-metadata (8.5.0-1) ... 301s Setting up xdelta (1.1.3-10.7) ... 301s Setting up libsys-cpuaffinity-perl (1.13~03-2build4) ... 301s Setting up python3-py (1.11.0-2) ... 301s Setting up libdynaloader-functions-perl (0.004-1) ... 301s Setting up libclass-method-modifiers-perl (2.15-1) ... 301s Setting up libio-pty-perl (1:1.20-1build3) ... 301s Setting up python3-cachetools (5.3.3-1) ... 301s Setting up python3-debianbts (4.1.1) ... 301s Setting up libclone-perl:armhf (0.47-1) ... 301s Setting up libhtml-tagset-perl (3.24-1) ... 301s Setting up python3-mypy-extensions (1.0.0-1) ... 301s Setting up python3-pycryptodome (3.20.0+dfsg-3build1) ... 302s Setting up python3-tenacity (8.5.0-0ubuntu1) ... 302s Setting up liblwp-mediatypes-perl (6.04-2) ... 302s Setting up debian-archive-keyring (2023.4ubuntu1) ... 302s Setting up libtry-tiny-perl (0.32-1) ... 302s Setting up perl-openssl-defaults:armhf (7build3) ... 302s Setting up libencode-locale-perl (1.05-3) ... 302s Setting up libjs-jquery-throttle-debounce (1.1+dfsg.1-2) ... 302s Setting up libgomp1:armhf (14.2.0-8ubuntu1) ... 302s Setting up python3-xdg (0.28-2) ... 303s Setting up pbzip2 (1.1.13-1build1) ... 303s Setting up python3-platformdirs (4.3.6-1) ... 303s Setting up liberror-perl (0.17029-2) ... 303s Setting up libpython3.13-minimal:armhf (3.13.0-2) ... 303s Setting up patchutils (0.4.2-1build3) ... 303s Setting up libpgm-5.3-0t64:armhf (5.3.128~dfsg-2.1build1) ... 303s Setting up python3-packaging (24.2-1) ... 303s Setting up python3-gpg (1.24.0-2ubuntu1) ... 303s Setting up python3-dill (0.3.9-1) ... 303s Setting up python3-debian (0.1.49ubuntu3) ... 303s Setting up diffstat (1.67-1) ... 303s Setting up libio-html-perl (1.004-3) ... 303s Setting up libb-hooks-op-check-perl:armhf (0.22-3build2) ... 303s Setting up libipc-run-perl (20231003.0-2) ... 303s Setting up python3-jeepney (0.8.0-4) ... 304s Setting up python3-isort (5.13.2-2) ... 304s Setting up python3-pluggy (1.5.0-1) ... 304s Setting up libtimedate-perl (2.3300-2) ... 304s Setting up python3-astroid (3.3.5-1) ... 304s Setting up xdelta3 (3.0.11-dfsg-1.2) ... 304s Setting up pixz (1.0.7-3) ... 304s Setting up librole-tiny-perl (2.002004-1) ... 304s Setting up python3.13-minimal (3.13.0-2) ... 305s Setting up git-man (1:2.45.2-1.2ubuntu1) ... 305s Setting up python3-dateutil (2.9.0-3) ... 306s Setting up python3-mccabe (0.7.0-1) ... 306s Setting up libsub-quote-perl (2.006008-1ubuntu1) ... 306s Setting up libclass-xsaccessor-perl (1.19-4build5) ... 306s Setting up libjs-jquery (3.6.1+dfsg+~3.5.14-1) ... 306s Setting up libfile-dirlist-perl (0.05-3) ... 306s Setting up libjs-jquery-hotkeys (0~20130707+git2d51e3a9+dfsg-2.1) ... 306s Setting up python3-argcomplete (3.5.1-1ubuntu1) ... 306s Setting up libfile-homedir-perl (1.006-2) ... 306s Setting up python3-tomlkit (0.13.2-1) ... 306s Setting up python3-distro-info (1.12) ... 306s Setting up libpython3.13-stdlib:armhf (3.13.0-2) ... 306s Setting up liburi-perl (5.30-1) ... 306s Setting up pristine-tar (1.50+nmu2build1) ... 306s Setting up libfile-touch-perl (0.12-2) ... 306s Setting up dctrl-tools (2.24-3build3) ... 306s Setting up libhttp-parser2.9:armhf (2.9.4-6build1) ... 306s Setting up libjs-underscore (1.13.4~dfsg+~1.11.4-3) ... 306s Setting up libnet-ssleay-perl:armhf (1.94-2) ... 306s Setting up libhttp-date-perl (6.06-1) ... 306s Setting up gettext (0.22.5-2) ... 306s Setting up libfile-listing-perl (6.16-1) ... 306s Setting up libzmq5:armhf (4.3.5-1build2) ... 306s Setting up python3.13 (3.13.0-2) ... 307s Setting up python3-pytest (8.3.3-1) ... 308s Setting up libnet-http-perl (6.23-1) ... 308s Setting up python3-coverage (7.4.4+dfsg1-0ubuntu3) ... 308s Setting up quilt (0.68-1) ... 308s Setting up libdevel-callchecker-perl:armhf (0.009-1build1) ... 308s Setting up dput (1.2.4ubuntu1) ... 308s Setting up python3-secretstorage (3.3.3-3) ... 308s Setting up python3-zmq (24.0.1-5build2) ... 309s Setting up libjs-jquery-metadata (12-4) ... 309s Setting up libgit2-1.8:armhf (1.8.4+ds-1ubuntu1) ... 309s Setting up libjs-jquery-isonscreen (1.2.0-1.1) ... 309s Setting up git (1:2.45.2-1.2ubuntu1) ... 309s Setting up libjs-sphinxdoc (7.4.7-4) ... 309s Setting up libwww-robotrules-perl (6.02-1) ... 309s Setting up libjs-jquery-tablesorter (1:2.31.3+dfsg1-4) ... 309s Setting up libhtml-parser-perl:armhf (3.83-1build1) ... 309s Setting up python3-keyring (25.4.1-1) ... 309s Setting up libio-socket-ssl-perl (2.089-1) ... 309s Setting up libhttp-message-perl (7.00-2ubuntu1) ... 309s Setting up libhttp-negotiate-perl (6.01-2) ... 309s Setting up libhttp-cookies-perl (6.11-1) ... 309s Setting up python3-logilab-common (2.0.0-1) ... 309s Setting up python3-pygit2 (1.16.0-2) ... 309s Setting up libhtml-tree-perl (5.07-3) ... 309s Setting up libparams-classify-perl:armhf (0.015-2build6) ... 309s Setting up python3-pytest-cov (5.0.0-1) ... 310s Setting up libmodule-runtime-perl (0.016-2) ... 310s Setting up python3-launchpadlib-desktop (2.0.0-1) ... 310s Setting up python3-keyrings.alt (5.0.2-1) ... 310s Setting up pylint (3.3.1-2) ... 310s Setting up libimport-into-perl (1.002005-2) ... 310s Setting up libmoo-perl (2.005005-1) ... 310s Setting up python3-ubuntutools (0.203) ... 310s Setting up liblwp-protocol-https-perl (6.14-1) ... 310s Setting up libwww-perl (6.77-1) ... 310s Setting up devscripts (2.24.3) ... 311s Setting up git-buildpackage (0.9.35) ... 311s Setting up ubuntu-dev-tools (0.203) ... 311s Setting up git-ubuntu (1.1-1) ... 311s Setting up autopkgtest-satdep (0) ... 311s Processing triggers for libc-bin (2.40-1ubuntu3) ... 311s Processing triggers for systemd (256.5-2ubuntu4) ... 311s Processing triggers for man-db (2.13.0-1) ... 313s Processing triggers for install-info (7.1.1-1) ... 339s (Reading database ... 65837 files and directories currently installed.) 339s Removing autopkgtest-satdep (0) ... 347s autopkgtest [09:39:29]: test self-test: TEST_SYSTEM_TREE=1 /usr/share/git-ubuntu/self-test 347s autopkgtest [09:39:29]: test self-test: [----------------------- 349s Testing git-ubuntu system installation. 349s Testing tree in /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu 349s Working dir /tmp/autopkgtest.BjXTEZ/build.VY3/src 363s pylint passed! 371s ============================= test session starts ============================== 371s platform linux -- Python 3.12.7, pytest-8.3.3, pluggy-1.5.0 371s rootdir: /tmp/autopkgtest.BjXTEZ/build.VY3/src 371s configfile: pytest.ini 371s plugins: typeguard-4.4.1, cov-5.0.0 371s collected 459 items 371s 372s gitubuntu/build.py ..... [ 1%] 374s gitubuntu/git_repository_test.py ....................................... [ 9%] 387s ...FFFFF.FFF...........................F.FFFFFFF.FFF.......FFFFFFFFFF [ 24%] 387s gitubuntu/importer_service_test.py ..................................... [ 32%] 387s ..... [ 33%] 387s gitubuntu/importer_service_worker_test.py ... [ 34%] 400s gitubuntu/importer_tag_test.py FFFFFFFFFxF [ 36%] 419s gitubuntu/importer_test.py .......FF.FFFFFFFFFFF.FFF.FFF..FFFFFFFFFFFFFF [ 46%] 435s FFFFxx..FF.................................................F....FFFF. [ 61%] 438s gitubuntu/integration_test.py ...............Fsss [ 65%] 438s gitubuntu/prepare_upload_test.py .............. [ 68%] 439s gitubuntu/repo_builder_test.py .........FF.F................ [ 75%] 439s gitubuntu/rich_history_test.py FFF.FFFF [ 76%] 445s gitubuntu/source_builder_test.py .FF.......FFFFFFFFF.. [ 81%] 446s gitubuntu/source_information_test.py ................................... [ 89%] 446s ... [ 89%] 446s gitubuntu/versioning.py ............................................... [100%] 446s 446s =================================== FAILURES =================================== 446s ___________________ test_follow_symlinks_to_blob[0] ____________________ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmpat4sy7x4/.git/') 446s tree_func = at 0xe80692a8> 446s 446s @pytest.mark.parametrize('tree_func', [ 446s # The tree_func parameter is a function that accepts a mock Blob that is to 446s # represent the changelog blob itself and returns a mock Tree with the mock 446s # Blob embedded somewhere within it. The test function can then ensure that 446s # follow_symlinks_to_blob can correctly find the changelog Blob given the 446s # Tree. 446s 446s # Of course this is only expected to work if, after checking out the Tree, 446s # "cat debian/changelog" would work. But this allows us to test the various 446s # permutations of symlink following in Trees that _are_ valid. 446s 446s # Simple case 446s lambda b: Tree({ 446s 'debian': Tree({'changelog': b}), 446s }), 446s 446s # Symlink in debian/ 446s lambda b: Tree({ 446s 'debian': Tree({ 446s 'changelog.real': b, 446s 'changelog': Symlink('changelog.real'), 446s }), 446s }), 446s 446s # Symlink to parent directory 446s lambda b: Tree({ 446s 'changelog': b, 446s 'debian': Tree({ 446s 'changelog': Symlink('../changelog'), 446s }) 446s }), 446s 446s # Symlink to subdirectory 446s lambda b: Tree({ 446s 'debian': Tree({ 446s 'changelog': Symlink('subdirectory/changelog'), 446s 'subdirectory': Tree({'changelog': b}), 446s }) 446s }), 446s 446s # debian/ itself is a symlink to a different directory 446s lambda b: Tree({ 446s 'pkg': Tree({'changelog': b}), 446s 'debian': Symlink('pkg'), 446s }) 446s ]) 446s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 446s blob = Blob(b'') 446s blob_id = blob.write(pygit2_repo) 446s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 446s > result_blob = target.follow_symlinks_to_blob( 446s pygit2_repo, 446s tree, 446s 'debian/changelog', 446s ) 446s 446s gitubuntu/git_repository_test.py:342: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpat4sy7x4/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s gitubuntu/git_repository.py:68: AttributeError 446s ___________________ test_follow_symlinks_to_blob[1] ____________________ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmpv887igaw/.git/') 446s tree_func = at 0xe80692f8> 446s 446s @pytest.mark.parametrize('tree_func', [ 446s # The tree_func parameter is a function that accepts a mock Blob that is to 446s # represent the changelog blob itself and returns a mock Tree with the mock 446s # Blob embedded somewhere within it. The test function can then ensure that 446s # follow_symlinks_to_blob can correctly find the changelog Blob given the 446s # Tree. 446s 446s # Of course this is only expected to work if, after checking out the Tree, 446s # "cat debian/changelog" would work. But this allows us to test the various 446s # permutations of symlink following in Trees that _are_ valid. 446s 446s # Simple case 446s lambda b: Tree({ 446s 'debian': Tree({'changelog': b}), 446s }), 446s 446s # Symlink in debian/ 446s lambda b: Tree({ 446s 'debian': Tree({ 446s 'changelog.real': b, 446s 'changelog': Symlink('changelog.real'), 446s }), 446s }), 446s 446s # Symlink to parent directory 446s lambda b: Tree({ 446s 'changelog': b, 446s 'debian': Tree({ 446s 'changelog': Symlink('../changelog'), 446s }) 446s }), 446s 446s # Symlink to subdirectory 446s lambda b: Tree({ 446s 'debian': Tree({ 446s 'changelog': Symlink('subdirectory/changelog'), 446s 'subdirectory': Tree({'changelog': b}), 446s }) 446s }), 446s 446s # debian/ itself is a symlink to a different directory 446s lambda b: Tree({ 446s 'pkg': Tree({'changelog': b}), 446s 'debian': Symlink('pkg'), 446s }) 446s ]) 446s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 446s blob = Blob(b'') 446s blob_id = blob.write(pygit2_repo) 446s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 446s > result_blob = target.follow_symlinks_to_blob( 446s pygit2_repo, 446s tree, 446s 'debian/changelog', 446s ) 446s 446s gitubuntu/git_repository_test.py:342: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpv887igaw/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s gitubuntu/git_repository.py:68: AttributeError 446s ___________________ test_follow_symlinks_to_blob[2] ____________________ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmpamqxzfxu/.git/') 446s tree_func = at 0xe8069348> 446s 446s @pytest.mark.parametrize('tree_func', [ 446s # The tree_func parameter is a function that accepts a mock Blob that is to 446s # represent the changelog blob itself and returns a mock Tree with the mock 446s # Blob embedded somewhere within it. The test function can then ensure that 446s # follow_symlinks_to_blob can correctly find the changelog Blob given the 446s # Tree. 446s 446s # Of course this is only expected to work if, after checking out the Tree, 446s # "cat debian/changelog" would work. But this allows us to test the various 446s # permutations of symlink following in Trees that _are_ valid. 446s 446s # Simple case 446s lambda b: Tree({ 446s 'debian': Tree({'changelog': b}), 446s }), 446s 446s # Symlink in debian/ 446s lambda b: Tree({ 446s 'debian': Tree({ 446s 'changelog.real': b, 446s 'changelog': Symlink('changelog.real'), 446s }), 446s }), 446s 446s # Symlink to parent directory 446s lambda b: Tree({ 446s 'changelog': b, 446s 'debian': Tree({ 446s 'changelog': Symlink('../changelog'), 446s }) 446s }), 446s 446s # Symlink to subdirectory 446s lambda b: Tree({ 446s 'debian': Tree({ 446s 'changelog': Symlink('subdirectory/changelog'), 446s 'subdirectory': Tree({'changelog': b}), 446s }) 446s }), 446s 446s # debian/ itself is a symlink to a different directory 446s lambda b: Tree({ 446s 'pkg': Tree({'changelog': b}), 446s 'debian': Symlink('pkg'), 446s }) 446s ]) 446s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 446s blob = Blob(b'') 446s blob_id = blob.write(pygit2_repo) 446s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 446s > result_blob = target.follow_symlinks_to_blob( 446s pygit2_repo, 446s tree, 446s 'debian/changelog', 446s ) 446s 446s gitubuntu/git_repository_test.py:342: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpamqxzfxu/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s gitubuntu/git_repository.py:68: AttributeError 446s ___________________ test_follow_symlinks_to_blob[3] ____________________ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmp9o2wx0od/.git/') 446s tree_func = at 0xe8069398> 446s 446s @pytest.mark.parametrize('tree_func', [ 446s # The tree_func parameter is a function that accepts a mock Blob that is to 446s # represent the changelog blob itself and returns a mock Tree with the mock 446s # Blob embedded somewhere within it. The test function can then ensure that 446s # follow_symlinks_to_blob can correctly find the changelog Blob given the 446s # Tree. 446s 446s # Of course this is only expected to work if, after checking out the Tree, 446s # "cat debian/changelog" would work. But this allows us to test the various 446s # permutations of symlink following in Trees that _are_ valid. 446s 446s # Simple case 446s lambda b: Tree({ 446s 'debian': Tree({'changelog': b}), 446s }), 446s 446s # Symlink in debian/ 446s lambda b: Tree({ 446s 'debian': Tree({ 446s 'changelog.real': b, 446s 'changelog': Symlink('changelog.real'), 446s }), 446s }), 446s 446s # Symlink to parent directory 446s lambda b: Tree({ 446s 'changelog': b, 446s 'debian': Tree({ 446s 'changelog': Symlink('../changelog'), 446s }) 446s }), 446s 446s # Symlink to subdirectory 446s lambda b: Tree({ 446s 'debian': Tree({ 446s 'changelog': Symlink('subdirectory/changelog'), 446s 'subdirectory': Tree({'changelog': b}), 446s }) 446s }), 446s 446s # debian/ itself is a symlink to a different directory 446s lambda b: Tree({ 446s 'pkg': Tree({'changelog': b}), 446s 'debian': Symlink('pkg'), 446s }) 446s ]) 446s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 446s blob = Blob(b'') 446s blob_id = blob.write(pygit2_repo) 446s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 446s > result_blob = target.follow_symlinks_to_blob( 446s pygit2_repo, 446s tree, 446s 'debian/changelog', 446s ) 446s 446s gitubuntu/git_repository_test.py:342: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmp9o2wx0od/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s gitubuntu/git_repository.py:68: AttributeError 446s ___________________ test_follow_symlinks_to_blob[4] ____________________ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmp0deir2s2/.git/') 446s tree_func = at 0xe80693e8> 446s 446s @pytest.mark.parametrize('tree_func', [ 446s # The tree_func parameter is a function that accepts a mock Blob that is to 446s # represent the changelog blob itself and returns a mock Tree with the mock 446s # Blob embedded somewhere within it. The test function can then ensure that 446s # follow_symlinks_to_blob can correctly find the changelog Blob given the 446s # Tree. 446s 446s # Of course this is only expected to work if, after checking out the Tree, 446s # "cat debian/changelog" would work. But this allows us to test the various 446s # permutations of symlink following in Trees that _are_ valid. 446s 446s # Simple case 446s lambda b: Tree({ 446s 'debian': Tree({'changelog': b}), 446s }), 446s 446s # Symlink in debian/ 446s lambda b: Tree({ 446s 'debian': Tree({ 446s 'changelog.real': b, 446s 'changelog': Symlink('changelog.real'), 446s }), 446s }), 446s 446s # Symlink to parent directory 446s lambda b: Tree({ 446s 'changelog': b, 446s 'debian': Tree({ 446s 'changelog': Symlink('../changelog'), 446s }) 446s }), 446s 446s # Symlink to subdirectory 446s lambda b: Tree({ 446s 'debian': Tree({ 446s 'changelog': Symlink('subdirectory/changelog'), 446s 'subdirectory': Tree({'changelog': b}), 446s }) 446s }), 446s 446s # debian/ itself is a symlink to a different directory 446s lambda b: Tree({ 446s 'pkg': Tree({'changelog': b}), 446s 'debian': Symlink('pkg'), 446s }) 446s ]) 446s def test_follow_symlinks_to_blob(pygit2_repo, tree_func): 446s blob = Blob(b'') 446s blob_id = blob.write(pygit2_repo) 446s tree = pygit2_repo.get(tree_func(blob).write(pygit2_repo)) 446s > result_blob = target.follow_symlinks_to_blob( 446s pygit2_repo, 446s tree, 446s 'debian/changelog', 446s ) 446s 446s gitubuntu/git_repository_test.py:342: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmp0deir2s2/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s gitubuntu/git_repository.py:68: AttributeError 446s ________________ test_follow_symlinks_to_blob_not_found[tree1] _________________ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmpl6g9kgr5/.git/') 446s tree = 446s 446s @pytest.mark.parametrize('tree', [ 446s Tree({}), 446s Tree({'debian': Tree({})}), 446s Tree({'debian': Tree({'changelog': Symlink('other')})}), 446s Tree({'debian': Tree({'changelog': Symlink('../other')})}), 446s ]) 446s def test_follow_symlinks_to_blob_not_found(pygit2_repo, tree): 446s pygit2_tree = pygit2_repo.get(tree.write(pygit2_repo)) 446s with pytest.raises(KeyError): 446s > target.follow_symlinks_to_blob( 446s pygit2_repo, 446s pygit2_tree, 446s 'debian/changelog', 446s ) 446s 446s gitubuntu/git_repository_test.py:359: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpl6g9kgr5/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s gitubuntu/git_repository.py:68: AttributeError 446s ________________ test_follow_symlinks_to_blob_not_found[tree2] _________________ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmpy83yr85j/.git/') 446s tree = 446s 446s @pytest.mark.parametrize('tree', [ 446s Tree({}), 446s Tree({'debian': Tree({})}), 446s Tree({'debian': Tree({'changelog': Symlink('other')})}), 446s Tree({'debian': Tree({'changelog': Symlink('../other')})}), 446s ]) 446s def test_follow_symlinks_to_blob_not_found(pygit2_repo, tree): 446s pygit2_tree = pygit2_repo.get(tree.write(pygit2_repo)) 446s with pytest.raises(KeyError): 446s > target.follow_symlinks_to_blob( 446s pygit2_repo, 446s pygit2_tree, 446s 'debian/changelog', 446s ) 446s 446s gitubuntu/git_repository_test.py:359: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpy83yr85j/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s gitubuntu/git_repository.py:68: AttributeError 446s ________________ test_follow_symlinks_to_blob_not_found[tree3] _________________ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmprkcqv_uo/.git/') 446s tree = 446s 446s @pytest.mark.parametrize('tree', [ 446s Tree({}), 446s Tree({'debian': Tree({})}), 446s Tree({'debian': Tree({'changelog': Symlink('other')})}), 446s Tree({'debian': Tree({'changelog': Symlink('../other')})}), 446s ]) 446s def test_follow_symlinks_to_blob_not_found(pygit2_repo, tree): 446s pygit2_tree = pygit2_repo.get(tree.write(pygit2_repo)) 446s with pytest.raises(KeyError): 446s > target.follow_symlinks_to_blob( 446s pygit2_repo, 446s pygit2_tree, 446s 'debian/changelog', 446s ) 446s 446s gitubuntu/git_repository_test.py:359: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmprkcqv_uo/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s gitubuntu/git_repository.py:68: AttributeError 446s _________________________ test_git_escape_dir_to_tree __________________________ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmplabn0jit/.git/') 446s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_git_escape_dir_to_tree0') 446s 446s def test_git_escape_dir_to_tree(pygit2_repo, tmpdir): 446s tmpdir.mkdir('.git') 446s > tree_hash = target.GitUbuntuRepository.dir_to_tree( 446s pygit2_repo, 446s str(tmpdir), 446s escape=True, 446s ) 446s 446s gitubuntu/git_repository_test.py:668: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s gitubuntu/git_repository.py:2463: in dir_to_tree 446s replacement_oid = cls._add_missing_tree_dirs( 446s gitubuntu/git_repository.py:2397: in _add_missing_tree_dirs 446s tree_builder = cls._create_replacement_tree_builder( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s cls = 446s repo = pygit2.Repository('/tmp/tmplabn0jit/.git/') 446s treeish = 446s sub_path = '' 446s 446s @classmethod 446s def _create_replacement_tree_builder(cls, repo, treeish, sub_path): 446s '''Create a replacement TreeBuilder 446s 446s Create a TreeBuilder based on an existing repository, top-level 446s tree-ish and path inside that tree. 446s 446s A sub_path of '' is taken to mean a request for a replacement 446s TreeBuilder for the top level tree. 446s 446s Returns a TreeBuilder object pre-populated with the previous contents. 446s If the path did not previously exist in the tree-ish, then return an 446s empty TreeBuilder instead. 446s ''' 446s 446s > tree = treeish.peel(pygit2.GIT_OBJ_TREE) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s gitubuntu/git_repository.py:2331: AttributeError 446s ______ test_determine_quilt_series_path[tree_data1-debian/patches/series] ______ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmpombgezot/.git/') 446s tree_data = 446s expected_path = 'debian/patches/series' 446s 446s @pytest.mark.parametrize('tree_data,expected_path', [ 446s # Empty tree -> default 446s (Tree({}), 'debian/patches/series'), 446s 446s # Empty debian/patches directory -> default 446s (Tree({'debian': Tree({'patches': Tree({})})}), 'debian/patches/series'), 446s 446s # Only debian/patches/series -> that one 446s ( 446s Tree({'debian': Tree({'patches': Tree({'series': Blob(b'')})})}), 446s 'debian/patches/series', 446s ), 446s 446s # Only debian/patches/debian.series -> that one 446s ( 446s Tree({'debian': Tree({'patches': Tree({ 446s 'debian.series': Blob(b'') 446s })})}), 446s 'debian/patches/debian.series', 446s ), 446s 446s # Both -> debian.series 446s ( 446s Tree({'debian': Tree({'patches': Tree({ 446s 'debian.series': Blob(b''), 446s 'series': Blob(b''), 446s })})}), 446s 'debian/patches/debian.series', 446s ), 446s ]) 446s def test_determine_quilt_series_path(pygit2_repo, tree_data, expected_path): 446s tree_obj = pygit2_repo.get(tree_data.write(pygit2_repo)) 446s > path = target.determine_quilt_series_path(pygit2_repo, tree_obj) 446s 446s gitubuntu/git_repository_test.py:708: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s gitubuntu/git_repository.py:991: in determine_quilt_series_path 446s blob = follow_symlinks_to_blob( 446s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpombgezot/.git/') 446s top_tree_object = 446s search_path = 'debian/patches/debian.series' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s gitubuntu/git_repository.py:68: AttributeError 446s ______ test_determine_quilt_series_path[tree_data2-debian/patches/series] ______ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmpny1sitxk/.git/') 446s tree_data = 446s expected_path = 'debian/patches/series' 446s 446s @pytest.mark.parametrize('tree_data,expected_path', [ 446s # Empty tree -> default 446s (Tree({}), 'debian/patches/series'), 446s 446s # Empty debian/patches directory -> default 446s (Tree({'debian': Tree({'patches': Tree({})})}), 'debian/patches/series'), 446s 446s # Only debian/patches/series -> that one 446s ( 446s Tree({'debian': Tree({'patches': Tree({'series': Blob(b'')})})}), 446s 'debian/patches/series', 446s ), 446s 446s # Only debian/patches/debian.series -> that one 446s ( 446s Tree({'debian': Tree({'patches': Tree({ 446s 'debian.series': Blob(b'') 446s })})}), 446s 'debian/patches/debian.series', 446s ), 446s 446s # Both -> debian.series 446s ( 446s Tree({'debian': Tree({'patches': Tree({ 446s 'debian.series': Blob(b''), 446s 'series': Blob(b''), 446s })})}), 446s 'debian/patches/debian.series', 446s ), 446s ]) 446s def test_determine_quilt_series_path(pygit2_repo, tree_data, expected_path): 446s tree_obj = pygit2_repo.get(tree_data.write(pygit2_repo)) 446s > path = target.determine_quilt_series_path(pygit2_repo, tree_obj) 446s 446s gitubuntu/git_repository_test.py:708: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s gitubuntu/git_repository.py:991: in determine_quilt_series_path 446s blob = follow_symlinks_to_blob( 446s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpny1sitxk/.git/') 446s top_tree_object = 446s search_path = 'debian/patches/debian.series' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s gitubuntu/git_repository.py:68: AttributeError 446s __ test_determine_quilt_series_path[tree_data3-debian/patches/debian.series] ___ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmp6x3ywusy/.git/') 446s tree_data = 446s expected_path = 'debian/patches/debian.series' 446s 446s @pytest.mark.parametrize('tree_data,expected_path', [ 446s # Empty tree -> default 446s (Tree({}), 'debian/patches/series'), 446s 446s # Empty debian/patches directory -> default 446s (Tree({'debian': Tree({'patches': Tree({})})}), 'debian/patches/series'), 446s 446s # Only debian/patches/series -> that one 446s ( 446s Tree({'debian': Tree({'patches': Tree({'series': Blob(b'')})})}), 446s 'debian/patches/series', 446s ), 446s 446s # Only debian/patches/debian.series -> that one 446s ( 446s Tree({'debian': Tree({'patches': Tree({ 446s 'debian.series': Blob(b'') 446s })})}), 446s 'debian/patches/debian.series', 446s ), 446s 446s # Both -> debian.series 446s ( 446s Tree({'debian': Tree({'patches': Tree({ 446s 'debian.series': Blob(b''), 446s 'series': Blob(b''), 446s })})}), 446s 'debian/patches/debian.series', 446s ), 446s ]) 446s def test_determine_quilt_series_path(pygit2_repo, tree_data, expected_path): 446s tree_obj = pygit2_repo.get(tree_data.write(pygit2_repo)) 446s > path = target.determine_quilt_series_path(pygit2_repo, tree_obj) 446s 446s gitubuntu/git_repository_test.py:708: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s gitubuntu/git_repository.py:991: in determine_quilt_series_path 446s blob = follow_symlinks_to_blob( 446s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmp6x3ywusy/.git/') 446s top_tree_object = 446s search_path = 'debian/patches/debian.series' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s gitubuntu/git_repository.py:68: AttributeError 446s __ test_determine_quilt_series_path[tree_data4-debian/patches/debian.series] ___ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmpc183yxt1/.git/') 446s tree_data = 446s expected_path = 'debian/patches/debian.series' 446s 446s @pytest.mark.parametrize('tree_data,expected_path', [ 446s # Empty tree -> default 446s (Tree({}), 'debian/patches/series'), 446s 446s # Empty debian/patches directory -> default 446s (Tree({'debian': Tree({'patches': Tree({})})}), 'debian/patches/series'), 446s 446s # Only debian/patches/series -> that one 446s ( 446s Tree({'debian': Tree({'patches': Tree({'series': Blob(b'')})})}), 446s 'debian/patches/series', 446s ), 446s 446s # Only debian/patches/debian.series -> that one 446s ( 446s Tree({'debian': Tree({'patches': Tree({ 446s 'debian.series': Blob(b'') 446s })})}), 446s 'debian/patches/debian.series', 446s ), 446s 446s # Both -> debian.series 446s ( 446s Tree({'debian': Tree({'patches': Tree({ 446s 'debian.series': Blob(b''), 446s 'series': Blob(b''), 446s })})}), 446s 'debian/patches/debian.series', 446s ), 446s ]) 446s def test_determine_quilt_series_path(pygit2_repo, tree_data, expected_path): 446s tree_obj = pygit2_repo.get(tree_data.write(pygit2_repo)) 446s > path = target.determine_quilt_series_path(pygit2_repo, tree_obj) 446s 446s gitubuntu/git_repository_test.py:708: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s gitubuntu/git_repository.py:991: in determine_quilt_series_path 446s blob = follow_symlinks_to_blob( 446s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpc183yxt1/.git/') 446s top_tree_object = 446s search_path = 'debian/patches/debian.series' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s gitubuntu/git_repository.py:68: AttributeError 446s ________________________________ test_quilt_env ________________________________ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmpqgfjba79/.git/') 446s 446s def test_quilt_env(pygit2_repo): 446s tree_builder = Tree({'debian': 446s Tree({'patches': Tree({'debian.series': Blob(b'')})}) 446s }) 446s tree_obj = pygit2_repo.get(tree_builder.write(pygit2_repo)) 446s > env = target.quilt_env(pygit2_repo, tree_obj) 446s 446s gitubuntu/git_repository_test.py:717: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s gitubuntu/git_repository.py:1022: in quilt_env 446s 'QUILT_SERIES': determine_quilt_series_path(pygit2_repo, treeish), 446s gitubuntu/git_repository.py:991: in determine_quilt_series_path 446s blob = follow_symlinks_to_blob( 446s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpqgfjba79/.git/') 446s top_tree_object = 446s search_path = 'debian/patches/debian.series' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s gitubuntu/git_repository.py:68: AttributeError 446s _____________________________ test_repo_quilt_env ______________________________ 446s 446s repo = 446s 446s def test_repo_quilt_env(repo): 446s tree_builder = Tree({'debian': 446s Tree({'patches': Tree({'debian.series': Blob(b'')})}) 446s }) 446s tree_obj = repo.raw_repo.get(tree_builder.write(repo.raw_repo)) 446s > env = repo.quilt_env(tree_obj) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository_test.py:732: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:2575: in quilt_env 446s env.update(quilt_env(self.raw_repo, treeish)) 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:1022: in quilt_env 446s 'QUILT_SERIES': determine_quilt_series_path(pygit2_repo, treeish), 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:991: in determine_quilt_series_path 446s blob = follow_symlinks_to_blob( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpc9lrzmmi/.git/') 446s top_tree_object = 446s search_path = 'debian/patches/debian.series' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s _____________________ test_repo_quilt_env_from_treeish_str _____________________ 446s 446s repo = 446s 446s def test_repo_quilt_env_from_treeish_str(repo): 446s tree_builder = Tree({'debian': 446s Tree({'patches': Tree({'debian.series': Blob(b'')})}) 446s }) 446s tree_obj = repo.raw_repo.get(tree_builder.write(repo.raw_repo)) 446s > env = repo.quilt_env_from_treeish_str(str(tree_obj.id)) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository_test.py:757: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:2589: in quilt_env_from_treeish_str 446s return self.quilt_env(self.raw_repo.get(treeish_str)) 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:2575: in quilt_env 446s env.update(quilt_env(self.raw_repo, treeish)) 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:1022: in quilt_env 446s 'QUILT_SERIES': determine_quilt_series_path(pygit2_repo, treeish), 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:991: in determine_quilt_series_path 446s blob = follow_symlinks_to_blob( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpvyt_c73j/.git/') 446s top_tree_object = 446s search_path = 'debian/patches/debian.series' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s _ test_repo_find_ubuntu_merge[Common case-input_data0-pkg/import/1-1ubuntu1-pkg/import/2-1-pkg/import/1-1] _ 446s 446s description = 'Common case' 446s repo = 446s input_data = 446s old_ubuntu = 'pkg/import/1-1ubuntu1', new_debian = 'pkg/import/2-1' 446s expected = 'pkg/import/1-1' 446s 446s @pytest.mark.parametrize( 446s 'description, input_data, old_ubuntu, new_debian, expected', 446s [ 446s ( 446s 'Common case', 446s Repo( 446s commits=[ 446s Commit.from_spec( 446s name='old/debian' 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('old/debian')], 446s name='old/ubuntu', 446s changelog_versions=['1-1ubuntu1', '1-1'], 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('old/debian')], 446s name='new/debian', 446s changelog_versions=['2-1', '1-1'], 446s ), 446s ], 446s tags={ 446s 'pkg/import/1-1': Placeholder('old/debian'), 446s 'pkg/import/1-1ubuntu1': Placeholder('old/ubuntu'), 446s 'pkg/import/2-1': Placeholder('new/debian'), 446s }, 446s ), 446s 'pkg/import/1-1ubuntu1', 446s 'pkg/import/2-1', 446s 'pkg/import/1-1', 446s ), 446s ( 446s 'Ubuntu delta based on a NMU', 446s Repo( 446s commits=[ 446s Commit.from_spec( 446s name='fork_point' 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('fork_point')], 446s name='old/debian', 446s changelog_versions=['1-1.1', '1-1'], 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('old/debian')], 446s name='old/ubuntu', 446s changelog_versions=['1-1.1ubuntu1', '1-1.1', '1-1'], 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('fork_point')], 446s name='new/debian', 446s changelog_versions=['2-1', '1-1'], 446s ), 446s ], 446s tags={ 446s 'pkg/import/1-1': Placeholder('fork_point'), 446s 'pkg/import/1-1.1': Placeholder('old/debian'), 446s 'pkg/import/1-1.1ubuntu1': Placeholder('old/ubuntu'), 446s 'pkg/import/2-1': Placeholder('new/debian'), 446s }, 446s ), 446s 'pkg/import/1-1.1ubuntu1', 446s 'pkg/import/2-1', 446s 'pkg/import/1-1.1', 446s ), 446s ( 446s 'Ubuntu upstream version head of Debian', 446s Repo( 446s commits=[ 446s Commit.from_spec( 446s name='old/debian' 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('old/debian')], 446s name='mid_ubuntu', 446s changelog_versions=['1-1ubuntu1', '1-1'], 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('mid_ubuntu')], 446s name='old/ubuntu', 446s changelog_versions=['2-0ubuntu1', '1-1ubuntu1', '1-1'], 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('old/debian')], 446s name='new/debian', 446s changelog_versions=['3-1', '1-1'], 446s ), 446s ], 446s tags={ 446s 'pkg/import/1-1': Placeholder('old/debian'), 446s 'pkg/import/1-1ubuntu1': Placeholder('mid_ubuntu'), 446s 'pkg/import/2-0ubuntu1': Placeholder('old/ubuntu'), 446s 'pkg/import/3-1': Placeholder('new/debian'), 446s }, 446s ), 446s 'pkg/import/2-0ubuntu1', 446s 'pkg/import/3-1', 446s 'pkg/import/1-1', 446s ), 446s ], 446s ) 446s def test_repo_find_ubuntu_merge( 446s description, 446s repo, 446s input_data, 446s old_ubuntu, 446s new_debian, 446s expected, 446s ): 446s > input_data.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository_test.py:889: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmp53l0xs97/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_2.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_2-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_2-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ 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] _ 446s 446s description = 'Ubuntu delta based on a NMU' 446s repo = 446s input_data = 446s old_ubuntu = 'pkg/import/1-1.1ubuntu1', new_debian = 'pkg/import/2-1' 446s expected = 'pkg/import/1-1.1' 446s 446s @pytest.mark.parametrize( 446s 'description, input_data, old_ubuntu, new_debian, expected', 446s [ 446s ( 446s 'Common case', 446s Repo( 446s commits=[ 446s Commit.from_spec( 446s name='old/debian' 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('old/debian')], 446s name='old/ubuntu', 446s changelog_versions=['1-1ubuntu1', '1-1'], 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('old/debian')], 446s name='new/debian', 446s changelog_versions=['2-1', '1-1'], 446s ), 446s ], 446s tags={ 446s 'pkg/import/1-1': Placeholder('old/debian'), 446s 'pkg/import/1-1ubuntu1': Placeholder('old/ubuntu'), 446s 'pkg/import/2-1': Placeholder('new/debian'), 446s }, 446s ), 446s 'pkg/import/1-1ubuntu1', 446s 'pkg/import/2-1', 446s 'pkg/import/1-1', 446s ), 446s ( 446s 'Ubuntu delta based on a NMU', 446s Repo( 446s commits=[ 446s Commit.from_spec( 446s name='fork_point' 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('fork_point')], 446s name='old/debian', 446s changelog_versions=['1-1.1', '1-1'], 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('old/debian')], 446s name='old/ubuntu', 446s changelog_versions=['1-1.1ubuntu1', '1-1.1', '1-1'], 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('fork_point')], 446s name='new/debian', 446s changelog_versions=['2-1', '1-1'], 446s ), 446s ], 446s tags={ 446s 'pkg/import/1-1': Placeholder('fork_point'), 446s 'pkg/import/1-1.1': Placeholder('old/debian'), 446s 'pkg/import/1-1.1ubuntu1': Placeholder('old/ubuntu'), 446s 'pkg/import/2-1': Placeholder('new/debian'), 446s }, 446s ), 446s 'pkg/import/1-1.1ubuntu1', 446s 'pkg/import/2-1', 446s 'pkg/import/1-1.1', 446s ), 446s ( 446s 'Ubuntu upstream version head of Debian', 446s Repo( 446s commits=[ 446s Commit.from_spec( 446s name='old/debian' 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('old/debian')], 446s name='mid_ubuntu', 446s changelog_versions=['1-1ubuntu1', '1-1'], 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('mid_ubuntu')], 446s name='old/ubuntu', 446s changelog_versions=['2-0ubuntu1', '1-1ubuntu1', '1-1'], 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('old/debian')], 446s name='new/debian', 446s changelog_versions=['3-1', '1-1'], 446s ), 446s ], 446s tags={ 446s 'pkg/import/1-1': Placeholder('old/debian'), 446s 'pkg/import/1-1ubuntu1': Placeholder('mid_ubuntu'), 446s 'pkg/import/2-0ubuntu1': Placeholder('old/ubuntu'), 446s 'pkg/import/3-1': Placeholder('new/debian'), 446s }, 446s ), 446s 'pkg/import/2-0ubuntu1', 446s 'pkg/import/3-1', 446s 'pkg/import/1-1', 446s ), 446s ], 446s ) 446s def test_repo_find_ubuntu_merge( 446s description, 446s repo, 446s input_data, 446s old_ubuntu, 446s new_debian, 446s expected, 446s ): 446s > input_data.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository_test.py:889: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpb_nmt8c2/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1ubuntu1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1ubuntu1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_2.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_2-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_2-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ 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] _ 446s 446s description = 'Ubuntu upstream version head of Debian' 446s repo = 446s input_data = 446s old_ubuntu = 'pkg/import/2-0ubuntu1', new_debian = 'pkg/import/3-1' 446s expected = 'pkg/import/1-1' 446s 446s @pytest.mark.parametrize( 446s 'description, input_data, old_ubuntu, new_debian, expected', 446s [ 446s ( 446s 'Common case', 446s Repo( 446s commits=[ 446s Commit.from_spec( 446s name='old/debian' 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('old/debian')], 446s name='old/ubuntu', 446s changelog_versions=['1-1ubuntu1', '1-1'], 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('old/debian')], 446s name='new/debian', 446s changelog_versions=['2-1', '1-1'], 446s ), 446s ], 446s tags={ 446s 'pkg/import/1-1': Placeholder('old/debian'), 446s 'pkg/import/1-1ubuntu1': Placeholder('old/ubuntu'), 446s 'pkg/import/2-1': Placeholder('new/debian'), 446s }, 446s ), 446s 'pkg/import/1-1ubuntu1', 446s 'pkg/import/2-1', 446s 'pkg/import/1-1', 446s ), 446s ( 446s 'Ubuntu delta based on a NMU', 446s Repo( 446s commits=[ 446s Commit.from_spec( 446s name='fork_point' 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('fork_point')], 446s name='old/debian', 446s changelog_versions=['1-1.1', '1-1'], 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('old/debian')], 446s name='old/ubuntu', 446s changelog_versions=['1-1.1ubuntu1', '1-1.1', '1-1'], 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('fork_point')], 446s name='new/debian', 446s changelog_versions=['2-1', '1-1'], 446s ), 446s ], 446s tags={ 446s 'pkg/import/1-1': Placeholder('fork_point'), 446s 'pkg/import/1-1.1': Placeholder('old/debian'), 446s 'pkg/import/1-1.1ubuntu1': Placeholder('old/ubuntu'), 446s 'pkg/import/2-1': Placeholder('new/debian'), 446s }, 446s ), 446s 'pkg/import/1-1.1ubuntu1', 446s 'pkg/import/2-1', 446s 'pkg/import/1-1.1', 446s ), 446s ( 446s 'Ubuntu upstream version head of Debian', 446s Repo( 446s commits=[ 446s Commit.from_spec( 446s name='old/debian' 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('old/debian')], 446s name='mid_ubuntu', 446s changelog_versions=['1-1ubuntu1', '1-1'], 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('mid_ubuntu')], 446s name='old/ubuntu', 446s changelog_versions=['2-0ubuntu1', '1-1ubuntu1', '1-1'], 446s ), 446s Commit.from_spec( 446s parents=[Placeholder('old/debian')], 446s name='new/debian', 446s changelog_versions=['3-1', '1-1'], 446s ), 446s ], 446s tags={ 446s 'pkg/import/1-1': Placeholder('old/debian'), 446s 'pkg/import/1-1ubuntu1': Placeholder('mid_ubuntu'), 446s 'pkg/import/2-0ubuntu1': Placeholder('old/ubuntu'), 446s 'pkg/import/3-1': Placeholder('new/debian'), 446s }, 446s ), 446s 'pkg/import/2-0ubuntu1', 446s 'pkg/import/3-1', 446s 'pkg/import/1-1', 446s ), 446s ], 446s ) 446s def test_repo_find_ubuntu_merge( 446s description, 446s repo, 446s input_data, 446s old_ubuntu, 446s new_debian, 446s expected, 446s ): 446s > input_data.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository_test.py:889: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpio_8alo2/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_2.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_2-0ubuntu1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_2-0ubuntu1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1ubuntu1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_3.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_3-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_3-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: Version number suggests Ubuntu changes, but there is no XSBC-Original-Maintainer field 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _______________________________ test_commit_tree _______________________________ 446s 446s repo = 446s 446s def test_commit_tree(repo): 446s # Construct a repository with an initial commit on the master branch so 446s # that we can verify later parentage and lack of branch movement 446s parent_commit_oid = Repo( 446s commits=[Commit(name='master')], 446s branches={'master': Placeholder('master')} 446s ).write(repo.raw_repo) 446s repo.raw_repo.lookup_reference('HEAD').set_target('refs/heads/master') 446s 446s # Construct a tree inside the repository with a debian/changelog in it to 446s # feed to the method under test 446s test_changelog_path = os.path.join( 446s pkg_resources.resource_filename('gitubuntu', 'changelog_tests'), 446s 'test_date_1', 446s ) 446s with open(test_changelog_path, 'rb') as f: 446s test_changelog_bytes = f.read() 446s test_changelog_blob = Blob(test_changelog_bytes) 446s source_tree = Tree({'debian': Tree({'changelog': test_changelog_blob})}) 446s source_tree_oid = source_tree.write(repo.raw_repo) 446s 446s # Call the method under test 446s > commit_oid = repo.commit_source_tree( 446s tree=source_tree_oid, 446s parents=[parent_commit_oid], 446s log_message='test_commit_msg', 446s commit_date=datetime.datetime( 446s 1971, # year 446s 2, # month 446s 3, # day 446s 4, # hours 446s 5, # minutes 446s 6, # seconds 446s 7, # milliseconds (this should get truncated down to 0) 446s datetime.timezone(datetime.timedelta(hours=-8)) 446s ), 446s ) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository_test.py:993: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:2299: in commit_source_tree 446s changelog = self.get_changelog_from_treeish(str(tree)) 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 446s return Changelog.from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:569: in from_treeish 446s blob = follow_symlinks_to_blob( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpyvwabry_/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s _____________________ test_descendant_of[root-root-False] ______________________ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmpeltql670/.git/'), a = 'root' 446s b = 'root', expected = False 446s 446s @pytest.mark.parametrize(['a', 'b', 'expected'], 446s [ 446s ('root', 'root', False), 446s ('child1', 'root', True), 446s ('root', 'child1', False), 446s ('grandchild1', 'root', True), 446s ('child1', 'child2', False), 446s ('root', 'disjoint', False), 446s ] 446s ) 446s def test_descendant_of(pygit2_repo, a, b, expected): 446s """ 446s General test for pygit2.Repository.descendant_of(). 446s 446s This test was formerly for a temporary alternative implementation of 446s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 446s use until we updated our pinning to use a newer version of pygit2 that 446s included the pygit2.Repository.descendant_of() method. After the pinning 446s was removed and this implementation replacement took place, we kept the 446s test to ensure that actual behaviour did not change. 446s 446s This unit tests validate_upload_tag() for various parameterized cases. The 446s paramater sets assume the repository structure encoded in the Repo() call 446s below. 446s 446s :param pygit2.Repository pygit2_repo: fixture providing a temporary 446s pygit2.Repository instance to use 446s :param str a: tag name of the first commit to pass to descendant_of() 446s :param str b: tag name of the second commit to pass to descendant_of() 446s :param bool expected: the expected result of descendant_of() 446s """ 446s Repo( 446s # Unique message parameters are used in each entry here in order to 446s # ensure that otherwise-identical commits do not end up being the same 446s # commit (with the same hash, etc). 446s commits=[ 446s Commit(name='root', message='1'), 446s Commit(name='child1', parents=[Placeholder('root')], message='2'), 446s Commit(name='child2', parents=[Placeholder('root')], message='3'), 446s Commit( 446s name='grandchild1', 446s parents=[Placeholder('child1')], 446s message='4' 446s ), 446s Commit(name='disjoint', message='5'), 446s ], 446s tags={ 446s 'root': Placeholder('root'), 446s 'child1': Placeholder('child1'), 446s 'child2': Placeholder('child2'), 446s 'grandchild1': Placeholder('grandchild1'), 446s 'disjoint': Placeholder('disjoint'), 446s } 446s > ).write(pygit2_repo) 446s 446s gitubuntu/git_repository_test.py:1099: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpeltql670/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s gitubuntu/repo_builder.py:389: AttributeError 446s _____________________ test_descendant_of[child1-root-True] _____________________ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmpx1q7kp1h/.git/'), a = 'child1' 446s b = 'root', expected = True 446s 446s @pytest.mark.parametrize(['a', 'b', 'expected'], 446s [ 446s ('root', 'root', False), 446s ('child1', 'root', True), 446s ('root', 'child1', False), 446s ('grandchild1', 'root', True), 446s ('child1', 'child2', False), 446s ('root', 'disjoint', False), 446s ] 446s ) 446s def test_descendant_of(pygit2_repo, a, b, expected): 446s """ 446s General test for pygit2.Repository.descendant_of(). 446s 446s This test was formerly for a temporary alternative implementation of 446s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 446s use until we updated our pinning to use a newer version of pygit2 that 446s included the pygit2.Repository.descendant_of() method. After the pinning 446s was removed and this implementation replacement took place, we kept the 446s test to ensure that actual behaviour did not change. 446s 446s This unit tests validate_upload_tag() for various parameterized cases. The 446s paramater sets assume the repository structure encoded in the Repo() call 446s below. 446s 446s :param pygit2.Repository pygit2_repo: fixture providing a temporary 446s pygit2.Repository instance to use 446s :param str a: tag name of the first commit to pass to descendant_of() 446s :param str b: tag name of the second commit to pass to descendant_of() 446s :param bool expected: the expected result of descendant_of() 446s """ 446s Repo( 446s # Unique message parameters are used in each entry here in order to 446s # ensure that otherwise-identical commits do not end up being the same 446s # commit (with the same hash, etc). 446s commits=[ 446s Commit(name='root', message='1'), 446s Commit(name='child1', parents=[Placeholder('root')], message='2'), 446s Commit(name='child2', parents=[Placeholder('root')], message='3'), 446s Commit( 446s name='grandchild1', 446s parents=[Placeholder('child1')], 446s message='4' 446s ), 446s Commit(name='disjoint', message='5'), 446s ], 446s tags={ 446s 'root': Placeholder('root'), 446s 'child1': Placeholder('child1'), 446s 'child2': Placeholder('child2'), 446s 'grandchild1': Placeholder('grandchild1'), 446s 'disjoint': Placeholder('disjoint'), 446s } 446s > ).write(pygit2_repo) 446s 446s gitubuntu/git_repository_test.py:1099: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpx1q7kp1h/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s gitubuntu/repo_builder.py:389: AttributeError 446s ____________________ test_descendant_of[root-child1-False] _____________________ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmpa0d4r9ne/.git/'), a = 'root' 446s b = 'child1', expected = False 446s 446s @pytest.mark.parametrize(['a', 'b', 'expected'], 446s [ 446s ('root', 'root', False), 446s ('child1', 'root', True), 446s ('root', 'child1', False), 446s ('grandchild1', 'root', True), 446s ('child1', 'child2', False), 446s ('root', 'disjoint', False), 446s ] 446s ) 446s def test_descendant_of(pygit2_repo, a, b, expected): 446s """ 446s General test for pygit2.Repository.descendant_of(). 446s 446s This test was formerly for a temporary alternative implementation of 446s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 446s use until we updated our pinning to use a newer version of pygit2 that 446s included the pygit2.Repository.descendant_of() method. After the pinning 446s was removed and this implementation replacement took place, we kept the 446s test to ensure that actual behaviour did not change. 446s 446s This unit tests validate_upload_tag() for various parameterized cases. The 446s paramater sets assume the repository structure encoded in the Repo() call 446s below. 446s 446s :param pygit2.Repository pygit2_repo: fixture providing a temporary 446s pygit2.Repository instance to use 446s :param str a: tag name of the first commit to pass to descendant_of() 446s :param str b: tag name of the second commit to pass to descendant_of() 446s :param bool expected: the expected result of descendant_of() 446s """ 446s Repo( 446s # Unique message parameters are used in each entry here in order to 446s # ensure that otherwise-identical commits do not end up being the same 446s # commit (with the same hash, etc). 446s commits=[ 446s Commit(name='root', message='1'), 446s Commit(name='child1', parents=[Placeholder('root')], message='2'), 446s Commit(name='child2', parents=[Placeholder('root')], message='3'), 446s Commit( 446s name='grandchild1', 446s parents=[Placeholder('child1')], 446s message='4' 446s ), 446s Commit(name='disjoint', message='5'), 446s ], 446s tags={ 446s 'root': Placeholder('root'), 446s 'child1': Placeholder('child1'), 446s 'child2': Placeholder('child2'), 446s 'grandchild1': Placeholder('grandchild1'), 446s 'disjoint': Placeholder('disjoint'), 446s } 446s > ).write(pygit2_repo) 446s 446s gitubuntu/git_repository_test.py:1099: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpa0d4r9ne/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s gitubuntu/repo_builder.py:389: AttributeError 446s __________________ test_descendant_of[grandchild1-root-True] ___________________ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmp6r4_g5mp/.git/'), a = 'grandchild1' 446s b = 'root', expected = True 446s 446s @pytest.mark.parametrize(['a', 'b', 'expected'], 446s [ 446s ('root', 'root', False), 446s ('child1', 'root', True), 446s ('root', 'child1', False), 446s ('grandchild1', 'root', True), 446s ('child1', 'child2', False), 446s ('root', 'disjoint', False), 446s ] 446s ) 446s def test_descendant_of(pygit2_repo, a, b, expected): 446s """ 446s General test for pygit2.Repository.descendant_of(). 446s 446s This test was formerly for a temporary alternative implementation of 446s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 446s use until we updated our pinning to use a newer version of pygit2 that 446s included the pygit2.Repository.descendant_of() method. After the pinning 446s was removed and this implementation replacement took place, we kept the 446s test to ensure that actual behaviour did not change. 446s 446s This unit tests validate_upload_tag() for various parameterized cases. The 446s paramater sets assume the repository structure encoded in the Repo() call 446s below. 446s 446s :param pygit2.Repository pygit2_repo: fixture providing a temporary 446s pygit2.Repository instance to use 446s :param str a: tag name of the first commit to pass to descendant_of() 446s :param str b: tag name of the second commit to pass to descendant_of() 446s :param bool expected: the expected result of descendant_of() 446s """ 446s Repo( 446s # Unique message parameters are used in each entry here in order to 446s # ensure that otherwise-identical commits do not end up being the same 446s # commit (with the same hash, etc). 446s commits=[ 446s Commit(name='root', message='1'), 446s Commit(name='child1', parents=[Placeholder('root')], message='2'), 446s Commit(name='child2', parents=[Placeholder('root')], message='3'), 446s Commit( 446s name='grandchild1', 446s parents=[Placeholder('child1')], 446s message='4' 446s ), 446s Commit(name='disjoint', message='5'), 446s ], 446s tags={ 446s 'root': Placeholder('root'), 446s 'child1': Placeholder('child1'), 446s 'child2': Placeholder('child2'), 446s 'grandchild1': Placeholder('grandchild1'), 446s 'disjoint': Placeholder('disjoint'), 446s } 446s > ).write(pygit2_repo) 446s 446s gitubuntu/git_repository_test.py:1099: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmp6r4_g5mp/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s gitubuntu/repo_builder.py:389: AttributeError 446s ___________________ test_descendant_of[child1-child2-False] ____________________ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmptcv2vgnl/.git/'), a = 'child1' 446s b = 'child2', expected = False 446s 446s @pytest.mark.parametrize(['a', 'b', 'expected'], 446s [ 446s ('root', 'root', False), 446s ('child1', 'root', True), 446s ('root', 'child1', False), 446s ('grandchild1', 'root', True), 446s ('child1', 'child2', False), 446s ('root', 'disjoint', False), 446s ] 446s ) 446s def test_descendant_of(pygit2_repo, a, b, expected): 446s """ 446s General test for pygit2.Repository.descendant_of(). 446s 446s This test was formerly for a temporary alternative implementation of 446s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 446s use until we updated our pinning to use a newer version of pygit2 that 446s included the pygit2.Repository.descendant_of() method. After the pinning 446s was removed and this implementation replacement took place, we kept the 446s test to ensure that actual behaviour did not change. 446s 446s This unit tests validate_upload_tag() for various parameterized cases. The 446s paramater sets assume the repository structure encoded in the Repo() call 446s below. 446s 446s :param pygit2.Repository pygit2_repo: fixture providing a temporary 446s pygit2.Repository instance to use 446s :param str a: tag name of the first commit to pass to descendant_of() 446s :param str b: tag name of the second commit to pass to descendant_of() 446s :param bool expected: the expected result of descendant_of() 446s """ 446s Repo( 446s # Unique message parameters are used in each entry here in order to 446s # ensure that otherwise-identical commits do not end up being the same 446s # commit (with the same hash, etc). 446s commits=[ 446s Commit(name='root', message='1'), 446s Commit(name='child1', parents=[Placeholder('root')], message='2'), 446s Commit(name='child2', parents=[Placeholder('root')], message='3'), 446s Commit( 446s name='grandchild1', 446s parents=[Placeholder('child1')], 446s message='4' 446s ), 446s Commit(name='disjoint', message='5'), 446s ], 446s tags={ 446s 'root': Placeholder('root'), 446s 'child1': Placeholder('child1'), 446s 'child2': Placeholder('child2'), 446s 'grandchild1': Placeholder('grandchild1'), 446s 'disjoint': Placeholder('disjoint'), 446s } 446s > ).write(pygit2_repo) 446s 446s gitubuntu/git_repository_test.py:1099: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmptcv2vgnl/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s gitubuntu/repo_builder.py:389: AttributeError 446s ___________________ test_descendant_of[root-disjoint-False] ____________________ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmpqwfzb41s/.git/'), a = 'root' 446s b = 'disjoint', expected = False 446s 446s @pytest.mark.parametrize(['a', 'b', 'expected'], 446s [ 446s ('root', 'root', False), 446s ('child1', 'root', True), 446s ('root', 'child1', False), 446s ('grandchild1', 'root', True), 446s ('child1', 'child2', False), 446s ('root', 'disjoint', False), 446s ] 446s ) 446s def test_descendant_of(pygit2_repo, a, b, expected): 446s """ 446s General test for pygit2.Repository.descendant_of(). 446s 446s This test was formerly for a temporary alternative implementation of 446s pygit2.Repository.descendant_of() in our GitUbuntuRepository wrapper for 446s use until we updated our pinning to use a newer version of pygit2 that 446s included the pygit2.Repository.descendant_of() method. After the pinning 446s was removed and this implementation replacement took place, we kept the 446s test to ensure that actual behaviour did not change. 446s 446s This unit tests validate_upload_tag() for various parameterized cases. The 446s paramater sets assume the repository structure encoded in the Repo() call 446s below. 446s 446s :param pygit2.Repository pygit2_repo: fixture providing a temporary 446s pygit2.Repository instance to use 446s :param str a: tag name of the first commit to pass to descendant_of() 446s :param str b: tag name of the second commit to pass to descendant_of() 446s :param bool expected: the expected result of descendant_of() 446s """ 446s Repo( 446s # Unique message parameters are used in each entry here in order to 446s # ensure that otherwise-identical commits do not end up being the same 446s # commit (with the same hash, etc). 446s commits=[ 446s Commit(name='root', message='1'), 446s Commit(name='child1', parents=[Placeholder('root')], message='2'), 446s Commit(name='child2', parents=[Placeholder('root')], message='3'), 446s Commit( 446s name='grandchild1', 446s parents=[Placeholder('child1')], 446s message='4' 446s ), 446s Commit(name='disjoint', message='5'), 446s ], 446s tags={ 446s 'root': Placeholder('root'), 446s 'child1': Placeholder('child1'), 446s 'child2': Placeholder('child2'), 446s 'grandchild1': Placeholder('grandchild1'), 446s 'disjoint': Placeholder('disjoint'), 446s } 446s > ).write(pygit2_repo) 446s 446s gitubuntu/git_repository_test.py:1099: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpqwfzb41s/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s gitubuntu/repo_builder.py:389: AttributeError 446s _______________________________ test_create_tag ________________________________ 446s 446s repo = 446s 446s def test_create_tag(repo): 446s """create_tag() should create a tag 446s 446s :param GitUbuntuRepository repo: fixture providing a temporary 446s GitUbuntuRepository instance to use 446s """ 446s Repo( 446s commits=[Commit(name='root')], 446s tags={'root': Placeholder('root')}, 446s > ).write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository_test.py:1127: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpsiv0fuzz/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s __________________________ test_get_all_reimport_tags __________________________ 446s 446s repo = 446s 446s def test_get_all_reimport_tags(repo): 446s """get_all_reimport_tags() should return only matching reimport tags 446s 446s :param GitUbuntuRepository repo: fixture providing a temporary 446s GitUbuntuRepository instance to use 446s """ 446s Repo( 446s commits=[Commit(name='root')], 446s tags={ 446s 'importer/reimport/import/1/0': Placeholder('root'), 446s 'importer/reimport/import/1/1': Placeholder('root'), 446s 446s # This entry must not be identified as one of version 1's reimport 446s # tags, even though it shares the same base prefix. 446s 'importer/reimport/import/11/0': Placeholder('root'), 446s }, 446s > ).write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository_test.py:1165: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpp1s7ajkl/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ______________________________ test_get_head_info ______________________________ 446s 446s repo = 446s 446s def test_get_head_info(repo): 446s """get_head_info() extracts expected commit and version info from the head 446s commit 446s """ 446s Repo( 446s commits=[ 446s Commit(name='foo', tree=SourceTree(source=Source())), 446s ], 446s branches={ 446s 'importer/ubuntu/foo': Placeholder('foo'), 446s 'importer/debian/bar': Placeholder('foo'), 446s 'other/ubuntu/baz': Placeholder('foo'), 446s }, 446s ).write(repo.raw_repo) 446s foo_commit_id = ( 446s repo.raw_repo 446s .lookup_reference('refs/heads/importer/ubuntu/foo') 446s .peel(pygit2.Commit).id 446s ) 446s > assert repo.get_head_info('ubuntu', 'importer') == { 446s 'importer/ubuntu/foo': HeadInfoItem( 446s version='1-1', 446s commit_time=0, 446s commit_id=foo_commit_id, 446s ), 446s } 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository_test.py:1193: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:1952: in get_head_info 446s self.get_changelog_versions_from_treeish(str(head.peel().id)) 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:1888: in get_changelog_versions_from_treeish 446s changelog = self.get_changelog_from_treeish(treeish_string) 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 446s return Changelog.from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:569: in from_treeish 446s blob = follow_symlinks_to_blob( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmp8o4xcsa9/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_import_unapplied_spi_tags[input_repo0-expected_output_refs0-validation_repo_delta0-validation_repo_expected_identical_refs0-True] _ 446s 446s get_import_commit_msg_mock = 446s get_import_tag_msg_mock = 446s repo = 446s input_repo = 446s 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'] 446s validation_repo_delta = {'update_branches': {'importer/ubuntu/trusty': }} 446s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty-proposed', 'refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1'] 446s reuse = True 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'expected_output_refs', 446s 'validation_repo_delta', 446s 'validation_repo_expected_identical_refs', 446s 'reuse', 446s ], 446s [ 446s # 1) An existing import tag (or reimport tag) with the same Git tree 446s # - Reuse import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[Commit.from_spec(name='import')], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('import'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s ], 446s # reuse: 446s True, 446s ), 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='import tag contents', 446s ), 446s Commit.from_spec(name='reimport'), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 2) An existing import tag with a different Git tree and an existing 446s # upload tag with the same Git tree 446s # - Reuse upload tag, create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s Commit.from_spec(name='upload'), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-1': Placeholder('upload'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('upload'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('upload'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 3) An existing import tag with a different Git tree and an existing 446s # upload tag with a different Git tree 446s # - Create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s Commit.from_spec( 446s name='upload', 446s mutate='The upload tag contents', 446s ), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-1': Placeholder('upload'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [Commit.from_spec( 446s name='reimport', 446s message='Test commit (new)', 446s )], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 4) An existing import tag with a different Git tree and no upload tag 446s # - Create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [Commit.from_spec( 446s name='reimport', 446s message='Test commit (new)', 446s )], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 5) No import tag and an existing upload tag with the same Git tree 446s # - Reuse upload tag, create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[Commit.from_spec(name='upload')], 446s tags={'importer/upload/1-1': Placeholder('upload')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('upload'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('upload'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 6) No import tag and an existing upload tag with a different Git tree 446s # - Create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='upload', 446s mutate='The upload tag contents', 446s ), 446s ], 446s tags={'importer/upload/1-1': Placeholder('upload')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='publish', 446s message='Test commit (new)', 446s ), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('publish'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('publish'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 7) No import tags or upload tags 446s # - Create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo(), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='publish', 446s message='Test commit (new)', 446s ), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('publish'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('publish'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1' 446s ], 446s # reuse: 446s False, 446s ), 446s ] 446s ) 446s @patch('gitubuntu.importer.get_import_tag_msg') 446s @patch('gitubuntu.importer.get_import_commit_msg') 446s def test_import_unapplied_spi_tags( 446s get_import_commit_msg_mock, 446s get_import_tag_msg_mock, 446s repo, 446s input_repo, 446s expected_output_refs, 446s validation_repo_delta, 446s validation_repo_expected_identical_refs, 446s reuse, 446s ): 446s """Test that unapplied tags are correctly created, adjusted and/or reused 446s 446s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 446s that determines the commit message to use for a given import 446s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 446s that determines the tag message to use for a given import 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param list(str) expected_output_refs: refs that must exist in the output 446s repository 446s :param dict validation_repo_delta: how to transform the input 446s repository into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_identical_refs: refs that must be 446s identical between the validation repository and the output repository 446s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 446s one supplied by the input repository (assumed to have a commit message 446s of "Test commit") and not one created by the importer in this run 446s (arranged by this test to have a different commit message) 446s 446s The input repository data is written into the output repository and then a 446s fake non-native source package publication of version 1-1 in the Trusty 446s release pocket is imported into it by calling import_unapplied_spi() 446s directly. expected_output_refs, validation_repo_expected_identical_refs and 446s reuse are then asserted. It is further asserted that no other refs exist in 446s the output repository except for those listed in expected_output_refs and 446s validation_repo_expected_identical_refs. 446s """ 446s # Match the repo_builder objects 446s get_import_tag_msg_mock.return_value = 'Test tag' 446s # Importantly, the following commit message must not be the same as the 446s # commit messages used by the test input repository commits, so that we can 446s # later detect the difference between commits that were already there and 446s # new commits created by the importer for the purposes of asserting the 446s # reuse parameter correctly. 446s get_import_commit_msg_mock.return_value = b'Test commit (new)' 446s 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_tag_test.py:463: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpv4d4f9z8/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_import_unapplied_spi_tags[input_repo1-expected_output_refs1-validation_repo_delta1-validation_repo_expected_identical_refs1-True] _ 446s 446s get_import_commit_msg_mock = 446s get_import_tag_msg_mock = 446s repo = 446s input_repo = 446s 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'] 446s validation_repo_delta = {'update_branches': {'importer/ubuntu/trusty': }} 446s 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'] 446s reuse = True 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'expected_output_refs', 446s 'validation_repo_delta', 446s 'validation_repo_expected_identical_refs', 446s 'reuse', 446s ], 446s [ 446s # 1) An existing import tag (or reimport tag) with the same Git tree 446s # - Reuse import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[Commit.from_spec(name='import')], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('import'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s ], 446s # reuse: 446s True, 446s ), 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='import tag contents', 446s ), 446s Commit.from_spec(name='reimport'), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 2) An existing import tag with a different Git tree and an existing 446s # upload tag with the same Git tree 446s # - Reuse upload tag, create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s Commit.from_spec(name='upload'), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-1': Placeholder('upload'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('upload'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('upload'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 3) An existing import tag with a different Git tree and an existing 446s # upload tag with a different Git tree 446s # - Create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s Commit.from_spec( 446s name='upload', 446s mutate='The upload tag contents', 446s ), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-1': Placeholder('upload'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [Commit.from_spec( 446s name='reimport', 446s message='Test commit (new)', 446s )], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 4) An existing import tag with a different Git tree and no upload tag 446s # - Create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [Commit.from_spec( 446s name='reimport', 446s message='Test commit (new)', 446s )], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 5) No import tag and an existing upload tag with the same Git tree 446s # - Reuse upload tag, create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[Commit.from_spec(name='upload')], 446s tags={'importer/upload/1-1': Placeholder('upload')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('upload'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('upload'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 6) No import tag and an existing upload tag with a different Git tree 446s # - Create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='upload', 446s mutate='The upload tag contents', 446s ), 446s ], 446s tags={'importer/upload/1-1': Placeholder('upload')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='publish', 446s message='Test commit (new)', 446s ), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('publish'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('publish'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 7) No import tags or upload tags 446s # - Create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo(), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='publish', 446s message='Test commit (new)', 446s ), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('publish'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('publish'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1' 446s ], 446s # reuse: 446s False, 446s ), 446s ] 446s ) 446s @patch('gitubuntu.importer.get_import_tag_msg') 446s @patch('gitubuntu.importer.get_import_commit_msg') 446s def test_import_unapplied_spi_tags( 446s get_import_commit_msg_mock, 446s get_import_tag_msg_mock, 446s repo, 446s input_repo, 446s expected_output_refs, 446s validation_repo_delta, 446s validation_repo_expected_identical_refs, 446s reuse, 446s ): 446s """Test that unapplied tags are correctly created, adjusted and/or reused 446s 446s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 446s that determines the commit message to use for a given import 446s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 446s that determines the tag message to use for a given import 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param list(str) expected_output_refs: refs that must exist in the output 446s repository 446s :param dict validation_repo_delta: how to transform the input 446s repository into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_identical_refs: refs that must be 446s identical between the validation repository and the output repository 446s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 446s one supplied by the input repository (assumed to have a commit message 446s of "Test commit") and not one created by the importer in this run 446s (arranged by this test to have a different commit message) 446s 446s The input repository data is written into the output repository and then a 446s fake non-native source package publication of version 1-1 in the Trusty 446s release pocket is imported into it by calling import_unapplied_spi() 446s directly. expected_output_refs, validation_repo_expected_identical_refs and 446s reuse are then asserted. It is further asserted that no other refs exist in 446s the output repository except for those listed in expected_output_refs and 446s validation_repo_expected_identical_refs. 446s """ 446s # Match the repo_builder objects 446s get_import_tag_msg_mock.return_value = 'Test tag' 446s # Importantly, the following commit message must not be the same as the 446s # commit messages used by the test input repository commits, so that we can 446s # later detect the difference between commits that were already there and 446s # new commits created by the importer for the purposes of asserting the 446s # reuse parameter correctly. 446s get_import_commit_msg_mock.return_value = b'Test commit (new)' 446s 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_tag_test.py:463: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmp24tiqy1g/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_import_unapplied_spi_tags[input_repo2-expected_output_refs2-validation_repo_delta2-validation_repo_expected_identical_refs2-True] _ 446s 446s get_import_commit_msg_mock = 446s get_import_tag_msg_mock = 446s repo = 446s input_repo = 446s 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'] 446s validation_repo_delta = {'update_branches': {'importer/ubuntu/trusty': }, 'update_tag...er object at 0xe8182c48>, 'importer/reimport/import/1-1/1': }} 446s 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'] 446s reuse = True 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'expected_output_refs', 446s 'validation_repo_delta', 446s 'validation_repo_expected_identical_refs', 446s 'reuse', 446s ], 446s [ 446s # 1) An existing import tag (or reimport tag) with the same Git tree 446s # - Reuse import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[Commit.from_spec(name='import')], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('import'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s ], 446s # reuse: 446s True, 446s ), 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='import tag contents', 446s ), 446s Commit.from_spec(name='reimport'), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 2) An existing import tag with a different Git tree and an existing 446s # upload tag with the same Git tree 446s # - Reuse upload tag, create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s Commit.from_spec(name='upload'), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-1': Placeholder('upload'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('upload'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('upload'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 3) An existing import tag with a different Git tree and an existing 446s # upload tag with a different Git tree 446s # - Create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s Commit.from_spec( 446s name='upload', 446s mutate='The upload tag contents', 446s ), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-1': Placeholder('upload'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [Commit.from_spec( 446s name='reimport', 446s message='Test commit (new)', 446s )], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 4) An existing import tag with a different Git tree and no upload tag 446s # - Create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [Commit.from_spec( 446s name='reimport', 446s message='Test commit (new)', 446s )], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 5) No import tag and an existing upload tag with the same Git tree 446s # - Reuse upload tag, create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[Commit.from_spec(name='upload')], 446s tags={'importer/upload/1-1': Placeholder('upload')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('upload'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('upload'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 6) No import tag and an existing upload tag with a different Git tree 446s # - Create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='upload', 446s mutate='The upload tag contents', 446s ), 446s ], 446s tags={'importer/upload/1-1': Placeholder('upload')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='publish', 446s message='Test commit (new)', 446s ), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('publish'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('publish'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 7) No import tags or upload tags 446s # - Create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo(), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='publish', 446s message='Test commit (new)', 446s ), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('publish'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('publish'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1' 446s ], 446s # reuse: 446s False, 446s ), 446s ] 446s ) 446s @patch('gitubuntu.importer.get_import_tag_msg') 446s @patch('gitubuntu.importer.get_import_commit_msg') 446s def test_import_unapplied_spi_tags( 446s get_import_commit_msg_mock, 446s get_import_tag_msg_mock, 446s repo, 446s input_repo, 446s expected_output_refs, 446s validation_repo_delta, 446s validation_repo_expected_identical_refs, 446s reuse, 446s ): 446s """Test that unapplied tags are correctly created, adjusted and/or reused 446s 446s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 446s that determines the commit message to use for a given import 446s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 446s that determines the tag message to use for a given import 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param list(str) expected_output_refs: refs that must exist in the output 446s repository 446s :param dict validation_repo_delta: how to transform the input 446s repository into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_identical_refs: refs that must be 446s identical between the validation repository and the output repository 446s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 446s one supplied by the input repository (assumed to have a commit message 446s of "Test commit") and not one created by the importer in this run 446s (arranged by this test to have a different commit message) 446s 446s The input repository data is written into the output repository and then a 446s fake non-native source package publication of version 1-1 in the Trusty 446s release pocket is imported into it by calling import_unapplied_spi() 446s directly. expected_output_refs, validation_repo_expected_identical_refs and 446s reuse are then asserted. It is further asserted that no other refs exist in 446s the output repository except for those listed in expected_output_refs and 446s validation_repo_expected_identical_refs. 446s """ 446s # Match the repo_builder objects 446s get_import_tag_msg_mock.return_value = 'Test tag' 446s # Importantly, the following commit message must not be the same as the 446s # commit messages used by the test input repository commits, so that we can 446s # later detect the difference between commits that were already there and 446s # new commits created by the importer for the purposes of asserting the 446s # reuse parameter correctly. 446s get_import_commit_msg_mock.return_value = b'Test commit (new)' 446s 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_tag_test.py:463: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpuxhxxeu2/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_import_unapplied_spi_tags[input_repo3-expected_output_refs3-validation_repo_delta3-validation_repo_expected_identical_refs3-False] _ 446s 446s get_import_commit_msg_mock = 446s get_import_tag_msg_mock = 446s repo = 446s input_repo = 446s 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'] 446s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/ubuntu/trusty': ...er object at 0xe8182f48>, 'importer/reimport/import/1-1/1': }} 446s 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'] 446s reuse = False 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'expected_output_refs', 446s 'validation_repo_delta', 446s 'validation_repo_expected_identical_refs', 446s 'reuse', 446s ], 446s [ 446s # 1) An existing import tag (or reimport tag) with the same Git tree 446s # - Reuse import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[Commit.from_spec(name='import')], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('import'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s ], 446s # reuse: 446s True, 446s ), 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='import tag contents', 446s ), 446s Commit.from_spec(name='reimport'), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 2) An existing import tag with a different Git tree and an existing 446s # upload tag with the same Git tree 446s # - Reuse upload tag, create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s Commit.from_spec(name='upload'), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-1': Placeholder('upload'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('upload'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('upload'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 3) An existing import tag with a different Git tree and an existing 446s # upload tag with a different Git tree 446s # - Create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s Commit.from_spec( 446s name='upload', 446s mutate='The upload tag contents', 446s ), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-1': Placeholder('upload'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [Commit.from_spec( 446s name='reimport', 446s message='Test commit (new)', 446s )], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 4) An existing import tag with a different Git tree and no upload tag 446s # - Create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [Commit.from_spec( 446s name='reimport', 446s message='Test commit (new)', 446s )], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 5) No import tag and an existing upload tag with the same Git tree 446s # - Reuse upload tag, create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[Commit.from_spec(name='upload')], 446s tags={'importer/upload/1-1': Placeholder('upload')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('upload'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('upload'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 6) No import tag and an existing upload tag with a different Git tree 446s # - Create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='upload', 446s mutate='The upload tag contents', 446s ), 446s ], 446s tags={'importer/upload/1-1': Placeholder('upload')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='publish', 446s message='Test commit (new)', 446s ), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('publish'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('publish'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 7) No import tags or upload tags 446s # - Create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo(), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='publish', 446s message='Test commit (new)', 446s ), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('publish'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('publish'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1' 446s ], 446s # reuse: 446s False, 446s ), 446s ] 446s ) 446s @patch('gitubuntu.importer.get_import_tag_msg') 446s @patch('gitubuntu.importer.get_import_commit_msg') 446s def test_import_unapplied_spi_tags( 446s get_import_commit_msg_mock, 446s get_import_tag_msg_mock, 446s repo, 446s input_repo, 446s expected_output_refs, 446s validation_repo_delta, 446s validation_repo_expected_identical_refs, 446s reuse, 446s ): 446s """Test that unapplied tags are correctly created, adjusted and/or reused 446s 446s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 446s that determines the commit message to use for a given import 446s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 446s that determines the tag message to use for a given import 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param list(str) expected_output_refs: refs that must exist in the output 446s repository 446s :param dict validation_repo_delta: how to transform the input 446s repository into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_identical_refs: refs that must be 446s identical between the validation repository and the output repository 446s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 446s one supplied by the input repository (assumed to have a commit message 446s of "Test commit") and not one created by the importer in this run 446s (arranged by this test to have a different commit message) 446s 446s The input repository data is written into the output repository and then a 446s fake non-native source package publication of version 1-1 in the Trusty 446s release pocket is imported into it by calling import_unapplied_spi() 446s directly. expected_output_refs, validation_repo_expected_identical_refs and 446s reuse are then asserted. It is further asserted that no other refs exist in 446s the output repository except for those listed in expected_output_refs and 446s validation_repo_expected_identical_refs. 446s """ 446s # Match the repo_builder objects 446s get_import_tag_msg_mock.return_value = 'Test tag' 446s # Importantly, the following commit message must not be the same as the 446s # commit messages used by the test input repository commits, so that we can 446s # later detect the difference between commits that were already there and 446s # new commits created by the importer for the purposes of asserting the 446s # reuse parameter correctly. 446s get_import_commit_msg_mock.return_value = b'Test commit (new)' 446s 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_tag_test.py:463: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpn7l10y70/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_import_unapplied_spi_tags[input_repo4-expected_output_refs4-validation_repo_delta4-validation_repo_expected_identical_refs4-False] _ 446s 446s get_import_commit_msg_mock = 446s get_import_tag_msg_mock = 446s repo = 446s input_repo = 446s 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'] 446s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/ubuntu/trusty': ...er object at 0xe81a6150>, 'importer/reimport/import/1-1/1': }} 446s 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'] 446s reuse = False 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'expected_output_refs', 446s 'validation_repo_delta', 446s 'validation_repo_expected_identical_refs', 446s 'reuse', 446s ], 446s [ 446s # 1) An existing import tag (or reimport tag) with the same Git tree 446s # - Reuse import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[Commit.from_spec(name='import')], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('import'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s ], 446s # reuse: 446s True, 446s ), 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='import tag contents', 446s ), 446s Commit.from_spec(name='reimport'), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 2) An existing import tag with a different Git tree and an existing 446s # upload tag with the same Git tree 446s # - Reuse upload tag, create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s Commit.from_spec(name='upload'), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-1': Placeholder('upload'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('upload'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('upload'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 3) An existing import tag with a different Git tree and an existing 446s # upload tag with a different Git tree 446s # - Create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s Commit.from_spec( 446s name='upload', 446s mutate='The upload tag contents', 446s ), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-1': Placeholder('upload'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [Commit.from_spec( 446s name='reimport', 446s message='Test commit (new)', 446s )], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 4) An existing import tag with a different Git tree and no upload tag 446s # - Create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [Commit.from_spec( 446s name='reimport', 446s message='Test commit (new)', 446s )], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 5) No import tag and an existing upload tag with the same Git tree 446s # - Reuse upload tag, create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[Commit.from_spec(name='upload')], 446s tags={'importer/upload/1-1': Placeholder('upload')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('upload'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('upload'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 6) No import tag and an existing upload tag with a different Git tree 446s # - Create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='upload', 446s mutate='The upload tag contents', 446s ), 446s ], 446s tags={'importer/upload/1-1': Placeholder('upload')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='publish', 446s message='Test commit (new)', 446s ), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('publish'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('publish'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 7) No import tags or upload tags 446s # - Create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo(), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='publish', 446s message='Test commit (new)', 446s ), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('publish'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('publish'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1' 446s ], 446s # reuse: 446s False, 446s ), 446s ] 446s ) 446s @patch('gitubuntu.importer.get_import_tag_msg') 446s @patch('gitubuntu.importer.get_import_commit_msg') 446s def test_import_unapplied_spi_tags( 446s get_import_commit_msg_mock, 446s get_import_tag_msg_mock, 446s repo, 446s input_repo, 446s expected_output_refs, 446s validation_repo_delta, 446s validation_repo_expected_identical_refs, 446s reuse, 446s ): 446s """Test that unapplied tags are correctly created, adjusted and/or reused 446s 446s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 446s that determines the commit message to use for a given import 446s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 446s that determines the tag message to use for a given import 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param list(str) expected_output_refs: refs that must exist in the output 446s repository 446s :param dict validation_repo_delta: how to transform the input 446s repository into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_identical_refs: refs that must be 446s identical between the validation repository and the output repository 446s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 446s one supplied by the input repository (assumed to have a commit message 446s of "Test commit") and not one created by the importer in this run 446s (arranged by this test to have a different commit message) 446s 446s The input repository data is written into the output repository and then a 446s fake non-native source package publication of version 1-1 in the Trusty 446s release pocket is imported into it by calling import_unapplied_spi() 446s directly. expected_output_refs, validation_repo_expected_identical_refs and 446s reuse are then asserted. It is further asserted that no other refs exist in 446s the output repository except for those listed in expected_output_refs and 446s validation_repo_expected_identical_refs. 446s """ 446s # Match the repo_builder objects 446s get_import_tag_msg_mock.return_value = 'Test tag' 446s # Importantly, the following commit message must not be the same as the 446s # commit messages used by the test input repository commits, so that we can 446s # later detect the difference between commits that were already there and 446s # new commits created by the importer for the purposes of asserting the 446s # reuse parameter correctly. 446s get_import_commit_msg_mock.return_value = b'Test commit (new)' 446s 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_tag_test.py:463: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpe6bqff9z/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_import_unapplied_spi_tags[input_repo5-expected_output_refs5-validation_repo_delta5-validation_repo_expected_identical_refs5-True] _ 446s 446s get_import_commit_msg_mock = 446s get_import_tag_msg_mock = 446s repo = 446s input_repo = 446s 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'] 446s validation_repo_delta = {'update_branches': {'importer/ubuntu/trusty': }, 'update_tags': {'importer/import/1-1': }} 446s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1', 'refs/tags/importer/upload/1-1'] 446s reuse = True 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'expected_output_refs', 446s 'validation_repo_delta', 446s 'validation_repo_expected_identical_refs', 446s 'reuse', 446s ], 446s [ 446s # 1) An existing import tag (or reimport tag) with the same Git tree 446s # - Reuse import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[Commit.from_spec(name='import')], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('import'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s ], 446s # reuse: 446s True, 446s ), 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='import tag contents', 446s ), 446s Commit.from_spec(name='reimport'), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 2) An existing import tag with a different Git tree and an existing 446s # upload tag with the same Git tree 446s # - Reuse upload tag, create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s Commit.from_spec(name='upload'), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-1': Placeholder('upload'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('upload'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('upload'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 3) An existing import tag with a different Git tree and an existing 446s # upload tag with a different Git tree 446s # - Create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s Commit.from_spec( 446s name='upload', 446s mutate='The upload tag contents', 446s ), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-1': Placeholder('upload'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [Commit.from_spec( 446s name='reimport', 446s message='Test commit (new)', 446s )], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 4) An existing import tag with a different Git tree and no upload tag 446s # - Create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [Commit.from_spec( 446s name='reimport', 446s message='Test commit (new)', 446s )], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 5) No import tag and an existing upload tag with the same Git tree 446s # - Reuse upload tag, create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[Commit.from_spec(name='upload')], 446s tags={'importer/upload/1-1': Placeholder('upload')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('upload'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('upload'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 6) No import tag and an existing upload tag with a different Git tree 446s # - Create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='upload', 446s mutate='The upload tag contents', 446s ), 446s ], 446s tags={'importer/upload/1-1': Placeholder('upload')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='publish', 446s message='Test commit (new)', 446s ), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('publish'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('publish'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 7) No import tags or upload tags 446s # - Create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo(), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='publish', 446s message='Test commit (new)', 446s ), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('publish'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('publish'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1' 446s ], 446s # reuse: 446s False, 446s ), 446s ] 446s ) 446s @patch('gitubuntu.importer.get_import_tag_msg') 446s @patch('gitubuntu.importer.get_import_commit_msg') 446s def test_import_unapplied_spi_tags( 446s get_import_commit_msg_mock, 446s get_import_tag_msg_mock, 446s repo, 446s input_repo, 446s expected_output_refs, 446s validation_repo_delta, 446s validation_repo_expected_identical_refs, 446s reuse, 446s ): 446s """Test that unapplied tags are correctly created, adjusted and/or reused 446s 446s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 446s that determines the commit message to use for a given import 446s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 446s that determines the tag message to use for a given import 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param list(str) expected_output_refs: refs that must exist in the output 446s repository 446s :param dict validation_repo_delta: how to transform the input 446s repository into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_identical_refs: refs that must be 446s identical between the validation repository and the output repository 446s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 446s one supplied by the input repository (assumed to have a commit message 446s of "Test commit") and not one created by the importer in this run 446s (arranged by this test to have a different commit message) 446s 446s The input repository data is written into the output repository and then a 446s fake non-native source package publication of version 1-1 in the Trusty 446s release pocket is imported into it by calling import_unapplied_spi() 446s directly. expected_output_refs, validation_repo_expected_identical_refs and 446s reuse are then asserted. It is further asserted that no other refs exist in 446s the output repository except for those listed in expected_output_refs and 446s validation_repo_expected_identical_refs. 446s """ 446s # Match the repo_builder objects 446s get_import_tag_msg_mock.return_value = 'Test tag' 446s # Importantly, the following commit message must not be the same as the 446s # commit messages used by the test input repository commits, so that we can 446s # later detect the difference between commits that were already there and 446s # new commits created by the importer for the purposes of asserting the 446s # reuse parameter correctly. 446s get_import_commit_msg_mock.return_value = b'Test commit (new)' 446s 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_tag_test.py:463: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpfqt8p1sp/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_import_unapplied_spi_tags[input_repo6-expected_output_refs6-validation_repo_delta6-validation_repo_expected_identical_refs6-False] _ 446s 446s get_import_commit_msg_mock = 446s get_import_tag_msg_mock = 446s repo = 446s input_repo = 446s 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'] 446s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/ubuntu/trusty': ...ect at 0xe81a6558>}, 'update_tags': {'importer/import/1-1': }} 446s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1', 'refs/tags/importer/upload/1-1'] 446s reuse = False 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'expected_output_refs', 446s 'validation_repo_delta', 446s 'validation_repo_expected_identical_refs', 446s 'reuse', 446s ], 446s [ 446s # 1) An existing import tag (or reimport tag) with the same Git tree 446s # - Reuse import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[Commit.from_spec(name='import')], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('import'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s ], 446s # reuse: 446s True, 446s ), 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='import tag contents', 446s ), 446s Commit.from_spec(name='reimport'), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 2) An existing import tag with a different Git tree and an existing 446s # upload tag with the same Git tree 446s # - Reuse upload tag, create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s Commit.from_spec(name='upload'), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-1': Placeholder('upload'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('upload'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('upload'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 3) An existing import tag with a different Git tree and an existing 446s # upload tag with a different Git tree 446s # - Create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s Commit.from_spec( 446s name='upload', 446s mutate='The upload tag contents', 446s ), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-1': Placeholder('upload'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [Commit.from_spec( 446s name='reimport', 446s message='Test commit (new)', 446s )], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 4) An existing import tag with a different Git tree and no upload tag 446s # - Create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [Commit.from_spec( 446s name='reimport', 446s message='Test commit (new)', 446s )], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 5) No import tag and an existing upload tag with the same Git tree 446s # - Reuse upload tag, create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[Commit.from_spec(name='upload')], 446s tags={'importer/upload/1-1': Placeholder('upload')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('upload'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('upload'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 6) No import tag and an existing upload tag with a different Git tree 446s # - Create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='upload', 446s mutate='The upload tag contents', 446s ), 446s ], 446s tags={'importer/upload/1-1': Placeholder('upload')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='publish', 446s message='Test commit (new)', 446s ), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('publish'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('publish'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 7) No import tags or upload tags 446s # - Create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo(), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='publish', 446s message='Test commit (new)', 446s ), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('publish'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('publish'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1' 446s ], 446s # reuse: 446s False, 446s ), 446s ] 446s ) 446s @patch('gitubuntu.importer.get_import_tag_msg') 446s @patch('gitubuntu.importer.get_import_commit_msg') 446s def test_import_unapplied_spi_tags( 446s get_import_commit_msg_mock, 446s get_import_tag_msg_mock, 446s repo, 446s input_repo, 446s expected_output_refs, 446s validation_repo_delta, 446s validation_repo_expected_identical_refs, 446s reuse, 446s ): 446s """Test that unapplied tags are correctly created, adjusted and/or reused 446s 446s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 446s that determines the commit message to use for a given import 446s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 446s that determines the tag message to use for a given import 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param list(str) expected_output_refs: refs that must exist in the output 446s repository 446s :param dict validation_repo_delta: how to transform the input 446s repository into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_identical_refs: refs that must be 446s identical between the validation repository and the output repository 446s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 446s one supplied by the input repository (assumed to have a commit message 446s of "Test commit") and not one created by the importer in this run 446s (arranged by this test to have a different commit message) 446s 446s The input repository data is written into the output repository and then a 446s fake non-native source package publication of version 1-1 in the Trusty 446s release pocket is imported into it by calling import_unapplied_spi() 446s directly. expected_output_refs, validation_repo_expected_identical_refs and 446s reuse are then asserted. It is further asserted that no other refs exist in 446s the output repository except for those listed in expected_output_refs and 446s validation_repo_expected_identical_refs. 446s """ 446s # Match the repo_builder objects 446s get_import_tag_msg_mock.return_value = 'Test tag' 446s # Importantly, the following commit message must not be the same as the 446s # commit messages used by the test input repository commits, so that we can 446s # later detect the difference between commits that were already there and 446s # new commits created by the importer for the purposes of asserting the 446s # reuse parameter correctly. 446s get_import_commit_msg_mock.return_value = b'Test commit (new)' 446s 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_tag_test.py:463: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmp5xsnjok9/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_import_unapplied_spi_tags[input_repo7-expected_output_refs7-validation_repo_delta7-validation_repo_expected_identical_refs7-False] _ 446s 446s get_import_commit_msg_mock = 446s get_import_tag_msg_mock = 446s repo = 446s input_repo = 446s 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'] 446s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/ubuntu/trusty': ...ect at 0xe81a6690>}, 'update_tags': {'importer/import/1-1': }} 446s validation_repo_expected_identical_refs = ['refs/heads/importer/ubuntu/trusty', 'refs/tags/importer/import/1-1'] 446s reuse = False 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'expected_output_refs', 446s 'validation_repo_delta', 446s 'validation_repo_expected_identical_refs', 446s 'reuse', 446s ], 446s [ 446s # 1) An existing import tag (or reimport tag) with the same Git tree 446s # - Reuse import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[Commit.from_spec(name='import')], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('import'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s ], 446s # reuse: 446s True, 446s ), 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='import tag contents', 446s ), 446s Commit.from_spec(name='reimport'), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 2) An existing import tag with a different Git tree and an existing 446s # upload tag with the same Git tree 446s # - Reuse upload tag, create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s Commit.from_spec(name='upload'), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-1': Placeholder('upload'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('upload'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('upload'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 3) An existing import tag with a different Git tree and an existing 446s # upload tag with a different Git tree 446s # - Create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s Commit.from_spec( 446s name='upload', 446s mutate='The upload tag contents', 446s ), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-1': Placeholder('upload'), 446s }, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [Commit.from_spec( 446s name='reimport', 446s message='Test commit (new)', 446s )], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 4) An existing import tag with a different Git tree and no upload tag 446s # - Create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='import', 446s mutate='The import tag contents', 446s ), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty-proposed': Placeholder('import'), 446s }, 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [Commit.from_spec( 446s name='reimport', 446s message='Test commit (new)', 446s )], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('reimport'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty-proposed', 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 5) No import tag and an existing upload tag with the same Git tree 446s # - Reuse upload tag, create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[Commit.from_spec(name='upload')], 446s tags={'importer/upload/1-1': Placeholder('upload')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('upload'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('upload'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 6) No import tag and an existing upload tag with a different Git tree 446s # - Create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='upload', 446s mutate='The upload tag contents', 446s ), 446s ], 446s tags={'importer/upload/1-1': Placeholder('upload')}, 446s ), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='publish', 446s message='Test commit (new)', 446s ), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('publish'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('publish'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/upload/1-1', 446s ], 446s # reuse: 446s False, 446s ), 446s 446s # 7) No import tags or upload tags 446s # - Create import tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo(), 446s # expected_output_refs: 446s [ 446s 'refs/heads/do-not-push', 446s 'refs/tags/importer/upstream/ubuntu/1.gz', 446s 'refs/heads/importer/importer/ubuntu/dsc', 446s 'refs/heads/importer/importer/ubuntu/pristine-tar', 446s 'refs/notes/importer/changelog', 446s 'refs/notes/importer/importer', 446s ], 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='publish', 446s message='Test commit (new)', 446s ), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('publish'), 446s }, 446s 'update_branches': { 446s 'importer/ubuntu/trusty': Placeholder('publish'), 446s }, 446s }, 446s # validation_repo_expected_identical_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1' 446s ], 446s # reuse: 446s False, 446s ), 446s ] 446s ) 446s @patch('gitubuntu.importer.get_import_tag_msg') 446s @patch('gitubuntu.importer.get_import_commit_msg') 446s def test_import_unapplied_spi_tags( 446s get_import_commit_msg_mock, 446s get_import_tag_msg_mock, 446s repo, 446s input_repo, 446s expected_output_refs, 446s validation_repo_delta, 446s validation_repo_expected_identical_refs, 446s reuse, 446s ): 446s """Test that unapplied tags are correctly created, adjusted and/or reused 446s 446s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 446s that determines the commit message to use for a given import 446s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 446s that determines the tag message to use for a given import 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param list(str) expected_output_refs: refs that must exist in the output 446s repository 446s :param dict validation_repo_delta: how to transform the input 446s repository into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_identical_refs: refs that must be 446s identical between the validation repository and the output repository 446s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 446s one supplied by the input repository (assumed to have a commit message 446s of "Test commit") and not one created by the importer in this run 446s (arranged by this test to have a different commit message) 446s 446s The input repository data is written into the output repository and then a 446s fake non-native source package publication of version 1-1 in the Trusty 446s release pocket is imported into it by calling import_unapplied_spi() 446s directly. expected_output_refs, validation_repo_expected_identical_refs and 446s reuse are then asserted. It is further asserted that no other refs exist in 446s the output repository except for those listed in expected_output_refs and 446s validation_repo_expected_identical_refs. 446s """ 446s # Match the repo_builder objects 446s get_import_tag_msg_mock.return_value = 'Test tag' 446s # Importantly, the following commit message must not be the same as the 446s # commit messages used by the test input repository commits, so that we can 446s # later detect the difference between commits that were already there and 446s # new commits created by the importer for the purposes of asserting the 446s # reuse parameter correctly. 446s get_import_commit_msg_mock.return_value = b'Test commit (new)' 446s 446s input_repo.write(repo.raw_repo) 446s 446s publish_spec = source_builder.SourceSpec( 446s version='1-1', 446s native=False, 446s ) 446s 446s with source_builder.Source(publish_spec) as dsc_path: 446s > target.import_unapplied_spi( 446s repo=repo, 446s spi=MockSPI(dsc_path, publish_spec.version), 446s namespace='importer', 446s skip_orig=False, 446s parent_overrides={}, 446s ) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_tag_test.py:471: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:2308: in import_unapplied_spi 446s import_unapplied_dsc( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 446s commit, tag = find_or_create_unapplied_commit( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 446s changelog_parents = get_unapplied_import_parents( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 446s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 446s changelog = self.get_changelog_from_treeish(treeish) 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 446s return Changelog.from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:569: in from_treeish 446s blob = follow_symlinks_to_blob( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpj08kw8hk/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_import_applied_spi_tags[input_repo0-validation_repo_delta0-validation_repo_expected_treewise_refs0-True] _ 446s 446s get_import_commit_msg_mock = 446s get_import_tag_msg_mock = 446s repo = 446s input_repo = 446s validation_repo_delta = {} 446s 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'] 446s reuse = True 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'validation_repo_delta', 446s 'validation_repo_expected_treewise_refs', 446s 'reuse', 446s ], 446s [ 446s # 1) An existing applied tag (or reimport tag) with the same Git tree 446s # - Reuse applied tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec(name='unapplied', has_patches=True), 446s Commit.from_spec(name='applied', patches_applied=True), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty': Placeholder('unapplied'), 446s 'importer/applied/ubuntu/trusty': Placeholder('applied'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('unapplied'), 446s 'importer/applied/1-1': Placeholder('applied'), 446s }, 446s ), 446s # validation_repo_delta: 446s { 446s # no output repository delta 446s }, 446s # validation_repo_expected_treewise_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/heads/importer/applied/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/applied/1-1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 2) An existing applied tag with a different Git tree 446s # - Create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='unapplied', 446s has_patches=True, 446s mutate='import tag contents', 446s ), 446s Commit.from_spec( 446s name='unapplied_reimport', 446s has_patches=True, 446s ), 446s Commit.from_spec( 446s name='applied', 446s patches_applied=True, 446s mutate='import tag contents', 446s ) 446s ], 446s branches={'importer/ubuntu/trusty': Placeholder('unapplied')}, 446s tags={ 446s 'importer/import/1-1': 446s Placeholder('unapplied'), 446s 'importer/reimport/import/1-1/0': 446s Placeholder('unapplied'), 446s 'importer/reimport/import/1-1/1': 446s Placeholder('unapplied_reimport'), 446s 'importer/applied/1-1': 446s Placeholder('applied'), 446s }, 446s ), 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='applied_reimport', 446s patches_applied=True, 446s parents=[Placeholder('unapplied_reimport')], 446s ), 446s ], 446s 'update_tags': { 446s 'importer/reimport/applied/1-1/0': 446s Placeholder('applied'), 446s 'importer/reimport/applied/1-1/1': 446s Placeholder('applied_reimport'), 446s }, 446s 'update_branches': { 446s 'importer/applied/ubuntu/trusty': 446s Placeholder('applied_reimport'), 446s }, 446s }, 446s # validation_repo_expected_treewise_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/heads/importer/applied/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s 'refs/tags/importer/applied/1-1', 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s ], 446s # reuse: 446s False, 446s 446s marks=pytest.mark.xfail(reason='LP: #1755247'), 446s ), 446s 446s # 3) No applied tags 446s # - Create applied tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[Commit.from_spec(name='unapplied', has_patches=True)], 446s branches={'importer/ubuntu/trusty': Placeholder('unapplied')}, 446s tags={'importer/import/1-1': Placeholder('unapplied')}, 446s ), 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='applied', 446s patches_applied=True, 446s parents=[Placeholder('unapplied')], 446s ), 446s ], 446s 'update_tags': { 446s 'importer/applied/1-1': Placeholder('applied') 446s }, 446s 'update_branches': { 446s 'importer/applied/ubuntu/trusty': Placeholder('applied'), 446s }, 446s }, 446s # validation_repo_expected_treewise_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/heads/importer/applied/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/applied/1-1' 446s ], 446s # reuse: 446s False, 446s ), 446s ] 446s ) 446s @patch('gitubuntu.importer.get_import_tag_msg') 446s @patch('gitubuntu.importer.get_import_commit_msg') 446s def test_import_applied_spi_tags( 446s get_import_commit_msg_mock, 446s get_import_tag_msg_mock, 446s repo, 446s input_repo, 446s validation_repo_delta, 446s validation_repo_expected_treewise_refs, 446s reuse, 446s ): 446s """Test that applied tags are correctly created, adjusted and/or reused 446s 446s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 446s that determines the commit message to use for a given import 446s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 446s that determines the tag message to use for a given import 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param dict validation_repo_delta: how to transform the input repository 446s into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_treewise_refs: refs whose trees 446s must be identical between the validation repository and the output 446s repository 446s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 446s one supplied by the input repository (assumed to have a commit message 446s of "Test commit") and not one created by the importer in this run 446s (arranged by this test to have a different commit message) 446s 446s The input repository data is written into the output repository and then a 446s fake non-native source package publication of version 1-1 in the Trusty 446s release pocket is imported into it by calling import_applied_spi() 446s directly. reuse and validation_repo_expected_treewise_refs are then 446s asserted. 446s 446s This is similar to test_unapplied_spi_tags except that it calls 446s import_applied_spi() instead of import_unapplied_spi() and only treewise 446s ref comparisons are made. 446s """ 446s # Match the repo_builder objects 446s get_import_tag_msg_mock.return_value = 'Test tag' 446s # Importantly, the following commit message must not be the same as the 446s # commit messages used by the test input repository commits, so that we can 446s # later detect the difference between commits that were already there and 446s # new commits created by the importer for the purposes of asserting the 446s # reuse parameter correctly. 446s get_import_commit_msg_mock.return_value = b'Test commit (new)' 446s 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_tag_test.py:711: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpmd5xidx9/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: applying a 446s dpkg-source: info: applying b 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: applying a 446s dpkg-source: info: applying b 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: applying a 446s dpkg-source: info: applying b 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: applying a 446s dpkg-source: info: applying b 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: applying a 446s dpkg-source: info: applying b 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_import_applied_spi_tags[input_repo2-validation_repo_delta2-validation_repo_expected_treewise_refs2-False] _ 446s 446s get_import_commit_msg_mock = 446s get_import_tag_msg_mock = 446s repo = 446s input_repo = 446s validation_repo_delta = {'add_commits': [], 'update_branches': {'importer/applied/ubuntu/t...ct at 0xe81a40a8>}, 'update_tags': {'importer/applied/1-1': }} 446s 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'] 446s reuse = False 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'validation_repo_delta', 446s 'validation_repo_expected_treewise_refs', 446s 'reuse', 446s ], 446s [ 446s # 1) An existing applied tag (or reimport tag) with the same Git tree 446s # - Reuse applied tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec(name='unapplied', has_patches=True), 446s Commit.from_spec(name='applied', patches_applied=True), 446s ], 446s branches={ 446s 'importer/ubuntu/trusty': Placeholder('unapplied'), 446s 'importer/applied/ubuntu/trusty': Placeholder('applied'), 446s }, 446s tags={ 446s 'importer/import/1-1': Placeholder('unapplied'), 446s 'importer/applied/1-1': Placeholder('applied'), 446s }, 446s ), 446s # validation_repo_delta: 446s { 446s # no output repository delta 446s }, 446s # validation_repo_expected_treewise_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/heads/importer/applied/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/applied/1-1', 446s ], 446s # reuse: 446s True, 446s ), 446s 446s # 2) An existing applied tag with a different Git tree 446s # - Create reimport tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[ 446s Commit.from_spec( 446s name='unapplied', 446s has_patches=True, 446s mutate='import tag contents', 446s ), 446s Commit.from_spec( 446s name='unapplied_reimport', 446s has_patches=True, 446s ), 446s Commit.from_spec( 446s name='applied', 446s patches_applied=True, 446s mutate='import tag contents', 446s ) 446s ], 446s branches={'importer/ubuntu/trusty': Placeholder('unapplied')}, 446s tags={ 446s 'importer/import/1-1': 446s Placeholder('unapplied'), 446s 'importer/reimport/import/1-1/0': 446s Placeholder('unapplied'), 446s 'importer/reimport/import/1-1/1': 446s Placeholder('unapplied_reimport'), 446s 'importer/applied/1-1': 446s Placeholder('applied'), 446s }, 446s ), 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='applied_reimport', 446s patches_applied=True, 446s parents=[Placeholder('unapplied_reimport')], 446s ), 446s ], 446s 'update_tags': { 446s 'importer/reimport/applied/1-1/0': 446s Placeholder('applied'), 446s 'importer/reimport/applied/1-1/1': 446s Placeholder('applied_reimport'), 446s }, 446s 'update_branches': { 446s 'importer/applied/ubuntu/trusty': 446s Placeholder('applied_reimport'), 446s }, 446s }, 446s # validation_repo_expected_treewise_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/heads/importer/applied/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s 'refs/tags/importer/applied/1-1', 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s ], 446s # reuse: 446s False, 446s 446s marks=pytest.mark.xfail(reason='LP: #1755247'), 446s ), 446s 446s # 3) No applied tags 446s # - Create applied tag 446s pytest.param( 446s # input_repo: 446s repo_builder.Repo( 446s commits=[Commit.from_spec(name='unapplied', has_patches=True)], 446s branches={'importer/ubuntu/trusty': Placeholder('unapplied')}, 446s tags={'importer/import/1-1': Placeholder('unapplied')}, 446s ), 446s # validation_repo_delta: 446s { 446s 'add_commits': [ 446s Commit.from_spec( 446s name='applied', 446s patches_applied=True, 446s parents=[Placeholder('unapplied')], 446s ), 446s ], 446s 'update_tags': { 446s 'importer/applied/1-1': Placeholder('applied') 446s }, 446s 'update_branches': { 446s 'importer/applied/ubuntu/trusty': Placeholder('applied'), 446s }, 446s }, 446s # validation_repo_expected_treewise_refs: 446s [ 446s 'refs/heads/importer/ubuntu/trusty', 446s 'refs/heads/importer/applied/ubuntu/trusty', 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/applied/1-1' 446s ], 446s # reuse: 446s False, 446s ), 446s ] 446s ) 446s @patch('gitubuntu.importer.get_import_tag_msg') 446s @patch('gitubuntu.importer.get_import_commit_msg') 446s def test_import_applied_spi_tags( 446s get_import_commit_msg_mock, 446s get_import_tag_msg_mock, 446s repo, 446s input_repo, 446s validation_repo_delta, 446s validation_repo_expected_treewise_refs, 446s reuse, 446s ): 446s """Test that applied tags are correctly created, adjusted and/or reused 446s 446s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 446s that determines the commit message to use for a given import 446s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 446s that determines the tag message to use for a given import 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param dict validation_repo_delta: how to transform the input repository 446s into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_treewise_refs: refs whose trees 446s must be identical between the validation repository and the output 446s repository 446s :param bool reuse: if set, the output ref importer/ubuntu/trusty must be 446s one supplied by the input repository (assumed to have a commit message 446s of "Test commit") and not one created by the importer in this run 446s (arranged by this test to have a different commit message) 446s 446s The input repository data is written into the output repository and then a 446s fake non-native source package publication of version 1-1 in the Trusty 446s release pocket is imported into it by calling import_applied_spi() 446s directly. reuse and validation_repo_expected_treewise_refs are then 446s asserted. 446s 446s This is similar to test_unapplied_spi_tags except that it calls 446s import_applied_spi() instead of import_unapplied_spi() and only treewise 446s ref comparisons are made. 446s """ 446s # Match the repo_builder objects 446s get_import_tag_msg_mock.return_value = 'Test tag' 446s # Importantly, the following commit message must not be the same as the 446s # commit messages used by the test input repository commits, so that we can 446s # later detect the difference between commits that were already there and 446s # new commits created by the importer for the purposes of asserting the 446s # reuse parameter correctly. 446s get_import_commit_msg_mock.return_value = b'Test commit (new)' 446s 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_tag_test.py:711: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmp1stt_nfo/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: applying a 446s dpkg-source: info: applying b 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: applying a 446s dpkg-source: info: applying b 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: applying a 446s dpkg-source: info: applying b 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s __ test_get_existing_import_tags[input_repo1-PatchState.UNAPPLIED-expected1] ___ 446s 446s repo = 446s patch_state = 446s input_repo = 446s expected = ['refs/tags/importer/import/1-1'] 446s 446s @pytest.mark.parametrize( 446s 'input_repo, patch_state, expected', [ 446s ( 446s repo_builder.Repo(), 446s PatchState.UNAPPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s tags={'importer/import/1-1': repo_builder.Commit()}, 446s ), 446s PatchState.UNAPPLIED, 446s ['refs/tags/importer/import/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit(name='import'), 446s repo_builder.Commit(name='reimport1'), 446s ], 446s tags={ 446s 'importer/import/1-1': repo_builder.Commit(), 446s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 446s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 446s }, 446s ), 446s PatchState.UNAPPLIED, 446s [ 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo(), 446s PatchState.APPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s tags={'importer/applied/1-1': repo_builder.Commit()}, 446s ), 446s PatchState.APPLIED, 446s ['refs/tags/importer/applied/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit(name='applied'), 446s repo_builder.Commit(name='reimport1'), 446s ], 446s tags={ 446s 'importer/applied/1-1': repo_builder.Commit(), 446s 'importer/reimport/applied/1-1/0': repo_builder.Commit(), 446s 'importer/reimport/applied/1-1/1': repo_builder.Commit(), 446s }, 446s ), 446s PatchState.APPLIED, 446s [ 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s ], 446s ), 446s ], 446s ) 446s def test_get_existing_import_tags(repo, patch_state, input_repo, expected): 446s """Test that get_existing_import_tags is generally correct 446s 446s This is the general parameterised test for the common case uses of 446s target.get_existing_import_tags. 446s 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param PatchState patch_state: passed through to get_existing_import_tags 446s :param repo_builder.Repo input_repo: input repository data 446s :param list(str) expected: the names of the references that are expected to 446s be returned, in order. 446s """ 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:214: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpu8zil055/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s __ test_get_existing_import_tags[input_repo2-PatchState.UNAPPLIED-expected2] ___ 446s 446s repo = 446s patch_state = 446s input_repo = 446s expected = ['refs/tags/importer/reimport/import/1-1/0', 'refs/tags/importer/reimport/import/1-1/1'] 446s 446s @pytest.mark.parametrize( 446s 'input_repo, patch_state, expected', [ 446s ( 446s repo_builder.Repo(), 446s PatchState.UNAPPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s tags={'importer/import/1-1': repo_builder.Commit()}, 446s ), 446s PatchState.UNAPPLIED, 446s ['refs/tags/importer/import/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit(name='import'), 446s repo_builder.Commit(name='reimport1'), 446s ], 446s tags={ 446s 'importer/import/1-1': repo_builder.Commit(), 446s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 446s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 446s }, 446s ), 446s PatchState.UNAPPLIED, 446s [ 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo(), 446s PatchState.APPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s tags={'importer/applied/1-1': repo_builder.Commit()}, 446s ), 446s PatchState.APPLIED, 446s ['refs/tags/importer/applied/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit(name='applied'), 446s repo_builder.Commit(name='reimport1'), 446s ], 446s tags={ 446s 'importer/applied/1-1': repo_builder.Commit(), 446s 'importer/reimport/applied/1-1/0': repo_builder.Commit(), 446s 'importer/reimport/applied/1-1/1': repo_builder.Commit(), 446s }, 446s ), 446s PatchState.APPLIED, 446s [ 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s ], 446s ), 446s ], 446s ) 446s def test_get_existing_import_tags(repo, patch_state, input_repo, expected): 446s """Test that get_existing_import_tags is generally correct 446s 446s This is the general parameterised test for the common case uses of 446s target.get_existing_import_tags. 446s 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param PatchState patch_state: passed through to get_existing_import_tags 446s :param repo_builder.Repo input_repo: input repository data 446s :param list(str) expected: the names of the references that are expected to 446s be returned, in order. 446s """ 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:214: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpgiaogm01/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ___ test_get_existing_import_tags[input_repo4-PatchState.APPLIED-expected4] ____ 446s 446s repo = 446s patch_state = 446s input_repo = 446s expected = ['refs/tags/importer/applied/1-1'] 446s 446s @pytest.mark.parametrize( 446s 'input_repo, patch_state, expected', [ 446s ( 446s repo_builder.Repo(), 446s PatchState.UNAPPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s tags={'importer/import/1-1': repo_builder.Commit()}, 446s ), 446s PatchState.UNAPPLIED, 446s ['refs/tags/importer/import/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit(name='import'), 446s repo_builder.Commit(name='reimport1'), 446s ], 446s tags={ 446s 'importer/import/1-1': repo_builder.Commit(), 446s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 446s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 446s }, 446s ), 446s PatchState.UNAPPLIED, 446s [ 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo(), 446s PatchState.APPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s tags={'importer/applied/1-1': repo_builder.Commit()}, 446s ), 446s PatchState.APPLIED, 446s ['refs/tags/importer/applied/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit(name='applied'), 446s repo_builder.Commit(name='reimport1'), 446s ], 446s tags={ 446s 'importer/applied/1-1': repo_builder.Commit(), 446s 'importer/reimport/applied/1-1/0': repo_builder.Commit(), 446s 'importer/reimport/applied/1-1/1': repo_builder.Commit(), 446s }, 446s ), 446s PatchState.APPLIED, 446s [ 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s ], 446s ), 446s ], 446s ) 446s def test_get_existing_import_tags(repo, patch_state, input_repo, expected): 446s """Test that get_existing_import_tags is generally correct 446s 446s This is the general parameterised test for the common case uses of 446s target.get_existing_import_tags. 446s 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param PatchState patch_state: passed through to get_existing_import_tags 446s :param repo_builder.Repo input_repo: input repository data 446s :param list(str) expected: the names of the references that are expected to 446s be returned, in order. 446s """ 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:214: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpekwu71r8/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ___ test_get_existing_import_tags[input_repo5-PatchState.APPLIED-expected5] ____ 446s 446s repo = 446s patch_state = 446s input_repo = 446s expected = ['refs/tags/importer/reimport/applied/1-1/0', 'refs/tags/importer/reimport/applied/1-1/1'] 446s 446s @pytest.mark.parametrize( 446s 'input_repo, patch_state, expected', [ 446s ( 446s repo_builder.Repo(), 446s PatchState.UNAPPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s tags={'importer/import/1-1': repo_builder.Commit()}, 446s ), 446s PatchState.UNAPPLIED, 446s ['refs/tags/importer/import/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit(name='import'), 446s repo_builder.Commit(name='reimport1'), 446s ], 446s tags={ 446s 'importer/import/1-1': repo_builder.Commit(), 446s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 446s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 446s }, 446s ), 446s PatchState.UNAPPLIED, 446s [ 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo(), 446s PatchState.APPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s tags={'importer/applied/1-1': repo_builder.Commit()}, 446s ), 446s PatchState.APPLIED, 446s ['refs/tags/importer/applied/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit(name='applied'), 446s repo_builder.Commit(name='reimport1'), 446s ], 446s tags={ 446s 'importer/applied/1-1': repo_builder.Commit(), 446s 'importer/reimport/applied/1-1/0': repo_builder.Commit(), 446s 'importer/reimport/applied/1-1/1': repo_builder.Commit(), 446s }, 446s ), 446s PatchState.APPLIED, 446s [ 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s ], 446s ), 446s ], 446s ) 446s def test_get_existing_import_tags(repo, patch_state, input_repo, expected): 446s """Test that get_existing_import_tags is generally correct 446s 446s This is the general parameterised test for the common case uses of 446s target.get_existing_import_tags. 446s 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param PatchState patch_state: passed through to get_existing_import_tags 446s :param repo_builder.Repo input_repo: input repository data 446s :param list(str) expected: the names of the references that are expected to 446s be returned, in order. 446s """ 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:214: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmp3q6hghtf/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ____________________ test_get_existing_import_tags_ordering ____________________ 446s 446s repo = 446s 446s def test_get_existing_import_tags_ordering(repo): 446s """Test that get_existing_import_tags returns results in the correct order 446s 446s To maintain hash stability, the spec defines that multiple changelog 446s parents must appear in the order that they were published. For this to 446s work, get_existing_import_tags must return the tags in the correct order 446s even if the underlying git repository tags appear in an arbitrary order. 446s 446s :param GitUbuntuRepository repo: fixture of a temporary repository to use 446s """ 446s 446s # Construct a synthetic git repository containing tags 446s repo_builder.Repo( 446s tags={ 446s 'importer/import/1-1': repo_builder.Commit(), 446s 'importer/reimport/import/1-1/0': repo_builder.Commit(), 446s 'importer/reimport/import/1-1/1': repo_builder.Commit(), 446s } 446s > ).write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:240: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpqbzyq1ig/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s _ test_create_import_tag[input_repo0-validation_repo_delta0-validation_repo_expected_identical_refs0] _ 446s 446s repo = 446s input_repo = 446s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-1': }} 446s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1'] 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'validation_repo_delta', 446s 'validation_repo_expected_identical_refs', 446s ], 446s [ 446s ( 446s repo_builder.Repo(), 446s { 446s 'add_commits': [ 446s repo_builder.Commit(name='import'), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('import'), 446s }, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s { 446s 'add_commits': [ 446s repo_builder.Commit(name='reimport'), 446s ], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit(name='import'), 446s repo_builder.Commit(name='reimport1'), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport1'), 446s }, 446s ), 446s { 446s 'add_commits': [ 446s repo_builder.Commit(name='reimport2'), 446s ], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/2': Placeholder('reimport2'), 446s }, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s 'refs/tags/importer/reimport/import/1-1/2', 446s ], 446s ), 446s ], 446s ) 446s def test_create_import_tag( 446s repo, 446s input_repo, 446s validation_repo_delta, 446s validation_repo_expected_identical_refs, 446s ): 446s """ 446s Unit test that create_import_tag creates the correct import tag 446s 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param dict validation_repo_delta: how to transform the input repository 446s into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_identical_refs: refs that must be 446s identical between the validation repository and the output repository 446s """ 446s publish_commit = repo.raw_repo.get( 446s repo_builder.Commit().write(repo.raw_repo) 446s ).peel(pygit2.Commit) 446s input_repo.write(repo.raw_repo) 446s 446s > target.create_import_tag(repo, publish_commit, '1-1', 'importer') 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:370: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:1379: in create_import_tag 446s repo.create_tag( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s commit_hash = '240dd844a69653244edb52c57c42d709512d64cd' 446s tag_name = 'importer/import/1-1', tag_msg = 'git-ubuntu import' 446s tagger = pygit2.Signature('git-ubuntu importer', 'ubuntu-devel-discuss@lists.ubuntu.com', 0, 0, None) 446s 446s def create_tag(self, 446s commit_hash, 446s tag_name, 446s tag_msg, 446s tagger=None, 446s ): 446s """Create a tag in the repository 446s 446s :param str commit_hash: the commit hash the tag will point to. 446s :param str tag_name: the name of the tag to be created. 446s :param str tag_msg: the text of the tag annotation. 446s :param pygit2.Signature tagger: if supplied, use this signature in the 446s created tag's "tagger" metadata. If not supplied, an arbitrary name 446s and email address is used with the current time. 446s :returns: None 446s """ 446s if not tagger: 446s tagger_time, tagger_offset = datetime_to_signature_spec( 446s datetime.datetime.now(), 446s ) 446s tagger = pygit2.Signature( 446s gitubuntu.spec.SYNTHESIZED_COMMITTER_NAME, 446s gitubuntu.spec.SYNTHESIZED_COMMITTER_EMAIL, 446s tagger_time, 446s tagger_offset, 446s ) 446s 446s logging.debug("Creating tag %s pointing to %s", tag_name, commit_hash) 446s self.raw_repo.create_tag( 446s tag_name, 446s pygit2.Oid(hex=commit_hash), 446s > pygit2.GIT_OBJ_COMMIT, 446s tagger, 446s tag_msg, 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:2114: AttributeError 446s _ test_create_import_tag[input_repo1-validation_repo_delta1-validation_repo_expected_identical_refs1] _ 446s 446s repo = 446s input_repo = 446s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/reimport/import/1-1/...er object at 0xe81195a0>, 'importer/reimport/import/1-1/1': }} 446s 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'] 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'validation_repo_delta', 446s 'validation_repo_expected_identical_refs', 446s ], 446s [ 446s ( 446s repo_builder.Repo(), 446s { 446s 'add_commits': [ 446s repo_builder.Commit(name='import'), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('import'), 446s }, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s { 446s 'add_commits': [ 446s repo_builder.Commit(name='reimport'), 446s ], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit(name='import'), 446s repo_builder.Commit(name='reimport1'), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport1'), 446s }, 446s ), 446s { 446s 'add_commits': [ 446s repo_builder.Commit(name='reimport2'), 446s ], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/2': Placeholder('reimport2'), 446s }, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s 'refs/tags/importer/reimport/import/1-1/2', 446s ], 446s ), 446s ], 446s ) 446s def test_create_import_tag( 446s repo, 446s input_repo, 446s validation_repo_delta, 446s validation_repo_expected_identical_refs, 446s ): 446s """ 446s Unit test that create_import_tag creates the correct import tag 446s 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param dict validation_repo_delta: how to transform the input repository 446s into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_identical_refs: refs that must be 446s identical between the validation repository and the output repository 446s """ 446s publish_commit = repo.raw_repo.get( 446s repo_builder.Commit().write(repo.raw_repo) 446s ).peel(pygit2.Commit) 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:368: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmprx5yb37a/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s _ test_create_import_tag[input_repo2-validation_repo_delta2-validation_repo_expected_identical_refs2] _ 446s 446s repo = 446s input_repo = 446s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/reimport/import/1-1/2': }} 446s 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'] 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'validation_repo_delta', 446s 'validation_repo_expected_identical_refs', 446s ], 446s [ 446s ( 446s repo_builder.Repo(), 446s { 446s 'add_commits': [ 446s repo_builder.Commit(name='import'), 446s ], 446s 'update_tags': { 446s 'importer/import/1-1': Placeholder('import'), 446s }, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s { 446s 'add_commits': [ 446s repo_builder.Commit(name='reimport'), 446s ], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit(name='import'), 446s repo_builder.Commit(name='reimport1'), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport1'), 446s }, 446s ), 446s { 446s 'add_commits': [ 446s repo_builder.Commit(name='reimport2'), 446s ], 446s 'update_tags': { 446s 'importer/reimport/import/1-1/2': Placeholder('reimport2'), 446s }, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s 'refs/tags/importer/reimport/import/1-1/2', 446s ], 446s ), 446s ], 446s ) 446s def test_create_import_tag( 446s repo, 446s input_repo, 446s validation_repo_delta, 446s validation_repo_expected_identical_refs, 446s ): 446s """ 446s Unit test that create_import_tag creates the correct import tag 446s 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param dict validation_repo_delta: how to transform the input repository 446s into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_identical_refs: refs that must be 446s identical between the validation repository and the output repository 446s """ 446s publish_commit = repo.raw_repo.get( 446s repo_builder.Commit().write(repo.raw_repo) 446s ).peel(pygit2.Commit) 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:368: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmp4huav5gy/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ____________ test_create_import_tag_hash_stability_on_first_import _____________ 446s 446s repo = 446s 446s def test_create_import_tag_hash_stability_on_first_import(repo): 446s """Created import tags should be hash stable on first import 446s 446s :param GitUbuntuRepository repo: fixture providing a temporary 446s GitUbuntuRepository instance to use 446s """ 446s publish_commit = repo.raw_repo.get( 446s repo_builder.Commit( 446s author=pygit2.Signature( 446s 'Hash stability test author', 446s 'newauthor@example.com', 446s 1, 446s 2, 446s ), 446s committer=pygit2.Signature( 446s 'Hash stability test committer', 446s 'newcommitter@example.com', 446s 3, 446s 4, 446s ), 446s ).write(repo.raw_repo) 446s ).peel(pygit2.Commit) 446s > target.create_import_tag(repo, publish_commit, '1-1', 'importer') 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:402: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:1379: in create_import_tag 446s repo.create_tag( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s commit_hash = '65729a1dca101328820bf4f49fbca4e9571a772a' 446s tag_name = 'importer/import/1-1', tag_msg = 'git-ubuntu import' 446s tagger = pygit2.Signature('git-ubuntu importer', 'ubuntu-devel-discuss@lists.ubuntu.com', 3, 4, None) 446s 446s def create_tag(self, 446s commit_hash, 446s tag_name, 446s tag_msg, 446s tagger=None, 446s ): 446s """Create a tag in the repository 446s 446s :param str commit_hash: the commit hash the tag will point to. 446s :param str tag_name: the name of the tag to be created. 446s :param str tag_msg: the text of the tag annotation. 446s :param pygit2.Signature tagger: if supplied, use this signature in the 446s created tag's "tagger" metadata. If not supplied, an arbitrary name 446s and email address is used with the current time. 446s :returns: None 446s """ 446s if not tagger: 446s tagger_time, tagger_offset = datetime_to_signature_spec( 446s datetime.datetime.now(), 446s ) 446s tagger = pygit2.Signature( 446s gitubuntu.spec.SYNTHESIZED_COMMITTER_NAME, 446s gitubuntu.spec.SYNTHESIZED_COMMITTER_EMAIL, 446s tagger_time, 446s tagger_offset, 446s ) 446s 446s logging.debug("Creating tag %s pointing to %s", tag_name, commit_hash) 446s self.raw_repo.create_tag( 446s tag_name, 446s pygit2.Oid(hex=commit_hash), 446s > pygit2.GIT_OBJ_COMMIT, 446s tagger, 446s tag_msg, 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:2114: AttributeError 446s ______________ test_create_import_tag_hash_stability_on_reimport _______________ 446s 446s repo = 446s 446s def test_create_import_tag_hash_stability_on_reimport(repo): 446s """Created import tags should be hash stable on reimport 446s 446s This includes both the /0 duplicate reimport tag of the original import tag 446s as well as the /1 reimport tag being created. 446s 446s :param GitUbuntuRepository repo: fixture providing a temporary 446s GitUbuntuRepository instance to use 446s """ 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit( 446s name='root', 446s author=pygit2.Signature( 446s 'Hash stability test author', 446s 'author@example.com', 446s 1, 446s 2, 446s ), 446s committer=pygit2.Signature( 446s 'Hash stability test committer', 446s 'committer@example.com', 446s 3, 446s 4, 446s ), 446s ), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('root'), 446s }, 446s tagger=pygit2.Signature( 446s 'Hash stability test name', 446s 'stability@example.com', 446s 5, 446s 6, 446s ), 446s > ).write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:449: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpy38v4m40/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s _ test_create_applied_tag[input_repo0-validation_repo_delta0-validation_repo_expected_identical_refs0] _ 446s 446s repo = 446s input_repo = 446s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/applied/1-1': }} 446s validation_repo_expected_identical_refs = ['refs/tags/importer/applied/1-1'] 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'validation_repo_delta', 446s 'validation_repo_expected_identical_refs', 446s ], 446s [ 446s ( 446s repo_builder.Repo(), 446s { 446s 'add_commits': [repo_builder.Commit(name='import')], 446s 'update_tags': {'importer/applied/1-1': Placeholder('import')}, 446s }, 446s [ 446s 'refs/tags/importer/applied/1-1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit(name='import')], 446s tags={'importer/applied/1-1': Placeholder('import')}, 446s ), 446s { 446s 'add_commits': [repo_builder.Commit(name='reimport')], 446s 'update_tags': { 446s 'importer/reimport/applied/1-1/0': Placeholder('import'), 446s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 446s }, 446s }, 446s [ 446s 'refs/tags/importer/applied/1-1', 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit(name='import'), 446s repo_builder.Commit(name='reimport1'), 446s ], 446s tags={ 446s 'importer/applied/1-1': Placeholder('import'), 446s 'importer/reimport/applied/1-1/0': Placeholder('import'), 446s 'importer/reimport/applied/1-1/1': Placeholder('reimport1'), 446s }, 446s ), 446s { 446s 'add_commits': [ 446s repo_builder.Commit(name='reimport2') 446s ], 446s 'update_tags': { 446s 'importer/reimport/applied/1-1/2': Placeholder('reimport2'), 446s }, 446s }, 446s [ 446s 'refs/tags/importer/applied/1-1', 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s 'refs/tags/importer/reimport/applied/1-1/2', 446s ], 446s ), 446s ], 446s ) 446s def test_create_applied_tag( 446s repo, 446s input_repo, 446s validation_repo_delta, 446s validation_repo_expected_identical_refs, 446s ): 446s """ 446s Unit test that create_applied_tag creates the correct import tag 446s 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param dict validation_repo_delta: how to transform the input repository 446s into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_identical_refs: refs that must be 446s identical between the validation repository and the output repository 446s """ 446s publish_commit_str = str( 446s repo.raw_repo.get( 446s repo_builder.Commit().write(repo.raw_repo) 446s ).peel(pygit2.Commit).id 446s ) 446s 446s input_repo.write(repo.raw_repo) 446s 446s > target.create_applied_tag(repo, publish_commit_str, '1-1', 'importer') 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:577: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:1309: in create_applied_tag 446s repo.create_tag( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s commit_hash = '240dd844a69653244edb52c57c42d709512d64cd' 446s tag_name = 'importer/applied/1-1', tag_msg = 'git-ubuntu import' 446s tagger = pygit2.Signature('git-ubuntu importer', 'ubuntu-devel-discuss@lists.ubuntu.com', 1732614023, 0, None) 446s 446s def create_tag(self, 446s commit_hash, 446s tag_name, 446s tag_msg, 446s tagger=None, 446s ): 446s """Create a tag in the repository 446s 446s :param str commit_hash: the commit hash the tag will point to. 446s :param str tag_name: the name of the tag to be created. 446s :param str tag_msg: the text of the tag annotation. 446s :param pygit2.Signature tagger: if supplied, use this signature in the 446s created tag's "tagger" metadata. If not supplied, an arbitrary name 446s and email address is used with the current time. 446s :returns: None 446s """ 446s if not tagger: 446s tagger_time, tagger_offset = datetime_to_signature_spec( 446s datetime.datetime.now(), 446s ) 446s tagger = pygit2.Signature( 446s gitubuntu.spec.SYNTHESIZED_COMMITTER_NAME, 446s gitubuntu.spec.SYNTHESIZED_COMMITTER_EMAIL, 446s tagger_time, 446s tagger_offset, 446s ) 446s 446s logging.debug("Creating tag %s pointing to %s", tag_name, commit_hash) 446s self.raw_repo.create_tag( 446s tag_name, 446s pygit2.Oid(hex=commit_hash), 446s > pygit2.GIT_OBJ_COMMIT, 446s tagger, 446s tag_msg, 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:2114: AttributeError 446s _ test_create_applied_tag[input_repo1-validation_repo_delta1-validation_repo_expected_identical_refs1] _ 446s 446s repo = 446s input_repo = 446s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/reimport/applied/1-1...r object at 0xe7d8cfd8>, 'importer/reimport/applied/1-1/1': }} 446s 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'] 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'validation_repo_delta', 446s 'validation_repo_expected_identical_refs', 446s ], 446s [ 446s ( 446s repo_builder.Repo(), 446s { 446s 'add_commits': [repo_builder.Commit(name='import')], 446s 'update_tags': {'importer/applied/1-1': Placeholder('import')}, 446s }, 446s [ 446s 'refs/tags/importer/applied/1-1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit(name='import')], 446s tags={'importer/applied/1-1': Placeholder('import')}, 446s ), 446s { 446s 'add_commits': [repo_builder.Commit(name='reimport')], 446s 'update_tags': { 446s 'importer/reimport/applied/1-1/0': Placeholder('import'), 446s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 446s }, 446s }, 446s [ 446s 'refs/tags/importer/applied/1-1', 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit(name='import'), 446s repo_builder.Commit(name='reimport1'), 446s ], 446s tags={ 446s 'importer/applied/1-1': Placeholder('import'), 446s 'importer/reimport/applied/1-1/0': Placeholder('import'), 446s 'importer/reimport/applied/1-1/1': Placeholder('reimport1'), 446s }, 446s ), 446s { 446s 'add_commits': [ 446s repo_builder.Commit(name='reimport2') 446s ], 446s 'update_tags': { 446s 'importer/reimport/applied/1-1/2': Placeholder('reimport2'), 446s }, 446s }, 446s [ 446s 'refs/tags/importer/applied/1-1', 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s 'refs/tags/importer/reimport/applied/1-1/2', 446s ], 446s ), 446s ], 446s ) 446s def test_create_applied_tag( 446s repo, 446s input_repo, 446s validation_repo_delta, 446s validation_repo_expected_identical_refs, 446s ): 446s """ 446s Unit test that create_applied_tag creates the correct import tag 446s 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param dict validation_repo_delta: how to transform the input repository 446s into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_identical_refs: refs that must be 446s identical between the validation repository and the output repository 446s """ 446s publish_commit_str = str( 446s repo.raw_repo.get( 446s repo_builder.Commit().write(repo.raw_repo) 446s ).peel(pygit2.Commit).id 446s ) 446s 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:575: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpnrsm3tj8/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s _ test_create_applied_tag[input_repo2-validation_repo_delta2-validation_repo_expected_identical_refs2] _ 446s 446s repo = 446s input_repo = 446s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/reimport/applied/1-1/2': }} 446s 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'] 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'validation_repo_delta', 446s 'validation_repo_expected_identical_refs', 446s ], 446s [ 446s ( 446s repo_builder.Repo(), 446s { 446s 'add_commits': [repo_builder.Commit(name='import')], 446s 'update_tags': {'importer/applied/1-1': Placeholder('import')}, 446s }, 446s [ 446s 'refs/tags/importer/applied/1-1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit(name='import')], 446s tags={'importer/applied/1-1': Placeholder('import')}, 446s ), 446s { 446s 'add_commits': [repo_builder.Commit(name='reimport')], 446s 'update_tags': { 446s 'importer/reimport/applied/1-1/0': Placeholder('import'), 446s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 446s }, 446s }, 446s [ 446s 'refs/tags/importer/applied/1-1', 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit(name='import'), 446s repo_builder.Commit(name='reimport1'), 446s ], 446s tags={ 446s 'importer/applied/1-1': Placeholder('import'), 446s 'importer/reimport/applied/1-1/0': Placeholder('import'), 446s 'importer/reimport/applied/1-1/1': Placeholder('reimport1'), 446s }, 446s ), 446s { 446s 'add_commits': [ 446s repo_builder.Commit(name='reimport2') 446s ], 446s 'update_tags': { 446s 'importer/reimport/applied/1-1/2': Placeholder('reimport2'), 446s }, 446s }, 446s [ 446s 'refs/tags/importer/applied/1-1', 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s 'refs/tags/importer/reimport/applied/1-1/2', 446s ], 446s ), 446s ], 446s ) 446s def test_create_applied_tag( 446s repo, 446s input_repo, 446s validation_repo_delta, 446s validation_repo_expected_identical_refs, 446s ): 446s """ 446s Unit test that create_applied_tag creates the correct import tag 446s 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param dict validation_repo_delta: how to transform the input repository 446s into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_identical_refs: refs that must be 446s identical between the validation repository and the output repository 446s """ 446s publish_commit_str = str( 446s repo.raw_repo.get( 446s repo_builder.Commit().write(repo.raw_repo) 446s ).peel(pygit2.Commit).id 446s ) 446s 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:575: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpk0xso_0j/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s _ test_get_changelog_parent_commits[input_repo1-parent_overrides1-changelog_versions1-PatchState.UNAPPLIED-expected_refs1] _ 446s 446s repo = 446s input_repo = 446s parent_overrides = {}, changelog_versions = ['1-2', '1-1'] 446s patch_state = 446s expected_refs = ['refs/tags/importer/import/1-1'] 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'parent_overrides', 446s 'changelog_versions', 446s 'patch_state', 446s 'expected_refs', 446s ], 446s [ 446s ( 446s repo_builder.Repo(), 446s {}, 446s ['1-2', '1-1',], 446s PatchState.UNAPPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.UNAPPLIED, 446s ['refs/tags/importer/import/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec(name='reimport', mutate=1), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.UNAPPLIED, 446s [ 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s {}, 446s ['1-3', '1-2', '1-1'], 446s PatchState.UNAPPLIED, 446s ['refs/tags/importer/import/1-1'], 446s ), 446s ( 446s repo_builder.Repo(), 446s {}, 446s ['1-2', '1-1',], 446s PatchState.APPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='applied')], 446s tags={'importer/applied/1-1': Placeholder('applied')}, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.APPLIED, 446s ['refs/tags/importer/applied/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec(name='reimport', mutate=1), 446s ], 446s tags={ 446s 'importer/applied/1-1': Placeholder('import'), 446s 'importer/reimport/applied/1-1/0': Placeholder('import'), 446s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.APPLIED, 446s [ 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='applied')], 446s tags={'importer/applied/1-1': Placeholder('applied')}, 446s ), 446s {}, 446s ['1-3', '1-2', '1-1'], 446s PatchState.APPLIED, 446s ['refs/tags/importer/applied/1-1'], 446s ), 446s ], 446s ) 446s def test_get_changelog_parent_commits( 446s repo, 446s input_repo, 446s parent_overrides, 446s changelog_versions, 446s patch_state, 446s expected_refs, 446s ): 446s """Test that get_changelog_parent_commits is generally correct 446s 446s This is the general parameterised test for the common case uses of 446s target.get_changelog_parent_commits. 446s 446s :param GitUbuntuRepository repo: fixture providing a temporary 446s GitUbuntuRepository instance to use 446s :param repo_builder.Repo input_repo: the input repository data to use that 446s will be populated into @repo before @repo is passed through to 446s get_changelog_parent_commits 446s :param dict parent_overrides: passed through to 446s get_changelog_parent_commits. 446s :param PatchState patch_state: passed through to 446s get_changelog_parent_commits 446s :param list(str) expected_refs: the expected return value of 446s get_changelog_parent_commits expressed using a list of reference names. 446s Since get_changelog_parent_commits returns a list of commit hash 446s strings, the reference names will need to be dereferenced before 446s comparison; this way the test parameters don't need to be opaque hash 446s strings. 446s """ 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:721: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpysu2m80b/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_get_changelog_parent_commits[input_repo2-parent_overrides2-changelog_versions2-PatchState.UNAPPLIED-expected_refs2] _ 446s 446s repo = 446s input_repo = 446s parent_overrides = {}, changelog_versions = ['1-2', '1-1'] 446s patch_state = 446s expected_refs = ['refs/tags/importer/reimport/import/1-1/0', 'refs/tags/importer/reimport/import/1-1/1'] 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'parent_overrides', 446s 'changelog_versions', 446s 'patch_state', 446s 'expected_refs', 446s ], 446s [ 446s ( 446s repo_builder.Repo(), 446s {}, 446s ['1-2', '1-1',], 446s PatchState.UNAPPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.UNAPPLIED, 446s ['refs/tags/importer/import/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec(name='reimport', mutate=1), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.UNAPPLIED, 446s [ 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s {}, 446s ['1-3', '1-2', '1-1'], 446s PatchState.UNAPPLIED, 446s ['refs/tags/importer/import/1-1'], 446s ), 446s ( 446s repo_builder.Repo(), 446s {}, 446s ['1-2', '1-1',], 446s PatchState.APPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='applied')], 446s tags={'importer/applied/1-1': Placeholder('applied')}, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.APPLIED, 446s ['refs/tags/importer/applied/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec(name='reimport', mutate=1), 446s ], 446s tags={ 446s 'importer/applied/1-1': Placeholder('import'), 446s 'importer/reimport/applied/1-1/0': Placeholder('import'), 446s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.APPLIED, 446s [ 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='applied')], 446s tags={'importer/applied/1-1': Placeholder('applied')}, 446s ), 446s {}, 446s ['1-3', '1-2', '1-1'], 446s PatchState.APPLIED, 446s ['refs/tags/importer/applied/1-1'], 446s ), 446s ], 446s ) 446s def test_get_changelog_parent_commits( 446s repo, 446s input_repo, 446s parent_overrides, 446s changelog_versions, 446s patch_state, 446s expected_refs, 446s ): 446s """Test that get_changelog_parent_commits is generally correct 446s 446s This is the general parameterised test for the common case uses of 446s target.get_changelog_parent_commits. 446s 446s :param GitUbuntuRepository repo: fixture providing a temporary 446s GitUbuntuRepository instance to use 446s :param repo_builder.Repo input_repo: the input repository data to use that 446s will be populated into @repo before @repo is passed through to 446s get_changelog_parent_commits 446s :param dict parent_overrides: passed through to 446s get_changelog_parent_commits. 446s :param PatchState patch_state: passed through to 446s get_changelog_parent_commits 446s :param list(str) expected_refs: the expected return value of 446s get_changelog_parent_commits expressed using a list of reference names. 446s Since get_changelog_parent_commits returns a list of commit hash 446s strings, the reference names will need to be dereferenced before 446s comparison; this way the test parameters don't need to be opaque hash 446s strings. 446s """ 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:721: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpxavo5poc/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_get_changelog_parent_commits[input_repo3-parent_overrides3-changelog_versions3-PatchState.UNAPPLIED-expected_refs3] _ 446s 446s repo = 446s input_repo = 446s parent_overrides = {}, changelog_versions = ['1-3', '1-2', '1-1'] 446s patch_state = 446s expected_refs = ['refs/tags/importer/import/1-1'] 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'parent_overrides', 446s 'changelog_versions', 446s 'patch_state', 446s 'expected_refs', 446s ], 446s [ 446s ( 446s repo_builder.Repo(), 446s {}, 446s ['1-2', '1-1',], 446s PatchState.UNAPPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.UNAPPLIED, 446s ['refs/tags/importer/import/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec(name='reimport', mutate=1), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.UNAPPLIED, 446s [ 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s {}, 446s ['1-3', '1-2', '1-1'], 446s PatchState.UNAPPLIED, 446s ['refs/tags/importer/import/1-1'], 446s ), 446s ( 446s repo_builder.Repo(), 446s {}, 446s ['1-2', '1-1',], 446s PatchState.APPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='applied')], 446s tags={'importer/applied/1-1': Placeholder('applied')}, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.APPLIED, 446s ['refs/tags/importer/applied/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec(name='reimport', mutate=1), 446s ], 446s tags={ 446s 'importer/applied/1-1': Placeholder('import'), 446s 'importer/reimport/applied/1-1/0': Placeholder('import'), 446s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.APPLIED, 446s [ 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='applied')], 446s tags={'importer/applied/1-1': Placeholder('applied')}, 446s ), 446s {}, 446s ['1-3', '1-2', '1-1'], 446s PatchState.APPLIED, 446s ['refs/tags/importer/applied/1-1'], 446s ), 446s ], 446s ) 446s def test_get_changelog_parent_commits( 446s repo, 446s input_repo, 446s parent_overrides, 446s changelog_versions, 446s patch_state, 446s expected_refs, 446s ): 446s """Test that get_changelog_parent_commits is generally correct 446s 446s This is the general parameterised test for the common case uses of 446s target.get_changelog_parent_commits. 446s 446s :param GitUbuntuRepository repo: fixture providing a temporary 446s GitUbuntuRepository instance to use 446s :param repo_builder.Repo input_repo: the input repository data to use that 446s will be populated into @repo before @repo is passed through to 446s get_changelog_parent_commits 446s :param dict parent_overrides: passed through to 446s get_changelog_parent_commits. 446s :param PatchState patch_state: passed through to 446s get_changelog_parent_commits 446s :param list(str) expected_refs: the expected return value of 446s get_changelog_parent_commits expressed using a list of reference names. 446s Since get_changelog_parent_commits returns a list of commit hash 446s strings, the reference names will need to be dereferenced before 446s comparison; this way the test parameters don't need to be opaque hash 446s strings. 446s """ 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:721: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpp7fbxxfz/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_get_changelog_parent_commits[input_repo5-parent_overrides5-changelog_versions5-PatchState.APPLIED-expected_refs5] _ 446s 446s repo = 446s input_repo = 446s parent_overrides = {}, changelog_versions = ['1-2', '1-1'] 446s patch_state = 446s expected_refs = ['refs/tags/importer/applied/1-1'] 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'parent_overrides', 446s 'changelog_versions', 446s 'patch_state', 446s 'expected_refs', 446s ], 446s [ 446s ( 446s repo_builder.Repo(), 446s {}, 446s ['1-2', '1-1',], 446s PatchState.UNAPPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.UNAPPLIED, 446s ['refs/tags/importer/import/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec(name='reimport', mutate=1), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.UNAPPLIED, 446s [ 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s {}, 446s ['1-3', '1-2', '1-1'], 446s PatchState.UNAPPLIED, 446s ['refs/tags/importer/import/1-1'], 446s ), 446s ( 446s repo_builder.Repo(), 446s {}, 446s ['1-2', '1-1',], 446s PatchState.APPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='applied')], 446s tags={'importer/applied/1-1': Placeholder('applied')}, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.APPLIED, 446s ['refs/tags/importer/applied/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec(name='reimport', mutate=1), 446s ], 446s tags={ 446s 'importer/applied/1-1': Placeholder('import'), 446s 'importer/reimport/applied/1-1/0': Placeholder('import'), 446s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.APPLIED, 446s [ 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='applied')], 446s tags={'importer/applied/1-1': Placeholder('applied')}, 446s ), 446s {}, 446s ['1-3', '1-2', '1-1'], 446s PatchState.APPLIED, 446s ['refs/tags/importer/applied/1-1'], 446s ), 446s ], 446s ) 446s def test_get_changelog_parent_commits( 446s repo, 446s input_repo, 446s parent_overrides, 446s changelog_versions, 446s patch_state, 446s expected_refs, 446s ): 446s """Test that get_changelog_parent_commits is generally correct 446s 446s This is the general parameterised test for the common case uses of 446s target.get_changelog_parent_commits. 446s 446s :param GitUbuntuRepository repo: fixture providing a temporary 446s GitUbuntuRepository instance to use 446s :param repo_builder.Repo input_repo: the input repository data to use that 446s will be populated into @repo before @repo is passed through to 446s get_changelog_parent_commits 446s :param dict parent_overrides: passed through to 446s get_changelog_parent_commits. 446s :param PatchState patch_state: passed through to 446s get_changelog_parent_commits 446s :param list(str) expected_refs: the expected return value of 446s get_changelog_parent_commits expressed using a list of reference names. 446s Since get_changelog_parent_commits returns a list of commit hash 446s strings, the reference names will need to be dereferenced before 446s comparison; this way the test parameters don't need to be opaque hash 446s strings. 446s """ 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:721: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmp2fhj36cf/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_get_changelog_parent_commits[input_repo6-parent_overrides6-changelog_versions6-PatchState.APPLIED-expected_refs6] _ 446s 446s repo = 446s input_repo = 446s parent_overrides = {}, changelog_versions = ['1-2', '1-1'] 446s patch_state = 446s expected_refs = ['refs/tags/importer/reimport/applied/1-1/0', 'refs/tags/importer/reimport/applied/1-1/1'] 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'parent_overrides', 446s 'changelog_versions', 446s 'patch_state', 446s 'expected_refs', 446s ], 446s [ 446s ( 446s repo_builder.Repo(), 446s {}, 446s ['1-2', '1-1',], 446s PatchState.UNAPPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.UNAPPLIED, 446s ['refs/tags/importer/import/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec(name='reimport', mutate=1), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.UNAPPLIED, 446s [ 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s {}, 446s ['1-3', '1-2', '1-1'], 446s PatchState.UNAPPLIED, 446s ['refs/tags/importer/import/1-1'], 446s ), 446s ( 446s repo_builder.Repo(), 446s {}, 446s ['1-2', '1-1',], 446s PatchState.APPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='applied')], 446s tags={'importer/applied/1-1': Placeholder('applied')}, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.APPLIED, 446s ['refs/tags/importer/applied/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec(name='reimport', mutate=1), 446s ], 446s tags={ 446s 'importer/applied/1-1': Placeholder('import'), 446s 'importer/reimport/applied/1-1/0': Placeholder('import'), 446s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.APPLIED, 446s [ 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='applied')], 446s tags={'importer/applied/1-1': Placeholder('applied')}, 446s ), 446s {}, 446s ['1-3', '1-2', '1-1'], 446s PatchState.APPLIED, 446s ['refs/tags/importer/applied/1-1'], 446s ), 446s ], 446s ) 446s def test_get_changelog_parent_commits( 446s repo, 446s input_repo, 446s parent_overrides, 446s changelog_versions, 446s patch_state, 446s expected_refs, 446s ): 446s """Test that get_changelog_parent_commits is generally correct 446s 446s This is the general parameterised test for the common case uses of 446s target.get_changelog_parent_commits. 446s 446s :param GitUbuntuRepository repo: fixture providing a temporary 446s GitUbuntuRepository instance to use 446s :param repo_builder.Repo input_repo: the input repository data to use that 446s will be populated into @repo before @repo is passed through to 446s get_changelog_parent_commits 446s :param dict parent_overrides: passed through to 446s get_changelog_parent_commits. 446s :param PatchState patch_state: passed through to 446s get_changelog_parent_commits 446s :param list(str) expected_refs: the expected return value of 446s get_changelog_parent_commits expressed using a list of reference names. 446s Since get_changelog_parent_commits returns a list of commit hash 446s strings, the reference names will need to be dereferenced before 446s comparison; this way the test parameters don't need to be opaque hash 446s strings. 446s """ 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:721: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpfdlze33u/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_get_changelog_parent_commits[input_repo7-parent_overrides7-changelog_versions7-PatchState.APPLIED-expected_refs7] _ 446s 446s repo = 446s input_repo = 446s parent_overrides = {}, changelog_versions = ['1-3', '1-2', '1-1'] 446s patch_state = 446s expected_refs = ['refs/tags/importer/applied/1-1'] 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'parent_overrides', 446s 'changelog_versions', 446s 'patch_state', 446s 'expected_refs', 446s ], 446s [ 446s ( 446s repo_builder.Repo(), 446s {}, 446s ['1-2', '1-1',], 446s PatchState.UNAPPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.UNAPPLIED, 446s ['refs/tags/importer/import/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec(name='reimport', mutate=1), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.UNAPPLIED, 446s [ 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s {}, 446s ['1-3', '1-2', '1-1'], 446s PatchState.UNAPPLIED, 446s ['refs/tags/importer/import/1-1'], 446s ), 446s ( 446s repo_builder.Repo(), 446s {}, 446s ['1-2', '1-1',], 446s PatchState.APPLIED, 446s [], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='applied')], 446s tags={'importer/applied/1-1': Placeholder('applied')}, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.APPLIED, 446s ['refs/tags/importer/applied/1-1'], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec(name='reimport', mutate=1), 446s ], 446s tags={ 446s 'importer/applied/1-1': Placeholder('import'), 446s 'importer/reimport/applied/1-1/0': Placeholder('import'), 446s 'importer/reimport/applied/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s {}, 446s ['1-2', '1-1'], 446s PatchState.APPLIED, 446s [ 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='applied')], 446s tags={'importer/applied/1-1': Placeholder('applied')}, 446s ), 446s {}, 446s ['1-3', '1-2', '1-1'], 446s PatchState.APPLIED, 446s ['refs/tags/importer/applied/1-1'], 446s ), 446s ], 446s ) 446s def test_get_changelog_parent_commits( 446s repo, 446s input_repo, 446s parent_overrides, 446s changelog_versions, 446s patch_state, 446s expected_refs, 446s ): 446s """Test that get_changelog_parent_commits is generally correct 446s 446s This is the general parameterised test for the common case uses of 446s target.get_changelog_parent_commits. 446s 446s :param GitUbuntuRepository repo: fixture providing a temporary 446s GitUbuntuRepository instance to use 446s :param repo_builder.Repo input_repo: the input repository data to use that 446s will be populated into @repo before @repo is passed through to 446s get_changelog_parent_commits 446s :param dict parent_overrides: passed through to 446s get_changelog_parent_commits. 446s :param PatchState patch_state: passed through to 446s get_changelog_parent_commits 446s :param list(str) expected_refs: the expected return value of 446s get_changelog_parent_commits expressed using a list of reference names. 446s Since get_changelog_parent_commits returns a list of commit hash 446s strings, the reference names will need to be dereferenced before 446s comparison; this way the test parameters don't need to be opaque hash 446s strings. 446s """ 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:721: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpk3beeif3/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _________ test_validate_rich_history[input_repo0-published_spec0-True] _________ 446s 446s repo = 446s input_repo = 446s published_spec = {'changelog_versions': ['1-2', '1-1']}, expected_result = True 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'published_spec', 446s 'expected_result', 446s ], 446s [ 446s ( 446s # Common case: upload tag has a changelog parent as an ancestor 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec( 446s name='upload', 446s changelog_versions=['1-2', '1-1'], 446s parents=[Placeholder('import')], 446s ), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-2': Placeholder('upload'), 446s }, 446s ), 446s {'changelog_versions': ['1-2', '1-1']}, 446s True, 446s ), 446s ( 446s # Upload tag is the first one, with no parents present 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec( 446s name='upload', 446s version='1-2', 446s ), 446s ], 446s tags={ 446s 'importer/upload/1-2': Placeholder('upload'), 446s }, 446s ), 446s {'changelog_versions': ['1-2']}, 446s True, 446s ), 446s ( 446s # Upload tag mismatches published tree but is otherwise correct 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec( 446s name='upload', 446s changelog_versions=['1-2', '1-1'], 446s parents=[Placeholder('import')], 446s mutate=True, 446s ), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-2': Placeholder('upload'), 446s }, 446s ), 446s {'changelog_versions': ['1-2', '1-1']}, 446s target.RichHistoryTreeMismatch, 446s ), 446s ( 446s # Upload tag doesn't have a changelog parent as an ancestor but is 446s # otherwise correct 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec( 446s name='upload', 446s changelog_versions=['1-2', '1-1'], 446s ), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-2': Placeholder('upload'), 446s }, 446s ), 446s {'changelog_versions': ['1-2', '1-1']}, 446s target.RichHistoryHasNoChangelogParentAncestor, 446s ), 446s ], 446s ) 446s def test_validate_rich_history( 446s repo, 446s input_repo, 446s published_spec, 446s expected_result, 446s ): 446s """ 446s General test for validate_rich_history(). 446s 446s This unit tests validate_rich_history() for various parameterized cases. 446s Given an input repository and the specification of a Launchpad publication 446s of a source package, we check that validate_rich_history() correctly 446s accepts or rejects the rich history corresponding to the upload tag named 446s 'importer/upload/1-2'. It is assumed that the package being imported is 446s always of version '1-2' for all parameter sets. 446s 446s Since the target function requires rich history, the case of there not 446s being rich history does not need to be tested here, as it wouldn't be 446s called in this case. 446s 446s validate_rich_history() is generic for all sourced rich history, not just 446s rich history sourced from an upload tag. But since it is independent of how 446s the rich history commit arrived, it is easiest to use upload tags to test 446s it; this results in coverage for all sources. 446s 446s :param GitUbuntuRepository repo: fixture providing a temporary 446s GitUbuntuRepository instance to use 446s :param repo_builder.Repo input_repo: input repository data 446s :param dict published_spec: the package simulated being imported from the 446s archive, specified as a dict to pass as **kwargs to 446s repo_builder.Commit.from_spec() 446s :param bool expected_result: the expected return value of, or exception 446s raised by, the call to validate_rich_history() 446s """ 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:910: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpmwss7f2k/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _________ test_validate_rich_history[input_repo1-published_spec1-True] _________ 446s 446s repo = 446s input_repo = 446s published_spec = {'changelog_versions': ['1-2']}, expected_result = True 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'published_spec', 446s 'expected_result', 446s ], 446s [ 446s ( 446s # Common case: upload tag has a changelog parent as an ancestor 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec( 446s name='upload', 446s changelog_versions=['1-2', '1-1'], 446s parents=[Placeholder('import')], 446s ), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-2': Placeholder('upload'), 446s }, 446s ), 446s {'changelog_versions': ['1-2', '1-1']}, 446s True, 446s ), 446s ( 446s # Upload tag is the first one, with no parents present 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec( 446s name='upload', 446s version='1-2', 446s ), 446s ], 446s tags={ 446s 'importer/upload/1-2': Placeholder('upload'), 446s }, 446s ), 446s {'changelog_versions': ['1-2']}, 446s True, 446s ), 446s ( 446s # Upload tag mismatches published tree but is otherwise correct 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec( 446s name='upload', 446s changelog_versions=['1-2', '1-1'], 446s parents=[Placeholder('import')], 446s mutate=True, 446s ), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-2': Placeholder('upload'), 446s }, 446s ), 446s {'changelog_versions': ['1-2', '1-1']}, 446s target.RichHistoryTreeMismatch, 446s ), 446s ( 446s # Upload tag doesn't have a changelog parent as an ancestor but is 446s # otherwise correct 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec( 446s name='upload', 446s changelog_versions=['1-2', '1-1'], 446s ), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-2': Placeholder('upload'), 446s }, 446s ), 446s {'changelog_versions': ['1-2', '1-1']}, 446s target.RichHistoryHasNoChangelogParentAncestor, 446s ), 446s ], 446s ) 446s def test_validate_rich_history( 446s repo, 446s input_repo, 446s published_spec, 446s expected_result, 446s ): 446s """ 446s General test for validate_rich_history(). 446s 446s This unit tests validate_rich_history() for various parameterized cases. 446s Given an input repository and the specification of a Launchpad publication 446s of a source package, we check that validate_rich_history() correctly 446s accepts or rejects the rich history corresponding to the upload tag named 446s 'importer/upload/1-2'. It is assumed that the package being imported is 446s always of version '1-2' for all parameter sets. 446s 446s Since the target function requires rich history, the case of there not 446s being rich history does not need to be tested here, as it wouldn't be 446s called in this case. 446s 446s validate_rich_history() is generic for all sourced rich history, not just 446s rich history sourced from an upload tag. But since it is independent of how 446s the rich history commit arrived, it is easiest to use upload tags to test 446s it; this results in coverage for all sources. 446s 446s :param GitUbuntuRepository repo: fixture providing a temporary 446s GitUbuntuRepository instance to use 446s :param repo_builder.Repo input_repo: input repository data 446s :param dict published_spec: the package simulated being imported from the 446s archive, specified as a dict to pass as **kwargs to 446s repo_builder.Commit.from_spec() 446s :param bool expected_result: the expected return value of, or exception 446s raised by, the call to validate_rich_history() 446s """ 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:910: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpwbx17xbm/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_validate_rich_history[input_repo2-published_spec2-RichHistoryTreeMismatch] _ 446s 446s repo = 446s input_repo = 446s published_spec = {'changelog_versions': ['1-2', '1-1']} 446s expected_result = 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'published_spec', 446s 'expected_result', 446s ], 446s [ 446s ( 446s # Common case: upload tag has a changelog parent as an ancestor 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec( 446s name='upload', 446s changelog_versions=['1-2', '1-1'], 446s parents=[Placeholder('import')], 446s ), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-2': Placeholder('upload'), 446s }, 446s ), 446s {'changelog_versions': ['1-2', '1-1']}, 446s True, 446s ), 446s ( 446s # Upload tag is the first one, with no parents present 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec( 446s name='upload', 446s version='1-2', 446s ), 446s ], 446s tags={ 446s 'importer/upload/1-2': Placeholder('upload'), 446s }, 446s ), 446s {'changelog_versions': ['1-2']}, 446s True, 446s ), 446s ( 446s # Upload tag mismatches published tree but is otherwise correct 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec( 446s name='upload', 446s changelog_versions=['1-2', '1-1'], 446s parents=[Placeholder('import')], 446s mutate=True, 446s ), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-2': Placeholder('upload'), 446s }, 446s ), 446s {'changelog_versions': ['1-2', '1-1']}, 446s target.RichHistoryTreeMismatch, 446s ), 446s ( 446s # Upload tag doesn't have a changelog parent as an ancestor but is 446s # otherwise correct 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec( 446s name='upload', 446s changelog_versions=['1-2', '1-1'], 446s ), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-2': Placeholder('upload'), 446s }, 446s ), 446s {'changelog_versions': ['1-2', '1-1']}, 446s target.RichHistoryHasNoChangelogParentAncestor, 446s ), 446s ], 446s ) 446s def test_validate_rich_history( 446s repo, 446s input_repo, 446s published_spec, 446s expected_result, 446s ): 446s """ 446s General test for validate_rich_history(). 446s 446s This unit tests validate_rich_history() for various parameterized cases. 446s Given an input repository and the specification of a Launchpad publication 446s of a source package, we check that validate_rich_history() correctly 446s accepts or rejects the rich history corresponding to the upload tag named 446s 'importer/upload/1-2'. It is assumed that the package being imported is 446s always of version '1-2' for all parameter sets. 446s 446s Since the target function requires rich history, the case of there not 446s being rich history does not need to be tested here, as it wouldn't be 446s called in this case. 446s 446s validate_rich_history() is generic for all sourced rich history, not just 446s rich history sourced from an upload tag. But since it is independent of how 446s the rich history commit arrived, it is easiest to use upload tags to test 446s it; this results in coverage for all sources. 446s 446s :param GitUbuntuRepository repo: fixture providing a temporary 446s GitUbuntuRepository instance to use 446s :param repo_builder.Repo input_repo: input repository data 446s :param dict published_spec: the package simulated being imported from the 446s archive, specified as a dict to pass as **kwargs to 446s repo_builder.Commit.from_spec() 446s :param bool expected_result: the expected return value of, or exception 446s raised by, the call to validate_rich_history() 446s """ 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:910: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmp_kicp9ia/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_validate_rich_history[input_repo3-published_spec3-RichHistoryHasNoChangelogParentAncestor] _ 446s 446s repo = 446s input_repo = 446s published_spec = {'changelog_versions': ['1-2', '1-1']} 446s expected_result = 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'published_spec', 446s 'expected_result', 446s ], 446s [ 446s ( 446s # Common case: upload tag has a changelog parent as an ancestor 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec( 446s name='upload', 446s changelog_versions=['1-2', '1-1'], 446s parents=[Placeholder('import')], 446s ), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-2': Placeholder('upload'), 446s }, 446s ), 446s {'changelog_versions': ['1-2', '1-1']}, 446s True, 446s ), 446s ( 446s # Upload tag is the first one, with no parents present 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec( 446s name='upload', 446s version='1-2', 446s ), 446s ], 446s tags={ 446s 'importer/upload/1-2': Placeholder('upload'), 446s }, 446s ), 446s {'changelog_versions': ['1-2']}, 446s True, 446s ), 446s ( 446s # Upload tag mismatches published tree but is otherwise correct 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec( 446s name='upload', 446s changelog_versions=['1-2', '1-1'], 446s parents=[Placeholder('import')], 446s mutate=True, 446s ), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-2': Placeholder('upload'), 446s }, 446s ), 446s {'changelog_versions': ['1-2', '1-1']}, 446s target.RichHistoryTreeMismatch, 446s ), 446s ( 446s # Upload tag doesn't have a changelog parent as an ancestor but is 446s # otherwise correct 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec( 446s name='upload', 446s changelog_versions=['1-2', '1-1'], 446s ), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/upload/1-2': Placeholder('upload'), 446s }, 446s ), 446s {'changelog_versions': ['1-2', '1-1']}, 446s target.RichHistoryHasNoChangelogParentAncestor, 446s ), 446s ], 446s ) 446s def test_validate_rich_history( 446s repo, 446s input_repo, 446s published_spec, 446s expected_result, 446s ): 446s """ 446s General test for validate_rich_history(). 446s 446s This unit tests validate_rich_history() for various parameterized cases. 446s Given an input repository and the specification of a Launchpad publication 446s of a source package, we check that validate_rich_history() correctly 446s accepts or rejects the rich history corresponding to the upload tag named 446s 'importer/upload/1-2'. It is assumed that the package being imported is 446s always of version '1-2' for all parameter sets. 446s 446s Since the target function requires rich history, the case of there not 446s being rich history does not need to be tested here, as it wouldn't be 446s called in this case. 446s 446s validate_rich_history() is generic for all sourced rich history, not just 446s rich history sourced from an upload tag. But since it is independent of how 446s the rich history commit arrived, it is easiest to use upload tags to test 446s it; this results in coverage for all sources. 446s 446s :param GitUbuntuRepository repo: fixture providing a temporary 446s GitUbuntuRepository instance to use 446s :param repo_builder.Repo input_repo: input repository data 446s :param dict published_spec: the package simulated being imported from the 446s archive, specified as a dict to pass as **kwargs to 446s repo_builder.Commit.from_spec() 446s :param bool expected_result: the expected return value of, or exception 446s raised by, the call to validate_rich_history() 446s """ 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:910: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmph50v358s/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s ______________________ test_add_changelog_note_to_commit _______________________ 446s 446s repo = 446s 446s def test_add_changelog_note_to_commit(repo): 446s """add_changelog_note_to_commit should add the expected note""" 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='1-1'), 446s repo_builder.Commit.from_spec( 446s name='1-2', 446s changelog_versions=['1-1', '1-2'], 446s parents=[Placeholder('1-1')], 446s ), 446s ], 446s tags={'1-1': Placeholder('1-1'), '1-2': Placeholder('1-2')}, 446s > ).write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:953: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpirqe_jck/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s ____________________ test_add_changelog_note_to_commit_utf8 ____________________ 446s 446s repo = 446s 446s def test_add_changelog_note_to_commit_utf8(repo): 446s """A changelog file with non-UTF8 should have such characters substituted 446s 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s """ 446s test_utf8_error_changelog_path = os.path.join( 446s pkg_resources.resource_filename('gitubuntu', 'changelog_tests'), 446s 'test_utf8_error', 446s ) 446s with open(test_utf8_error_changelog_path, 'rb') as f: 446s utf8_changelog_blob = f.read() 446s 446s # We only need an example child commit with a debian/changelog file since 446s # this is the only file accessed by add_changelog_note_to_commit(). 446s # Further, the parent need only exist and can be empty. 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit(name='parent'), 446s repo_builder.Commit( 446s tree=repo_builder.Tree({'debian': repo_builder.Tree( 446s {'changelog': repo_builder.Blob(utf8_changelog_blob)} 446s )}), 446s name='child', 446s ) 446s ], 446s tags={'parent': Placeholder('parent'), 'child': Placeholder('child')}, 446s > ).write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:1002: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmph5omk5lz/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s _________________ test_double_changelog_note_add_does_not_fail _________________ 446s 446s repo = 446s 446s def test_double_changelog_note_add_does_not_fail(repo): 446s """add_changelog_note_to_commit shouldn't fail if a note already exists""" 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='1-1'), 446s repo_builder.Commit.from_spec( 446s name='1-2', 446s changelog_versions=['1-1', '1-2'], 446s parents=[Placeholder('1-1')], 446s ), 446s ], 446s tags={'1-1': Placeholder('1-1'), '1-2': Placeholder('1-2')}, 446s > ).write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:1035: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpsy_itrd1/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s ___________________________ test_create_import_note ____________________________ 446s 446s repo = 446s 446s def test_create_import_note(repo): 446s """create_import_note() should create a note in the correct ref""" 446s repo_builder.Repo( 446s commits=[repo_builder.Commit(name='root')], 446s tags={'root': repo_builder.Placeholder('root')}, 446s > ).write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:1066: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmp0qbhj4o5/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ______________________ test_create_import_note_timestamp _______________________ 446s 446s repo = 446s 446s def test_create_import_note_timestamp(repo): 446s """create_import_note() should include the timestamp in the note""" 446s repo_builder.Repo( 446s commits=[repo_builder.Commit(name='root')], 446s tags={'root': repo_builder.Placeholder('root')}, 446s > ).write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:1082: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmp81bjzx8q/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s _______________________ test_import_creates_import_note ________________________ 446s 446s repo = 446s 446s def test_import_creates_import_note(repo): 446s """When an import runs, the note should appear in the correct ref""" 446s with source_builder.Source() as dsc_pathname: 446s > target.import_unapplied_dsc( 446s repo=repo, 446s version='1-1', 446s namespace='importer', 446s dist='ubuntu', 446s dsc_pathname=dsc_pathname, 446s head_name='ubuntu/focal', 446s skip_orig=True, 446s parent_overrides={}, 446s ) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:1102: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 446s commit, tag = find_or_create_unapplied_commit( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 446s changelog_parents = get_unapplied_import_parents( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 446s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 446s changelog = self.get_changelog_from_treeish(treeish) 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 446s return Changelog.from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:569: in from_treeish 446s blob = follow_symlinks_to_blob( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmp4a2v55oe/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s ___________________ test_import_unapplied_spi_quilt_patches ____________________ 446s 446s get_import_commit_msg_mock = 446s get_import_tag_msg_mock = 446s repo = 446s 446s @patch('gitubuntu.importer.get_import_tag_msg') 446s @patch('gitubuntu.importer.get_import_commit_msg') 446s def test_import_unapplied_spi_quilt_patches( 446s get_import_commit_msg_mock, 446s get_import_tag_msg_mock, 446s repo, 446s ): 446s """Test that a package with quilt patches is imported with correct 446s unapplied refs 446s 446s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 446s that determines the commit message to use for a given import 446s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 446s that determines the tag message to use for a given import 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s """ 446s # Match the repo_builder objects 446s get_import_tag_msg_mock.return_value = 'Test tag' 446s get_import_commit_msg_mock.return_value = b'Test commit' 446s 446s publish_spec = source_builder.SourceSpec(has_patches=True) 446s 446s input_repo = repo_builder.Repo() 446s input_repo.write(repo.raw_repo) 446s expected_result = repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit( 446s tree=repo_builder.SourceTree( 446s source_builder.Source(publish_spec) 446s ), 446s name='publish' 446s ), 446s ], 446s tags={'importer/import/1-1': Placeholder('publish')}, 446s branches={'importer/ubuntu/trusty': Placeholder('publish')}, 446s ) 446s 446s with source_builder.Source(publish_spec) as dsc_path: 446s # import_unapplied_spi currently assumes it is called from the 446s # repository directory (pristine-tar and other commands rely on 446s # this) 446s > target.import_unapplied_spi( 446s repo=repo, 446s spi=MockSPI(dsc_path, publish_spec.version), 446s namespace='importer', 446s skip_orig=False, 446s parent_overrides={}, 446s ) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:1222: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:2308: in import_unapplied_spi 446s import_unapplied_dsc( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 446s commit, tag = find_or_create_unapplied_commit( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 446s changelog_parents = get_unapplied_import_parents( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 446s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 446s changelog = self.get_changelog_from_treeish(treeish) 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 446s return Changelog.from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:569: in from_treeish 446s blob = follow_symlinks_to_blob( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpsq1yqru8/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: applying a 446s dpkg-source: info: applying b 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_import_unapplied_spi_parenting[input_repo0-changelog_versions0-validation_repo_delta0-validation_repo_expected_identical_refs0] _ 446s 446s get_import_commit_msg_mock = 446s get_import_tag_msg_mock = 446s repo = 446s input_repo = 446s changelog_versions = ['1-1'] 446s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-1': }} 446s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1'] 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'changelog_versions', 446s 'validation_repo_delta', 446s 'validation_repo_expected_identical_refs', 446s ], 446s [ 446s pytest.param( 446s repo_builder.Repo(), 446s ['1-1'], 446s { 446s 'add_commits': [ 446s repo_builder.Commit.from_spec(name='publish'), 446s ], 446s 'update_tags': {'importer/import/1-1': Placeholder('publish')}, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s ] 446s ), 446s pytest.param( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s ['1-2', '1-1'], 446s { 446s 'add_commits': [ 446s repo_builder.Commit.from_spec( 446s name='publish', 446s parents=[Placeholder('import')], 446s changelog_versions=['1-2', '1-1'], 446s ), 446s ], 446s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/import/1-2', 446s ], 446s ), 446s pytest.param( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s ['1-3', '1-2', '1-1'], 446s { 446s 'add_commits': [ 446s repo_builder.Commit.from_spec( 446s parents=[Placeholder('import')], 446s name='publish', 446s changelog_versions=['1-3', '1-2', '1-1'], 446s ), 446s ], 446s 'update_tags': {'importer/import/1-3': Placeholder('publish')}, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/import/1-3', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec( 446s name='reimport', 446s mutate='Reimport tag contents', 446s ), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s ['1-2', '1-1'], 446s { 446s 'add_commits': [ 446s repo_builder.Commit.from_spec( 446s parents=[ 446s Placeholder('import'), 446s Placeholder('reimport'), 446s ], 446s name='publish', 446s changelog_versions=['1-2', '1-1'], 446s ), 446s ], 446s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s 'refs/tags/importer/import/1-2', 446s ], 446s ), 446s ] 446s ) 446s @patch('gitubuntu.importer.get_import_tag_msg') 446s @patch('gitubuntu.importer.get_import_commit_msg') 446s def test_import_unapplied_spi_parenting( 446s get_import_commit_msg_mock, 446s get_import_tag_msg_mock, 446s repo, 446s input_repo, 446s changelog_versions, 446s validation_repo_delta, 446s validation_repo_expected_identical_refs, 446s ): 446s """Test that unapplied import commits have the correct parents 446s 446s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 446s that determines the commit message to use for a given import 446s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 446s that determines the tag message to use for a given import 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param list(str) changelog_versions: the versions in the changelog of a 446s fake package to test import 446s :param dict validation_repo_delta: how to transform the input 446s repository into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_identical_refs: refs that must be 446s identical between the validation repository and the output repository 446s 446s Verify that if an import of a package is made into input_repo where the 446s package being imported has the given changelog_versions, then the output 446s repository has commits with the parents we expect. This is tested by 446s comparing specific output references against the validation repository. 446s """ 446s 446s # Match the repo_builder objects 446s get_import_tag_msg_mock.return_value = 'Test tag' 446s get_import_commit_msg_mock.return_value = b'Test commit' 446s 446s input_repo.write(repo.raw_repo) 446s 446s publish_spec = source_builder.SourceSpec( 446s changelog_versions=changelog_versions, 446s ) 446s 446s with source_builder.Source(publish_spec) as dsc_path: 446s # import_unapplied_spi currently assumes it is called from the 446s # repository directory (pristine-tar and other commands rely on 446s # this) 446s > target.import_unapplied_spi( 446s repo=repo, 446s spi=MockSPI(dsc_path, publish_spec.version), 446s namespace='importer', 446s skip_orig=False, 446s parent_overrides={}, 446s ) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:1391: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:2308: in import_unapplied_spi 446s import_unapplied_dsc( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 446s commit, tag = find_or_create_unapplied_commit( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 446s changelog_parents = get_unapplied_import_parents( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 446s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 446s changelog = self.get_changelog_from_treeish(treeish) 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 446s return Changelog.from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:569: in from_treeish 446s blob = follow_symlinks_to_blob( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmptk31nh1e/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_import_unapplied_spi_parenting[input_repo1-changelog_versions1-validation_repo_delta1-validation_repo_expected_identical_refs1] _ 446s 446s get_import_commit_msg_mock = 446s get_import_tag_msg_mock = 446s repo = 446s input_repo = 446s changelog_versions = ['1-2', '1-1'] 446s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-2': }} 446s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1', 'refs/tags/importer/import/1-2'] 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'changelog_versions', 446s 'validation_repo_delta', 446s 'validation_repo_expected_identical_refs', 446s ], 446s [ 446s pytest.param( 446s repo_builder.Repo(), 446s ['1-1'], 446s { 446s 'add_commits': [ 446s repo_builder.Commit.from_spec(name='publish'), 446s ], 446s 'update_tags': {'importer/import/1-1': Placeholder('publish')}, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s ] 446s ), 446s pytest.param( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s ['1-2', '1-1'], 446s { 446s 'add_commits': [ 446s repo_builder.Commit.from_spec( 446s name='publish', 446s parents=[Placeholder('import')], 446s changelog_versions=['1-2', '1-1'], 446s ), 446s ], 446s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/import/1-2', 446s ], 446s ), 446s pytest.param( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s ['1-3', '1-2', '1-1'], 446s { 446s 'add_commits': [ 446s repo_builder.Commit.from_spec( 446s parents=[Placeholder('import')], 446s name='publish', 446s changelog_versions=['1-3', '1-2', '1-1'], 446s ), 446s ], 446s 'update_tags': {'importer/import/1-3': Placeholder('publish')}, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/import/1-3', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec( 446s name='reimport', 446s mutate='Reimport tag contents', 446s ), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s ['1-2', '1-1'], 446s { 446s 'add_commits': [ 446s repo_builder.Commit.from_spec( 446s parents=[ 446s Placeholder('import'), 446s Placeholder('reimport'), 446s ], 446s name='publish', 446s changelog_versions=['1-2', '1-1'], 446s ), 446s ], 446s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s 'refs/tags/importer/import/1-2', 446s ], 446s ), 446s ] 446s ) 446s @patch('gitubuntu.importer.get_import_tag_msg') 446s @patch('gitubuntu.importer.get_import_commit_msg') 446s def test_import_unapplied_spi_parenting( 446s get_import_commit_msg_mock, 446s get_import_tag_msg_mock, 446s repo, 446s input_repo, 446s changelog_versions, 446s validation_repo_delta, 446s validation_repo_expected_identical_refs, 446s ): 446s """Test that unapplied import commits have the correct parents 446s 446s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 446s that determines the commit message to use for a given import 446s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 446s that determines the tag message to use for a given import 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param list(str) changelog_versions: the versions in the changelog of a 446s fake package to test import 446s :param dict validation_repo_delta: how to transform the input 446s repository into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_identical_refs: refs that must be 446s identical between the validation repository and the output repository 446s 446s Verify that if an import of a package is made into input_repo where the 446s package being imported has the given changelog_versions, then the output 446s repository has commits with the parents we expect. This is tested by 446s comparing specific output references against the validation repository. 446s """ 446s 446s # Match the repo_builder objects 446s get_import_tag_msg_mock.return_value = 'Test tag' 446s get_import_commit_msg_mock.return_value = b'Test commit' 446s 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:1381: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpu_kjv_o6/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_import_unapplied_spi_parenting[input_repo2-changelog_versions2-validation_repo_delta2-validation_repo_expected_identical_refs2] _ 446s 446s get_import_commit_msg_mock = 446s get_import_tag_msg_mock = 446s repo = 446s input_repo = 446s changelog_versions = ['1-3', '1-2', '1-1'] 446s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-3': }} 446s validation_repo_expected_identical_refs = ['refs/tags/importer/import/1-1', 'refs/tags/importer/import/1-3'] 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'changelog_versions', 446s 'validation_repo_delta', 446s 'validation_repo_expected_identical_refs', 446s ], 446s [ 446s pytest.param( 446s repo_builder.Repo(), 446s ['1-1'], 446s { 446s 'add_commits': [ 446s repo_builder.Commit.from_spec(name='publish'), 446s ], 446s 'update_tags': {'importer/import/1-1': Placeholder('publish')}, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s ] 446s ), 446s pytest.param( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s ['1-2', '1-1'], 446s { 446s 'add_commits': [ 446s repo_builder.Commit.from_spec( 446s name='publish', 446s parents=[Placeholder('import')], 446s changelog_versions=['1-2', '1-1'], 446s ), 446s ], 446s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/import/1-2', 446s ], 446s ), 446s pytest.param( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s ['1-3', '1-2', '1-1'], 446s { 446s 'add_commits': [ 446s repo_builder.Commit.from_spec( 446s parents=[Placeholder('import')], 446s name='publish', 446s changelog_versions=['1-3', '1-2', '1-1'], 446s ), 446s ], 446s 'update_tags': {'importer/import/1-3': Placeholder('publish')}, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/import/1-3', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec( 446s name='reimport', 446s mutate='Reimport tag contents', 446s ), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s ['1-2', '1-1'], 446s { 446s 'add_commits': [ 446s repo_builder.Commit.from_spec( 446s parents=[ 446s Placeholder('import'), 446s Placeholder('reimport'), 446s ], 446s name='publish', 446s changelog_versions=['1-2', '1-1'], 446s ), 446s ], 446s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s 'refs/tags/importer/import/1-2', 446s ], 446s ), 446s ] 446s ) 446s @patch('gitubuntu.importer.get_import_tag_msg') 446s @patch('gitubuntu.importer.get_import_commit_msg') 446s def test_import_unapplied_spi_parenting( 446s get_import_commit_msg_mock, 446s get_import_tag_msg_mock, 446s repo, 446s input_repo, 446s changelog_versions, 446s validation_repo_delta, 446s validation_repo_expected_identical_refs, 446s ): 446s """Test that unapplied import commits have the correct parents 446s 446s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 446s that determines the commit message to use for a given import 446s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 446s that determines the tag message to use for a given import 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param list(str) changelog_versions: the versions in the changelog of a 446s fake package to test import 446s :param dict validation_repo_delta: how to transform the input 446s repository into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_identical_refs: refs that must be 446s identical between the validation repository and the output repository 446s 446s Verify that if an import of a package is made into input_repo where the 446s package being imported has the given changelog_versions, then the output 446s repository has commits with the parents we expect. This is tested by 446s comparing specific output references against the validation repository. 446s """ 446s 446s # Match the repo_builder objects 446s get_import_tag_msg_mock.return_value = 'Test tag' 446s get_import_commit_msg_mock.return_value = b'Test commit' 446s 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:1381: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmppfndico_/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_import_unapplied_spi_parenting[input_repo3-changelog_versions3-validation_repo_delta3-validation_repo_expected_identical_refs3] _ 446s 446s get_import_commit_msg_mock = 446s get_import_tag_msg_mock = 446s repo = 446s input_repo = 446s changelog_versions = ['1-2', '1-1'] 446s validation_repo_delta = {'add_commits': [], 'update_tags': {'importer/import/1-2': }} 446s 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'] 446s 446s @pytest.mark.parametrize( 446s [ 446s 'input_repo', 446s 'changelog_versions', 446s 'validation_repo_delta', 446s 'validation_repo_expected_identical_refs', 446s ], 446s [ 446s pytest.param( 446s repo_builder.Repo(), 446s ['1-1'], 446s { 446s 'add_commits': [ 446s repo_builder.Commit.from_spec(name='publish'), 446s ], 446s 'update_tags': {'importer/import/1-1': Placeholder('publish')}, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s ] 446s ), 446s pytest.param( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s ['1-2', '1-1'], 446s { 446s 'add_commits': [ 446s repo_builder.Commit.from_spec( 446s name='publish', 446s parents=[Placeholder('import')], 446s changelog_versions=['1-2', '1-1'], 446s ), 446s ], 446s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/import/1-2', 446s ], 446s ), 446s pytest.param( 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import')], 446s tags={'importer/import/1-1': Placeholder('import')}, 446s ), 446s ['1-3', '1-2', '1-1'], 446s { 446s 'add_commits': [ 446s repo_builder.Commit.from_spec( 446s parents=[Placeholder('import')], 446s name='publish', 446s changelog_versions=['1-3', '1-2', '1-1'], 446s ), 446s ], 446s 'update_tags': {'importer/import/1-3': Placeholder('publish')}, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/import/1-3', 446s ], 446s ), 446s ( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import'), 446s repo_builder.Commit.from_spec( 446s name='reimport', 446s mutate='Reimport tag contents', 446s ), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import'), 446s 'importer/reimport/import/1-1/0': Placeholder('import'), 446s 'importer/reimport/import/1-1/1': Placeholder('reimport'), 446s }, 446s ), 446s ['1-2', '1-1'], 446s { 446s 'add_commits': [ 446s repo_builder.Commit.from_spec( 446s parents=[ 446s Placeholder('import'), 446s Placeholder('reimport'), 446s ], 446s name='publish', 446s changelog_versions=['1-2', '1-1'], 446s ), 446s ], 446s 'update_tags': {'importer/import/1-2': Placeholder('publish')}, 446s }, 446s [ 446s 'refs/tags/importer/import/1-1', 446s 'refs/tags/importer/reimport/import/1-1/0', 446s 'refs/tags/importer/reimport/import/1-1/1', 446s 'refs/tags/importer/import/1-2', 446s ], 446s ), 446s ] 446s ) 446s @patch('gitubuntu.importer.get_import_tag_msg') 446s @patch('gitubuntu.importer.get_import_commit_msg') 446s def test_import_unapplied_spi_parenting( 446s get_import_commit_msg_mock, 446s get_import_tag_msg_mock, 446s repo, 446s input_repo, 446s changelog_versions, 446s validation_repo_delta, 446s validation_repo_expected_identical_refs, 446s ): 446s """Test that unapplied import commits have the correct parents 446s 446s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 446s that determines the commit message to use for a given import 446s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 446s that determines the tag message to use for a given import 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param list(str) changelog_versions: the versions in the changelog of a 446s fake package to test import 446s :param dict validation_repo_delta: how to transform the input 446s repository into a "validation repository", expressed as a dict to 446s provide as **kwargs to gitubuntu.repo_builder.Repo.copy() against the 446s input repository. The validation repository is then used for the 446s purposes of comparison against the output repository. 446s :param list(str) validation_repo_expected_identical_refs: refs that must be 446s identical between the validation repository and the output repository 446s 446s Verify that if an import of a package is made into input_repo where the 446s package being imported has the given changelog_versions, then the output 446s repository has commits with the parents we expect. This is tested by 446s comparing specific output references against the validation repository. 446s """ 446s 446s # Match the repo_builder objects 446s get_import_tag_msg_mock.return_value = 'Test tag' 446s get_import_commit_msg_mock.return_value = b'Test commit' 446s 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:1381: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpkrdt2n3x/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s __________________ test_import_unapplied_spi_parent_override ___________________ 446s 446s get_import_commit_msg_mock = 446s get_import_tag_msg_mock = 446s repo = 446s 446s @patch('gitubuntu.importer.get_import_tag_msg') 446s @patch('gitubuntu.importer.get_import_commit_msg') 446s def test_import_unapplied_spi_parent_override( 446s get_import_commit_msg_mock, 446s get_import_tag_msg_mock, 446s repo, 446s ): 446s """Test import_unapplied_spi() parent_override functionality 446s 446s Test that if parent_overrides is used in the import_unapplied_spi call then 446s the resulting commit correctly uses the overridden parents specified. 446s 446s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 446s that determines the commit message to use for a given import 446s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 446s that determines the tag message to use for a given import 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s """ 446s # Match the repo_builder objects 446s get_import_tag_msg_mock.return_value = 'Test tag' 446s get_import_commit_msg_mock.return_value = b'Test commit' 446s 446s input_repo = repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec(name='import1-1', version='1-1'), 446s repo_builder.Commit.from_spec(name='import1-2', version='1-2'), 446s ], 446s tags={ 446s 'importer/import/1-1': Placeholder('import1-1'), 446s 'importer/import/1-2': Placeholder('import1-2'), 446s }, 446s ) 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:1444: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmponzxxoyf/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s ______________ test_import_unapplied_spi_parent_override_failure _______________ 446s 446s repo = 446s 446s def test_import_unapplied_spi_parent_override_failure(repo): 446s """ 446s Test override_parents ParentOverrideError raise 446s 446s When a parent override is specified but the specified version doesn't have 446s an import tag, an exception should be raised. 446s 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s """ 446s repo_builder.Repo( 446s commits=[repo_builder.Commit.from_spec(name='import1-1')], 446s tags={'importer/import/1-1': Placeholder('import1-1')}, 446s > ).write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:1499: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmp2_5bdopk/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_import_applied_spi_parenting[input_repo0-expected_ancestor_commits0-expected_parent_commits0] _ 446s 446s get_import_commit_msg_mock = 446s get_import_tag_msg_mock = 446s repo = 446s input_repo = 446s expected_ancestor_commits = ['refs/tags/importer/import/1-2'] 446s expected_parent_commits = ['refs/tags/importer/applied/1-1'] 446s 446s @pytest.mark.parametrize( 446s 'input_repo, expected_ancestor_commits, expected_parent_commits', [ 446s # In general, these tests do not set applied commit parents in the 446s # input repository since we have no mechanism to do that correctly, but 446s # this doesn't matter for the purposes of these tests. 446s 446s # if only one import tag exists, then it is the parent 446s pytest.param( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec( 446s name='unapplied1', 446s has_patches=True, 446s ), 446s repo_builder.Commit.from_spec( 446s parents=[Placeholder('unapplied1')], 446s name='unapplied2', 446s changelog_versions=['1-2', '1-1'], 446s has_patches=True, 446s ), 446s repo_builder.Commit.from_spec( 446s name='applied1', 446s patches_applied=True, 446s ), 446s ], 446s # no branches: technically not possible but branches are not 446s # relevant to the test 446s branches={}, 446s tags={ 446s 'importer/import/1-1': Placeholder('unapplied1'), 446s 'importer/import/1-2': Placeholder('unapplied2'), 446s 'importer/applied/1-1': Placeholder('applied1'), 446s }, 446s ), 446s ['refs/tags/importer/import/1-2'], 446s ['refs/tags/importer/applied/1-1'], 446s ), 446s 446s # if multiple import tags exist, then do they all end up as parents? 446s pytest.param( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec( 446s name='unapplied1', 446s has_patches=True, 446s ), 446s repo_builder.Commit.from_spec( 446s parents=[Placeholder('unapplied1')], 446s name='unapplied2', 446s changelog_versions=['1-2', '1-1'], 446s has_patches=True, 446s ), 446s repo_builder.Commit.from_spec( 446s parents=[Placeholder('unapplied1')], 446s name='unapplied2reimport', 446s changelog_versions=['1-2', '1-1'], 446s has_patches=True, 446s mutate='reimport tag', 446s ), 446s repo_builder.Commit.from_spec( 446s name='applied1', 446s patches_applied=True, 446s ), 446s ], 446s # no branches: technically not possible but branches are not 446s # relevant to the test 446s branches={}, 446s tags={ 446s 'importer/import/1-1': 446s Placeholder('unapplied1'), 446s 'importer/import/1-2': 446s Placeholder('unapplied2'), 446s 'importer/reimport/import/1-2/0': 446s Placeholder('unapplied2'), 446s 'importer/reimport/import/1-2/1': 446s Placeholder('unapplied2reimport'), 446s 'importer/applied/1-1': 446s Placeholder('applied1'), 446s }, 446s ), 446s [ 446s 'refs/tags/importer/reimport/import/1-2/0', 446s 'refs/tags/importer/reimport/import/1-2/1', 446s ], 446s [ 446s 'refs/tags/importer/applied/1-1', 446s ], 446s marks=pytest.mark.xfail(reason='LP: #1755247'), 446s ), 446s 446s # do we correctly create a reimport tag because a different import 446s # already exists? 446s pytest.param( 446s repo_builder.Repo( 446s commits=[ 446s repo_builder.Commit.from_spec( 446s name='unapplied1', 446s has_patches=True, 446s ), 446s repo_builder.Commit.from_spec( 446s name='unapplied1_reimport', 446s has_patches=True, 446s mutate='reimport contents', 446s ), 446s repo_builder.Commit.from_spec( 446s parents=[Placeholder('unapplied1')], 446s name='unapplied2', 446s changelog_versions=['1-2', '1-1'], 446s has_patches=True, 446s ), 446s repo_builder.Commit.from_spec( 446s name='applied1', 446s patches_applied=True, 446s ), 446s repo_builder.Commit.from_spec( 446s name='applied1_reimport', 446s patches_applied=True, 446s mutate='reimport contents', 446s ), 446s ], 446s # no branches: technically not possible but branches are not 446s # relevant to the test 446s branches={}, 446s tags={ 446s 'importer/import/1-1': 446s Placeholder('unapplied1'), 446s 'importer/reimport/import/1-1/0': 446s Placeholder('unapplied1'), 446s 'importer/reimport/import/1-1/1': 446s Placeholder('unapplied1_reimport'), 446s 'importer/import/1-2': 446s Placeholder('unapplied2'), 446s 'importer/applied/1-1': 446s Placeholder('applied1'), 446s 'importer/reimport/applied/1-1/0': 446s Placeholder('applied1'), 446s 'importer/reimport/applied/1-1/1': 446s Placeholder('applied1_reimport'), 446s }, 446s ), 446s [ 446s 'refs/tags/importer/reimport/import/1-2/0', 446s 'refs/tags/importer/reimport/import/1-2/1', 446s ], 446s [ 446s 'refs/tags/importer/reimport/applied/1-1/0', 446s 'refs/tags/importer/reimport/applied/1-1/1', 446s ], 446s marks=pytest.mark.xfail(reason='LP: #1755247'), 446s ), 446s ], 446s ) 446s @patch('gitubuntu.importer.get_import_tag_msg') 446s @patch('gitubuntu.importer.get_import_commit_msg') 446s def test_import_applied_spi_parenting( 446s get_import_commit_msg_mock, 446s get_import_tag_msg_mock, 446s repo, 446s input_repo, 446s expected_ancestor_commits, 446s expected_parent_commits, 446s ): 446s """Test that applied import commits have the right parents 446s 446s :param unittest.mock.Mock get_import_commit_msg_mock: mock of the function 446s that determines the commit message to use for a given import 446s :param unittest.mock.Mock get_import_tag_msg_mock: mock of the function 446s that determines the tag message to use for a given import 446s :param repo gitubuntu.git_repository.GitUbuntuRepository: fixture to hold a 446s temporary output repository 446s :param repo_builder.Repo input_repo: input repository data 446s :param list(str) expected_ancestor_commits: list of commit-ish strings that 446s must be ancestors of the 'applied/1-2' tag following the applied import 446s :param list(str) expected_parent_commits: list of commit-ish strings that 446s must be parents of the 'applied/1-2' tag following the applied import. 446s 446s A fake package with version '1-2' that has a changelog parent of '1-1' is 446s imported on top of the provided input_repo. The test fails if any 446s of the expected_ancestor_commits or expected_parent_commits are not 446s present. 446s 446s This test is ugly because we do not yet have a programmatic way 446s to get the interstitial commits of the patch applications. 446s """ 446s # Match the repo_builder objects 446s get_import_tag_msg_mock.return_value = 'Test tag' 446s get_import_commit_msg_mock.return_value = b'Test commit' 446s 446s > input_repo.write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:1698: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmp4yd9kzs4/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: applying a 446s dpkg-source: info: applying b 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: applying a 446s dpkg-source: info: applying b 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: building source-builder-package in source-builder-package_1-2.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-2.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: applying a 446s dpkg-source: info: applying b 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: applying a 446s dpkg-source: info: applying b 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: applying a 446s dpkg-source: info: applying b 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_authorship_date[False-Fri, 2 Feb 1971 12:34:56 +0100-expected_result0] __ 446s 446s repo = 446s override = False, input_string = 'Fri, 2 Feb 1971 12:34:56 +0100' 446s expected_result = (1971, 2, 2, 11, 34, 56, ...) 446s 446s @pytest.mark.parametrize(['override', 'input_string', 'expected_result'], [ 446s # Standard date that should parse and be used 446s (False, 'Fri, 2 Feb 1971 12:34:56 +0100', (1971, 2, 2, 11, 34, 56, 60)), 446s # Deliberately illegal date that cannot be parsed 446s (True, 'Failday, 30 Feb 1971 99:99:99 +9999', (1972, 3, 3, 12, 45, 57, 0)), 446s ]) 446s def test_authorship_date(repo, override, input_string, expected_result): 446s """Synthesized commit should use changelog or override when provided 446s 446s A synthesized commit should use the date of the changelog entry in the 446s usual case, or commit_date when an override is requested. 446s 446s :param GitUbuntuRepository repo: fixture providing a temporary 446s GitUbuntuRepository instance to use 446s :param bool override: whether a changelog date override should be requested 446s from import_unapplied_dsc() 446s :param str input_string: the timestamp part of the changelog entry to use 446s :param tuple expected_result: the expected author date of the synthesized 446s commit, specified as six parameters to datetime.datetime() followed by 446s the expected tz offset in minutes. 446s """ 446s spec = source_builder.SourceSpec(changelog_date=input_string) 446s with source_builder.Source(spec) as dsc_pathname: 446s > target.import_unapplied_dsc( 446s repo=repo, 446s version='1-1', 446s namespace='importer', 446s dist='ubuntu', 446s dsc_pathname=dsc_pathname, 446s head_name='ubuntu/focal', 446s skip_orig=True, 446s parent_overrides={}, 446s commit_date=datetime.datetime( 446s 1972, 446s 3, 446s 3, 446s 12, 446s 45, 446s 57, 446s tzinfo=datetime.timezone.utc, 446s ), 446s changelog_date_overrides=( 446s frozenset({'1-1'}) if override else frozenset() 446s ), 446s ) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:1815: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 446s commit, tag = find_or_create_unapplied_commit( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 446s changelog_parents = get_unapplied_import_parents( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 446s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 446s changelog = self.get_changelog_from_treeish(treeish) 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 446s return Changelog.from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:569: in from_treeish 446s blob = follow_symlinks_to_blob( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmplo51sq82/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s _ test_authorship_date[True-Failday, 30 Feb 1971 99:99:99 +9999-expected_result1] _ 446s 446s repo = 446s override = True, input_string = 'Failday, 30 Feb 1971 99:99:99 +9999' 446s expected_result = (1972, 3, 3, 12, 45, 57, ...) 446s 446s @pytest.mark.parametrize(['override', 'input_string', 'expected_result'], [ 446s # Standard date that should parse and be used 446s (False, 'Fri, 2 Feb 1971 12:34:56 +0100', (1971, 2, 2, 11, 34, 56, 60)), 446s # Deliberately illegal date that cannot be parsed 446s (True, 'Failday, 30 Feb 1971 99:99:99 +9999', (1972, 3, 3, 12, 45, 57, 0)), 446s ]) 446s def test_authorship_date(repo, override, input_string, expected_result): 446s """Synthesized commit should use changelog or override when provided 446s 446s A synthesized commit should use the date of the changelog entry in the 446s usual case, or commit_date when an override is requested. 446s 446s :param GitUbuntuRepository repo: fixture providing a temporary 446s GitUbuntuRepository instance to use 446s :param bool override: whether a changelog date override should be requested 446s from import_unapplied_dsc() 446s :param str input_string: the timestamp part of the changelog entry to use 446s :param tuple expected_result: the expected author date of the synthesized 446s commit, specified as six parameters to datetime.datetime() followed by 446s the expected tz offset in minutes. 446s """ 446s spec = source_builder.SourceSpec(changelog_date=input_string) 446s with source_builder.Source(spec) as dsc_pathname: 446s > target.import_unapplied_dsc( 446s repo=repo, 446s version='1-1', 446s namespace='importer', 446s dist='ubuntu', 446s dsc_pathname=dsc_pathname, 446s head_name='ubuntu/focal', 446s skip_orig=True, 446s parent_overrides={}, 446s commit_date=datetime.datetime( 446s 1972, 446s 3, 446s 3, 446s 12, 446s 45, 446s 57, 446s tzinfo=datetime.timezone.utc, 446s ), 446s changelog_date_overrides=( 446s frozenset({'1-1'}) if override else frozenset() 446s ), 446s ) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:1815: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:2230: in import_unapplied_dsc 446s commit, tag = find_or_create_unapplied_commit( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:2052: in find_or_create_unapplied_commit 446s changelog_parents = get_unapplied_import_parents( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer.py:1503: in get_unapplied_import_parents 446s import_tree_versions = repo.get_all_changelog_versions_from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:2230: in get_all_changelog_versions_from_treeish 446s changelog = self.get_changelog_from_treeish(treeish) 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 446s return Changelog.from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:569: in from_treeish 446s blob = follow_symlinks_to_blob( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmp0hsc9x6l/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: srcpkg/debian/changelog(l4): ignoring invalid week day 'Failday' 446s LINE: -- git ubuntu Failday, 30 Feb 1971 99:99:99 +9999 446s dpkg-source: warning: srcpkg/debian/changelog(l4): cannot parse non-conformant date '30 Feb 1971 99:99:99 +9999' 446s LINE: -- git ubuntu Failday, 30 Feb 1971 99:99:99 +9999 446s dpkg-source: warning: missing information for output field Standards-Version 446s __________________ test_fetch_rich_history_from_changes_file ___________________ 446s 446s repo = 446s pygit2_repo = pygit2.Repository('/tmp/tmpoe376qv2/.git/') 446s 446s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 446s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 446s def test_fetch_rich_history_from_changes_file(repo, pygit2_repo): 446s """Rich history specified in a changes file is found and validated""" 446s > rich_commit, parent_commit, import_tree = populate_rich_history( 446s import_repo=repo.raw_repo, 446s uploader_repo=pygit2_repo, 446s ) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:2111: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:2080: in populate_rich_history 446s ).write(import_repo) 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmp9cdumjxv/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s ________ test_fetch_rich_history_from_changes_file_fetch_failure_retry _________ 446s 446s repo = 446s pygit2_repo = pygit2.Repository('/tmp/tmp120ep8yg/.git/') 446s 446s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 446s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 446s def test_fetch_rich_history_from_changes_file_fetch_failure_retry( 446s repo, 446s pygit2_repo, 446s ): 446s """If rich history cannot be fetched once, it is retried""" 446s > rich_commit, parent_commit, import_tree = populate_rich_history( 446s import_repo=repo.raw_repo, 446s uploader_repo=pygit2_repo, 446s ) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:2204: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:2080: in populate_rich_history 446s ).write(import_repo) 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpezs_8vcv/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s ____________ test_fetch_rich_history_from_changes_file_missing_ref _____________ 446s 446s repo = 446s pygit2_repo = pygit2.Repository('/tmp/tmp9etgpn5k/.git/') 446s 446s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 446s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 446s def test_fetch_rich_history_from_changes_file_missing_ref( 446s repo, 446s pygit2_repo, 446s ): 446s """If rich history is specified but the ref cannot be found, a hard 446s exception is raised 446s """ 446s > rich_commit, _, _ = populate_rich_history( 446s import_repo=repo.raw_repo, 446s uploader_repo=pygit2_repo, 446s ) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:2243: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:2080: in populate_rich_history 446s ).write(import_repo) 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpepgo_bz0/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s ___________ test_fetch_rich_history_from_changes_file_missing_commit ___________ 446s 446s repo = 446s pygit2_repo = pygit2.Repository('/tmp/tmp2x043dhb/.git/') 446s 446s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 446s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 446s def test_fetch_rich_history_from_changes_file_missing_commit( 446s repo, 446s pygit2_repo, 446s ): 446s """If rich history is specified but the commit cannot be found, an 446s exception is raised 446s """ 446s > rich_commit, _, _ = populate_rich_history( 446s import_repo=repo.raw_repo, 446s uploader_repo=pygit2_repo, 446s ) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:2271: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:2080: in populate_rich_history 446s ).write(import_repo) 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpvtkymon7/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s ____________ test_fetch_rich_history_from_changes_file_not_a_commit ____________ 446s 446s repo = 446s pygit2_repo = pygit2.Repository('/tmp/tmpxnrufet3/.git/') 446s 446s @patch('gitubuntu.importer.LAUNCHPAD_GIT_HOSTING_URL_PREFIX', 'file://') 446s @patch('gitubuntu.importer.VCS_GIT_URL_VALIDATION', re.compile(r'.*')) 446s def test_fetch_rich_history_from_changes_file_not_a_commit(repo, pygit2_repo): 446s """If rich history is specified but the commit hash resolves to something 446s other than a commit, an exception is raised 446s """ 446s > rich_commit, _, _ = populate_rich_history( 446s import_repo=repo.raw_repo, 446s uploader_repo=pygit2_repo, 446s ) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:2297: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/importer_test.py:2080: in populate_rich_history 446s ).write(import_repo) 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmp_xnxa4i7/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s __________________________ test_reconstruct_changelog __________________________ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmp0fu5uza1/.git/') 446s monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0xe7a48f48> 446s 446s @pytest.mark.skipif( 446s ENTRY_POINT_TYPE is None, 446s reason="Entry point testing not available", 446s ) 446s def test_reconstruct_changelog(pygit2_repo, monkeypatch): 446s '''The reconstruct-changelog endpoint should add the expected commit''' 446s monkeypatch.setenv('DEBFULLNAME', 'Test User') 446s monkeypatch.setenv('DEBEMAIL', 'test@example.com') 446s Repo( 446s commits=[ 446s Commit(tree=SourceTree(Source()), name='root'), 446s Commit( 446s tree=SourceTree(Source(spec=SourceSpec(mutate=1))), 446s message=' * Test changelog entry', 446s name='child', 446s parents=[Placeholder('root')], 446s ), 446s ], 446s tags={'root': Placeholder('root'), 'child': Placeholder('child')}, 446s > ).write(pygit2_repo) 446s 446s gitubuntu/integration_test.py:219: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmp0fu5uza1/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s gitubuntu/repo_builder.py:389: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s dpkg-source: warning: missing information for output field Standards-Version 446s ___________________ TestObjectCreation.testRepoBranchesTags ____________________ 446s 446s self = 446s 446s def testRepoBranchesTags(self): 446s graph = Repo( 446s commits=[ 446s Commit( 446s Tree({}), 446s parents=[Placeholder('parent')], 446s name='child', 446s ), 446s Commit(Tree({}), name='parent'), 446s ], 446s branches={ 446s 'branch1': Placeholder('parent'), 446s 'branch2': Commit(Tree({'foo': Blob(b'qux')})), 446s }, 446s tags={ 446s 'tag1': Placeholder('child'), 446s 'tag2': Commit(Tree({'foo': Blob(b'quz')})), 446s }, 446s ) 446s > child_ref = graph.write(self.repo) 446s 446s gitubuntu/repo_builder_test.py:154: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpq7q8ycid/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s gitubuntu/repo_builder.py:389: AttributeError 446s ______________________ TestObjectCreation.testRepoTagger _______________________ 446s 446s self = 446s 446s def testRepoTagger(self): 446s """The tagger parameter should make it through to the tag""" 446s input_repo = Repo( 446s commits=[Commit(name='root')], 446s tags={'root': Placeholder('root')}, 446s tagger=pygit2.Signature( 446s 'Test Tagger', 446s 'test@example.com', 446s 1, 446s 2, 446s ), 446s ) 446s > input_repo.write(self.repo) 446s 446s gitubuntu/repo_builder_test.py:178: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmputdlfuim/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s gitubuntu/repo_builder.py:389: AttributeError 446s _______________________________ test_source_tree _______________________________ 446s 446s pygit2_repo = pygit2.Repository('/tmp/tmp0zl3rrx1/.git/') 446s 446s def test_source_tree(pygit2_repo): 446s commit_str = Commit(SourceTree(Source())).write(pygit2_repo) 446s commit = pygit2_repo.get(commit_str) 446s > assert gitubuntu.git_repository.follow_symlinks_to_blob( 446s repo=pygit2_repo, 446s treeish_object=commit, 446s path='debian/changelog', 446s ) 446s 446s gitubuntu/repo_builder_test.py:190: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmp0zl3rrx1/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s gitubuntu/git_repository.py:68: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s ______________________________ test_preservation _______________________________ 446s 446s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_preservation0') 446s repo = 446s 446s def test_preservation(tmpdir, repo): 446s """An export followed by an import should preserve rich history 446s 446s Given a minimal repository that should be able to have upload tags be 446s exported, when we import the export result into a similar repository with a 446s subtly different upload tag in which the rich history should still apply, 446s the result should be a correctly reconstructed upload tag. 446s 446s :param py.path tmpdir: the pytest standard tmpdir fixture. 446s :param repo: our standard repo fixture. 446s """ 446s Repo( 446s commits=[ 446s Commit( 446s name='1', 446s tree=Tree({ 446s 'a': Blob(b'a'), 446s }), 446s ), 446s Commit( 446s name='2', 446s parents=[Placeholder('1')], 446s tree=Tree({ 446s 'a': Blob(b'ab'), 446s }), 446s ), 446s Commit( 446s name='3', 446s parents=[Placeholder('2')], 446s tree=Tree({ 446s 'a': Blob(b'abc'), 446s }), 446s ), 446s ], 446s tags={ 446s 'importer/import/1': Placeholder('1'), 446s 'importer/upload/2': Placeholder('3'), 446s } 446s > ).write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/rich_history_test.py:51: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpgjjq8p4i/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s ______________________ test_preservation_multiple_parents ______________________ 446s 446s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_preservation_multiple_par0') 446s repo = 446s 446s def test_preservation_multiple_parents(tmpdir, repo): 446s """An export of rich history should omit multiple parent cases 446s 446s If an upload tag leads to multiple parents before we reach an import tag, 446s it should be excluded from the export as this type of upload tag is not 446s supported for rich history preservation. This test also serves to verify 446s code paths that handle the MultipleParentError exception in the export 446s code. 446s 446s :param py.path tmpdir: the pytest standard tmpdir fixture. 446s :param repo: our standard repo fixture. 446s """ 446s Repo( 446s commits=[ 446s Commit(name='1', message='a'), 446s Commit(name='2', message='b'), 446s Commit(name='child', parents=[Placeholder('1'), Placeholder('2')]), 446s ], 446s tags={ 446s 'importer/import/1': Placeholder('1'), 446s 'importer/upload/2': Placeholder('child'), 446s } 446s > ).write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/rich_history_test.py:102: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpdke_a7gc/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s _________________________ test_preservation_no_parents _________________________ 446s 446s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_preservation_no_parents0') 446s repo = 446s 446s def test_preservation_no_parents(tmpdir, repo): 446s """An export of rich history should omit no parent cases 446s 446s If an upload tag leads to no parents before we reach an import tag, 446s it should be excluded from the export as this type of upload tag is not 446s supported for rich history preservation. This test also serves to verify 446s code paths that handle the NoParentError exception in the export 446s code. 446s 446s :param py.path tmpdir: the pytest standard tmpdir fixture. 446s :param repo: our standard repo fixture. 446s """ 446s Repo( 446s commits=[ 446s Commit(name='1', message='a'), 446s Commit(name='2', message='b'), 446s ], 446s tags={ 446s 'importer/import/1': Placeholder('1'), 446s 'importer/upload/2': Placeholder('2'), 446s } 446s > ).write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/rich_history_test.py:129: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpkpmu8o_m/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s _____________ test_input_edge_cases[before_export0-before_import0] _____________ 446s 446s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_input_edge_cases_before_e0') 446s repo = 446s before_export = {'commits': [, , 'importer/upload/2': }} 446s before_import = {'commits': [], 'tags': {'importer/import/1': }} 446s 446s @pytest.mark.parametrize(['before_export', 'before_import'], [ 446s ( 446s # Commit messages with patch-like contents should not fail 446s 446s # If a commit message in rich history contains text in a patch-like 446s # format (such as a diff of some file), it should not prevent correct 446s # round-tripping. "git format-patch" followed by "git am" fails this 446s # test, for example. 446s { 446s 'commits': [ 446s Commit(name='1', message='a', tree=Tree({'a': Blob(b'a')})), 446s Commit( 446s name='2', 446s message='''First line 446s 446s Inline patch that isn't part of the real patch starts here 446s 446s --- a/foo 446s +++ b/foo 446s @@ -1 +1,2 @@ 446s foo 446s +bar 446s ''', 446s tree=Tree({'a': Blob(b'ab')}), 446s parents=[Placeholder('1')], 446s ), 446s ], 446s 'tags': { 446s 'importer/import/1': Placeholder('1'), 446s 'importer/upload/2': Placeholder('2'), 446s } 446s }, 446s { 446s 'commits': [ 446s Commit(name='b1', message='c', tree=Tree({'a': Blob(b'a')})), 446s ], 446s 'tags': {'importer/import/1': Placeholder('b1')}, 446s }, 446s ), 446s ( 446s # Commits that have no changes should round trip 446s { 446s 'commits': [ 446s Commit( 446s name='1', 446s message='a', 446s ), 446s Commit( 446s name='2', 446s message='b', 446s parents=[Placeholder('1')], 446s ), 446s ], 446s 'tags': { 446s 'importer/import/1': Placeholder('1'), 446s 'importer/upload/2': Placeholder('2'), 446s }, 446s }, 446s { 446s 'commits': [Commit(name='b1', message='c')], 446s 'tags': {'importer/import/1': Placeholder('b1')}, 446s }, 446s ), 446s ( 446s # Commits that have no commit message should round trip 446s { 446s 'commits': [ 446s Commit( 446s name='1', 446s message='a', 446s ), 446s Commit( 446s name='2', 446s message='', 446s tree=Tree({'a': Blob(b'a')}), 446s parents=[Placeholder('1')], 446s ), 446s ], 446s 'tags': { 446s 'importer/import/1': Placeholder('1'), 446s 'importer/upload/2': Placeholder('2'), 446s } 446s }, 446s { 446s 'commits': [Commit(name='b1', message='c')], 446s 'tags': {'importer/import/1': Placeholder('b1')}, 446s }, 446s ), 446s ]) 446s def test_input_edge_cases(tmpdir, repo, before_export, before_import): 446s """ 446s Edge cases in input rich history should reimport without failure 446s 446s Check that rich history preservation completes without an exception in 446s various cases. Details of each case are described in comments in the test 446s parameters above. 446s 446s Since these tests generally cover the mutated case (where rich history has 446s to be ported forward because parent commits have mutated), we must remove 446s and recreate the 'importer/import/1' tag so that it is different before 446s attempting reimport. This is done by deleting all ('importer/*') tags and 446s then using the before_import parameter to recreate it again. 446s 446s :param py.path tmpdir: the pytest standard tmpdir fixture. 446s :param GitUbuntuRepository repo: our standard repo fixture. 446s :param dict before_export: the parameters to supply to Repo() to construct 446s the repository that will be exported. 446s :param dict before_import: the parametsrs to supply to Repo() to add to the 446s repository before attempting reimport. 446s """ 446s > Repo(**before_export).write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/rich_history_test.py:260: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmp05b31uxg/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s _____________ test_input_edge_cases[before_export1-before_import1] _____________ 446s 446s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_input_edge_cases_before_e1') 446s repo = 446s before_export = {'commits': [, , 'importer/upload/2': }} 446s before_import = {'commits': [], 'tags': {'importer/import/1': }} 446s 446s @pytest.mark.parametrize(['before_export', 'before_import'], [ 446s ( 446s # Commit messages with patch-like contents should not fail 446s 446s # If a commit message in rich history contains text in a patch-like 446s # format (such as a diff of some file), it should not prevent correct 446s # round-tripping. "git format-patch" followed by "git am" fails this 446s # test, for example. 446s { 446s 'commits': [ 446s Commit(name='1', message='a', tree=Tree({'a': Blob(b'a')})), 446s Commit( 446s name='2', 446s message='''First line 446s 446s Inline patch that isn't part of the real patch starts here 446s 446s --- a/foo 446s +++ b/foo 446s @@ -1 +1,2 @@ 446s foo 446s +bar 446s ''', 446s tree=Tree({'a': Blob(b'ab')}), 446s parents=[Placeholder('1')], 446s ), 446s ], 446s 'tags': { 446s 'importer/import/1': Placeholder('1'), 446s 'importer/upload/2': Placeholder('2'), 446s } 446s }, 446s { 446s 'commits': [ 446s Commit(name='b1', message='c', tree=Tree({'a': Blob(b'a')})), 446s ], 446s 'tags': {'importer/import/1': Placeholder('b1')}, 446s }, 446s ), 446s ( 446s # Commits that have no changes should round trip 446s { 446s 'commits': [ 446s Commit( 446s name='1', 446s message='a', 446s ), 446s Commit( 446s name='2', 446s message='b', 446s parents=[Placeholder('1')], 446s ), 446s ], 446s 'tags': { 446s 'importer/import/1': Placeholder('1'), 446s 'importer/upload/2': Placeholder('2'), 446s }, 446s }, 446s { 446s 'commits': [Commit(name='b1', message='c')], 446s 'tags': {'importer/import/1': Placeholder('b1')}, 446s }, 446s ), 446s ( 446s # Commits that have no commit message should round trip 446s { 446s 'commits': [ 446s Commit( 446s name='1', 446s message='a', 446s ), 446s Commit( 446s name='2', 446s message='', 446s tree=Tree({'a': Blob(b'a')}), 446s parents=[Placeholder('1')], 446s ), 446s ], 446s 'tags': { 446s 'importer/import/1': Placeholder('1'), 446s 'importer/upload/2': Placeholder('2'), 446s } 446s }, 446s { 446s 'commits': [Commit(name='b1', message='c')], 446s 'tags': {'importer/import/1': Placeholder('b1')}, 446s }, 446s ), 446s ]) 446s def test_input_edge_cases(tmpdir, repo, before_export, before_import): 446s """ 446s Edge cases in input rich history should reimport without failure 446s 446s Check that rich history preservation completes without an exception in 446s various cases. Details of each case are described in comments in the test 446s parameters above. 446s 446s Since these tests generally cover the mutated case (where rich history has 446s to be ported forward because parent commits have mutated), we must remove 446s and recreate the 'importer/import/1' tag so that it is different before 446s attempting reimport. This is done by deleting all ('importer/*') tags and 446s then using the before_import parameter to recreate it again. 446s 446s :param py.path tmpdir: the pytest standard tmpdir fixture. 446s :param GitUbuntuRepository repo: our standard repo fixture. 446s :param dict before_export: the parameters to supply to Repo() to construct 446s the repository that will be exported. 446s :param dict before_import: the parametsrs to supply to Repo() to add to the 446s repository before attempting reimport. 446s """ 446s > Repo(**before_export).write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/rich_history_test.py:260: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpdhg0cdw5/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s _____________ test_input_edge_cases[before_export2-before_import2] _____________ 446s 446s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_input_edge_cases_before_e2') 446s repo = 446s before_export = {'commits': [, , 'importer/upload/2': }} 446s before_import = {'commits': [], 'tags': {'importer/import/1': }} 446s 446s @pytest.mark.parametrize(['before_export', 'before_import'], [ 446s ( 446s # Commit messages with patch-like contents should not fail 446s 446s # If a commit message in rich history contains text in a patch-like 446s # format (such as a diff of some file), it should not prevent correct 446s # round-tripping. "git format-patch" followed by "git am" fails this 446s # test, for example. 446s { 446s 'commits': [ 446s Commit(name='1', message='a', tree=Tree({'a': Blob(b'a')})), 446s Commit( 446s name='2', 446s message='''First line 446s 446s Inline patch that isn't part of the real patch starts here 446s 446s --- a/foo 446s +++ b/foo 446s @@ -1 +1,2 @@ 446s foo 446s +bar 446s ''', 446s tree=Tree({'a': Blob(b'ab')}), 446s parents=[Placeholder('1')], 446s ), 446s ], 446s 'tags': { 446s 'importer/import/1': Placeholder('1'), 446s 'importer/upload/2': Placeholder('2'), 446s } 446s }, 446s { 446s 'commits': [ 446s Commit(name='b1', message='c', tree=Tree({'a': Blob(b'a')})), 446s ], 446s 'tags': {'importer/import/1': Placeholder('b1')}, 446s }, 446s ), 446s ( 446s # Commits that have no changes should round trip 446s { 446s 'commits': [ 446s Commit( 446s name='1', 446s message='a', 446s ), 446s Commit( 446s name='2', 446s message='b', 446s parents=[Placeholder('1')], 446s ), 446s ], 446s 'tags': { 446s 'importer/import/1': Placeholder('1'), 446s 'importer/upload/2': Placeholder('2'), 446s }, 446s }, 446s { 446s 'commits': [Commit(name='b1', message='c')], 446s 'tags': {'importer/import/1': Placeholder('b1')}, 446s }, 446s ), 446s ( 446s # Commits that have no commit message should round trip 446s { 446s 'commits': [ 446s Commit( 446s name='1', 446s message='a', 446s ), 446s Commit( 446s name='2', 446s message='', 446s tree=Tree({'a': Blob(b'a')}), 446s parents=[Placeholder('1')], 446s ), 446s ], 446s 'tags': { 446s 'importer/import/1': Placeholder('1'), 446s 'importer/upload/2': Placeholder('2'), 446s } 446s }, 446s { 446s 'commits': [Commit(name='b1', message='c')], 446s 'tags': {'importer/import/1': Placeholder('b1')}, 446s }, 446s ), 446s ]) 446s def test_input_edge_cases(tmpdir, repo, before_export, before_import): 446s """ 446s Edge cases in input rich history should reimport without failure 446s 446s Check that rich history preservation completes without an exception in 446s various cases. Details of each case are described in comments in the test 446s parameters above. 446s 446s Since these tests generally cover the mutated case (where rich history has 446s to be ported forward because parent commits have mutated), we must remove 446s and recreate the 'importer/import/1' tag so that it is different before 446s attempting reimport. This is done by deleting all ('importer/*') tags and 446s then using the before_import parameter to recreate it again. 446s 446s :param py.path tmpdir: the pytest standard tmpdir fixture. 446s :param GitUbuntuRepository repo: our standard repo fixture. 446s :param dict before_export: the parameters to supply to Repo() to construct 446s the repository that will be exported. 446s :param dict before_import: the parametsrs to supply to Repo() to add to the 446s repository before attempting reimport. 446s """ 446s > Repo(**before_export).write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/rich_history_test.py:260: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmplaf_fx2x/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s _______________________ test_preservation_fast_forwards ________________________ 446s 446s tmpdir = local('/tmp/pytest-of-ubuntu/pytest-0/test_preservation_fast_forward0') 446s repo = 446s 446s def test_preservation_fast_forwards(tmpdir, repo): 446s """Rich history that can be fast forwarded should not mutate 446s 446s :param py.path tmpdir: the pytest standard tmpdir fixture. 446s :param GitUbuntuRepository repo: our standard repo fixture. 446s """ 446s Repo( 446s commits=[ 446s Commit( 446s name='1', 446s message='a', 446s ), 446s Commit( 446s name='2', 446s message='', 446s tree=Tree({'a': Blob(b'a')}), 446s parents=[Placeholder('1')], 446s ), 446s ], 446s tags={ 446s 'importer/import/1': Placeholder('1'), 446s 'importer/upload/2': Placeholder('2'), 446s } 446s > ).write(repo.raw_repo) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/rich_history_test.py:294: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s self = 446s repo = pygit2.Repository('/tmp/tmpyqpzcmig/.git/'), record = {} 446s 446s def write(self, repo, record=None): 446s replace_placeholders(self) 446s record = record or dict() 446s written_commits = [ 446s commit.write(repo=repo, record=record) 446s for commit 446s in self.commit_list 446s ] 446s for name, target in self.branches.items(): 446s repo.create_branch( 446s name, 446s repo.get(target.write(repo)).peel(pygit2.Commit), 446s ) 446s for name, target in self.tags.items(): 446s repo.create_tag( 446s name, 446s target.write(repo), 446s > pygit2.GIT_OBJ_COMMIT, 446s self.tagger.signature, 446s 'Tag message', 446s ) 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_COMMIT'. Did you mean: 'GIT_OBJECT_COMMIT'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/repo_builder.py:389: AttributeError 446s _______________________ test_source_create_with_version ________________________ 446s 446s repo = 446s 446s def test_source_create_with_version(repo): 446s > version = get_spec_changelog_version(repo, version='3', native=True) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/source_builder_test.py:57: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 446s changelog = repo.get_changelog_from_treeish(tree_hash) 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 446s return Changelog.from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:569: in from_treeish 446s blob = follow_symlinks_to_blob( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmp68xed26n/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (native)' 446s dpkg-source: info: building source-builder-package in source-builder-package_3.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_3.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s _______________________ test_source_create_with_versions _______________________ 446s 446s repo = 446s 446s def test_source_create_with_versions(repo): 446s source_spec = target.SourceSpec(changelog_versions=['3', '4'], native=True) 446s with target.Source(source_spec) as f: 446s tree_hash = importer.dsc_to_tree_hash(repo.raw_repo, f) 446s > changelog = repo.get_changelog_from_treeish(tree_hash) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/source_builder_test.py:65: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 446s return Changelog.from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:569: in from_treeish 446s blob = follow_symlinks_to_blob( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmphufip38z/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (native)' 446s dpkg-source: info: building source-builder-package in source-builder-package_3.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_3.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s ____________ test_source_native_source_format[True-3.0 (native)\n] _____________ 446s 446s repo = 446s native = True, expected = b'3.0 (native)\n' 446s 446s @pytest.mark.parametrize('native,expected', [ 446s (True, b"3.0 (native)\n"), 446s (False, b"3.0 (quilt)\n"), 446s ]) 446s def test_source_native_source_format(repo, native, expected): 446s with target.Source(target.SourceSpec(native=native)) as dsc_path: 446s > blob = git_repository.follow_symlinks_to_blob( 446s repo.raw_repo, 446s dsc_path_to_tree(repo, dsc_path), 446s 'debian/source/format', 446s ) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/source_builder_test.py:133: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmp5o6a3558/.git/') 446s top_tree_object = 446s search_path = 'debian/source/format' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (native)' 446s dpkg-source: info: building source-builder-package in source-builder-package_1.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s ____________ test_source_native_source_format[False-3.0 (quilt)\n] _____________ 446s 446s repo = 446s native = False, expected = b'3.0 (quilt)\n' 446s 446s @pytest.mark.parametrize('native,expected', [ 446s (True, b"3.0 (native)\n"), 446s (False, b"3.0 (quilt)\n"), 446s ]) 446s def test_source_native_source_format(repo, native, expected): 446s with target.Source(target.SourceSpec(native=native)) as dsc_path: 446s > blob = git_repository.follow_symlinks_to_blob( 446s repo.raw_repo, 446s dsc_path_to_tree(repo, dsc_path), 446s 'debian/source/format', 446s ) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/source_builder_test.py:133: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpbr7xvw4q/.git/') 446s top_tree_object = 446s search_path = 'debian/source/format' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s _________________________ test_source_quilt_no_patches _________________________ 446s 446s repo = 446s 446s def test_source_quilt_no_patches(repo): 446s with target.Source(target.SourceSpec()) as dsc_path: 446s top = dsc_path_to_tree(repo, dsc_path) 446s debian_entry = top['debian'] 446s > assert debian_entry.type in [pygit2.GIT_OBJ_TREE, 'tree'] 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/source_builder_test.py:144: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s ________________________ test_source_quilt_with_patches ________________________ 446s 446s repo = 446s 446s def test_source_quilt_with_patches(repo): 446s spec = target.SourceSpec(has_patches=True) 446s with target.Source(spec) as dsc_path: 446s top = dsc_path_to_tree(repo, dsc_path) 446s expected_files = ['series', 'a', 'b'] 446s for basename in expected_files: 446s > assert git_repository.follow_symlinks_to_blob( 446s repo.raw_repo, 446s top, 446s 'debian/patches/%s' % basename, 446s ) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/source_builder_test.py:156: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmp9ppuhlnv/.git/') 446s top_tree_object = 446s search_path = 'debian/patches/series' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: applying a 446s dpkg-source: info: applying b 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s ____________________ test_source_quilt_with_patches_applied ____________________ 446s 446s repo = 446s 446s def test_source_quilt_with_patches_applied(repo): 446s spec = target.SourceSpec(has_patches=True) 446s with target.Source(spec) as dsc_path: 446s top = dsc_path_to_tree(repo, dsc_path, patches_applied=True) 446s expected_files = [ 446s 'debian/patches/series', 446s 'debian/patches/a', 446s 'debian/patches/b', 446s 'a', 446s 'b', 446s ] 446s for filename in expected_files: 446s > assert git_repository.follow_symlinks_to_blob( 446s repo.raw_repo, 446s top, 446s filename, 446s ) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/source_builder_test.py:183: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpoe6ej9fd/.git/') 446s top_tree_object = 446s search_path = 'debian/patches/series' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: applying a 446s dpkg-source: info: applying b 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: using patch list from debian/patches/series 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s ______________________ test_source_version_native_default ______________________ 446s 446s repo = 446s 446s def test_source_version_native_default(repo): 446s """The default version string for a native package should not have a 446s '-' in it. 446s """ 446s > version = get_spec_changelog_version(repo, native=True) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/source_builder_test.py:194: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 446s changelog = repo.get_changelog_from_treeish(tree_hash) 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 446s return Changelog.from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:569: in from_treeish 446s blob = follow_symlinks_to_blob( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpirqx4bli/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (native)' 446s dpkg-source: info: building source-builder-package in source-builder-package_1.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s ____________________ test_source_version_non_native_default ____________________ 446s 446s repo = 446s 446s def test_source_version_non_native_default(repo): 446s """The default version string for a non-native package should have a 446s '-' in it. 446s """ 446s > version = get_spec_changelog_version(repo, native=False) 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/source_builder_test.py:202: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 446s changelog = repo.get_changelog_from_treeish(tree_hash) 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 446s return Changelog.from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:569: in from_treeish 446s blob = follow_symlinks_to_blob( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmp1nnklfam/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s _____________________ test_source_version_native_specific ______________________ 446s 446s repo = 446s 446s def test_source_version_native_specific(repo): 446s """We should be able to create a native package with a 446s native-looking version string. 446s """ 446s > version = get_spec_changelog_version(repo, native=True, version='1.0') 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/source_builder_test.py:210: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 446s changelog = repo.get_changelog_from_treeish(tree_hash) 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 446s return Changelog.from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:569: in from_treeish 446s blob = follow_symlinks_to_blob( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpy9ll5k0n/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (native)' 446s dpkg-source: info: building source-builder-package in source-builder-package_1.0.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1.0.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s ___________________ test_source_version_non_native_specific ____________________ 446s 446s repo = 446s 446s def test_source_version_non_native_specific(repo): 446s """We should be able to create a non-native package with a 446s non-native-looking version string. 446s """ 446s > version = get_spec_changelog_version(repo, native=False, version='1.0-1') 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/source_builder_test.py:218: 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/source_builder_test.py:47: in get_spec_changelog_version 446s changelog = repo.get_changelog_from_treeish(tree_hash) 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:1873: in get_changelog_from_treeish 446s return Changelog.from_treeish( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:569: in from_treeish 446s blob = follow_symlinks_to_blob( 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:101: in follow_symlinks_to_blob 446s return _follow_symlinks_to_blob( 446s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 446s 446s repo = pygit2.Repository('/tmp/tmpg98_z6g6/.git/') 446s top_tree_object = 446s search_path = 'debian/changelog' 446s _rel_tree = 446s _rel_path = '' 446s 446s def _follow_symlinks_to_blob(repo, top_tree_object, search_path, 446s _rel_tree=None, _rel_path='' 446s ): 446s '''Recursively follow a path down a tree, following symlinks, to find blob 446s 446s repo: pygit2.Repository object 446s top_tree: pygit2.Tree object of the top of the tree structure 446s search_path: '/'-separated path string of blob to find 446s _rel_tree: (internal) which tree to look further into 446s _rel_path: (internal) the path we are in so far 446s ''' 446s 446s NORMAL_BLOB_MODES = set([ 446s pygit2.GIT_FILEMODE_BLOB, 446s pygit2.GIT_FILEMODE_BLOB_EXECUTABLE, 446s ]) 446s 446s _rel_tree = _rel_tree or top_tree_object 446s head, tail = posixpath.split(search_path) 446s 446s # A traditional functional split would put a single entry in head with tail 446s # empty, but posixpath.split doesn't necessarily do this. Jiggle it round 446s # to make it appear to have traditional semantics. 446s if not head: 446s head = tail 446s tail = None 446s 446s entry = _rel_tree[head] 446s > if entry.type in [pygit2.GIT_OBJ_TREE, 'tree']: 446s E AttributeError: module 'pygit2' has no attribute 'GIT_OBJ_TREE'. Did you mean: 'GIT_OBJECT_TREE'? 446s 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/git_repository.py:68: AttributeError 446s ----------------------------- Captured stdout call ----------------------------- 446s dpkg-source: info: using source format '3.0 (quilt)' 446s dpkg-source: info: building source-builder-package using existing ./source-builder-package_1.0.orig.tar.gz 446s dpkg-source: info: building source-builder-package in source-builder-package_1.0-1.debian.tar.xz 446s dpkg-source: info: building source-builder-package in source-builder-package_1.0-1.dsc 446s ----------------------------- Captured stderr call ----------------------------- 446s dpkg-source: warning: missing information for output field Standards-Version 446s =============================== warnings summary =============================== 446s gitubuntu/__main__.py:7 446s /tmp/autopkgtest.BjXTEZ/build.VY3/src/gitubuntu/__main__.py:7: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html 446s import pkg_resources 446s 446s ../../../../usr/lib/python3/dist-packages/pkg_resources/__init__.py:3154 446s /usr/lib/python3/dist-packages/pkg_resources/__init__.py:3154: DeprecationWarning: Deprecated call to `pkg_resources.declare_namespace('logilab')`. 446s 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 446s declare_namespace(pkg) 446s 446s -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html 446s 446s ---------- coverage: platform linux, python 3.12.7-final-0 ----------- 446s Name Stmts Miss Cover 446s --------------------------------------------------------------- 446s gitubuntu/__init__.py 0 0 100% 446s gitubuntu/__main__.py 103 94 9% 446s gitubuntu/build.py 185 131 29% 446s gitubuntu/cache.py 1 0 100% 446s gitubuntu/clone.py 70 54 23% 446s gitubuntu/dsc.py 65 16 75% 446s gitubuntu/exportorig.py 48 37 23% 446s gitubuntu/git_repository.py 1103 521 53% 446s gitubuntu/git_repository_test.py 316 40 87% 446s gitubuntu/importer.py 707 446 37% 446s gitubuntu/importer_service.py 215 22 90% 446s gitubuntu/importer_service_broker.py 60 49 18% 446s gitubuntu/importer_service_ipc.py 12 2 83% 446s gitubuntu/importer_service_poller.py 37 25 32% 446s gitubuntu/importer_service_test.py 147 0 100% 446s gitubuntu/importer_service_worker.py 87 64 26% 446s gitubuntu/importer_service_worker_test.py 18 0 100% 446s gitubuntu/importer_tag_test.py 47 20 57% 446s gitubuntu/importer_test.py 388 133 66% 446s gitubuntu/integration_test.py 67 26 61% 446s gitubuntu/logging.py 8 4 50% 446s gitubuntu/merge.py 219 192 12% 446s gitubuntu/patch_state.py 2 0 100% 446s gitubuntu/prepare_upload.py 86 3 97% 446s gitubuntu/prepare_upload_test.py 152 0 100% 446s gitubuntu/queue.py 174 148 15% 446s gitubuntu/remote.py 100 85 15% 446s gitubuntu/repo_builder.py 162 0 100% 446s gitubuntu/repo_builder_test.py 159 12 92% 446s gitubuntu/repo_comparator.py 32 25 22% 446s gitubuntu/rich_history.py 67 45 33% 446s gitubuntu/rich_history_test.py 53 31 42% 446s gitubuntu/run.py 72 12 83% 446s gitubuntu/scriptutils.py 11 0 100% 446s gitubuntu/source_builder.py 119 0 100% 446s gitubuntu/source_builder_test.py 105 18 83% 446s gitubuntu/source_information.py 339 133 61% 446s gitubuntu/source_information_test.py 78 3 96% 446s gitubuntu/spec.py 3 0 100% 446s gitubuntu/submit.py 103 86 17% 446s gitubuntu/tag.py 78 69 12% 446s gitubuntu/test_fixtures.py 29 5 83% 446s gitubuntu/test_util.py 5 0 100% 446s gitubuntu/version.py 1 0 100% 446s gitubuntu/versioning.py 124 16 87% 446s --------------------------------------------------------------- 446s TOTAL 5957 2567 57% 446s 446s =========================== short test summary info ============================ 446s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[0] 446s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[1] 446s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[2] 446s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[3] 446s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob[4] 446s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob_not_found[tree1] 446s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob_not_found[tree2] 446s FAILED gitubuntu/git_repository_test.py::test_follow_symlinks_to_blob_not_found[tree3] 446s FAILED gitubuntu/git_repository_test.py::test_git_escape_dir_to_tree - Attrib... 446s FAILED gitubuntu/git_repository_test.py::test_determine_quilt_series_path[tree_data1-debian/patches/series] 446s FAILED gitubuntu/git_repository_test.py::test_determine_quilt_series_path[tree_data2-debian/patches/series] 446s FAILED gitubuntu/git_repository_test.py::test_determine_quilt_series_path[tree_data3-debian/patches/debian.series] 446s FAILED gitubuntu/git_repository_test.py::test_determine_quilt_series_path[tree_data4-debian/patches/debian.series] 446s FAILED gitubuntu/git_repository_test.py::test_quilt_env - AttributeError: mod... 446s FAILED gitubuntu/git_repository_test.py::test_repo_quilt_env - AttributeError... 446s FAILED gitubuntu/git_repository_test.py::test_repo_quilt_env_from_treeish_str 446s 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] 446s 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] 446s 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] 446s FAILED gitubuntu/git_repository_test.py::test_commit_tree - AttributeError: m... 446s FAILED gitubuntu/git_repository_test.py::test_descendant_of[root-root-False] 446s FAILED gitubuntu/git_repository_test.py::test_descendant_of[child1-root-True] 446s FAILED gitubuntu/git_repository_test.py::test_descendant_of[root-child1-False] 446s FAILED gitubuntu/git_repository_test.py::test_descendant_of[grandchild1-root-True] 446s FAILED gitubuntu/git_repository_test.py::test_descendant_of[child1-child2-False] 446s FAILED gitubuntu/git_repository_test.py::test_descendant_of[root-disjoint-False] 446s FAILED gitubuntu/git_repository_test.py::test_create_tag - AttributeError: mo... 446s FAILED gitubuntu/git_repository_test.py::test_get_all_reimport_tags - Attribu... 446s FAILED gitubuntu/git_repository_test.py::test_get_head_info - AttributeError:... 446s 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] 446s 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] 446s 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] 446s 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] 446s 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] 446s 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] 446s 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] 446s 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] 446s FAILED gitubuntu/importer_tag_test.py::test_import_applied_spi_tags[input_repo0-validation_repo_delta0-validation_repo_expected_treewise_refs0-True] 446s FAILED gitubuntu/importer_tag_test.py::test_import_applied_spi_tags[input_repo2-validation_repo_delta2-validation_repo_expected_treewise_refs2-False] 446s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags[input_repo1-PatchState.UNAPPLIED-expected1] 446s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags[input_repo2-PatchState.UNAPPLIED-expected2] 446s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags[input_repo4-PatchState.APPLIED-expected4] 446s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags[input_repo5-PatchState.APPLIED-expected5] 446s FAILED gitubuntu/importer_test.py::test_get_existing_import_tags_ordering - A... 446s FAILED gitubuntu/importer_test.py::test_create_import_tag[input_repo0-validation_repo_delta0-validation_repo_expected_identical_refs0] 446s FAILED gitubuntu/importer_test.py::test_create_import_tag[input_repo1-validation_repo_delta1-validation_repo_expected_identical_refs1] 446s FAILED gitubuntu/importer_test.py::test_create_import_tag[input_repo2-validation_repo_delta2-validation_repo_expected_identical_refs2] 446s FAILED gitubuntu/importer_test.py::test_create_import_tag_hash_stability_on_first_import 446s FAILED gitubuntu/importer_test.py::test_create_import_tag_hash_stability_on_reimport 446s FAILED gitubuntu/importer_test.py::test_create_applied_tag[input_repo0-validation_repo_delta0-validation_repo_expected_identical_refs0] 446s FAILED gitubuntu/importer_test.py::test_create_applied_tag[input_repo1-validation_repo_delta1-validation_repo_expected_identical_refs1] 446s FAILED gitubuntu/importer_test.py::test_create_applied_tag[input_repo2-validation_repo_delta2-validation_repo_expected_identical_refs2] 446s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo1-parent_overrides1-changelog_versions1-PatchState.UNAPPLIED-expected_refs1] 446s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo2-parent_overrides2-changelog_versions2-PatchState.UNAPPLIED-expected_refs2] 446s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo3-parent_overrides3-changelog_versions3-PatchState.UNAPPLIED-expected_refs3] 446s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo5-parent_overrides5-changelog_versions5-PatchState.APPLIED-expected_refs5] 446s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo6-parent_overrides6-changelog_versions6-PatchState.APPLIED-expected_refs6] 446s FAILED gitubuntu/importer_test.py::test_get_changelog_parent_commits[input_repo7-parent_overrides7-changelog_versions7-PatchState.APPLIED-expected_refs7] 446s FAILED gitubuntu/importer_test.py::test_validate_rich_history[input_repo0-published_spec0-True] 446s FAILED gitubuntu/importer_test.py::test_validate_rich_history[input_repo1-published_spec1-True] 446s FAILED gitubuntu/importer_test.py::test_validate_rich_history[input_repo2-published_spec2-RichHistoryTreeMismatch] 446s FAILED gitubuntu/importer_test.py::test_validate_rich_history[input_repo3-published_spec3-RichHistoryHasNoChangelogParentAncestor] 446s FAILED gitubuntu/importer_test.py::test_add_changelog_note_to_commit - Attrib... 446s FAILED gitubuntu/importer_test.py::test_add_changelog_note_to_commit_utf8 - A... 446s FAILED gitubuntu/importer_test.py::test_double_changelog_note_add_does_not_fail 446s FAILED gitubuntu/importer_test.py::test_create_import_note - AttributeError: ... 446s FAILED gitubuntu/importer_test.py::test_create_import_note_timestamp - Attrib... 446s FAILED gitubuntu/importer_test.py::test_import_creates_import_note - Attribut... 446s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_quilt_patches - ... 446s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parenting[input_repo0-changelog_versions0-validation_repo_delta0-validation_repo_expected_identical_refs0] 446s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parenting[input_repo1-changelog_versions1-validation_repo_delta1-validation_repo_expected_identical_refs1] 446s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parenting[input_repo2-changelog_versions2-validation_repo_delta2-validation_repo_expected_identical_refs2] 446s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parenting[input_repo3-changelog_versions3-validation_repo_delta3-validation_repo_expected_identical_refs3] 446s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parent_override 446s FAILED gitubuntu/importer_test.py::test_import_unapplied_spi_parent_override_failure 446s FAILED gitubuntu/importer_test.py::test_import_applied_spi_parenting[input_repo0-expected_ancestor_commits0-expected_parent_commits0] 446s FAILED gitubuntu/importer_test.py::test_authorship_date[False-Fri, 2 Feb 1971 12:34:56 +0100-expected_result0] 446s FAILED gitubuntu/importer_test.py::test_authorship_date[True-Failday, 30 Feb 1971 99:99:99 +9999-expected_result1] 446s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file 446s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file_fetch_failure_retry 446s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file_missing_ref 446s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file_missing_commit 446s FAILED gitubuntu/importer_test.py::test_fetch_rich_history_from_changes_file_not_a_commit 446s FAILED gitubuntu/integration_test.py::test_reconstruct_changelog - AttributeE... 446s FAILED gitubuntu/repo_builder_test.py::TestObjectCreation::testRepoBranchesTags 446s FAILED gitubuntu/repo_builder_test.py::TestObjectCreation::testRepoTagger - A... 446s FAILED gitubuntu/repo_builder_test.py::test_source_tree - AttributeError: mod... 446s FAILED gitubuntu/rich_history_test.py::test_preservation - AttributeError: mo... 446s FAILED gitubuntu/rich_history_test.py::test_preservation_multiple_parents - A... 446s FAILED gitubuntu/rich_history_test.py::test_preservation_no_parents - Attribu... 446s FAILED gitubuntu/rich_history_test.py::test_input_edge_cases[before_export0-before_import0] 446s FAILED gitubuntu/rich_history_test.py::test_input_edge_cases[before_export1-before_import1] 446s FAILED gitubuntu/rich_history_test.py::test_input_edge_cases[before_export2-before_import2] 446s FAILED gitubuntu/rich_history_test.py::test_preservation_fast_forwards - Attr... 446s FAILED gitubuntu/source_builder_test.py::test_source_create_with_version - At... 446s FAILED gitubuntu/source_builder_test.py::test_source_create_with_versions - A... 446s FAILED gitubuntu/source_builder_test.py::test_source_native_source_format[True-3.0 (native)\n] 446s FAILED gitubuntu/source_builder_test.py::test_source_native_source_format[False-3.0 (quilt)\n] 446s FAILED gitubuntu/source_builder_test.py::test_source_quilt_no_patches - Attri... 446s FAILED gitubuntu/source_builder_test.py::test_source_quilt_with_patches - Att... 446s FAILED gitubuntu/source_builder_test.py::test_source_quilt_with_patches_applied 446s FAILED gitubuntu/source_builder_test.py::test_source_version_native_default 446s FAILED gitubuntu/source_builder_test.py::test_source_version_non_native_default 446s FAILED gitubuntu/source_builder_test.py::test_source_version_native_specific 446s FAILED gitubuntu/source_builder_test.py::test_source_version_non_native_specific 446s = 105 failed, 348 passed, 3 skipped, 3 xfailed, 2 warnings in 82.63s (0:01:22) = 446s pytest failed; self test will fail 447s autopkgtest [09:41:09]: test self-test: -----------------------] 452s autopkgtest [09:41:14]: test self-test: - - - - - - - - - - results - - - - - - - - - - 452s self-test FAIL non-zero exit status 1 456s autopkgtest [09:41:18]: @@@@@@@@@@@@@@@@@@@@ summary 456s self-test FAIL non-zero exit status 1