git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 2/2] revision: allow --ancestry-path to take an argument

From
Elijah Newren <newren@gmail.com>
Date
Aug 19, 2022, 01:01 UTC
Message-ID
<CABPp-BGNG+E8ALs2rvRtzrw+m-kYYa+8yUuqphf=VJtstWr+zA@mail.gmail.com>
In-Reply-To
<ee4a7a7f-d646-6357-233a-1fefde5607bf@github.com>
On Thu, Aug 18, 2022 at 8:30 AM Derrick Stolee <derrickstolee@github.com> wrote:
Show 39 quoted lines
>
> On 8/18/2022 2:17 AM, Elijah Newren via GitGitGadget wrote:
> > From: Elijah Newren <newren@gmail.com>
>
> Code looks good!
>
> > diff --git a/t/t6019-rev-list-ancestry-path.sh b/t/t6019-rev-list-ancestry-path.sh
> > index af57a04b7ff..d3657737fa6 100755
> > --- a/t/t6019-rev-list-ancestry-path.sh
> > +++ b/t/t6019-rev-list-ancestry-path.sh
> > @@ -8,8 +8,13 @@ test_description='--ancestry-path'
> >  #   /                     \
> >  #  A-------K---------------L--M
> >  #
> > -#  D..M                 == E F G H I J K L M
> > -#  --ancestry-path D..M == E F H I J L M
> > +#  D..M                                     == E F G H I J K L M
> > +#  --ancestry-path                     D..M == E F   H I J   L M
> > +#  --ancestry-path=F                   D..M == E F       J   L M
> > +#  --ancestry-path=G                   D..M ==     G H I J   L M
> > +#  --ancestry-path=H                   D..M == E   G H I J   L M
> > +#  --ancestry-path=K                   D..M ==             K L M
> > +#  --ancestry-path=K --ancestry-path=F D..M == E F       J K L M
>
> These are good examples, because they help clarify what I had initially
> been confused about: you include things in _both_ directions. In
> particular, "--ancestry-path=K --ancestry-path=f D..M" you are kind of
> taking the union of the following queries:
>
>         --ancestry-path D..K
>         --ancestry-path K..M
>         --ancestry-path D..F
>         --ancestry-path F..M
>
> I did check just in case, but specifying multiple ranges such as
>
>         --ancestry-path D..K K..M
>
> does not do what is expected.
Right, because there's no such thing as multiple ranges.  Quoting from the docs:

""" Commands that are specifically designed to take two distinct ranges (e.g. "git range-diff R1 R2" to compare two ranges) do exist, but they are exceptions. Unless otherwise noted, all "git" commands that operate on a set of commits work on a single revision range. In other words, writing two "two-dot range notation" next to each other, e.g.

    $ git log A..B C..D

does *not* specify two revision ranges for most commands. Instead it will name a single connected set of commits, i.e. those that are reachable from either B or D but are reachable from neither A or C. """

Show 15 quoted lines
>
> > +test_expect_success 'rev-list --ancestry-path=F D..M' '
> > +     test_write_lines E F J L M >expect &&
> > +     git rev-list --ancestry-path=F --format=%s D..M |
> > +     sed -e "/^commit /d" |
> > +     sort >actual &&
> > +     test_cmp expect actual
> > +'
>
> These tests follow the patterns from other tests in this file, but
> it also has bad patterns. Specifically, the 'git rev-list' command
> is fed directly into a pipe. I include a patch below that applies
> directly on this one to rewrite these tests. If you want, you could
> rebase to have that test refactor happen before you add your new
> --ancestry-path=<X> option tests.

Ooh, I like it. I'll rebase and include this patch earlier in my series. Thanks!

Show 189 quoted lines
>
> > +test_expect_success 'rev-list --ancestry-path=G D..M' '
> > +     test_write_lines G H I J L M >expect &&
> > +     git rev-list --ancestry-path=G --format=%s D..M |
> > +     sed -e "/^commit /d" |
> > +     sort >actual &&
> > +     test_cmp expect actual
> > +'
> > +test_expect_success 'rev-list --ancestry-path=H D..M' '
>
> nit: needs extra whitespace between tests. The above test pair
> needs one, too. This becomes moot with the patch I provide.
>
> Thanks,
> -Stolee
>
> --- >8 ---
>
> From 9ac4e81dba0d7801513a09f5fe307d01357123dd Mon Sep 17 00:00:00 2001
> From: Derrick Stolee <derrickstolee@github.com>
> Date: Thu, 18 Aug 2022 11:25:04 -0400
> Subject: [PATCH] t6019: modernize tests with helper
>
> The tests in t6019 are repetive, so create a helper that greatly
> simplifies the test script.
>
> In addition, update the common pattern that places 'git rev-list' on the
> left side of a pipe, which can hide some exit codes. Send the output to
> a 'raw' file that is then consumed by other tools so the Git exit code
> is verified as zero.
>
> Signed-off-by: Derrick Stolee <derrickstolee@github.com>
> ---
>  t/t6019-rev-list-ancestry-path.sh | 131 +++++++-----------------------
>  1 file changed, 31 insertions(+), 100 deletions(-)
>
> diff --git a/t/t6019-rev-list-ancestry-path.sh b/t/t6019-rev-list-ancestry-path.sh
> index d3657737fa60..18941a80ce67 100755
> --- a/t/t6019-rev-list-ancestry-path.sh
> +++ b/t/t6019-rev-list-ancestry-path.sh
> @@ -55,111 +55,42 @@ test_expect_success setup '
>         test_commit M
>  '
>
> -test_expect_success 'rev-list D..M' '
> -       test_write_lines E F G H I J K L M >expect &&
> -       git rev-list --format=%s D..M |
> -       sed -e "/^commit /d" |
> -       sort >actual &&
> -       test_cmp expect actual
> -'
> -
> -test_expect_success 'rev-list --ancestry-path D..M' '
> -       test_write_lines E F H I J L M >expect &&
> -       git rev-list --ancestry-path --format=%s D..M |
> -       sed -e "/^commit /d" |
> -       sort >actual &&
> -       test_cmp expect actual
> -'
> -
> -test_expect_success 'rev-list --ancestry-path=F D..M' '
> -       test_write_lines E F J L M >expect &&
> -       git rev-list --ancestry-path=F --format=%s D..M |
> -       sed -e "/^commit /d" |
> -       sort >actual &&
> -       test_cmp expect actual
> -'
> -test_expect_success 'rev-list --ancestry-path=G D..M' '
> -       test_write_lines G H I J L M >expect &&
> -       git rev-list --ancestry-path=G --format=%s D..M |
> -       sed -e "/^commit /d" |
> -       sort >actual &&
> -       test_cmp expect actual
> -'
> -test_expect_success 'rev-list --ancestry-path=H D..M' '
> -       test_write_lines E G H I J L M >expect &&
> -       git rev-list --ancestry-path=H --format=%s D..M |
> -       sed -e "/^commit /d" |
> -       sort >actual &&
> -       test_cmp expect actual
> -'
> -
> -test_expect_success 'rev-list --ancestry-path=K D..M' '
> -       test_write_lines K L M >expect &&
> -       git rev-list --ancestry-path=K --format=%s D..M |
> -       sed -e "/^commit /d" |
> -       sort >actual &&
> -       test_cmp expect actual
> -'
> -
> -test_expect_success 'rev-list --ancestry-path=F --ancestry-path=K D..M' '
> -       test_write_lines E F J K L M >expect &&
> -       git rev-list --ancestry-path=F --ancestry-path=K --format=%s D..M |
> -       sed -e "/^commit /d" |
> -       sort >actual &&
> -       test_cmp expect actual
> -'
> -
> -test_expect_success 'rev-list D..M -- M.t' '
> -       echo M >expect &&
> -       git rev-list --format=%s D..M -- M.t |
> -       sed -e "/^commit /d" >actual &&
> -       test_cmp expect actual
> -'
> -
> -test_expect_success 'rev-list --ancestry-path D..M -- M.t' '
> -       echo M >expect &&
> -       git rev-list --ancestry-path --format=%s D..M -- M.t |
> -       sed -e "/^commit /d" >actual &&
> -       test_cmp expect actual
> -'
> +test_ancestry () {
> +       args=$1
> +       expected=$2
> +       test_expect_success "rev-list $args" "
> +               test_write_lines $expected >expect &&
> +               git rev-list --format=%s $args >raw &&
> +
> +               if test -n \"$expected\"
> +               then
> +                       sed -e \"/^commit /d\" raw | sort >actual &&
> +                       test_cmp expect actual || return 1
> +               else
> +                       test_must_be_empty raw
> +               fi
> +       "
> +}
>
> -test_expect_success 'rev-list F...I' '
> -       test_write_lines F G H I >expect &&
> -       git rev-list --format=%s F...I |
> -       sed -e "/^commit /d" |
> -       sort >actual &&
> -       test_cmp expect actual
> -'
> +test_ancestry "D..M" "E F G H I J K L M"
>
> -test_expect_success 'rev-list --ancestry-path F...I' '
> -       test_write_lines F H I >expect &&
> -       git rev-list --ancestry-path --format=%s F...I |
> -       sed -e "/^commit /d" |
> -       sort >actual &&
> -       test_cmp expect actual
> -'
> +test_ancestry "--ancestry-path D..M" "E F H I J L M"
> +test_ancestry "--ancestry-path D..M" "E F H I J L M"
> +test_ancestry "--ancestry-path=F D..M" "E F J L M"
> +test_ancestry "--ancestry-path=G D..M" "G H I J L M"
> +test_ancestry "--ancestry-path=H D..M" "E G H I J L M"
> +test_ancestry "--ancestry-path=K D..M" "K L M"
> +test_ancestry "--ancestry-path=K --ancestry-path=F D..M" "E F J K L M"
>
> -# G.t is dropped in an "-s ours" merge
> -test_expect_success 'rev-list G..M -- G.t' '
> -       git rev-list --format=%s G..M -- G.t |
> -       sed -e "/^commit /d" >actual &&
> -       test_must_be_empty actual
> -'
> +test_ancestry "D..M -- M.t" "M"
> +test_ancestry "--ancestry-path D..M -- M.t" "M"
>
> -test_expect_success 'rev-list --ancestry-path G..M -- G.t' '
> -       echo L >expect &&
> -       git rev-list --ancestry-path --format=%s G..M -- G.t |
> -       sed -e "/^commit /d" >actual &&
> -       test_cmp expect actual
> -'
> +test_ancestry "F...I" "F G H I"
> +test_ancestry "--ancestry-path F...I" "F H I"
>
> -test_expect_success 'rev-list --ancestry-path --simplify-merges G^..M -- G.t' '
> -       test_write_lines G L >expect &&
> -       git rev-list --ancestry-path --simplify-merges --format=%s G^..M -- G.t |
> -       sed -e "/^commit /d" |
> -       sort >actual &&
> -       test_cmp expect actual
> -'
> +test_ancestry "G..M -- G.t" ""
> +test_ancestry "--ancestry-path G..M -- G.t" "L"
> +test_ancestry "--ancestry-path --simplify-merges G^..M -- G.t" "G L"
>
>  #   b---bc
>  #  / \ /
> --
> 2.37.1.vfs.0.0.rebase
>
>
>
>
Previous: Eric SunshineNext: Jonathan Tan
Message 16 of 29 in “Allow --ancestry-path to take an argument”
  1. 0/2 Allow --ancestry-path to take an argumentElijah Newren via GitGitGadget, Aug 17, 2022
  2. 1/2 rev-list-options.txt: fix simple typoElijah Newren via GitGitGadget, Aug 17, 2022
  3. 2/2 revision: allow --ancestry-path to take an argumentElijah Newren via GitGitGadget, Aug 17, 2022
  4. Junio C HamanoAug 17, 2022
  5. Elijah NewrenAug 18, 2022
  6. 0/2 Allow --ancestry-path to take an argumentElijah Newren via GitGitGadget, Aug 18, 2022
  7. 1/2 rev-list-options.txt: fix simple typoElijah Newren via GitGitGadget, Aug 18, 2022
  8. 2/2 revision: allow --ancestry-path to take an argumentElijah Newren via GitGitGadget, Aug 18, 2022
  9. Derrick StoleeAug 18, 2022
  10. Ævar Arnfjörð BjarmasonAug 18, 2022
  11. Derrick StoleeAug 18, 2022
  12. Eric SunshineAug 18, 2022
  13. Elijah NewrenAug 19, 2022
  14. Ævar Arnfjörð BjarmasonAug 19, 2022
  15. Eric SunshineAug 18, 2022
  16. Elijah NewrenAug 19, 2022
  17. Jonathan TanAug 18, 2022
  18. Elijah NewrenAug 19, 2022
  19. Jonathan TanAug 19, 2022
  20. Junio C HamanoAug 18, 2022
  21. 0/3 Allow --ancestry-path to take an argumentElijah Newren via GitGitGadget, Aug 19, 2022
  22. 1/3 rev-list-options.txt: fix simple typoElijah Newren via GitGitGadget, Aug 19, 2022
  23. 2/3 t6019: modernize tests with helperDerrick Stolee via GitGitGadget, Aug 19, 2022
  24. 3/3 revision: allow --ancestry-path to take an argumentElijah Newren via GitGitGadget, Aug 19, 2022
  25. Junio C HamanoAug 19, 2022
  26. Elijah NewrenAug 20, 2022
  27. Derrick StoleeAug 19, 2022
  28. Junio C HamanoAug 19, 2022
  29. Elijah NewrenAug 20, 2022

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.