From: zimoun <zimon.toutoune@gmail.com>
To: 51307@debbugs.gnu.org
Cc: zimoun <zimon.toutoune@gmail.com>
Subject: [bug#51307] [PATCH 1/2] scripts: hash: Improve error handling.
Date: Wed, 20 Oct 2021 18:54:34 +0200 [thread overview]
Message-ID: <20211020165435.3358398-1-zimon.toutoune@gmail.com> (raw)
In-Reply-To: <20211020165020.3358311-1-zimon.toutoune@gmail.com>
* guix/scripts/hash.scm (guix-hash): Allow several files.
[directory?]: New procedure.
[file-hash]: Catch system-error.
[hash-to-display]: New procedure.
---
guix/scripts/hash.scm | 56 +++++++++++++++++++++++++++----------------
1 file changed, 36 insertions(+), 20 deletions(-)
diff --git a/guix/scripts/hash.scm b/guix/scripts/hash.scm
index b8622373cc..f3363549d3 100644
--- a/guix/scripts/hash.scm
+++ b/guix/scripts/hash.scm
@@ -3,6 +3,7 @@
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2018 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
+;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -135,6 +136,11 @@ (define (vcs-file? file stat)
(else
#f)))
+ (define (directory? file)
+ (case (stat:type (stat file))
+ ((directory) #t)
+ (else #f)))
+
(let* ((opts (parse-options))
(args (filter-map (match-lambda
(('argument . value)
@@ -149,27 +155,37 @@ (define (vcs-file? file stat)
(define (file-hash file)
;; Compute the hash of FILE.
;; Catch and gracefully report possible '&nar-error' conditions.
- (with-error-handling
- (if (assoc-ref opts 'recursive?)
+ (if (and (assoc-ref opts 'recursive?)
+ (directory? file))
+ (with-error-handling
(let-values (((port get-hash)
(open-hash-port (assoc-ref opts 'hash-algorithm))))
(write-file file port #:select? select?)
(force-output port)
- (get-hash))
- (match file
- ("-" (port-hash (assoc-ref opts 'hash-algorithm)
- (current-input-port)))
- (_ (call-with-input-file file
- (cute port-hash (assoc-ref opts 'hash-algorithm)
- <>)))))))
-
- (match args
- ((file)
- (catch 'system-error
- (lambda ()
- (format #t "~a~%" (fmt (file-hash file))))
- (lambda args
- (leave (G_ "~a~%")
- (strerror (system-error-errno args))))))
- (x
- (leave (G_ "wrong number of arguments~%"))))))
+ (get-hash)))
+ (catch 'system-error
+ (lambda _
+ (call-with-input-file file
+ (cute port-hash (assoc-ref opts 'hash-algorithm)
+ <>)))
+ (lambda args
+ (when (directory? file)
+ (display-hint (G_ "Try @option{--recursive}.")))
+ (leave (G_ "~a ~a~%")
+ file
+ (strerror (system-error-errno args)))))))
+
+ (define (hash-to-display thing)
+ (match thing
+ ((? file-exists? file)
+ (fmt (file-hash file)))
+ ("-" (with-error-handling
+ (fmt (port-hash (assoc-ref opts 'hash-algorithm)
+ (current-input-port)))))
+ (x
+ (leave (G_ "wrong argument~%")))))
+
+ (for-each
+ (lambda (arg)
+ (format #t "~a~%" (hash-to-display arg)))
+ args)))
--
2.32.0
next prev parent reply other threads:[~2021-10-20 16:55 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-20 16:50 [bug#51307] [PATCH 0/2] guix hash: eases conversion zimoun
2021-10-20 16:54 ` zimoun [this message]
2021-10-20 16:54 ` [bug#51307] [PATCH 2/2] scripts: hash: Support file or package zimoun
2021-10-30 14:48 ` [bug#51307] [PATCH 0/2] guix hash: eases conversion Ludovic Courtès
2021-10-30 15:34 ` zimoun
2021-10-30 14:46 ` Ludovic Courtès
2021-10-30 15:40 ` zimoun
2021-10-31 13:43 ` Ludovic Courtès
2021-10-30 14:53 ` Ludovic Courtès
2021-10-30 15:19 ` zimoun
2021-10-30 15:24 ` zimoun
2021-10-31 14:03 ` Ludovic Courtès
2021-11-09 9:18 ` zimoun
2021-10-31 14:48 ` [bug#51307] Content hashes and file tree serialization methods Ludovic Courtès
2021-11-18 0:29 ` zimoun
2021-11-18 0:20 ` [bug#51307] [PATCH v2 0/3] scripts: hash: Several files and serializer zimoun
2021-11-18 0:20 ` [bug#51307] [PATCH v2 1/3] scripts: hash: Support several files zimoun
2021-12-17 16:17 ` Ludovic Courtès
2021-11-18 0:20 ` [bug#51307] [PATCH v2 2/3] scripts: hash: Add 'serializer' option zimoun
2021-12-17 16:17 ` Ludovic Courtès
2021-11-18 0:20 ` [bug#51307] [PATCH v2 3/3] scripts: hash: Add git serializer zimoun
[not found] ` <87bl1bjsxf.fsf@gnu.org>
[not found] ` <CAJ3okZ00+BSw=nuhGP8NTwU8ZmitzrfFzTw0WecsOB9rZ+hG_g@mail.gmail.com>
2021-12-21 9:09 ` Ludovic Courtès
2021-12-15 8:06 ` [bug#51307] [PATCH v2 0/3] scripts: hash: Several files and serializer zimoun
2021-12-15 10:05 ` Ludovic Courtès
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211020165435.3358398-1-zimon.toutoune@gmail.com \
--to=zimon.toutoune@gmail.com \
--cc=51307@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).