From ec844189f5c74248786761489aa83e9709e99184 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Wed, 14 Mar 2018 09:05:57 +0100 Subject: [PATCH] Initial commit --- dot.gitconfig | 2 ++ git-rebasei | 3 +++ git-rebasei-editor | 44 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 dot.gitconfig create mode 100755 git-rebasei create mode 100755 git-rebasei-editor diff --git a/dot.gitconfig b/dot.gitconfig new file mode 100644 index 0000000..52d0cf8 --- /dev/null +++ b/dot.gitconfig @@ -0,0 +1,2 @@ +[alias] + rebasei = "!git-rebasei" diff --git a/git-rebasei b/git-rebasei new file mode 100755 index 0000000..6a1ed0c --- /dev/null +++ b/git-rebasei @@ -0,0 +1,3 @@ +#!/bin/bash + +GIT_REBASE_I_EDITOR="${EDITOR:-editor}" EDITOR="git-rebasei-editor" git rebase -i "$@" diff --git a/git-rebasei-editor b/git-rebasei-editor new file mode 100755 index 0000000..f1d34fd --- /dev/null +++ b/git-rebasei-editor @@ -0,0 +1,44 @@ +#!/bin/bash + +export EDITOR="$GIT_REBASE_I_EDITOR" + +tempfile="$(tempfile)" + +if ! (cat "$1" | grep -q "Rebase .* onto .* (.* command(s))"); then + exec editor "$@" +fi + +# how can I get the --graph with only the desired commits? + +cat "$1" \ + | sed -n -e '/^pick/ s/pick \([^ ]*\) .*$/\1/ p' \ + | tac \ + | xargs -n 1 git log -1 --oneline --decorate --graph --name-status \ + | sed -e 's~^\* \([0-9a-f][0-9a-f]* \)~pick \1~' \ + > "$tempfile" + +# with --graph, if there are actually any pipes, use: +# | sed -e 's~^\([ |\\/*]* \)\([0-9a-f][0-9a-f]* \)~\1pick \2~' \ + +echo >> "$tempfile" +echo "# Originial git rebase -i data:" >> "$tempfile" +cat "$1" | sed -e 's/^/#/' >> "$tempfile" + +editor "$tempfile" + +# p, pick +# r, reword +# e, edit +# s, squash +# f, fixup +# x, exec +# d, drop + +commands='p\|pick\|r\|reword\|e\|edit\|s\|squash\|f\|fixup\|x\|exec\|d\|drop' + +cat "$tempfile" \ + | grep -v "^#" \ + | grep -v "^ *[|\\/][ |\\/]*[^|\\/*]" \ + | tac \ + | sed -e 's~^\([ |\\/*]* \)\(\('"$commands"'\)[0-9a-f][0-9a-f]* \)~\2~' \ + | tee "$1" >&2