# file : tests/pkg-unpack.testscript # copyright : Copyright (c) 2014-2019 Code Synthesis Ltd # license : MIT; see accompanying LICENSE file .include common.testscript \ auth.testscript \ config.testscript \ remote.testscript \ remote-git.testscript # Source repository: # # pkg-unpack # |-- hello # | |-- libhello-1.0.0.tar.gz # | `-- repositories.manifest # |-- libfoo-1.1.0 # | |-- build # | | `-- bootstrap.build # | |-- buildfile # | `-- manifest # |-- t1 # | |-- libfoo-1.0.0.tar.gz # | |-- libfoo-1.1.0.tar.gz # | `-- repositories.manifest # | # `-- git # `-- style-basic.git # Prepare repositories used by tests if running in the local mode. # +if ($remote != true) rep_create += 2>! # Create the signed 'hello' repository. # cp -r $src/hello $out/hello cat <<<$cert_manifest >+$out/hello/repositories.manifest $rep_create --key $key $out/hello &$out/hello/packages.manifest \ &$out/hello/signature.manifest # Create the 't1' repository. # cp -r $src/t1 $out/t1 && $rep_create $out/t1 &$out/t1/packages.manifest # Create git repositories. # $git_extract $src/git/style-basic.tar &$out_git/state0/*** end pkg_fetch += -d cfg 2>! pkg_purge += -d cfg pkg_status += -d cfg rep_add += -d cfg 2>! rep_fetch += -d cfg --auth all 2>! pkg_configure += -d cfg pkg_disfigure += -d cfg : replace-with-existing : $clone_cfg; $* foo -r 2>>EOE != 0 error: --replace|-r can only be specified with external package EOE : no-dir : $clone_cfg; $* -e 2>>EOE != 0 error: package directory argument expected info: run 'bpkg help pkg-unpack' for more information EOE : not-package-dir : $clone_cfg; $* -e ./ 2>>/EOE != 0 error: no manifest file in package directory ./ EOE : dir-not-exist : $clone_cfg; $* -e ./no-such-dir 2>>/EOE != 0 error: package directory ./no-such-dir/ does not exist EOE : no-name : $clone_cfg; $* 2>>EOE != 0 error: package name argument expected info: run 'bpkg help pkg-unpack' for more information EOE : fetched-rep : { +$clone_cfg && $rep_add $rep/t1 && $rep_fetch --trust-yes : package-exists : { $clone_cfg && $pkg_fetch libfoo/1.0.0; $* -e $src/libfoo-1.1.0 2>>/EOE != 0; error: package libfoo already exists in configuration cfg/ info: version: 1.0.0, state: fetched, substate: none info: use 'pkg-unpack --replace|-r' to replace EOE $pkg_purge libfoo 2>'purged libfoo/1.0.0'; $* -e $src/libfoo-1.1.0 2>'using libfoo/1.1.0 (external)'; $pkg_status libfoo/1.1.0 1>'libfoo unpacked 1.1.0'; $pkg_configure libfoo 2>'configured libfoo/1.1.0'; test -d cfg/libfoo; $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; $pkg_purge libfoo 2>'purged libfoo/1.1.0' } : replace-fetched : { $clone_cfg && $pkg_fetch libfoo/1.0.0; $* -e $src/libfoo-1.1.0 2>>/EOE != 0; error: package libfoo already exists in configuration cfg/ info: version: 1.0.0, state: fetched, substate: none info: use 'pkg-unpack --replace|-r' to replace EOE $* -r -e $src/libfoo-1.1.0 2>'using libfoo/1.1.0 (external)'; $pkg_status libfoo/1.1.0 1>'libfoo unpacked 1.1.0'; $pkg_purge libfoo 2>'purged libfoo/1.1.0' } : replace-unpacked : { $clone_cfg && $pkg_fetch libfoo/1.0.0; $* libfoo 2>'unpacked libfoo/1.0.0'; $* -e $src/libfoo-1.1.0 2>>/EOE != 0; error: package libfoo already exists in configuration cfg/ info: version: 1.0.0, state: unpacked, substate: none info: use 'pkg-unpack --replace|-r' to replace EOE $* -r -e $src/libfoo-1.1.0 2>'using libfoo/1.1.0 (external)'; $pkg_status libfoo/1.1.0 1>'libfoo unpacked 1.1.0'; $pkg_purge libfoo 2>'purged libfoo/1.1.0' } : wrong-state : { $clone_cfg; $* libfoo 2>>/EOE != 0; error: package libfoo does not exist in configuration cfg/ EOE $* -e $src/libfoo-1.1.0 2>'using libfoo/1.1.0 (external)'; $* libfoo 2>>EOE != 0; error: package libfoo is unpacked info: expected it to be fetched EOE $pkg_purge libfoo 2>'purged libfoo/1.1.0' } : right-state : { $clone_cfg && $pkg_fetch libfoo/1.0.0; $pkg_status libfoo/1.0.0 1>'libfoo fetched 1.0.0'; $* libfoo 2>'unpacked libfoo/1.0.0'; $pkg_status libfoo/1.0.0 1>'libfoo unpacked 1.0.0'; $pkg_configure libfoo 2>'configured libfoo/1.0.0'; test -d cfg/libfoo-1.0.0; $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; $pkg_purge libfoo 2>'purged libfoo/1.0.0' } : purge-existing : { $clone_cfg; cp --no-cleanup -r $src/libfoo-1.1.0 ./; $* -p -e libfoo-1.1.0 2>'using libfoo/1.1.0 (external)'; $pkg_purge libfoo 2>'purged libfoo/1.1.0' } } : dir-rep : { rep_add += --type dir : no-repos : { $clone_root_cfg; $* libfoo/1.1.0 2>>/EOE != 0 error: configuration cfg/ has no repositories info: use 'bpkg rep-add' to add a repository EOE } : unfetched : { $clone_root_cfg && $rep_add $src/libfoo-1.1.0; $* libfoo/1.1.0 2>>/EOE != 0 error: configuration cfg/ has no available packages info: use 'bpkg rep-fetch' to fetch available packages list EOE } : unavailable : { $clone_root_cfg && $rep_add $src/libfoo-1.1.0 && $rep_fetch; $* libfoo/1.0.0 2>>EOE != 0 error: package libfoo 1.0.0 is not available EOE } : unavailable-dir-based : { $clone_root_cfg && $rep_add $rep/t1 --type pkg && $rep_fetch --trust-yes; $* libfoo/1.0.0 2>>EOE != 0 error: package libfoo 1.0.0 is not available from a directory-based repository EOE } : available : { $clone_root_cfg && $rep_add $src/libfoo-1.1.0 && $rep_fetch; $* libfoo/1.1.0 2>>EOE; using libfoo/1.1.0 (external) EOE $pkg_status libfoo 1>'libfoo unpacked 1.1.0'; $pkg_configure libfoo 2>'configured libfoo/1.1.0'; test -d cfg/libfoo; $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0' } } : existing : { : version-fixup : : Test that the version is populated with the snapshot information for the : package directory that is under the version control. : if ($remote != true) { $clone_root_cfg; rep = $canonicalize([dir_path] $out_git/state0); $* -e $rep/style-basic.git 2>>~%EOE% %using style-basic/1\.1\.0-a\.0\.\d+\..+ \(external\)% EOE } } : hello : { $clone_cfg; $rep_add $rep/hello && $rep_fetch --trust $cert_fp &cfg/.bpkg/certs/**; $pkg_fetch libhello/1.0.0; $* libhello 2>'unpacked libhello/1.0.0'; $pkg_purge libhello 2>'purged libhello/1.0.0' }