aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tom Willemse2013-05-25 20:49:55 +0200
committerGravatar Tom Willemse2013-05-25 20:49:55 +0200
commit6c05056f84c0ca6fc79fdb2a375b425bc53944c2 (patch)
treedf8950e14bda3a2bbeb7e5be8144e9553e17aa5d
parent439a262ec4f9f9a3dd73a69d17f3ef3765036dec (diff)
downloadgitto-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.scm18
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)