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.
This commit is contained in:
Ludovic Courtès 2022-03-20 18:56:46 +01:00
parent 92c2397070
commit 6da2a5a565
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 40 additions and 6 deletions

View file

@ -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 '()))