X-Git-Url: https://git.madduck.net/code/vcsh.git/blobdiff_plain/68c93dceb42ee275b339d421bbf77eaf62363d31..935df7b27742bd2677fe8b74586ece85e138de68:/vcsh diff --git a/vcsh b/vcsh index cfcb42a..7d1f5aa 100755 --- a/vcsh +++ b/vcsh @@ -16,6 +16,8 @@ help() { enter Enter repository; spawn new $SHELL init Initialize a new repository list List all repositories + rename \\ + Rename repository run \\ Use this repository @@ -91,6 +93,10 @@ enter() { $SHELL } +git_dir_exists() { + [ -d "$GIT_DIR" ] || fatal "no repository found for '$VCSH_REPO_NAME'" 12 +} + init() { [ ! -e "$GIT_DIR" ] || fatal "'$GIT_DIR' exists" 10 export GIT_WORK_TREE="$HOME" @@ -106,6 +112,13 @@ list() { done } +rename() { + git_dir_exists + [ -d "$GIT_DIR_NEW" ] && fatal "'$GIT_DIR_NEW' exists" 54 + mv -f "$GIT_DIR" "$GIT_DIR_NEW" || fatal "Could not mv '$GIT_DIR' '$GIT_DIR_NEW'" 52 + +} + run() { use $VCSH_EXTERNAL_COMMAND @@ -153,9 +166,7 @@ setup() { } use() { - if [ ! -d "$GIT_DIR" ]; then - fatal "no repository found for '$VCSH_REPO_NAME'" 12 - fi + git_dir_exists export GIT_WORK_TREE="$(git config --get core.worktree)" export VCSH_DIRECTORY="$VCSH_REPO_NAME" } @@ -170,14 +181,17 @@ if [ "$1" = 'clone' ]; then elif [ "$1" = 'delete' ] || [ "$1" = 'enter' ] || [ "$1" = 'init' ] || + [ "$1" = 'rename' ] || [ "$1" = 'run' ] || [ "$1" = 'seed-gitignore' ] || [ "$1" = 'setup' ]; then - [ -z $2 ] && fatal "$1: please specify repository to work on" 1 - [ "$1" = 'run' -a -z "$3" ] && fatal "$1: please specify a command" 1 + [ -z $2 ] && fatal "$1: please specify repository to work on" 1 + [ "$1" = 'rename' -a -z "$3" ] && fatal "$1: please specify a target name" 1 + [ "$1" = 'run' -a -z "$3" ] && fatal "$1: please specify a command" 1 export VCSH_COMMAND="$1" export VCSH_REPO_NAME="$2" export GIT_DIR="$VCSH_BASE/$VCSH_REPO_NAME.git" + [ "$VCSH_COMMAND" = 'rename' ] && export GIT_DIR_NEW="$VCSH_BASE/$3.git" [ "$VCSH_COMMAND" = 'run' ] && shift 2 && export VCSH_EXTERNAL_COMMAND="$@" [ "$VCSH_COMMAND" = 'seed-gitignore' ] && export VCSH_COMMAND='seed_gitignore' elif [ "$1" = 'list' ]; then