Package: guix-patches;
Reported by: Simon Tournier <zimon.toutoune <at> gmail.com>
Date: Sun, 5 Nov 2023 23:02:01 UTC
Severity: normal
Tags: patch
Done: Simon Tournier <zimon.toutoune <at> gmail.com>
Bug is archived. No further changes may be made.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Simon Tournier <zimon.toutoune <at> gmail.com> To: guix-patches <at> gnu.org Cc: Simon Tournier <zimon.toutoune <at> gmail.com> Subject: [PATCH] scripts: hash: Handle repository with different VCS folders. Date: Mon, 6 Nov 2023 00:00:55 +0100
Fixes <https://issues.guix.gnu.org/issue/65979>. Reported by Simon Tournier <zimon.toutoune <at> gmail.com> * guix/hash.scm (vcs-file?): Add optional argument for passing VCS kind of the file/repository. (file-hash*): Adjust accordingly. * guix/scripts/hash.scm (guix-hash)[file-hash]: Detect VCS kind of the file/repository and passes it. Change-Id: I8e286c3426ddefd664dc3a471d5a09e309824faa --- guix/hash.scm | 18 ++++++++++++------ guix/scripts/hash.scm | 18 +++++++++++++----- 2 files changed, 25 insertions(+), 11 deletions(-) Hi, I re-resend this patch for more attractions in case I have missed something. :-) It had already been send more than 2 weeks ago as an answer to #65979. It fixes a corner case of "guix hash". --8<---------------cut here---------------start------------->8--- $ git clone https://github.com/s-andrews/FastQC /tmp/FastQC $ git -C /tmp/FastQC/ checkout v0.11.9 $ find /tmp/FastQC/ -type d -name ".git" -print /tmp/FastQC/.git $ find /tmp/FastQC/ -type d -name ".svn" -print /tmp/FastQC/Help/1 Introduction/.svn /tmp/FastQC/Help/3 Analysis Modules/.svn /tmp/FastQC/Help/2 Basic Operations/.svn $ guix hash -rx /tmp/FastQC 0jyk90kg6s62w3dn6qjx9nrawjs12qx172lii0yxbvsfylhnx479 $ grep -A 15 'define-public fastqc' gnu/packages/bioinformatics.scm | grep -C 1 base32 (sha256 (base32 "00y9drm0bkpxw8xfl8ysss18jmnhj8blgqgr6fpa58rkpfcbg8qk")) $ ./pre-inst-env guix hash -rx /tmp/FastQC 00y9drm0bkpxw8xfl8ysss18jmnhj8blgqgr6fpa58rkpfcbg8qk --8<---------------cut here---------------end--------------->8--- And it does not introduce any significant penalty: --8<---------------cut here---------------start------------->8--- $ time guix hash -rx . 093w70scf2v64bdbln5m2xjm63pzfib903w1mcb2smj32g0w8y63 real 0m9.730s user 0m20.468s sys 0m1.487s $ time ./pre-inst-env guix hash -rx . 093w70scf2v64bdbln5m2xjm63pzfib903w1mcb2smj32g0w8y63 real 0m9.632s user 0m20.320s sys 0m1.541s --8<---------------cut here---------------end--------------->8--- WDYT? Cheers, simon diff --git a/guix/hash.scm b/guix/hash.scm index 3cb68e5c44..8fff51e8f1 100644 --- a/guix/hash.scm +++ b/guix/hash.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2021 Sarah Morgensen <iskarian <at> mgsn.dev> ;;; Copyright © 2022 Maxime Devos <maximedevos <at> telenet.be> +;;; Copyright © 2023 Simon Tournier <zimon.toutoune <at> gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -25,21 +26,26 @@ (define-module (guix hash) #:export (vcs-file? file-hash*)) -(define (vcs-file? file stat) - "Returns true if FILE is a version control system file." +(define* (vcs-file? file stat + #:optional + (vcses (list ".bzr" ".git" ".hg" ".svn" "CVS"))) + "Returns true if FILE matches a version control system from the list VCSES." (case (stat:type stat) ((directory) - (member (basename file) '(".bzr" ".git" ".hg" ".svn" "CVS"))) + (member (basename file) vcses)) ((regular) - ;; Git sub-modules have a '.git' file that is a regular text file. - (string=? (basename file) ".git")) + (if (member ".git" vcses) + ;; Git sub-modules have a '.git' file that is a regular text file. + (string=? (basename file) ".git") + #f)) (else #f))) (define* (file-hash* file #:key (algorithm (hash-algorithm sha256)) (recursive? 'auto) - (select? (negate vcs-file?))) + (select? (negate (lambda (file stat) + (vcs-file? file stat))))) "Compute the hash of FILE with ALGORITHM. Symbolic links are only dereferenced if RECURSIVE? is false. diff --git a/guix/scripts/hash.scm b/guix/scripts/hash.scm index 7197d3965c..ed96e6a7e1 100644 --- a/guix/scripts/hash.scm +++ b/guix/scripts/hash.scm @@ -3,7 +3,7 @@ ;;; Copyright © 2013 Nikita Karetnikov <nikita <at> karetnikov.org> ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke <at> gnu.org> ;;; Copyright © 2018 Tim Gesthuizen <tim.gesthuizen <at> yahoo.de> -;;; Copyright © 2021 Simon Tournier <zimon.toutoune <at> gmail.com> +;;; Copyright © 2021, 2023 Simon Tournier <zimon.toutoune <at> gmail.com> ;;; Copyright © 2021 Sarah Morgensen <iskarian <at> mgsn.dev> ;;; ;;; This file is part of GNU Guix. @@ -181,9 +181,6 @@ (define-command (guix-hash . args) (_ #f)) (reverse opts))) (fmt (assq-ref opts 'format)) - (select? (if (assq-ref opts 'exclude-vcs?) - (negate vcs-file?) - (const #t))) (algorithm (assoc-ref opts 'hash-algorithm)) (serializer (assoc-ref opts 'serializer))) @@ -193,7 +190,18 @@ (define-command (guix-hash . args) (catch 'system-error (lambda _ (with-error-handling - (serializer file algorithm select?))) + (let* ((vcses (fold (lambda (vcs result) + (if (file-exists? (string-append file "/" vcs)) + (cons vcs result) + result)) + '() + (list ".bzr" ".git" ".hg" ".svn" "CVS"))) + (select? (if (assq-ref opts 'exclude-vcs?) + (negate (lambda (file stat) + (vcs-file? file stat + vcses))) + (const #t)))) + (serializer file algorithm select?)))) (lambda args (leave (G_ "~a ~a~%") file base-commit: 08d94fe20eca47b69678b3eced8749dd02c700a4 -- 2.41.0
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.