threads / patch / 7442

patchAdd some basic tests of rev-list --pretty=format

Subject: [PATCH] Add some basic tests of rev-list --pretty=format

## tl;dr

5 messages between Mar 28, 2007 and Mar 28, 2007. Diffs are folded; open one to read it.

replies: 4people: 3as markdown or json

Jeff King· Mar 28, 2007, 00:08 UTC · lore

These could stand to be a little more complex, but it should at least catch obvious problems (like the recently fixed %ct bug).

Signed-off-by: Jeff King <peff@peff.net>
---
Junio: warning, there is (intentional) trailing whitespace in one of the
test results.
 t/t6006-rev-list-format.sh |  108 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 108 insertions(+), 0 deletions(-)
 create mode 100644 t/t6006-rev-list-format.sh
Show changes to t/t6006-rev-list-format.sh +108 −0
diff --git a/t/t6006-rev-list-format.sh b/t/t6006-rev-list-format.sh
new file mode 100644
index 0000000..cf096c3
--- /dev/null
+++ b/t/t6006-rev-list-format.sh
@@ -0,0 +1,108 @@
+#!/bin/sh
+
+test_description='git-rev-list --pretty=format test'
+
+. ./test-lib.sh
+
+test_tick
+test_expect_success 'setup' '
+touch foo && git-add foo && git-commit -m "added foo" &&
+  echo changed >foo && git-commit -a -m "changed foo"
+'
+
+# usage: test_format name format_string <expected_output
+test_format() {
+	cat >expect.$1
+	test_expect_success "format $1" "
+git-rev-list --pretty=format:$2 master >output.$1 &&
+git-diff expect.$1 output.$1
+"
+}
+
+test_format hash %H%n%h <<'EOF'
+commit 131a310eb913d107dd3c09a65d1651175898735d
+131a310eb913d107dd3c09a65d1651175898735d
+131a310
+commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
+86c75cfd708a0e5868dc876ed5b8bb66c80b4873
+86c75cf
+EOF
+
+test_format tree %T%n%t <<'EOF'
+commit 131a310eb913d107dd3c09a65d1651175898735d
+fe722612f26da5064c32ca3843aa154bdb0b08a0
+fe72261
+commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
+4d5fcadc293a348e88f777dc0920f11e7d71441c
+4d5fcad
+EOF
+
+test_format parents %P%n%p <<'EOF'
+commit 131a310eb913d107dd3c09a65d1651175898735d
+86c75cfd708a0e5868dc876ed5b8bb66c80b4873 
+86c75cf 
+commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
+86c75cf 
+86c75cf 
+EOF
+
+# we don't test relative here
+test_format author %an%n%ae%n%ad%n%aD%n%at <<'EOF'
+commit 131a310eb913d107dd3c09a65d1651175898735d
+A U Thor
+author@example.com
+Thu Apr 7 15:13:13 2005 -0700
+Thu, 7 Apr 2005 15:13:13 -0700
+1112911993
+commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
+A U Thor
+author@example.com
+Thu Apr 7 15:13:13 2005 -0700
+Thu, 7 Apr 2005 15:13:13 -0700
+1112911993
+EOF
+
+test_format committer %cn%n%ce%n%cd%n%cD%n%ct <<'EOF'
+commit 131a310eb913d107dd3c09a65d1651175898735d
+C O Mitter
+committer@example.com
+Thu Apr 7 15:13:13 2005 -0700
+Thu, 7 Apr 2005 15:13:13 -0700
+1112911993
+commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
+C O Mitter
+committer@example.com
+Thu Apr 7 15:13:13 2005 -0700
+Thu, 7 Apr 2005 15:13:13 -0700
+1112911993
+EOF
+
+test_format encoding %e <<'EOF'
+commit 131a310eb913d107dd3c09a65d1651175898735d
+<unknown>
+commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
+<unknown>
+EOF
+
+test_format subject %s <<'EOF'
+commit 131a310eb913d107dd3c09a65d1651175898735d
+changed foo
+commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
+added foo
+EOF
+
+test_format body %b <<'EOF'
+commit 131a310eb913d107dd3c09a65d1651175898735d
+<unknown>
+commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
+<unknown>
+EOF
+
+test_format colors %Credfoo%Cgreenbar%Cbluebaz%Cresetxyzzy <<'EOF'
+commit 131a310eb913d107dd3c09a65d1651175898735d
+foobarbazxyzzy
+commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
+foobarbazxyzzy
+EOF
+
+test_done
-- 
1.5.1.rc2.619.g9dd2d
Alex Riesen· Mar 28, 2007, 19:21 UTC · re: Jeff King · lore

Re: [PATCH] Add some basic tests of rev-list --pretty=format

Jeff King, Wed, Mar 28, 2007 02:08:28 +0200:
Show 8 quoted lines
> +test_format parents %P%n%p <<'EOF'
> +commit 131a310eb913d107dd3c09a65d1651175898735d
> +86c75cfd708a0e5868dc876ed5b8bb66c80b4873 
> +86c75cf 
> +commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
> +86c75cf 
> +86c75cf 
> +EOF
Isn't this a bit wrong for initial commit?
Junio C Hamano· Mar 28, 2007, 20:37 UTC · re: Alex Riesen · lore

[PATCH] Fix "--pretty=format:" for parent related items.

There are two breakages in the %P/%p interpolation. It appended an excess SP at the end of the list, and it gave uninitialized contents of a buffer on the stack for root commits.

This fixes it, while updating the t6006 test which expected the wrong output.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---
 commit.c                   |   12 ++++++++----
 t/t6006-rev-list-format.sh |    8 ++++----
 2 files changed, 12 insertions(+), 8 deletions(-)
 mode change 100644 => 100755 t/t6006-rev-list-format.sh
Show changes to 2 files +12 −8

commit.c, t/t6006-rev-list-format.sh

diff --git a/commit.c b/commit.c
index a92958c..33b63c4 100644
--- a/commit.c
+++ b/commit.c
@@ -849,19 +849,23 @@ static long format_commit_message(const struct commit *commit,
 	interp_set_entry(table, ITREE_ABBREV,
 			find_unique_abbrev(commit->tree->object.sha1,
 				DEFAULT_ABBREV));
+
+	parents[1] = 0;
 	for (i = 0, p = commit->parents;
 			p && i < sizeof(parents) - 1;
 			p = p->next)
-		i += snprintf(parents + i, sizeof(parents) - i - 1, "%s ",
+		i += snprintf(parents + i, sizeof(parents) - i - 1, " %s",
 			sha1_to_hex(p->item->object.sha1));
-	interp_set_entry(table, IPARENTS, parents);
+	interp_set_entry(table, IPARENTS, parents + 1);
+
+	parents[1] = 0;
 	for (i = 0, p = commit->parents;
 			p && i < sizeof(parents) - 1;
 			p = p->next)
-		i += snprintf(parents + i, sizeof(parents) - i - 1, "%s ",
+		i += snprintf(parents + i, sizeof(parents) - i - 1, " %s",
 			find_unique_abbrev(p->item->object.sha1,
 				DEFAULT_ABBREV));
-	interp_set_entry(table, IPARENTS_ABBREV, parents);
+	interp_set_entry(table, IPARENTS_ABBREV, parents + 1);
 
 	for (i = 0, state = HEADER; msg[i] && state < BODY; i++) {
 		int eol;
diff --git a/t/t6006-rev-list-format.sh b/t/t6006-rev-list-format.sh
old mode 100644
new mode 100755
index cf096c3..ce9c7dc
--- a/t/t6006-rev-list-format.sh
+++ b/t/t6006-rev-list-format.sh
@@ -39,11 +39,11 @@ EOF
 
 test_format parents %P%n%p <<'EOF'
 commit 131a310eb913d107dd3c09a65d1651175898735d
-86c75cfd708a0e5868dc876ed5b8bb66c80b4873 
-86c75cf 
+86c75cfd708a0e5868dc876ed5b8bb66c80b4873
+86c75cf
 commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
-86c75cf 
-86c75cf 
+
+
 EOF
 
 # we don't test relative here
-- 
1.5.1.rc2.632.g054ea8
Alex Riesen· Mar 28, 2007, 20:11 UTC · re: Jeff King · lore

[PATCH] Improve output of %p and %P format in git-rev-list --pretty=format:

Remove the terminating space from the space-separated list of parents. Also fix the test t6006: it wrongly assumed that the initial commit has a parent and was not executable.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
---

The test even hardcoded parents of the initial commit to the initial commit itself, which does not make any sense at all.

 commit.c                   |    5 +++--
 t/t6006-rev-list-format.sh |    8 ++++----
 2 files changed, 7 insertions(+), 6 deletions(-)
Show changes to 2 files +7 −6

commit.c, t/t6006-rev-list-format.sh

diff --git a/commit.c b/commit.c
index a92958c..94b3713 100644
--- a/commit.c
+++ b/commit.c
@@ -852,13 +852,14 @@ static long format_commit_message(const struct commit *commit,
 	for (i = 0, p = commit->parents;
 			p && i < sizeof(parents) - 1;
 			p = p->next)
-		i += snprintf(parents + i, sizeof(parents) - i - 1, "%s ",
+		i += snprintf(parents + i, sizeof(parents) - i - 1, " %s" + !i,
 			sha1_to_hex(p->item->object.sha1));
 	interp_set_entry(table, IPARENTS, parents);
+	*parents = '\0';
 	for (i = 0, p = commit->parents;
 			p && i < sizeof(parents) - 1;
 			p = p->next)
-		i += snprintf(parents + i, sizeof(parents) - i - 1, "%s ",
+		i += snprintf(parents + i, sizeof(parents) - i - 1, " %s" + !i,
 			find_unique_abbrev(p->item->object.sha1,
 				DEFAULT_ABBREV));
 	interp_set_entry(table, IPARENTS_ABBREV, parents);
diff --git a/t/t6006-rev-list-format.sh b/t/t6006-rev-list-format.sh
index cf096c3..ce9c7dc 100644
--- a/t/t6006-rev-list-format.sh
+++ b/t/t6006-rev-list-format.sh
@@ -39,11 +39,11 @@ EOF
 
 test_format parents %P%n%p <<'EOF'
 commit 131a310eb913d107dd3c09a65d1651175898735d
-86c75cfd708a0e5868dc876ed5b8bb66c80b4873 
-86c75cf 
+86c75cfd708a0e5868dc876ed5b8bb66c80b4873
+86c75cf
 commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
-86c75cf 
-86c75cf 
+
+
 EOF
 
 # we don't test relative here
-- 
1.5.1.rc2.18.g157b4
Jeff King· Mar 28, 2007, 20:24 UTC · re: Alex Riesen · lore

Re: [PATCH] Improve output of %p and %P format in git-rev-list --pretty=format:

On Wed, Mar 28, 2007 at 10:11:23PM +0200, Alex Riesen wrote:
> Remove the terminating space from the space-separated list of parents.
> Also fix the test t6006: it wrongly assumed that the initial commit
> has a parent and was not executable.

Argh, yes. As is probably obvious, I moved the actual output to be 'expected' after giving it a cursory check, but I was more focused on the author/committer information, since that's where I was fixing bugs. Good catch.

This is obviously fairly untested code. I will follow up with a few more tests for encoding/body to help make it more complete.

-Peff

← back to recent threads