X-Git-Url: https://git.madduck.net/code/vcsh.git/blobdiff_plain/3a4566421e1f718a9b2dc2c69212c291660b296c..558f3284dc552756546eb02be32ec3e737e7a3b0:/vcsh?ds=inline diff --git a/vcsh b/vcsh index c26b50a..c4423fd 100755 --- a/vcsh +++ b/vcsh @@ -3,7 +3,20 @@ #set -x 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 +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) + fi + fi +done + VCSH_BASE="$XDG_CONFIG_HOME/vcsh/repo.d" help() { @@ -19,7 +32,7 @@ help() { init Initialize a new repository clone - Clone from an existing repository + [] Clone from an existing repository exit Exit vcsh mode" >&2 } @@ -40,12 +53,12 @@ use() { init() { [[ -e $GIT_DIR ]] && - echo "$(basename $0): fatal: $GIT_DIR exists" && + echo "$SELF: fatal: $GIT_DIR exists" && return 21 export GIT_WORK_TREE="$HOME" mkdir -p $GIT_WORK_TREE cd $GIT_WORK_TREE || - (echo "$(basename $0): fatal: could not enter $GIT_WORK_TREE" && + (echo "$SELF: fatal: could not enter $GIT_WORK_TREE" && exit 20) || exit 20 cd $GIT_WORK_TREE git init @@ -61,36 +74,43 @@ leave() { if [ "$1" = 'help' ] || [ $# -eq 0 ]; then help [ "$1" = 'help' ] - return $? + exit $? elif [ "$1" = 'list' ]; then for i in $VCSH_BASE/*.git; do echo $(basename $i .git) done - return 0 + exit 0 elif [ "$1" = 'run' ]; then use $2 shift 2 "$@" leave - return 0 + exit 0 elif [ "$1" = 'use' ]; then if [[ -o NO_IGNORE_EOF ]]; then export VCSH_NO_IGNORE_EOF=1 setopt IGNORE_EOF - vcsh_exit() {vcsh exit; zle reset-prompt} + if [[ -n $ZSH_VERSION ]]; then + vcsh_exit() { + vcsh exit; + zle reset-prompt; + } + fi zle -N vcsh_exit bindkey '^d' 'vcsh_exit' fi use $2 buildPS1 - return 0 + exit 0 elif [ "$1" = 'clone' ]; then - export GIT_REMOTE="$2" - export REPO_NAME="$3" + GIT_REMOTE="$2" + REPO_NAME="$3" + [[ -z $REPO_NAME ]] && REPO_NAME=$(basename $GIT_REMOTE .git) + export REPO_NAME export GIT_DIR="$VCSH_BASE/$REPO_NAME.git" init @@ -100,11 +120,11 @@ elif [ "$1" = 'clone' ]; then git fetch for i in $(git ls-tree -r origin/master | awk '{print $4}'); do [[ -e $i ]] && - echo "$(basename $0): error: $i exists." && + echo "$SELF: error: $i exists." && CONFLICT=1; done [[ -n $CONFLICT ]] && - echo "$(basename $0): fatal: will stop after fetching and not try to merge!\n" && + echo "$SELF: fatal: will stop after fetching and not try to merge!\n" && exit 3 git merge origin/master vcsh use $REPO_NAME @@ -122,11 +142,11 @@ elif [ "$1" = 'exit' ]; then fi leave buildPS1 - return 0 + exit 0 else help - return 3 + exit 3 fi