From 44274838c5b86daf48dcb86a0552084ab6c81508 Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Sun, 12 May 2013 20:38:58 +0200 Subject: Add read-config This function parses the config file in the .git/ sub-directory of a repository. --- gitto/Makefile | 3 ++- gitto/config.scm | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 gitto/config.scm diff --git a/gitto/Makefile b/gitto/Makefile index e9422aa..6d8f92d 100644 --- a/gitto/Makefile +++ b/gitto/Makefile @@ -3,7 +3,8 @@ SITEDIR = $(shell pkg-config guile-2.0 --variable=sitedir \ --define-variable=prefix=$(DESTDIR)) COMPDIR = $(DESTDIR)/lib/guile/2.0/site-ccache -objects = git.scm git.go main.scm main.go path.scm path.go +objects = config.scm config.go git.scm git.go main.scm main.go path.scm \ + path.go install-objects = $(addprefix install-,$(objects)) uninstall-objects = $(addprefix uninstall-,$(objects)) diff --git a/gitto/config.scm b/gitto/config.scm new file mode 100644 index 0000000..1ba199e --- /dev/null +++ b/gitto/config.scm @@ -0,0 +1,47 @@ +;; -*- coding: utf-8; -*- +;; gitto -- Keep track of your git repositories +;; Copyright (C) 2012 Tom Willemsen + +;; 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 config) + #:use-module (ice-9 rdelim) + #:export (read-config)) + +(define (parse-setting line) + (let ((idx (string-index line #\=))) + (list (cons (string-trim-both (substring line 0 idx)) + (string-trim-both (substring line (1+ idx))))))) + +(define (read-config repo-location) + (let ((port (open-input-file + (string-append repo-location "/.git/config"))) + (config '()) + (current-section #f) + (assign-pos #f)) + (do ((line (read-line port) (read-line port))) + ((eof-object? line)) + (cond ((string= line "[" 0 1) + (let ((section (cons (string-trim-both + line (char-set #\[ #\])) '()))) + (set! config (append config (list section))) + (set! current-section section))) + ((string-contains line "=") + (set-cdr! current-section + (append (cdr current-section) + (parse-setting line)))))) + (close-port port) + config)) -- cgit v1.2.3-54-g00ecf