#!/bin/bash # # Stage the selected file to git bare repo # # @params # Globals # ${mydir}: string, current directory of the executing script # ${new_file}: new file path to stage # ${new_folder}: new folder to stage # ${selected_files}: modified file to stage # Arguments # -h: show help message # -f: select a file in PWD to stage # -d: select a directory in PWD to stage set -e set -f mydir="${0%/*}" source "${mydir}"/../helper/search_file.sh source "${mydir}"/../helper/set_variable.sh source "${mydir}"/../helper/git_query.sh function usage() { echo -e "Usage: dotbare fadd [-h] [-f] [-d] ...\n" echo -e "Stage the selected file to the dotfile gitbare repo" echo -e "Press escape to stop staging file\n" echo -e "optional arguments:" echo -e " -h\t\tshow this help message and exit" echo -e " -f\t\tselect a file in current directory and stage it" echo -e " -d\t\tselect a entire folder to stage" } ####################################### # stage file # Arguments: # $1: files to stage ####################################### function stage_file() { local file=$1 if [[ -z "${file}" ]] then exit 0 else # shellcheck disable=SC2086 /usr/bin/git --git-dir="${DOTBARE_DIR}" --work-tree="${DOTBARE_TREE}" add ${file} fi } new_file='' new_folder='' while getopts ":fhd" opt do case "$opt" in f) new_file=$(search_file 'f' | tr '\n' ' ') [[ -z "${new_file}" ]] && exit 1 break ;; h) usage exit 0 ;; d) new_folder=$(search_file 'd' | tr '\n' ' ') [[ -z "${new_folder}" ]] && exit 1 break ;; *) echo "Invalid option: ${OPTARG}" >&2 usage exit 1 ;; esac done if [[ -n "${new_file}" ]]; then stage_file "${new_file}" elif [[ -n "${new_folder}" ]]; then stage_file "${new_folder}" else selected_files=$(get_modified_file 'select files to stage' "unstaged" | tr '\n' ' ') stage_file "${selected_files}" fi