diff options
Diffstat (limited to 'tests/pkg-drop.testscript')
-rw-r--r-- | tests/pkg-drop.testscript | 419 |
1 files changed, 403 insertions, 16 deletions
diff --git a/tests/pkg-drop.testscript b/tests/pkg-drop.testscript index db9cf7c..a3c48ab 100644 --- a/tests/pkg-drop.testscript +++ b/tests/pkg-drop.testscript @@ -3,23 +3,14 @@ .include common.testscript config.testscript remote.testscript -# Source repository: +# Source repository (see pkg-build for details): # # pkg-drop # |-- t4a -# | |-- libfoo-1.1.0.tar.gz -# | `-- repositories.manifest -# |-- t4b -> t4a (prerequisite repository) -# | |-- libbar-1.1.0.tar.gz -> libfoo == 1.1.0 -# | `-- repositories.manifest -# |-- t4c -> t4b (prerequisite repository) -# | |-- libbaz-1.1.0.tar.gz -> libfoo, libbar -# | |-- libfoo-1.0.0.tar.gz -# | `-- repositories.manifest -# `-- t4d -> t4c (complement) -# |-- libbiz-1.0.0.tar.gz -> libfox, libfoo, libbaz -# |-- libfox-1.0.0.tar.gz -# `-- repositories.manifest +# |-- t4b +# |-- t4c +# |-- t4d +# `-- t7a # Prepare repositories used by tests if running in the local mode. # @@ -30,8 +21,11 @@ cp -r $src/t4b $out/t4b && $rep_create $out/t4b &$out/t4b/packages.manifest cp -r $src/t4c $out/t4c && $rep_create $out/t4c &$out/t4c/packages.manifest cp -r $src/t4d $out/t4d && $rep_create $out/t4d &$out/t4d/packages.manifest + cp -r $src/t7a $out/t7a && $rep_create $out/t7a &$out/t7a/packages.manifest end +cfg_create += 2>! +cfg_link += 2>! pkg_build += -d cfg --yes 2>! pkg_status += -d cfg rep_add += -d cfg 2>! @@ -45,6 +39,22 @@ $* 2>>EOE != 0 info: run 'bpkg help pkg-drop' for more information EOE +: all-all-pattern +: +$clone_cfg; +$* --all --all-pattern 'lib*' 2>>EOE != 0 + error: both --all|-a and --all-pattern specified + info: run 'bpkg help pkg-drop' for more information + EOE + +: all-pattern-name +: +$clone_cfg; +$* --all-pattern 'lib*' libbaz 2>>EOE != 0 + error: both --all-pattern and package argument specified + info: run 'bpkg help pkg-drop' for more information + EOE + : unknown-package : $clone_cfg; @@ -376,12 +386,13 @@ $* libfoo/1.0.0 2>>~%EOE% != 0 : keep-drop-options : -: Test --drop-dependent, --keep-dependent, --keep-unused, option. +: Test --drop-dependent, --keep-dependent, --dependent-exit, --keep-unused +: options. : { +$clone_cfg && $rep_add $rep/t4b && $rep_fetch - : keep-drop-dependent + : keep-exit-drop-dependent : { $clone_cfg && $pkg_build libbar; @@ -391,6 +402,8 @@ $* libfoo/1.0.0 2>>~%EOE% != 0 libbar (requires libfoo) EOE + $* --dependent-exit 100 libfoo == 100; + $* --drop-dependent libfoo 2>>EOE disfigured libbar disfigured libfoo @@ -444,3 +457,377 @@ $* libfoo/1.0.0 2>>~%EOE% != 0 $* libfoo 2>'purged libfoo' } + +: linked-configs +: +{ + # Get rid of -d option. + # + pkg_build = [cmdline] $0 pkg-build --yes --sys-no-query 2>! + + : 3-configs + : + { + +$clone_root_cfg && $rep_add $rep/t4c && $rep_fetch + + +$cfg_create -d cfg-bar &cfg-bar/*** + +$cfg_create -d cfg-foo &cfg-foo/*** + + +$cfg_link -d cfg cfg-bar + +$cfg_link -d cfg-bar cfg-foo + + : baz + : + { + $clone_cfg; + cp -pr ../cfg-bar ./; + cp -pr ../cfg-foo ./; + + $pkg_build -d cfg-bar libbar@"$rep/t4b" ?libfoo +{ --config-id 2 } \ + --trust-yes; + + $pkg_build -d cfg libbaz; + + $pkg_build -d cfg '?libbar' +{ --config-id 1 }; + + $* libbaz <<EOI 2>>/~%EOE% + y + y + EOI + following dependencies were automatically built but will no longer be used: + libbar [cfg-bar/] + libfoo [cfg-foo/] + %drop unused packages\? \[Y.n\] drop libbaz% + drop libbar [cfg-bar/] + drop libfoo [cfg-foo/] + %continue\? \[Y.n\] disfigured libbaz% + disfigured libbar [cfg-bar/] + disfigured libfoo [cfg-foo/] + purged libbaz + purged libbar [cfg-bar/] + purged libfoo [cfg-foo/] + EOE + } + + : foo + : + { + $clone_cfg; + cp -pr ../cfg-bar ./; + cp -pr ../cfg-foo ./; + + $pkg_build -d cfg-bar libbar@"$rep/t4b" ?libfoo +{ --config-id 2 } \ + --trust-yes; + + $pkg_build -d cfg libbaz; + + # Make sure that dependents of a package being dropped can be found in + # implicitly linked configurations recursively. Note that configuring + # libbar as system, we make libbaz an only dependent of libfoo. + # + $pkg_build -d cfg '?sys:libbar' +{ --config-id 1 }; + + $pkg_status -r libbaz >>/EOO; + !libbaz configured 1.1.0 + libbar [cfg-bar/] configured,system !* available [1.1.0] + libfoo [cfg-foo/] configured 1.1.0 + EOO + + $pkg_status -d cfg-bar -r libbar >>EOO; + libbar configured,system !* available 1.1.0 + EOO + + $pkg_status -d cfg-foo libfoo >'libfoo configured 1.1.0'; + + $* -d cfg-foo libfoo <<EOI 2>>/~%EOE%; + y + y + y + EOI + following dependent packages will have to be dropped as well: + libbaz [cfg/] (requires libfoo) + %drop dependent packages\? \[y.N\] following dependencies were automatically built but will no longer be used:% + sys:libbar [cfg-bar/] + %drop unused packages\? \[Y.n\] drop libbaz \[cfg/\]% + drop libfoo + drop libbar [cfg-bar/] + %continue\? \[Y.n\] disfigured libbaz \[cfg/\]% + disfigured libfoo + purged libbar [cfg-bar/] + purged libbaz [cfg/] + purged libfoo + EOE + + $pkg_status libbaz >'libbaz available 1.1.0'; + $pkg_status -d cfg-bar libbar >'libbar available 1.1.0'; + $pkg_status -d cfg-foo libfoo >'libfoo unknown' + } + + : bar + : + { + $clone_cfg; + cp -pr ../cfg-bar ./; + cp -pr ../cfg-foo ./; + + # Test that if we turn implicit links into explicit, then all dependents + # are still discovered. + # + $cfg_link -d cfg-bar cfg; + $cfg_link -d cfg-foo cfg-bar; + + $pkg_build -d cfg-bar libbar@"$rep/t4b" ?libfoo +{ --config-id 2 } \ + --trust-yes; + + $pkg_build -d cfg libbaz; + + $pkg_status -r libbaz >>/EOO; + !libbaz configured 1.1.0 + !libbar [cfg-bar/] configured !1.1.0 + libfoo [cfg-foo/] configured 1.1.0 + libfoo [cfg-foo/] configured 1.1.0 + EOO + + $pkg_status -d cfg-bar -r libbar >>/EOO; + !libbar configured !1.1.0 + libfoo [cfg-foo/] configured 1.1.0 + EOO + + $pkg_status -d cfg-foo libfoo >'libfoo configured 1.1.0'; + + $* -d cfg-bar libbar <<EOI 2>>/~%EOE%; + y + y + y + EOI + following dependent packages will have to be dropped as well: + libbaz [cfg/] (requires libbar) + %drop dependent packages\? \[y.N\] following dependencies were automatically built but will no longer be used:% + libfoo [cfg-foo/] + %drop unused packages\? \[Y.n\] drop libbaz \[cfg/\]% + drop libbar + drop libfoo [cfg-foo/] + %continue\? \[Y.n\] disfigured libbaz \[cfg/\]% + disfigured libbar + disfigured libfoo [cfg-foo/] + purged libbaz [cfg/] + purged libbar + purged libfoo [cfg-foo/] + EOE + + $pkg_status libbaz >'libbaz available 1.1.0'; + $pkg_status -d cfg-bar libbar >'libbar available 1.1.0'; + $pkg_status -d cfg-foo libfoo >'libfoo unknown' + } + } +} + +: buildtime-dep +: +{ + +$clone_cfg && $rep_add $rep/t7a && $rep_fetch + +$cfg_create -d cfg2 --type host &cfg2/*** + +$cfg_link -d cfg cfg2 + + : drop-dependent + : + { + $clone_cfg; + cp -pr ../cfg2 ./; + + $pkg_build libbar --yes &cfg2/.bpkg/build2/***; + + $* libbar <<EOI 2>>/~%EOE%; + y + y + EOI + following dependencies were automatically built but will no longer be used: + foo [cfg2/] + libbaz [cfg2/] + libbuild2-bar [cfg2/.bpkg/build2/] + libbaz + %drop unused packages\? \[Y.n\] drop libbar% + drop foo [cfg2/] + drop libbaz [cfg2/] + drop libbuild2-bar [cfg2/.bpkg/build2/] + drop libbaz + %continue\? \[Y.n\] disfigured libbar% + disfigured foo [cfg2/] + disfigured libbaz [cfg2/] + disfigured libbuild2-bar [cfg2/.bpkg/build2/] + disfigured libbaz + purged libbar + purged foo [cfg2/] + purged libbaz [cfg2/] + purged libbuild2-bar [cfg2/.bpkg/build2/] + purged libbaz + EOE + + $pkg_status -r libbar >'libbar available 1.0.0' + } + + : drop-dependency + : + { + $clone_cfg; + cp -pr ../cfg2 ./; + + $pkg_build libbar --yes &cfg2/.bpkg/build2/***; + + $* -d cfg2 libbaz <<EOI 2>>/~%EOE%; + y + y + y + EOI + following dependent packages will have to be dropped as well: + foo (requires libbaz) + libbar [cfg/] (requires foo) + %drop dependent packages\? \[y.N\] following dependencies were automatically built but will no longer be used:% + libbuild2-bar [cfg2/.bpkg/build2/] + libbaz [cfg/] + %drop unused packages\? \[Y.n\] drop libbar \[cfg/\]% + drop foo + drop libbaz + drop libbuild2-bar [cfg2/.bpkg/build2/] + drop libbaz [cfg/] + %continue\? \[Y.n\] disfigured libbar \[cfg/\]% + disfigured foo + disfigured libbaz + disfigured libbuild2-bar [cfg2/.bpkg/build2/] + disfigured libbaz [cfg/] + purged libbar [cfg/] + purged foo + purged libbaz + purged libbuild2-bar [cfg2/.bpkg/build2/] + purged libbaz [cfg/] + EOE + + $pkg_status -r libbar >'libbar available 1.0.0' + } + + : drop-private-dependency + : + { + $clone_root_cfg && $rep_add $rep/t7a && $rep_fetch; + + $pkg_build libbar --yes &cfg/.bpkg/host/*** &cfg/.bpkg/build2/***; + + $* -d cfg/.bpkg/build2/ libbuild2-bar <<EOI 2>>/~%EOE% + y + y + y + EOI + following dependent packages will have to be dropped as well: + foo [cfg/.bpkg/host/] (requires libbuild2-bar) + libbar [cfg/] (requires foo [cfg/.bpkg/host/]) + %drop dependent packages\? \[y.N\] following dependencies were automatically built but will no longer be used:% + libbaz [cfg/.bpkg/host/] + libbaz [cfg/] + %drop unused packages\? \[Y.n\] drop libbar \[cfg/\]% + drop foo [cfg/.bpkg/host/] + drop libbuild2-bar + drop libbaz [cfg/.bpkg/host/] + drop libbaz [cfg/] + %continue\? \[Y.n\] disfigured libbar \[cfg/\]% + disfigured foo [cfg/.bpkg/host/] + disfigured libbuild2-bar + disfigured libbaz [cfg/.bpkg/host/] + disfigured libbaz [cfg/] + purged libbar [cfg/] + purged foo [cfg/.bpkg/host/] + purged libbuild2-bar + purged libbaz [cfg/.bpkg/host/] + purged libbaz [cfg/] + EOE + } + + : skip-deleted-dependency + : + { + $clone_cfg; + cp -pr ../cfg2 ./; + + $pkg_build libbar --yes &cfg/lib*/*** &cfg/lib* &cfg2/.bpkg/build2/***; + + mv cfg cfg.tmp; + + $* -d cfg2 libbaz <<EOI 2>>/~%EOE%; + y + y + y + EOI + following dependent packages will have to be dropped as well: + foo (requires libbaz) + %drop dependent packages\? \[y.N\] following dependencies were automatically built but will no longer be used:% + libbuild2-bar [cfg2/.bpkg/build2/] + %drop unused packages\? \[Y.n\] drop foo% + drop libbaz + drop libbuild2-bar [cfg2/.bpkg/build2/] + %continue\? \[Y.n\] disfigured foo% + disfigured libbaz + disfigured libbuild2-bar [cfg2/.bpkg/build2/] + purged foo + purged libbaz + purged libbuild2-bar [cfg2/.bpkg/build2/] + EOE + + # While at it, test that we properly handle the missing prerequisite + # situation. + # + mv cfg.tmp cfg; + + $* libbar 2>>/EOE != 0; + error: unable to find prerequisite package foo in linked configuration cfg2/ + EOE + + $pkg_status -d cfg2 -r 2>>EOE + info: no held packages in the configuration + info: use --all|-a to see status of all packages + EOE + } +} + +: all-options +: +{ + +$clone_cfg && $rep_add $rep/t4b $rep/t4c && $rep_fetch + + test.arguments += --yes + + : all + : + { + $clone_cfg; + + $pkg_build libbaz libbar; + + $* --all 2>>EOO + disfigured libbaz + disfigured libbar + disfigured libfoo + purged libbaz + purged libbar + purged libfoo + EOO + } + + : all-pattern + : + { + $clone_cfg; + + $pkg_build libbaz libbar libfoo; + + $* --all-pattern 'libb*' 2>>EOO; + disfigured libbaz + disfigured libbar + purged libbaz + purged libbar + EOO + + $* libfoo 2>>EOO + disfigured libfoo + purged libfoo + EOO + } +} |