]> git.ipfire.org Git - thirdparty/git.git/blobdiff - submodule.c
Merge branch 'ug/doc-lose-dircache' into maint
[thirdparty/git.git] / submodule.c
index eef5204e641e198847e86e5e36c1115970831b8e..b561445329204f20a326cf7f7a5b897ca28d0934 100644 (file)
@@ -499,6 +499,12 @@ void prepare_submodule_repo_env(struct strvec *out)
                     DEFAULT_GIT_DIR_ENVIRONMENT);
 }
 
+static void prepare_submodule_repo_env_in_gitdir(struct strvec *out)
+{
+       prepare_submodule_repo_env_no_git_dir(out);
+       strvec_pushf(out, "%s=.", GIT_DIR_ENVIRONMENT);
+}
+
 /*
  * Initialize a repository struct for a submodule based on the provided 'path'.
  *
@@ -1449,8 +1455,8 @@ static int get_next_submodule(struct child_process *cp,
                if (task->repo) {
                        struct strbuf submodule_prefix = STRBUF_INIT;
                        child_process_init(cp);
-                       cp->dir = task->repo->worktree;
-                       prepare_submodule_repo_env(&cp->env_array);
+                       cp->dir = task->repo->gitdir;
+                       prepare_submodule_repo_env_in_gitdir(&cp->env_array);
                        cp->git_cmd = 1;
                        if (!spf->quiet)
                                strbuf_addf(err, _("Fetching submodule %s%s\n"),
@@ -1471,6 +1477,7 @@ static int get_next_submodule(struct child_process *cp,
                        strbuf_release(&submodule_prefix);
                        return 1;
                } else {
+                       struct strbuf empty_submodule_path = STRBUF_INIT;
 
                        fetch_task_release(task);
                        free(task);
@@ -1479,13 +1486,17 @@ static int get_next_submodule(struct child_process *cp,
                         * An empty directory is normal,
                         * the submodule is not initialized
                         */
+                       strbuf_addf(&empty_submodule_path, "%s/%s/",
+                                                       spf->r->worktree,
+                                                       ce->name);
                        if (S_ISGITLINK(ce->ce_mode) &&
-                           !is_empty_dir(ce->name)) {
+                           !is_empty_dir(empty_submodule_path.buf)) {
                                spf->result = 1;
                                strbuf_addf(err,
                                            _("Could not access submodule '%s'\n"),
                                            ce->name);
                        }
+                       strbuf_release(&empty_submodule_path);
                }
        }
 
@@ -1499,9 +1510,9 @@ static int get_next_submodule(struct child_process *cp,
                            spf->prefix, task->sub->path);
 
                child_process_init(cp);
-               prepare_submodule_repo_env(&cp->env_array);
+               prepare_submodule_repo_env_in_gitdir(&cp->env_array);
                cp->git_cmd = 1;
-               cp->dir = task->repo->worktree;
+               cp->dir = task->repo->gitdir;
 
                strvec_init(&cp->args);
                strvec_pushv(&cp->args, spf->args.v);