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

Re: [PATCH 1/6] fetch/pull: recurse into submodules when necessary

From
Junio C Hamano <gitster@pobox.com>
Date
Feb 23, 2011, 22:56 UTC
Message-ID
<7vipwa5phh.fsf@alter.siamese.dyndns.org>
In-Reply-To
<4D656F4D.6080401@web.de>
Jens Lehmann <Jens.Lehmann@web.de> writes:
Show 9 quoted lines
> diff --git a/submodule.c b/submodule.c
> index 6f1c107..c8c3a99 100644
> --- a/submodule.c
> +++ b/submodule.c
> @@ -152,6 +153,20 @@ void handle_ignore_submodules_arg(struct diff_options *diffopt,
> ...
> +int parse_fetch_recurse_submodules_arg(const char *arg)
> +{
> +	switch (git_config_maybe_bool("", arg)) {

It's a bit unusual to see "" as the variable name; doesn't config-maybe-bool barf when arg is not what it likes, with the name as part of its message?

Show 21 quoted lines
> @@ -248,11 +263,73 @@ void set_config_fetch_recurse_submodules(int value)
> ...
> +static void submodule_collect_changed_cb(struct diff_queue_struct *q,
> +					 struct diff_options *options,
> +					 void *data)
> +{
> +	int i;
> +	for (i = 0; i < q->nr; i++) {
> +		struct diff_filepair *p = q->queue[i];
> +		if (!S_ISGITLINK(p->two->mode))
> +			continue;
> +
> +		if (S_ISGITLINK(p->one->mode)) {
> +			/* NEEDSWORK: We should honor the name configured in
> +			 * the .gitmodules file of the commit we are examining
> +			 * here to be able to correctly follow submodules
> +			 * being moved around. */
> +			struct string_list_item *path;
> +			path = unsorted_string_list_lookup(&changed_submodule_paths, p->two->path);
> +			if (!path)
> +				string_list_append(&changed_submodule_paths, xstrdup(p->two->path));

I wondered why there is no mention of "data" in the implementation of this function; changed_submodule_paths global is used instead here.

I do not see anywhere the global string_list is initialized, freed, nor re-initialized for reuse. Are you guaranteeing that the caller only calls the check_for_new_submodule_commits() function once, and if so how? The function is called from update_local_ref() in builtin/fetch.c, which in turn gets called number of times during a fetch. IOW, does the code do the right thing when you are fetching more than one refs?

Previous: Jens LehmannNext: Jens Lehmann
Message 3 of 23 in “Teach fetch/pull the on-demand mode and make it the default”
  1. 0/6 Teach fetch/pull the on-demand mode and make it the defaultJens Lehmann, Feb 23, 2011
  2. 1/6 fetch/pull: recurse into submodules when necessaryJens Lehmann, Feb 23, 2011
  3. Junio C HamanoFeb 23, 2011
  4. Jens LehmannFeb 23, 2011
  5. Jonathan NiederFeb 24, 2011
  6. Jonathan NiederFeb 23, 2011
  7. Jens LehmannFeb 23, 2011
  8. Jonathan NiederFeb 23, 2011
  9. 2/6 fetch/pull: Add the 'on-demand' value to the --recurse-submodules optionJens Lehmann, Feb 23, 2011
  10. Jonathan NiederFeb 23, 2011
  11. Jonathan NiederFeb 23, 2011
  12. 3/6 config: teach the fetch.recurseSubmodules option the 'on-demand' valueJens Lehmann, Feb 23, 2011
  13. 4/6 Submodules: Add 'on-demand' value for the 'fetchRecurseSubmodule' optionJens Lehmann, Feb 23, 2011
  14. Junio C HamanoFeb 23, 2011
  15. Jens LehmannFeb 24, 2011
  16. 5/6 fetch/pull: Don't recurse into a submodule when commits are already presentJens Lehmann, Feb 23, 2011
  17. Junio C HamanoFeb 23, 2011
  18. Jens LehmannFeb 23, 2011
  19. Jens LehmannFeb 24, 2011
  20. 6/6 submodule update: Don't fetch when the submodule commit is already presentJens Lehmann, Feb 23, 2011
  21. Junio C HamanoFeb 23, 2011
  22. Jonathan NiederFeb 23, 2011
  23. Jens LehmannFeb 23, 2011

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.