aboutsummaryrefslogtreecommitdiff
path: root/tests/pkg-drop.testscript
diff options
context:
space:
mode:
Diffstat (limited to 'tests/pkg-drop.testscript')
-rw-r--r--tests/pkg-drop.testscript419
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
+ }
+}