[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] scripts: hash: Add --exclude-.git option.
From: |
Jan Nieuwenhuizen |
Subject: |
Re: [PATCH] scripts: hash: Add --exclude-.git option. |
Date: |
Mon, 05 Sep 2016 23:04:11 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
Efraim Flashner writes:
> Can this be generalized? `grep \\-download\) gnu/packages/*scm' shows also
> svn-download, cvs-download and a lone hg-download.
Okay. What about simply having non-default
--exclude=FILE
See attached. (Missing test included this time).
Greetings,
Jan
>From ae738ad845f6d9e7576c42c53db6f7036b006e6c Mon Sep 17 00:00:00 2001
From: Jan Nieuwenhuizen <address@hidden>
Date: Mon, 5 Sep 2016 10:27:19 +0200
Subject: [PATCH] scripts: hash: Add --exclude option.
* guix/scripts/hash.scm (show-help): Add help text for --exclude option.
(%options): Add --exclude option.
(guix-hash): Handle exclude option.
* doc/guix.texi ("invoking guix hash"): Update doc.
* tests/guix-hash.sh: Add test.
---
doc/guix.texi | 14 +++++++++++++-
guix/scripts/hash.scm | 18 +++++++++++++++---
tests/guix-hash.sh | 17 +++++++++++++++++
3 files changed, 45 insertions(+), 4 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 5330238..b5c0a7d 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -4616,10 +4616,17 @@ The general syntax is:
guix hash @var{option} @var{file}
@end example
address@hidden hash} has the following option:
address@hidden hash} has the following options:
@table @code
address@hidden address@hidden
address@hidden -e @var{file}
+Exclude @var{file} when computing a recursive hash, e.g.:
address@hidden
+$ guix hash -r -e .git .
address@hidden example
+
@item address@hidden
@itemx -f @var{fmt}
Write the hash in the format specified by @var{fmt}.
@@ -4655,6 +4662,11 @@ $ cd foo
$ rm -rf .git
$ guix hash -r .
@end example
address@hidden
+or simply use the -e (--exclude) option
address@hidden
+$ guix hash -r -e .git .
address@hidden example
@end table
@node Invoking guix import
diff --git a/guix/scripts/hash.scm b/guix/scripts/hash.scm
index d440953..642e1c0 100644
--- a/guix/scripts/hash.scm
+++ b/guix/scripts/hash.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <address@hidden>
;;; Copyright © 2013 Nikita Karetnikov <address@hidden>
+;;; Copyright © 2016 Jan Nieuwenhuizen <address@hidden>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -49,6 +50,8 @@ Return the cryptographic hash of FILE.
Supported formats: 'nix-base32' (default), 'base32', and 'base16' ('hex'
and 'hexadecimal' can be used as well).\n"))
(format #t (_ "
+ -e, --exclude=FILE exclude FILE when computing hash"))
+ (format #t (_ "
-f, --format=FMT write the hash in the given format"))
(format #t (_ "
-r, --recursive compute the hash on FILE recursively"))
@@ -62,7 +65,10 @@ and 'hexadecimal' can be used as well).\n"))
(define %options
;; Specification of the command-line options.
- (list (option '(#\f "format") #t #f
+ (list (option '(#\e "exclude") #t #f
+ (lambda (opt name arg result)
+ (alist-cons 'exclude arg result)))
+ (option '(#\f "format") #t #f
(lambda (opt name arg result)
(define fmt-proc
(match arg
@@ -78,6 +84,7 @@ and 'hexadecimal' can be used as well).\n"))
(alist-cons 'format fmt-proc
(alist-delete 'format result))))
+
(option '(#\r "recursive") #f #f
(lambda (opt name arg result)
(alist-cons 'recursive? #t result)))
@@ -113,7 +120,12 @@ and 'hexadecimal' can be used as well).\n"))
value)
(_ #f))
(reverse opts)))
- (fmt (assq-ref opts 'format)))
+ (fmt (assq-ref opts 'format))
+ (exclude (assq-ref opts 'exclude))
+ (select? (if exclude
+ (lambda (f s)
+ (not (string= f (string-append (car args) "/"
exclude))))
+ (const #t))))
(define (file-hash file)
;; Compute the hash of FILE.
@@ -121,7 +133,7 @@ and 'hexadecimal' can be used as well).\n"))
(with-error-handling
(if (assoc-ref opts 'recursive?)
(let-values (((port get-hash) (open-sha256-port)))
- (write-file file port)
+ (write-file file port #:select? select?)
(flush-output-port port)
(get-hash))
(call-with-input-file file port-sha256))))
diff --git a/tests/guix-hash.sh b/tests/guix-hash.sh
index 23df01d..b59939e 100644
--- a/tests/guix-hash.sh
+++ b/tests/guix-hash.sh
@@ -1,5 +1,6 @@
# GNU Guix --- Functional package management for GNU
# Copyright © 2013, 2014 Ludovic Courtès <address@hidden>
+# Copyright © 2016 Jan Nieuwenhuizen <address@hidden>
#
# This file is part of GNU Guix.
#
@@ -20,6 +21,7 @@
# Test the `guix hash' command-line utility.
#
+set -x
guix hash --version
tmpdir="guix-hash-$$"
@@ -46,4 +48,18 @@ then false; else true; fi
# the archive format doesn't support.
if guix hash -r /dev/null
then false; else true; fi
+
+# Adding a .git directory
+mkdir "$tmpdir/.git"
+touch "$tmpdir/.git/foo"
+
+# ...changes the hash
+test `guix hash -r $tmpdir` =
0a50z04zyzf7pidwxv0nwbj82pgzbrhdy9562kncnvkcfvb48m59
+
+# ...but remains the same when using `-e .git'
+test `guix hash -r $tmpdir -e .git` =
10k1lw41wyrjf9mxydi0is5nkpynlsvgslinics4ppir13g7d74p
+
+# Without '-r', this should fail.
+if guix hash "$tmpdir"
+then false; else true; fi
+
--
2.9.3
--
Jan Nieuwenhuizen <address@hidden> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.nl
Re: [PATCH] scripts: hash: Add --exclude-.git option., Danny Milosavljevic, 2016/09/05
Re: [PATCH] scripts: hash: Add --exclude-.git option., Ludovic Courtès, 2016/09/05