GNU bug report logs -
#35905
[PATCH] find-package-by-name: reverse package load precedence
Previous Next
Reported by: Robert Vollmert <rob <at> vllmrt.net>
Date: Sat, 25 May 2019 19:18:01 UTC
Severity: normal
Tags: patch
Done: Ludovic Courtès <ludo <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your bug report
#35905: [PATCH] find-package-by-name: reverse package load precedence
which was filed against the guix-patches package, has been closed.
The explanation is attached below, along with your original report.
If you require more details, please reply to 35905 <at> debbugs.gnu.org.
--
35905: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=35905
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
Hi Robert,
Robert Vollmert <rob <at> vllmrt.net> skribis:
> From e484a11fa652c6e9cb4484c6f700b91f134e7156 Mon Sep 17 00:00:00 2001
> From: Robert Vollmert <rob <at> vllmrt.net>
> Date: Sat, 25 May 2019 08:40:38 +0200
> Subject: [PATCH] guix: find-package-by-name: list modules in path order
>
> A particular effect of this is that if there are ambiguous
> packages in a directory specified with `-L module_dir` and the
> distribution, the version from `module_dir` will be loaded,
> which is usually what would be expected. (E.g. for `guix build`
> or `guix package -i`.)
>
> * guix/discovery.scm (all-modules): Return modules in path order.
> * tests/guix-package.sh: Test local definitions take precedence.
Good catch, applied! (I adjusted the summary line so that it mentions
“discovery”.)
Likewise, in case more than one packages match a given spec, packages of
third-party channels would take precedence over those coming from the
‘guix’ channel, contrary to what was intended.
Thanks for fixing it!
Ludo’.
[Message part 3 (message/rfc822, inline)]
From e484a11fa652c6e9cb4484c6f700b91f134e7156 Mon Sep 17 00:00:00 2001
From: Robert Vollmert <rob <at> vllmrt.net>
Date: Sat, 25 May 2019 08:40:38 +0200
Subject: [PATCH] guix: find-package-by-name: list modules in path order
A particular effect of this is that if there are ambiguous
packages in a directory specified with `-L module_dir` and the
distribution, the version from `module_dir` will be loaded,
which is usually what would be expected. (E.g. for `guix build`
or `guix package -i`.)
* guix/discovery.scm (all-modules): Return modules in path order.
* tests/guix-package.sh: Test local definitions take precedence.
---
guix/discovery.scm | 4 ++--
tests/guix-package.sh | 14 ++++++++++++++
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/guix/discovery.scm b/guix/discovery.scm
index ef5ae73973..5bb494941b 100644
--- a/guix/discovery.scm
+++ b/guix/discovery.scm
@@ -145,8 +145,8 @@ Call (PROC MODULE RESULT) for each module that is found."
"Return the list of package modules found in PATH, a list of directories to
search. Entries in PATH can be directory names (strings) or (DIRECTORY
. SUB-DIRECTORY) pairs, in which case modules are searched for beneath
-SUB-DIRECTORY."
- (fold-modules cons '() path #:warn warn))
+SUB-DIRECTORY. Modules are listed in the order they appear on the path."
+ (reverse (fold-modules cons '() path #:warn warn)))
(define (fold-module-public-variables* proc init modules)
"Call (PROC MODULE SYMBOL VARIABLE) for each variable exported by one of MODULES,
diff --git a/tests/guix-package.sh b/tests/guix-package.sh
index 767c3f8a66..79d6ec65e4 100644
--- a/tests/guix-package.sh
+++ b/tests/guix-package.sh
@@ -280,6 +280,20 @@ export GUIX_PACKAGE_PATH
guix package -A emacs-foo-bar | grep 42
guix package -i emacs-foo-bar <at> 42 -n
+# Make sure GUIX_PACKAGE_PATH/'-L' takes precedence in case of duplicate packages.
+cat > "$module_dir/bar.scm"<<EOF
+(define-module (bar)
+ #:use-module (guix packages))
+
+(define-public hello
+ (package (inherit (@@ (gnu packages base) hello))
+ (synopsis "an overridden version of GNU hello")))
+EOF
+
+guix package -i hello -n 2>&1 | grep choosing.*bar.scm
+( unset GUIX_PACKAGE_PATH; \
+ guix package -i hello -n -L "$module_dir" 2>&1 | grep choosing.*bar.scm )
+
# Make sure patches that live under $GUIX_PACKAGE_PATH are found.
cat > "$module_dir/emacs.patch"<<EOF
This is a fake patch.
--
2.21.0
This bug report was last modified 6 years and 54 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.