Re: [PATCH 09/10] t4213: test --function-name option
- From
Johannes Sixt <j.sixt@viscovery.net>
- Date
- Mar 28, 2014, 07:25 UTC
- Message-ID
- <533523F9.2000108@viscovery.net>
- In-Reply-To
- <4eb91822043e730bf8a47f12a9129d02f6fc135d.1395942768.git.davidad@alum.mit.edu>
Am 3/27/2014 19:50, schrieb David A. Dalrymple (and Bhushan G. Lodha):
> From: "Bhushan G. Lodha & David A. Dalrymple" <dad-bgl@mit.edu> > > This test builds a sample C file, adding and removing functions, and > checks that the right commits are filtered by --function-name matching.
This is probably the most important patch in your series as it documents the expected behavior. Unfortunately, I find its clarity very lacking. :(
This new feature uses the userdiff driver, IIUC. Does it do so in all respects? In particular, does it also evaluate the negative patterns? For example, when there is a label in the code, is it not mistaken as the beginning of a function? A test for this case would be very instructive.
Furthermore, consider a patch for a change at the very beginning of a function. Then the function name would appear in the pre-context of the hunk, but the hunk header would show the function before the one with the change. Would such a change confuse your implementation? I guess not. Again, a test case would remove any doubts.
Is it possible to search for a change that is before any functions? It would be useful to enumerate commits that change #include lines.
Show 29 quoted lines
>
> Signed-off-by: David Dalrymple (on zayin) <davidad@alum.mit.edu>
> ---
> t/t4213-log-function-name.sh | 73 ++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 73 insertions(+)
> create mode 100755 t/t4213-log-function-name.sh
>
> diff --git a/t/t4213-log-function-name.sh b/t/t4213-log-function-name.sh
> new file mode 100755
> index 0000000..1243ce5
> --- /dev/null
> +++ b/t/t4213-log-function-name.sh
> @@ -0,0 +1,73 @@
> +#!/bin/sh
> +
> +test_description='log --function-name'
> +. ./test-lib.sh
> +
> +test_expect_success setup '
> + echo "* diff=cpp" > .gitattributes
> +
> + >file &&
> + git add file &&
> + test_tick &&
> + git commit -m initial &&
> +
> + printf "int main(){\n\treturn 0;\n}\n" >> file &&
> + test_tick &&
> + git commit -am secondBroken && chain here and later as well. Please be careful.
> +
> + printf "void newfunc(){\n\treturn;\n}\n" >> file &&
> + test_tick &&
> + git commit -am thirdgit commit -am "append a function" &&
Show 5 quoted lines
> +
> + printf "void newfunc2(){\n\treturn;\n}\n" | cat - file > temp &&
> + mv temp file &&
> + test_tick &&
> + git commit -am fourthgit commit -am "prepend a function" &&
etc. You get the picture.
Show 12 quoted lines
> +
> + printf "void newfunc3(){\n\treturn;\n}\n" | cat - file > temp &&
> + mv temp file &&
> + test_tick &&
> + git commit -am fifth
> +
> + sed -i -e "s/void newfunc2/void newfunc4/" file &&
> + test_tick &&
> + git commit -am sixth
> +'
> +
> +test_expect_success 'log --function-name=main' 'test_expect_success 'log --function-name finds a function with a change' '
Show 6 quoted lines
> + git log --function-name=main >actual && > + git log --grep=second >expect && > + test_cmp expect actual > +' > + > +test_expect_success 'log --function-name "newfunc\W"' '
test_expect_success 'log --function-name with extended regexp' '
etc. You get the picture.
Show 31 quoted lines
> + git log --function-name "newfunc\W" >actual && > + git log --grep=third >expect && > + test_cmp expect actual > +' > + > +test_expect_success 'log --function-name "newfunc2"' ' > + git log --function-name newfunc2 >actual && > + git log -E --grep "sixth|fourth" >expect && > + test_cmp expect actual > +' > + > +test_expect_success 'log --function-name "newfunc3"' ' > + git log --function-name newfunc3 >actual && > + git log --grep=fifth >expect && > + test_cmp expect actual > +' > + > +test_expect_success 'log --function-name "newfunc4"' ' > + git log --function-name newfunc4 >actual && > + git log --grep=sixth >expect && > + test_cmp expect actual > +' > + > +test_expect_success 'log --function-name "newfunc"' ' > + git log --function-name newfunc >actual && > + git log -E --grep "third|fourth|fifth|sixth" >expect && > + test_cmp expect actual > +' > + > +test_done >