From: Nikita Karetnikov <nikita@karetnikov.org>
To: bug-guix@gnu.org
Subject: [PATCH] Add 'guix hash'.
Date: Mon, 01 Apr 2013 09:06:05 +0400 [thread overview]
Message-ID: <87li92alhe.fsf@karetnikov.org> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 474 bytes --]
This patch adds a 'guix hash' command.
I'd like it to output non-Base32 too, but I haven't found a way to
convert the output of 'sha256', which is a bytevector, to a string.
What options would you like to see implemented?
Should we capitalize error messages? The current one was copied from
'guix import'.
Is it OK to output a backtrace when the specified file doesn't exist?
For example:
# ./pre-inst-env guix hash foobar
Should we only print the error message?
[-- Attachment #1.2: 0001-Add-guix-hash.patch --]
[-- Type: text/x-diff, Size: 3943 bytes --]
From 8de1cfe973c1c0897a959250dad95048f12833b7 Mon Sep 17 00:00:00 2001
From: Nikita Karetnikov <nikita@karetnikov.org>
Date: Mon, 1 Apr 2013 04:48:02 +0000
Subject: [PATCH] Add 'guix hash'.
* guix/scripts/hash.scm: New file.
* Makefile.am (MODULES): Add it.
---
Makefile.am | 1 +
guix/scripts/hash.scm | 90 +++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 91 insertions(+), 0 deletions(-)
create mode 100644 guix/scripts/hash.scm
diff --git a/Makefile.am b/Makefile.am
index 41ef503..f2dffd8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -30,6 +30,7 @@ MODULES = \
guix/scripts/import.scm \
guix/scripts/package.scm \
guix/scripts/gc.scm \
+ guix/scripts/hash.scm \
guix/scripts/pull.scm \
guix/base32.scm \
guix/utils.scm \
diff --git a/guix/scripts/hash.scm b/guix/scripts/hash.scm
new file mode 100644
index 0000000..4ed04f2
--- /dev/null
+++ b/guix/scripts/hash.scm
@@ -0,0 +1,90 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix scripts hash)
+ #:use-module (guix base32)
+ #:use-module (guix ui)
+ #:use-module (guix utils)
+ #:use-module (rnrs io ports)
+ #:use-module (ice-9 match)
+ #:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-37)
+ #:export (guix-hash))
+
+(define (file->hash file)
+ "Return the cryptographic hash of FILE in Base32."
+ (call-with-input-file file
+ (compose bytevector->nix-base32-string
+ sha256
+ get-bytevector-all)))
+
+\f
+;;;
+;;; Command-line options.
+;;;
+
+(define %default-options
+ '())
+
+(define (show-help)
+ (display (_ "Usage: guix hash FILE
+Return the cryptographic hash of FILE in Base32.\n"))
+ (display (_ "
+ -h, --help display this help and exit"))
+ (display (_ "
+ -V, --version display version information and exit"))
+ (newline)
+ (show-bug-report-information))
+
+(define %options
+ ;; Specification of the command-line options.
+ (list (option '(#\h "help") #f #f
+ (lambda args
+ (show-help)
+ (exit 0)))
+ (option '(#\V "version") #f #f
+ (lambda args
+ (show-version-and-exit "guix hash")))))
+
+\f
+;;;
+;;; Entry point.
+;;;
+
+(define (guix-hash . args)
+ (define (parse-options)
+ ;; Return the alist of option values.
+ (args-fold args %options
+ (lambda (opt name arg result)
+ (leave (_ "~A: unrecognized option~%") name))
+ (lambda (arg result)
+ (alist-cons 'argument arg result))
+ %default-options))
+
+ (let* ((opts (parse-options))
+ (args (filter-map (match-lambda
+ (('argument . value)
+ value)
+ (_ #f))
+ (reverse opts))))
+ (match args
+ ((file)
+ (format #t "~a~%" (file->hash file)))
+
+ (_
+ (leave (_ "wrong number of arguments~%"))))))
--
1.7.5.4
[-- Attachment #2: Type: application/pgp-signature, Size: 835 bytes --]
next reply other threads:[~2013-04-01 5:03 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-01 5:06 Nikita Karetnikov [this message]
2013-04-03 8:34 ` [PATCH] Add 'guix hash' Ludovic Courtès
2013-04-05 14:04 ` Nikita Karetnikov
2013-04-05 14:14 ` Nikita Karetnikov
2013-04-05 16:15 ` Ludovic Courtès
2013-04-10 11:48 ` Nikita Karetnikov
2013-04-10 11:54 ` Ludovic Courtès
2013-04-10 12:21 ` Nikita Karetnikov
2013-04-10 17:30 ` Ludovic Courtès
2013-04-05 16:13 ` Ludovic Courtès
2013-04-09 16:28 ` Nikita Karetnikov
2013-04-11 20:35 ` Ludovic Courtès
2013-04-12 5:24 ` master: FAIL: tests/guix-package.sh (was: [PATCH] Add 'guix hash'.) Nikita Karetnikov
2013-04-12 6:48 ` master: FAIL: tests/guix-package.sh Nikita Karetnikov
2013-04-12 16:24 ` Ludovic Courtès
2013-04-18 5:01 ` Enhanced 'warning' (was: [PATCH] Add 'guix hash'.) Nikita Karetnikov
2013-04-18 5:06 ` Enhanced 'warning' Nikita Karetnikov
2013-04-18 11:55 ` Ludovic Courtès
2013-04-18 19:27 ` Nikita Karetnikov
2013-04-18 20:59 ` Ludovic Courtès
2013-04-19 20:16 ` [PATCH] ui: Add a 'define-diagnostic' macro. (was: Enhanced 'warning') Nikita Karetnikov
2013-04-20 5:48 ` [PATCH] ui: Add a 'define-diagnostic' macro Nikita Karetnikov
2013-04-20 9:10 ` Ludovic Courtès
2013-04-20 17:33 ` Nikita Karetnikov
2013-04-20 19:55 ` Ludovic Courtès
2013-04-20 9:09 ` Ludovic Courtès
2013-04-21 18:14 ` [PATCH] Add 'guix hash' Nikita Karetnikov
2013-04-21 19:02 ` 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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87li92alhe.fsf@karetnikov.org \
--to=nikita@karetnikov.org \
--cc=bug-guix@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 external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.