# Read defaults
: ${VCSH_REPO_D:=$XDG_CONFIG_HOME/vcsh/repo.d}
-: ${VCSH_HOOK_D:=$XDH_CONFIG_HOME/vcsh/hooks-enabled}
+: ${VCSH_HOOK_D:=$XDG_CONFIG_HOME/vcsh/hooks-enabled}
: ${VCSH_BASE:=$HOME}
: ${VCSH_GITIGNORE:=exact}
: ${VCSH_WORKTREE:=absolute}
export GIT_DIR="$VCSH_REPO_D/$VCSH_REPO_NAME.git"
use
git commit --untracked-files=no --quiet
+ VCSH_COMMAND_RETURN_CODE=$?
echo
done
hook post-commit
[ ! -e "$GIT_DIR" ] || fatal "'$GIT_DIR' exists" 10
mkdir -p "$VCSH_BASE" || fatal "could not create '$VCSH_BASE'" 50
cd "$VCSH_BASE" || fatal "could not enter '$VCSH_BASE'" 11
- git init
+ git init --shared=0600
upgrade
hook post-init
}
export GIT_DIR="$VCSH_REPO_D/$VCSH_REPO_NAME.git"
use
git pull
+ VCSH_COMMAND_RETURN_CODE=$?
echo
done
hook post-pull
export GIT_DIR="$VCSH_REPO_D/$VCSH_REPO_NAME.git"
use
git push
+ VCSH_COMMAND_RETURN_CODE=$?
echo
done
hook post-push
hook pre-run
use
"$@"
+ VCSH_COMMAND_RETURN_CODE=$?
hook post-run
}
export GIT_DIR="$VCSH_REPO_D/$VCSH_REPO_NAME.git"
use
git status --short --untracked-files='no'
+ VCSH_COMMAND_RETURN_CODE=$?
else
for VCSH_REPO_NAME in $(list); do
echo "$VCSH_REPO_NAME:"
export GIT_DIR="$VCSH_REPO_D/$VCSH_REPO_NAME.git"
use
git status --short --untracked-files='no'
+ VCSH_COMMAND_RETURN_CODE=$?
echo
done
fi
git config core.worktree "$VCSH_BASE"
fi
[ ! "x$VCSH_GITIGNORE" = 'xnone' ] && git config core.excludesfile ".gitignore.d/$VCSH_REPO_NAME"
- git config vcsh.vcsh 'true'
+ git config core.attributesfile ".gitattributes.d/$VCSH_REPO_NAME"
+ git config vcsh.vcsh 'true'
use
[ -e "$VCSH_BASE/.gitignore.d/$VCSH_REPO_NAME" ] && git add -f "$VCSH_BASE/.gitignore.d/$VCSH_REPO_NAME"
+ [ -e "$VCSH_BASE/.gitattributes.d/$VCSH_REPO_NAME" ] && git add -f "$VCSH_BASE/.gitattributes.d/$VCSH_REPO_NAME"
hook post-upgrade
}
use
cd "$VCSH_BASE" || fatal "could not enter '$VCSH_BASE'" 11
+ OLDIFS="$IFS"
+ IFS=$(printf '\n\t')
gitignores=$(for file in $(git ls-files); do
while true; do
echo $file; new="${file%/*}"
{ echo "$gitignore/*" | sed 's@^@!/@' >> "$tempfile" || fatal "could not write to '$tempfile'" 57; }
fi
done
+ IFS="$OLDIFS"
if diff -N "$tempfile" "$VCSH_BASE/.gitignore.d/$VCSH_REPO_NAME" > /dev/null; then
rm -f "$tempfile" || error "could not delete '$tempfile'"
exit
fatal "could not move '$tempfile' to '$VCSH_BASE/.gitignore.d/$VCSH_REPO_NAME'" 53
}
-debug `git version`
+debug $(git version)
if [ ! "x$VCSH_GITIGNORE" = 'xexact' ] && [ ! "x$VCSH_GITIGNORE" = 'xnone' ] && [ ! "x$VCSH_GITIGNORE" = 'xrecursive' ]; then
fatal "'\$VCSH_GITIGNORE' must equal 'exact', 'none', or 'recursive'" 1
check_dir "$VCSH_REPO_D"
[ ! "x$VCSH_GITIGNORE" = 'xnone' ] && check_dir "$VCSH_BASE/.gitignore.d"
+check_dir "$VCSH_BASE/.gitattributes.d"
verbose "$VCSH_COMMAND begin"
export VCSH_COMMAND=$(echo $VCSH_COMMAND | sed 's/-/_/g')
$VCSH_COMMAND "$@"
hook post-command
verbose "$VCSH_COMMAND end, exiting"
+exit $VCSH_COMMAND_RETURN_CODE