diff --git a/doc/pages/Manual.md b/doc/pages/Manual.md
index 60f4f985c32..43d0a0a81f8 100644
--- a/doc/pages/Manual.md
+++ b/doc/pages/Manual.md
@@ -561,8 +561,10 @@ the package being defined.
a hash identifying the precise package version and metadata, and that of all
its dependencies
- `opamfile`:
- if the package is installed, path of its opam file, from opam internals,
- otherwise not defined
+ if the package is installed or pinned it is the path to the internally
+ stored opam file, otherwise, if the package exists, it is the path to
+ a newly created opam file in a directory under the system temporary
+ directory (see `Stdlib.Filename.get_temp_dir_name`)
Extra variables can be defined by any package at installation time, using a
[`.config`](#lt-pkgname-gt-config) file with a
diff --git a/master_changes.md b/master_changes.md
index 49525a33569..da895bbdbbd 100644
--- a/master_changes.md
+++ b/master_changes.md
@@ -48,6 +48,7 @@ users)
## Show
## Var/Option
+ * Make the computation of `pkg:opamfile` match its specification [#6659 @kit-ty-kate - fix #5346]
## Update / Upgrade
@@ -131,6 +132,8 @@ users)
* Add a test showing that `opam upgrade` allows downgrades when necessary [#6690 @kit-ty-kate]
* Add a test showing the behaviour of `opam tree` on local packages that happen to be already pinned [#6688 @kit-ty-kate]
* Add a test showing the behaviour of version pins when one of the dependencies isn't up-to-date [#6691 @kit-ty-kate]
+ * Add a test showing the behaviour of pre-defined variables in command hooks [#6659 @rjbou]
+ * Add a test showing the behaviour of `opam var :opamfile` [#6659 @kit-ty-kate]
### Engine
* Fix gcc < 14.3 bug on mingw i686 [#6624 @kit-ty-kate]
diff --git a/src/state/opamPackageVar.ml b/src/state/opamPackageVar.ml
index 107c75d92d3..01a0f10e4f3 100644
--- a/src/state/opamPackageVar.ml
+++ b/src/state/opamPackageVar.ml
@@ -309,20 +309,20 @@ let resolve st ?opam:opam_arg ?(local=OpamVariable.Map.empty) v =
| "dev", Some opam -> Some (bool (is_dev_package st opam))
| "build-id", Some opam -> Option.map string (build_id st opam)
| "opamfile", Some opam ->
- (* Opamfile path is retrieved from overlay directory for pinned packages,
- or from temporary repository in /tmp *)
- let repos_roots reponame =
- match Hashtbl.find st.switch_repos.repos_tmp reponame with
- | lazy repo_root -> repo_root
- | exception Not_found ->
- OpamRepositoryPath.root st.switch_global.root reponame
- in
- OpamFile.OPAM.get_metadata_dir ~repos_roots opam
- |> Option.map (fun d ->
- OpamFilename.Op.(d//"opam")
- |> OpamFilename.to_string
- |> string
- )
+ let nv = get_nv opam in
+ let ret file = Some (string (OpamFile.to_string file)) in
+ if OpamPackage.Set.mem nv st.installed then
+ ret (OpamPath.Switch.installed_opam st.switch_global.root st.switch nv)
+ else if OpamPackage.Set.mem nv st.pinned then
+ ret (OpamPath.Switch.Overlay.opam st.switch_global.root st.switch (OpamPackage.name nv))
+ else if OpamPackage.Set.mem nv st.packages then
+ let opam = OpamPackage.Map.find nv st.opams in
+ let temp_dir = OpamFilename.mk_tmp_dir () in
+ let dest = OpamFile.make OpamFilename.Op.(temp_dir // "opam") in
+ OpamFile.OPAM.write dest opam;
+ ret dest
+ else
+ None
| _, _ -> None
in
let make_package_local v =
diff --git a/tests/reftests/dune.inc b/tests/reftests/dune.inc
index 774e0488c5b..c148a436532 100644
--- a/tests/reftests/dune.inc
+++ b/tests/reftests/dune.inc
@@ -902,6 +902,69 @@
%{targets}
(run ./run.exe %{exe:../../src/client/opamMain.exe.exe} %{dep:git.test} %{read-lines:testing-env}))))
+(rule
+ (alias reftest-hooks-variables)
+ (enabled_if (and (or (<> %{env:TESTALL=1} 0) (= %{env:TESTN0REP0=0} 1))))
+ (action
+ (diff hooks-variables.test hooks-variables.out)))
+
+(alias
+ (name reftest)
+ (enabled_if (and (or (<> %{env:TESTALL=1} 0) (= %{env:TESTN0REP0=0} 1))))
+ (deps (alias reftest-hooks-variables)))
+
+(rule
+ (targets hooks-variables.out)
+ (deps root-N0REP0)
+ (enabled_if (and (or (<> %{env:TESTALL=1} 0) (= %{env:TESTN0REP0=0} 1))))
+ (package opam)
+ (action
+ (with-stdout-to
+ %{targets}
+ (run ./run.exe %{exe:../../src/client/opamMain.exe.exe} %{dep:hooks-variables.test} %{read-lines:testing-env}))))
+
+(rule
+ (alias reftest-hooks-variables.unix)
+ (enabled_if (and (= %{os_type} "Unix") (or (<> %{env:TESTALL=1} 0) (= %{env:TESTN0REP0=0} 1))))
+ (action
+ (diff hooks-variables.unix.test hooks-variables.unix.out)))
+
+(alias
+ (name reftest)
+ (enabled_if (and (= %{os_type} "Unix") (or (<> %{env:TESTALL=1} 0) (= %{env:TESTN0REP0=0} 1))))
+ (deps (alias reftest-hooks-variables.unix)))
+
+(rule
+ (targets hooks-variables.unix.out)
+ (deps root-N0REP0)
+ (enabled_if (and (= %{os_type} "Unix") (or (<> %{env:TESTALL=1} 0) (= %{env:TESTN0REP0=0} 1))))
+ (package opam)
+ (action
+ (with-stdout-to
+ %{targets}
+ (run ./run.exe %{exe:../../src/client/opamMain.exe.exe} %{dep:hooks-variables.unix.test} %{read-lines:testing-env}))))
+
+(rule
+ (alias reftest-hooks-variables.win32)
+ (enabled_if (and (= %{os_type} "Win32") (or (<> %{env:TESTALL=1} 0) (= %{env:TESTN0REP0=0} 1))))
+ (action
+ (diff hooks-variables.win32.test hooks-variables.win32.out)))
+
+(alias
+ (name reftest)
+ (enabled_if (and (= %{os_type} "Win32") (or (<> %{env:TESTALL=1} 0) (= %{env:TESTN0REP0=0} 1))))
+ (deps (alias reftest-hooks-variables.win32)))
+
+(rule
+ (targets hooks-variables.win32.out)
+ (deps root-N0REP0)
+ (enabled_if (and (= %{os_type} "Win32") (or (<> %{env:TESTALL=1} 0) (= %{env:TESTN0REP0=0} 1))))
+ (package opam)
+ (action
+ (with-stdout-to
+ %{targets}
+ (run ./run.exe %{exe:../../src/client/opamMain.exe.exe} %{dep:hooks-variables.win32.test} %{read-lines:testing-env}))))
+
(rule
(alias reftest-init-ocaml-eval-variables.unix)
(enabled_if (and (= %{os_type} "Unix") (or (<> %{env:TESTALL=1} 0) (= %{env:TESTN0REP0=0} 1))))
diff --git a/tests/reftests/hooks-variables.test b/tests/reftests/hooks-variables.test
new file mode 100644
index 00000000000..5a3a9f0df04
--- /dev/null
+++ b/tests/reftests/hooks-variables.test
@@ -0,0 +1,1012 @@
+N0REP0
+### ## global_variable_names
+### # opam-version The currently running opam version
+### # switch The identifier of the current switch
+### # jobs The number of parallel jobs set up in opam configuration
+### # root The current opam root directory
+### # make The 'make' command to use
+### #
+### ## package_variable_names
+### # name Name of the package
+### # version Version of the package
+### # depends Resolved direct dependencies of the package
+### # installed Whether the package is installed
+### # enable Takes the value enable or disable depending on whether the package is installed
+### # pinned Whether the package is pinned
+### # bin Binary directory for this package
+### # sbin System binary directory for this package
+### # lib Library directory for this package
+### # man Man directory for this package
+### # doc Doc directory for this package
+### # share Share directory for this package
+### # etc Etc directory for this package
+### # build Directory where the package was built
+### # hash Hash of the package archive
+### # dev True if this is a development package
+### # build-id A hash identifying the precise package version with all its dependencies
+### # opamfile Path of the current opam file
+### #
+### ## post-messages
+### # success
+### # failure
+### # with-dev-setup
+### #
+### ## post-install wrapper
+### # installed-files
+### ::::::::
+### :: Setup
+### ::::::::
+### OPAMYES=1
+### opam --version >$ OPAMVERSION
+### opam option --global jobs=2
+Set to '2' the field jobs in global configuration
+###
+for i in "$@"; do
+ echo "$i"
+done
+###
+opam-version: "2.0"
+###
+opam-version: "2.0"
+depends: "dep"
+build: [ "a-build-command" ]
+install: [ "a-install-command" ]
+remove: [ "a-remove-command" ]
+###
+opam-version: "2.0"
+etc: [
+ "printer.sh" {"printer"}
+]
+### tar czf archive.tgz printer.sh i-am-a-repo-pkg.install
+### openssl md5 archive.tgz | '.*= ' -> '' >$ MD5
+### sh -c "echo '$MD5' | cut -c 1-2" >$ PRE_MD5
+###
+basedir=$(printf '%s' "$BASEDIR" | sed 's/\\/\\\\/g')
+cat << EOF >> REPO/packages/i-am-a-repo-pkg/i-am-a-repo-pkg.1/opam
+url {
+ src:"file://$basedir/archive.tgz"
+ checksum: "md5=$MD5"
+}
+EOF
+### sh add-url.sh
+### opam update
+
+<><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><>
+[default] synchronised from file://${BASEDIR}/REPO
+Now run 'opam upgrade' to apply any package updates.
+### ::::::::::::::::::
+### :: Global wrappers
+### ::::::::::::::::::
+### mkdir -p OPAM/opam-init/hooks
+### cp printer.sh OPAM/opam-init/hooks/printer.sh
+### cp OPAM/config OPAM/config.bak
+### opam option --global 'pre-build-commands=[ "bash" "%{hooks}%/printer.sh" "...pre building..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...pre building..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]' the field pre-build-commands in global configuration
+### opam option --global 'pre-install-commands=[ "bash" "%{hooks}%/printer.sh" "...pre installing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...pre installing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]' the field pre-install-commands in global configuration
+### opam option --global 'pre-remove-commands=[ "bash" "%{hooks}%/printer.sh" "...pre removing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...pre removing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]' the field pre-remove-commands in global configuration
+### opam option --global 'wrap-build-commands=[ "bash" "%{hooks}%/printer.sh" "...building..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...building..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]' the field wrap-build-commands in global configuration
+### opam option --global 'wrap-install-commands=[ "bash" "%{hooks}%/printer.sh" "...installing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...installing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]' the field wrap-install-commands in global configuration
+### opam option --global 'wrap-remove-commands=[ "bash" "%{hooks}%/printer.sh" "...removing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...removing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]' the field wrap-remove-commands in global configuration
+### opam option --global 'post-build-commands=[ "bash" "%{hooks}%/printer.sh" "...post-building..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...post-building..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]' the field post-build-commands in global configuration
+### opam option --global 'post-install-commands=[ "bash" "%{hooks}%/printer.sh" "...post-installing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...post-installing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]' the field post-install-commands in global configuration
+### opam option --global 'post-remove-commands=[ "bash" "%{hooks}%/printer.sh" "...post-removing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...post-removing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]' the field post-remove-commands in global configuration
+### opam switch create global-wrappers --empty
+### opam install dep
+The following actions will be performed:
+=== install 1 package
+ - install dep 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+-> installed dep.1
+Done.
+### opam install i-am-a-repo-pkg -vv | "${OPAMVERSION}" -> "++current++" | '[0-9a-z]{64}' -> '+hash+' | $MD5 -> +archive-hash+ | sed-cmd bash tar rsync | etc -> etc
+The following actions will be performed:
+=== install 1 package
+ - install i-am-a-repo-pkg 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/3: [i-am-a-repo-pkg.1: rsync]
++ rsync "-rLptgoDvc" "--exclude" ".git" "--exclude" "_darcs" "--exclude" ".hg" "--exclude" ".#*" "--exclude" "_opam*" "--exclude" "_build" "--delete" "--delete-excluded" "${BASEDIR}/archive.tgz" "${OPAMTMP}"
+- archive.tgz
+-
+Processing 1/3: [i-am-a-repo-pkg.1: extract]
++ tar "xfz" "${OPAMTMP}/archive.tgz" "-C" "${OPAMTMP}"
+-> retrieved i-am-a-repo-pkg.1 (file://${BASEDIR}/archive.tgz)
+Processing 2/3: [i-am-a-repo-pkg: bash ...pre building...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...pre building..." "opam-version:++current++" "switch:global-wrappers" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:false" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/global-wrappers/bin" "sbin:${BASEDIR}/OPAM/global-wrappers/sbin" "lib:${BASEDIR}/OPAM/global-wrappers/lib" "man:${BASEDIR}/OPAM/global-wrappers/man" "doc:${BASEDIR}/OPAM/global-wrappers/doc" "share:${BASEDIR}/OPAM/global-wrappers/share" "etc:${BASEDIR}/OPAM/global-wrappers/etc" "build:${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${OPAMTMP}/opam" "installed-files:" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...pre building...
+- opam-version:++current++
+- switch:global-wrappers
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:false
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/global-wrappers/bin
+- sbin:${BASEDIR}/OPAM/global-wrappers/sbin
+- lib:${BASEDIR}/OPAM/global-wrappers/lib
+- man:${BASEDIR}/OPAM/global-wrappers/man
+- doc:${BASEDIR}/OPAM/global-wrappers/doc
+- share:${BASEDIR}/OPAM/global-wrappers/share
+- etc:${BASEDIR}/OPAM/global-wrappers/etc
+- build:${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${OPAMTMP}/opam
+- installed-files:
+Processing 2/3: [i-am-a-repo-pkg: a-build-command]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...building..." "opam-version:++current++" "switch:global-wrappers" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:false" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/global-wrappers/bin" "sbin:${BASEDIR}/OPAM/global-wrappers/sbin" "lib:${BASEDIR}/OPAM/global-wrappers/lib" "man:${BASEDIR}/OPAM/global-wrappers/man" "doc:${BASEDIR}/OPAM/global-wrappers/doc" "share:${BASEDIR}/OPAM/global-wrappers/share" "etc:${BASEDIR}/OPAM/global-wrappers/etc" "build:${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${OPAMTMP}/opam" "installed-files:" "a-build-command" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...building...
+- opam-version:++current++
+- switch:global-wrappers
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:false
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/global-wrappers/bin
+- sbin:${BASEDIR}/OPAM/global-wrappers/sbin
+- lib:${BASEDIR}/OPAM/global-wrappers/lib
+- man:${BASEDIR}/OPAM/global-wrappers/man
+- doc:${BASEDIR}/OPAM/global-wrappers/doc
+- share:${BASEDIR}/OPAM/global-wrappers/share
+- etc:${BASEDIR}/OPAM/global-wrappers/etc
+- build:${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${OPAMTMP}/opam
+- installed-files:
+- a-build-command
+Processing 2/3: [i-am-a-repo-pkg: bash ...post-building...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...post-building..." "opam-version:++current++" "switch:global-wrappers" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:false" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/global-wrappers/bin" "sbin:${BASEDIR}/OPAM/global-wrappers/sbin" "lib:${BASEDIR}/OPAM/global-wrappers/lib" "man:${BASEDIR}/OPAM/global-wrappers/man" "doc:${BASEDIR}/OPAM/global-wrappers/doc" "share:${BASEDIR}/OPAM/global-wrappers/share" "etc:${BASEDIR}/OPAM/global-wrappers/etc" "build:${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${OPAMTMP}/opam" "installed-files:" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...post-building...
+- opam-version:++current++
+- switch:global-wrappers
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:false
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/global-wrappers/bin
+- sbin:${BASEDIR}/OPAM/global-wrappers/sbin
+- lib:${BASEDIR}/OPAM/global-wrappers/lib
+- man:${BASEDIR}/OPAM/global-wrappers/man
+- doc:${BASEDIR}/OPAM/global-wrappers/doc
+- share:${BASEDIR}/OPAM/global-wrappers/share
+- etc:${BASEDIR}/OPAM/global-wrappers/etc
+- build:${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${OPAMTMP}/opam
+- installed-files:
+-> compiled i-am-a-repo-pkg.1
+Processing 3/3: [i-am-a-repo-pkg: bash ...pre installing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...pre installing..." "opam-version:++current++" "switch:global-wrappers" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:false" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/global-wrappers/bin" "sbin:${BASEDIR}/OPAM/global-wrappers/sbin" "lib:${BASEDIR}/OPAM/global-wrappers/lib" "man:${BASEDIR}/OPAM/global-wrappers/man" "doc:${BASEDIR}/OPAM/global-wrappers/doc" "share:${BASEDIR}/OPAM/global-wrappers/share" "etc:${BASEDIR}/OPAM/global-wrappers/etc" "build:${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${OPAMTMP}/opam" "installed-files:" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...pre installing...
+- opam-version:++current++
+- switch:global-wrappers
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:false
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/global-wrappers/bin
+- sbin:${BASEDIR}/OPAM/global-wrappers/sbin
+- lib:${BASEDIR}/OPAM/global-wrappers/lib
+- man:${BASEDIR}/OPAM/global-wrappers/man
+- doc:${BASEDIR}/OPAM/global-wrappers/doc
+- share:${BASEDIR}/OPAM/global-wrappers/share
+- etc:${BASEDIR}/OPAM/global-wrappers/etc
+- build:${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${OPAMTMP}/opam
+- installed-files:
+Processing 3/3: [i-am-a-repo-pkg: a-install-command]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...installing..." "opam-version:++current++" "switch:global-wrappers" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:false" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/global-wrappers/bin" "sbin:${BASEDIR}/OPAM/global-wrappers/sbin" "lib:${BASEDIR}/OPAM/global-wrappers/lib" "man:${BASEDIR}/OPAM/global-wrappers/man" "doc:${BASEDIR}/OPAM/global-wrappers/doc" "share:${BASEDIR}/OPAM/global-wrappers/share" "etc:${BASEDIR}/OPAM/global-wrappers/etc" "build:${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${OPAMTMP}/opam" "installed-files:" "a-install-command" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...installing...
+- opam-version:++current++
+- switch:global-wrappers
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:false
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/global-wrappers/bin
+- sbin:${BASEDIR}/OPAM/global-wrappers/sbin
+- lib:${BASEDIR}/OPAM/global-wrappers/lib
+- man:${BASEDIR}/OPAM/global-wrappers/man
+- doc:${BASEDIR}/OPAM/global-wrappers/doc
+- share:${BASEDIR}/OPAM/global-wrappers/share
+- etc:${BASEDIR}/OPAM/global-wrappers/etc
+- build:${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${OPAMTMP}/opam
+- installed-files:
+- a-install-command
+Processing 3/3: [i-am-a-repo-pkg: bash ...post-installing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...post-installing..." "opam-version:++current++" "switch:global-wrappers" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:false" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/global-wrappers/bin" "sbin:${BASEDIR}/OPAM/global-wrappers/sbin" "lib:${BASEDIR}/OPAM/global-wrappers/lib" "man:${BASEDIR}/OPAM/global-wrappers/man" "doc:${BASEDIR}/OPAM/global-wrappers/doc" "share:${BASEDIR}/OPAM/global-wrappers/share" "etc:${BASEDIR}/OPAM/global-wrappers/etc" "build:${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${OPAMTMP}/opam" "installed-files:etc etc/i-am-a-repo-pkg etc/i-am-a-repo-pkg/printer" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...post-installing...
+- opam-version:++current++
+- switch:global-wrappers
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:false
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/global-wrappers/bin
+- sbin:${BASEDIR}/OPAM/global-wrappers/sbin
+- lib:${BASEDIR}/OPAM/global-wrappers/lib
+- man:${BASEDIR}/OPAM/global-wrappers/man
+- doc:${BASEDIR}/OPAM/global-wrappers/doc
+- share:${BASEDIR}/OPAM/global-wrappers/share
+- etc:${BASEDIR}/OPAM/global-wrappers/etc
+- build:${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${OPAMTMP}/opam
+- installed-files:etc etc/i-am-a-repo-pkg etc/i-am-a-repo-pkg/printer
+-> installed i-am-a-repo-pkg.1
+Done.
+### opam remove i-am-a-repo-pkg -vv | "${OPAMVERSION}" -> "++current++" | '[0-9a-z]{64}' -> '+hash+' | '${PRE_MD5}..?${MD5}' -> pre/+archive-hash+ | $MD5 -> +archive-hash+ | sed-cmd bash tar
+The following actions will be performed:
+=== remove 1 package
+ - remove i-am-a-repo-pkg 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/2: [i-am-a-repo-pkg.1: extract]
++ tar "xfz" "${BASEDIR}/OPAM/download-cache/md5/pre/+archive-hash+" "-C" "${OPAMTMP}"
+-> retrieved i-am-a-repo-pkg.1 (cached)
+Processing 2/2: [i-am-a-repo-pkg: bash ...pre removing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...pre removing..." "opam-version:++current++" "switch:global-wrappers" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:true" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/global-wrappers/bin" "sbin:${BASEDIR}/OPAM/global-wrappers/sbin" "lib:${BASEDIR}/OPAM/global-wrappers/lib" "man:${BASEDIR}/OPAM/global-wrappers/man" "doc:${BASEDIR}/OPAM/global-wrappers/doc" "share:${BASEDIR}/OPAM/global-wrappers/share" "etc:${BASEDIR}/OPAM/global-wrappers/etc" "build:${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${BASEDIR}/OPAM/global-wrappers/.opam-switch/packages/i-am-a-repo-pkg.1/opam" "installed-files:" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...pre removing...
+- opam-version:++current++
+- switch:global-wrappers
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:true
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/global-wrappers/bin
+- sbin:${BASEDIR}/OPAM/global-wrappers/sbin
+- lib:${BASEDIR}/OPAM/global-wrappers/lib
+- man:${BASEDIR}/OPAM/global-wrappers/man
+- doc:${BASEDIR}/OPAM/global-wrappers/doc
+- share:${BASEDIR}/OPAM/global-wrappers/share
+- etc:${BASEDIR}/OPAM/global-wrappers/etc
+- build:${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${BASEDIR}/OPAM/global-wrappers/.opam-switch/packages/i-am-a-repo-pkg.1/opam
+- installed-files:
+Processing 2/2: [i-am-a-repo-pkg: a-remove-command]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...removing..." "opam-version:++current++" "switch:global-wrappers" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:true" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/global-wrappers/bin" "sbin:${BASEDIR}/OPAM/global-wrappers/sbin" "lib:${BASEDIR}/OPAM/global-wrappers/lib" "man:${BASEDIR}/OPAM/global-wrappers/man" "doc:${BASEDIR}/OPAM/global-wrappers/doc" "share:${BASEDIR}/OPAM/global-wrappers/share" "etc:${BASEDIR}/OPAM/global-wrappers/etc" "build:${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${BASEDIR}/OPAM/global-wrappers/.opam-switch/packages/i-am-a-repo-pkg.1/opam" "installed-files:" "a-remove-command" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...removing...
+- opam-version:++current++
+- switch:global-wrappers
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:true
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/global-wrappers/bin
+- sbin:${BASEDIR}/OPAM/global-wrappers/sbin
+- lib:${BASEDIR}/OPAM/global-wrappers/lib
+- man:${BASEDIR}/OPAM/global-wrappers/man
+- doc:${BASEDIR}/OPAM/global-wrappers/doc
+- share:${BASEDIR}/OPAM/global-wrappers/share
+- etc:${BASEDIR}/OPAM/global-wrappers/etc
+- build:${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${BASEDIR}/OPAM/global-wrappers/.opam-switch/packages/i-am-a-repo-pkg.1/opam
+- installed-files:
+- a-remove-command
+Processing 2/2: [i-am-a-repo-pkg: bash ...post-removing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...post-removing..." "opam-version:++current++" "switch:global-wrappers" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:true" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/global-wrappers/bin" "sbin:${BASEDIR}/OPAM/global-wrappers/sbin" "lib:${BASEDIR}/OPAM/global-wrappers/lib" "man:${BASEDIR}/OPAM/global-wrappers/man" "doc:${BASEDIR}/OPAM/global-wrappers/doc" "share:${BASEDIR}/OPAM/global-wrappers/share" "etc:${BASEDIR}/OPAM/global-wrappers/etc" "build:${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${BASEDIR}/OPAM/global-wrappers/.opam-switch/packages/i-am-a-repo-pkg.1/opam" "installed-files:" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...post-removing...
+- opam-version:++current++
+- switch:global-wrappers
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:true
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/global-wrappers/bin
+- sbin:${BASEDIR}/OPAM/global-wrappers/sbin
+- lib:${BASEDIR}/OPAM/global-wrappers/lib
+- man:${BASEDIR}/OPAM/global-wrappers/man
+- doc:${BASEDIR}/OPAM/global-wrappers/doc
+- share:${BASEDIR}/OPAM/global-wrappers/share
+- etc:${BASEDIR}/OPAM/global-wrappers/etc
+- build:${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${BASEDIR}/OPAM/global-wrappers/.opam-switch/packages/i-am-a-repo-pkg.1/opam
+- installed-files:
+-> removed i-am-a-repo-pkg.1
+Done.
+### cp OPAM/config.bak OPAM/config
+### ::::::::::::::::::
+### :: Switch wrappers
+### ::::::::::::::::::
+### opam switch create switch-wrappers --empty
+### opam option --switch switch-wrappers 'pre-build-commands=[ "bash" "%{hooks}%/printer.sh" "...pre building..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...pre building..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]' the field pre-build-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'pre-install-commands=[ "bash" "%{hooks}%/printer.sh" "...pre installing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...pre installing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]' the field pre-install-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'pre-remove-commands=[ "bash" "%{hooks}%/printer.sh" "...pre removing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...pre removing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]' the field pre-remove-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'wrap-build-commands=[ "bash" "%{hooks}%/printer.sh" "...building..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...building..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]' the field wrap-build-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'wrap-install-commands=[ "bash" "%{hooks}%/printer.sh" "...installing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...installing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]' the field wrap-install-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'wrap-remove-commands=[ "bash" "%{hooks}%/printer.sh" "...removing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...removing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]' the field wrap-remove-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'post-build-commands=[ "bash" "%{hooks}%/printer.sh" "...post-building..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...post-building..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]' the field post-build-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'post-install-commands=[ "bash" "%{hooks}%/printer.sh" "...post-installing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" "installed-files:%{installed-files}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...post-installing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" "installed-files:%{installed-files}%" ]' the field post-install-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'post-remove-commands=[ "bash" "%{hooks}%/printer.sh" "...post-removing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...post-removing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]' the field post-remove-commands in switch switch-wrappers
+### opam install dep
+The following actions will be performed:
+=== install 1 package
+ - install dep 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+-> installed dep.1
+Done.
+### opam install i-am-a-repo-pkg -vv | "${OPAMVERSION}" -> "++current++" | '[0-9a-z]{64}' -> '+hash+' | '${PRE_MD5}..?${MD5}' -> pre/+archive-hash+ | $MD5 -> +archive-hash+ | sed-cmd bash tar | etc -> etc
+The following actions will be performed:
+=== install 1 package
+ - install i-am-a-repo-pkg 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/3: [i-am-a-repo-pkg.1: extract]
++ tar "xfz" "${BASEDIR}/OPAM/download-cache/md5/pre/+archive-hash+" "-C" "${OPAMTMP}"
+-> retrieved i-am-a-repo-pkg.1 (cached)
+Processing 2/3: [i-am-a-repo-pkg: bash ...pre building...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...pre building..." "opam-version:++current++" "switch:switch-wrappers" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:false" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/switch-wrappers/bin" "sbin:${BASEDIR}/OPAM/switch-wrappers/sbin" "lib:${BASEDIR}/OPAM/switch-wrappers/lib" "man:${BASEDIR}/OPAM/switch-wrappers/man" "doc:${BASEDIR}/OPAM/switch-wrappers/doc" "share:${BASEDIR}/OPAM/switch-wrappers/share" "etc:${BASEDIR}/OPAM/switch-wrappers/etc" "build:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${OPAMTMP}/opam" "installed-files:" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...pre building...
+- opam-version:++current++
+- switch:switch-wrappers
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:false
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/switch-wrappers/bin
+- sbin:${BASEDIR}/OPAM/switch-wrappers/sbin
+- lib:${BASEDIR}/OPAM/switch-wrappers/lib
+- man:${BASEDIR}/OPAM/switch-wrappers/man
+- doc:${BASEDIR}/OPAM/switch-wrappers/doc
+- share:${BASEDIR}/OPAM/switch-wrappers/share
+- etc:${BASEDIR}/OPAM/switch-wrappers/etc
+- build:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${OPAMTMP}/opam
+- installed-files:
+Processing 2/3: [i-am-a-repo-pkg: a-build-command]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...building..." "opam-version:++current++" "switch:switch-wrappers" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:false" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/switch-wrappers/bin" "sbin:${BASEDIR}/OPAM/switch-wrappers/sbin" "lib:${BASEDIR}/OPAM/switch-wrappers/lib" "man:${BASEDIR}/OPAM/switch-wrappers/man" "doc:${BASEDIR}/OPAM/switch-wrappers/doc" "share:${BASEDIR}/OPAM/switch-wrappers/share" "etc:${BASEDIR}/OPAM/switch-wrappers/etc" "build:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${OPAMTMP}/opam" "installed-files:" "a-build-command" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...building...
+- opam-version:++current++
+- switch:switch-wrappers
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:false
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/switch-wrappers/bin
+- sbin:${BASEDIR}/OPAM/switch-wrappers/sbin
+- lib:${BASEDIR}/OPAM/switch-wrappers/lib
+- man:${BASEDIR}/OPAM/switch-wrappers/man
+- doc:${BASEDIR}/OPAM/switch-wrappers/doc
+- share:${BASEDIR}/OPAM/switch-wrappers/share
+- etc:${BASEDIR}/OPAM/switch-wrappers/etc
+- build:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${OPAMTMP}/opam
+- installed-files:
+- a-build-command
+Processing 2/3: [i-am-a-repo-pkg: bash ...post-building...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...post-building..." "opam-version:++current++" "switch:switch-wrappers" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:false" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/switch-wrappers/bin" "sbin:${BASEDIR}/OPAM/switch-wrappers/sbin" "lib:${BASEDIR}/OPAM/switch-wrappers/lib" "man:${BASEDIR}/OPAM/switch-wrappers/man" "doc:${BASEDIR}/OPAM/switch-wrappers/doc" "share:${BASEDIR}/OPAM/switch-wrappers/share" "etc:${BASEDIR}/OPAM/switch-wrappers/etc" "build:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${OPAMTMP}/opam" "installed-files:" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...post-building...
+- opam-version:++current++
+- switch:switch-wrappers
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:false
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/switch-wrappers/bin
+- sbin:${BASEDIR}/OPAM/switch-wrappers/sbin
+- lib:${BASEDIR}/OPAM/switch-wrappers/lib
+- man:${BASEDIR}/OPAM/switch-wrappers/man
+- doc:${BASEDIR}/OPAM/switch-wrappers/doc
+- share:${BASEDIR}/OPAM/switch-wrappers/share
+- etc:${BASEDIR}/OPAM/switch-wrappers/etc
+- build:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${OPAMTMP}/opam
+- installed-files:
+-> compiled i-am-a-repo-pkg.1
+Processing 3/3: [i-am-a-repo-pkg: bash ...pre installing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...pre installing..." "opam-version:++current++" "switch:switch-wrappers" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:false" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/switch-wrappers/bin" "sbin:${BASEDIR}/OPAM/switch-wrappers/sbin" "lib:${BASEDIR}/OPAM/switch-wrappers/lib" "man:${BASEDIR}/OPAM/switch-wrappers/man" "doc:${BASEDIR}/OPAM/switch-wrappers/doc" "share:${BASEDIR}/OPAM/switch-wrappers/share" "etc:${BASEDIR}/OPAM/switch-wrappers/etc" "build:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${OPAMTMP}/opam" "installed-files:" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...pre installing...
+- opam-version:++current++
+- switch:switch-wrappers
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:false
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/switch-wrappers/bin
+- sbin:${BASEDIR}/OPAM/switch-wrappers/sbin
+- lib:${BASEDIR}/OPAM/switch-wrappers/lib
+- man:${BASEDIR}/OPAM/switch-wrappers/man
+- doc:${BASEDIR}/OPAM/switch-wrappers/doc
+- share:${BASEDIR}/OPAM/switch-wrappers/share
+- etc:${BASEDIR}/OPAM/switch-wrappers/etc
+- build:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${OPAMTMP}/opam
+- installed-files:
+Processing 3/3: [i-am-a-repo-pkg: a-install-command]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...installing..." "opam-version:++current++" "switch:switch-wrappers" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:false" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/switch-wrappers/bin" "sbin:${BASEDIR}/OPAM/switch-wrappers/sbin" "lib:${BASEDIR}/OPAM/switch-wrappers/lib" "man:${BASEDIR}/OPAM/switch-wrappers/man" "doc:${BASEDIR}/OPAM/switch-wrappers/doc" "share:${BASEDIR}/OPAM/switch-wrappers/share" "etc:${BASEDIR}/OPAM/switch-wrappers/etc" "build:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${OPAMTMP}/opam" "installed-files:" "a-install-command" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...installing...
+- opam-version:++current++
+- switch:switch-wrappers
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:false
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/switch-wrappers/bin
+- sbin:${BASEDIR}/OPAM/switch-wrappers/sbin
+- lib:${BASEDIR}/OPAM/switch-wrappers/lib
+- man:${BASEDIR}/OPAM/switch-wrappers/man
+- doc:${BASEDIR}/OPAM/switch-wrappers/doc
+- share:${BASEDIR}/OPAM/switch-wrappers/share
+- etc:${BASEDIR}/OPAM/switch-wrappers/etc
+- build:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${OPAMTMP}/opam
+- installed-files:
+- a-install-command
+Processing 3/3: [i-am-a-repo-pkg: bash ...post-installing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...post-installing..." "opam-version:++current++" "switch:switch-wrappers" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:false" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/switch-wrappers/bin" "sbin:${BASEDIR}/OPAM/switch-wrappers/sbin" "lib:${BASEDIR}/OPAM/switch-wrappers/lib" "man:${BASEDIR}/OPAM/switch-wrappers/man" "doc:${BASEDIR}/OPAM/switch-wrappers/doc" "share:${BASEDIR}/OPAM/switch-wrappers/share" "etc:${BASEDIR}/OPAM/switch-wrappers/etc" "build:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${OPAMTMP}/opam" "installed-files:etc etc/i-am-a-repo-pkg etc/i-am-a-repo-pkg/printer" "installed-files:etc etc/i-am-a-repo-pkg etc/i-am-a-repo-pkg/printer" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...post-installing...
+- opam-version:++current++
+- switch:switch-wrappers
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:false
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/switch-wrappers/bin
+- sbin:${BASEDIR}/OPAM/switch-wrappers/sbin
+- lib:${BASEDIR}/OPAM/switch-wrappers/lib
+- man:${BASEDIR}/OPAM/switch-wrappers/man
+- doc:${BASEDIR}/OPAM/switch-wrappers/doc
+- share:${BASEDIR}/OPAM/switch-wrappers/share
+- etc:${BASEDIR}/OPAM/switch-wrappers/etc
+- build:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${OPAMTMP}/opam
+- installed-files:etc etc/i-am-a-repo-pkg etc/i-am-a-repo-pkg/printer
+- installed-files:etc etc/i-am-a-repo-pkg etc/i-am-a-repo-pkg/printer
+-> installed i-am-a-repo-pkg.1
+Done.
+### opam remove i-am-a-repo-pkg -vv | "${OPAMVERSION}" -> "++current++" | '[0-9a-z]{64}' -> '+hash+' | '${PRE_MD5}..?${MD5}' -> pre/+archive-hash+ | $MD5 -> +archive-hash+ | sed-cmd bash tar
+The following actions will be performed:
+=== remove 1 package
+ - remove i-am-a-repo-pkg 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/2: [i-am-a-repo-pkg.1: extract]
++ tar "xfz" "${BASEDIR}/OPAM/download-cache/md5/pre/+archive-hash+" "-C" "${OPAMTMP}"
+-> retrieved i-am-a-repo-pkg.1 (cached)
+Processing 2/2: [i-am-a-repo-pkg: bash ...pre removing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...pre removing..." "opam-version:++current++" "switch:switch-wrappers" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:true" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/switch-wrappers/bin" "sbin:${BASEDIR}/OPAM/switch-wrappers/sbin" "lib:${BASEDIR}/OPAM/switch-wrappers/lib" "man:${BASEDIR}/OPAM/switch-wrappers/man" "doc:${BASEDIR}/OPAM/switch-wrappers/doc" "share:${BASEDIR}/OPAM/switch-wrappers/share" "etc:${BASEDIR}/OPAM/switch-wrappers/etc" "build:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/packages/i-am-a-repo-pkg.1/opam" "installed-files:" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...pre removing...
+- opam-version:++current++
+- switch:switch-wrappers
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:true
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/switch-wrappers/bin
+- sbin:${BASEDIR}/OPAM/switch-wrappers/sbin
+- lib:${BASEDIR}/OPAM/switch-wrappers/lib
+- man:${BASEDIR}/OPAM/switch-wrappers/man
+- doc:${BASEDIR}/OPAM/switch-wrappers/doc
+- share:${BASEDIR}/OPAM/switch-wrappers/share
+- etc:${BASEDIR}/OPAM/switch-wrappers/etc
+- build:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/packages/i-am-a-repo-pkg.1/opam
+- installed-files:
+Processing 2/2: [i-am-a-repo-pkg: a-remove-command]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...removing..." "opam-version:++current++" "switch:switch-wrappers" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:true" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/switch-wrappers/bin" "sbin:${BASEDIR}/OPAM/switch-wrappers/sbin" "lib:${BASEDIR}/OPAM/switch-wrappers/lib" "man:${BASEDIR}/OPAM/switch-wrappers/man" "doc:${BASEDIR}/OPAM/switch-wrappers/doc" "share:${BASEDIR}/OPAM/switch-wrappers/share" "etc:${BASEDIR}/OPAM/switch-wrappers/etc" "build:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/packages/i-am-a-repo-pkg.1/opam" "installed-files:" "a-remove-command" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...removing...
+- opam-version:++current++
+- switch:switch-wrappers
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:true
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/switch-wrappers/bin
+- sbin:${BASEDIR}/OPAM/switch-wrappers/sbin
+- lib:${BASEDIR}/OPAM/switch-wrappers/lib
+- man:${BASEDIR}/OPAM/switch-wrappers/man
+- doc:${BASEDIR}/OPAM/switch-wrappers/doc
+- share:${BASEDIR}/OPAM/switch-wrappers/share
+- etc:${BASEDIR}/OPAM/switch-wrappers/etc
+- build:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/packages/i-am-a-repo-pkg.1/opam
+- installed-files:
+- a-remove-command
+Processing 2/2: [i-am-a-repo-pkg: bash ...post-removing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...post-removing..." "opam-version:++current++" "switch:switch-wrappers" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:true" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/switch-wrappers/bin" "sbin:${BASEDIR}/OPAM/switch-wrappers/sbin" "lib:${BASEDIR}/OPAM/switch-wrappers/lib" "man:${BASEDIR}/OPAM/switch-wrappers/man" "doc:${BASEDIR}/OPAM/switch-wrappers/doc" "share:${BASEDIR}/OPAM/switch-wrappers/share" "etc:${BASEDIR}/OPAM/switch-wrappers/etc" "build:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/packages/i-am-a-repo-pkg.1/opam" "installed-files:" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...post-removing...
+- opam-version:++current++
+- switch:switch-wrappers
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:true
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/switch-wrappers/bin
+- sbin:${BASEDIR}/OPAM/switch-wrappers/sbin
+- lib:${BASEDIR}/OPAM/switch-wrappers/lib
+- man:${BASEDIR}/OPAM/switch-wrappers/man
+- doc:${BASEDIR}/OPAM/switch-wrappers/doc
+- share:${BASEDIR}/OPAM/switch-wrappers/share
+- etc:${BASEDIR}/OPAM/switch-wrappers/etc
+- build:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${BASEDIR}/OPAM/switch-wrappers/.opam-switch/packages/i-am-a-repo-pkg.1/opam
+- installed-files:
+-> removed i-am-a-repo-pkg.1
+Done.
+### ::::::::::::::::::::
+### :: Package from repo
+### ::::::::::::::::::::
+### # "build:%{build}%" "post:%{post}%" "with-test:%{with-test}%" "with-doc:%{with-doc}%" "with-dev-setup:%{with-dev-setup}%" "dev:%{dev}%"
+###
+opam-version: "2.0"
+depends: "dep"
+build: [ "bash" "printer.sh" "...building..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]
+install: [ "bash" "printer.sh" "...installing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]
+remove: [ "bash" "printer.sh" "...removing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]
+post-messages:
+"""...A last message...
+opam-version:%{opam-version}%
+switch:%{switch}%
+jobs:%{jobs}%
+root:%{root}%
+make:%{make}%
+name:%{name}%
+version:%{version}%
+depends:%{depends}%
+installed:%{installed}%
+enable:%{enable}%
+pinned:%{pinned}%
+bin:%{bin}%
+sbin:%{sbin}%
+lib:%{lib}%
+man:%{man}%
+doc:%{doc}%
+share:%{share}%
+etc:%{etc}%
+build:%{build}%
+hash:%{hash}%
+dev:%{dev}%
+build-id:%{build-id}%
+opamfile:%{opamfile}%
+with-dev-setup:%{with-dev-setup}%
+success:%{success}%
+failure:%{failure}%
+installed-files:%{installed-files}%
+"""
+###
+basedir=$(printf '%s' "$BASEDIR" | sed 's/\\/\\\\/g')
+cat << EOF >> REPO/packages/i-am-a-repo-pkg/i-am-a-repo-pkg.1/opam
+url {
+ src:"file://$basedir/archive.tgz"
+ checksum: "md5=$(openssl md5 archive.tgz | cut -f2 -d' ')"
+}
+EOF
+### sh add-url.sh
+### opam update
+
+<><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><>
+[default] synchronised from file://${BASEDIR}/REPO
+Now run 'opam upgrade' to apply any package updates.
+### opam switch create pkg-from-repo --empty
+### opam install dep
+The following actions will be performed:
+=== install 1 package
+ - install dep 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+-> installed dep.1
+Done.
+### opam install i-am-a-repo-pkg | "${OPAMVERSION}" -> "++current++" | '[0-9a-z]{64}' -> '+hash+' | '${PRE_MD5}..?${MD5}' -> pre/+archive-hash+ | $MD5 -> +archive-hash+ | sed-cmd bash tar | etc -> etc
+The following actions will be performed:
+=== install 1 package
+ - install i-am-a-repo-pkg 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+-> retrieved i-am-a-repo-pkg.1 (cached)
+-> installed i-am-a-repo-pkg.1
+Done.
+
+<><> i-am-a-repo-pkg.1 installed successfully <><><><><><><><><><><><><><><><><>
+=> ...A last message...
+ opam-version:++current++
+ switch:pkg-from-repo
+ jobs:2
+ root:${BASEDIR}/OPAM
+ make:make
+ name:i-am-a-repo-pkg
+ version:1
+ depends:dep.1
+ installed:true
+ enable:
+ pinned:false
+ bin:${BASEDIR}/OPAM/pkg-from-repo/bin
+ sbin:${BASEDIR}/OPAM/pkg-from-repo/sbin
+ lib:${BASEDIR}/OPAM/pkg-from-repo/lib
+ man:${BASEDIR}/OPAM/pkg-from-repo/man
+ doc:${BASEDIR}/OPAM/pkg-from-repo/doc
+ share:${BASEDIR}/OPAM/pkg-from-repo/share
+ etc:${BASEDIR}/OPAM/pkg-from-repo/etc
+ build:${BASEDIR}/OPAM/pkg-from-repo/.opam-switch/build/i-am-a-repo-pkg.1
+ hash:md5=+archive-hash+
+ dev:false
+ build-id:+hash+
+ opamfile:${BASEDIR}/OPAM/pkg-from-repo/.opam-switch/packages/i-am-a-repo-pkg.1/opam
+ with-dev-setup:false
+ success:true
+ failure:false
+ installed-files:
+### opam remove i-am-a-repo-pkg -vv | "${OPAMVERSION}" -> "++current++" | '[0-9a-z]{64}' -> '+hash+' | '${PRE_MD5}..?${MD5}' -> pre/+archive-hash+ | $MD5 -> +archive-hash+ | sed-cmd bash tar
+The following actions will be performed:
+=== remove 1 package
+ - remove i-am-a-repo-pkg 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/2: [i-am-a-repo-pkg.1: extract]
++ tar "xfz" "${BASEDIR}/OPAM/download-cache/md5/pre/+archive-hash+" "-C" "${OPAMTMP}"
+-> retrieved i-am-a-repo-pkg.1 (cached)
+Processing 2/2: [i-am-a-repo-pkg: bash printer.sh]
++ bash "printer.sh" "...removing..." "opam-version:++current++" "switch:pkg-from-repo" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-repo-pkg" "version:1" "depends:dep.1" "installed:true" "enable:" "pinned:false" "bin:${BASEDIR}/OPAM/pkg-from-repo/bin" "sbin:${BASEDIR}/OPAM/pkg-from-repo/sbin" "lib:${BASEDIR}/OPAM/pkg-from-repo/lib" "man:${BASEDIR}/OPAM/pkg-from-repo/man" "doc:${BASEDIR}/OPAM/pkg-from-repo/doc" "share:${BASEDIR}/OPAM/pkg-from-repo/share" "etc:${BASEDIR}/OPAM/pkg-from-repo/etc" "build:${BASEDIR}/OPAM/pkg-from-repo/.opam-switch/build/i-am-a-repo-pkg.1" "hash:md5=+archive-hash+" "dev:false" "build-id:+hash+" "opamfile:${BASEDIR}/OPAM/pkg-from-repo/.opam-switch/packages/i-am-a-repo-pkg.1/opam" "installed-files:" (CWD=${BASEDIR}/OPAM/pkg-from-repo/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...removing...
+- opam-version:++current++
+- switch:pkg-from-repo
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-repo-pkg
+- version:1
+- depends:dep.1
+- installed:true
+- enable:
+- pinned:false
+- bin:${BASEDIR}/OPAM/pkg-from-repo/bin
+- sbin:${BASEDIR}/OPAM/pkg-from-repo/sbin
+- lib:${BASEDIR}/OPAM/pkg-from-repo/lib
+- man:${BASEDIR}/OPAM/pkg-from-repo/man
+- doc:${BASEDIR}/OPAM/pkg-from-repo/doc
+- share:${BASEDIR}/OPAM/pkg-from-repo/share
+- etc:${BASEDIR}/OPAM/pkg-from-repo/etc
+- build:${BASEDIR}/OPAM/pkg-from-repo/.opam-switch/build/i-am-a-repo-pkg.1
+- hash:md5=+archive-hash+
+- dev:false
+- build-id:+hash+
+- opamfile:${BASEDIR}/OPAM/pkg-from-repo/.opam-switch/packages/i-am-a-repo-pkg.1/opam
+- installed-files:
+-> removed i-am-a-repo-pkg.1
+Done.
+### ::::::::::::::::::::::
+### :: Package from pinned
+### ::::::::::::::::::::::
+###
+opam-version: "2.0"
+version: "6.28"
+depends: "dep"
+build: [ "bash" "printer.sh" "...building..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]
+install: [ "bash" "printer.sh" "...installing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]
+remove: [ "bash" "printer.sh" "...removing..." "opam-version:%{opam-version}%" "switch:%{switch}%" "jobs:%{jobs}%" "root:%{root}%" "make:%{make}%" "name:%{name}%" "version:%{version}%" "depends:%{depends}%" "installed:%{installed}%" "enable:%{enable}%" "pinned:%{pinned}%" "bin:%{bin}%" "sbin:%{sbin}%" "lib:%{lib}%" "man:%{man}%" "doc:%{doc}%" "share:%{share}%" "etc:%{etc}%" "build:%{build}%" "hash:%{hash}%" "dev:%{dev}%" "build-id:%{build-id}%" "opamfile:%{opamfile}%" "installed-files:%{installed-files}%" ]
+post-messages:
+"""...A last message...
+opam-version:%{opam-version}%
+switch:%{switch}%
+jobs:%{jobs}%
+root:%{root}%
+make:%{make}%
+name:%{name}%
+version:%{version}%
+depends:%{depends}%
+installed:%{installed}%
+enable:%{enable}%
+pinned:%{pinned}%
+bin:%{bin}%
+sbin:%{sbin}%
+lib:%{lib}%
+man:%{man}%
+doc:%{doc}%
+share:%{share}%
+etc:%{etc}%
+build:%{build}%
+hash:%{hash}%
+dev:%{dev}%
+build-id:%{build-id}%
+opamfile:%{opamfile}%
+with-dev-setup:%{with-dev-setup}%
+success:%{success}%
+failure:%{failure}%
+installed-files:%{installed-files}%
+"""
+### cp printer.sh dir/printer.sh
+### cp i-am-a-repo-pkg.install dir/i-a-am-a-pin-pkg.install
+### opam switch create pkg-from-pin --empty
+### OPAMVERBOSE=0 opam pin ./dir -yn
+[NOTE] Package i-am-a-pin-pkg does not exist in opam repositories registered in the current switch.
+i-am-a-pin-pkg is now pinned to file://${BASEDIR}/dir (version 6.28)
+### opam install dep
+The following actions will be performed:
+=== install 1 package
+ - install dep 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+-> installed dep.1
+Done.
+### opam install i-am-a-pin-pkg -vv | "${OPAMVERSION}" -> "++current++" | '[0-9a-z]{64}' -> '+hash+' | grep -v "total size" | sed-cmd bash rsync | etc -> etc
+
+<><> Synchronising pinned packages ><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/1: [i-am-a-pin-pkg.6.28: rsync]
++ rsync "-rLptgoDvc" "--exclude" ".git" "--exclude" "_darcs" "--exclude" ".hg" "--exclude" ".#*" "--exclude" "_opam*" "--exclude" "_build" "--delete" "--delete-excluded" "${BASEDIR}/dir/" "${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/sources/i-am-a-pin-pkg"
+-
+[i-am-a-pin-pkg.6.28] synchronised (no changes)
+
+The following actions will be performed:
+=== install 1 package
+ - install i-am-a-pin-pkg 6.28 (pinned)
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 2/3: [i-am-a-pin-pkg: bash printer.sh]
++ bash "printer.sh" "...building..." "opam-version:++current++" "switch:pkg-from-pin" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-pin-pkg" "version:6.28" "depends:dep.1" "installed:false" "enable:" "pinned:true" "bin:${BASEDIR}/OPAM/pkg-from-pin/bin" "sbin:${BASEDIR}/OPAM/pkg-from-pin/sbin" "lib:${BASEDIR}/OPAM/pkg-from-pin/lib" "man:${BASEDIR}/OPAM/pkg-from-pin/man" "doc:${BASEDIR}/OPAM/pkg-from-pin/doc" "share:${BASEDIR}/OPAM/pkg-from-pin/share" "etc:${BASEDIR}/OPAM/pkg-from-pin/etc" "build:${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/build/i-am-a-pin-pkg.6.28" "hash:" "dev:true" "build-id:" "opamfile:${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/overlay/i-am-a-pin-pkg/opam" "installed-files:" (CWD=${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/build/i-am-a-pin-pkg.6.28)
+- ...building...
+- opam-version:++current++
+- switch:pkg-from-pin
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-pin-pkg
+- version:6.28
+- depends:dep.1
+- installed:false
+- enable:
+- pinned:true
+- bin:${BASEDIR}/OPAM/pkg-from-pin/bin
+- sbin:${BASEDIR}/OPAM/pkg-from-pin/sbin
+- lib:${BASEDIR}/OPAM/pkg-from-pin/lib
+- man:${BASEDIR}/OPAM/pkg-from-pin/man
+- doc:${BASEDIR}/OPAM/pkg-from-pin/doc
+- share:${BASEDIR}/OPAM/pkg-from-pin/share
+- etc:${BASEDIR}/OPAM/pkg-from-pin/etc
+- build:${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/build/i-am-a-pin-pkg.6.28
+- hash:
+- dev:true
+- build-id:
+- opamfile:${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/overlay/i-am-a-pin-pkg/opam
+- installed-files:
+-> compiled i-am-a-pin-pkg.6.28
+Processing 3/3: [i-am-a-pin-pkg: bash printer.sh]
++ bash "printer.sh" "...installing..." "opam-version:++current++" "switch:pkg-from-pin" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-pin-pkg" "version:6.28" "depends:dep.1" "installed:false" "enable:" "pinned:true" "bin:${BASEDIR}/OPAM/pkg-from-pin/bin" "sbin:${BASEDIR}/OPAM/pkg-from-pin/sbin" "lib:${BASEDIR}/OPAM/pkg-from-pin/lib" "man:${BASEDIR}/OPAM/pkg-from-pin/man" "doc:${BASEDIR}/OPAM/pkg-from-pin/doc" "share:${BASEDIR}/OPAM/pkg-from-pin/share" "etc:${BASEDIR}/OPAM/pkg-from-pin/etc" "build:${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/build/i-am-a-pin-pkg.6.28" "hash:" "dev:true" "build-id:" "opamfile:${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/overlay/i-am-a-pin-pkg/opam" "installed-files:" (CWD=${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/build/i-am-a-pin-pkg.6.28)
+- ...installing...
+- opam-version:++current++
+- switch:pkg-from-pin
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-pin-pkg
+- version:6.28
+- depends:dep.1
+- installed:false
+- enable:
+- pinned:true
+- bin:${BASEDIR}/OPAM/pkg-from-pin/bin
+- sbin:${BASEDIR}/OPAM/pkg-from-pin/sbin
+- lib:${BASEDIR}/OPAM/pkg-from-pin/lib
+- man:${BASEDIR}/OPAM/pkg-from-pin/man
+- doc:${BASEDIR}/OPAM/pkg-from-pin/doc
+- share:${BASEDIR}/OPAM/pkg-from-pin/share
+- etc:${BASEDIR}/OPAM/pkg-from-pin/etc
+- build:${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/build/i-am-a-pin-pkg.6.28
+- hash:
+- dev:true
+- build-id:
+- opamfile:${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/overlay/i-am-a-pin-pkg/opam
+- installed-files:
+-> installed i-am-a-pin-pkg.6.28
+Done.
+
+<><> i-am-a-pin-pkg.6.28 installed successfully <><><><><><><><><><><><><><><><>
+=> ...A last message...
+ opam-version:++current++
+ switch:pkg-from-pin
+ jobs:2
+ root:${BASEDIR}/OPAM
+ make:make
+ name:i-am-a-pin-pkg
+ version:6.28
+ depends:dep.1
+ installed:true
+ enable:
+ pinned:true
+ bin:${BASEDIR}/OPAM/pkg-from-pin/bin
+ sbin:${BASEDIR}/OPAM/pkg-from-pin/sbin
+ lib:${BASEDIR}/OPAM/pkg-from-pin/lib
+ man:${BASEDIR}/OPAM/pkg-from-pin/man
+ doc:${BASEDIR}/OPAM/pkg-from-pin/doc
+ share:${BASEDIR}/OPAM/pkg-from-pin/share
+ etc:${BASEDIR}/OPAM/pkg-from-pin/etc
+ build:${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/build/i-am-a-pin-pkg.6.28
+ hash:
+ dev:true
+ build-id:
+ opamfile:${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/packages/i-am-a-pin-pkg.6.28/opam
+ with-dev-setup:false
+ success:true
+ failure:false
+ installed-files:
+### opam remove i-am-a-pin-pkg -vv | "${OPAMVERSION}" -> "++current++" | '[0-9a-z]{64}' -> '+hash+' | sed-cmd bash
+The following actions will be performed:
+=== remove 1 package
+ - remove i-am-a-pin-pkg 6.28 (pinned)
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 2/2: [i-am-a-pin-pkg: bash printer.sh]
++ bash "printer.sh" "...removing..." "opam-version:++current++" "switch:pkg-from-pin" "jobs:2" "root:${BASEDIR}/OPAM" "make:make" "name:i-am-a-pin-pkg" "version:6.28" "depends:dep.1" "installed:true" "enable:" "pinned:true" "bin:${BASEDIR}/OPAM/pkg-from-pin/bin" "sbin:${BASEDIR}/OPAM/pkg-from-pin/sbin" "lib:${BASEDIR}/OPAM/pkg-from-pin/lib" "man:${BASEDIR}/OPAM/pkg-from-pin/man" "doc:${BASEDIR}/OPAM/pkg-from-pin/doc" "share:${BASEDIR}/OPAM/pkg-from-pin/share" "etc:${BASEDIR}/OPAM/pkg-from-pin/etc" "build:${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/build/i-am-a-pin-pkg.6.28" "hash:" "dev:true" "build-id:" "opamfile:${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/packages/i-am-a-pin-pkg.6.28/opam" "installed-files:" (CWD=${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/remove/i-am-a-pin-pkg.6.28)
+- ...removing...
+- opam-version:++current++
+- switch:pkg-from-pin
+- jobs:2
+- root:${BASEDIR}/OPAM
+- make:make
+- name:i-am-a-pin-pkg
+- version:6.28
+- depends:dep.1
+- installed:true
+- enable:
+- pinned:true
+- bin:${BASEDIR}/OPAM/pkg-from-pin/bin
+- sbin:${BASEDIR}/OPAM/pkg-from-pin/sbin
+- lib:${BASEDIR}/OPAM/pkg-from-pin/lib
+- man:${BASEDIR}/OPAM/pkg-from-pin/man
+- doc:${BASEDIR}/OPAM/pkg-from-pin/doc
+- share:${BASEDIR}/OPAM/pkg-from-pin/share
+- etc:${BASEDIR}/OPAM/pkg-from-pin/etc
+- build:${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/build/i-am-a-pin-pkg.6.28
+- hash:
+- dev:true
+- build-id:
+- opamfile:${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/packages/i-am-a-pin-pkg.6.28/opam
+- installed-files:
+-> removed i-am-a-pin-pkg.6.28
+Done.
diff --git a/tests/reftests/hooks-variables.unix.test b/tests/reftests/hooks-variables.unix.test
new file mode 100644
index 00000000000..9eaf633f06d
--- /dev/null
+++ b/tests/reftests/hooks-variables.unix.test
@@ -0,0 +1,336 @@
+N0REP0
+### ## global_variable_names
+### # exe Suffix needed for executable filenames (Windows)
+### ::::::::
+### :: Setup
+### ::::::::
+### OPAMVERBOSE=2 OPAMYES=1
+###
+for i in "$@"; do
+ echo "$i"
+done
+###
+opam-version: "2.0"
+build: [ "a-build-command" ]
+install: [ "a-install-command" ]
+remove: [ "a-remove-command" ]
+### tar czf archive.tgz printer.sh
+### openssl md5 archive.tgz | '.*= ' -> '' >$ MD5
+### sh -c "echo '$MD5' | cut -c 1-2" >$ PRE_MD5
+###
+basedir=$(printf '%s' "$BASEDIR" | sed 's/\\/\\\\/g')
+cat << EOF >> REPO/packages/i-am-a-repo-pkg/i-am-a-repo-pkg.1/opam
+url {
+ src:"file://$basedir/archive.tgz"
+ checksum: "md5=$MD5"
+}
+EOF
+### sh add-url.sh
+### opam update
+
+<><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><>
+[default] synchronised from file://${BASEDIR}/REPO
+Processing: [default: loading data]
+Now run 'opam upgrade' to apply any package updates.
+### ::::::::::::::::::
+### :: Global wrappers
+### ::::::::::::::::::
+### mkdir -p OPAM/opam-init/hooks
+### cp printer.sh OPAM/opam-init/hooks/printer.sh
+### cp OPAM/config OPAM/config.bak
+### opam option --global 'pre-build-commands=[ "bash" "%{hooks}%/printer.sh" "...pre building..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...pre building..." "exe:%{exe}%" ]' the field pre-build-commands in global configuration
+### opam option --global 'pre-install-commands=[ "bash" "%{hooks}%/printer.sh" "...pre installing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...pre installing..." "exe:%{exe}%" ]' the field pre-install-commands in global configuration
+### opam option --global 'pre-remove-commands=[ "bash" "%{hooks}%/printer.sh" "...pre removing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...pre removing..." "exe:%{exe}%" ]' the field pre-remove-commands in global configuration
+### opam option --global 'wrap-build-commands=[ "bash" "%{hooks}%/printer.sh" "...building..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...building..." "exe:%{exe}%" ]' the field wrap-build-commands in global configuration
+### opam option --global 'wrap-install-commands=[ "bash" "%{hooks}%/printer.sh" "...installing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...installing..." "exe:%{exe}%" ]' the field wrap-install-commands in global configuration
+### opam option --global 'wrap-remove-commands=[ "bash" "%{hooks}%/printer.sh" "...removing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...removing..." "exe:%{exe}%" ]' the field wrap-remove-commands in global configuration
+### opam option --global 'post-build-commands=[ "bash" "%{hooks}%/printer.sh" "...post-building..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...post-building..." "exe:%{exe}%" ]' the field post-build-commands in global configuration
+### opam option --global 'post-install-commands=[ "bash" "%{hooks}%/printer.sh" "...post-installing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...post-installing..." "exe:%{exe}%" ]' the field post-install-commands in global configuration
+### opam option --global 'post-remove-commands=[ "bash" "%{hooks}%/printer.sh" "...post-removing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...post-removing..." "exe:%{exe}%" ]' the field post-remove-commands in global configuration
+### opam switch create global-wrappers --empty
+### opam install i-am-a-repo-pkg | $MD5 -> +archive-hash+ | sed-cmd bash tar rsync
+The following actions will be performed:
+=== install 1 package
+ - install i-am-a-repo-pkg 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/3: [i-am-a-repo-pkg.1: rsync]
++ rsync "-rLptgoDvc" "--exclude" ".git" "--exclude" "_darcs" "--exclude" ".hg" "--exclude" ".#*" "--exclude" "_opam*" "--exclude" "_build" "--delete" "--delete-excluded" "${BASEDIR}/archive.tgz" "${OPAMTMP}"
+- archive.tgz
+-
+Processing 1/3: [i-am-a-repo-pkg.1: extract]
++ tar "xfz" "${OPAMTMP}/archive.tgz" "-C" "${OPAMTMP}"
+-> retrieved i-am-a-repo-pkg.1 (file://${BASEDIR}/archive.tgz)
+Processing 2/3: [i-am-a-repo-pkg: bash ...pre building...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...pre building..." "exe:" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...pre building...
+- exe:
+Processing 2/3: [i-am-a-repo-pkg: a-build-command]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...building..." "exe:" "a-build-command" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...building...
+- exe:
+- a-build-command
+Processing 2/3: [i-am-a-repo-pkg: bash ...post-building...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...post-building..." "exe:" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...post-building...
+- exe:
+-> compiled i-am-a-repo-pkg.1
+Processing 3/3: [i-am-a-repo-pkg: bash ...pre installing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...pre installing..." "exe:" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...pre installing...
+- exe:
+Processing 3/3: [i-am-a-repo-pkg: a-install-command]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...installing..." "exe:" "a-install-command" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...installing...
+- exe:
+- a-install-command
+Processing 3/3: [i-am-a-repo-pkg: bash ...post-installing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...post-installing..." "exe:" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...post-installing...
+- exe:
+-> installed i-am-a-repo-pkg.1
+Done.
+### opam remove i-am-a-repo-pkg | $MD5 -> +archive-hash+ | '/md5/$PRE_MD5/' -> '/md5/pre/' | sed-cmd bash tar
+The following actions will be performed:
+=== remove 1 package
+ - remove i-am-a-repo-pkg 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/2: [i-am-a-repo-pkg.1: extract]
++ tar "xfz" "${BASEDIR}/OPAM/download-cache/md5/pre/+archive-hash+" "-C" "${OPAMTMP}"
+-> retrieved i-am-a-repo-pkg.1 (cached)
+Processing 2/2: [i-am-a-repo-pkg: bash ...pre removing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...pre removing..." "exe:" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...pre removing...
+- exe:
+Processing 2/2: [i-am-a-repo-pkg: a-remove-command]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...removing..." "exe:" "a-remove-command" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...removing...
+- exe:
+- a-remove-command
+Processing 2/2: [i-am-a-repo-pkg: bash ...post-removing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...post-removing..." "exe:" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...post-removing...
+- exe:
+-> removed i-am-a-repo-pkg.1
+Done.
+### cp OPAM/config.bak OPAM/config
+### ::::::::::::::::::
+### :: Switch wrappers
+### ::::::::::::::::::
+### opam switch create switch-wrappers --empty
+### opam option --switch switch-wrappers 'pre-build-commands=[ "bash" "%{hooks}%/printer.sh" "...pre building..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...pre building..." "exe:%{exe}%" ]' the field pre-build-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'pre-install-commands=[ "bash" "%{hooks}%/printer.sh" "...pre installing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...pre installing..." "exe:%{exe}%" ]' the field pre-install-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'pre-remove-commands=[ "bash" "%{hooks}%/printer.sh" "...pre removing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...pre removing..." "exe:%{exe}%" ]' the field pre-remove-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'wrap-build-commands=[ "bash" "%{hooks}%/printer.sh" "...building..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...building..." "exe:%{exe}%" ]' the field wrap-build-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'wrap-install-commands=[ "bash" "%{hooks}%/printer.sh" "...installing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...installing..." "exe:%{exe}%" ]' the field wrap-install-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'wrap-remove-commands=[ "bash" "%{hooks}%/printer.sh" "...removing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...removing..." "exe:%{exe}%" ]' the field wrap-remove-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'post-build-commands=[ "bash" "%{hooks}%/printer.sh" "...post-building..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...post-building..." "exe:%{exe}%" ]' the field post-build-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'post-install-commands=[ "bash" "%{hooks}%/printer.sh" "...post-installing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...post-installing..." "exe:%{exe}%" ]' the field post-install-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'post-remove-commands=[ "bash" "%{hooks}%/printer.sh" "...post-removing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...post-removing..." "exe:%{exe}%" ]' the field post-remove-commands in switch switch-wrappers
+### opam install i-am-a-repo-pkg | $MD5 -> +archive-hash+ | '/md5/$PRE_MD5/' -> '/md5/pre/' | sed-cmd bash tar
+The following actions will be performed:
+=== install 1 package
+ - install i-am-a-repo-pkg 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/3: [i-am-a-repo-pkg.1: extract]
++ tar "xfz" "${BASEDIR}/OPAM/download-cache/md5/pre/+archive-hash+" "-C" "${OPAMTMP}"
+-> retrieved i-am-a-repo-pkg.1 (cached)
+Processing 2/3: [i-am-a-repo-pkg: bash ...pre building...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...pre building..." "exe:" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...pre building...
+- exe:
+Processing 2/3: [i-am-a-repo-pkg: a-build-command]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...building..." "exe:" "a-build-command" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...building...
+- exe:
+- a-build-command
+Processing 2/3: [i-am-a-repo-pkg: bash ...post-building...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...post-building..." "exe:" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...post-building...
+- exe:
+-> compiled i-am-a-repo-pkg.1
+Processing 3/3: [i-am-a-repo-pkg: bash ...pre installing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...pre installing..." "exe:" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...pre installing...
+- exe:
+Processing 3/3: [i-am-a-repo-pkg: a-install-command]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...installing..." "exe:" "a-install-command" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...installing...
+- exe:
+- a-install-command
+Processing 3/3: [i-am-a-repo-pkg: bash ...post-installing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...post-installing..." "exe:" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...post-installing...
+- exe:
+-> installed i-am-a-repo-pkg.1
+Done.
+### opam remove i-am-a-repo-pkg | $MD5 -> +archive-hash+ | '/md5/$PRE_MD5/' -> '/md5/pre/' | sed-cmd bash tar
+The following actions will be performed:
+=== remove 1 package
+ - remove i-am-a-repo-pkg 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/2: [i-am-a-repo-pkg.1: extract]
++ tar "xfz" "${BASEDIR}/OPAM/download-cache/md5/pre/+archive-hash+" "-C" "${OPAMTMP}"
+-> retrieved i-am-a-repo-pkg.1 (cached)
+Processing 2/2: [i-am-a-repo-pkg: bash ...pre removing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...pre removing..." "exe:" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...pre removing...
+- exe:
+Processing 2/2: [i-am-a-repo-pkg: a-remove-command]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...removing..." "exe:" "a-remove-command" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...removing...
+- exe:
+- a-remove-command
+Processing 2/2: [i-am-a-repo-pkg: bash ...post-removing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...post-removing..." "exe:" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...post-removing...
+- exe:
+-> removed i-am-a-repo-pkg.1
+Done.
+### ::::::::::::::::::::
+### :: Package from repo
+### ::::::::::::::::::::
+### # "build:%{build}%" "post:%{post}%" "with-test:%{with-test}%" "with-doc:%{with-doc}%" "with-dev-setup:%{with-dev-setup}%" "dev:%{dev}%"
+###
+opam-version: "2.0"
+build: [ "bash" "printer.sh" "...building..." "exe:%{exe}%" ]
+install: [ "bash" "printer.sh" "...installing..." "exe:%{exe}%" ]
+remove: [ "bash" "printer.sh" "...removing..." "exe:%{exe}%" ]
+post-messages:
+"""...A last message...
+exe:%{exe}%
+"""
+###
+basedir=$(printf '%s' "$BASEDIR" | sed 's/\\/\\\\/g')
+cat << EOF >> REPO/packages/i-am-a-repo-pkg/i-am-a-repo-pkg.1/opam
+url {
+ src:"file://$basedir/archive.tgz"
+ checksum: "md5=$(openssl md5 archive.tgz | cut -f2 -d' ')"
+}
+EOF
+### sh add-url.sh
+### opam update
+
+<><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><>
+[default] synchronised from file://${BASEDIR}/REPO
+Processing: [default: loading data]
+Now run 'opam upgrade' to apply any package updates.
+### opam switch create pkg-from-repo --empty
+### opam install i-am-a-repo-pkg | $MD5 -> +archive-hash+ | '/md5/$PRE_MD5/' -> '/md5/pre/' | sed-cmd bash tar
+The following actions will be performed:
+=== install 1 package
+ - install i-am-a-repo-pkg 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/3: [i-am-a-repo-pkg.1: extract]
++ tar "xfz" "${BASEDIR}/OPAM/download-cache/md5/pre/+archive-hash+" "-C" "${OPAMTMP}"
+-> retrieved i-am-a-repo-pkg.1 (cached)
+Processing 2/3: [i-am-a-repo-pkg: bash printer.sh]
++ bash "printer.sh" "...building..." "exe:" (CWD=${BASEDIR}/OPAM/pkg-from-repo/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...building...
+- exe:
+-> compiled i-am-a-repo-pkg.1
+Processing 3/3: [i-am-a-repo-pkg: bash printer.sh]
++ bash "printer.sh" "...installing..." "exe:" (CWD=${BASEDIR}/OPAM/pkg-from-repo/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...installing...
+- exe:
+-> installed i-am-a-repo-pkg.1
+Done.
+
+<><> i-am-a-repo-pkg.1 installed successfully <><><><><><><><><><><><><><><><><>
+=> ...A last message...
+ exe:
+### opam remove i-am-a-repo-pkg | $MD5 -> +archive-hash+ | '/md5/$PRE_MD5/' -> '/md5/pre/' | sed-cmd bash tar
+The following actions will be performed:
+=== remove 1 package
+ - remove i-am-a-repo-pkg 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/2: [i-am-a-repo-pkg.1: extract]
++ tar "xfz" "${BASEDIR}/OPAM/download-cache/md5/pre/+archive-hash+" "-C" "${OPAMTMP}"
+-> retrieved i-am-a-repo-pkg.1 (cached)
+Processing 2/2: [i-am-a-repo-pkg: bash printer.sh]
++ bash "printer.sh" "...removing..." "exe:" (CWD=${BASEDIR}/OPAM/pkg-from-repo/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...removing...
+- exe:
+-> removed i-am-a-repo-pkg.1
+Done.
+### ::::::::::::::::::::::
+### :: Package from pinned
+### ::::::::::::::::::::::
+###
+opam-version: "2.0"
+version: "6.28"
+build: [ "bash" "printer.sh" "...building..." "exe:%{exe}%" ]
+install: [ "bash" "printer.sh" "...installing..." "exe:%{exe}%" ]
+remove: [ "bash" "printer.sh" "...removing..." "exe:%{exe}%" ]
+post-messages:
+"""...A last message...
+exe:%{exe}%
+"""
+### cp printer.sh dir/printer.sh
+### opam switch create pkg-from-pin --empty
+### OPAMVERBOSE=0 opam pin ./dir -yn
+[NOTE] Package i-am-a-pin-pkg does not exist in opam repositories registered in the current switch.
+i-am-a-pin-pkg is now pinned to file://${BASEDIR}/dir (version 6.28)
+### opam install i-am-a-pin-pkg | grep -v "total size" | sed-cmd bash rsync
+
+<><> Synchronising pinned packages ><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/1: [i-am-a-pin-pkg.6.28: rsync]
++ rsync "-rLptgoDvc" "--exclude" ".git" "--exclude" "_darcs" "--exclude" ".hg" "--exclude" ".#*" "--exclude" "_opam*" "--exclude" "_build" "--delete" "--delete-excluded" "${BASEDIR}/dir/" "${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/sources/i-am-a-pin-pkg"
+-
+[i-am-a-pin-pkg.6.28] synchronised (no changes)
+
+The following actions will be performed:
+=== install 1 package
+ - install i-am-a-pin-pkg 6.28 (pinned)
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 2/3: [i-am-a-pin-pkg: bash printer.sh]
++ bash "printer.sh" "...building..." "exe:" (CWD=${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/build/i-am-a-pin-pkg.6.28)
+- ...building...
+- exe:
+-> compiled i-am-a-pin-pkg.6.28
+Processing 3/3: [i-am-a-pin-pkg: bash printer.sh]
++ bash "printer.sh" "...installing..." "exe:" (CWD=${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/build/i-am-a-pin-pkg.6.28)
+- ...installing...
+- exe:
+-> installed i-am-a-pin-pkg.6.28
+Done.
+
+<><> i-am-a-pin-pkg.6.28 installed successfully <><><><><><><><><><><><><><><><>
+=> ...A last message...
+ exe:
+### opam remove i-am-a-pin-pkg | sed-cmd bash
+The following actions will be performed:
+=== remove 1 package
+ - remove i-am-a-pin-pkg 6.28 (pinned)
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 2/2: [i-am-a-pin-pkg: bash printer.sh]
++ bash "printer.sh" "...removing..." "exe:" (CWD=${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/remove/i-am-a-pin-pkg.6.28)
+- ...removing...
+- exe:
+-> removed i-am-a-pin-pkg.6.28
+Done.
diff --git a/tests/reftests/hooks-variables.win32.test b/tests/reftests/hooks-variables.win32.test
new file mode 100644
index 00000000000..3d3fc2065cc
--- /dev/null
+++ b/tests/reftests/hooks-variables.win32.test
@@ -0,0 +1,336 @@
+N0REP0
+### ## global_variable_names
+### # exe Suffix needed for executable filenames (Windows)
+### ::::::::
+### :: Setup
+### ::::::::
+### OPAMVERBOSE=2 OPAMYES=1
+###
+for i in "$@"; do
+ echo "$i"
+done
+###
+opam-version: "2.0"
+build: [ "a-build-command" ]
+install: [ "a-install-command" ]
+remove: [ "a-remove-command" ]
+### tar czf archive.tgz printer.sh
+### openssl md5 archive.tgz | '.*= ' -> '' >$ MD5
+### sh -c "echo '$MD5' | cut -c 1-2" >$ PRE_MD5
+###
+basedir=$(printf '%s' "$BASEDIR" | sed 's/\\/\\\\/g')
+cat << EOF >> REPO/packages/i-am-a-repo-pkg/i-am-a-repo-pkg.1/opam
+url {
+ src:"file://$basedir/archive.tgz"
+ checksum: "md5=$MD5"
+}
+EOF
+### sh add-url.sh
+### opam update
+
+<><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><>
+[default] synchronised from file://${BASEDIR}/REPO
+Processing: [default: loading data]
+Now run 'opam upgrade' to apply any package updates.
+### ::::::::::::::::::
+### :: Global wrappers
+### ::::::::::::::::::
+### mkdir -p OPAM/opam-init/hooks
+### cp printer.sh OPAM/opam-init/hooks/printer.sh
+### cp OPAM/config OPAM/config.bak
+### opam option --global 'pre-build-commands=[ "bash" "%{hooks}%/printer.sh" "...pre building..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...pre building..." "exe:%{exe}%" ]' the field pre-build-commands in global configuration
+### opam option --global 'pre-install-commands=[ "bash" "%{hooks}%/printer.sh" "...pre installing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...pre installing..." "exe:%{exe}%" ]' the field pre-install-commands in global configuration
+### opam option --global 'pre-remove-commands=[ "bash" "%{hooks}%/printer.sh" "...pre removing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...pre removing..." "exe:%{exe}%" ]' the field pre-remove-commands in global configuration
+### opam option --global 'wrap-build-commands=[ "bash" "%{hooks}%/printer.sh" "...building..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...building..." "exe:%{exe}%" ]' the field wrap-build-commands in global configuration
+### opam option --global 'wrap-install-commands=[ "bash" "%{hooks}%/printer.sh" "...installing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...installing..." "exe:%{exe}%" ]' the field wrap-install-commands in global configuration
+### opam option --global 'wrap-remove-commands=[ "bash" "%{hooks}%/printer.sh" "...removing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...removing..." "exe:%{exe}%" ]' the field wrap-remove-commands in global configuration
+### opam option --global 'post-build-commands=[ "bash" "%{hooks}%/printer.sh" "...post-building..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...post-building..." "exe:%{exe}%" ]' the field post-build-commands in global configuration
+### opam option --global 'post-install-commands=[ "bash" "%{hooks}%/printer.sh" "...post-installing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...post-installing..." "exe:%{exe}%" ]' the field post-install-commands in global configuration
+### opam option --global 'post-remove-commands=[ "bash" "%{hooks}%/printer.sh" "...post-removing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...post-removing..." "exe:%{exe}%" ]' the field post-remove-commands in global configuration
+### opam switch create global-wrappers --empty
+### opam install i-am-a-repo-pkg | sed-cmd bash tar rsync
+The following actions will be performed:
+=== install 1 package
+ - install i-am-a-repo-pkg 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/3: [i-am-a-repo-pkg.1: rsync]
++ rsync "-rLptgoDvc" "--exclude" ".git" "--exclude" "_darcs" "--exclude" ".hg" "--exclude" ".#*" "--exclude" "_opam*" "--exclude" "_build" "--delete" "--delete-excluded" "${BASEDIR}/archive.tgz" "${OPAMTMP}"
+- archive.tgz
+-
+Processing 1/3: [i-am-a-repo-pkg.1: extract]
++ tar "xfz" "${OPAMTMP}/archive.tgz" "-C" "${OPAMTMP}"
+-> retrieved i-am-a-repo-pkg.1 (file://${BASEDIR}/archive.tgz)
+Processing 2/3: [i-am-a-repo-pkg: bash ...pre building...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...pre building..." "exe:.exe" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...pre building...
+- exe:.exe
+Processing 2/3: [i-am-a-repo-pkg: a-build-command]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...building..." "exe:.exe" "a-build-command" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...building...
+- exe:.exe
+- a-build-command
+Processing 2/3: [i-am-a-repo-pkg: bash ...post-building...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...post-building..." "exe:.exe" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...post-building...
+- exe:.exe
+-> compiled i-am-a-repo-pkg.1
+Processing 3/3: [i-am-a-repo-pkg: bash ...pre installing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...pre installing..." "exe:.exe" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...pre installing...
+- exe:.exe
+Processing 3/3: [i-am-a-repo-pkg: a-install-command]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...installing..." "exe:.exe" "a-install-command" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...installing...
+- exe:.exe
+- a-install-command
+Processing 3/3: [i-am-a-repo-pkg: bash ...post-installing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...post-installing..." "exe:.exe" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...post-installing...
+- exe:.exe
+-> installed i-am-a-repo-pkg.1
+Done.
+### opam remove i-am-a-repo-pkg | '${PRE_MD5}..?${MD5}' -> pre/+archive-hash+ | sed-cmd bash tar
+The following actions will be performed:
+=== remove 1 package
+ - remove i-am-a-repo-pkg 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/2: [i-am-a-repo-pkg.1: extract]
++ tar "xfz" "${BASEDIR}/OPAM/download-cache/md5/pre/+archive-hash+" "-C" "${OPAMTMP}"
+-> retrieved i-am-a-repo-pkg.1 (cached)
+Processing 2/2: [i-am-a-repo-pkg: bash ...pre removing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...pre removing..." "exe:.exe" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...pre removing...
+- exe:.exe
+Processing 2/2: [i-am-a-repo-pkg: a-remove-command]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...removing..." "exe:.exe" "a-remove-command" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...removing...
+- exe:.exe
+- a-remove-command
+Processing 2/2: [i-am-a-repo-pkg: bash ...post-removing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...post-removing..." "exe:.exe" (CWD=${BASEDIR}/OPAM/global-wrappers/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...post-removing...
+- exe:.exe
+-> removed i-am-a-repo-pkg.1
+Done.
+### cp OPAM/config.bak OPAM/config
+### ::::::::::::::::::
+### :: Switch wrappers
+### ::::::::::::::::::
+### opam switch create switch-wrappers --empty
+### opam option --switch switch-wrappers 'pre-build-commands=[ "bash" "%{hooks}%/printer.sh" "...pre building..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...pre building..." "exe:%{exe}%" ]' the field pre-build-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'pre-install-commands=[ "bash" "%{hooks}%/printer.sh" "...pre installing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...pre installing..." "exe:%{exe}%" ]' the field pre-install-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'pre-remove-commands=[ "bash" "%{hooks}%/printer.sh" "...pre removing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...pre removing..." "exe:%{exe}%" ]' the field pre-remove-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'wrap-build-commands=[ "bash" "%{hooks}%/printer.sh" "...building..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...building..." "exe:%{exe}%" ]' the field wrap-build-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'wrap-install-commands=[ "bash" "%{hooks}%/printer.sh" "...installing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...installing..." "exe:%{exe}%" ]' the field wrap-install-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'wrap-remove-commands=[ "bash" "%{hooks}%/printer.sh" "...removing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...removing..." "exe:%{exe}%" ]' the field wrap-remove-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'post-build-commands=[ "bash" "%{hooks}%/printer.sh" "...post-building..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...post-building..." "exe:%{exe}%" ]' the field post-build-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'post-install-commands=[ "bash" "%{hooks}%/printer.sh" "...post-installing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...post-installing..." "exe:%{exe}%" ]' the field post-install-commands in switch switch-wrappers
+### opam option --switch switch-wrappers 'post-remove-commands=[ "bash" "%{hooks}%/printer.sh" "...post-removing..." "exe:%{exe}%" ]'
+Set to '[ "bash" "%{hooks}%/printer.sh" "...post-removing..." "exe:%{exe}%" ]' the field post-remove-commands in switch switch-wrappers
+### opam install i-am-a-repo-pkg | '${PRE_MD5}..?${MD5}' -> pre/+archive-hash+ | sed-cmd bash tar
+The following actions will be performed:
+=== install 1 package
+ - install i-am-a-repo-pkg 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/3: [i-am-a-repo-pkg.1: extract]
++ tar "xfz" "${BASEDIR}/OPAM/download-cache/md5/pre/+archive-hash+" "-C" "${OPAMTMP}"
+-> retrieved i-am-a-repo-pkg.1 (cached)
+Processing 2/3: [i-am-a-repo-pkg: bash ...pre building...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...pre building..." "exe:.exe" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...pre building...
+- exe:.exe
+Processing 2/3: [i-am-a-repo-pkg: a-build-command]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...building..." "exe:.exe" "a-build-command" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...building...
+- exe:.exe
+- a-build-command
+Processing 2/3: [i-am-a-repo-pkg: bash ...post-building...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...post-building..." "exe:.exe" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...post-building...
+- exe:.exe
+-> compiled i-am-a-repo-pkg.1
+Processing 3/3: [i-am-a-repo-pkg: bash ...pre installing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...pre installing..." "exe:.exe" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...pre installing...
+- exe:.exe
+Processing 3/3: [i-am-a-repo-pkg: a-install-command]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...installing..." "exe:.exe" "a-install-command" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...installing...
+- exe:.exe
+- a-install-command
+Processing 3/3: [i-am-a-repo-pkg: bash ...post-installing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...post-installing..." "exe:.exe" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...post-installing...
+- exe:.exe
+-> installed i-am-a-repo-pkg.1
+Done.
+### opam remove i-am-a-repo-pkg | '${PRE_MD5}..?${MD5}' -> pre/+archive-hash+ | sed-cmd bash tar
+The following actions will be performed:
+=== remove 1 package
+ - remove i-am-a-repo-pkg 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/2: [i-am-a-repo-pkg.1: extract]
++ tar "xfz" "${BASEDIR}/OPAM/download-cache/md5/pre/+archive-hash+" "-C" "${OPAMTMP}"
+-> retrieved i-am-a-repo-pkg.1 (cached)
+Processing 2/2: [i-am-a-repo-pkg: bash ...pre removing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...pre removing..." "exe:.exe" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...pre removing...
+- exe:.exe
+Processing 2/2: [i-am-a-repo-pkg: a-remove-command]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...removing..." "exe:.exe" "a-remove-command" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...removing...
+- exe:.exe
+- a-remove-command
+Processing 2/2: [i-am-a-repo-pkg: bash ...post-removing...]
++ bash "${BASEDIR}/OPAM/opam-init/hooks/printer.sh" "...post-removing..." "exe:.exe" (CWD=${BASEDIR}/OPAM/switch-wrappers/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...post-removing...
+- exe:.exe
+-> removed i-am-a-repo-pkg.1
+Done.
+### ::::::::::::::::::::
+### :: Package from repo
+### ::::::::::::::::::::
+### # "build:%{build}%" "post:%{post}%" "with-test:%{with-test}%" "with-doc:%{with-doc}%" "with-dev-setup:%{with-dev-setup}%" "dev:%{dev}%"
+###
+opam-version: "2.0"
+build: [ "bash" "printer.sh" "...building..." "exe:%{exe}%" ]
+install: [ "bash" "printer.sh" "...installing..." "exe:%{exe}%" ]
+remove: [ "bash" "printer.sh" "...removing..." "exe:%{exe}%" ]
+post-messages:
+"""...A last message...
+exe:%{exe}%
+"""
+###
+basedir=$(printf '%s' "$BASEDIR" | sed 's/\\/\\\\/g')
+cat << EOF >> REPO/packages/i-am-a-repo-pkg/i-am-a-repo-pkg.1/opam
+url {
+ src:"file://$basedir/archive.tgz"
+ checksum: "md5=$(openssl md5 archive.tgz | cut -f2 -d' ')"
+}
+EOF
+### sh add-url.sh
+### opam update
+
+<><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><>
+[default] synchronised from file://${BASEDIR}/REPO
+Processing: [default: loading data]
+Now run 'opam upgrade' to apply any package updates.
+### opam switch create pkg-from-repo --empty
+### opam install i-am-a-repo-pkg | '${PRE_MD5}..?${MD5}' -> pre/+archive-hash+ | sed-cmd bash tar
+The following actions will be performed:
+=== install 1 package
+ - install i-am-a-repo-pkg 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/3: [i-am-a-repo-pkg.1: extract]
++ tar "xfz" "${BASEDIR}/OPAM/download-cache/md5/pre/+archive-hash+" "-C" "${OPAMTMP}"
+-> retrieved i-am-a-repo-pkg.1 (cached)
+Processing 2/3: [i-am-a-repo-pkg: bash printer.sh]
++ bash "printer.sh" "...building..." "exe:.exe" (CWD=${BASEDIR}/OPAM/pkg-from-repo/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...building...
+- exe:.exe
+-> compiled i-am-a-repo-pkg.1
+Processing 3/3: [i-am-a-repo-pkg: bash printer.sh]
++ bash "printer.sh" "...installing..." "exe:.exe" (CWD=${BASEDIR}/OPAM/pkg-from-repo/.opam-switch/build/i-am-a-repo-pkg.1)
+- ...installing...
+- exe:.exe
+-> installed i-am-a-repo-pkg.1
+Done.
+
+<><> i-am-a-repo-pkg.1 installed successfully <><><><><><><><><><><><><><><><><>
+=> ...A last message...
+ exe:.exe
+### opam remove i-am-a-repo-pkg | '${PRE_MD5}..?${MD5}' -> pre/+archive-hash+ | sed-cmd bash tar
+The following actions will be performed:
+=== remove 1 package
+ - remove i-am-a-repo-pkg 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/2: [i-am-a-repo-pkg.1: extract]
++ tar "xfz" "${BASEDIR}/OPAM/download-cache/md5/pre/+archive-hash+" "-C" "${OPAMTMP}"
+-> retrieved i-am-a-repo-pkg.1 (cached)
+Processing 2/2: [i-am-a-repo-pkg: bash printer.sh]
++ bash "printer.sh" "...removing..." "exe:.exe" (CWD=${BASEDIR}/OPAM/pkg-from-repo/.opam-switch/remove/i-am-a-repo-pkg.1)
+- ...removing...
+- exe:.exe
+-> removed i-am-a-repo-pkg.1
+Done.
+### ::::::::::::::::::::::
+### :: Package from pinned
+### ::::::::::::::::::::::
+###
+opam-version: "2.0"
+version: "6.28"
+build: [ "bash" "printer.sh" "...building..." "exe:%{exe}%" ]
+install: [ "bash" "printer.sh" "...installing..." "exe:%{exe}%" ]
+remove: [ "bash" "printer.sh" "...removing..." "exe:%{exe}%" ]
+post-messages:
+"""...A last message...
+exe:%{exe}%
+"""
+### cp printer.sh dir/printer.sh
+### opam switch create pkg-from-pin --empty
+### OPAMVERBOSE=0 opam pin ./dir -yn
+[NOTE] Package i-am-a-pin-pkg does not exist in opam repositories registered in the current switch.
+i-am-a-pin-pkg is now pinned to file://${BASEDIR}/dir (version 6.28)
+### opam install i-am-a-pin-pkg | grep -v "total size" | sed-cmd bash rsync
+
+<><> Synchronising pinned packages ><><><><><><><><><><><><><><><><><><><><><><>
+Processing 1/1: [i-am-a-pin-pkg.6.28: rsync]
++ rsync "-rLptgoDvc" "--exclude" ".git" "--exclude" "_darcs" "--exclude" ".hg" "--exclude" ".#*" "--exclude" "_opam*" "--exclude" "_build" "--delete" "--delete-excluded" "${BASEDIR}/dir/" "${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/sources/i-am-a-pin-pkg"
+-
+[i-am-a-pin-pkg.6.28] synchronised (no changes)
+
+The following actions will be performed:
+=== install 1 package
+ - install i-am-a-pin-pkg 6.28 (pinned)
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 2/3: [i-am-a-pin-pkg: bash printer.sh]
++ bash "printer.sh" "...building..." "exe:.exe" (CWD=${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/build/i-am-a-pin-pkg.6.28)
+- ...building...
+- exe:.exe
+-> compiled i-am-a-pin-pkg.6.28
+Processing 3/3: [i-am-a-pin-pkg: bash printer.sh]
++ bash "printer.sh" "...installing..." "exe:.exe" (CWD=${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/build/i-am-a-pin-pkg.6.28)
+- ...installing...
+- exe:.exe
+-> installed i-am-a-pin-pkg.6.28
+Done.
+
+<><> i-am-a-pin-pkg.6.28 installed successfully <><><><><><><><><><><><><><><><>
+=> ...A last message...
+ exe:.exe
+### opam remove i-am-a-pin-pkg | sed-cmd bash
+The following actions will be performed:
+=== remove 1 package
+ - remove i-am-a-pin-pkg 6.28 (pinned)
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+Processing 2/2: [i-am-a-pin-pkg: bash printer.sh]
++ bash "printer.sh" "...removing..." "exe:.exe" (CWD=${BASEDIR}/OPAM/pkg-from-pin/.opam-switch/remove/i-am-a-pin-pkg.6.28)
+- ...removing...
+- exe:.exe
+-> removed i-am-a-pin-pkg.6.28
+Done.
diff --git a/tests/reftests/var-option.test b/tests/reftests/var-option.test
index 780353b8995..8a8c9af8662 100644
--- a/tests/reftests/var-option.test
+++ b/tests/reftests/var-option.test
@@ -759,3 +759,90 @@ Set to '["otherpkg"]' the field depext-bypass in global configuration
### opam option depext-bypass=["yetanotherpkg"] --switch phantom
[ERROR] The selected switch phantom is not installed
# Return code 2 #
+### ::: What is the path for PKG:opamfile
+### opam switch create --empty var-opamfile
+### :a: present in the repo but not installed
+###
+opam-version: "2.0"
+### opam option --switch=var-opamfile 'pre-build-commands=["cat" opamfile]'
+Set to '["cat" opamfile]' the field pre-build-commands in switch var-opamfile
+### opam var test:opamfile
+[ERROR] Variable test:opamfile not found in switch var-opamfile; package test is not installed in this switch
+# Return code 5 #
+### :b: present in the repo and installed
+### opam install -v test | grep -v '^Processing ' | sed-cmd cat
+The following actions will be performed:
+=== install 1 package
+ - install test 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
++ cat "${OPAMTMP}/opam" (CWD=${BASEDIR}/OPAM/var-opamfile/.opam-switch/build/test.1)
+- opam-version: "2.0"
+- name: "test"
+- version: "1"
+-> installed test.1
+Done.
+### opam var test:opamfile
+${BASEDIR}/OPAM/var-opamfile/.opam-switch/packages/test.1/opam
+### :c: not present in the repo but installed
+### rm REPO/packages/test/test.1/opam
+### opam update
+
+<><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><>
+[default] synchronised from file://${BASEDIR}/REPO
+Now run 'opam upgrade' to apply any package updates.
+### opam var test:opamfile
+${BASEDIR}/OPAM/var-opamfile/.opam-switch/packages/test.1/opam
+### :d: not present in the repo and not installed
+### opam remove test
+The following actions will be performed:
+=== remove 1 package
+ - remove test 1
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+-> removed test.1
+Done.
+### opam var test:opamfile
+[ERROR] Variable test:opamfile not found in switch var-opamfile; package test is not installed in this switch
+# Return code 5 #
+### :e: pinned but not installed
+###
+opam-version: "2.0"
+### opam pin add -n ./pinned-opamfile-test
+[NOTE] Package pinned-opamfile-test does not exist in opam repositories registered in the current switch.
+pinned-opamfile-test is now pinned to file://${BASEDIR}/pinned-opamfile-test (version dev)
+### opam var pinned-opamfile-test:opamfile
+[ERROR] Variable pinned-opamfile-test:opamfile not found in switch var-opamfile; package pinned-opamfile-test is not installed in this switch
+# Return code 5 #
+### :f: pinned and installed
+### opam install -v pinned-opamfile-test | grep -v '^Processing ' | sed-cmd cat
+
+<><> Synchronising pinned packages ><><><><><><><><><><><><><><><><><><><><><><>
+[pinned-opamfile-test.dev] synchronised (no changes)
+
+The following actions will be performed:
+=== install 1 package
+ - install pinned-opamfile-test dev (pinned)
+
+<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+-> retrieved pinned-opamfile-test.dev (file://${BASEDIR}/pinned-opamfile-test)
++ cat "${BASEDIR}/OPAM/var-opamfile/.opam-switch/overlay/pinned-opamfile-test/opam" (CWD=${BASEDIR}/OPAM/var-opamfile/.opam-switch/build/pinned-opamfile-test.dev)
+- opam-version: "2.0"
+- synopsis: "A word"
+- description: "Two words."
+- authors: "the testing team"
+- homepage: "egapemoh"
+- maintainer: "maint@tain.er"
+- license: "MIT"
+- dev-repo: "hg+https://pkg@op.am"
+- bug-reports: "https://nobug"
+- name: "pinned-opamfile-test"
+- version: "dev"
+- url {
+- src:
+- "file://${BASEDIR}/pinned-opamfile-test"
+- }
+-> installed pinned-opamfile-test.dev
+Done.
+### opam var pinned-opamfile-test:opamfile
+${BASEDIR}/OPAM/var-opamfile/.opam-switch/packages/pinned-opamfile-test.dev/opam