diff options
author | Tom Willemse | 2013-05-25 20:49:55 +0200 |
---|---|---|
committer | Tom Willemse | 2013-05-25 20:49:55 +0200 |
commit | 6c05056f84c0ca6fc79fdb2a375b425bc53944c2 (patch) | |
tree | df8950e14bda3a2bbeb7e5be8144e9553e17aa5d | |
parent | 439a262ec4f9f9a3dd73a69d17f3ef3765036dec (diff) | |
download | gitto-6c05056f84c0ca6fc79fdb2a375b425bc53944c2.tar.gz gitto-6c05056f84c0ca6fc79fdb2a375b425bc53944c2.zip |
Allow multiple values for config settings
Setting a list as a value for `global-config' will instruct gitto to
place that setting in the config more than once. For example:
,----
| (set! global-config
| '(("remote \"origin\""
| ("url" . "git@somehost.com:~a.git")
| ("pushurl" "git@somehost.com:~a.git"
| "git@someotherhost.com:user/~a.git"))))
`----
Will produce output similar to:
,----
| [remote "origin"]
| url = git@somehost.com:repo-name.git
| pushurl = git@somehost.com:repo-name.git
| pushurl = git@someotherhost.com:user/repo-name.git
`----
The ordering may vary depending on what was already found in the
`origin' remote's settings.
gitto doesn't know or care which settings can and cannot appear more
than once in a configuration, it is up to the user to provide valid
values.
-rw-r--r-- | gitto/config.scm | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/gitto/config.scm b/gitto/config.scm index 6726e66..ae0bf7b 100644 --- a/gitto/config.scm +++ b/gitto/config.scm @@ -51,12 +51,22 @@ y) lst)) +(define (merge-setting repo-name lst var val) + (assoc-set! lst var (format #f val repo-name))) + (define (merge-settings repo-name x y) (let ((lst (if x (list-copy x) '()))) - (for-each (lambda (v) - (set! lst (assoc-set! - lst (car v) (format #f (cdr v) repo-name)))) - y) + (for-each + (lambda (v) + (if (list? v) + (begin + (set! lst (merge-setting repo-name lst (car v) (cadr v))) + (set! lst (append lst (map (lambda (s) + (cons (car v) + (format #f s repo-name))) + (cddr v))))) + (set! lst (merge-setting repo-name lst (car v) (cdr v))))) + y) lst)) (define (parse-setting line) |