X-Git-Url: https://git.madduck.net/code/vcsh.git/blobdiff_plain/e278038b91dd5933c0f6592cbef2108c205b65d0..2cba2ad7bd28fd65df380511b29527c9e203d3a0:/vcsh diff --git a/vcsh b/vcsh index 0df962b..1828880 100755 --- a/vcsh +++ b/vcsh @@ -5,20 +5,19 @@ SELF=$(basename $0) [ -z "$XDG_CONFIG_HOME" ] && XDG_CONFIG_HOME="$HOME/.config" -for check_directory in "$XDG_CONFIG_HOME" "$XDG_CONFIG_HOME/vcsh" "$XDG_CONFIG_HOME/vcsh/repo.d" +[ -z "$VCSH_BASE" ] && VCSH_BASE="$XDG_CONFIG_HOME/vcsh/repo.d" +for check_directory in "$VCSH_BASE" do if [ ! -d "$check_directory" ]; then if [ -e "$check_directory" ]; then echo "$SELF: error: $check_directory exists but is not a directory" >&2 exit 2 else - mkdir "$check_directory" || (echo "$SELF: error: could not create $check_directory" >&2; exit 2) + mkdir -p "$check_directory" || (echo "$SELF: error: could not create $check_directory" >&2; exit 2) fi fi done -VCSH_BASE="$XDG_CONFIG_HOME/vcsh/repo.d" - debug() { [ -n "$VCSH_DEBUG" ] && echo "$SELF: debug: $1" } @@ -42,7 +41,9 @@ help() { init Initialize a new repository clone \\ - [] Clone from an existing repository" >&2 + [] Clone from an existing repository + seed-gitignore \\ + Seed .gitignore.d/ from git ls-files" >&2 } use() { @@ -144,6 +145,7 @@ elif [ "$1" = 'clone' ]; then done [ "$VCSH_CONFLICT" = '1' ] && echo "$SELF: fatal: will stop after fetching and not try to merge!\n" && + echo " Once this situation has been resolved, run 'vcsh run git pull' to finish cloning.\n" && exit 3 git merge origin/master # vcsh use $REPO_NAME @@ -151,7 +153,7 @@ elif [ "$1" = 'clone' ]; then elif [ "$1" = 'init' ]; then verbose "init begin" - [ -z $2 ] && help && return 0 + [ -z $2 ] && help && echo && echo "$SELF $1: please specify repository to work on" && return 0 export REPO_NAME="$2" export GIT_DIR="$VCSH_BASE/$REPO_NAME.git" init @@ -169,6 +171,26 @@ elif [ "$1" = 'init' ]; then # verbose "exit end" # exit 0 +elif [ "$1" = 'seed-gitignore' ]; then + verbose "seed-gitignore begin" + [ -z $2 ] && help && echo && echo "$SELF $1: please specify repository to work on" && return 0 + use "$2" + files=$(git ls-files) + gitignores=$(for file in $(git ls-files); do + while true; do + echo $file; new="${file%/*}" + [ "$file" = "$new" ] && break + file="$new" + done; + done | sort -u | sed 's/^/!/') + [ -e .gitignore.d/$2 ] && + echo "$SELF: .gitignore.d/$2 exists, moving it to .gitignore.d/$2.bak" && + mv -f .gitignore.d/$2 .gitignore.d/$2.bak + echo '*' > .gitignore.d/$2 + for gitignore in $gitignores; do + echo $gitignore >> .gitignore.d/$2 + done + else verbose "defaulting to calling help()" help