From 1e998f5285ad5d4a52012f0a4385f7df7a3a6fcd Mon Sep 17 00:00:00 2001 From: Kevin Lyda <kevin@ie.suberic.net> Date: Mon, 28 Aug 2017 11:25:45 +0100 Subject: [PATCH] Number of bug fixes I use at home. * Fix parsing of git versions on OS X. * Fix hook handling. * Add editor modeline blurb to follow file standards. * Do not abbriviate commit as co; do abbreviate as ci. --- vcsh | 62 ++++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 14 deletions(-) diff --git a/vcsh b/vcsh index f06f5b4..77aef05 100755 --- a/vcsh +++ b/vcsh @@ -166,7 +166,7 @@ clone() { You should add files to your new repository." exit fi - GIT_VERSION_MAJOR=$(git --version | sed -n 's/.* \([0-9]\+\)\..*/\1/p' ) + GIT_VERSION_MAJOR=$(git --version | sed -n 's/.* \([0-9][0-9]*\)\..*/\1/p' ) if [ 1 -lt "$GIT_VERSION_MAJOR" ];then git fetch origin "$VCSH_BRANCH" else @@ -189,17 +189,19 @@ clone() { } commit() { - hook pre-commit + global_hook pre-commit shift # remove the "commit" command. for VCSH_REPO_NAME in $(list); do echo "$VCSH_REPO_NAME: " GIT_DIR=$VCSH_REPO_D/$VCSH_REPO_NAME.git; export GIT_DIR use + repo_hook pre-commit git commit --untracked-files=no --quiet "$@" + repo_hook post-commit VCSH_COMMAND_RETURN_CODE=$? echo done - hook post-commit + global_hook post-commit } delete() { @@ -229,7 +231,7 @@ enter() { } foreach() { - hook pre-foreach + global_hook pre-foreach # We default to prefixing `git` to all commands passed to foreach, but # allow running in general context with -g @@ -244,23 +246,38 @@ foreach() { echo "$VCSH_REPO_NAME:" GIT_DIR=$VCSH_REPO_D/$VCSH_REPO_NAME.git; export GIT_DIR use + repo_hook pre-foreach $command_prefix "$@" + repo_hook post-foreach done - hook post-foreach + global_hook post-foreach } git_dir_exists() { [ -d "$GIT_DIR" ] || fatal "no repository found for '$VCSH_REPO_NAME'" 12 } -hook() { - for hook in "$VCSH_HOOK_D/$1"* "$VCSH_HOOK_D/$VCSH_REPO_NAME.$1"*; do +global_hook() { + for hook in "$VCSH_HOOK_D/$1"*; do [ -x "$hook" ] || continue verbose "executing '$hook'" "$hook" done } +repo_hook() { + for hook in "$VCSH_HOOK_D/$VCSH_REPO_NAME.$1"*; do + [ -x "$hook" ] || continue + verbose "executing '$hook'" + "$hook" + done +} + +hook() { + global_hook "$1" + repo_hook "$1" +} + init() { hook pre-init [ ! -e "$GIT_DIR" ] || fatal "'$GIT_DIR' exists" 10 @@ -354,29 +371,33 @@ list_untracked_helper() { } pull() { - hook pre-pull + global_hook pre-pull for VCSH_REPO_NAME in $(list); do printf '%s: ' "$VCSH_REPO_NAME" GIT_DIR=$VCSH_REPO_D/$VCSH_REPO_NAME.git; export GIT_DIR use + repo_hook pre-pull git pull + repo_hook post-pull VCSH_COMMAND_RETURN_CODE=$? echo done - hook post-pull + global_hook post-pull } push() { - hook pre-push + global_hook pre-push for VCSH_REPO_NAME in $(list); do printf '%s: ' "$VCSH_REPO_NAME" GIT_DIR=$VCSH_REPO_D/$VCSH_REPO_NAME.git; export GIT_DIR use + repo_hook pre-push git push + repo_hook post-push VCSH_COMMAND_RETURN_CODE=$? echo done - hook post-push + global_hook post-push } retire() { @@ -482,8 +503,8 @@ write_gitignore() { use cd "$VCSH_BASE" || fatal "could not enter '$VCSH_BASE'" 11 local GIT_VERSION="$(git --version)" - local GIT_VERSION_MAJOR=$(echo $GIT_VERSION | sed -n 's/.* \([0-9]\+\)\..*/\1/p') - local GIT_VERSION_MINOR=$(echo $GIT_VERSION | sed -n 's/.* \([0-9]\+\)\.\([0-9]\+\)\..*/\2/p') + local GIT_VERSION_MAJOR=$(echo $GIT_VERSION | sed -n 's/.* \([0-9][0-9]*\)\..*/\1/p') + local GIT_VERSION_MINOR=$(echo $GIT_VERSION | sed -n 's/.* \([0-9][0-9]*\)\.\([0-9][0-9]*\)\..*/\2/p') OLDIFS=$IFS IFS=$(printf '\n\t') gitignores=$(for file in $(git ls-files); do @@ -534,7 +555,7 @@ VCSH_COMMAND=$1; export VCSH_COMMAND case $VCSH_COMMAND in clon|clo|cl) VCSH_COMMAND=clone;; - commi|comm|com|co) VCSH_COMMAND=commit;; + commi|comm|com|ci) VCSH_COMMAND=commit;; delet|dele|del|de) VCSH_COMMAND=delete;; ente|ent|en) VCSH_COMMAND=enter;; hel|he) VCSH_COMMAND=help;; @@ -672,3 +693,16 @@ $VCSH_COMMAND "$@" hook post-command verbose "$VCSH_COMMAND end, exiting" exit $VCSH_COMMAND_RETURN_CODE + +# +# Editor modelines - https://www.wireshark.org/tools/modelines.html +# +# Local variables: +# c-basic-offset: 8 +# tab-width: 8 +# indent-tabs-mode: t +# End: +# +# vi: set shiftwidth=8 tabstop=8 noexpandtab: +# :indentSize=8:tabSize=8:noTabs=false: +# -- GitLab