From 1f90f50d26a20e93a9ae4d973c58a62d113ed2d7 Mon Sep 17 00:00:00 2001 From: sandroid Date: Sun, 27 Mar 2022 18:58:07 +0200 Subject: [PATCH 1/3] Fixed: grc fails when commit is preceded by anything else than '* ' --- forgit.plugin.zsh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/forgit.plugin.zsh b/forgit.plugin.zsh index 3cba1cb..34dba7f 100755 --- a/forgit.plugin.zsh +++ b/forgit.plugin.zsh @@ -311,11 +311,13 @@ forgit::revert::commit() { preview="echo {} |grep -Eo '[a-f0-9]+' |head -1 |xargs -I% git show --color=always % -- $files | $forgit_show_pager" commits="$(eval "$cmd" | FZF_DEFAULT_OPTS="$opts" fzf --preview="$preview" -m | - grep -Eo '^\*\s[a-f0-9]+' | - cut -c 3- | + sed 's/^[^a-f^0-9]*\([a-f0-9]*\).*/\1/' | tr $'\n' ' ')" - [[ -z "$commits" ]] && return 1 - eval "git revert $commits" + if [[ "$commits" == *[![:space:]]* ]]; then + eval "git revert $commits" + else + return 1 + fi } # git ignore generator From e4874bf763d3d6eec94e03a07d84cf57d6f45f83 Mon Sep 17 00:00:00 2001 From: sandroid Date: Fri, 1 Apr 2022 22:01:37 +0200 Subject: [PATCH 2/3] Replaced eval in grc --- forgit.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forgit.plugin.zsh b/forgit.plugin.zsh index 34dba7f..7586a77 100755 --- a/forgit.plugin.zsh +++ b/forgit.plugin.zsh @@ -314,7 +314,7 @@ forgit::revert::commit() { sed 's/^[^a-f^0-9]*\([a-f0-9]*\).*/\1/' | tr $'\n' ' ')" if [[ "$commits" == *[![:space:]]* ]]; then - eval "git revert $commits" + git revert $(echo "$commits") else return 1 fi From 6a9c0e3f82f8d5fec91f409d2b1abc68722068d9 Mon Sep 17 00:00:00 2001 From: sandroid Date: Fri, 1 Apr 2022 23:28:20 +0200 Subject: [PATCH 3/3] Refactored grc --- forgit.plugin.zsh | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/forgit.plugin.zsh b/forgit.plugin.zsh index 7586a77..8c89959 100755 --- a/forgit.plugin.zsh +++ b/forgit.plugin.zsh @@ -300,7 +300,7 @@ forgit::checkout::commit() { forgit::revert::commit() { forgit::inside_work_tree || return 1 [[ $# -ne 0 ]] && { git revert "$@"; return $?; } - local cmd opts files preview commits + local cmd opts files preview commits IFS cmd="git log --graph --color=always --format='$forgit_log_format' $* $forgit_emojify" opts=" $FORGIT_FZF_DEFAULT_OPTS @@ -309,15 +309,14 @@ forgit::revert::commit() { " files=$(sed -nE 's/.* -- (.*)/\1/p' <<< "$*") # extract files parameters for `git show` command preview="echo {} |grep -Eo '[a-f0-9]+' |head -1 |xargs -I% git show --color=always % -- $files | $forgit_show_pager" - commits="$(eval "$cmd" | + # shellcheck disable=2207 + IFS=$'\n' commits=($(eval "$cmd" | FZF_DEFAULT_OPTS="$opts" fzf --preview="$preview" -m | - sed 's/^[^a-f^0-9]*\([a-f0-9]*\).*/\1/' | - tr $'\n' ' ')" - if [[ "$commits" == *[![:space:]]* ]]; then - git revert $(echo "$commits") - else - return 1 - fi + sed 's/^[^a-f^0-9]*\([a-f0-9]*\).*/\1/')) + [ ${#commits[@]} -eq 0 ] && return 1 + for commit in "${commits[@]}"; do + git revert "$commit" + done } # git ignore generator