On 9/19/2019 5:47 PM, SZEDER Gábor wrote:
> In 'builtin/name-rev.c' in the name_rev() function there is a loop
> iterating over all parents of the given commit, and the loop body
> looks like this:
> 
>   if (parent_number > 1) {
>     if (generation > 0)
>       // do stuff #1
>     else
>       // do stuff #2
>   } else {
>      // do stuff #3
>   }
> 
> These conditions are not covered properly in the test suite.  As far
> as purely test coverage goes, they are all executed several times over
> in 't6120-describe.sh'.  However, they don't directly influence the
> command's output, because the repository used in that test script
> contains several branches and tags pointing somewhere into the middle
> of the commit DAG, and thus result in a better name for the
> to-be-named commit.  In an early version of this patch series I
> managed to mess up those conditions (every single one of them at
> once!), but the whole test suite still passed successfully.
> 
> So add a new test case that operates on the following history:
> 
>     -----------master
>    /          /
>   A----------M2
>    \        /
>     \---M1-C
>      \ /
>       B
> 
> and names the commit 'B', where:
> 
>   - The merge commit at master makes sure that the 'do stuff #3'
>     affects the final name.
> 
>   - The merge commit M2 make sure that the 'do stuff #1' part
>     affects the final name.
> 
>   - And M1 makes sure that the 'do stuff #2' part affects the final
>     name.
> 
> Signed-off-by: SZEDER Gábor <szeder....@gmail.com>
> ---
>  t/t6120-describe.sh | 43 +++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 43 insertions(+)
> 
> diff --git a/t/t6120-describe.sh b/t/t6120-describe.sh
> index 07e6793e84..2a0f2204c4 100755
> --- a/t/t6120-describe.sh
> +++ b/t/t6120-describe.sh
> @@ -421,4 +421,47 @@ test_expect_success 'describe complains about missing 
> object' '
>       test_must_fail git describe $ZERO_OID
>  '
>  
> +#   -----------master
> +#  /          /
> +# A----------M2
> +#  \        /
> +#   \---M1-C
> +#    \ /
> +#     B
> +test_expect_success 'test' '
> +     git init repo &&
> +     (
> +             cd repo &&
> +
> +             echo A >file &&
> +             git add file &&
> +             git commit -m A &&
> +             A=$(git rev-parse HEAD) &&

Is it not enough to do something like test_commit here?

> +
> +             git checkout --detach &&
> +             echo B >file &&
> +             git commit -m B file &&
> +             B=$(git rev-parse HEAD) &&
> +
> +             git checkout $A &&
> +             git merge --no-ff $B &&  # M1
> +
> +             echo C >file &&
> +             git commit -m C file &&
> +
> +             git checkout $A &&
> +             git merge --no-ff HEAD@{1} && # M2
> +
> +             git checkout master &&
> +             git merge --no-ff HEAD@{1} &&
> +
> +             git log --graph --oneline &&
> +
> +             echo "$B master^2^2~1^2" >expect &&
> +             git name-rev $B >actual &&

This matches your description.

Thanks,
-Stolee
 

Reply via email to