From 8b015a02474ffd228669a43aea715db87ebb5389 Mon Sep 17 00:00:00 2001
From: Richard Hartmann <richih.mailinglist@gmail.com>
Date: Wed, 21 Dec 2011 00:34:31 +0100
Subject: [PATCH] Introduce config file and control over what goes into
 .gitignore/$foo

* configuration is in $XDG_CONFIG_HOME/vcsh/config
* $VCSH_GITIGNORE can be set to 'exact' or 'recursive'
---
 vcsh | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/vcsh b/vcsh
index 990a234..f7c565d 100755
--- a/vcsh
+++ b/vcsh
@@ -6,10 +6,13 @@
 # license your code under the GNU GPL version 2 or later.
 
 
-[ -n "$VCSH_DEBUG" ]      && set -vx
-[ -z "$XDG_CONFIG_HOME" ] && XDG_CONFIG_HOME="$HOME/.config"
-[ -z "$VCSH_REPO_D" ]     && VCSH_REPO_D="$XDG_CONFIG_HOME/vcsh/repo.d"
-[ -z "$VCSH_BASE" ]       && VCSH_BASE="$HOME"
+[ -n "$VCSH_DEBUG" ]                  && set -vx
+[ -z "$XDG_CONFIG_HOME" ]             && XDG_CONFIG_HOME="$HOME/.config"
+[ -r "$XDG_CONFIG_HOME/vcsh/config" ] && . "$XDG_CONFIG_HOME/vcsh/config"
+[ -n "$VCSH_DEBUG" ]                  && set -vx
+[ -z "$VCSH_REPO_D" ]                 && VCSH_REPO_D="$XDG_CONFIG_HOME/vcsh/repo.d"
+[ -z "$VCSH_BASE" ]                   && VCSH_BASE="$HOME"
+[ -z "$VCSH_GITIGNORE" ]              && VCSH_GITIGNORE='exact'
 
 SELF=$(basename $0)
 
@@ -179,7 +182,9 @@ write_gitignore() {
 	echo '*' > "$tempfile" || fatal "could not write to '$tempfile'" 57
 	for gitignore in $gitignores; do
 		echo "$gitignore" | sed 's/^/!/' >> "$tempfile" || fatal "could not write to '$tempfile'" 57
-		[ -d "$gitignore" ] && { echo "$gitignore/*" | sed 's/^/!/' >> "$tempfile" || fatal "could not write to '$tempfile'" 57; }
+		if [ x$VCSH_GITIGNORE = x'recursive' ] && [ -d "$gitignore" ]; then
+			{ echo "$gitignore/*" | sed 's/^/!/' >> "$tempfile" || fatal "could not write to '$tempfile'" 57; }
+		fi
 	done
 	if diff -N "$tempfile" "$VCSH_BASE/.gitignore.d/$VCSH_REPO_NAME" > /dev/null; then
 		rm -f "$tempfile" || error "could not delete '$tempfile'"
@@ -194,6 +199,10 @@ write_gitignore() {
 		fatal "could not move '$tempfile' to '$VCSH_BASE/.gitignore.d/$VCSH_REPO_NAME'" 53
 }
 
+if [ ! x$VCSH_GITIGNORE = x'exact' ] && [ ! x$VCSH_GITIGNORE = x'recursive' ]; then
+	fatal "\$VCSH_GITIGNORE must be either 'exact' or 'recursive'" 1
+fi
+
 if [ "$1" = 'clone' ]; then
 	[ -z $2 ] && fatal "$1: please specify a remote" 1
 	export VCSH_COMMAND="$1"
-- 
GitLab