From: Brian Henderson <henderson.bj@gmail.com>
To: git@vger.kernel.org
Cc: Jeff King <peff@peff.net>
Subject: [PATCH 0/3] diff-highlight: add support for git log --graph output.
Date: Thu, 28 Jul 2016 09:27:12 -0700 [thread overview]
Message-ID: <20160728162712.GA29220@tci.corp.yp.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 1481 bytes --]
Hi, I've been working with Jeff King on this patch, but he encouraged me to
email the list.
I recently learned about the diff-highlight tool and find it very helpful,
however, I frequently use the --graph option to git log which breaks the tool.
This patch looks to fix this.
I wanted to try and add some tests as well, but I was unsure what number to
pick for the second digit. As there were limited tests in the contrib directory
(only t93xx and one t7900) I just chose the next number in the 9xxx range.
Please let me know if I need to change it.
I'm also not super happy about my test case for the graph option. If anyone has
any better ideas, please let me know!
Brian Henderson (3):
diff-highlight: add some tests.
diff-highlight: add failing test for handling --graph output.
diff-highlight: add support for --graph output.
contrib/diff-highlight/Makefile | 5 +
contrib/diff-highlight/diff-highlight | 13 +--
contrib/diff-highlight/t/Makefile | 19 ++++
contrib/diff-highlight/t/t9400-diff-highlight.sh | 76 ++++++++++++++++
contrib/diff-highlight/t/test-diff-highlight.sh | 111 +++++++++++++++++++++++
5 files changed, 218 insertions(+), 6 deletions(-)
create mode 100644 contrib/diff-highlight/Makefile
create mode 100644 contrib/diff-highlight/t/Makefile
create mode 100644 contrib/diff-highlight/t/t9400-diff-highlight.sh
create mode 100644 contrib/diff-highlight/t/test-diff-highlight.sh
--
2.9.0
[-- Attachment #2: 0001-diff-highlight-add-some-tests.patch --]
[-- Type: text/x-diff, Size: 4401 bytes --]
From f2468205f5f43b17bfd0398959a1ae66588a8f0d Mon Sep 17 00:00:00 2001
From: Brian Henderson <henderson.bj@gmail.com>
Date: Thu, 21 Jul 2016 09:43:54 -0700
Subject: [PATCH 1/3] diff-highlight: add some tests.
---
contrib/diff-highlight/Makefile | 5 ++
contrib/diff-highlight/t/Makefile | 19 +++++++
contrib/diff-highlight/t/t9400-diff-highlight.sh | 63 ++++++++++++++++++++++
contrib/diff-highlight/t/test-diff-highlight.sh | 69 ++++++++++++++++++++++++
4 files changed, 156 insertions(+)
create mode 100644 contrib/diff-highlight/Makefile
create mode 100644 contrib/diff-highlight/t/Makefile
create mode 100644 contrib/diff-highlight/t/t9400-diff-highlight.sh
create mode 100644 contrib/diff-highlight/t/test-diff-highlight.sh
diff --git a/contrib/diff-highlight/Makefile b/contrib/diff-highlight/Makefile
new file mode 100644
index 0000000..b866259
--- /dev/null
+++ b/contrib/diff-highlight/Makefile
@@ -0,0 +1,5 @@
+# nothing to build
+all:;
+
+test:
+ $(MAKE) -C t
diff --git a/contrib/diff-highlight/t/Makefile b/contrib/diff-highlight/t/Makefile
new file mode 100644
index 0000000..ac81fc0
--- /dev/null
+++ b/contrib/diff-highlight/t/Makefile
@@ -0,0 +1,19 @@
+-include ../../../config.mak.autogen
+-include ../../../config.mak
+
+T = $(wildcard t[0-9][0-9][0-9][0-9]-*.sh)
+
+all: test
+test: $(T)
+
+.PHONY: help clean all test $(T)
+
+help:
+ @echo 'Run "$(MAKE) test" to launch test scripts'
+ @echo 'Run "$(MAKE) clean" to remove trash folders'
+
+$(T):
+ @echo "*** $@ ***"; sh $@ $(GIT_TEST_OPTS)
+
+clean:
+ $(RM) -r 'trash directory'.*
diff --git a/contrib/diff-highlight/t/t9400-diff-highlight.sh b/contrib/diff-highlight/t/t9400-diff-highlight.sh
new file mode 100644
index 0000000..ca7605f
--- /dev/null
+++ b/contrib/diff-highlight/t/t9400-diff-highlight.sh
@@ -0,0 +1,63 @@
+#!/bin/sh
+#
+# Copyright (C) 2016
+
+test_description='Test diff-highlight'
+
+. ./test-diff-highlight.sh
+. $TEST_DIRECTORY/test-lib.sh
+
+# PERL is required, but assumed to be present, although not necessarily modern
+# some tests require 5.8
+
+test_expect_success 'diff-highlight highlightes the beginning of a line' '
+ dh_test \
+ "aaa\nbbb\nccc\n" \
+ "aaa\n0bb\nccc\n" \
+"
+ aaa
+-${CW}b${CR}bb
++${CW}0${CR}bb
+ ccc
+"
+'
+
+test_expect_success 'diff-highlight highlightes the end of a line' '
+ dh_test \
+ "aaa\nbbb\nccc\n" \
+ "aaa\nbb0\nccc\n" \
+"
+ aaa
+-bb${CW}b${CR}
++bb${CW}0${CR}
+ ccc
+"
+'
+
+test_expect_success 'diff-highlight highlightes the middle of a line' '
+ dh_test \
+ "aaa\nbbb\nccc\n" \
+ "aaa\nb0b\nccc\n" \
+"
+ aaa
+-b${CW}b${CR}b
++b${CW}0${CR}b
+ ccc
+"
+'
+
+test_expect_success 'diff-highlight does not highlight whole line' '
+ dh_test \
+ "aaa\nbbb\nccc\n" \
+ "aaa\n000\nccc\n"
+'
+
+test_expect_success 'diff-highlight does not highlight mismatched hunk size' '
+ dh_test \
+ "aaa\nbbb\n" \
+ "aaa\nb0b\nccc\n"
+'
+
+# TODO add multi-byte test
+
+test_done
diff --git a/contrib/diff-highlight/t/test-diff-highlight.sh b/contrib/diff-highlight/t/test-diff-highlight.sh
new file mode 100644
index 0000000..9b26271
--- /dev/null
+++ b/contrib/diff-highlight/t/test-diff-highlight.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+#
+# Copyright (C) 2016
+
+CURR_DIR=$(pwd)
+TEST_OUTPUT_DIRECTORY=$(pwd)
+TEST_DIRECTORY="$CURR_DIR"/../../../t
+cmd=diff-highlight
+CMD="$CURR_DIR"/../$cmd
+
+CW="\033[7m"
+CR="\033[27m"
+
+export TEST_OUTPUT_DIRECTORY TEST_DIRECTORY CW CR
+
+dh_test() {
+ dh_diff_test "$@"
+ dh_commit_test "$@"
+}
+
+dh_diff_test() {
+ local a="$1" b="$2"
+
+ printf "$a" > file
+ git add file
+
+ printf "$b" > file
+
+ git diff file > diff.raw
+
+ if test "$#" = 3
+ then
+ # remove last newline
+ head -n5 diff.raw | head -c -1 > diff.act
+ printf "$3" >> diff.act
+ else
+ cat diff.raw > diff.act
+ fi
+
+ < diff.raw $CMD > diff.exp
+
+ diff diff.exp diff.act
+}
+
+dh_commit_test() {
+ local a="$1" b="$2"
+
+ printf "$a" > file
+ git add file
+ git commit -m"Add a file" >/dev/null
+
+ printf "$b" > file
+ git commit -am"Update a file" >/dev/null
+
+ git show > commit.raw
+
+ if test "$#" = 3
+ then
+ # remove last newline
+ head -n11 commit.raw | head -c -1 > commit.act
+ printf "$3" >> commit.act
+ else
+ cat commit.raw > commit.act
+ fi
+
+ < commit.raw $CMD > commit.exp
+
+ diff commit.exp commit.act
+}
--
2.9.0
[-- Attachment #3: 0002-diff-highlight-add-failing-test-for-handling-graph-o.patch --]
[-- Type: text/x-diff, Size: 2549 bytes --]
From 78cca284fb5d0c094dc47947cb4cc54c5a8c0f78 Mon Sep 17 00:00:00 2001
From: Brian Henderson <henderson.bj@gmail.com>
Date: Tue, 26 Jul 2016 07:49:45 -0700
Subject: [PATCH 2/3] diff-highlight: add failing test for handling --graph
output.
---
contrib/diff-highlight/t/t9400-diff-highlight.sh | 13 ++++++++
contrib/diff-highlight/t/test-diff-highlight.sh | 42 ++++++++++++++++++++++++
2 files changed, 55 insertions(+)
diff --git a/contrib/diff-highlight/t/t9400-diff-highlight.sh b/contrib/diff-highlight/t/t9400-diff-highlight.sh
index ca7605f..2fb4869 100644
--- a/contrib/diff-highlight/t/t9400-diff-highlight.sh
+++ b/contrib/diff-highlight/t/t9400-diff-highlight.sh
@@ -60,4 +60,17 @@ test_expect_success 'diff-highlight does not highlight mismatched hunk size' '
# TODO add multi-byte test
+test_expect_success 'diff-highlight highlightes the beginning of a line' '
+ dh_graph_test \
+ "aaa\nbbb\nccc\n" \
+ "aaa\n0bb\nccc\n" \
+ "aaa\nb0b\nccc\n" \
+"
+ aaa
+-${CW}b${CR}bb
++${CW}0${CR}bb
+ ccc
+"
+'
+
test_done
diff --git a/contrib/diff-highlight/t/test-diff-highlight.sh b/contrib/diff-highlight/t/test-diff-highlight.sh
index 9b26271..162a694 100644
--- a/contrib/diff-highlight/t/test-diff-highlight.sh
+++ b/contrib/diff-highlight/t/test-diff-highlight.sh
@@ -67,3 +67,45 @@ dh_commit_test() {
diff commit.exp commit.act
}
+
+dh_graph_test() {
+ local a="$1" b="$2" c="$3"
+
+ {
+ printf "$a" > file
+ git add file
+ git commit -m"Add a file"
+
+ printf "$b" > file
+ git commit -am"Update a file"
+
+ git checkout -b branch
+ printf "$c" > file
+ git commit -am"Update a file on branch"
+
+ git checkout master
+ printf "$a" > file
+ git commit -am"Update a file again"
+
+ git checkout branch
+ printf "$b" > file
+ git commit -am"Update a file similar to master"
+
+ git merge master
+ git checkout master
+ git merge branch --no-ff
+ } >/dev/null 2>&1
+
+ git log -p --graph --no-merges > graph.raw
+
+ # git log --graph orders the commits different than git log so we hack it by
+ # using sed to remove the graph part. We know from other tests, that CMD
+ # works without the graph, so there should be no diff when running it with
+ # and without.
+ < graph.raw sed -e 's"^\(*\|| \||/\)\+""' -e 's"^ ""' | $CMD > graph.exp
+ < graph.raw $CMD | sed -e 's"^\(*\|| \||/\)\+""' -e 's"^ ""' > graph.act
+
+ # ignore whitespace since we're using a hacky sed command to remove the graph
+ # parts.
+ diff -b graph.exp graph.act
+}
--
2.9.0
[-- Attachment #4: 0003-diff-highlight-add-support-for-graph-output.patch --]
[-- Type: text/x-diff, Size: 1697 bytes --]
From 615451541643a07486e209f9f17edae9436b882c Mon Sep 17 00:00:00 2001
From: Brian Henderson <henderson.bj@gmail.com>
Date: Tue, 26 Jul 2016 07:51:07 -0700
Subject: [PATCH 3/3] diff-highlight: add support for --graph output.
---
contrib/diff-highlight/diff-highlight | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/contrib/diff-highlight/diff-highlight b/contrib/diff-highlight/diff-highlight
index ffefc31..ec31356 100755
--- a/contrib/diff-highlight/diff-highlight
+++ b/contrib/diff-highlight/diff-highlight
@@ -20,6 +20,7 @@ my @NEW_HIGHLIGHT = (
my $RESET = "\x1b[m";
my $COLOR = qr/\x1b\[[0-9;]*m/;
my $BORING = qr/$COLOR|\s/;
+my $GRAPH = qr/$COLOR?\|$COLOR?\s+/;
my @removed;
my @added;
@@ -32,12 +33,12 @@ $SIG{PIPE} = 'DEFAULT';
while (<>) {
if (!$in_hunk) {
print;
- $in_hunk = /^$COLOR*\@/;
+ $in_hunk = /^$GRAPH*$COLOR*\@/;
}
- elsif (/^$COLOR*-/) {
+ elsif (/^$GRAPH*$COLOR*-/) {
push @removed, $_;
}
- elsif (/^$COLOR*\+/) {
+ elsif (/^$GRAPH*$COLOR*\+/) {
push @added, $_;
}
else {
@@ -46,7 +47,7 @@ while (<>) {
@added = ();
print;
- $in_hunk = /^$COLOR*[\@ ]/;
+ $in_hunk = /^$GRAPH*$COLOR*[\@ ]/;
}
# Most of the time there is enough output to keep things streaming,
@@ -211,8 +212,8 @@ sub is_pair_interesting {
my $suffix_a = join('', @$a[($sa+1)..$#$a]);
my $suffix_b = join('', @$b[($sb+1)..$#$b]);
- return $prefix_a !~ /^$COLOR*-$BORING*$/ ||
- $prefix_b !~ /^$COLOR*\+$BORING*$/ ||
+ return $prefix_a !~ /^$GRAPH*$COLOR*-$BORING*$/ ||
+ $prefix_b !~ /^$GRAPH*$COLOR*\+$BORING*$/ ||
$suffix_a !~ /^$BORING*$/ ||
$suffix_b !~ /^$BORING*$/;
}
--
2.9.0
next reply other threads:[~2016-07-28 16:27 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-28 16:27 Brian Henderson [this message]
2016-07-29 7:46 ` [PATCH 0/3] diff-highlight: add support for git log --graph output Jakub Narębski
-- strict thread matches above, loose matches on Subject: below --
2016-07-29 14:51 Brian Henderson
2016-07-29 16:40 ` Jeff King
2016-07-30 15:11 Brian Henderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160728162712.GA29220@tci.corp.yp.com \
--to=henderson.bj@gmail.com \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).