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

Re: [PATCH] merge-recursive: Handle addition of submodule on our side of history

From
Stefan Beller <sbeller@google.com>
Date
Nov 14, 2017, 18:48 UTC
Message-ID
<CAGZ79kbdC8fYx503=YKBvEE62=T5WYST0QSNuQjPp5QG1cx1aw@mail.gmail.com>
In-Reply-To
<20171114173124.25982-1-newren@gmail.com>

+cc Ефимов Василий <real@ispras.ru> who reported the issue at https://public-inbox.org/git/743acc29-85bb-3773-b6a0-68d4a0b8fd63@ispras.ru/

On Tue, Nov 14, 2017 at 9:31 AM, Elijah Newren <newren@gmail.com> wrote:
Show 16 quoted lines
> The code for a newly added path assumed that the path was a normal file,
> and thus checked for there being a directory still being in the way of
> the file.  Note that since unpack_trees() does path-in-the-way checks
> already, the only way for there to be a directory in the way at this
> point in the code, is if there is some kind of D/F conflict in the merge.
>
> For a submodule addition on HEAD's side of history, the submodule would
> have already been present.  This means that we do expect there to be a
> directory present but should not consider it to be "in the way"; instead,
> it's the expected submodule.  So, when there's a submodule addition from
> HEAD's side, don't bother checking the working copy for a directory in
> the way.
>
> Signed-off-by: Elijah Newren <newren@gmail.com>
> ---
> This commit is based on top of sb/test-cherry-pick-submodule-getting-in-a-way.

Thanks for getting the discussion started here (and fixing the bug), based on your input in https://public-inbox.org/git/CABPp-BHDrw_dAESic3xK7kC3jMgKeNQuPQF69OpbVYhRkbhJsw@mail.gmail.com/ I adapted the test case locally to have two tests one file/submodule and a submodule/file conflict, after the setup which boroows a lot of code from the existing test, we'll have:

    test_expect_success 'unrelated submodule/file conflict is ignored' '
    (
        cd a_repo &&
       git checkout with_sub^0 &&
        git cherry-pick with_file^0
    )
    '
    test_expect_success 'unrelated file/submodule conflict is ignored' '
    (
        cd a_repo &&
        git checkout with_file^0 &&
        git cherry-pick with_sub^0
    )
    '

and the other case now fails. I'll take a look into that. I think we'd need to check either a_mode or b_mode to be a submodule depending on which side the submodule occured.

So I'll build on top of this patch to fix the other way, too.
Show 18 quoted lines
>
>  merge-recursive.c                | 5 +++--
>  t/t3512-cherry-pick-submodule.sh | 2 +-
>  2 files changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/merge-recursive.c b/merge-recursive.c
> index 1d3f8f0d22..9fb0b9f8fd 100644
> --- a/merge-recursive.c
> +++ b/merge-recursive.c
> @@ -1901,8 +1901,9 @@ static int process_entry(struct merge_options *o,
>                         oid = b_oid;
>                         conf = _("directory/file");
>                 }
> -               if (dir_in_way(path, !o->call_depth,
> -                              S_ISGITLINK(a_mode))) {
> +               if (dir_in_way(path,
> +                              !o->call_depth && !S_ISGITLINK(a_mode),
> +                              0)) {
The last flag is_empty_ok is ok to keep at 0, I think.

Thanks, Stefan

Previous: Elijah NewrenNext: Stefan Beller
Message 2 of 3 in “merge-recursive: Handle addition of submodule on our side of history”
  1. merge-recursive: Handle addition of submodule on our side of historyElijah Newren, Nov 14, 2017
  2. Stefan BellerNov 14, 2017
  3. Stefan BellerNov 14, 2017

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.