#!/bin/sh
-[ "$VCSH_DEBUG" = '1' ] && set -x
+[ -n "$VCSH_DEBUG" ] && set -x
SELF=$(basename $0)
[ -z "$XDG_CONFIG_HOME" ] && XDG_CONFIG_HOME="$HOME/.config"
-for check_directory in "$XDG_CONFIG_HOME" "$XDG_CONFIG_HOME/vcsh" "$XDG_CONFIG_HOME/vcsh/repo.d"
+[ -z "$VCSH_BASE" ] && VCSH_BASE="$XDG_CONFIG_HOME/vcsh/repo.d"
+for check_directory in "$VCSH_BASE"
do
if [ ! -d "$check_directory" ]; then
if [ -e "$check_directory" ]; then
echo "$SELF: error: $check_directory exists but is not a directory" >&2
exit 2
else
- mkdir "$check_directory" || (echo "$SELF: error: could not create $check_directory" >&2; exit 2)
+ mkdir -p "$check_directory" || (echo "$SELF: error: could not create $check_directory" >&2; exit 2)
fi
fi
done
-VCSH_BASE="$XDG_CONFIG_HOME/vcsh/repo.d"
-
debug() {
- [ "$VCSH_DEBUG" = '1' ] && echo "$SELF: debug: $1"
+ [ -n "$VCSH_DEBUG" ] && echo "$SELF: debug: $1"
}
verbose() {
- if [ "$VCSH_DEBUG" = '1' ] || [ "$VCSH_VERBOSE" = '1' ]; then echo "$SELF: verbose: $1"; fi
+ if [ -n "$VCSH_DEBUG" ] || [ -n "$VCSH_VERBOSE" ]; then echo "$SELF: verbose: $1"; fi
}
# use <repo> Use this repository
init <repo> Initialize a new repository
clone <remote> \\
[<repo>] Clone from an existing repository
+ seed-gitignore \\
+ <repo> Seed .gitignore.d/<repo> from git ls-files" >&2
}
use() {
done
[ "$VCSH_CONFLICT" = '1' ] &&
echo "$SELF: fatal: will stop after fetching and not try to merge!\n" &&
+ echo " Once this situation has been resolved, run 'vcsh run <foo> git pull' to finish cloning.\n" &&
exit 3
git merge origin/master
# vcsh use $REPO_NAME
elif [ "$1" = 'init' ]; then
verbose "init begin"
- [ -z $2 ] && help; return 0
+ [ -z $2 ] && help && echo && echo "$SELF $1: please specify repository to work on" && return 0
export REPO_NAME="$2"
export GIT_DIR="$VCSH_BASE/$REPO_NAME.git"
init
# verbose "exit end"
# exit 0
+elif [ "$1" = 'seed-gitignore' ]; then
+ verbose "seed-gitignore begin"
+ [ -z $2 ] && help && echo && echo "$SELF $1: please specify repository to work on" && return 0
+ use "$2"
+ files=$(git ls-files)
+ gitignores=$(for file in $(git ls-files); do
+ while true; do
+ echo $file; new="${file%/*}"
+ [ "$file" = "$new" ] && break
+ file="$new"
+ done;
+ done | sort -u | sed 's/^/!/')
+ [ -e .gitignore.d/$2 ] &&
+ echo "$SELF: .gitignore.d/$2 exists, moving it to .gitignore.d/$2.bak" &&
+ mv -f .gitignore.d/$2 .gitignore.d/$2.bak
+ echo '*' > .gitignore.d/$2
+ for gitignore in $gitignores; do
+ echo $gitignore >> .gitignore.d/$2
+ done
+
else
verbose "defaulting to calling help()"
help