diff options
Diffstat (limited to 'tests/pkg-build.test')
-rw-r--r-- | tests/pkg-build.test | 1239 |
1 files changed, 1239 insertions, 0 deletions
diff --git a/tests/pkg-build.test b/tests/pkg-build.test new file mode 100644 index 0000000..763574b --- /dev/null +++ b/tests/pkg-build.test @@ -0,0 +1,1239 @@ +# file : tests/pkg-build.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include common.test config.test remote.test + +# Source repository: +# +# pkg-build +# |-- libbar-1.0.0.tar.gz +# |-- libbaz-1.1.0.tar.gz +# |-- libfoo-0.0.1.tar.gz +# |-- libfoo-1.0.0.tar.gz +# |-- libfoo-1.1.0 +# | |-- build +# | | `-- bootstrap.build +# | |-- buildfile +# | `-- manifest +# |-- libfoo-1.1.0.tar.gz +# |-- libfoo-1.2.0.tar.gz +# |-- t1 +# | |-- libfoo-1.0.0.tar.gz +# | `-- repositories +# |-- t2 +# | |-- libbar-1.0.0.tar.gz -> libfoo +# | |-- libfoo-1.0.0.tar.gz +# | `-- repositories +# |-- t3 -> t2 (prerequisite) +# | |-- libbaz-1.0.0.tar.gz -> libbar +# | |-- libfox-1.0.0.tar.gz +# | `-- repositories +# |-- t4a +# | |-- libfoo-1.1.0.tar.gz +# | `-- repositories +# |-- t4b -> t4a (prerequisite) +# | |-- libbar-1.1.0.tar.gz -> libfoo == 1.1.0 +# | `-- repositories +# |-- t4c -> t4b (prerequisite) +# | |-- libbaz-1.1.0.tar.gz -> libfoo, libbar +# | |-- libfoo-1.0.0.tar.gz +# | `-- repositories +# |-- t4d -> t4c (prerequisite) +# | |-- libbiz-1.0.0.tar.gz -> libfox, libfoo, libbaz +# | |-- libfox-1.0.0.tar.gz +# | `-- repositories +# `-- t5 +# |-- libbar-1.2.0.tar.gz +# `-- repositories + +# Prepare repositories used by tests if running in the local mode. +# ++if ($remote != true) + rep_create += 2>- + + cp -r $src/t1 $out/t1 && $rep_create $out/t1 &$out/t1/packages + cp -r $src/t2 $out/t2 && $rep_create $out/t2 &$out/t2/packages + cp -r $src/t3 $out/t3 && $rep_create $out/t3 &$out/t3/packages + cp -r $src/t4a $out/t4a && $rep_create $out/t4a &$out/t4a/packages + cp -r $src/t4b $out/t4b && $rep_create $out/t4b &$out/t4b/packages + cp -r $src/t4c $out/t4c && $rep_create $out/t4c &$out/t4c/packages + cp -r $src/t4d $out/t4d && $rep_create $out/t4d &$out/t4d/packages + cp -r $src/t5 $out/t5 && $rep_create $out/t5 &$out/t5/packages +end + +pkg_configure += -d cfg "config.cxx=$config.cxx" 2>- +pkg_disfigure += -d cfg +pkg_fetch += -d cfg 2>- +pkg_purge += -d cfg +pkg_status += -d cfg +pkg_unpack += -d cfg 2>- +rep_add += -d cfg 2>- +rep_fetch += -d cfg --auth all --trust-yes 2>- + +: libfoo +: +: Test building different versions of libfoo. +: +{ + test.arguments += --print-only + + : no-name + : + $clone_root_cfg; + $* 2>>EOE != 0 + error: package name argument expected + info: run 'bpkg help pkg-build' for more information + EOE + + : unknown-package + : + $clone_root_cfg; + $* libfoo 2>>/EOE != 0 + error: unknown package libfoo + info: configuration cfg/ has no repositories + info: use 'bpkg rep-add' to add a repository + EOE + + : unknown-package-ver + : + $clone_root_cfg; + $* libfoo/1.0.0 2>>/EOE != 0 + error: unknown package libfoo + info: configuration cfg/ has no repositories + info: use 'bpkg rep-add' to add a repository + EOE + + : archive + : + $clone_root_cfg; + $* $src/libfoo-1.1.0.tar.gz >'build libfoo/1.1.0' + + : dir + : + $clone_root_cfg; + $* $src/libfoo-1.1.0/ >'build libfoo/1.1.0' + + : unpacked-dir + : + { + $clone_root_cfg && $pkg_unpack -e $src/libfoo-1.1.0; + + $* libfoo >'build libfoo/1.1.0'; + $* libfoo/1.1.0 >'build libfoo/1.1.0'; + $* libfoo libfoo >'build libfoo/1.1.0'; + + $* libfoo libfoo/1.1.0 2>>EOE != 0; + error: duplicate package libfoo + info: first mentioned as libfoo + info: second mentioned as libfoo/1.1.0 + EOE + + $* libfoo/1.1.0 libfoo 2>>EOE != 0; + error: duplicate package libfoo + info: first mentioned as libfoo/1.1.0 + info: second mentioned as libfoo + EOE + + $* libfoo/1.1.0 libfoo/1.1.0 >'build libfoo/1.1.0'; + + $* libfoo/1.0.0 2>>/EOE != 0; + error: unknown package libfoo + info: configuration cfg/ has no repositories + info: use 'bpkg rep-add' to add a repository + EOE + + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + + : t1 + : + { + +$clone_root_cfg && $rep_add $rep/t1 && $rep_fetch + + : downgrade + : + { + $clone_cfg && $pkg_unpack -e $src/libfoo-1.1.0; + + $* libfoo >'build libfoo/1.1.0'; + $* libfoo/1.0.0 >'downgrade libfoo/1.0.0'; + + $* libfoo/0.0.1 2>>EOE != 0; + error: libfoo/0.0.1 is not available in source + info: specify sys:libfoo/0.0.1 if it is available from the system + EOE + + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + + : upgrade + : + { + $clone_cfg; + $pkg_fetch -e $src/libfoo-0.0.1.tar.gz && $pkg_unpack libfoo; + + $* libfoo >'upgrade libfoo/1.0.0'; + $* libfoo/0.0.1 >'build libfoo/0.0.1'; + + $* libfoo/1.1.0 2>>EOE != 0; + error: libfoo/1.1.0 is not available in source + info: specify sys:libfoo/1.1.0 if it is available from the system + EOE + + $pkg_purge libfoo 2>'purged libfoo/0.0.1' + } + + : upgrade-failure + : + { + $clone_cfg; + + $* libfoo >'build libfoo/1.0.0'; + $* libfoo/1.0.0 >'build libfoo/1.0.0'; + + $* libfoo/1.1.0 2>>EOE != 0 + error: libfoo/1.1.0 is not available in source + info: specify sys:libfoo/1.1.0 if it is available from the system + EOE + } + } +} + +: libbar-libfoo +: +: Test building libbar that depends on libfoo. +: +{ + test.arguments += --print-only + + : unknown-prerequisite + : + $clone_root_cfg; + $* $src/libbar-1.0.0.tar.gz 2>>EOE != 0 + error: unknown prerequisite libfoo of package libbar + info: while satisfying libbar/1.0.0 + EOE + + : t2 + : + { + +$clone_root_cfg && $rep_add $rep/t2 && $rep_fetch + + : build-prerequisite + : + { + $clone_cfg; + + $* libbar >>EOO; + build libfoo/1.0.0 (required by libbar) + build libbar/1.0.0 + EOO + + $* libbar libfoo >>EOO; + build libfoo/1.0.0 + build libbar/1.0.0 + EOO + + $* libbar libfoo/1.0.0 >>EOO; + build libfoo/1.0.0 + build libbar/1.0.0 + EOO + + $* libbar libfoo libbar/1.0.0 2>>EOE != 0; + error: duplicate package libbar + info: first mentioned as libbar + info: second mentioned as libbar/1.0.0 + EOE + + $* libbar libfoo/1.1.0 2>>EOE != 0 + error: libfoo/1.1.0 is not available in source + info: specify sys:libfoo/1.1.0 if it is available from the system + EOE + } + + : upgrade-prerequisite + : + { + $clone_cfg; + $pkg_fetch -e $src/libfoo-0.0.1.tar.gz && $pkg_unpack libfoo; + + $* libbar >>EOO; + build libfoo/0.0.1 (required by libbar) + build libbar/1.0.0 + EOO + + $* libbar libfoo >>EOO; + upgrade libfoo/1.0.0 + build libbar/1.0.0 + EOO + + $* libbar libfoo/0.0.1 >>EOO; + build libfoo/0.0.1 + build libbar/1.0.0 + EOO + + $pkg_purge libfoo 2>'purged libfoo/0.0.1' + } + + : downgrade-prerequisite + : + { + $clone_cfg && $pkg_unpack -e $src/libfoo-1.1.0; + + $* libbar >>EOO; + build libfoo/1.1.0 (required by libbar) + build libbar/1.0.0 + EOO + + $* libbar libfoo >>EOO; + build libfoo/1.1.0 + build libbar/1.0.0 + EOO + + $* libbar libfoo/1.0.0 >>EOO; + downgrade libfoo/1.0.0 + build libbar/1.0.0 + EOO + + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + } +} + +: libbaz-libbar +: +: Test building libbaz that depends on libbar; libbar is in prerequisite +: repository. +: +{ + test.arguments += --print-only + + : t3 + : + { + +$clone_root_cfg && $rep_add $rep/t3 && $rep_fetch + + : prerequisites-build-failure + : + : Fail to build packages that are only in prerequisite repository. + : + { + $clone_cfg; + + $* libfoo 2>>EOE != 0; + error: unknown package libfoo + EOE + + $* libbar 2>>EOE != 0; + error: unknown package libbar + EOE + + $* libbaz libbar 2>>EOE != 0 + error: unknown package libbar + EOE + } + + : prerequisites-build + : + $clone_cfg; + $* libbaz >>EOO + build libfoo/1.0.0 (required by libbar) + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + EOO + + : different-build-order + : + { + +$clone_cfg && $rep_add $rep/t2 && $rep_fetch + + : fox-foo + : + $clone_cfg; + $* libfox libfoo >>EOO + build libfox/1.0.0 + build libfoo/1.0.0 + EOO + + : foo-fox + : + $clone_cfg; + $* libfoo libfox >>EOO + build libfoo/1.0.0 + build libfox/1.0.0 + EOO + + : baz-foo + : + $clone_cfg; + $* libbaz libfoo >>EOO + build libfoo/1.0.0 + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + EOO + + : foo-baz + : + $clone_cfg; + $* libfoo libbaz >>EOO + build libfoo/1.0.0 + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + EOO + + : baz-fox + : + $clone_cfg; + $* libbaz libfox >>EOO + build libfoo/1.0.0 (required by libbar) + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + build libfox/1.0.0 + EOO + + : fox-baz + : + $clone_cfg; + $* libfox libbaz >>EOO + build libfox/1.0.0 + build libfoo/1.0.0 (required by libbar) + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + EOO + + : fox-foo-baz + : + $clone_cfg; + $* libfox libfoo libbaz >>EOO + build libfox/1.0.0 + build libfoo/1.0.0 + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + EOO + + : fox-baz-foo + : + $clone_cfg; + $* libfox libbaz libfoo >>EOO + build libfox/1.0.0 + build libfoo/1.0.0 + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + EOO + + : foo-fox-baz + : + $clone_cfg; + $* libfoo libfox libbaz >>EOO + build libfoo/1.0.0 + build libfox/1.0.0 + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + EOO + + : foo-baz-fox + : + $clone_cfg; + $* libfoo libbaz libfox >>EOO + build libfoo/1.0.0 + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + build libfox/1.0.0 + EOO + + : baz-fox-foo + : + : This one is contradictory: baz before fox but fox before foo. + : + $clone_cfg; + $* libbaz libfox libfoo >>EOO + build libfox/1.0.0 + build libfoo/1.0.0 + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + EOO + + : baz-foo-fox + : + $clone_cfg; + $* libbaz libfoo libfox >>EOO + build libfoo/1.0.0 + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + build libfox/1.0.0 + EOO + + : baz-foo-bar + : + $clone_cfg; + $* libbaz libfoo libbar >>EOO + build libfoo/1.0.0 + build libbar/1.0.0 + build libbaz/1.0.0 + EOO + + : baz-bar-foo + : + $clone_cfg; + $* libbaz libbar libfoo >>EOO + build libfoo/1.0.0 + build libbar/1.0.0 + build libbaz/1.0.0 + EOO + } + } +} + +: libbaz-libfoo-libbar +: +: Test building libbaz that depends on libfoo and libbar; libbar depends on +: libfoo >= 1.1.0. +: +{ + test.arguments += --print-only + + : t4c + : + { + +$clone_root_cfg && $rep_add $rep/t4c && $rep_fetch + + : baz + : + $clone_cfg; + $* libbaz >>EOO + build libfoo/1.1.0 (required by libbar libbaz) + build libbar/1.1.0 (required by libbaz) + build libbaz/1.1.0 + EOO + + : foo-baz + : + $clone_cfg; + $* libfoo libbaz >>EOO + build libfoo/1.1.0 + build libbar/1.1.0 (required by libbaz) + build libbaz/1.1.0 + EOO + + : unable-satisfy + : + $clone_cfg; + $* libfoo/1.0.0 libbaz 2>>EOE != 0 + error: unable to satisfy constraints on package libfoo + info: libbar depends on (libfoo == 1.1.0) + info: command line depends on (libfoo == 1.0.0) + info: available libfoo/1.1.0 + info: available libfoo/1.0.0 + info: explicitly specify libfoo version to manually satisfy both constraints + info: while satisfying libbar/1.1.0 + info: while satisfying libbaz/1.1.0 + EOE + + : not-available + : + $clone_cfg; + $* libfoo/1.1.0 libbaz 2>>EOE != 0 + error: libfoo/1.1.0 is not available in source + info: specify sys:libfoo/1.1.0 if it is available from the system + EOE + + : upgrade-warning + : + { + $clone_cfg; + $pkg_fetch -e $src/libfoo-0.0.1.tar.gz && $pkg_unpack libfoo; + + $* libbaz >>EOO 2>>EOE; + upgrade libfoo/1.1.0 (required by libbar libbaz) + build libbar/1.1.0 (required by libbaz) + build libbaz/1.1.0 + EOO + warning: package libbar dependency on (libfoo == 1.1.0) is forcing upgrade of libfoo/0.0.1 to 1.1.0 + EOE + + $pkg_purge libfoo 2>'purged libfoo/0.0.1' + } + + : downgrade-error + : + { + $clone_cfg; + $pkg_fetch -e $src/libfoo-1.2.0.tar.gz && $pkg_unpack libfoo; + + $* libbaz 2>>EOE != 0; + error: package libbar dependency on (libfoo == 1.1.0) is forcing downgrade of libfoo/1.2.0 to 1.1.0 + info: explicitly request version downgrade to continue + info: while satisfying libbar/1.1.0 + info: while satisfying libbaz/1.1.0 + EOE + + $rep_add $rep/t4a && $rep_fetch; + + $* libfoo/1.1.0 libbaz >>EOO; + downgrade libfoo/1.1.0 + build libbar/1.1.0 (required by libbaz) + build libbaz/1.1.0 + EOO + + $pkg_purge libfoo 2>'purged libfoo/1.2.0' + } + + : unable-downgrade + : + : Test that dependent prevents up/downgrade that would break dependency + : constraints. + : + { + $clone_cfg; + $pkg_fetch libfoo/1.1.0 && $pkg_unpack libfoo && $pkg_configure libfoo; + $pkg_fetch libbar/1.1.0 && $pkg_unpack libbar && $pkg_configure libbar; + + $* libfoo-1.2.0.tar.gz 2>>EOE != 0; + error: unknown package libfoo-1.2.0.tar.gz + EOE + + $* libfoo/1.0.0 2>>EOE != 0; + error: unable to downgrade package libfoo/1.1.0 to 1.0.0 + info: because package libbar depends on (libfoo == 1.1.0) + info: explicitly request up/downgrade of package libbar + info: or explicitly specify package libfoo version to manually satisfy these constraints + EOE + + $* libfoo/1.1.0 >'build libfoo/1.1.0'; + + $pkg_disfigure libbar 2>'disfigured libbar/1.1.0'; + $pkg_purge libbar 2>'purged libbar/1.1.0'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + } + + : dependent-reconfiguration + : + { + +$clone_root_cfg + + +$pkg_fetch -e $src/libfoo-1.0.0.tar.gz && $pkg_unpack libfoo + +$pkg_configure libfoo + + +$pkg_fetch -e $src/libbar-1.0.0.tar.gz && $pkg_unpack libbar + +$pkg_configure libbar + + +$pkg_fetch -e $src/libbaz-1.1.0.tar.gz && $pkg_unpack libbaz + +$pkg_configure libbaz + + +$rep_add $rep/t4a && $rep_add $rep/t4b && $rep_fetch + + : bar + : + $clone_cfg; + $* libbar >>EOO 2>>EOE + upgrade libfoo/1.1.0 (required by libbar libbaz) + upgrade libbar/1.1.0 + reconfigure libbaz (dependent of libbar) + EOO + warning: package libbar dependency on (libfoo == 1.1.0) is forcing upgrade of libfoo/1.0.0 to 1.1.0 + EOE + + : foo + : + $clone_cfg; + $* libfoo >>EOO + upgrade libfoo/1.1.0 + reconfigure libbar (dependent of libfoo) + reconfigure libbaz (dependent of libbar) + EOO + + : foo-bar + : + $clone_cfg; + $* libfoo libbar/1.0.0 >>EOO + upgrade libfoo/1.1.0 + reconfigure/build libbar/1.0.0 + reconfigure libbaz (dependent of libbar) + EOO + + : bar-foo + : + $clone_cfg; + $* libbar/1.0.0 libfoo >>EOO + upgrade libfoo/1.1.0 + reconfigure/build libbar/1.0.0 + reconfigure libbaz (dependent of libbar) + EOO + + : baz-foo + : + $clone_cfg; + $* libbaz libfoo >>EOO + upgrade libfoo/1.1.0 + reconfigure libbar (dependent of libbaz libfoo) + reconfigure/build libbaz/1.1.0 + EOO + + : baz-foo-1.0.0 + : + $clone_cfg; + $* libbaz libfoo/1.0.0 >>EOO + build libfoo/1.0.0 + build libbaz/1.1.0 + EOO + + -$pkg_disfigure libbaz 2>'disfigured libbaz/1.1.0' + -$pkg_purge libbaz 2>'purged libbaz/1.1.0' + + -$pkg_disfigure libbar 2>'disfigured libbar/1.0.0' + -$pkg_purge libbar 2>'purged libbar/1.0.0' + + -$pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0' + -$pkg_purge libfoo 2>'purged libfoo/1.0.0' + } +} + +# Note that when we fetch a package from remote repository the bpkg stderr +# contains fetch program progress output, that comes prior the informational +# message. +# + +: actual-build +: +{ + test.arguments += --yes + + : wth-prerequisites + : + { + $clone_root_cfg && $rep_add $rep/t4c && $rep_fetch; + + $* libbaz 2>>~%EOE%; + %.* + %.*fetched libfoo/1.1.0% + unpacked libfoo/1.1.0 + %.* + %.*fetched libbar/1.1.0% + unpacked libbar/1.1.0 + %.* + %.*fetched libbaz/1.1.0% + unpacked libbaz/1.1.0 + configured libfoo/1.1.0 + configured libbar/1.1.0 + configured libbaz/1.1.0 + %info: dir.+libbaz-1.1.0.+ is up to date% + updated libbaz/1.1.0 + EOE + + $pkg_status libfoo/1.1.0 >'configured; available'; + $pkg_status libbar/1.1.0 >'configured'; + $pkg_status libbaz/1.1.0 >'configured hold_package; available'; + + $pkg_disfigure libbaz 2>'disfigured libbaz/1.1.0'; + $pkg_purge libbaz 2>'purged libbaz/1.1.0'; + + $pkg_disfigure libbar 2>'disfigured libbar/1.1.0'; + $pkg_purge libbar 2>'purged libbar/1.1.0'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + + : hold-fs-fetched + : + { + : direct + : + { + $clone_root_cfg; + + $* $src/libfoo-1.0.0.tar.gz 2>>~%EOE%; + fetched libfoo/1.0.0 + unpacked libfoo/1.0.0 + configured libfoo/1.0.0 + %info: dir.+libfoo-1.0.0.+ is up to date% + updated libfoo/1.0.0 + EOE + + $pkg_status libfoo >'configured 1.0.0 hold_package hold_version'; + + $* $src/libfoo-1.1.0/ 2>>~%EOE%; + disfigured libfoo/1.0.0 + unpacked libfoo/1.1.0 + configured libfoo/1.1.0 + %info: dir.+libfoo-1.1.0.+ is up to date% + updated libfoo/1.1.0 + EOE + + $pkg_status libfoo >'configured 1.1.0 hold_package hold_version'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + + : pre-fetch + : + { + $clone_root_cfg; + $pkg_fetch -e $src/libfoo-1.0.0.tar.gz && $pkg_unpack libfoo; + $pkg_configure libfoo; + + $pkg_status libfoo >'configured 1.0.0'; + + $* libfoo 2>>~%EOE%; + %info: dir.+libfoo-1.0.0.+ is up to date% + updated libfoo/1.0.0 + EOE + + $pkg_status libfoo >'configured 1.0.0 hold_package'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; + $pkg_purge libfoo 2>'purged libfoo/1.0.0' + } + } + + : hold-repo-fetched + : + { + +$clone_root_cfg && $rep_add $rep/t4c && $rep_fetch + + : package-version + : + { + $clone_cfg; + + $* libfoo 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + configured libfoo/1.0.0 + %info: dir.+libfoo-1.0.0.+ is up to date% + updated libfoo/1.0.0 + EOE + + $pkg_status libfoo >'configured 1.0.0 hold_package; available sys:?'; + + $* libfoo/1.0.0 2>>~%EOE%; + %info: dir.+libfoo-1.0.0.+ is up to date% + updated libfoo/1.0.0 + EOE + + $pkg_status libfoo >'configured 1.0.0 hold_package hold_version; available sys:?'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; + $pkg_purge libfoo 2>'purged libfoo/1.0.0' + } + + : version + : + { + $clone_cfg; + + $* libfoo/1.0.0 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + configured libfoo/1.0.0 + %info: dir.+libfoo-1.0.0.+ is up to date% + updated libfoo/1.0.0 + EOE + + $pkg_status libfoo >'configured 1.0.0 hold_package hold_version; available sys:?'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; + $pkg_purge libfoo 2>'purged libfoo/1.0.0' + } + + : not-held + : + { + $clone_cfg; + + $* libbaz 2>>~%EOE%; + %.* + %.*fetched libfoo/1.1.0% + unpacked libfoo/1.1.0 + %.* + %.*fetched libbar/1.1.0% + unpacked libbar/1.1.0 + %.* + %.*fetched libbaz/1.1.0% + unpacked libbaz/1.1.0 + configured libfoo/1.1.0 + configured libbar/1.1.0 + configured libbaz/1.1.0 + %info: dir.+libbaz-1.1.0.+ is up to date% + updated libbaz/1.1.0 + EOE + + $pkg_status libfoo >'configured 1.1.0; available sys:?'; + + $pkg_disfigure libbaz 2>'disfigured libbaz/1.1.0'; + $pkg_purge libbaz 2>'purged libbaz/1.1.0'; + + $pkg_disfigure libbar 2>'disfigured libbar/1.1.0'; + $pkg_purge libbar 2>'purged libbar/1.1.0'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + + : forcing-upgrade-unheld + : + { + $clone_cfg; + + $* libfoo 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + configured libfoo/1.0.0 + %info: dir.+libfoo-1.0.0.+ is up to date% + updated libfoo/1.0.0 + EOE + + $pkg_status libfoo >'configured 1.0.0 hold_package; available sys:?'; + + $* libbaz 2>>~%EOE%; + warning: package libbar dependency on (libfoo == 1.1.0) is forcing upgrade of libfoo/1.0.0 to 1.1.0 + disfigured libfoo/1.0.0 + %.* + %.*fetched libfoo/1.1.0% + unpacked libfoo/1.1.0 + %.* + %.*fetched libbar/1.1.0% + unpacked libbar/1.1.0 + %.* + %.*fetched libbaz/1.1.0% + unpacked libbaz/1.1.0 + configured libfoo/1.1.0 + configured libbar/1.1.0 + configured libbaz/1.1.0 + %info: dir.+libbaz-1.1.0.+ is up to date% + updated libbaz/1.1.0 + EOE + + $pkg_status libfoo >'configured 1.1.0 hold_package; available sys:?'; + + $pkg_disfigure libbaz 2>'disfigured libbaz/1.1.0'; + $pkg_purge libbaz 2>'purged libbaz/1.1.0'; + + $pkg_disfigure libbar 2>'disfigured libbar/1.1.0'; + $pkg_purge libbar 2>'purged libbar/1.1.0'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + + : forcing-upgrade-held + : + { + $clone_cfg; + + $* libfoo/1.0.0 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + configured libfoo/1.0.0 + %info: dir.+libfoo-1.0.0.+ is up to date% + updated libfoo/1.0.0 + EOE + + $pkg_status libfoo >'configured 1.0.0 hold_package hold_version; available sys:?'; + + $* libbaz 2>>EOE != 0; + error: package libbar dependency on (libfoo == 1.1.0) is forcing upgrade of libfoo/1.0.0 to 1.1.0 + info: package version libfoo/1.0.0 is held + info: explicitly request version upgrade to continue + info: while satisfying libbar/1.1.0 + info: while satisfying libbaz/1.1.0 + EOE + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; + $pkg_purge libfoo 2>'purged libfoo/1.0.0' + } + } + + : drop-prerequisites + : + { + $clone_root_cfg && $rep_add $rep/t2 && $rep_fetch; + + $* libbar 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + %.* + %.*fetched libbar/1.0.0% + unpacked libbar/1.0.0 + configured libfoo/1.0.0 + configured libbar/1.0.0 + %info: dir.+libbar-1.0.0.+ is up to date% + updated libbar/1.0.0 + EOE + + $pkg_status libfoo >'configured 1.0.0; available sys:?'; + $pkg_status libbar >'configured 1.0.0 hold_package; available sys:?'; + + $rep_add $rep/t5 && $rep_fetch; + + $* libbar 2>>~%EOE%; + disfigured libbar/1.0.0 + %.* + %.*fetched libbar/1.2.0% + unpacked libbar/1.2.0 + configured libbar/1.2.0 + disfigured libfoo + purged libfoo + %info: dir.+libbar-1.2.0.+ is up to date% + updated libbar/1.2.0 + EOE + + $pkg_status libfoo >'available 1.0.0 sys:?'; + $pkg_status libbar >'configured 1.2.0 hold_package; available sys:?'; + + $* libbar/1.0.0 libfoo 2>>~%EOE%; + disfigured libbar/1.2.0 + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + %.* + %.*fetched libbar/1.0.0% + unpacked libbar/1.0.0 + configured libfoo/1.0.0 + configured libbar/1.0.0 + %info: dir.+libfoo-1.0.0.+ is up to date% + %info: dir.+libbar-1.0.0.+ is up to date% + updated libfoo/1.0.0 + updated libbar/1.0.0 + EOE + + $pkg_status libfoo >'configured 1.0.0 hold_package; available sys:?'; + $pkg_status libbar >'configured 1.0.0 hold_package hold_version; available 1.2.0 sys:?'; + + $* libbar 2>>~%EOE%; + disfigured libbar/1.0.0 + %.* + %.*fetched libbar/1.2.0% + unpacked libbar/1.2.0 + configured libbar/1.2.0 + %info: dir.+libbar-1.2.0.+ is up to date% + updated libbar/1.2.0 + EOE + + $pkg_status libfoo >'configured 1.0.0 hold_package; available sys:?'; + $pkg_status libbar >'configured 1.2.0 hold_package; available sys:?'; + + $pkg_disfigure libbar 2>'disfigured libbar/1.2.0'; + $pkg_purge libbar 2>'purged libbar/1.2.0'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; + $pkg_purge libfoo 2>'purged libfoo/1.0.0' + } +} + +: prerequisite +: +{ + +$clone_cfg + +$rep_add $rep/t2 && $rep_add $rep/t5 && $rep_fetch + + : drop + : + : Test --drop-prerequisite option. + : + { + $clone_cfg; + + $* --yes libbar/1.0.0 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + %.* + %.*fetched libbar/1.0.0% + unpacked libbar/1.0.0 + configured libfoo/1.0.0 + configured libbar/1.0.0 + %info: dir.+ is up to date% + updated libbar/1.0.0 + EOE + + $* --drop-prerequisite libbar/1.2.0 <'y' 2>>~%EOE%; + upgrade libbar/1.2.0 + continue? [Y/n] disfigured libbar/1.0.0 + %.* + %.*fetched libbar/1.2.0% + unpacked libbar/1.2.0 + configured libbar/1.2.0 + disfigured libfoo + purged libfoo + %info: .+ is up to date% + updated libbar/1.2.0 + EOE + + $pkg_status libfoo >'available 1.0.0 sys:?'; + + $pkg_disfigure libbar 2>'disfigured libbar/1.2.0'; + $pkg_purge libbar 2>'purged libbar/1.2.0' + } + + : keep + : + : Test --keep-prerequisite option. + : + { + $clone_cfg; + + $* --yes libbar/1.0.0 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + %.* + %.*fetched libbar/1.0.0% + unpacked libbar/1.0.0 + configured libfoo/1.0.0 + configured libbar/1.0.0 + %info: dir.+ is up to date% + updated libbar/1.0.0 + EOE + + $* --keep-prerequisite libbar/1.2.0 <'y' 2>>~%EOE%; + upgrade libbar/1.2.0 + continue? [Y/n] disfigured libbar/1.0.0 + %.* + %.*fetched libbar/1.2.0% + unpacked libbar/1.2.0 + configured libbar/1.2.0 + %info: .+ is up to date% + updated libbar/1.2.0 + EOE + + $pkg_status libfoo >'configured 1.0.0; available sys:?'; + + $pkg_disfigure libbar 2>'disfigured libbar/1.2.0'; + $pkg_purge libbar 2>'purged libbar/1.2.0'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; + $pkg_purge libfoo 2>'purged libfoo/1.0.0' + } +} + +: dependent +: +{ + +$clone_cfg + +$rep_add $rep/t2 && $rep_fetch + + : update + : + : Test --update-dependent option. + : + { + $clone_cfg; + + $* --yes libbar 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + %.* + %.*fetched libbar/1.0.0% + unpacked libbar/1.0.0 + configured libfoo/1.0.0 + configured libbar/1.0.0 + %info: .+ is up to date% + updated libbar/1.0.0 + EOE + + $rep_add $rep/t4a && $rep_fetch; + + $* --update-dependent libfoo/1.1.0 <'y' 2>>~%EOE%; + upgrade libfoo/1.1.0 + reconfigure libbar (dependent of libfoo) + continue? [Y/n] disfigured libbar/1.0.0 + disfigured libfoo/1.0.0 + %.* + %.*fetched libfoo/1.1.0% + unpacked libfoo/1.1.0 + configured libfoo/1.1.0 + configured libbar/1.0.0 + %info: .+ is up to date% + %info: .+ is up to date% + updated libfoo/1.1.0 + updated libbar/1.0.0 + EOE + + $pkg_disfigure libbar 2>'disfigured libbar/1.0.0'; + $pkg_purge libbar 2>'purged libbar/1.0.0'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + + : leave + : + : Test --leave-dependent option. + : + { + $clone_cfg; + + $* --yes libbar 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + %.* + %.*fetched libbar/1.0.0% + unpacked libbar/1.0.0 + configured libfoo/1.0.0 + configured libbar/1.0.0 + %info: .+ is up to date% + updated libbar/1.0.0 + EOE + + $rep_add $rep/t4a && $rep_fetch; + + $* --leave-dependent libfoo/1.1.0 <'y' 2>>~%EOE%; + upgrade libfoo/1.1.0 + reconfigure libbar (dependent of libfoo) + continue? [Y/n] disfigured libbar/1.0.0 + disfigured libfoo/1.0.0 + %.* + %.*fetched libfoo/1.1.0% + unpacked libfoo/1.1.0 + configured libfoo/1.1.0 + configured libbar/1.0.0 + %info: .+ is up to date% + updated libfoo/1.1.0 + EOE + + $pkg_disfigure libbar 2>'disfigured libbar/1.0.0'; + $pkg_purge libbar 2>'purged libbar/1.0.0'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } +} + +: configure-only +: +: Test --configure-only option. +: +{ + $clone_cfg; + $rep_add $rep/t2 && $rep_fetch; + + $* --configure-only --yes libbar 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + %.* + %.*fetched libbar/1.0.0% + unpacked libbar/1.0.0 + configured libfoo/1.0.0 + configured libbar/1.0.0 + EOE + + $pkg_disfigure libbar 2>'disfigured libbar/1.0.0'; + $pkg_purge libbar 2>'purged libbar/1.0.0'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; + $pkg_purge libfoo 2>'purged libfoo/1.0.0' +} |