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

Re: [PATCH 5/6] submodule update: add super-reference flag

From
Stefan Beller <sbeller@google.com>
Date
Aug 6, 2016, 00:22 UTC
Message-ID
<CAGZ79kYsdqffWykzcEQcd2HigYqVNt0Y1H0Biw3QA2RdQaMOOw@mail.gmail.com>
In-Reply-To
<xmqq1t22x6fj.fsf@gitster.mtv.corp.google.com>
On Fri, Aug 5, 2016 at 2:16 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 10 quoted lines
> Stefan Beller <sbeller@google.com> writes:
>
>> Signed-off-by: Stefan Beller <sbeller@google.com>
>> ---
>
> That's a bit sketchy description.  From the title, I expected that
> we would see one additional 'unsigned super_reference : 1;' field in
> some structure, but that is not what is happening.  The log message
> needs to describe what these string list are and why they are needed
> a bit better.

A "--super-reference" allows giving a reference to a superproject instead of a direct reference.

With --reference you had to point to the direct repository, e.g.
    git clone --reference /usr/share/foo git://xyxxz.example/foo

assumed that /usr/share/foo is either the working dir or the git dir of said project.

When giving references in the submodule context (this part of the helper is called from "git submodule update", which itself is called from "git clone --recursive" we do not know the place where the submodule reference is living. As we do know where the superproject reference is living (i.e. "git clone --recursive --reference <superproject>"), we can construct one possible path where the submodules are located at <superproject>/<submodule-path>. To differentiate the reference flag from a direct reference this will be called "--super-reference" as it references a super project.

The next patch makes use of it by just passing on the --reference given to "git clone" as --super-reference to the "submodule update" procedure, which then uses the code in this patch.

>
> At least, please don't name a multiple_word field "multipleword" ;-)
uh :( OK.
Show 15 quoted lines
>
>> @@ -715,6 +716,15 @@ static int prepare_to_clone_next_submodule(const struct cache_entry *ce,
>>               for_each_string_list_item(item, &suc->references)
>>                       argv_array_pushl(&child->args, "--reference", item->string, NULL);
>>       }
>> +     if (suc->superreferences.nr) {
>> +             struct string_list_item *item;
>> +             for_each_string_list_item(item, &suc->superreferences) {
>> +                     strbuf_reset(&sb);
>> +                     argv_array_pushf(&child->args, "--reference=%s/%s",
>> +                                      relative_path(item->string, suc->prefix, &sb),
>> +                                      sub->path);
>
> The phrase "super reference" made me imagine it is some kind of
> "reference" that is applicable to the superproject,

Oh I see. Except that from the superprojects point of view, it is not a superproject; it is just a project with submodules. From a submodules point of view you have a superproject however, so a super-reference is a reference that points to another superproject, so we can find a sibling reference.

> but this code
> smells like it is a "prefix to create reference suited for use in
> submodule".
Yeah that's it.
Show 5 quoted lines
> Whatever it is, it should be explained better (than "no
> desciption" which is what we have here ;-), and given a name that
> match the explanation.
>
> Thanks.
OK.

Thanks, Stefan

Previous: Junio C HamanoNext: Stefan Beller
Message 14 of 25 in “git clone: Marry --recursive and --reference”
  1. 0/6 git clone: Marry --recursive and --referenceStefan Beller, Aug 4, 2016
  2. 2/6 t7408: merge short tests, factor out testing methodStefan Beller, Aug 4, 2016
  3. Junio C HamanoAug 5, 2016
  4. Stefan BellerAug 5, 2016
  5. Junio C HamanoAug 5, 2016
  6. 4/6 submodule--helper update-clone: allow multiple referencesStefan Beller, Aug 4, 2016
  7. Stefan BellerAug 5, 2016
  8. Junio C HamanoAug 5, 2016
  9. Stefan BellerAug 5, 2016
  10. Junio C HamanoAug 5, 2016
  11. Stefan BellerAug 5, 2016
  12. 5/6 submodule update: add super-reference flagStefan Beller, Aug 4, 2016
  13. Junio C HamanoAug 5, 2016
  14. Stefan BellerAug 6, 2016
  15. 1/6 t7408: modernize styleStefan Beller, Aug 4, 2016
  16. Junio C HamanoAug 5, 2016
  17. 3/6 submodule--helper module-clone: allow multiple referencesStefan Beller, Aug 4, 2016
  18. Junio C HamanoAug 5, 2016
  19. 6/6 clone: reference flag is used for submodules as wellStefan Beller, Aug 4, 2016
  20. Junio C HamanoAug 5, 2016
  21. Junio C HamanoAug 5, 2016
  22. Stefan BellerAug 5, 2016
  23. Junio C HamanoAug 5, 2016
  24. Rename detection within in files WAS: [PATCH 2/6] t7408: merge short tests, factor out testing methodStefan Beller, Aug 5, 2016
  25. René ScharfeAug 7, 2016

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.