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