From fe5c4d988198ad48019b9d8bdc051d996948062b Mon Sep 17 00:00:00 2001 From: carlfriedrich Date: Tue, 12 Jul 2022 16:27:23 +0200 Subject: [PATCH] Reverse order on cherry pick Git log displays the newest commits on top of the list, while git cherry pick displays the newest commits at the bottom. Reverse the order of git cherry pick so that it has the same order like git log. --- conf.d/forgit.plugin.fish | 9 +++++++-- forgit.plugin.zsh | 6 ++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/conf.d/forgit.plugin.fish b/conf.d/forgit.plugin.fish index ba167c8..1845d54 100644 --- a/conf.d/forgit.plugin.fish +++ b/conf.d/forgit.plugin.fish @@ -12,6 +12,11 @@ function forgit::inside_work_tree git rev-parse --is-inside-work-tree >/dev/null; end +function forgit::reverse_lines + # tac is not available on OSX, tail -r is not available on Linux, so we use either of them + tac 2> /dev/null || tail -r +end + set -g forgit_pager "$FORGIT_PAGER" set -g forgit_show_pager "$FORGIT_SHOW_PAGER" set -g forgit_diff_pager "$FORGIT_DIFF_PAGER" @@ -344,8 +349,8 @@ function forgit::cherry::pick -d "git cherry-picking" --argument-names 'target' " echo $base echo $target - git cherry "$base" "$target" --abbrev -v | - env FZF_DEFAULT_OPTS="$opts" fzf | cut -d' ' -f2 | + git cherry "$base" "$target" --abbrev -v | forgit::reverse_lines | + env FZF_DEFAULT_OPTS="$opts" fzf | cut -d' ' -f2 | forgit::reverse_lines | xargs -I% git cherry-pick % end diff --git a/forgit.plugin.zsh b/forgit.plugin.zsh index 3e6210c..5c11806 100755 --- a/forgit.plugin.zsh +++ b/forgit.plugin.zsh @@ -3,6 +3,8 @@ forgit::warn() { printf "%b[Warn]%b %s\n" '\e[0;33m' '\e[0m' "$@" >&2; } forgit::info() { printf "%b[Info]%b %s\n" '\e[0;32m' '\e[0m' "$@" >&2; } forgit::inside_work_tree() { git rev-parse --is-inside-work-tree >/dev/null; } +# tac is not available on OSX, tail -r is not available on Linux, so we use either of them +forgit::reverse_lines() { (tac 2> /dev/null || tail -r) } # optional render emoji characters (https://github.com/wfxr/emoji-cli) hash emojify &>/dev/null && forgit_emojify='|emojify' @@ -159,8 +161,8 @@ forgit::cherry::pick() { -m -0 --tiebreak=index $FORGIT_CHERRY_PICK_FZF_OPTS " - git cherry "$base" "$target" --abbrev -v | - FZF_DEFAULT_OPTS="$opts" fzf | cut -d' ' -f2 | + git cherry "$base" "$target" --abbrev -v | forgit::reverse_lines | + FZF_DEFAULT_OPTS="$opts" fzf | cut -d' ' -f2 | forgit::reverse_lines | xargs -I% git cherry-pick % }