From 3ad8f7757c840de290a6035747578a18ff7279da Mon Sep 17 00:00:00 2001 From: Mathieu Othacehe Date: Wed, 5 Dec 2018 14:24:04 +0900 Subject: installer: Add new utils. * gnu/installer/utils.scm (nearest-exact-integer): New exported procedure, (read-percentage): ditto, (run-shell-command): ditto. --- gnu/installer/utils.scm | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'gnu/installer') diff --git a/gnu/installer/utils.scm b/gnu/installer/utils.scm index 5087683715..e91f90a84d 100644 --- a/gnu/installer/utils.scm +++ b/gnu/installer/utils.scm @@ -17,10 +17,16 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu installer utils) + #:use-module (guix utils) + #:use-module (guix build utils) #:use-module (ice-9 rdelim) + #:use-module (ice-9 regex) #:use-module (ice-9 textual-ports) #:export (read-lines - read-all)) + read-all + nearest-exact-integer + read-percentage + run-shell-command)) (define* (read-lines #:optional (port (current-input-port))) "Read lines from PORT and return them as a list." @@ -35,3 +41,23 @@ (define (read-all file) "Return the content of the given FILE as a string." (call-with-input-file file get-string-all)) + +(define (nearest-exact-integer x) + "Given a real number X, return the nearest exact integer, with ties going to +the nearest exact even integer." + (inexact->exact (round x))) + +(define (read-percentage percentage) + "Read PERCENTAGE string and return the corresponding percentage as a +number. If no percentage is found, return #f" + (let ((result (string-match "^([0-9]+)%$" percentage))) + (and result + (string->number (match:substring result 1))))) + +(define (run-shell-command command) + (call-with-temporary-output-file + (lambda (file port) + (format port "~a~%" command) + ;; (format port "exit~%") + (close port) + (invoke "bash" "--init-file" file)))) -- cgit v1.2.3