]> git.madduck.net Git - code/vcsh.git/blobdiff - vcsh

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Introduce config file and control over what goes into .gitignore/$foo
[code/vcsh.git] / vcsh
diff --git a/vcsh b/vcsh
index 4979d71079627dd304ac9ebe132b55813836e4f7..f7c565da62350d9c3f2d0fff0afda347d489434a 100755 (executable)
--- 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)
 
@@ -64,7 +67,7 @@ clone() {
        git remote add origin "$GIT_REMOTE"
        git config branch.master.remote origin
        git config branch.master.merge  refs/heads/master
-       if [ -z $(git ls-remote 2> /dev/null) ]; then
+       if [ $(git ls-remote origin master 2> /dev/null | wc -l ) -lt 1 ]; then
                info "remote is empty, not merging anything"
                exit
        fi
@@ -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"