if [ "$1" = '-d' ] || [ "$1" = '--debug' ]; then
set -vx
VCSH_DEBUG=1
- shift 1
elif [ "$1" = '-v' ];then
VCSH_VERBOSE=1
elif [ "$1" = '-c' ];then
- # Source $OPTARG if it can be read and has an absolute or relative
- # path or is in $PATH
- if [ -r "$OPTARG" ]; then
- . "$OPTARG"
- else
- fatal "Can not read configuration file '$OPTARG'" 1
- fi
+ VCSH_OPTION_CONFIG=$OPTARG
fi
+ shift 1
done
+source_all() {
+ # Source file even if it's in $PWD and does not have any slashes in it
+ case "$1" in
+ */*) . "$1";;
+ *) . "$PWD/$1";;
+ esac;
+}
+
+# Read configuration and set defaults if anything's not set
[ -n "$VCSH_DEBUG" ] && set -vx
[ -z "$XDG_CONFIG_HOME" ] && XDG_CONFIG_HOME="$HOME/.config"
+
+# Read configuration files if there are any
+[ -r "/etc/vcsh/config" ] && . "/etc/vcsh/config"
[ -r "$XDG_CONFIG_HOME/vcsh/config" ] && . "$XDG_CONFIG_HOME/vcsh/config"
+if [ -n "$VCSH_OPTION_CONFIG" ]; then
+ # Source $VCSH_OPTION_CONFIG if it can be read and is in $PWD of $PATH
+ if [ -r "$VCSH_OPTION_CONFIG" ]; then
+ source_all "$VCSH_OPTION_CONFIG"
+ else
+ fatal "Can not read configuration file '$VCSH_OPTION_CONFIG'" 1
+ fi
+fi
[ -n "$VCSH_DEBUG" ] && set -vx
+
+# Read defaults
[ -z "$VCSH_REPO_D" ] && VCSH_REPO_D="$XDG_CONFIG_HOME/vcsh/repo.d"
[ -z "$VCSH_HOOK_D" ] && VCSH_HOOK_D="$XDG_CONFIG_HOME/vcsh/hooks-enabled"
[ -z "$VCSH_BASE" ] && VCSH_BASE="$HOME"
[ -z "$VCSH_GITIGNORE" ] && VCSH_GITIGNORE='exact'
+
help() {
echo "usage: $SELF <options> <command>
options:
- -c <file> Source file prior to other configuration files
+ -c <file> Source file
-d Enable debug mode
- -d Enable verbose mode
+ -v Enable verbose mode
commands:
clone <remote> \\
[<repo>] Clone from an existing repository
- delete Delete an existing repository
- enter Enter repository; spawn new instance of \$SHELL
+ delete <repo> Delete an existing repository
+ enter <repo> Enter repository; spawn new instance of \$SHELL
help Display this help text
init <repo> Initialize a new repository
list List all repositories
<newname> Rename repository
run <repo> \\
<command> Use this repository
- setup Set up repository with recommended settings
+ setup <repo> Set up repository with recommended settings
which <substring> Find substring in name of any tracked file
write-gitignore \\
<repo> Write .gitignore.d/<repo> via git ls-files
delete() {
cd "$VCSH_BASE" || fatal "could not enter '$VCSH_BASE'" 11
use
- info "This operation WILL DETROY DATA!"
+ info "This operation WILL DESTROY DATA!"
files=$(git ls-files)
echo "These files will be deleted:
for file in $files; do
rm -f $file || info "could not delete '$file', continuing with deletion"
done
- rm -r "$GIT_DIR" || error "could not delete '$GIT_DIR'"
+ rm -rf "$GIT_DIR" || error "could not delete '$GIT_DIR'"
}
enter() {