#!/usr/bin/env bash # # Stage the selected file to git bare repo # # @params # Globals # ${mydir}: string, current directory of the executing script # ${stage_type}: modified, new file, or directory to stage # ${selected_files}: user selected files 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="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 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\n" echo -e "Default: list all modified files and stage the selected files.\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 1 else # shellcheck disable=SC2086 /usr/bin/git --git-dir="${DOTBARE_DIR}" --work-tree="${DOTBARE_TREE}" add ${file} fi } stage_type="modified" while getopts ":fhd" opt do case "$opt" in f) stage_type="file" ;; d) stage_type="dir" ;; h) usage exit 0 ;; *) echo "Invalid option: ${OPTARG}" >&2 usage exit 1 ;; esac done if [[ "${stage_type}" == "file" ]]; then selected_files=$(search_file 'f' | tr '\n' ' ') elif [[ "${stage_type}" == "dir" ]]; then selected_files=$(search_file 'd' | tr '\n' ' ') else selected_files=$(get_modified_file 'select files to stage' "unstaged" | tr '\n' ' ') fi stage_file "${selected_files}"