]>
git.madduck.net Git - code/vcsh.git/blobdiff - vcsh
madduck's git repository
Every one of the projects in this repository is available at the canonical
URL git://git.madduck.net/madduck/pub/<projectpath> — see
each project's metadata for the exact URL.
All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@ git. madduck. net .
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
SSH access, as well as push access can be individually
arranged .
If you use my repositories frequently, consider adding the following
snippet to ~/.gitconfig and using the third clone URL listed for each
project:
[url "git://git.madduck.net/madduck/"]
insteadOf = madduck:
-[ -n "$VCSH_DEBUG" ] && set -x
+[ -n "$VCSH_DEBUG" ] && set -v x
[ -z "$XDG_CONFIG_HOME" ] && XDG_CONFIG_HOME="$HOME/.config"
[ -z "$VCSH_BASE" ] && VCSH_BASE="$XDG_CONFIG_HOME/vcsh/repo.d"
[ -z "$XDG_CONFIG_HOME" ] && XDG_CONFIG_HOME="$HOME/.config"
[ -z "$VCSH_BASE" ] && VCSH_BASE="$XDG_CONFIG_HOME/vcsh/repo.d"
+get_files() {
+ export GIT_DIR="$VCSH_BASE/$VCSH_REPO_NAME.git"
+ git ls-files
+}
+
+list_tracked() {
+ for VCSH_REPO_NAME in $(list); do
+ get_files
+ done | sort -u
+}
+
+list_tracked_by() {
+ use
+ git ls-files | sort -u
+}
+
rename() {
git_dir_exists
[ -d "$GIT_DIR_NEW" ] && fatal "'$GIT_DIR_NEW' exists" 54
rename() {
git_dir_exists
[ -d "$GIT_DIR_NEW" ] && fatal "'$GIT_DIR_NEW' exists" 54
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
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
- [ -d "$gitignore" ] && echo "$gitignore/*" | sed 's/^/!/'>> "$tempfile" || fatal "could not write to '$tempfile'" 57
+ [ -d "$gitignore" ] && { echo "$gitignore/*" | sed 's/^/!/' >> "$tempfile" || fatal "could not write to '$tempfile'" 57; }
- if [ diff -N "$tempfile" "$HOME/.gitignore.d/$VCSH_REPO_NAME" > /dev/null ] ; then
+ if diff -N "$tempfile" "$HOME/.gitignore.d/$VCSH_REPO_NAME" > /dev/null ; then
rm -f "$tempfile" || error "could not delete '$tempfile'"
exit
fi
rm -f "$tempfile" || error "could not delete '$tempfile'"
exit
fi
git config core.worktree "$GIT_WORK_TREE"
git config core.excludesfile ".gitignore.d/$VCSH_REPO_NAME"
git config vcsh.vcsh 'true'
git config core.worktree "$GIT_WORK_TREE"
git config core.excludesfile ".gitignore.d/$VCSH_REPO_NAME"
git config vcsh.vcsh 'true'
- touch "$HOME/.gitignore.d/$VCSH_REPO_NAME" || error "could not touch '$HOME/.gitignore.d/$VCSH_REPO_NAME'"
- git add "$HOME/.gitignore.d/$VCSH_REPO_NAME"
+ [ -e "$HOME/.gitignore.d/$VCSH_REPO_NAME" ] && git add -f "$HOME/.gitignore.d/$VCSH_REPO_NAME"
elif [ "$1" = 'delete' ] ||
[ "$1" = 'enter' ] ||
[ "$1" = 'init' ] ||
elif [ "$1" = 'delete' ] ||
[ "$1" = 'enter' ] ||
[ "$1" = 'init' ] ||
+ [ "$1" = 'list-tracked-by' ] ||
[ "$1" = 'rename' ] ||
[ "$1" = 'run' ] ||
[ "$1" = 'seed-gitignore' ] ||
[ "$1" = 'rename' ] ||
[ "$1" = 'run' ] ||
[ "$1" = 'seed-gitignore' ] ||
export VCSH_REPO_NAME="$2"
export GIT_DIR="$VCSH_BASE/$VCSH_REPO_NAME.git"
[ "$VCSH_COMMAND" = 'rename' ] && export GIT_DIR_NEW="$VCSH_BASE/$3.git"
export VCSH_REPO_NAME="$2"
export GIT_DIR="$VCSH_BASE/$VCSH_REPO_NAME.git"
[ "$VCSH_COMMAND" = 'rename' ] && export GIT_DIR_NEW="$VCSH_BASE/$3.git"
- [ "$VCSH_COMMAND" = 'run' ] && shift 2 && export VCSH_EXTERNAL_COMMAND="$@"
- [ "$VCSH_COMMAND" = 'seed-gitignore' ] && export VCSH_COMMAND='seed_gitignore'
-elif [ "$1" = 'list' ]; then
+ [ "$VCSH_COMMAND" = 'run' ] && shift 2 && export VCSH_EXTERNAL_COMMAND="$*"
+ [ "$VCSH_COMMAND" = 'seed-gitignore' ]
+elif [ "$1" = 'list' ] ||
+ [ "$1" = 'list-tracked' ]; then
export VCSH_COMMAND="$1"
elif [ -n "$1" ]; then
export VCSH_COMMAND=run
export VCSH_COMMAND="$1"
elif [ -n "$1" ]; then
export VCSH_COMMAND=run
+# Did we receive a directory instead of a name?
+# Mangle the input to fit normal operation.
+if echo $VCSH_REPO_NAME | grep -q '/'; then
+ export GIT_DIR=$VCSH_REPO_NAME
+ export VCSH_REPO_NAME=$(basename $VCSH_REPO_NAME .git)
+fi
+
+
for check_directory in "$VCSH_BASE" "$HOME/.gitignore.d"
do
if [ ! -d "$check_directory" ]; then
for check_directory in "$VCSH_BASE" "$HOME/.gitignore.d"
do
if [ ! -d "$check_directory" ]; then
done
verbose "$VCSH_COMMAND begin"
done
verbose "$VCSH_COMMAND begin"
+export VCSH_COMMAND=$(echo $VCSH_COMMAND | sed 's/-/_/g')
$VCSH_COMMAND
verbose "$VCSH_COMMAND end, exiting"
$VCSH_COMMAND
verbose "$VCSH_COMMAND end, exiting"