merge-base: add tests for --is-ancestor - #2186
Conversation
Welcome to GitGitGadgetHi @nikolauspschuetz, and welcome to GitGitGadget, the GitHub App to send patch series to the Git mailing list from GitHub Pull Requests. Please make sure that either:
You can CC potential reviewers by adding a footer to the PR description with the following syntax: NOTE: DO NOT copy/paste your CC list from a previous GGG PR's description, Also, it is a good idea to review the commit messages one last time, as the Git project expects them in a quite specific form:
It is in general a good idea to await the automated test ("Checks") in this Pull Request before contributing the patches, e.g. to avoid trivial issues such as unportable code. Contributing the patchesBefore you can contribute the patches, your GitHub username needs to be added to the list of permitted users. Any already-permitted user can do that, by adding a comment to your PR of the form Both the person who commented An alternative is the channel Once on the list of permitted usernames, you can contribute the patches to the Git mailing list by adding a PR comment If you want to see what email(s) would be sent for a After you submit, GitGitGadget will respond with another comment that contains the link to the cover letter mail in the Git mailing list archive. Please make sure to monitor the discussion in that thread and to address comments and suggestions (while the comments and suggestions will be mirrored into the PR by GitGitGadget, you will still want to reply via mail). If you do not want to subscribe to the Git mailing list just to be able to respond to a mail, you can download the mbox from the Git mailing list archive (click the curl -g --user "<EMailAddress>:<Password>" \
--url "imaps://imap.gmail.com/INBOX" -T /path/to/raw.txtTo iterate on your change, i.e. send a revised patch or patch series, you will first want to (force-)push to the same branch. You probably also want to modify your Pull Request description (or title). It is a good idea to summarize the revision by adding something like this to the cover letter (read: by editing the first comment on the PR, i.e. the PR description): To send a new iteration, just add another PR comment with the contents: Need help?New contributors who want advice are encouraged to join git-mentoring@googlegroups.com, where volunteers who regularly contribute to Git are willing to answer newbie questions, give advice, or otherwise provide mentoring to interested contributors. You must join in order to post or view messages, but anyone can join. You may also be able to find help in real time in the developer IRC channel, |
|
/preview |
|
Error: User nikolauspschuetz is not yet permitted to use GitGitGadget |
|
/allow |
|
User nikolauspschuetz is now allowed to use GitGitGadget. |
|
/preview |
|
Preview email sent as pull.2186.git.1784958204570.gitgitgadget@gmail.com |
|
/submit |
|
Submitted as pull.2186.git.1784998828879.gitgitgadget@gmail.com To fetch this version into To fetch this version to local tag |
e3a3981 to
0606bf5
Compare
|
Junio C Hamano wrote on the Git mailing list (how to reply to this email): "Nikolaus Schuetz via GitGitGadget" <gitgitgadget@gmail.com> writes:
> From: Nikolaus Schuetz <nikolauspschuetz@gmail.com>
>
> `git merge-base --is-ancestor A B` is used a lot in scripts but has no
> tests. Add some to t6010 covering its exit codes: 0 when A is an
> ancestor of B, 1 when it is not, and 128 (not 1) when given a bad
> argument. Also check that --is-ancestor and --all can't be combined,
> and that the resulting error names both options.
>
> Signed-off-by: Nikolaus Schuetz <nikolauspschuetz@gmail.com>
> ---
> merge-base: add tests for --is-ancestor
>
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-2186%2Fnikolauspschuetz%2Ft6010-test-is-ancestor-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-2186/nikolauspschuetz/t6010-test-is-ancestor-v1
> Pull-Request: https://github.com/gitgitgadget/git/pull/2186
>
> t/t6010-merge-base.sh | 34 ++++++++++++++++++++++++++++++++++
> 1 file changed, 34 insertions(+)
Thanks, will queue.
>
> diff --git a/t/t6010-merge-base.sh b/t/t6010-merge-base.sh
> index 44c726ea39..d28d9dab2c 100755
> --- a/t/t6010-merge-base.sh
> +++ b/t/t6010-merge-base.sh
> @@ -305,4 +305,38 @@ test_expect_success 'merge-base --octopus --all for complex tree' '
> test_cmp expected actual
> '
>
> +test_expect_success 'setup --is-ancestor' '
> + git init is-ancestor &&
> + (
> + cd is-ancestor &&
> + test_commit one &&
> + test_commit two &&
> + git checkout -b side one &&
> + test_commit three
> + )
> +'
> +
> +test_expect_success '--is-ancestor parent and child' '
> + git -C is-ancestor merge-base --is-ancestor one two &&
> + test_expect_code 1 git -C is-ancestor merge-base --is-ancestor two one
> +'
> +
> +test_expect_success '--is-ancestor self' '
> + git -C is-ancestor merge-base --is-ancestor two two
> +'
> +
> +test_expect_success '--is-ancestor diverged commits' '
> + test_expect_code 1 git -C is-ancestor merge-base --is-ancestor three two
> +'
> +
> +test_expect_success '--is-ancestor exit 128 non-existent commit' '
> + test_expect_code 128 git -C is-ancestor merge-base --is-ancestor one no-such-commit &&
> + test_expect_code 128 git -C is-ancestor merge-base --is-ancestor no-such-commit one
> +'
> +
> +test_expect_success '--is-ancestor and --all cannot be used together' '
> + test_expect_code 128 git -C is-ancestor merge-base --is-ancestor --all one two 2>err &&
> + test_grep "options .--is-ancestor. and .--all. cannot be used together" err
> +'
> +
> test_done
>
> base-commit: f60db8d575adb79761d363e026fb49bddf330c73 |
|
Phillip Wood wrote on the Git mailing list (how to reply to this email): Hi Nikolaus
On 25/07/2026 18:00, Nikolaus Schuetz via GitGitGadget wrote:
> From: Nikolaus Schuetz <nikolauspschuetz@gmail.com>
> > `git merge-base --is-ancestor A B` is used a lot in scripts but has no
> tests. Add some to t6010 covering its exit codes: 0 when A is an
> ancestor of B, 1 when it is not, and 128 (not 1) when given a bad
> argument. Also check that --is-ancestor and --all can't be combined,
> and that the resulting error names both options.
Thanks for adding some tests for this option
> diff --git a/t/t6010-merge-base.sh b/t/t6010-merge-base.sh
> index 44c726ea39..d28d9dab2c 100755
> --- a/t/t6010-merge-base.sh
> +++ b/t/t6010-merge-base.sh
> @@ -305,4 +305,38 @@ test_expect_success 'merge-base --octopus --all for complex tree' '
> test_cmp expected actual
> '
> > +test_expect_success 'setup --is-ancestor' '
> + git init is-ancestor &&
> + (
> + cd is-ancestor &&
> + test_commit one &&
> + test_commit two &&
> + git checkout -b side one &&
> + test_commit three
> + )
> +'
Do we really need to create a new repository? None of the existing tests do that - can't we just use the commits created by the first test? Having said that, the tests below look good. We could perhaps have a test to check that it fails with one commit or three commits but what you have here is clearly a very useful improvement in our test coverage.
Thanks
Phillip
> +test_expect_success '--is-ancestor parent and child' '
> + git -C is-ancestor merge-base --is-ancestor one two &&
> + test_expect_code 1 git -C is-ancestor merge-base --is-ancestor two one
> +'
> +
> +test_expect_success '--is-ancestor self' '
> + git -C is-ancestor merge-base --is-ancestor two two
> +'
> +
> +test_expect_success '--is-ancestor diverged commits' '
> + test_expect_code 1 git -C is-ancestor merge-base --is-ancestor three two
> +'
> +
> +test_expect_success '--is-ancestor exit 128 non-existent commit' '
> + test_expect_code 128 git -C is-ancestor merge-base --is-ancestor one no-such-commit &&
> + test_expect_code 128 git -C is-ancestor merge-base --is-ancestor no-such-commit one
> +'
> +
> +test_expect_success '--is-ancestor and --all cannot be used together' '
> + test_expect_code 128 git -C is-ancestor merge-base --is-ancestor --all one two 2>err &&
> + test_grep "options .--is-ancestor. and .--all. cannot be used together" err
> +'
> +
> test_done
> > base-commit: f60db8d575adb79761d363e026fb49bddf330c73 |
|
User |
|
Junio C Hamano wrote on the Git mailing list (how to reply to this email): Phillip Wood <phillip.wood123@gmail.com> writes:
> Thanks for adding some tests for this option
>
>> diff --git a/t/t6010-merge-base.sh b/t/t6010-merge-base.sh
>> index 44c726ea39..d28d9dab2c 100755
>> --- a/t/t6010-merge-base.sh
>> +++ b/t/t6010-merge-base.sh
>> @@ -305,4 +305,38 @@ test_expect_success 'merge-base --octopus --all for complex tree' '
>> test_cmp expected actual
>> '
>>
>> +test_expect_success 'setup --is-ancestor' '
>> + git init is-ancestor &&
>> + (
>> + cd is-ancestor &&
>> + test_commit one &&
>> + test_commit two &&
>> + git checkout -b side one &&
>> + test_commit three
>> + )
>> +'
>
> Do we really need to create a new repository? None of the existing tests
> do that - can't we just use the commits created by the first test?
Good point. It is often a lot more work to do so when writing these
new tests, and I suspect that is the reason why this new repository
was created, but I do not know whether, in the long run, it is
cheaper and more maintainable to reuse the test history that has been
used by all existing tests above. The next developer who needs to
tweak the first test has 5 (the number of tests below) extra
constraints if we go that route, but a separate setup means the two
sets of tests are more isolated.
> Having said that, the tests below look good. We could perhaps have a
> test to check that it fails with one commit or three commits but what
> you have here is clearly a very useful improvement in our test coverage.
Thanks. |
|
This patch series was integrated into seen via git@5d1d3ed. |
36f711f to
94c8924
Compare
`git merge-base --is-ancestor A B` is used a lot in scripts but has no tests. Add some to t6010 covering its exit codes: 0 when A is an ancestor of B, 1 when it is not, and 128 (not 1) when given a bad argument. Also check that --is-ancestor and --all can't be combined, and that the resulting error names both options. Signed-off-by: Nikolaus Schuetz <nikolauspschuetz@gmail.com>
94c8924 to
319bf89
Compare
|
/submit |
|
Submitted as pull.2186.v2.git.1785392350660.gitgitgadget@gmail.com To fetch this version into To fetch this version to local tag |
|
Junio C Hamano wrote on the Git mailing list (how to reply to this email): "Nikolaus Schuetz via GitGitGadget" <gitgitgadget@gmail.com> writes:
> Changes since v1, per review:
>
> * Reuse the E---D---C---B---A history and the G/H merges from the "set
> up G and H" test instead of creating a separate repository.
Looks good.
> * Add a test that --is-ancestor requires exactly two commits: too few
> is a usage error (exit 129), while more than two is rejected with
> "--is-ancestor takes exactly two commits" (exit 128).
OK.
Will queue. Thanks. |
|
This branch is now known as |
Changes since v1, per review:
"set up G and H" test instead of creating a separate repository.
is a usage error (exit 129), while more than two is rejected with
"--is-ancestor takes exactly two commits" (exit 128).
cc: Phillip Wood phillip.wood123@gmail.com