Unfortunately, the only effect this had was to change the order of fetches (it now appears to be case-sensitive alphabetical). After applying this patch, this is what I saw (using the same terms as my previous email):
Fetching submodule G
Fetching submodule B
Fetching submodule F
Fetching submodule C
Fetching submodule H
Fetching submodule E
Fetching submodule A
Fetching submodule D
Note that it's still telling me that it's fetching submodule H even though this inside of submodule C rather than at the root level. I also verified this by running `git ls-tree -r HEAD | grep commit` and observed that only submodules A-G show up in that list.
-Kevin Ballard
On Sep 16, 2010, at 6:55 AM, Jens Lehmann wrote:
quoted text > In the first version the .gitmodules file was parsed and all submodules
> found there were recursively fetched. This lead to problems when the
> .gitmodules file was not properly set up. "git submodule update" gets
> this information from the index via "git ls-files", lets do the same here.
>
> Reported-by: Kevin Ballard <kevin@sb.org>
> Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
> ---
>
> Could it be that the information in your .gitmodules files is not
> quite right? Then this patch should fix your problems with the
> recursion. Please test it and let me know if the submodules are
> now recursively fetched as they should.
>
>
> submodule.c | 25 +++++++++++++++++++------
> 1 files changed, 19 insertions(+), 6 deletions(-)
>
> diff --git a/submodule.c b/submodule.c
> index 05661e2..13a694b 100644
> --- a/submodule.c
> +++ b/submodule.c
> @@ -240,7 +240,7 @@ void show_submodule_summary(FILE *f, const char *path,
>
> int fetch_populated_submodules(int forced)
> {
> - int result = 0;
> + int i, result = 0;
> struct child_process cp;
> const char *argv[] = {
> "fetch",
> @@ -251,6 +251,10 @@ int fetch_populated_submodules(int forced)
> if (!work_tree)
> return 0;
>
> + if (!the_index.initialized)
> + if (read_cache() < 0)
> + die("index file corrupt");
> +
> memset(&cp, 0, sizeof(cp));
> cp.argv = argv;
> cp.env = local_repo_env;
> @@ -258,25 +262,34 @@ int fetch_populated_submodules(int forced)
> cp.no_stdin = 1;
> cp.out = -1;
>
> - for_each_string_list_item(name_for_path, &config_name_for_path) {
> + for (i = 0; i < active_nr; i++) {
> struct strbuf submodule_path = STRBUF_INIT;
> struct strbuf submodule_git_dir = STRBUF_INIT;
> - const char *git_dir;
> + struct cache_entry *ce = active_cache[i];
> + const char *git_dir, *name;
> +
> + if (!S_ISGITLINK(ce->ce_mode))
> + continue;
> +
> + name = ce->name;
> + name_for_path = unsorted_string_list_lookup(&config_name_for_path, ce->name);
> + if (name_for_path)
> + name = name_for_path->util;
>
> if (!forced) {
> struct string_list_item *fetch_option;
> - fetch_option = unsorted_string_list_lookup(&config_fetch_for_name, name_for_path->util);
> + fetch_option = unsorted_string_list_lookup(&config_fetch_for_name, name);
> if (fetch_option && !fetch_option->util)
> continue;
> }
>
> - strbuf_addf(&submodule_path, "%s/%s", work_tree, name_for_path->string);
> + strbuf_addf(&submodule_path, "%s/%s", work_tree, ce->name);
> strbuf_addf(&submodule_git_dir, "%s/.git", submodule_path.buf);
> git_dir = read_gitfile_gently(submodule_git_dir.buf);
> if (!git_dir)
> git_dir = submodule_git_dir.buf;
> if (is_directory(git_dir)) {
> - printf("Fetching submodule %s\n", name_for_path->string);
> + printf("Fetching submodule %s\n", ce->name);
> cp.dir = submodule_path.buf;
> if (run_command(&cp))
> result = 1;
> --
> 1.7.3.rc2.232.g3328
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to
majordomo@vger.kernel.org
More majordomo info at
http://vger.kernel.org/majordomo-info.html