[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#51307] [PATCH 2/2] scripts: hash: Support file or package.
From: |
zimoun |
Subject: |
[bug#51307] [PATCH 2/2] scripts: hash: Support file or package. |
Date: |
Wed, 20 Oct 2021 18:54:35 +0200 |
* guix/scripts/hash.scm (guix-hash)[package?]: New procedure.
[hash-to-display]: Use it.
* tests/guix-hash.scm: New test.
---
guix/scripts/hash.scm | 19 +++++++++++++++++--
tests/guix-hash.sh | 10 ++++++++++
2 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/guix/scripts/hash.scm b/guix/scripts/hash.scm
index f3363549d3..4f0d41629f 100644
--- a/guix/scripts/hash.scm
+++ b/guix/scripts/hash.scm
@@ -22,6 +22,9 @@
(define-module (guix scripts hash)
#:use-module (gcrypt hash)
+ #:use-module ((gnu packages) #:select (find-best-packages-by-name))
+ #:use-module (guix packages)
+ #:use-module ((guix utils) #:select (package-name->name+version))
#:use-module (guix serialization)
#:use-module (guix ui)
#:use-module (guix scripts)
@@ -48,8 +51,8 @@ (define %default-options
(hash-algorithm . ,(hash-algorithm sha256))))
(define (show-help)
- (display (G_ "Usage: guix hash [OPTION] FILE
-Return the cryptographic hash of FILE.\n"))
+ (display (G_ "Usage: guix hash [OPTION] FILE-OR-PACKAGE
+Return the cryptographic hash of FILE-OR-PACKAGE.\n"))
(newline)
(display (G_ "\
Supported formats: 'base64', 'nix-base32' (default), 'base32',
@@ -141,6 +144,12 @@ (define (directory? file)
((directory) #t)
(else #f)))
+ (define (package? spec)
+ (let-values (((name version) (package-name->name+version spec)))
+ (match (find-best-packages-by-name name version)
+ ((package) package)
+ (_ #f))))
+
(let* ((opts (parse-options))
(args (filter-map (match-lambda
(('argument . value)
@@ -182,6 +191,12 @@ (define (hash-to-display thing)
("-" (with-error-handling
(fmt (port-hash (assoc-ref opts 'hash-algorithm)
(current-input-port)))))
+ ((? package? spec)
+ (let* ((package (package? spec))
+ (origin (package-source package))
+ (content-hash (origin-hash origin))
+ (hash (content-hash-value content-hash)))
+ (fmt hash)))
(x
(leave (G_ "wrong argument~%")))))
diff --git a/tests/guix-hash.sh b/tests/guix-hash.sh
index c4461fa955..41bd2b1588 100644
--- a/tests/guix-hash.sh
+++ b/tests/guix-hash.sh
@@ -1,6 +1,7 @@
# GNU Guix --- Functional package management for GNU
# Copyright © 2013, 2014, 2016, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
# Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+# Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
#
# This file is part of GNU Guix.
#
@@ -65,3 +66,12 @@ test `guix hash -r $tmpdir -x` =
10k1lw41wyrjf9mxydi0is5nkpynlsvgslinics4ppir13g
# Without '-r', this should fail.
! guix hash "$tmpdir"
+cat > "$tmpdir/foo.scm"<<EOF
+(use-modules (guix packages)
+ (gnu packages base)
+ (guix base16))
+(format #t "~a~%"
+ (bytevector->base16-string
+ (content-hash-value (origin-hash (package-source hello)))))
+EOF
+test `guix hash hello -f base16` = `guix repl -- $tmpdir/foo.scm`
--
2.32.0
[bug#51307] [PATCH 0/2] guix hash: eases conversion, Ludovic Courtès, 2021/10/30