diff --git a/gitto/Makefile b/gitto/Makefile index 6d8f92d..5481342 100644 --- a/gitto/Makefile +++ b/gitto/Makefile @@ -3,8 +3,8 @@ SITEDIR = $(shell pkg-config guile-2.0 --variable=sitedir \ --define-variable=prefix=$(DESTDIR)) COMPDIR = $(DESTDIR)/lib/guile/2.0/site-ccache -objects = config.scm config.go git.scm git.go main.scm main.go path.scm \ - path.go +objects = config.scm config.go git.scm git.go ui.scm ui.go main.scm \ + main.go path.scm path.go install-objects = $(addprefix install-,$(objects)) uninstall-objects = $(addprefix uninstall-,$(objects)) diff --git a/gitto/main.scm b/gitto/main.scm index d6ca4c0..c162a10 100644 --- a/gitto/main.scm +++ b/gitto/main.scm @@ -21,6 +21,7 @@ #:use-module (gitto config) #:use-module (gitto git) #:use-module (gitto path) + #:use-module (gitto ui) #:use-module (ice-9 format) #:use-module (ice-9 popen) #:use-module (oop goops) @@ -106,8 +107,17 @@ gitto [command [arguments ...]] (begin (set! repositories (append `(,repository) repositories)) (save-repositories-list) - (simple-format #t "Repository ~A registered." - (repo-name repository))) + (simple-format #t "Repository ~A registered.~%" + (repo-name repository)) + + ;; Ask the user if they would like to merge their config + ;; template with the newly registered repository if they have + ;; a configuration set-up and the current input port is a tty. + (when (and (isatty? (current-input-port)) + (not (eq? global-config '())) + (y-or-n? "Would you like to merge your settings?" + #:default #t)) + (update-repo-config repository))) (display "Repository already registered.")) (newline)) (set! command-list (append command-list @@ -173,15 +183,16 @@ gitto [command [arguments ...]] ((equal? (car args) "update") (update-config)))) (set! command-list (append command-list `(("config" . ,show-config)))) +(define (update-repo-config repo) + (unless (member (repo-name repo) config-exclusion-list) + (write-config + (merge-config (repo-name repo) + (read-config (repo-location repo)) + global-config) + (string-append (repo-location repo) "/.git/config")))) + (define (update-config) - (for-each (lambda (repo) - (unless (member (repo-name repo) config-exclusion-list) - (write-config - (merge-config (repo-name repo) - (read-config (repo-location repo)) - global-config) - (string-append (repo-location repo) "/.git/config")))) - repositories)) + (for-each update-repo-config repositories)) (define (main args) "Parse the command line options and run the appropriate functions." diff --git a/gitto/ui.scm b/gitto/ui.scm new file mode 100644 index 0000000..fffe080 --- /dev/null +++ b/gitto/ui.scm @@ -0,0 +1,37 @@ +;; gitto -- Keep track of your git repositories +;; Copyright (C) 2012 Tom Willemse + +;; This file is part of gitto. + +;; gitto is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; gitto is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with gitto. If not, see . + +(define-module (gitto ui) + #:use-module (ice-9 rdelim) + #:export (y-or-n?)) + +(define* (y-or-n? prompt #:key (default #f)) + (format #t "~a [~a] " prompt (if default "Y/n" "y/N")) + (let ((char (read-char))) + + ;; Clear the rest of the input buffer. + (unless (eq? char #\newline) + (read-line)) + + (case char + ((#\y #\Y #\newline) #t) + ((#\n #\N) #f) + (else + (display "Invalid response, please use `y' or `n'.") + (newline) + (y-or-n? prompt #:default default)))))