mirror of
https://github.com/wfxr/forgit.git
synced 2026-09-10 07:16:23 -04:00
Move array parsing into the functions the arrays are used in, so we do not spent time parsing arrays we never use
This commit is contained in:
parent
d4efabb422
commit
cd15ed3323
|
|
@ -81,44 +81,6 @@ _forgit_parse_array() {
|
|||
${old_IFS+"false"} && unset IFS || IFS="$old_IFS"
|
||||
}
|
||||
|
||||
# parse environment variables into global arrays
|
||||
# this allows using them properly quoted without word splitting or glob expansion
|
||||
_forgit_log_git_opts=()
|
||||
_forgit_parse_array _forgit_log_git_opts "$FORGIT_LOG_GIT_OPTS"
|
||||
_forgit_add_git_opts=()
|
||||
_forgit_parse_array _forgit_add_git_opts "$FORGIT_ADD_GIT_OPTS"
|
||||
_forgit_diff_git_opts=()
|
||||
_forgit_parse_array _forgit_diff_git_opts "$FORGIT_DIFF_GIT_OPTS"
|
||||
_forgit_reset_head_git_opts=()
|
||||
_forgit_parse_array _forgit_reset_head_git_opts "$FORGIT_RESET_HEAD_GIT_OPTS"
|
||||
_forgit_rebase_git_opts=()
|
||||
_forgit_parse_array _forgit_rebase_git_opts "$FORGIT_REBASE_GIT_OPTS"
|
||||
_forgit_fixup_git_opts=()
|
||||
_forgit_parse_array _forgit_fixup_git_opts "$FORGIT_FIXUP_GIT_OPTS"
|
||||
_forgit_blame_git_opts=()
|
||||
_forgit_parse_array _forgit_blame_git_opts "$FORGIT_BLAME_GIT_OPTS"
|
||||
_forgit_revert_commit_git_opts=()
|
||||
_forgit_parse_array _forgit_revert_commit_git_opts "$FORGIT_REVERT_COMMIT_GIT_OPTS"
|
||||
_forgit_branch_delete_git_opts=()
|
||||
_forgit_parse_array _forgit_branch_delete_git_opts "$FORGIT_BRANCH_DELETE_GIT_OPTS"
|
||||
_forgit_checkout_commit_git_opts=()
|
||||
_forgit_parse_array _forgit_checkout_commit_git_opts "$FORGIT_CHECKOUT_COMMIT_GIT_OPTS"
|
||||
_forgit_checkout_tag_git_opts=()
|
||||
_forgit_parse_array _forgit_checkout_tag_git_opts "$FORGIT_CHECKOUT_TAG_GIT_OPTS"
|
||||
_forgit_checkout_branch_git_opts=()
|
||||
_forgit_parse_array _forgit_checkout_branch_git_opts "$FORGIT_CHECKOUT_BRANCH_GIT_OPTS"
|
||||
_forgit_checkout_file_git_opts=()
|
||||
_forgit_parse_array _forgit_checkout_file_git_opts "$FORGIT_CHECKOUT_FILE_GIT_OPTS"
|
||||
_forgit_cherry_pick_git_opts=()
|
||||
_forgit_parse_array _forgit_cherry_pick_git_opts "$FORGIT_CHERRY_PICK_GIT_OPTS"
|
||||
_forgit_clean_git_opts=()
|
||||
_forgit_parse_array _forgit_clean_git_opts "$FORGIT_CLEAN_GIT_OPTS"
|
||||
_forgit_stash_push_git_opts=()
|
||||
_forgit_parse_array _forgit_stash_push_git_opts "$FORGIT_STASH_PUSH_GIT_OPTS"
|
||||
_forgit_stash_show_git_opts=()
|
||||
_forgit_parse_array _forgit_stash_show_git_opts "$FORGIT_STASH_SHOW_GIT_OPTS"
|
||||
_forgit_checkout_branch_branch_git_opts=()
|
||||
_forgit_parse_array _forgit_checkout_branch_branch_git_opts "$FORGIT_CHECKOUT_BRANCH_BRANCH_GIT_OPTS"
|
||||
|
||||
_forgit_pager=${FORGIT_PAGER:-$(git config core.pager || echo 'cat')}
|
||||
_forgit_show_pager=${FORGIT_SHOW_PAGER:-$(git config pager.show || echo "$_forgit_pager")}
|
||||
|
|
@ -151,6 +113,8 @@ _forgit_log() {
|
|||
graph=--graph
|
||||
[[ $FORGIT_LOG_GRAPH_ENABLE == false ]] && graph=
|
||||
log_format=${FORGIT_GLO_FORMAT:-$_forgit_log_format}
|
||||
_forgit_log_git_opts=()
|
||||
_forgit_parse_array _forgit_log_git_opts "$FORGIT_LOG_GIT_OPTS"
|
||||
eval "git log $graph --color=always --format='$log_format' ${_forgit_log_git_opts[*]} $* $_forgit_emojify" |
|
||||
FZF_DEFAULT_OPTS="$opts" fzf
|
||||
fzf_exit_code=$?
|
||||
|
|
@ -195,6 +159,8 @@ _forgit_diff() {
|
|||
# prevent fzf from interpreting this substring by escaping the opening bracket.
|
||||
# The string is evaluated a few subsequent times, so we need multiple escapes.
|
||||
escaped_commits=${commits//\{/\\\\\{}
|
||||
_forgit_diff_git_opts=()
|
||||
_forgit_parse_array _forgit_diff_git_opts "$FORGIT_DIFF_GIT_OPTS"
|
||||
git_diff="git diff --color=always ${_forgit_diff_git_opts[*]} $escaped_commits"
|
||||
preview_cmd="cd '$repo' && $get_files | xargs -0 $git_diff -U$_forgit_preview_context -- | $_forgit_diff_pager"
|
||||
enter_cmd="cd '$repo' && $get_files | xargs -0 $git_diff -U$_forgit_fullscreen_context -- | $_forgit_diff_pager"
|
||||
|
|
@ -219,6 +185,8 @@ _forgit_diff() {
|
|||
_forgit_add() {
|
||||
_forgit_inside_work_tree || return 1
|
||||
local git_add changed unmerged untracked files opts preview extract
|
||||
_forgit_add_git_opts=()
|
||||
_forgit_parse_array _forgit_add_git_opts "$FORGIT_ADD_GIT_OPTS"
|
||||
git_add="git add ${_forgit_add_git_opts[*]}"
|
||||
# Add files if passed as arguments
|
||||
[[ $# -ne 0 ]] && { $git_add "$@" && git status -su; return $?; }
|
||||
|
|
@ -259,6 +227,8 @@ _forgit_add() {
|
|||
_forgit_reset_head() {
|
||||
_forgit_inside_work_tree || return 1
|
||||
local git_reset_head cmd files opts rootdir
|
||||
_forgit_reset_head_git_opts=()
|
||||
_forgit_parse_array _forgit_reset_head_git_opts "$FORGIT_RESET_HEAD_GIT_OPTS"
|
||||
git_reset_head="git reset -q ${_forgit_reset_head_git_opts[*]} HEAD"
|
||||
[[ $# -ne 0 ]] && { $git_reset_head "$@" && git status --short; return $?; }
|
||||
rootdir=$(git rev-parse --show-toplevel)
|
||||
|
|
@ -281,6 +251,8 @@ _forgit_stash_show() {
|
|||
local git_stash_show git_stash_list cmd opts
|
||||
git_stash_show="git stash show --color=always --ext-diff"
|
||||
[[ $# -ne 0 ]] && { $git_stash_show "$@"; return $?; }
|
||||
_forgit_stash_show_git_opts=()
|
||||
_forgit_parse_array _forgit_stash_show_git_opts "$FORGIT_STASH_SHOW_GIT_OPTS"
|
||||
git_stash_list="git stash list ${_forgit_stash_show_git_opts[*]}"
|
||||
cmd="echo {} |cut -d: -f1 |xargs -I% $git_stash_show % |$_forgit_diff_pager"
|
||||
opts="
|
||||
|
|
@ -301,6 +273,8 @@ _forgit_stash_show() {
|
|||
_forgit_stash_push() {
|
||||
_forgit_inside_work_tree || return 1
|
||||
local git_stash_push msg args
|
||||
_forgit_stash_push_git_opts=()
|
||||
_forgit_parse_array _forgit_stash_push_git_opts "$FORGIT_STASH_PUSH_GIT_OPTS"
|
||||
git_stash_push="git stash push ${_forgit_stash_push_git_opts[*]}"
|
||||
args=( "$@" )
|
||||
while (( "$#" )); do
|
||||
|
|
@ -340,6 +314,8 @@ _forgit_clean() {
|
|||
_forgit_inside_work_tree || return 1
|
||||
_forgit_contains_non_flags "$@" && { git clean -q "$@"; return $?; }
|
||||
local git_clean files opts
|
||||
_forgit_clean_git_opts=()
|
||||
_forgit_parse_array _forgit_clean_git_opts "$FORGIT_CLEAN_GIT_OPTS"
|
||||
git_clean="git clean ${_forgit_clean_git_opts[*]}"
|
||||
opts="
|
||||
$FORGIT_FZF_DEFAULT_OPTS
|
||||
|
|
@ -356,6 +332,8 @@ _forgit_clean() {
|
|||
_forgit_cherry_pick() {
|
||||
local git_cherry_pick base target preview opts fzf_selection fzf_exitval
|
||||
|
||||
_forgit_cherry_pick_git_opts=()
|
||||
_forgit_parse_array _forgit_cherry_pick_git_opts "$FORGIT_CHERRY_PICK_GIT_OPTS"
|
||||
git_cherry_pick="git cherry-pick ${_forgit_cherry_pick_git_opts[*]}"
|
||||
|
||||
base=$(git branch --show-current)
|
||||
|
|
@ -436,6 +414,8 @@ _forgit_cherry_pick_from_branch() {
|
|||
_forgit_rebase() {
|
||||
_forgit_inside_work_tree || return 1
|
||||
local git_rebase cmd preview opts graph files target_commit prev_commit
|
||||
_forgit_rebase_git_opts=()
|
||||
_forgit_parse_array _forgit_rebase_git_opts "$FORGIT_REBASE_GIT_OPTS"
|
||||
git_rebase="git rebase -i ${_forgit_rebase_git_opts[*]}"
|
||||
graph=--graph
|
||||
[[ $FORGIT_LOG_GRAPH_ENABLE == false ]] && graph=
|
||||
|
|
@ -461,6 +441,8 @@ _forgit_fixup() {
|
|||
_forgit_inside_work_tree || return 1
|
||||
git diff --cached --quiet && echo 'Nothing to fixup: there are no staged changes.' && return 1
|
||||
local git_fixup cmd preview opts graph files target_commit prev_commit
|
||||
_forgit_fixup_git_opts=()
|
||||
_forgit_parse_array _forgit_fixup_git_opts "$FORGIT_FIXUP_GIT_OPTS"
|
||||
git_fixup="git commit --fixup ${_forgit_fixup_git_opts[*]}"
|
||||
graph=--graph
|
||||
[[ $FORGIT_LOG_GRAPH_ENABLE == false ]] && graph=
|
||||
|
|
@ -488,6 +470,8 @@ _forgit_fixup() {
|
|||
_forgit_checkout_file() {
|
||||
_forgit_inside_work_tree || return 1
|
||||
local git_checkout cmd files opts
|
||||
_forgit_checkout_file_git_opts=()
|
||||
_forgit_parse_array _forgit_checkout_file_git_opts "$FORGIT_CHECKOUT_FILE_GIT_OPTS"
|
||||
git_checkout="git checkout ${_forgit_checkout_file_git_opts[*]}"
|
||||
[[ $# -ne 0 ]] && { $git_checkout -- "$@"; return $?; }
|
||||
cmd="git diff --color=always -- {} | $_forgit_diff_pager"
|
||||
|
|
@ -517,6 +501,8 @@ _forgit_checkout_branch() {
|
|||
fi
|
||||
|
||||
local git_checkout cmd preview opts branch
|
||||
_forgit_checkout_branch_branch_git_opts=()
|
||||
_forgit_parse_array _forgit_checkout_branch_branch_git_opts "$FORGIT_CHECKOUT_BRANCH_BRANCH_GIT_OPTS"
|
||||
cmd="git branch --color=always ${_forgit_checkout_branch_branch_git_opts[*]:---all} | LC_ALL=C sort -k1.1,1.1 -rs"
|
||||
preview="git log {1} $_forgit_log_preview_options"
|
||||
opts="
|
||||
|
|
@ -528,6 +514,8 @@ _forgit_checkout_branch() {
|
|||
branch="$(eval "$cmd" | FZF_DEFAULT_OPTS="$opts" fzf | awk '{print $1}')"
|
||||
[[ -z "$branch" ]] && return 1
|
||||
|
||||
_forgit_checkout_branch_git_opts=()
|
||||
_forgit_parse_array _forgit_checkout_branch_git_opts "$FORGIT_CHECKOUT_BRANCH_GIT_OPTS"
|
||||
git_checkout="git checkout ${_forgit_checkout_branch_git_opts[*]}"
|
||||
# track the remote branch if possible
|
||||
if [[ "$branch" == "remotes/origin/"* ]]; then
|
||||
|
|
@ -546,6 +534,8 @@ _forgit_checkout_branch() {
|
|||
_forgit_checkout_tag() {
|
||||
_forgit_inside_work_tree || return 1
|
||||
local git_checkout cmd opts preview
|
||||
_forgit_checkout_tag_git_opts=()
|
||||
_forgit_parse_array _forgit_checkout_tag_git_opts "$FORGIT_CHECKOUT_TAG_GIT_OPTS"
|
||||
git_checkout="git checkout ${_forgit_checkout_tag_git_opts[*]}"
|
||||
[[ $# -ne 0 ]] && { $git_checkout "$@"; return $?; }
|
||||
cmd="git tag -l --sort=-v:refname"
|
||||
|
|
@ -565,6 +555,8 @@ _forgit_checkout_tag() {
|
|||
_forgit_checkout_commit() {
|
||||
_forgit_inside_work_tree || return 1
|
||||
local git_checkout cmd opts graph
|
||||
_forgit_checkout_commit_git_opts=()
|
||||
_forgit_parse_array _forgit_checkout_commit_git_opts "$FORGIT_CHECKOUT_COMMIT_GIT_OPTS"
|
||||
git_checkout="git checkout ${_forgit_checkout_commit_git_opts[*]}"
|
||||
[[ $# -ne 0 ]] && { $git_checkout "$@"; return $?; }
|
||||
cmd="echo {} | $_forgit_extract_sha |xargs -I% git show --color=always % | $_forgit_show_pager"
|
||||
|
|
@ -585,6 +577,8 @@ _forgit_checkout_commit() {
|
|||
_forgit_branch_delete() {
|
||||
_forgit_inside_work_tree || return 1
|
||||
local git_branch preview opts cmd branches
|
||||
_forgit_branch_delete_git_opts=()
|
||||
_forgit_parse_array _forgit_branch_delete_git_opts "$FORGIT_BRANCH_DELETE_GIT_OPTS"
|
||||
git_branch="git branch ${_forgit_branch_delete_git_opts[*]}"
|
||||
[[ $# -ne 0 ]] && { $git_branch -D "$@"; return $?; }
|
||||
preview="git log {1} $_forgit_log_preview_options"
|
||||
|
|
@ -606,6 +600,8 @@ _forgit_branch_delete() {
|
|||
_forgit_revert_commit() {
|
||||
_forgit_inside_work_tree || return 1
|
||||
local git_revert cmd opts files preview commits IFS
|
||||
_forgit_revert_commit_git_opts=()
|
||||
_forgit_parse_array _forgit_revert_commit_git_opts "$FORGIT_REVERT_COMMIT_GIT_OPTS"
|
||||
git_revert="git revert ${_forgit_revert_commit_git_opts[*]}"
|
||||
[[ $# -ne 0 ]] && { $git_revert "$@"; return $?; }
|
||||
|
||||
|
|
@ -645,6 +641,8 @@ _forgit_revert_commit() {
|
|||
_forgit_blame() {
|
||||
_forgit_inside_work_tree || return 1
|
||||
local git_blame opts flags preview file
|
||||
_forgit_blame_git_opts=()
|
||||
_forgit_parse_array _forgit_blame_git_opts "$FORGIT_BLAME_GIT_OPTS"
|
||||
git_blame="git blame ${_forgit_blame_git_opts[*]}"
|
||||
_forgit_contains_non_flags "$@" && { $git_blame "$@"; return $?; }
|
||||
opts="
|
||||
|
|
|
|||
Loading…
Reference in a new issue