git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] git-blame: Use the same tests for git-blame as for git-annotate
@ 2006-03-05 11:13 Fredrik Kuivinen
  2006-03-05 23:32 ` Ryan Anderson
  2006-03-06  2:56 ` [PATCH] git-blame: Use the same tests for git-blame as for git-annotate Ryan Anderson
  0 siblings, 2 replies; 19+ messages in thread
From: Fredrik Kuivinen @ 2006-03-05 11:13 UTC (permalink / raw)
  To: git; +Cc: junkio


Signed-off-by: Fredrik Kuivinen <freku045@student.liu.se>


---

 t/annotate-tests.sh |   86 +++++++++++++++++++++++++++++++++++++++++++++++++++
 t/t8001-annotate.sh |   85 +-------------------------------------------------
 t/t8002-blame.sh    |    9 +++++
 3 files changed, 97 insertions(+), 83 deletions(-)
 create mode 100644 t/annotate-tests.sh
 create mode 100755 t/t8002-blame.sh

06b0e500a5202899dcfd037cf78ee4a982da46b4
diff --git a/t/annotate-tests.sh b/t/annotate-tests.sh
new file mode 100644
index 0000000..54a4dfb
--- /dev/null
+++ b/t/annotate-tests.sh
@@ -0,0 +1,86 @@
+# This file isn't used as a test script directly, instead it is
+# sourced from t8001-annotate.sh and t8001-blame.sh.
+
+test_expect_success \
+    'prepare reference tree' \
+    'echo "1A quick brown fox jumps over the" >file &&
+     echo "lazy dog" >>file &&
+     git add file
+     GIT_AUTHOR_NAME="A" git commit -a -m "Initial."'
+
+test_expect_success \
+    'check all lines blamed on A' \
+    '[ $(git annotate file | awk "{print \$3}" | grep -c "A") == 2 ]'
+
+test_expect_success \
+    'Setup new lines blamed on B' \
+    'echo "2A quick brown fox jumps over the" >>file &&
+     echo "lazy dog" >> file &&
+     GIT_AUTHOR_NAME="B" git commit -a -m "Second."'
+
+test_expect_success \
+    'Two lines blamed on A' \
+    '[ $($PROG file | awk "{print \$3}" | grep -c "A") == 2 ]'
+
+test_expect_success \
+    'Two lines blamed on B' \
+    '[ $($PROG file | awk "{print \$3}" | grep -c "B") == 2 ]'
+
+test_expect_success \
+    'merge-setup part 1' \
+    'git checkout -b branch1 master &&
+     echo "3A slow green fox jumps into the" >> file &&
+     echo "well." >> file &&
+     GIT_AUTHOR_NAME="B1" git commit -a -m "Branch1-1"'
+
+test_expect_success \
+    'Two lines blamed on A' \
+    '[ $($PROG file | awk "{print \$3}" | grep -c "^A$") == 2 ]'
+
+test_expect_success \
+    'Two lines blamed on B' \
+    '[ $($PROG file | awk "{print \$3}" | grep -c "^B$") == 2 ]'
+
+test_expect_success \
+    'Two lines blamed on B1' \
+    '[ $($PROG file | awk "{print \$3}" | grep -c "^B1$") == 2 ]'
+
+test_expect_success \
+    'merge-setup part 2' \
+    'git checkout -b branch2 master &&
+     sed -e "s/2A quick brown/4A quick brown lazy dog/" < file > file.new &&
+     mv file.new file &&
+     GIT_AUTHOR_NAME="B2" git commit -a -m "Branch2-1"'
+
+test_expect_success \
+    'Two lines blamed on A' \
+    '[ $($PROG file | awk "{print \$3}" | grep -c "^A$") == 2 ]'
+
+test_expect_success \
+    'One line blamed on B' \
+    '[ $($PROG file | awk "{print \$3}" | grep -c "^B$") == 1 ]'
+
+test_expect_success \
+    'One line blamed on B2' \
+    '[ $($PROG file | awk "{print \$3}" | grep -c "^B2$") == 1 ]'
+
+
+test_expect_success \
+    'merge-setup part 3' \
+    'git pull . branch1'
+
+test_expect_success \
+    'Two lines blamed on A' \
+    '[ $($PROG file | awk "{print \$3}" | grep -c "^A$") == 2 ]'
+
+test_expect_success \
+    'One line blamed on B' \
+    '[ $($PROG file | awk "{print \$3}" | grep -c "^B$") == 1 ]'
+
+test_expect_success \
+    'Two lines blamed on B1' \
+    '[ $($PROG file | awk "{print \$3}" | grep -c "^B1$") == 2 ]'
+
+test_expect_success \
+    'One line blamed on B2' \
+    '[ $($PROG file | awk "{print \$3}" | grep -c "^B2$") == 1 ]'
diff --git a/t/t8001-annotate.sh b/t/t8001-annotate.sh
index 172908a..9e5a04b 100755
--- a/t/t8001-annotate.sh
+++ b/t/t8001-annotate.sh
@@ -3,88 +3,7 @@
 test_description='git-annotate'
 . ./test-lib.sh
 
-test_expect_success \
-    'prepare reference tree' \
-    'echo "1A quick brown fox jumps over the" >file &&
-     echo "lazy dog" >>file &&
-     git add file
-     GIT_AUTHOR_NAME="A" git commit -a -m "Initial."'
-
-test_expect_success \
-    'check all lines blamed on A' \
-    '[ $(git annotate file | awk "{print \$3}" | grep -c "A") == 2 ]'
-
-test_expect_success \
-    'Setup new lines blamed on B' \
-    'echo "2A quick brown fox jumps over the" >>file &&
-     echo "lazy dog" >> file &&
-     GIT_AUTHOR_NAME="B" git commit -a -m "Second."'
-
-test_expect_success \
-    'Two lines blamed on A' \
-    '[ $(git annotate file | awk "{print \$3}" | grep -c "A") == 2 ]'
-
-test_expect_success \
-    'Two lines blamed on B' \
-    '[ $(git annotate file | awk "{print \$3}" | grep -c "B") == 2 ]'
-
-test_expect_success \
-    'merge-setup part 1' \
-    'git checkout -b branch1 master &&
-     echo "3A slow green fox jumps into the" >> file &&
-     echo "well." >> file &&
-     GIT_AUTHOR_NAME="B1" git commit -a -m "Branch1-1"'
-
-test_expect_success \
-    'Two lines blamed on A' \
-    '[ $(git annotate file | awk "{print \$3}" | grep -c "^A$") == 2 ]'
-
-test_expect_success \
-    'Two lines blamed on B' \
-    '[ $(git annotate file | awk "{print \$3}" | grep -c "^B$") == 2 ]'
-
-test_expect_success \
-    'Two lines blamed on B1' \
-    '[ $(git annotate file | awk "{print \$3}" | grep -c "^B1$") == 2 ]'
-
-test_expect_success \
-    'merge-setup part 2' \
-    'git checkout -b branch2 master &&
-     sed -e "s/2A quick brown/4A quick brown lazy dog/" < file > file.new &&
-     mv file.new file &&
-     GIT_AUTHOR_NAME="B2" git commit -a -m "Branch2-1"'
-
-test_expect_success \
-    'Two lines blamed on A' \
-    '[ $(git annotate file | awk "{print \$3}" | grep -c "^A$") == 2 ]'
-
-test_expect_success \
-    'One line blamed on B' \
-    '[ $(git annotate file | awk "{print \$3}" | grep -c "^B$") == 1 ]'
-
-test_expect_success \
-    'One line blamed on B2' \
-    '[ $(git annotate file | awk "{print \$3}" | grep -c "^B2$") == 1 ]'
-
-
-test_expect_success \
-    'merge-setup part 3' \
-    'git pull . branch1'
-
-test_expect_success \
-    'Two lines blamed on A' \
-    '[ $(git annotate file | awk "{print \$3}" | grep -c "^A$") == 2 ]'
-
-test_expect_success \
-    'One line blamed on B' \
-    '[ $(git annotate file | awk "{print \$3}" | grep -c "^B$") == 1 ]'
-
-test_expect_success \
-    'Two lines blamed on B1' \
-    '[ $(git annotate file | awk "{print \$3}" | grep -c "^B1$") == 2 ]'
-
-test_expect_success \
-    'One line blamed on B2' \
-    '[ $(git annotate file | awk "{print \$3}" | grep -c "^B2$") == 1 ]'
+PROG='git annotate'
+source ../annotate-tests.sh
 
 test_done
diff --git a/t/t8002-blame.sh b/t/t8002-blame.sh
new file mode 100755
index 0000000..1036c54
--- /dev/null
+++ b/t/t8002-blame.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+test_description='git-blame'
+. ./test-lib.sh
+
+PROG='git blame -c'
+source ../annotate-tests.sh
+
+test_done
-- 
1.2.4.g4644-dirty

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH] git-blame: Use the same tests for git-blame as for git-annotate
  2006-03-05 11:13 [PATCH] git-blame: Use the same tests for git-blame as for git-annotate Fredrik Kuivinen
@ 2006-03-05 23:32 ` Ryan Anderson
  2006-03-06  0:19   ` Junio C Hamano
  2006-03-06  0:29   ` Martin Langhoff
  2006-03-06  2:56 ` [PATCH] git-blame: Use the same tests for git-blame as for git-annotate Ryan Anderson
  1 sibling, 2 replies; 19+ messages in thread
From: Ryan Anderson @ 2006-03-05 23:32 UTC (permalink / raw)
  To: Fredrik Kuivinen; +Cc: git, junkio

[-- Attachment #1: Type: text/plain, Size: 435 bytes --]


Along these lines, if anyone can pin down the complicated cases that
annotate and blame get differently, adding them as a test would be
*exceedingly* appreciated, even if it makes annotate (or blame) fail for
a bit, it gives us something to work against.

I've been trying to find some time this weekend to dig into why annotate
gets things wrong, but I've been distracted, unfortunately.


-- 

Ryan Anderson
  sometimes Pug Majere


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 256 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] git-blame: Use the same tests for git-blame as for git-annotate
  2006-03-05 23:32 ` Ryan Anderson
@ 2006-03-06  0:19   ` Junio C Hamano
  2006-03-06  0:29   ` Martin Langhoff
  1 sibling, 0 replies; 19+ messages in thread
From: Junio C Hamano @ 2006-03-06  0:19 UTC (permalink / raw)
  To: Ryan Anderson; +Cc: Fredrik Kuivinen, git, junkio

Ryan Anderson <ryan@michonline.com> writes:

> Along these lines, if anyone can pin down the complicated cases that
> annotate and blame get differently, adding them as a test would be
> *exceedingly* appreciated, even if it makes annotate (or blame) fail for
> a bit, it gives us something to work against.

In the t/trash repository, "git-annotate file master" and
"git-annotate file master^" behaves funkily.

OTOH "git-blame file master" assigns everything to that commit
while only the last two lines are attributable to it.  Needs a
bit more work on both sides ;-).

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] git-blame: Use the same tests for git-blame as for git-annotate
  2006-03-05 23:32 ` Ryan Anderson
  2006-03-06  0:19   ` Junio C Hamano
@ 2006-03-06  0:29   ` Martin Langhoff
  2006-03-06  2:43     ` [PATCH] annotate: Support annotation of files on other revisions Ryan Anderson
  1 sibling, 1 reply; 19+ messages in thread
From: Martin Langhoff @ 2006-03-06  0:29 UTC (permalink / raw)
  To: Ryan Anderson; +Cc: Fredrik Kuivinen, git, junkio

On 3/6/06, Ryan Anderson <ryan@michonline.com> wrote:
> Along these lines, if anyone can pin down the complicated cases that
> annotate and blame get differently, adding them as a test would be
> *exceedingly* appreciated, even if it makes annotate (or blame) fail for
> a bit, it gives us something to work against.

It would be great if they both worked properly with paths that existed
in the past. Right now, I can't git-annotate or git-blame a file I
know was there in a past revision. I think I had taught Johannes'
annotate to deal with this, or at least intended to. As things stand,
git-annotate/git-blame need a checkout, which is really silly.

Tools like gitweb and cvsserver should be able to do:

  GIT_DIR=/somebarerepo/git.git git-(annotate|blame) -h headname Makefile

and not worry about creating a temporary index *and* checking out
Makefile so that things work. That's what cvsserver does now, anyway.
Ugly :-(

cheers,



m

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH] annotate: Support annotation of files on other revisions.
  2006-03-06  0:29   ` Martin Langhoff
@ 2006-03-06  2:43     ` Ryan Anderson
  2006-03-06  4:18       ` Martin Langhoff
                         ` (2 more replies)
  0 siblings, 3 replies; 19+ messages in thread
From: Ryan Anderson @ 2006-03-06  2:43 UTC (permalink / raw)
  To: Martin Langhoff; +Cc: Fredrik Kuivinen, git, junkio


This is a bug fix, and cleans up one or two other things spotted during the
course of tracking down the main bug here.

Also, the test-suite is updated to reflect this case.

Signed-off-by: Ryan Anderson <ryan@michonline.com>

---

 git-annotate.perl   |    7 +++++--
 t/t8001-annotate.sh |    6 ++++++
 2 files changed, 11 insertions(+), 2 deletions(-)

On Mon, Mar 06, 2006 at 01:29:32PM +1300, Martin Langhoff wrote:
> On 3/6/06, Ryan Anderson <ryan@michonline.com> wrote:
> > Along these lines, if anyone can pin down the complicated cases that
> > annotate and blame get differently, adding them as a test would be
> > *exceedingly* appreciated, even if it makes annotate (or blame) fail for
> > a bit, it gives us something to work against.
> 
> It would be great if they both worked properly with paths that existed
> in the past. Right now, I can't git-annotate or git-blame a file I
> know was there in a past revision. I think I had taught Johannes'
> annotate to deal with this, or at least intended to. As things stand,
> git-annotate/git-blame need a checkout, which is really silly.

annotate was *trying* to handle that cleanly, but failed due to a silly
bug.  This is the same bug that Junio pointed out:
	cd t
	./t8001-annotate.sh
	cd trash
	../../git-annotate file master

This is fixed by the patch at the end of this email.

> Tools like gitweb and cvsserver should be able to do:
> 
>   GIT_DIR=/somebarerepo/git.git git-(annotate|blame) -h headname Makefile
> 
> and not worry about creating a temporary index *and* checking out
> Makefile so that things work. That's what cvsserver does now, anyway.
> Ugly :-(

For annotate, the syntax I was using was:
	git annotate Makefile headname

I'm not married to it, so please, send a patch to change it if you want
(Please fix up the test case I'm sending in this patch, as well.)

cdd80fd28d300dd2400bf75ff64ae2bf1a8b92aa
diff --git a/git-annotate.perl b/git-annotate.perl
index d93ee19..5953ac6 100755
--- a/git-annotate.perl
+++ b/git-annotate.perl
@@ -10,6 +10,7 @@ use warnings;
 use strict;
 use Getopt::Long;
 use POSIX qw(strftime gmtime);
+use Data::Dumper;
 
 sub usage() {
 	print STDERR 'Usage: ${\basename $0} [-s] [-S revs-file] file [ revision ]
@@ -99,7 +100,7 @@ while (my $bound = pop @stack) {
 	}
 }
 push @revqueue, $head;
-init_claim( defined $starting_rev ? $starting_rev : 'dirty');
+init_claim( defined $starting_rev ? $head : 'dirty');
 unless (defined $starting_rev) {
 	my $diff = open_pipe("git","diff","-R", "HEAD", "--",$filename)
 		or die "Failed to call git diff to check for dirty state: $!";
@@ -345,6 +346,7 @@ sub git_cat_file {
 	return () unless defined $rev && defined $filename;
 
 	my $blob = git_ls_tree($rev, $filename);
+	die "Failed to find a blob for $filename in rev $rev\n" if !defined $blob;
 
 	my $catfile = open_pipe("git","cat-file", "blob", $blob)
 		or die "Failed to git-cat-file blob $blob (rev $rev, file $filename): " . $!;
@@ -367,12 +369,13 @@ sub git_ls_tree {
 
 	my ($mode, $type, $blob, $tfilename);
 	while(<$lstree>) {
+		chomp;
 		($mode, $type, $blob, $tfilename) = split(/\s+/, $_, 4);
 		last if ($tfilename eq $filename);
 	}
 	close($lstree);
 
-	return $blob if $filename eq $filename;
+	return $blob if ($tfilename eq $filename);
 	die "git-ls-tree failed to find blob for $filename";
 
 }
diff --git a/t/t8001-annotate.sh b/t/t8001-annotate.sh
index 172908a..761d0bc 100755
--- a/t/t8001-annotate.sh
+++ b/t/t8001-annotate.sh
@@ -87,4 +87,10 @@ test_expect_success \
     'One line blamed on B2' \
     '[ $(git annotate file | awk "{print \$3}" | grep -c "^B2$") == 1 ]'
 
+test_expect_success \
+    'Annotating an old revision works' \
+    '[ $(git annotate file master | awk "{print \$3}" | grep -c "^A$") == 2 ] && \
+     [ $(git annotate file master | awk "{print \$3}" | grep -c "^B$") == 2 ]'
+
+
 test_done
-- 
1.2.4.g9201-dirty



-- 

Ryan Anderson
  sometimes Pug Majere

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH] git-blame: Use the same tests for git-blame as for git-annotate
  2006-03-05 11:13 [PATCH] git-blame: Use the same tests for git-blame as for git-annotate Fredrik Kuivinen
  2006-03-05 23:32 ` Ryan Anderson
@ 2006-03-06  2:56 ` Ryan Anderson
  2006-03-06  6:12   ` [PATCH] annotate/blame tests updates Junio C Hamano
  1 sibling, 1 reply; 19+ messages in thread
From: Ryan Anderson @ 2006-03-06  2:56 UTC (permalink / raw)
  To: Fredrik Kuivinen; +Cc: git, junkio

[-- Attachment #1: Type: text/plain, Size: 1388 bytes --]

Fredrik Kuivinen wrote:

>Signed-off-by: Fredrik Kuivinen <freku045@student.liu.se>
>
>
>---
>
> t/annotate-tests.sh |   86 +++++++++++++++++++++++++++++++++++++++++++++++++++
> t/t8001-annotate.sh |   85 +-------------------------------------------------
> t/t8002-blame.sh    |    9 +++++
> 3 files changed, 97 insertions(+), 83 deletions(-)
> create mode 100644 t/annotate-tests.sh
> create mode 100755 t/t8002-blame.sh
>
>06b0e500a5202899dcfd037cf78ee4a982da46b4
>diff --git a/t/annotate-tests.sh b/t/annotate-tests.sh
>new file mode 100644
>index 0000000..54a4dfb
>--- /dev/null
>+++ b/t/annotate-tests.sh
>@@ -0,0 +1,86 @@
>+# This file isn't used as a test script directly, instead it is
>+# sourced from t8001-annotate.sh and t8001-blame.sh.
>+
>+test_expect_success \
>+    'prepare reference tree' \
>+    'echo "1A quick brown fox jumps over the" >file &&
>+     echo "lazy dog" >>file &&
>+     git add file
>+     GIT_AUTHOR_NAME="A" git commit -a -m "Initial."'
>+
>+test_expect_success \
>+    'check all lines blamed on A' \
>+    '[ $(git annotate file | awk "{print \$3}" | grep -c "A") == 2 ]'
>  
>
This should be $PROG as well, I suspect.

Also, we need to agree on a syntax for working on non-HEAD revisions.

"git annotate $file $commitish" is what I had been using, but it's
really not something I feel strongly about.


-- 

Ryan Anderson
  sometimes Pug Majere


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 256 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] annotate: Support annotation of files on other revisions.
  2006-03-06  2:43     ` [PATCH] annotate: Support annotation of files on other revisions Ryan Anderson
@ 2006-03-06  4:18       ` Martin Langhoff
  2006-03-06  7:49         ` Fredrik Kuivinen
  2006-03-06  5:31       ` A Large Angry SCM
  2006-03-06  9:18       ` Johannes Schindelin
  2 siblings, 1 reply; 19+ messages in thread
From: Martin Langhoff @ 2006-03-06  4:18 UTC (permalink / raw)
  To: Ryan Anderson; +Cc: Fredrik Kuivinen, git, junkio

On 3/6/06, Ryan Anderson <ryan@michonline.com> wrote:
> annotate was *trying* to handle that cleanly, but failed due to a silly

Great stuff, thanks! I'll let it hit master and then I'll drop the
messy part of req_annotate() in cvsserver.

> For annotate, the syntax I was using was:
>         git annotate Makefile headname
>
> I'm not married to it, so please, send a patch to change it if you want
> (Please fix up the test case I'm sending in this patch, as well.)

That's _perfect_. I was just making the syntax up.

cheers,


martin

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] annotate: Support annotation of files on other revisions.
  2006-03-06  2:43     ` [PATCH] annotate: Support annotation of files on other revisions Ryan Anderson
  2006-03-06  4:18       ` Martin Langhoff
@ 2006-03-06  5:31       ` A Large Angry SCM
  2006-03-06  5:40         ` Ryan Anderson
  2006-03-06  9:18       ` Johannes Schindelin
  2 siblings, 1 reply; 19+ messages in thread
From: A Large Angry SCM @ 2006-03-06  5:31 UTC (permalink / raw)
  To: Ryan Anderson; +Cc: Martin Langhoff, Fredrik Kuivinen, git, junkio

Ryan Anderson wrote:
...
> 
> For annotate, the syntax I was using was:
> 	git annotate Makefile headname
> 
> I'm not married to it, so please, send a patch to change it if you want
> (Please fix up the test case I'm sending in this patch, as well.)
> 

Wouldn't
	git annotate <headname> <filename(s?)>
be more consistent with other git commands?

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] annotate: Support annotation of files on other revisions.
  2006-03-06  5:31       ` A Large Angry SCM
@ 2006-03-06  5:40         ` Ryan Anderson
  2006-03-06  5:50           ` Shawn Pearce
  0 siblings, 1 reply; 19+ messages in thread
From: Ryan Anderson @ 2006-03-06  5:40 UTC (permalink / raw)
  To: gitzilla; +Cc: Martin Langhoff, Fredrik Kuivinen, git, junkio

[-- Attachment #1: Type: text/plain, Size: 640 bytes --]

A Large Angry SCM wrote:

> Ryan Anderson wrote:
> ...
>
>>
>> For annotate, the syntax I was using was:
>>     git annotate Makefile headname
>>
>> I'm not married to it, so please, send a patch to change it if you want
>> (Please fix up the test case I'm sending in this patch, as well.)
>>
>
> Wouldn't
>     git annotate <headname> <filename(s?)>
> be more consistent with other git commands?
>
Yes, but <headname> (really, a commitish) needs to be optional.

I should probably switch to:
    git annotate [-c|--commit <committish>] <filename>
but that's partly why I'm asking for feedback.


-- 

Ryan Anderson
  sometimes Pug Majere


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 256 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] annotate: Support annotation of files on other revisions.
  2006-03-06  5:40         ` Ryan Anderson
@ 2006-03-06  5:50           ` Shawn Pearce
  2006-03-06  6:16             ` Junio C Hamano
  2006-03-06  6:21             ` A Large Angry SCM
  0 siblings, 2 replies; 19+ messages in thread
From: Shawn Pearce @ 2006-03-06  5:50 UTC (permalink / raw)
  To: Ryan Anderson; +Cc: gitzilla, Martin Langhoff, Fredrik Kuivinen, git, junkio

Ryan Anderson <ryan@michonline.com> wrote:
> A Large Angry SCM wrote:
> 
> > Ryan Anderson wrote:
> > ...
> >
> >>
> >> For annotate, the syntax I was using was:
> >>     git annotate Makefile headname
> >>
> >> I'm not married to it, so please, send a patch to change it if you want
> >> (Please fix up the test case I'm sending in this patch, as well.)
> >>
> >
> > Wouldn't
> >     git annotate <headname> <filename(s?)>
> > be more consistent with other git commands?
> >
> Yes, but <headname> (really, a commitish) needs to be optional.
> 
> I should probably switch to:
>     git annotate [-c|--commit <committish>] <filename>
> but that's partly why I'm asking for feedback.

Yes but doesn't git-diff accept:

	git-diff Makefile
	git-diff HEAD Makefile

?  (Which is rather ugly as what if you have a tracked file actually
called HEAD and you want the first form when the commit-ish is
omitted.)  So accepting an optional commit-ish before the filename
would be in line with what git-diff accepts today.

But maybe breaking convention from git-diff now is a good thing,
with a future change to cleanup git-diff.

-- 
Shawn.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH] annotate/blame tests updates.
  2006-03-06  2:56 ` [PATCH] git-blame: Use the same tests for git-blame as for git-annotate Ryan Anderson
@ 2006-03-06  6:12   ` Junio C Hamano
  0 siblings, 0 replies; 19+ messages in thread
From: Junio C Hamano @ 2006-03-06  6:12 UTC (permalink / raw)
  To: Ryan Anderson; +Cc: Fredrik Kuivinen, git, junkio

Ryan Anderson <ryan@michonline.com> writes:

>>+test_expect_success \
>>+    'check all lines blamed on A' \
>>+    '[ $(git annotate file | awk "{print \$3}" | grep -c "A") == 2 ]'
>>  
>>
> This should be $PROG as well, I suspect.

True.  Also I am suspecting this awk being a but unsafe.  The
default author is "A U Thor <author@example.com>", and without
FS specified awk would split at whitespaces.

I haven't pushed out the test-case sharing by Fredrik yet, but I
have already taken it.  This patch is on top of it.

-- >8 --
This rewrites the result check code a bit.  The earlier one
using awk was splitting columns at any whitespace, which
confused lines attributed incorrectly to the merge made by the
default author "A U Thor <author@example.com>" with lines
attributed to author "A".

The latest test by Ryan to add the "starting from older commit"
test is also included, with another older commit test.

Signed-off-by: Junio C Hamano <junkio@cox.net>

---

 t/annotate-tests.sh |   81 ++++++++++++++++++++++++++++-----------------------
 1 files changed, 44 insertions(+), 37 deletions(-)

92a903acfd0904e6dd6d18112428429938783d19
diff --git a/t/annotate-tests.sh b/t/annotate-tests.sh
index 54a4dfb..d25a7a1 100644
--- a/t/annotate-tests.sh
+++ b/t/annotate-tests.sh
@@ -1,6 +1,37 @@
 # This file isn't used as a test script directly, instead it is
 # sourced from t8001-annotate.sh and t8001-blame.sh.
 
+check_count () {
+	head=
+	case "$1" in -h) head="$2"; shift; shift ;; esac
+	$PROG file $head | perl -e '
+		my %expect = (@ARGV);
+		my %count = ();
+		while (<STDIN>) {
+			if (/^[0-9a-f]+\t\(([^\t]+)\t/) {
+				my $author = $1;
+				for ($author) { s/^\s*//; s/\s*$//; }
+				if (exists $expect{$author}) {
+					$count{$author}++;
+				}
+			}
+		}
+		my $bad = 0;
+		while (my ($author, $count) = each %count) {
+			my $ok;
+			if ($expect{$author} != $count) {
+				$bad = 1;
+				$ok = "bad";
+			}
+			else {
+				$ok = "good";
+			}
+			print STDERR "Author $author (expected $expect{$author}, attributed $count) $ok\n";
+		}
+		exit($bad);
+	' "$@"
+}
+
 test_expect_success \
     'prepare reference tree' \
     'echo "1A quick brown fox jumps over the" >file &&
@@ -10,7 +41,7 @@ test_expect_success \
 
 test_expect_success \
     'check all lines blamed on A' \
-    '[ $(git annotate file | awk "{print \$3}" | grep -c "A") == 2 ]'
+    'check_count A 2'
 
 test_expect_success \
     'Setup new lines blamed on B' \
@@ -19,12 +50,8 @@ test_expect_success \
      GIT_AUTHOR_NAME="B" git commit -a -m "Second."'
 
 test_expect_success \
-    'Two lines blamed on A' \
-    '[ $($PROG file | awk "{print \$3}" | grep -c "A") == 2 ]'
-
-test_expect_success \
-    'Two lines blamed on B' \
-    '[ $($PROG file | awk "{print \$3}" | grep -c "B") == 2 ]'
+    'Two lines blamed on A, two on B' \
+    'check_count A 2 B 2'
 
 test_expect_success \
     'merge-setup part 1' \
@@ -34,16 +61,8 @@ test_expect_success \
      GIT_AUTHOR_NAME="B1" git commit -a -m "Branch1-1"'
 
 test_expect_success \
-    'Two lines blamed on A' \
-    '[ $($PROG file | awk "{print \$3}" | grep -c "^A$") == 2 ]'
-
-test_expect_success \
-    'Two lines blamed on B' \
-    '[ $($PROG file | awk "{print \$3}" | grep -c "^B$") == 2 ]'
-
-test_expect_success \
-    'Two lines blamed on B1' \
-    '[ $($PROG file | awk "{print \$3}" | grep -c "^B1$") == 2 ]'
+    'Two lines blamed on A, two on B, two on B1' \
+    'check_count A 2 B 2 B1 2'
 
 test_expect_success \
     'merge-setup part 2' \
@@ -53,34 +72,22 @@ test_expect_success \
      GIT_AUTHOR_NAME="B2" git commit -a -m "Branch2-1"'
 
 test_expect_success \
-    'Two lines blamed on A' \
-    '[ $($PROG file | awk "{print \$3}" | grep -c "^A$") == 2 ]'
-
-test_expect_success \
-    'One line blamed on B' \
-    '[ $($PROG file | awk "{print \$3}" | grep -c "^B$") == 1 ]'
-
-test_expect_success \
-    'One line blamed on B2' \
-    '[ $($PROG file | awk "{print \$3}" | grep -c "^B2$") == 1 ]'
-
+    'Two lines blamed on A, one on B, one on B2' \
+    'check_count A 2 B 1 B2 1'
 
 test_expect_success \
     'merge-setup part 3' \
     'git pull . branch1'
 
 test_expect_success \
-    'Two lines blamed on A' \
-    '[ $($PROG file | awk "{print \$3}" | grep -c "^A$") == 2 ]'
+    'Two lines blamed on A, one on B, two on B1, one on B2' \
+    'check_count A 2 B 1 B1 2 B2 1'
 
 test_expect_success \
-    'One line blamed on B' \
-    '[ $($PROG file | awk "{print \$3}" | grep -c "^B$") == 1 ]'
+    'Annotating an old revision works' \
+    'check_count -h master A 2 B 2'
 
 test_expect_success \
-    'Two lines blamed on B1' \
-    '[ $($PROG file | awk "{print \$3}" | grep -c "^B1$") == 2 ]'
+    'Annotating an old revision works' \
+    'check_count -h master^ A 2'
 
-test_expect_success \
-    'One line blamed on B2' \
-    '[ $($PROG file | awk "{print \$3}" | grep -c "^B2$") == 1 ]'
-- 
1.2.4.g4668

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH] annotate: Support annotation of files on other revisions.
  2006-03-06  5:50           ` Shawn Pearce
@ 2006-03-06  6:16             ` Junio C Hamano
  2006-03-06  6:32               ` Shawn Pearce
  2006-03-06  6:21             ` A Large Angry SCM
  1 sibling, 1 reply; 19+ messages in thread
From: Junio C Hamano @ 2006-03-06  6:16 UTC (permalink / raw)
  To: git

Shawn Pearce <spearce@spearce.org> writes:

> 	git-diff Makefile
> 	git-diff HEAD Makefile
>
> ?  (Which is rather ugly as what if you have a tracked file actually
> called HEAD and you want the first form when the commit-ish is
> omitted.)  So accepting an optional commit-ish before the filename
> would be in line with what git-diff accepts today.

The use of "start of filelist" marker "--" is optional when
unambiguous, and that is why "git-diff Makefile" works.  To view
the change you still haven't update-index'ed to the path called
"HEAD", you would naturally say "git-diff -- HEAD"

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] annotate: Support annotation of files on other revisions.
  2006-03-06  5:50           ` Shawn Pearce
  2006-03-06  6:16             ` Junio C Hamano
@ 2006-03-06  6:21             ` A Large Angry SCM
  2006-03-06  6:28               ` Junio C Hamano
  1 sibling, 1 reply; 19+ messages in thread
From: A Large Angry SCM @ 2006-03-06  6:21 UTC (permalink / raw)
  To: Shawn Pearce
  Cc: Ryan Anderson, Martin Langhoff, Fredrik Kuivinen, git, junkio

Shawn Pearce wrote:
> Ryan Anderson <ryan@michonline.com> wrote:
>>A Large Angry SCM wrote:
>>
>>>Ryan Anderson wrote:
>>>...
>>>
>>>>For annotate, the syntax I was using was:
>>>>    git annotate Makefile headname
>>>>
>>>>I'm not married to it, so please, send a patch to change it if you want
>>>>(Please fix up the test case I'm sending in this patch, as well.)
>>>>
>>>Wouldn't
>>>    git annotate <headname> <filename(s?)>
>>>be more consistent with other git commands?
>>>
>>Yes, but <headname> (really, a commitish) needs to be optional.
>>
>>I should probably switch to:
>>    git annotate [-c|--commit <committish>] <filename>
>>but that's partly why I'm asking for feedback.

That works.

Or maybe:
	git-annotate [<committish> --] <filename(s?)>
or:
	git-annotate [<committish>] -- <filename(s?)>

> 
> Yes but doesn't git-diff accept:
> 
> 	git-diff Makefile
> 	git-diff HEAD Makefile
> 
> ?  (Which is rather ugly as what if you have a tracked file actually
> called HEAD and you want the first form when the commit-ish is
> omitted.)  So accepting an optional commit-ish before the filename
> would be in line with what git-diff accepts today.
> 
> But maybe breaking convention from git-diff now is a good thing,
> with a future change to cleanup git-diff.
> 

Looking at the documentation, it looks like all of the commands that 
take paths do so as the last arguments. With any commit/tree arguments 
being, either, required or flagged.

Is there any reason that git-{annotate,blame} can't take more than one 
filename, ever?

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] annotate: Support annotation of files on other revisions.
  2006-03-06  6:21             ` A Large Angry SCM
@ 2006-03-06  6:28               ` Junio C Hamano
  2006-03-06  9:24                 ` Johannes Schindelin
  0 siblings, 1 reply; 19+ messages in thread
From: Junio C Hamano @ 2006-03-06  6:28 UTC (permalink / raw)
  To: gitzilla; +Cc: git

> Is there any reason that git-{annotate,blame} can't take more than one
> filename, ever?

I do not see it would be much useful -- the output does not
have a sign to show file boundary.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] annotate: Support annotation of files on other revisions.
  2006-03-06  6:16             ` Junio C Hamano
@ 2006-03-06  6:32               ` Shawn Pearce
  0 siblings, 0 replies; 19+ messages in thread
From: Shawn Pearce @ 2006-03-06  6:32 UTC (permalink / raw)
  To: git

Junio C Hamano <junkio@cox.net> wrote:
> Shawn Pearce <spearce@spearce.org> writes:
> 
> > 	git-diff Makefile
> > 	git-diff HEAD Makefile
> >
> > ?  (Which is rather ugly as what if you have a tracked file actually
> > called HEAD and you want the first form when the commit-ish is
> > omitted.)  So accepting an optional commit-ish before the filename
> > would be in line with what git-diff accepts today.
> 
> The use of "start of filelist" marker "--" is optional when
> unambiguous, and that is why "git-diff Makefile" works.  To view
> the change you still haven't update-index'ed to the path called
> "HEAD", you would naturally say "git-diff -- HEAD"

Naturally.  :-)

After getting along fine with `git-diff foo` for months I would
natually not be surprised when `git-diff foo` didn't work because
I performed a `git-checkout -b foo pu` one day.

-- 
Shawn.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] annotate: Support annotation of files on other revisions.
  2006-03-06  4:18       ` Martin Langhoff
@ 2006-03-06  7:49         ` Fredrik Kuivinen
  0 siblings, 0 replies; 19+ messages in thread
From: Fredrik Kuivinen @ 2006-03-06  7:49 UTC (permalink / raw)
  To: Martin Langhoff; +Cc: Ryan Anderson, Fredrik Kuivinen, git, junkio

On Mon, Mar 06, 2006 at 05:18:35PM +1300, Martin Langhoff wrote:
> On 3/6/06, Ryan Anderson <ryan@michonline.com> wrote:
> > annotate was *trying* to handle that cleanly, but failed due to a silly
> 
> Great stuff, thanks! I'll let it hit master and then I'll drop the
> messy part of req_annotate() in cvsserver.
> 
> > For annotate, the syntax I was using was:
> >         git annotate Makefile headname
> >
> > I'm not married to it, so please, send a patch to change it if you want
> > (Please fix up the test case I'm sending in this patch, as well.)
> 
> That's _perfect_. I was just making the syntax up.
> 

That syntax should work with git-blame too. If it doesn't, it's a bug.

- Fredrik

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] annotate: Support annotation of files on other revisions.
  2006-03-06  2:43     ` [PATCH] annotate: Support annotation of files on other revisions Ryan Anderson
  2006-03-06  4:18       ` Martin Langhoff
  2006-03-06  5:31       ` A Large Angry SCM
@ 2006-03-06  9:18       ` Johannes Schindelin
  2006-03-06 15:44         ` Ryan Anderson
  2 siblings, 1 reply; 19+ messages in thread
From: Johannes Schindelin @ 2006-03-06  9:18 UTC (permalink / raw)
  To: Ryan Anderson; +Cc: git

Hi,

On Sun, 5 Mar 2006, Ryan Anderson wrote:

> +use Data::Dumper;

You really need this?

Ciao,
Dscho

P.S.: Not to be left behind, I also weigh in into the other discussion: 
I'd like "git-{annotate,blame} [HEAD [--]] [filenames...]".

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] annotate: Support annotation of files on other revisions.
  2006-03-06  6:28               ` Junio C Hamano
@ 2006-03-06  9:24                 ` Johannes Schindelin
  0 siblings, 0 replies; 19+ messages in thread
From: Johannes Schindelin @ 2006-03-06  9:24 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: gitzilla, git

Hi,

On Sun, 5 Mar 2006, Junio C Hamano wrote:

> > Is there any reason that git-{annotate,blame} can't take more than one
> > filename, ever?
> 
> I do not see it would be much useful -- the output does not
> have a sign to show file boundary.

CVS does it. Why shouldn't git, too?

Ciao,
Dscho

P.S.: The output for more than one file is separated by something like

	Annotations for <filename.txt>
	***************

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] annotate: Support annotation of files on other revisions.
  2006-03-06  9:18       ` Johannes Schindelin
@ 2006-03-06 15:44         ` Ryan Anderson
  0 siblings, 0 replies; 19+ messages in thread
From: Ryan Anderson @ 2006-03-06 15:44 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git

[-- Attachment #1: Type: text/plain, Size: 390 bytes --]

Johannes Schindelin wrote:

>Hi,
>
>On Sun, 5 Mar 2006, Ryan Anderson wrote:
>
>  
>
>>+use Data::Dumper;
>>    
>>
>
>You really need this?
>  
>

I keep adding it back in when debugging things, and then promptly forget
to remove it when I cull the debugging back out.

It's a core module, so it shouldn't be a significant issue for any porting

-- 

Ryan Anderson
  sometimes Pug Majere


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 256 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2006-03-06 15:45 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-03-05 11:13 [PATCH] git-blame: Use the same tests for git-blame as for git-annotate Fredrik Kuivinen
2006-03-05 23:32 ` Ryan Anderson
2006-03-06  0:19   ` Junio C Hamano
2006-03-06  0:29   ` Martin Langhoff
2006-03-06  2:43     ` [PATCH] annotate: Support annotation of files on other revisions Ryan Anderson
2006-03-06  4:18       ` Martin Langhoff
2006-03-06  7:49         ` Fredrik Kuivinen
2006-03-06  5:31       ` A Large Angry SCM
2006-03-06  5:40         ` Ryan Anderson
2006-03-06  5:50           ` Shawn Pearce
2006-03-06  6:16             ` Junio C Hamano
2006-03-06  6:32               ` Shawn Pearce
2006-03-06  6:21             ` A Large Angry SCM
2006-03-06  6:28               ` Junio C Hamano
2006-03-06  9:24                 ` Johannes Schindelin
2006-03-06  9:18       ` Johannes Schindelin
2006-03-06 15:44         ` Ryan Anderson
2006-03-06  2:56 ` [PATCH] git-blame: Use the same tests for git-blame as for git-annotate Ryan Anderson
2006-03-06  6:12   ` [PATCH] annotate/blame tests updates Junio C Hamano

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 NNTP newsgroup(s).