}
delete() {
- old_dir="$PWD"
- cd "$HOME"
+ cd "$HOME" || fatal "could not enter '$HOME'" 11
use
info "This operation WILL DETROY DATA!"
files=$(git ls-files)
for file in $files; do
rm -f $file || info "could not delete '$file', continuing with deletion"
done
- rm -rf "$GIT_DIR" || info "could not delete '$GIT_DIR'"
- cd "$old_dir"
+ rmdir "$GIT_DIR" || error "could not delete '$GIT_DIR'"
}
enter() {
init() {
[ ! -e "$GIT_DIR" ] || fatal "'$GIT_DIR' exists" 10
export GIT_WORK_TREE="$HOME"
- mkdir -p "$GIT_WORK_TREE"
+ mkdir -p "$GIT_WORK_TREE" || fatal "could not create '$GIT_WORK_TREE'" 50
cd "$GIT_WORK_TREE" || fatal "could not enter '$GIT_WORK_TREE'" 11
git init
setup
done
}
+#get_files() {
+# return $(git ls-files)
+#}
+#
+#list_tracked_all() {
+# use
+# for repo in $(list); do
+# files="$files $(get_files $repo)"
+# done
+# echo $files | sort -u
+#}
+
rename() {
git_dir_exists
[ -d "$GIT_DIR_NEW" ] && fatal "'$GIT_DIR_NEW' exists" 54
seed_gitignore() {
use
- # Switching directory as this has to be executed from $HOME to be of any use.
- # Going back into old directory at the end in case `vcsh use` is reactivated.
- old_dir="$PWD"
- cd "$HOME"
+ cd "$HOME" || fatal "could not enter '$HOME'" 11
gitignores=$(for file in $(git ls-files); do
while true; do
echo $file; new="${file%/*}"
done;
done | sort -u)
tempfile=$(mktemp) || fatal "could not create tempfile" 51
- echo '*' > "$tempfile"
+ echo '*' > "$tempfile" || fatal "could not write to '$tempfile'" 57
for gitignore in $gitignores; do
- echo "$gitignore" | sed 's/^/!/' >> "$tempfile"
- [ -d "$gitignore" ] && echo "$gitignore/*" | sed 's/^/!/'>> "$tempfile"
+ 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; }
done
- diff -N "$tempfile" "$HOME/.gitignore.d/$VCSH_REPO_NAME" > /dev/null &&
- rm -f "$tempfile" &&
+ if diff -N "$tempfile" "$HOME/.gitignore.d/$VCSH_REPO_NAME" > /dev/null; then
+ rm -f "$tempfile" || error "could not delete '$tempfile'"
exit
+ fi
if [ -e "$HOME/.gitignore.d/$VCSH_REPO_NAME" ]; then
info "'$HOME/.gitignore.d/$VCSH_REPO_NAME' differs from new data, moving it to '$HOME/.gitignore.d/$VCSH_REPO_NAME.bak'"
mv -f "$HOME/.gitignore.d/$VCSH_REPO_NAME" "$HOME/.gitignore.d/$VCSH_REPO_NAME.bak" ||
fi
mv -f "$tempfile" "$HOME/.gitignore.d/$VCSH_REPO_NAME" ||
fatal "could not move '$tempfile' to '$HOME/.gitignore.d/$VCSH_REPO_NAME'" 53
- cd "$old_dir"
}
setup() {
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"
- git add "$HOME/.gitignore.d/$VCSH_REPO_NAME"
+ [ -e "$HOME/.gitignore.d/$VCSH_REPO_NAME" ] && git add -f "$HOME/.gitignore.d/$VCSH_REPO_NAME"
}
use() {
elif [ "$1" = 'delete' ] ||
[ "$1" = 'enter' ] ||
[ "$1" = 'init' ] ||
+ [ "$1" = 'list-tracked-all' ] ||
[ "$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"
- [ "$VCSH_COMMAND" = 'run' ] && shift 2 && export VCSH_EXTERNAL_COMMAND="$@"
- [ "$VCSH_COMMAND" = 'seed-gitignore' ] && export VCSH_COMMAND='seed_gitignore'
+ if [ "$VCSH_COMMAND" = 'run' ]; then
+ shift 2
+ export VCSH_EXTERNAL_COMMAND="$*"
+ # 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
+ fi
+ [ "$VCSH_COMMAND" = 'seed-gitignore' ]
elif [ "$1" = 'list' ]; then
export VCSH_COMMAND="$1"
elif [ -n "$1" ]; then
done
verbose "$VCSH_COMMAND begin"
+export VCSH_COMMAND=$(echo $VCSH_COMMAND | sed 's/-/_/g')
$VCSH_COMMAND
verbose "$VCSH_COMMAND end, exiting"