X-Git-Url: https://git.madduck.net/code/vcsh.git/blobdiff_plain/1a142e0ce3cfb86f61fb7f97291f29081c275f58..aef309d6d15a29109d9172e6da151e5491370d3d:/vcsh?ds=sidebyside diff --git a/vcsh b/vcsh index 18faf4c..ff0ec2b 100755 --- a/vcsh +++ b/vcsh @@ -106,6 +106,9 @@ help() { commit Commit in all repositories delete Delete an existing repository enter Enter repository; spawn new instance of \$SHELL + with \$GIT_DIR set. + foreach [<-g>] + Execute a command for every repository help Display this help text init Initialize a new repository list List all repositories @@ -160,7 +163,12 @@ clone() { You should add files to your new repository." exit fi - git fetch origin "$VCSH_BRANCH" + GIT_VERSION_MAJOR=$(git --version | sed -n 's/.* \([0-9]\)\..*/\1/p' ) + if [ 1 -lt "$GIT_VERSION_MAJOR" ];then + git fetch origin "$VCSH_BRANCH" + else + git fetch origin + fi hook pre-merge git ls-tree -r --name-only origin/"$VCSH_BRANCH" | (while read object; do [ -e "$object" ] && @@ -183,7 +191,7 @@ commit() { echo "$VCSH_REPO_NAME: " GIT_DIR=$VCSH_REPO_D/$VCSH_REPO_NAME.git; export GIT_DIR use - git commit --untracked-files=no --quiet + git commit --untracked-files=no --quiet $@ VCSH_COMMAND_RETURN_CODE=$? echo done @@ -218,11 +226,21 @@ enter() { foreach() { hook pre-foreach + + # We default to prefixing `git` to all commands passed to foreach, but + # allow running in general context with -g + command_prefix=git + while getopts "g" flag; do + if [ x"$1" = x'-g' ]; then + unset command_prefix + fi + shift 1 + done for VCSH_REPO_NAME in $(list); do echo "$VCSH_REPO_NAME:" GIT_DIR=$VCSH_REPO_D/$VCSH_REPO_NAME.git; export GIT_DIR use - git "$@" + $command_prefix "$@" done hook post-foreach } @@ -459,14 +477,21 @@ 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') OLDIFS=$IFS IFS=$(printf '\n\t') gitignores=$(for file in $(git ls-files); do - while true; do - echo "$file"; new=${file%/*} - [ x"$file" = x"$new" ] && break - file=$new - done; + if [ $GIT_VERSION_MAJOR -ge 2 -a $GIT_VERSION_MINOR -ge 7 ]; then + echo "$file"; + else + while true; do + echo "$file"; new=${file%/*} + [ x"$file" = x"$new" ] && break + file=$new + done; + fi done | sort -u) # Contrary to GNU mktemp, mktemp on BSD/OSX requires a template for temp files