guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/12: utils: Move base16 procedures to (guix base16).


From: Ludovic Courtès
Subject: 01/12: utils: Move base16 procedures to (guix base16).
Date: Thu, 16 Mar 2017 18:04:23 -0400 (EDT)

civodul pushed a commit to branch master
in repository guix.

commit 4c0c4db0702048488a9712dbba7cad862c667d54
Author: Ludovic Courtès <address@hidden>
Date:   Wed Mar 15 21:54:34 2017 +0100

    utils: Move base16 procedures to (guix base16).
    
    * guix/utils.scm (bytevector->base16-string, base16-string->bytevector):
    Move to...
    * guix/base16.scm: ... here.  New file.
    * tests/utils.scm ("bytevector->base16-string->bytevector"): Move to...
    * tests/base16.scm: ... here.  New file.
    * Makefile.am (MODULES): Add guix/base16.scm.
    (SCM_TESTS): Add tests/base16.scm.
    * build-aux/download.scm, guix/derivations.scm,
    guix/docker.scm, guix/import/snix.scm, guix/pk-crypto.scm,
    guix/scripts/authenticate.scm, guix/scripts/download.scm,
    guix/scripts/hash.scm, guix/store.scm, tests/hash.scm,
    tests/pk-crypto.scm: Adjust imports accordingly.
---
 Makefile.am                   |  2 ++
 build-aux/download.scm        |  4 +--
 guix/base16.scm               | 83 +++++++++++++++++++++++++++++++++++++++++++
 guix/derivations.scm          |  1 +
 guix/docker.scm               |  1 +
 guix/import/snix.scm          |  3 +-
 guix/pk-crypto.scm            |  6 ++--
 guix/scripts/authenticate.scm |  4 +--
 guix/scripts/download.scm     |  4 +--
 guix/scripts/hash.scm         |  2 +-
 guix/store.scm                |  1 +
 guix/utils.scm                | 65 +--------------------------------
 tests/base16.scm              | 34 ++++++++++++++++++
 tests/hash.scm                |  2 +-
 tests/pk-crypto.scm           |  3 +-
 tests/utils.scm               |  9 +----
 16 files changed, 138 insertions(+), 86 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index dea70de..ff37a46 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -30,6 +30,7 @@ nodist_noinst_SCRIPTS =                               \
 include gnu/local.mk
 
 MODULES =                                      \
+  guix/base16.scm                              \
   guix/base32.scm                              \
   guix/base64.scm                              \
   guix/cpio.scm                                        \
@@ -251,6 +252,7 @@ TEST_EXTENSIONS = .scm .sh
 if CAN_RUN_TESTS
 
 SCM_TESTS =                                    \
+  tests/base16.scm                             \
   tests/base32.scm                             \
   tests/base64.scm                             \
   tests/cpio.scm                               \
diff --git a/build-aux/download.scm b/build-aux/download.scm
index 1e91e4b..8f41f33 100644
--- a/build-aux/download.scm
+++ b/build-aux/download.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013 Ludovic Courtès <address@hidden>
+;;; Copyright © 2012, 2013, 2017 Ludovic Courtès <address@hidden>
 ;;; Copyright © 2014, 2015 Mark H Weaver <address@hidden>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -26,7 +26,7 @@
              (web client)
              (rnrs io ports)
              (srfi srfi-11)
-             (guix utils)
+             (guix base16)
              (guix hash))
 
 (define %url-base
diff --git a/guix/base16.scm b/guix/base16.scm
new file mode 100644
index 0000000..6c15a9f
--- /dev/null
+++ b/guix/base16.scm
@@ -0,0 +1,83 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012, 2014, 2017 Ludovic Courtès <address@hidden>
+;;;
+;;; 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 base16)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:use-module (srfi srfi-60)
+  #:use-module (rnrs bytevectors)
+  #:use-module (ice-9 vlist)
+  #:use-module (ice-9 format)
+  #:export (bytevector->base16-string
+            base16-string->bytevector))
+
+;;;
+;;; Base 16.
+;;;
+
+(define (bytevector->base16-string bv)
+  "Return the hexadecimal representation of BV's contents."
+  (define len
+    (bytevector-length bv))
+
+  (let-syntax ((base16-chars (lambda (s)
+                               (syntax-case s ()
+                                 (_
+                                  (let ((v (list->vector
+                                            (unfold (cut > <> 255)
+                                                    (lambda (n)
+                                                      (format #f "~2,'0x" n))
+                                                    1+
+                                                    0))))
+                                    v))))))
+    (define chars base16-chars)
+    (let loop ((i len)
+               (r '()))
+      (if (zero? i)
+          (string-concatenate r)
+          (let ((i (- i 1)))
+            (loop i
+                  (cons (vector-ref chars (bytevector-u8-ref bv i)) r)))))))
+
+(define base16-string->bytevector
+  (let ((chars->value (fold (lambda (i r)
+                              (vhash-consv (string-ref (number->string i 16)
+                                                       0)
+                                           i r))
+                            vlist-null
+                            (iota 16))))
+    (lambda (s)
+      "Return the bytevector whose hexadecimal representation is string S."
+      (define bv
+        (make-bytevector (quotient (string-length s) 2) 0))
+
+      (string-fold (lambda (chr i)
+                     (let ((j (quotient i 2))
+                           (v (and=> (vhash-assv chr chars->value) cdr)))
+                       (if v
+                           (if (zero? (logand i 1))
+                               (bytevector-u8-set! bv j
+                                                   (arithmetic-shift v 4))
+                               (let ((w (bytevector-u8-ref bv j)))
+                                 (bytevector-u8-set! bv j (logior v w))))
+                           (error "invalid hexadecimal character" chr)))
+                     (+ i 1))
+                   0
+                   s)
+      bv)))
+
diff --git a/guix/derivations.scm b/guix/derivations.scm
index 47a783f..e02d1ee 100644
--- a/guix/derivations.scm
+++ b/guix/derivations.scm
@@ -31,6 +31,7 @@
   #:use-module (ice-9 vlist)
   #:use-module (guix store)
   #:use-module (guix utils)
+  #:use-module (guix base16)
   #:use-module (guix memoization)
   #:use-module (guix combinators)
   #:use-module (guix monads)
diff --git a/guix/docker.scm b/guix/docker.scm
index dbe1e53..6dabaf2 100644
--- a/guix/docker.scm
+++ b/guix/docker.scm
@@ -19,6 +19,7 @@
 (define-module (guix docker)
   #:use-module (guix hash)
   #:use-module (guix store)
+  #:use-module (guix base16)
   #:use-module (guix utils)
   #:use-module ((guix build utils)
                 #:select (delete-file-recursively
diff --git a/guix/import/snix.scm b/guix/import/snix.scm
index bc75cbf..778768f 100644
--- a/guix/import/snix.scm
+++ b/guix/import/snix.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016 Ludovic Courtès 
<address@hidden>
+;;; Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès 
<address@hidden>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -39,6 +39,7 @@
   #:use-module ((guix build utils) #:select (package-name->name+version))
 
   #:use-module (guix import utils)
+  #:use-module (guix base16)
   #:use-module (guix base32)
   #:use-module (guix config)
   #:use-module (guix gnu-maintenance)
diff --git a/guix/pk-crypto.scm b/guix/pk-crypto.scm
index f90c2e6..7017006 100644
--- a/guix/pk-crypto.scm
+++ b/guix/pk-crypto.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <address@hidden>
+;;; Copyright © 2013, 2014, 2015, 2017 Ludovic Courtès <address@hidden>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -17,9 +17,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (guix pk-crypto)
-  #:use-module ((guix utils)
-                #:select (bytevector->base16-string
-                          base16-string->bytevector))
+  #:use-module (guix base16)
   #:use-module (guix gcrypt)
 
   #:use-module (system foreign)
diff --git a/guix/scripts/authenticate.scm b/guix/scripts/authenticate.scm
index d9f799d..d9a312f 100644
--- a/guix/scripts/authenticate.scm
+++ b/guix/scripts/authenticate.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <address@hidden>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <address@hidden>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -18,7 +18,7 @@
 
 (define-module (guix scripts authenticate)
   #:use-module (guix config)
-  #:use-module (guix utils)
+  #:use-module (guix base16)
   #:use-module (guix pk-crypto)
   #:use-module (guix pki)
   #:use-module (guix ui)
diff --git a/guix/scripts/download.scm b/guix/scripts/download.scm
index dffff79..1ddfd64 100644
--- a/guix/scripts/download.scm
+++ b/guix/scripts/download.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2015, 2016 Ludovic Courtès <address@hidden>
+;;; Copyright © 2012, 2013, 2015, 2016, 2017 Ludovic Courtès <address@hidden>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,7 +21,7 @@
   #:use-module (guix scripts)
   #:use-module (guix store)
   #:use-module (guix hash)
-  #:use-module (guix utils)
+  #:use-module (guix base16)
   #:use-module (guix base32)
   #:use-module ((guix download) #:hide (url-fetch))
   #:use-module ((guix build download)
diff --git a/guix/scripts/hash.scm b/guix/scripts/hash.scm
index 640b241..a048b53 100644
--- a/guix/scripts/hash.scm
+++ b/guix/scripts/hash.scm
@@ -24,7 +24,7 @@
   #:use-module (guix serialization)
   #:use-module (guix ui)
   #:use-module (guix scripts)
-  #:use-module (guix utils)
+  #:use-module (guix base16)
   #:use-module (ice-9 binary-ports)
   #:use-module (rnrs files)
   #:use-module (ice-9 match)
diff --git a/guix/store.scm b/guix/store.scm
index cce460f..2f05351 100644
--- a/guix/store.scm
+++ b/guix/store.scm
@@ -22,6 +22,7 @@
   #:use-module (guix memoization)
   #:use-module (guix serialization)
   #:use-module (guix monads)
+  #:use-module (guix base16)
   #:autoload   (guix base32) (bytevector->base32-string)
   #:autoload   (guix build syscalls) (terminal-columns)
   #:use-module (rnrs bytevectors)
diff --git a/guix/utils.scm b/guix/utils.scm
index b72e3f2..bc90686 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -28,15 +28,12 @@
   #:use-module (srfi srfi-11)
   #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-39)
-  #:use-module (srfi srfi-60)
-  #:use-module (rnrs bytevectors)
   #:use-module (ice-9 binary-ports)
   #:autoload   (rnrs io ports) (make-custom-binary-input-port)
   #:use-module ((rnrs bytevectors) #:select (bytevector-u8-set!))
   #:use-module (guix memoization)
   #:use-module ((guix build utils) #:select (dump-port))
   #:use-module ((guix build syscalls) #:select (mkdtemp! fdatasync))
-  #:use-module (ice-9 vlist)
   #:use-module (ice-9 format)
   #:autoload   (ice-9 popen)  (open-pipe*)
   #:autoload   (ice-9 rdelim) (read-line)
@@ -46,10 +43,7 @@
   #:use-module ((ice-9 iconv) #:prefix iconv:)
   #:use-module (system foreign)
   #:re-export (memoize)         ; for backwards compatibility
-  #:export (bytevector->base16-string
-            base16-string->bytevector
-
-            strip-keyword-arguments
+  #:export (strip-keyword-arguments
             default-keyword-arguments
             substitute-keyword-arguments
             ensure-keyword-arguments
@@ -100,63 +94,6 @@
 
 
 ;;;
-;;; Base 16.
-;;;
-
-(define (bytevector->base16-string bv)
-  "Return the hexadecimal representation of BV's contents."
-  (define len
-    (bytevector-length bv))
-
-  (let-syntax ((base16-chars (lambda (s)
-                               (syntax-case s ()
-                                 (_
-                                  (let ((v (list->vector
-                                            (unfold (cut > <> 255)
-                                                    (lambda (n)
-                                                      (format #f "~2,'0x" n))
-                                                    1+
-                                                    0))))
-                                    v))))))
-    (define chars base16-chars)
-    (let loop ((i len)
-               (r '()))
-      (if (zero? i)
-          (string-concatenate r)
-          (let ((i (- i 1)))
-            (loop i
-                  (cons (vector-ref chars (bytevector-u8-ref bv i)) r)))))))
-
-(define base16-string->bytevector
-  (let ((chars->value (fold (lambda (i r)
-                              (vhash-consv (string-ref (number->string i 16)
-                                                       0)
-                                           i r))
-                            vlist-null
-                            (iota 16))))
-    (lambda (s)
-      "Return the bytevector whose hexadecimal representation is string S."
-      (define bv
-        (make-bytevector (quotient (string-length s) 2) 0))
-
-      (string-fold (lambda (chr i)
-                     (let ((j (quotient i 2))
-                           (v (and=> (vhash-assv chr chars->value) cdr)))
-                       (if v
-                           (if (zero? (logand i 1))
-                               (bytevector-u8-set! bv j
-                                                   (arithmetic-shift v 4))
-                               (let ((w (bytevector-u8-ref bv j)))
-                                 (bytevector-u8-set! bv j (logior v w))))
-                           (error "invalid hexadecimal character" chr)))
-                     (+ i 1))
-                   0
-                   s)
-      bv)))
-
-
-
-;;;
 ;;; Filtering & pipes.
 ;;;
 
diff --git a/tests/base16.scm b/tests/base16.scm
new file mode 100644
index 0000000..a64b650
--- /dev/null
+++ b/tests/base16.scm
@@ -0,0 +1,34 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012, 2017 Ludovic Courtès <address@hidden>
+;;;
+;;; 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 (test-base16)
+  #:use-module (guix base16)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-64)
+  #:use-module (rnrs bytevectors))
+
+(test-begin "base16")
+
+(test-assert "bytevector->base16-string->bytevector"
+  (every (lambda (bv)
+           (equal? (base16-string->bytevector
+                    (bytevector->base16-string bv))
+                   bv))
+         (map string->utf8 '("" "f" "fo" "foo" "foob" "fooba" "foobar"))))
+
+(test-end "base16")
diff --git a/tests/hash.scm b/tests/hash.scm
index 86501dc..b189e43 100644
--- a/tests/hash.scm
+++ b/tests/hash.scm
@@ -18,7 +18,7 @@
 
 (define-module (test-hash)
   #:use-module (guix hash)
-  #:use-module (guix utils)
+  #:use-module (guix base16)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-11)
   #:use-module (srfi srfi-64)
diff --git a/tests/pk-crypto.scm b/tests/pk-crypto.scm
index 5024a15..fe33a6f 100644
--- a/tests/pk-crypto.scm
+++ b/tests/pk-crypto.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014 Ludovic Courtès <address@hidden>
+;;; Copyright © 2013, 2014, 2017 Ludovic Courtès <address@hidden>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,6 +19,7 @@
 (define-module (test-pk-crypto)
   #:use-module (guix pk-crypto)
   #:use-module (guix utils)
+  #:use-module (guix base16)
   #:use-module (guix hash)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-11)
diff --git a/tests/utils.scm b/tests/utils.scm
index bcfaa14..035886d 100644
--- a/tests/utils.scm
+++ b/tests/utils.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès <address@hidden>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès 
<address@hidden>
 ;;; Copyright © 2014 Eric Bavier <address@hidden>
 ;;; Copyright © 2016 Mathieu Lirzin <address@hidden>
 ;;;
@@ -36,13 +36,6 @@
 
 (test-begin "utils")
 
-(test-assert "bytevector->base16-string->bytevector"
-  (every (lambda (bv)
-           (equal? (base16-string->bytevector
-                    (bytevector->base16-string bv))
-                   bv))
-         (map string->utf8 '("" "f" "fo" "foo" "foob" "fooba" "foobar"))))
-
 (test-assert "gnu-triplet->nix-system"
   (let ((samples '(("i586-gnu0.3" "i686-gnu")
                    ("x86_64-unknown-linux-gnu" "x86_64-linux")



reply via email to

[Prev in Thread] Current Thread [Next in Thread]