[PATCH] rebase -i: use diff plumbing instead of porcelain
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Oct 9, 2007, 12:59 UTC
- Message-ID
- <Pine.LNX.4.64.0710091353140.4174@racer.site>
- In-Reply-To
- <470B7581.3030301@viscovery.net>
When diff drivers are installed, calling "git diff <tree1>..<tree2>" calls those drivers. This borks the patch generation of rebase -i. So use "git diff-tree -p" instead, which does not call diff drivers.
Noticed by Johannes Sixt.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> ---
On Tue, 9 Oct 2007, Johannes Sixt wrote:
> Johannes Schindelin schrieb:
> > On Tue, 9 Oct 2007, Johannes Sixt wrote:
> >
> > > I wonder for what reason rebase--interactive generates a
> > > patch using 'git diff' in the make_patch function. Is this
> > > an artefact?
> >
> > It was an explicit request by people who use git-rebase
> > regularly, and missed being able to see the patch in
> > --interactive.
>
> Can we generate the patch with plumbing,
> diff-{files,index,tree}? They by-pass any diff drivers.Here you are.
git-rebase--interactive.sh | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index 050140d..df4cedb 100755 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -80,7 +80,7 @@ mark_action_done () { make_patch () { parent_sha1=$(git rev-parse --verify "$1"^) || die "Cannot get patch for $1^" - git diff "$parent_sha1".."$1" > "$DOTEST"/patch + git diff-tree -p "$parent_sha1".."$1" > "$DOTEST"/patch test -f "$DOTEST"/message || git cat-file commit "$1" | sed "1,/^$/d" > "$DOTEST"/message test -f "$DOTEST"/author-script || @@ -325,7 +325,7 @@ do_next () { ;; esac && { test ! -f "$DOTEST"/verbose || - git diff --stat $(cat "$DOTEST"/head)..HEAD + git diff-tree --stat $(cat "$DOTEST"/head)..HEAD } && rm -rf "$DOTEST" && git gc --auto &&
-- 1.5.3.4.1169.g5fb8d