summaryrefslogtreecommitdiff
path: root/guix/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'guix/scripts')
-rw-r--r--guix/scripts/challenge.scm7
-rw-r--r--guix/scripts/edit.scm10
-rw-r--r--guix/scripts/graph.scm8
-rw-r--r--guix/scripts/package.scm21
-rw-r--r--guix/scripts/publish.scm4
-rw-r--r--guix/scripts/refresh.scm18
-rw-r--r--guix/scripts/repl.scm39
-rw-r--r--guix/scripts/size.scm8
-rwxr-xr-xguix/scripts/substitute.scm2
9 files changed, 91 insertions, 26 deletions
diff --git a/guix/scripts/challenge.scm b/guix/scripts/challenge.scm
index ebeebd5cbe..65e2427033 100644
--- a/guix/scripts/challenge.scm
+++ b/guix/scripts/challenge.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2016, 2017, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -25,7 +25,7 @@
#:use-module (guix monads)
#:use-module (guix base32)
#:use-module (guix packages)
- #:use-module (guix progress)
+ #:use-module ((guix progress) #:hide (dump-port*))
#:use-module (guix serialization)
#:use-module (guix scripts substitute)
#:use-module (rnrs bytevectors)
@@ -193,9 +193,6 @@ taken since we do not import the archives."
;;; Reporting.
;;;
-(define dump-port* ;FIXME: deduplicate
- (@@ (guix serialization) dump))
-
(define (port-sha256* port size)
;; Like 'port-sha256', but limited to SIZE bytes.
(let-values (((out get) (open-sha256-port)))
diff --git a/guix/scripts/edit.scm b/guix/scripts/edit.scm
index da3d2775e8..a6fd1d2751 100644
--- a/guix/scripts/edit.scm
+++ b/guix/scripts/edit.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015, 2016, 2019 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015 Mathieu Lirzin <mthl@gnu.org>
+;;; Copyright © 2020 Simon Tournier <zimon.toutoune@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -20,6 +21,7 @@
(define-module (guix scripts edit)
#:use-module (guix ui)
#:use-module (guix scripts)
+ #:use-module ((guix scripts build) #:select (%standard-build-options))
#:use-module (guix utils)
#:use-module (gnu packages)
#:use-module (srfi srfi-1)
@@ -28,7 +30,10 @@
guix-edit))
(define %options
- (list (option '(#\h "help") #f #f
+ (list (find (lambda (option)
+ (member "load-path" (option-names option)))
+ %standard-build-options)
+ (option '(#\h "help") #f #f
(lambda args
(show-help)
(exit 0)))
@@ -41,6 +46,9 @@
Start $VISUAL or $EDITOR to edit the definitions of PACKAGE...\n"))
(newline)
(display (G_ "
+ -L, --load-path=DIR prepend DIR to the package module search path"))
+ (newline)
+ (display (G_ "
-h, --help display this help and exit"))
(display (G_ "
-V, --version display version information and exit"))
diff --git a/guix/scripts/graph.scm b/guix/scripts/graph.scm
index 7558cb1e85..53f407b2fc 100644
--- a/guix/scripts/graph.scm
+++ b/guix/scripts/graph.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2019 Simon Tournier <zimon.toutoune@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -35,6 +36,7 @@
#:use-module ((guix scripts build)
#:select (show-transformation-options-help
options->transformation
+ %standard-build-options
%transformation-options))
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
@@ -473,6 +475,9 @@ package modules, while attempting to retain user package modules."
(lambda (opt name arg result)
(alist-cons 'system arg
(alist-delete 'system result eq?))))
+ (find (lambda (option)
+ (member "load-path" (option-names option)))
+ %standard-build-options)
(option '(#\h "help") #f #f
(lambda args
(show-help)
@@ -501,6 +506,9 @@ Emit a representation of the dependency graph of PACKAGE...\n"))
(display (G_ "
-s, --system=SYSTEM consider the graph for SYSTEM--e.g., \"i686-linux\""))
(newline)
+ (display (G_ "
+ -L, --load-path=DIR prepend DIR to the package module search path"))
+ (newline)
(show-transformation-options-help)
(newline)
(display (G_ "
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index ea16435d2d..1cb0d382bf 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;; Copyright © 2013, 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014, 2016 Alex Kost <alezost@gmail.com>
@@ -39,7 +39,7 @@
#:use-module (guix scripts)
#:use-module (guix scripts build)
#:use-module (guix describe)
- #:autoload (guix store roots) (gc-roots)
+ #:autoload (guix store roots) (gc-roots user-owned?)
#:use-module ((guix build utils)
#:select (directory-exists? mkdir-p))
#:use-module ((guix build syscalls)
@@ -63,6 +63,8 @@
delete-matching-generations
guix-package
+ transaction-upgrade-entry ;mostly for testing
+
(%options . %package-options)
(%default-options . %package-default-options)
guix-package*))
@@ -135,9 +137,6 @@ denote ranges as interpreted by 'matching-generations'."
specified in MANIFEST, a manifest object. When ALLOW-COLLISIONS? is true,
do not treat collisions in MANIFEST as an error. HOOKS is a list of \"profile
hooks\" run when building the profile."
- (when (equal? profile %current-profile)
- (ensure-default-profile))
-
(let* ((prof-drv (run-with-store store
(profile-derivation manifest
#:allow-collisions? allow-collisions?
@@ -205,7 +204,7 @@ non-zero relevance score."
(package-full-name package2))
(> score1 score2))))))))))
-(define (transaction-upgrade-entry entry transaction)
+(define (transaction-upgrade-entry store entry transaction)
"Return a variant of TRANSACTION that accounts for the upgrade of ENTRY, a
<manifest-entry>."
(define (supersede old new)
@@ -242,7 +241,7 @@ non-zero relevance score."
transaction)
((=)
(let ((candidate-path (derivation->output-path
- (package-derivation (%store) pkg))))
+ (package-derivation store pkg))))
;; XXX: When there are propagated inputs, assume we need to
;; upgrade the whole entry.
(if (and (string=? path candidate-path)
@@ -600,7 +599,7 @@ and upgrades."
(define upgraded
(fold (lambda (entry transaction)
(if (upgrade? (manifest-entry-name entry))
- (transaction-upgrade-entry entry transaction)
+ (transaction-upgrade-entry (%store) entry transaction)
transaction))
transaction
(manifest-entries manifest)))
@@ -863,6 +862,12 @@ processed, #f otherwise."
(package-version item)
(manifest-entry-version entry))))))
+ (when (equal? profile %current-profile)
+ ;; Normally the daemon created %CURRENT-PROFILE when we connected, unless
+ ;; it's a version that lacks the fix for <https://bugs.gnu.org/37744>
+ ;; (aka. CVE-2019-18192). Ensure %CURRENT-PROFILE exists so that
+ ;; 'with-profile-lock' can create its lock file below.
+ (ensure-default-profile))
;; First, acquire a lock on the profile, to ensure only one guix process
;; is modifying it at a time.
diff --git a/guix/scripts/publish.scm b/guix/scripts/publish.scm
index 71a349d2fe..f5b2f5fd4e 100644
--- a/guix/scripts/publish.scm
+++ b/guix/scripts/publish.scm
@@ -64,6 +64,7 @@
#:use-module ((guix build syscalls) #:select (set-thread-name))
#:export (%public-key
%private-key
+ signed-string
guix-publish))
@@ -237,7 +238,8 @@ if ITEM is already compressed."
("Priority" . 100)))
(define (signed-string s)
- "Sign the hash of the string S with the daemon's key."
+ "Sign the hash of the string S with the daemon's key. Return a canonical
+sexp for the signature."
(let* ((public-key (%public-key))
(hash (bytevector->hash-data (sha256 (string->utf8 s))
#:key-type (key-type public-key))))
diff --git a/guix/scripts/refresh.scm b/guix/scripts/refresh.scm
index daf6fcf947..efada1df5a 100644
--- a/guix/scripts/refresh.scm
+++ b/guix/scripts/refresh.scm
@@ -7,6 +7,7 @@
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2020 Simon Tournier <zimon.toutoune@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -27,6 +28,7 @@
#:use-module (guix ui)
#:use-module (gcrypt hash)
#:use-module (guix scripts)
+ #:use-module ((guix scripts build) #:select (%standard-build-options))
#:use-module (guix store)
#:use-module (guix utils)
#:use-module (guix packages)
@@ -116,6 +118,19 @@
(leave (G_ "unsupported policy: ~a~%")
arg)))))
+ ;; The short option -L is already used by --list-updaters, therefore
+ ;; it needs to be removed from %standard-build-options.
+ (let ((load-path-option (find (lambda (option)
+ (member "load-path"
+ (option-names option)))
+ %standard-build-options)))
+ (option
+ (filter (lambda (name) (not (equal? #\L name)))
+ (option-names load-path-option))
+ (option-required-arg? load-path-option)
+ (option-optional-arg? load-path-option)
+ (option-processor load-path-option)))
+
(option '(#\h "help") #f #f
(lambda args
(show-help)
@@ -166,6 +181,9 @@ specified with `--select'.\n"))
used when 'key-download' is not specified"))
(newline)
(display (G_ "
+ --load-path=DIR prepend DIR to the package module search path"))
+ (newline)
+ (display (G_ "
-h, --help display this help and exit"))
(display (G_ "
-V, --version display version information and exit"))
diff --git a/guix/scripts/repl.scm b/guix/scripts/repl.scm
index e1cc759fc8..ff1f208894 100644
--- a/guix/scripts/repl.scm
+++ b/guix/scripts/repl.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020 Simon Tournier <zimon.toutoune@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -20,9 +21,6 @@
#:use-module (guix ui)
#:use-module (guix scripts)
#:use-module (guix repl)
- #:use-module (guix utils)
- #:use-module (guix packages)
- #:use-module (gnu packages)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-37)
#:use-module (ice-9 match)
@@ -52,7 +50,16 @@
(alist-cons 'type (string->symbol arg) result)))
(option '("listen") #t #f
(lambda (opt name arg result)
- (alist-cons 'listen arg result)))))
+ (alist-cons 'listen arg result)))
+ (option '(#\q) #f #f
+ (lambda (opt name arg result)
+ (alist-cons 'ignore-dot-guile? #t result)))
+ (option '(#\L "load-path") #t #f
+ (lambda (opt name arg result)
+ ;; XXX: Imperatively modify the search paths.
+ (set! %load-path (cons arg %load-path))
+ (set! %load-compiled-path (cons arg %load-compiled-path))
+ result))))
(define (show-help)
@@ -60,6 +67,13 @@
Start a Guile REPL in the Guix execution environment.\n"))
(display (G_ "
-t, --type=TYPE start a REPL of the given TYPE"))
+ (display (G_ "
+ --listen=ENDPOINT listen to ENDPOINT instead of standard input"))
+ (display (G_ "
+ -q inhibit loading of ~/.guile"))
+ (newline)
+ (display (G_ "
+ -L, --load-path=DIR prepend DIR to the package module search path"))
(newline)
(display (G_ "
-h, --help display this help and exit"))
@@ -129,6 +143,11 @@ call THUNK."
(leave (G_ "~A: extraneous argument~%") arg))
%default-options))
+ (define user-config
+ (and=> (getenv "HOME")
+ (lambda (home)
+ (string-append home "/.guile"))))
+
(with-error-handling
(let ((type (assoc-ref opts 'type)))
(call-with-connection (assoc-ref opts 'listen)
@@ -138,11 +157,11 @@ call THUNK."
(save-module-excursion
(lambda ()
(set-current-module user-module)
- (and=> (getenv "HOME")
- (lambda (home)
- (let ((guile (string-append home "/.guile")))
- (when (file-exists? guile)
- (load guile)))))
+ (when (and (not (assoc-ref opts 'ignore-dot-guile?))
+ user-config
+ (file-exists? user-config))
+ (load user-config))
+
;; Do not exit repl on SIGINT.
((@@ (ice-9 top-repl) call-with-sigint)
(lambda ()
diff --git a/guix/scripts/size.scm b/guix/scripts/size.scm
index f549ce05b8..2446b84587 100644
--- a/guix/scripts/size.scm
+++ b/guix/scripts/size.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2019 Simon Tournier <zimon.toutoune@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -19,6 +20,7 @@
(define-module (guix scripts size)
#:use-module (guix ui)
#:use-module (guix scripts)
+ #:use-module (guix scripts build)
#:use-module (guix store)
#:use-module (guix monads)
#:use-module (guix combinators)
@@ -242,6 +244,9 @@ Report the size of PACKAGE and its dependencies.\n"))
-m, --map-file=FILE write to FILE a graphical map of disk usage"))
(newline)
(display (G_ "
+ -L, --load-path=DIR prepend DIR to the package module search path"))
+ (newline)
+ (display (G_ "
-h, --help display this help and exit"))
(display (G_ "
-V, --version display version information and exit"))
@@ -273,6 +278,9 @@ Report the size of PACKAGE and its dependencies.\n"))
(option '(#\m "map-file") #t #f
(lambda (opt name arg result)
(alist-cons 'map-file arg result)))
+ (find (lambda (option)
+ (member "load-path" (option-names option)))
+ %standard-build-options)
(option '(#\h "help") #f #f
(lambda args
(show-help)
diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm
index 3bf9b8735f..dfb975a24a 100755
--- a/guix/scripts/substitute.scm
+++ b/guix/scripts/substitute.scm
@@ -557,7 +557,7 @@ initial connection on which HTTP requests are sent."
(('connection 'close)
(close-port p)
(connect #f ;try again
- (append tail (drop requests processed))
+ (drop requests (+ 1 processed))
result))
(_
(loop tail (+ 1 processed) result)))))))))) ;keep going