enter Enter repository; spawn new $SHELL
init <repo> Initialize a new repository
list List all repositories
+ rename <repo> \\
+ <newname> Rename repository
run <repo> \\
<command> Use this repository
$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"
mkdir -p "$GIT_WORK_TREE"
cd "$GIT_WORK_TREE" || fatal "could not enter '$GIT_WORK_TREE'" 11
- cd "$GIT_WORK_TREE"
git init
setup
}
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
}
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"
}
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"
- [ "$1" = 'run' ] && shift 2 && export VCSH_EXTERNAL_COMMAND="$@"
- [ "$1" = 'seed-gitignore' ] && export VCSH_COMMAND=seed_gitignore
+ [ "$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
export VCSH_COMMAND="$1"
elif [ -n "$1" ]; then