unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
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 --]

             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

  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=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 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).