You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dotbare/dotbare

122 lines
3.4 KiB
Plaintext

4 years ago
#!/usr/bin/env bash
#
# Main entry script for dotbare, used to route command to appropriate scripts
#
# @params
# Globals
# ${mydir}: string, directory of the executing script, used for sourcing helpers
# ${action_command}: string, determine which script to call
# Arguments
# action_command: sub commands dotbare should run
# General git command: log, status etc
# dotbare specific commands: fadd | frm | fpop | freset | fcheckout | help etc
# option flags:
# check sub commands for available option flags
mydir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source "${mydir}"/helper/set_variable.sh
4 years ago
function usage() {
echo -e "Usage: dotbare [-h] [COMMANDS] [OPTIONS] ...\n"
echo -e "Interactively manage dotfiles with the help of fzf and git bare repo"
echo -e "To see all dotbare specific COMMANDS, run dotbare without any arguments\n"
echo -e "dotbare is just a wrapper around git hence all git commands will function"
echo -e "normally, just replace git with dotbare (e.g. dotbare commit -m 'message')."
echo -e "dotbare added couple useful scripts starting with 'f' prefix to help you"
echo -e "manage your interact with your git bare repo a little easier with the help of fzf\n"
echo -e "optional arguments:"
echo -e " -h\t\tshow this help message and exit"
echo -e "Available commands:"
echo -e " Any git commands, treat dotbare as git"
echo -e " fadd \t\tstage modified file interactively"
echo -e " funtrack \t\tuntrack file interactively"
echo -e " fstash \t\tmanage stash interactively"
echo -e " fcheckout \t\tcheckout branch/files/commits interactively"
echo -e " fstat \t\tstage/unstage interactively"
echo -e " fedit \t\tselect files/commits and edit interactively"
echo -e " flog \t\tmanage commits interactively"
echo -e " fbackup \t\tperform backup for tracked dotfiles"
echo -e " fupgrade \t\tupdate dotbare to the latest version"
echo -e " finit \t\tinitialise/migrate dotbare"
echo -e " help \t\tshow this help message and exit"
}
# if no argument, display all possible actions
# disbale shell check for ls, we are not processing
if [[ $# -eq 0 ]]; then
# shellcheck disable=SC2012
ls "${mydir}"/scripts \
| fzf --no-multi --header='Available commands' --preview="dotbare {} -h" \
| xargs -I __ dotbare __ -h
exit 0
fi
# shellcheck disable=SC2199
[[ "$@" == 'add --all' ]] && \
echo 'If you intend to stage all modified file, run dotbare add -u' && \
echo "dotbare disabled add --all option as this will stage every single file in ${DOTBARE_TREE}" && \
exit 1
action_command=''
case "$1" in
fadd)
action_command='fadd'
shift
;;
4 years ago
funtrack)
action_command='funtrack'
shift
;;
4 years ago
fstash)
action_command='fstash'
shift
;;
4 years ago
freset)
action_command='freset'
shift
;;
4 years ago
fcheckout)
action_command='fcheckout'
shift
;;
4 years ago
fstat)
action_command='fstat'
shift
;;
4 years ago
fedit)
action_command='fedit'
shift
;;
4 years ago
flog)
action_command="flog"
shift
;;
4 years ago
fbackup)
action_command="fbackup"
shift
;;
finit)
action_command='finit'
shift
;;
fupgrade)
action_command='fupgrade'
shift
;;
help)
usage
exit 0
;;
-h)
usage
exit 0
;;
esac
if [[ -z "${action_command}" ]]; then
4 years ago
/usr/bin/git --git-dir="${DOTBARE_DIR}" --work-tree="${DOTBARE_TREE}" "$@"
else
# run the scripts
"${mydir}/scripts/${action_command}" "$@"
fi