commit:     51f3566606aeecc98c019a327c5847b3d5739609
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Fri Jan  2 19:48:25 2026 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Fri Jan  2 19:52:23 2026 +0000
URL:        https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=51f35666

qmerge: use ROOT with PKGDIR as it should

This explains why 419b78c837ff3355e0e1d0652a56678e303bcf6b once made
qlist use fixed / as ROOT with PKGDIR, to pair it up with qmerge doing
the same.  After c0aeba8091d4d08745593100d0951dcac878c600 corrected
that, this change corrects it for qmerge too.

At the time I was probably thinking one should be able to install a
package from the live FS into a ROOT, however that seems easily achieved
using a symlink or something, and if the ROOT actually is another arch
or target it makes even less sense.  So, just treat the PKGDIR under the
ROOT, and adapt the test for that to make it work again.

Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>

 qmerge.c            |  4 ++--
 tests/qmerge/dotest | 18 ++++++++++--------
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/qmerge.c b/qmerge.c
index 6fe6e07..c431550 100644
--- a/qmerge.c
+++ b/qmerge.c
@@ -1,5 +1,5 @@
 /*
- * Copyright 2005-2025 Gentoo Authors
+ * Copyright 2005-2026 Gentoo Authors
  * Distributed under the terms of the GNU General Public License v2
  *
  * Copyright 2005-2010 Ned Ludd        - <[email protected]>
@@ -334,7 +334,7 @@ best_version(const depend_atom *atom, int mode)
 
        if (mode & BV_BINPKG) {
                if (binpkg == NULL) {
-                       binpkg = tree_open_binpkg("/", pkgdir);
+                       binpkg = tree_open_binpkg(portroot, pkgdir);
                        if (binpkg == NULL) {
                                if (tmv != NULL)
                                        tree_match_close(tmv);

diff --git a/tests/qmerge/dotest b/tests/qmerge/dotest
index be91d8f..c73231d 100755
--- a/tests/qmerge/dotest
+++ b/tests/qmerge/dotest
@@ -7,7 +7,6 @@ set -e
 unset CONFIG_PROTECT CONFIG_PROTECT_MASK EPREFIX
 
 export QMERGE=1
-export PKGDIR=${as}/packages
 export FEATURES='config-protect-if-modified'
 
 mktmpdir
@@ -15,9 +14,13 @@ mktmpdir
 export ROOT=${PWD}/root
 export PORTAGE_TMPDIR=${PWD}
 export Q_VDB=/var/db/pkg
+export PKGDIR=/packages
 
 mkdir -p "${ROOT}/var/db/pkg"
 
+# copy packages into the ROOT
+cp -a "${as}/packages" "${ROOT}/"
+
 set +e
 
 # sanity check on environment
@@ -45,7 +48,6 @@ tend $? "qmerge-test: [N] vdb installed"
 tend $? "qmerge-test: [N] installed expected files" || die "$(treedir 
"${ROOT}")"
 
 # Now do a re-emerge.
-
 out=$(yes | qmerge -F "<qmerge-test-2")
 tend $? "qmerge-test: [R] re-emerge" || die "${out}"
 
@@ -149,9 +151,9 @@ tend $? "qmerge-test: [U] /usr/bin/qmerge-test2 removed" || 
die "$(treedir "${RO
 # try all compressions we know to see if we handle them properly
 pkgver=qmerge-test-1.3
 rev=0
-mkdir -p pkgs/sys-devel
-qtbz2 -s ${PKGDIR}/sys-devel/${pkgver}.tbz2
-export PKGDIR=${PWD}/pkgs
+mkdir -p "${ROOT}"/pkgs/sys-devel
+qtbz2 -s "${ROOT}${PKGDIR}"/sys-devel/${pkgver}.tbz2
+export PKGDIR=/pkgs
 bzip2 -dc < ${pkgver}.tar.bz2 > ${pkgver}.tar
 for compr in "" brotli gzip bzip2 xz lz4 zstd lzip lzop ; do
        if [[ ${compr} != "" ]] ; then
@@ -165,8 +167,8 @@ for compr in "" brotli gzip bzip2 xz lz4 zstd lzip lzop ; do
                f=${pkgver}.tar
        fi
        : $((rev++))
-       qtbz2 -j ${f} ${pkgver}.xpak pkgs/sys-devel/${pkgver}-r${rev}.tbz2
-       ls -l pkgs/sys-devel/${pkgver}-r${rev}.tbz2
+       qtbz2 -j ${f} ${pkgver}.xpak 
"${ROOT}"/pkgs/sys-devel/${pkgver}-r${rev}.tbz2
+       ls -l "${ROOT}"/pkgs/sys-devel/${pkgver}-r${rev}.tbz2
        qlist -kIv | tee /dev/stderr | wc -l
 
        # see if we can install this package
@@ -176,7 +178,7 @@ for compr in "" brotli gzip bzip2 xz lz4 zstd lzip lzop ; do
        out=$(yes | qmerge -FU qmerge-test)
        tend $? "qmerge-test: [X] uninstall ${pkgver}-r${rev}" || die "${out}"
 
-       rm pkgs/sys-devel/${pkgver}-r${rev}.tbz2
+       rm "${ROOT}"/pkgs/sys-devel/${pkgver}-r${rev}.tbz2
 done
 
 cleantmpdir

Reply via email to