From d7a622d4ba8b187a6f35a7dc5b054148aba2469f Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Sun, 1 Jul 2012 01:42:15 +0200 Subject: Add Makefiles, utility Change the directory structure and add a bunch of Makefiles to make it easy to install gitto. Also add a utility to run gitto in its current state. --- Makefile | 20 +++++++++ gitto.scm | 123 ------------------------------------------------------- gitto/.gitignore | 1 + gitto/Makefile | 25 +++++++++++ gitto/main.scm | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ run-gitto | 5 +++ src/Makefile | 11 +++++ src/gitto | 4 ++ 8 files changed, 188 insertions(+), 123 deletions(-) create mode 100644 Makefile delete mode 100755 gitto.scm create mode 100644 gitto/.gitignore create mode 100644 gitto/Makefile create mode 100644 gitto/main.scm create mode 100755 run-gitto create mode 100644 src/Makefile create mode 100755 src/gitto diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5c2306a --- /dev/null +++ b/Makefile @@ -0,0 +1,20 @@ +export DESTDIR ?= /usr + +dirs = src gitto +install-dirs = $(addprefix install-,$(dirs)) +uninstall-dirs = $(addprefix uninstall-,$(dirs)) + +.PHONY: all $(dirs) install $(install-dirs) uninstall $(uninstall-dirs) + +all: $(dirs) +install: $(install-dirs) +uninstall: $(uninstall-dirs) + +$(dirs): + $(MAKE) -C $@/ + +$(install-dirs): install-%: + $(MAKE) -C $*/ install + +$(uninstall-dirs): uninstall-%: + $(MAKE) -C $*/ uninstall diff --git a/gitto.scm b/gitto.scm deleted file mode 100755 index 75b0aff..0000000 --- a/gitto.scm +++ /dev/null @@ -1,123 +0,0 @@ -#! /usr/bin/guile \ --e main -s -!# -(use-modules (ice-9 format) - (ice-9 getopt-long) - (ice-9 popen) - (ice-9 rdelim)) - -(define data-dir - (let ((xdg (getenv "XGD_DATA_HOME")) - (name "gitto")) - (if xdg - (string-append xdg "/" name) - (string-append (getenv "HOME") "/." name)))) - -(define repositories-file - (string-append data-dir "/repos.scm")) - -(define repositories - (if (file-exists? repositories-file) - (let* ((port (open-input-file repositories-file)) - (result (read port))) - (close-port port) - result) - '())) - -(define (version) - "Display version information" - (display "gitto version 0.1\n")) - -(define (help) - "Display some help." - (display "\ -gitto [options] - -r, --register REPO Register a new repository directory - -R, --remove REPO Repmove a repository directory - -v, --version Display version - -h, --help Display this help -")) - -(define (git-dir? dir) - "Check whether or not DIR/.git exists" - (let ((dir (string-append dir "/.git"))) - (if (file-exists? dir) - (let ((dirstat (stat dir))) - (eq? (stat:type dirstat) 'directory)) - #f))) - -(define (save-repositories-list) - "Save the list of repositories." - (if (not (file-exists? data-dir)) - (mkdir data-dir)) - - (let ((port (open-output-file repositories-file))) - (write repositories port) - (close-port port))) - -(define (register-repository repository) - (if (not (member repository repositories)) - (begin - (set! repositories (append `(,repository) repositories)) - (save-repositories-list) - (simple-format #t "Repository ~A registered." repository)) - (display "Repository already registered.")) - (newline)) - -(define (remove-repository repository) - (if (member repository repositories) - (begin - (set! repositories (delete repository repositories)) - (save-repositories-list) - (simple-format #t "Repository ~A removed." repository)) - (display "Not a registered repository.")) - (newline)) - -(define (git-revs-to-push) - (let* ((pp (open-input-pipe "git log --pretty=oneline @{u}.. | wc -l")) - (num (string->number (read-line pp)))) - (close-pipe pp) - num)) - -(define (git-revs-to-pull) - (let* ((pp (open-input-pipe "git log --pretty=oneline ..@{u} | wc -l")) - (num (string->number (read-line pp)))) - (close-pipe pp) - num)) - -(define (git-clean?) - (let* ((pipe (open-input-pipe "git status -suno")) - (clean? (eof-object? (read-delimited "" pipe)))) - (close-pipe pipe) - clean?)) - -(define (list-repositories) - (for-each (lambda (repo) - (chdir repo) - (let ((numup (git-revs-to-push)) - (numdown (git-revs-to-pull)) - (clean? (git-clean?))) - (format #t "~a: ~d to push, ~d to pull and is ~adirty.\n" - (basename repo) numup numdown - (if clean? "not " "")))) - repositories)) - -(define option-spec - `((version (single-char #\v) (value #f)) - (help (single-char #\h) (value #f)) - (register (single-char #\r) (value #t) - (predicate ,git-dir?)) - (remove (single-char #\R) (value #t) - (predicate ,git-dir?)))) - -(define (main args) - (let* ((options (getopt-long args option-spec)) - (help-wanted (option-ref options 'help #f)) - (version-wanted (option-ref options 'version #f)) - (registration-needed (option-ref options 'register #f)) - (removal (option-ref options 'remove #f))) - (cond (version-wanted (version)) - (help-wanted (help)) - (registration-needed => register-repository) - (removal => remove-repository) - (#t (list-repositories))))) diff --git a/gitto/.gitignore b/gitto/.gitignore new file mode 100644 index 0000000..e796b66 --- /dev/null +++ b/gitto/.gitignore @@ -0,0 +1 @@ +*.go diff --git a/gitto/Makefile b/gitto/Makefile new file mode 100644 index 0000000..4c4f95e --- /dev/null +++ b/gitto/Makefile @@ -0,0 +1,25 @@ +DESTDIR ?= /usr/local + +objects = main.go main.scm +install-objects = $(addprefix install-,$(objects)) +uninstall-objects = $(addprefix uninstall-,$(objects)) + +$(filter %.go,$(objects)): %.go: %.scm + guile-tools compile -o $@ $^ + +.PHONY: install $(install-objects) uninstall $(uninstall-objects) + +install: $(install-objects) +uninstall: $(uninstall-objects) + +$(filter %.go,$(install-objects)): install-%: + install -Dm 644 $* $(DESTDIR)/lib/guile/2.0/ccache/gitto/$* + +$(filter %.scm,$(install-objects)): install-%: + install -Dm 644 $* $(DESTDIR)/share/guile/2.0/gitto/$* + +$(filter %.go,$(uninstall-objects)): uninstall-%: + rm -f $(DESTDIR)/lib/guile/2.0/ccache/gitto/$* + +$(filter %.scm,$(uninstall-objects)): uninstall-%: + rm -f $(DESTDIR)/share/guile/2.0/gitto/$* diff --git a/gitto/main.scm b/gitto/main.scm new file mode 100644 index 0000000..e6624e4 --- /dev/null +++ b/gitto/main.scm @@ -0,0 +1,122 @@ +(define-module (gitto main) + #:use-module (ice-9 format) + #:use-module (ice-9 getopt-long) + #:use-module (ice-9 popen) + #:use-module (ice-9 rdelim) + #:export (main)) + +(define data-dir + (let ((xdg (getenv "XGD_DATA_HOME")) + (name "gitto")) + (if xdg + (string-append xdg "/" name) + (string-append (getenv "HOME") "/." name)))) + +(define repositories-file + (string-append data-dir "/repos.scm")) + +(define repositories + (if (file-exists? repositories-file) + (let* ((port (open-input-file repositories-file)) + (result (read port))) + (close-port port) + result) + '())) + +(define (version) + "Display version information" + (display "gitto version 0.1\n")) + +(define (help) + "Display some help." + (display "\ +gitto [options] + -r, --register REPO Register a new repository directory + -R, --remove REPO Repmove a repository directory + -v, --version Display version + -h, --help Display this help +")) + +(define (git-dir? dir) + "Check whether or not DIR/.git exists" + (let ((dir (string-append dir "/.git"))) + (if (file-exists? dir) + (let ((dirstat (stat dir))) + (eq? (stat:type dirstat) 'directory)) + #f))) + +(define (save-repositories-list) + "Save the list of repositories." + (if (not (file-exists? data-dir)) + (mkdir data-dir)) + + (let ((port (open-output-file repositories-file))) + (write repositories port) + (close-port port))) + +(define (register-repository repository) + (if (not (member repository repositories)) + (begin + (set! repositories (append `(,repository) repositories)) + (save-repositories-list) + (simple-format #t "Repository ~A registered." repository)) + (display "Repository already registered.")) + (newline)) + +(define (remove-repository repository) + (if (member repository repositories) + (begin + (set! repositories (delete repository repositories)) + (save-repositories-list) + (simple-format #t "Repository ~A removed." repository)) + (display "Not a registered repository.")) + (newline)) + +(define (git-revs-to-push) + (let* ((pp (open-input-pipe "git log --pretty=oneline @{u}.. | wc -l")) + (num (string->number (read-line pp)))) + (close-pipe pp) + num)) + +(define (git-revs-to-pull) + (let* ((pp (open-input-pipe "git log --pretty=oneline ..@{u} | wc -l")) + (num (string->number (read-line pp)))) + (close-pipe pp) + num)) + +(define (git-clean?) + (let* ((pipe (open-input-pipe "git status -suno")) + (clean? (eof-object? (read-delimited "" pipe)))) + (close-pipe pipe) + clean?)) + +(define (list-repositories) + (for-each (lambda (repo) + (chdir repo) + (let ((numup (git-revs-to-push)) + (numdown (git-revs-to-pull)) + (clean? (git-clean?))) + (format #t "~a: ~d to push, ~d to pull and is ~adirty.\n" + (basename repo) numup numdown + (if clean? "not " "")))) + repositories)) + +(define option-spec + `((version (single-char #\v) (value #f)) + (help (single-char #\h) (value #f)) + (register (single-char #\r) (value #t) + (predicate ,git-dir?)) + (remove (single-char #\R) (value #t) + (predicate ,git-dir?)))) + +(define (main args) + (let* ((options (getopt-long args option-spec)) + (help-wanted (option-ref options 'help #f)) + (version-wanted (option-ref options 'version #f)) + (registration-needed (option-ref options 'register #f)) + (removal (option-ref options 'remove #f))) + (cond (version-wanted (version)) + (help-wanted (help)) + (registration-needed => register-repository) + (removal => remove-repository) + (#t (list-repositories))))) diff --git a/run-gitto b/run-gitto new file mode 100755 index 0000000..9f45893 --- /dev/null +++ b/run-gitto @@ -0,0 +1,5 @@ +#!/bin/sh + +export GUILE_LOAD_PATH="$(dirname $(realpath $0)):$GUILE_LOAD_PATH" +export GUILE_LOAD_COMPILED_PATH="$(dirname $(realpath $0)):$GUILE_LOAD_PATH" +exec src/gitto "$@" diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..61946a0 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,11 @@ +DESTDIR ?= /usr/local + +all: + +.PHONY: install uninstall + +install: gitto + install -Dm 755 $^ ${DESTDIR}/bin/$^ + +uninstall: gitto + rm -f ${DESTDIR}/bin/$^ diff --git a/src/gitto b/src/gitto new file mode 100755 index 0000000..2f86f74 --- /dev/null +++ b/src/gitto @@ -0,0 +1,4 @@ +#!/bin/sh + +BOOT="((@ (gitto main) main) (program-arguments))" +exec guile $GUILE_FLAGS -c "$BOOT" "$0" "$@" -- cgit v1.3-2-g0d8e