This is an automated email from the git hooks/post-receive script.

guillem pushed a commit to branch main
in repository dpkg.

View the commit online:
https://git.dpkg.org/cgit/dpkg/dpkg.git/commit/?id=c9cfffcebe181a61d2981b79aa82d4af39523520

commit c9cfffcebe181a61d2981b79aa82d4af39523520 (HEAD -> main)
Author: Guillem Jover <[email protected]>
AuthorDate: Thu Sep 1 03:35:01 2022 +0200

    test: Add functional tests for --root, --instdir and --admindir options
    
    These makes sure these interact with each other as expected, and take
    the defaults and the DPKG_ROOT and DPKG_ADMINDIR environment variables
    into account.
---
 dselect/main.cc         |   2 +
 src/Makefile.am         |   1 +
 src/at/atlocal.in       |   2 +
 src/at/chdir.at         | 491 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/at/local.at         |   2 +
 src/at/testsuite.at     |   4 +
 src/divert/main.c       |   3 +
 src/main/main.c         |   2 +
 src/query/main.c        |   3 +
 src/split/main.c        |   4 +
 src/statoverride/main.c |   3 +
 src/trigger/main.c      |   3 +
 12 files changed, 520 insertions(+)

diff --git a/dselect/main.cc b/dselect/main.cc
index 32010235b..451ec0a31 100644
--- a/dselect/main.cc
+++ b/dselect/main.cc
@@ -539,6 +539,8 @@ main(int, const char *const *argv)
   dpkg_options_load(DSELECT, cmdinfos);
   dpkg_options_parse(&argv, cmdinfos, printforhelp);
 
+  debug(dbg_general, "root=%s admindir=%s", dpkg_fsys_get_dir(), 
dpkg_db_get_dir());
+
   if (*argv) {
     const char *a;
     while ((a = *argv++) != nullptr) {
diff --git a/src/Makefile.am b/src/Makefile.am
index 324a23527..95cc94353 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -160,6 +160,7 @@ TESTSUITE_AT += $(srcdir)/at/deb-content.at
 TESTSUITE_AT += $(srcdir)/at/deb-split.at
 TESTSUITE_AT += $(srcdir)/at/realpath.at
 TESTSUITE_AT += $(srcdir)/at/divert.at
+TESTSUITE_AT += $(srcdir)/at/chdir.at
 EXTRA_DIST += $(TESTSUITE_AT)
 
 TESTSUITE = $(srcdir)/at/testsuite
diff --git a/src/at/atlocal.in b/src/at/atlocal.in
index 9e5451db7..3d8b66ffe 100644
--- a/src/at/atlocal.in
+++ b/src/at/atlocal.in
@@ -18,6 +18,8 @@ export TZ
 SOURCE_DATE_EPOCH=0
 export SOURCE_DATE_EPOCH
 
+prefix="@prefix@"
+eval "export DEFAULT_ADMINDIR='@admindir@'"
 export DPKG_DATADIR="@abs_top_srcdir@/src"
 
 # Cleanup variables that might affect the tests.
diff --git a/src/at/chdir.at b/src/at/chdir.at
new file mode 100644
index 000000000..ec9299f85
--- /dev/null
+++ b/src/at/chdir.at
@@ -0,0 +1,491 @@
+#
+# Test commands with --root, --instdir and --admindir.
+#
+
+m4_foreach_w([CMD], [dpkg dpkg-divert dpkg-statoverride], [
+  m4_define([CMD_PRINT_DIRS], [DPKG_DEBUG=1 CMD --version])
+
+  AT_SETUP([CMD chdir opts])
+  AT_KEYWORDS([CMD command-line chdir])
+
+  DPKG_ROOT=
+  DPKG_ADMINDIR=
+
+  AT_CHECK_UNQUOTED(
+    [CMD_PRINT_DIRS --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK_UNQUOTED(
+    [CMD_PRINT_DIRS --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=$DEFAULT_ROOTDIR admindir=/admindir_opt
+])
+  AT_CHECK_UNQUOTED(
+    [CMD_PRINT_DIRS --instdir=/instdir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=$DEFAULT_ADMINDIR
+])
+  AT_CHECK(
+    [CMD_PRINT_DIRS --root=/rootdir_opt --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/admindir_opt
+])
+  AT_CHECK_UNQUOTED(
+    [CMD_PRINT_DIRS --admindir=/admindir_opt --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK_UNQUOTED(
+    [CMD_PRINT_DIRS --root=/rootdir_opt --instdir=/instdir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK_UNQUOTED(
+    [CMD_PRINT_DIRS --instdir=/instdir_opt --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK(
+    [CMD_PRINT_DIRS --instdir=/instdir_opt --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/admindir_opt
+])
+  AT_CHECK(
+    [CMD_PRINT_DIRS --admindir=/admindir_opt --instdir=/instdir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/admindir_opt
+])
+  AT_CHECK(
+    [CMD_PRINT_DIRS --root=/rootdir_opt --admindir=/admindir_opt 
--instdir=/instdir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/admindir_opt
+])
+  AT_CHECK_UNQUOTED(
+    [CMD_PRINT_DIRS --admindir=/admindir_opt --instdir=/instdir_opt 
--root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+
+  AT_CLEANUP
+
+  AT_SETUP([CMD chdir env])
+  AT_KEYWORDS([CMD command-line chdir])
+
+  DPKG_ROOT=
+  DPKG_ADMINDIR=
+
+  AT_CHECK_UNQUOTED(
+    [DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS],
+    [], [ignore],
+    [D000001: root=$DEFAULT_ROOTDIR admindir=/admindir_env
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ROOT=/rootdir_env \
+     CMD_PRINT_DIRS],
+    [], [ignore],
+    [D000001: root=/rootdir_env admindir=/rootdir_env$DEFAULT_ADMINDIR
+])
+  AT_CHECK(
+    [DPKG_ROOT=/rootdir_env DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS],
+    [], [ignore],
+    [D000001: root=/rootdir_env admindir=/admindir_env
+])
+
+  AT_CLEANUP
+
+  AT_SETUP([CMD chdir env+opt admindir])
+  AT_KEYWORDS([CMD command-line chdir])
+
+  DPKG_ROOT=
+  DPKG_ADMINDIR=
+
+  AT_CHECK_UNQUOTED(
+    [DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=$DEFAULT_ROOTDIR admindir=/admindir_opt
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --instdir=/instdir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/admindir_env
+])
+  AT_CHECK(
+    [DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --root=/rootdir_opt --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/admindir_opt
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --admindir=/admindir_opt --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --root=/rootdir_opt --instdir=/instdir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --instdir=/instdir_opt --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK(
+    [DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --instdir=/instdir_opt --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/admindir_opt
+])
+  AT_CHECK(
+    [DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --admindir=/admindir_opt --instdir=/instdir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/admindir_opt
+])
+  AT_CHECK(
+    [DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --root=/rootdir_opt --admindir=/admindir_opt 
--instdir=/instdir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/admindir_opt
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --admindir=/admindir_opt --instdir=/instdir_opt 
--root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+
+  AT_CLEANUP
+
+  AT_SETUP([CMD chdir env+opt root])
+  AT_KEYWORDS([CMD command-line chdir])
+
+  DPKG_ROOT=
+  DPKG_ADMINDIR=
+
+  AT_CHECK_UNQUOTED(
+    [DPKG_ROOT=/rootdir_env \
+     CMD_PRINT_DIRS --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK(
+    [DPKG_ROOT=/rootdir_env \
+     CMD_PRINT_DIRS --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_env admindir=/admindir_opt
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ROOT=/rootdir_env \
+     CMD_PRINT_DIRS --instdir=/instdir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/rootdir_env$DEFAULT_ADMINDIR
+])
+  AT_CHECK(
+    [DPKG_ROOT=/rootdir_env \
+     CMD_PRINT_DIRS --root=/rootdir_opt --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/admindir_opt
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ROOT=/rootdir_env \
+     CMD_PRINT_DIRS --admindir=/admindir_opt --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ROOT=/rootdir_env \
+     CMD_PRINT_DIRS --root=/rootdir_opt --instdir=/instdir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ROOT=/rootdir_env \
+     CMD_PRINT_DIRS --instdir=/instdir_opt --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK(
+    [DPKG_ROOT=/rootdir_env \
+     CMD_PRINT_DIRS --instdir=/instdir_opt --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/admindir_opt
+])
+  AT_CHECK(
+    [DPKG_ROOT=/rootdir_env \
+     CMD_PRINT_DIRS --admindir=/admindir_opt --instdir=/instdir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/admindir_opt
+])
+  AT_CHECK(
+    [DPKG_ROOT=/rootdir_env \
+     CMD_PRINT_DIRS --root=/rootdir_opt --admindir=/admindir_opt 
--instdir=/instdir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/admindir_opt
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ROOT=/rootdir_env \
+     CMD_PRINT_DIRS --admindir=/admindir_opt --instdir=/instdir_opt 
--root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+
+  AT_CLEANUP
+
+  AT_SETUP([CMD chdir env+opt root+admindir])
+  AT_KEYWORDS([CMD command-line chdir])
+
+  DPKG_ROOT=
+  DPKG_ADMINDIR=
+
+  AT_CHECK_UNQUOTED(
+    [DPKG_ROOT=/rootdir_env DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK(
+    [DPKG_ROOT=/rootdir_env DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_env admindir=/admindir_opt
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ROOT=/rootdir_env DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --instdir=/instdir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/admindir_env
+])
+  AT_CHECK(
+    [DPKG_ROOT=/rootdir_env DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --root=/rootdir_opt --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/admindir_opt
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ROOT=/rootdir_env DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --admindir=/admindir_opt --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ROOT=/rootdir_env DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --root=/rootdir_opt --instdir=/instdir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ROOT=/rootdir_env DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --instdir=/instdir_opt --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK(
+    [DPKG_ROOT=/rootdir_env DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --instdir=/instdir_opt --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/admindir_opt
+])
+  AT_CHECK(
+    [DPKG_ROOT=/rootdir_env DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --admindir=/admindir_opt --instdir=/instdir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/admindir_opt
+])
+  AT_CHECK(
+    [DPKG_ROOT=/rootdir_env DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --root=/rootdir_opt --admindir=/admindir_opt 
--instdir=/instdir_opt],
+    [], [ignore],
+    [D000001: root=/instdir_opt admindir=/admindir_opt
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ROOT=/rootdir_env DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --admindir=/admindir_opt --instdir=/instdir_opt 
--root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+
+  AT_CLEANUP
+])
+
+#
+# Test commands with only --root and --admindir.
+#
+
+m4_foreach_w([CMD], [dpkg-split dpkg-query dpkg-trigger], [
+  m4_define([CMD_PRINT_DIRS], [DPKG_DEBUG=1 CMD --version])
+
+  AT_SETUP([CMD chdir opts])
+  AT_KEYWORDS([CMD command-line chdir])
+
+  DPKG_ROOT=
+  DPKG_ADMINDIR=
+
+  AT_CHECK_UNQUOTED(
+    [CMD_PRINT_DIRS --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+
+  AT_CHECK_UNQUOTED(
+    [CMD_PRINT_DIRS --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=$DEFAULT_ROOTDIR admindir=/admindir_opt
+])
+
+  AT_CHECK_UNQUOTED(
+    [CMD_PRINT_DIRS --root=/rootdir_opt --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/admindir_opt
+])
+
+  AT_CHECK_UNQUOTED(
+    [CMD_PRINT_DIRS --admindir=/admindir_opt --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+
+  AT_CLEANUP
+
+  AT_SETUP([CMD chdir env])
+  AT_KEYWORDS([CMD command-line chdir])
+
+  DPKG_ROOT=
+  DPKG_ADMINDIR=
+
+  AT_CHECK_UNQUOTED(
+    [DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS],
+    [], [ignore],
+    [D000001: root=$DEFAULT_ROOTDIR admindir=/admindir_env
+])
+
+  AT_CHECK_UNQUOTED(
+    [DPKG_ROOT=/rootdir_env \
+     CMD_PRINT_DIRS],
+    [], [ignore],
+    [D000001: root=/rootdir_env admindir=/rootdir_env$DEFAULT_ADMINDIR
+])
+
+  AT_CHECK(
+    [DPKG_ROOT=/rootdir_env DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS],
+    [], [ignore],
+    [D000001: root=/rootdir_env admindir=/admindir_env
+])
+
+  AT_CLEANUP
+
+  AT_SETUP([CMD chdir env+opt admindir])
+  AT_KEYWORDS([CMD command-line chdir])
+
+  DPKG_ROOT=
+  DPKG_ADMINDIR=
+
+  AT_CHECK_UNQUOTED(
+    [DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=$DEFAULT_ROOTDIR admindir=/admindir_opt
+])
+  AT_CHECK(
+    [DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --root=/rootdir_opt --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/admindir_opt
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --admindir=/admindir_opt --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+
+  AT_CLEANUP
+
+  AT_SETUP([CMD chdir env+opt root])
+  AT_KEYWORDS([CMD command-line chdir])
+
+  DPKG_ROOT=
+  DPKG_ADMINDIR=
+
+  AT_CHECK_UNQUOTED(
+    [DPKG_ROOT=/rootdir_env \
+     CMD_PRINT_DIRS --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK(
+    [DPKG_ROOT=/rootdir_env \
+     CMD_PRINT_DIRS --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_env admindir=/admindir_opt
+])
+  AT_CHECK(
+    [DPKG_ROOT=/rootdir_env \
+     CMD_PRINT_DIRS --root=/rootdir_opt --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/admindir_opt
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ROOT=/rootdir_env \
+     CMD_PRINT_DIRS --admindir=/admindir_opt --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+
+  AT_CLEANUP
+
+  AT_SETUP([CMD chdir env+opt root+admindir])
+  AT_KEYWORDS([CMD command-line chdir])
+
+  DPKG_ROOT=
+  DPKG_ADMINDIR=
+
+  AT_CHECK_UNQUOTED(
+    [DPKG_ROOT=/rootdir_env DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+  AT_CHECK(
+    [DPKG_ROOT=/rootdir_env DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_env admindir=/admindir_opt
+])
+  AT_CHECK(
+    [DPKG_ROOT=/rootdir_env DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --root=/rootdir_opt --admindir=/admindir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/admindir_opt
+])
+  AT_CHECK_UNQUOTED(
+    [DPKG_ROOT=/rootdir_env DPKG_ADMINDIR=/admindir_env \
+     CMD_PRINT_DIRS --admindir=/admindir_opt --root=/rootdir_opt],
+    [], [ignore],
+    [D000001: root=/rootdir_opt admindir=/rootdir_opt$DEFAULT_ADMINDIR
+])
+
+  AT_CLEANUP
+])
diff --git a/src/at/local.at b/src/at/local.at
index 04dffe714..89f08dabe 100644
--- a/src/at/local.at
+++ b/src/at/local.at
@@ -1,7 +1,9 @@
 # Dpkg helper macros
 
 m4_pattern_forbid([^DPKG_])
+m4_pattern_allow([^DPKG_DEBUG$])
 m4_pattern_allow([^DPKG_ROOT$])
+m4_pattern_allow([^DPKG_ADMINDIR$])
 m4_pattern_allow([^DPKG_DATADIR$])
 
 #
diff --git a/src/at/testsuite.at b/src/at/testsuite.at
index 5798690d5..86e2d37c0 100644
--- a/src/at/testsuite.at
+++ b/src/at/testsuite.at
@@ -18,3 +18,7 @@ m4_include([realpath.at])
 AT_TESTED([dpkg-divert])
 AT_BANNER([Diversions])
 m4_include([divert.at])
+
+AT_TESTED([dpkg])
+AT_BANNER([Change directory options])
+m4_include([chdir.at])
diff --git a/src/divert/main.c b/src/divert/main.c
index ddfd18d28..865796d3a 100644
--- a/src/divert/main.c
+++ b/src/divert/main.c
@@ -40,6 +40,7 @@
 #include <dpkg/i18n.h>
 #include <dpkg/dpkg.h>
 #include <dpkg/dpkg-db.h>
+#include <dpkg/debug.h>
 #include <dpkg/arch.h>
 #include <dpkg/file.h>
 #include <dpkg/glob.h>
@@ -865,6 +866,8 @@ main(int argc, const char * const *argv)
        dpkg_program_init("dpkg-divert");
        dpkg_options_parse(&argv, cmdinfos, printforhelp);
 
+       debug(dbg_general, "root=%s admindir=%s", dpkg_fsys_get_dir(), 
dpkg_db_get_dir());
+
        env_pkgname = getenv("DPKG_MAINTSCRIPT_PACKAGE");
        if (opt_pkgname_match_any && env_pkgname)
                set_package(NULL, env_pkgname);
diff --git a/src/main/main.c b/src/main/main.c
index c3f9e50c5..6f0633e6f 100644
--- a/src/main/main.c
+++ b/src/main/main.c
@@ -736,6 +736,8 @@ int main(int argc, const char *const *argv) {
   dpkg_options_load(DPKG, cmdinfos);
   dpkg_options_parse(&argv, cmdinfos, printforhelp);
 
+  debug(dbg_general, "root=%s admindir=%s", dpkg_fsys_get_dir(), 
dpkg_db_get_dir());
+
   /* When running as root, make sure our primary group is also root, so
    * that files created by maintainer scripts have correct ownership. */
   if (!in_force(FORCE_NON_ROOT) && getuid() == 0 && getgid() != 0)
diff --git a/src/query/main.c b/src/query/main.c
index 8c34518a2..6695b6b6e 100644
--- a/src/query/main.c
+++ b/src/query/main.c
@@ -44,6 +44,7 @@
 #include <dpkg/i18n.h>
 #include <dpkg/dpkg.h>
 #include <dpkg/dpkg-db.h>
+#include <dpkg/debug.h>
 #include <dpkg/pkg-array.h>
 #include <dpkg/pkg-spec.h>
 #include <dpkg/pkg-format.h>
@@ -867,6 +868,8 @@ int main(int argc, const char *const *argv) {
   dpkg_program_init("dpkg-query");
   dpkg_options_parse(&argv, cmdinfos, printforhelp);
 
+  debug(dbg_general, "root=%s admindir=%s", dpkg_fsys_get_dir(), 
dpkg_db_get_dir());
+
   if (!cipaction) badusage(_("need an action option"));
 
   ret = cipaction->action(argv);
diff --git a/src/split/main.c b/src/split/main.c
index 68c0791bc..eba2333c3 100644
--- a/src/split/main.c
+++ b/src/split/main.c
@@ -37,6 +37,8 @@
 #include <dpkg/i18n.h>
 #include <dpkg/dpkg.h>
 #include <dpkg/dpkg-db.h>
+#include <dpkg/debug.h>
+#include <dpkg/fsys.h>
 #include <dpkg/options.h>
 
 #include "dpkg-split.h"
@@ -165,6 +167,8 @@ int main(int argc, const char *const *argv) {
   dpkg_program_init(SPLITTER);
   dpkg_options_parse(&argv, cmdinfos, printforhelp);
 
+  debug(dbg_general, "root=%s admindir=%s", dpkg_fsys_get_dir(), 
dpkg_db_get_dir());
+
   if (opt_depotdir == NULL)
     opt_depotdir = dpkg_db_get_path(PARTSDIR);
 
diff --git a/src/statoverride/main.c b/src/statoverride/main.c
index 801da2064..66fe8c34e 100644
--- a/src/statoverride/main.c
+++ b/src/statoverride/main.c
@@ -40,6 +40,7 @@
 #include <dpkg/i18n.h>
 #include <dpkg/dpkg.h>
 #include <dpkg/dpkg-db.h>
+#include <dpkg/debug.h>
 #include <dpkg/string.h>
 #include <dpkg/path.h>
 #include <dpkg/dir.h>
@@ -406,6 +407,8 @@ main(int argc, const char *const *argv)
        set_force_default(FORCE_STATCMD_MASK);
        dpkg_options_parse(&argv, cmdinfos, printforhelp);
 
+       debug(dbg_general, "root=%s admindir=%s", dpkg_fsys_get_dir(), 
dpkg_db_get_dir());
+
        if (!cipaction)
                badusage(_("need an action option"));
 
diff --git a/src/trigger/main.c b/src/trigger/main.c
index 3321b7040..0cc25a48a 100644
--- a/src/trigger/main.c
+++ b/src/trigger/main.c
@@ -36,6 +36,7 @@
 #include <dpkg/i18n.h>
 #include <dpkg/dpkg.h>
 #include <dpkg/dpkg-db.h>
+#include <dpkg/debug.h>
 #include <dpkg/options.h>
 #include <dpkg/trigdeferred.h>
 #include <dpkg/triglib.h>
@@ -255,6 +256,8 @@ main(int argc, const char *const *argv)
        dpkg_program_init("dpkg-trigger");
        dpkg_options_parse(&argv, cmdinfos, printforhelp);
 
+       debug(dbg_general, "root=%s admindir=%s", dpkg_fsys_get_dir(), 
dpkg_db_get_dir());
+
        if (!cipaction)
                setaction(&cmdinfo_trigger, NULL);
 

-- 
Dpkg.Org's dpkg

Reply via email to