From: Richard Hartmann Date: Fri, 19 Jul 2013 06:16:45 +0000 (+0200) Subject: Merge branch 'retire' X-Git-Url: https://git.madduck.net/code/vcsh.git/commitdiff_plain/41f68579e858270d2b97deed93927922d46dde6d?hp=-c Merge branch 'retire' Conflicts: doc/hooks --- 41f68579e858270d2b97deed93927922d46dde6d diff --combined doc/hooks index 1a93fda,f1787a3..e7fdb94 --- a/doc/hooks +++ b/doc/hooks @@@ -1,12 -1,17 +1,21 @@@ Available hooks are: + -* pre-command -* post-command + * pre-clone + * post-clone + * post-clone-retired + Use this if you need to operate on different git repositories after cloning. + This hook can be useful if your configuration needs some remote + repositories, but you do not want to include it into your vcsh + repository. For instance, if you use vim plugins manager (vundle, + NeoBundle), zsh configuration frameworks (oh-my-zsh, prezto), etc. +* pre-command +* post-command * pre-enter * post-enter +* pre-pull +* post-pull +* pre-push +* post-push * pre-run * post-run * pre-upgrade diff --combined doc/vcsh.1.ronn index 79a4063,160e22a..b195707 --- a/doc/vcsh.1.ronn +++ b/doc/vcsh.1.ronn @@@ -81,6 -81,9 +81,9 @@@ an interactive user * clone: Clone an existing repository. + If you need to clone a bundle of repositories, look into the + `post-clone-retired` hook. + * delete: Delete an existing repository. @@@ -161,16 -164,14 +164,16 @@@ executed in the context of your shell Interesting knobs you can turn: * <$VCSH_GITIGNORE>: - Can be either or . + Can be , , or . - will seed the repo-specific <.gitignore> with all file and directory + will seed the repo-specific ignore file with all file and directory names which `git ls-files` returns. will descend through all directories recursively additionally to the above. + will not write any ignore file. + Defaults to . Less interesting knobs you could turn: diff --combined vcsh index 175a9d1,c6257fe..ced6909 --- a/vcsh +++ b/vcsh @@@ -153,6 -153,8 +153,8 @@@ clone() Once this situation has been resolved, run 'vcsh run $VCSH_REPO_NAME git pull' to finish cloning.\n" 17 git merge origin/master hook post-clone + retire + hook post-clone-retired } delete() { @@@ -246,6 -248,11 +248,11 @@@ push() hook post-push } + retire() { + unset GIT_WORK_TREE + unset VCSH_DIRECTORY + } + rename() { git_dir_exists [ -d "$GIT_DIR_NEW" ] && fatal "'$GIT_DIR_NEW' exists" 54 @@@ -264,7 -271,7 +271,7 @@@ upgrade() hook pre-upgrade use git config core.worktree "$GIT_WORK_TREE" - git config core.excludesfile ".gitignore.d/$VCSH_REPO_NAME" + [ ! "x$VCSH_GITIGNORE" = 'xnone' ] && git config core.excludesfile ".gitignore.d/$VCSH_REPO_NAME" git config vcsh.vcsh 'true' [ -e "$VCSH_BASE/.gitignore.d/$VCSH_REPO_NAME" ] && git add -f "$VCSH_BASE/.gitignore.d/$VCSH_REPO_NAME" hook post-upgrade @@@ -285,12 -292,6 +292,12 @@@ which() } write_gitignore() { + # Don't do anything if the user does not want to write gitignore + if [ "x$VCSH_GITIGNORE" = 'xnone' ]; then + info "Not writing gitignore as '\$VCSH_GITIGNORE' is set to 'none'" + exit + fi + use cd "$VCSH_BASE" || fatal "could not enter '$VCSH_BASE'" 11 gitignores=$(for file in $(git ls-files); do @@@ -304,7 -305,7 +311,7 @@@ echo '*' > "$tempfile" || fatal "could not write to '$tempfile'" 57 for gitignore in $gitignores; do echo "$gitignore" | sed 's@^@!/@' >> "$tempfile" || fatal "could not write to '$tempfile'" 57 - if [ x$VCSH_GITIGNORE = x'recursive' ] && [ -d "$gitignore" ]; then + if [ "x$VCSH_GITIGNORE" = 'xrecursive' ] && [ -d "$gitignore" ]; then { echo "$gitignore/*" | sed 's@^@!/@' >> "$tempfile" || fatal "could not write to '$tempfile'" 57; } fi done @@@ -321,8 -322,8 +328,8 @@@ fatal "could not move '$tempfile' to '$VCSH_BASE/.gitignore.d/$VCSH_REPO_NAME'" 53 } -if [ ! "x$VCSH_GITIGNORE" = 'xexact' ] && [ ! "x$VCSH_GITIGNORE" = 'xrecursive' ]; then - fatal "'\$VCSH_GITIGNORE' must be either 'exact' or 'recursive'" 1 +if [ ! "x$VCSH_GITIGNORE" = 'xexact' ] && [ ! "x$VCSH_GITIGNORE" = 'xrecursive' ] && [ ! "x$VCSH_GITIGNORE" = 'xnone' ]; then + fatal "'\$VCSH_GITIGNORE' must equal 'exact', 'recursive', or 'none'" 1 fi if [ "$1" = 'clone' ]; then @@@ -350,12 -351,12 +357,12 @@@ elif [ "$1" = 'delete' ] | [ "$1" = 'write-gitignore' ]; then [ -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 + [ "$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_REPO_D/$VCSH_REPO_NAME.git" - [ "$VCSH_COMMAND" = 'rename' ] && export GIT_DIR_NEW="$VCSH_REPO_D/$3.git" - [ "$VCSH_COMMAND" = 'run' ] && shift 2 + [ "$VCSH_COMMAND" = 'rename' ] && export GIT_DIR_NEW="$VCSH_REPO_D/$3.git" + [ "$VCSH_COMMAND" = 'run' ] && shift 2 [ "$VCSH_COMMAND" = 'write-gitignore' ] elif [ "$1" = 'list' ] || [ "$1" = 'list-tracked' ] || @@@ -386,8 -387,9 +393,8 @@@ if echo $VCSH_REPO_NAME | grep -q '/'; export VCSH_REPO_NAME=$(basename "$VCSH_REPO_NAME" .git) fi - -for check_directory in "$VCSH_REPO_D" "$VCSH_BASE/.gitignore.d" -do +check_dir() { + check_directory="$1" if [ ! -d "$check_directory" ]; then if [ -e "$check_directory" ]; then fatal "'$check_directory' exists but is not a directory" 13 @@@ -396,10 -398,7 +403,10 @@@ mkdir -p "$check_directory" || fatal "could not create '$check_directory'" 50 fi fi -done +} + +check_dir "$VCSH_REPO_D" +[ ! "x$VCSH_GITIGNORE" = 'xnone' ] && check_dir "$VCSH_BASE/.gitignore.d" verbose "$VCSH_COMMAND begin" export VCSH_COMMAND=$(echo $VCSH_COMMAND | sed 's/-/_/g')