X-Git-Url: https://git.madduck.net/code/vcsh.git/blobdiff_plain/f0d6c7a599601ae84dca82c2b90db058821f8174..3768fe91680ba80f5715edf19399261a2dd524aa:/vcsh?ds=sidebyside diff --git a/vcsh b/vcsh index ec0301f..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) @@ -64,6 +67,10 @@ clone() { git remote add origin "$GIT_REMOTE" git config branch.master.remote origin git config branch.master.merge refs/heads/master + if [ $(git ls-remote origin master 2> /dev/null | wc -l ) -lt 1 ]; then + info "remote is empty, not merging anything" + exit + fi git fetch for object in $(git ls-tree -r origin/master | awk '{print $4}'); do [ -e "$object" ] && @@ -175,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'" @@ -190,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"