summaryrefslogtreecommitdiff
path: root/guix/scripts
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2022-03-20 18:56:46 +0100
committerLudovic Courtès <ludo@gnu.org>2022-03-20 19:02:41 +0100
commit6da2a5a5655668f42ec5b26f875ddbc498e132b6 (patch)
treedbfde9c590cd244e9ae8b25a511db4bc2870838d /guix/scripts
parent92c23970709bc58c33b99ab9449eaf67ac5a0694 (diff)
home: import: Properly parse aliases that contain quotes.
* guix/scripts/home/import.scm (generate-bash-configuration+modules): Define 'alias-rx'. [bash-alias->pair]: Use it. * tests/home-import.scm (match-home-environment-bash-service-with-alias): New variable. ("manifest->code: Bash service with aliases"): New test.
Diffstat (limited to 'guix/scripts')
-rw-r--r--guix/scripts/home/import.scm15
1 files changed, 9 insertions, 6 deletions
diff --git a/guix/scripts/home/import.scm b/guix/scripts/home/import.scm
index 15bd3140ed..f01a98bc55 100644
--- a/guix/scripts/home/import.scm
+++ b/guix/scripts/home/import.scm
@@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
-;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021-2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2022 Arjan Adriaanse <arjan@adriaan.se>
;;;
;;; This file is part of GNU Guix.
@@ -60,12 +60,15 @@ FILE-NAME with \"-\", and return the basename of it."
(define (destination-append path)
(string-append destination-directory "/" path))
+ (define alias-rx
+ (make-regexp "^alias ([^=]+)=[\"'](.+)[\"']$"))
+
(define (bash-alias->pair line)
- (if (string-prefix? "alias" line)
- (let ((matched (string-match "alias (.+)=\"?'?([^\"']+)\"?'?" line)))
- `(,(match:substring matched 1) . ,(match:substring matched 2)))
- '()))
-
+ (match (regexp-exec alias-rx line)
+ (#f '())
+ (matched
+ `(,(match:substring matched 1) . ,(match:substring matched 2)))))
+
(define (parse-aliases input)
(let loop ((line (read-line input))
(result '()))