From: Justin Tobler <jltobler@gmail.com>
To: K Jayatheerth <jayatheerthkulkarni2005@gmail.com>
Cc: git@vger.kernel.org, lucasseikioshiro@gmail.com, gitster@pobox.com
Subject: Re: [GSoC Patch v7 2/8] submodule: use repository to find superproject
Date: Mon, 2 Nov 2026 15:36:15 -0600 [thread overview]
Message-ID: <auj3hhrRvyX9lus6@denethor> (raw)
In-Reply-To: <20260927114420.59724-3-jayatheerthkulkarni2005@gmail.com>
On 26/09/27 05:14PM, K Jayatheerth wrote:
> `get_superproject_working_tree()` currently uses `xgetcwd()` to
> determine the repository whose superproject should be checked.
>
> This is incorrect when `--git-dir` points to a repository different
> from the one associated with the current working directory. In that
> case, the current working directory may cause the function to return
> the wrong superproject or an empty result.
Ok, so we are not taking into account here that the git dir location
could be different than the current working directory.
> Pass the `repository` to `get_superproject_working_tree()` so that the
> superproject is determined from the repository being inspected rather
> than the current working directory.
Makes sense.
> Mentored-by: Justin Tobler <jltobler@gmail.com>
> Mentored-by: Lucas Seiki Oshiro <lucasseikioshiro@gmail.com>
> Signed-off-by: K Jayatheerth <jayatheerthkulkarni2005@gmail.com>
> ---
> builtin/rev-parse.c | 2 +-
> submodule.c | 43 +++++++++++++++++++-------------------
> submodule.h | 2 +-
> t/t7400-submodule-basic.sh | 19 +++++++++++++++++
> 4 files changed, 43 insertions(+), 23 deletions(-)
>
> diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
> index 43693454d5..e1a6da0076 100644
> --- a/builtin/rev-parse.c
> +++ b/builtin/rev-parse.c
> @@ -997,7 +997,7 @@ int cmd_rev_parse(int argc,
> }
> if (!strcmp(arg, "--show-superproject-working-tree")) {
> struct strbuf superproject = STRBUF_INIT;
> - if (get_superproject_working_tree(&superproject))
> + if (get_superproject_working_tree(the_repository, &superproject))
> print_path(superproject.buf, prefix, format, DEFAULT_UNMODIFIED);
> strbuf_release(&superproject);
> continue;
> diff --git a/submodule.c b/submodule.c
> index 6fcb606f7e..4db90ef9b0 100644
> --- a/submodule.c
> +++ b/submodule.c
> @@ -2610,34 +2610,35 @@ void absorb_git_dir_into_superproject(const char *path,
> absorb_git_dir_into_superproject_recurse(path, super_prefix);
> }
>
> -int get_superproject_working_tree(struct strbuf *buf)
> +int get_superproject_working_tree(struct repository *r, struct strbuf *buf)
> {
> struct child_process cp = CHILD_PROCESS_INIT;
> struct strbuf sb = STRBUF_INIT;
> struct strbuf one_up = STRBUF_INIT;
> - char *cwd = xgetcwd();
> + struct strbuf target_wt = STRBUF_INIT;
> + const char *worktree;
> int ret = 0;
> const char *subpath;
> int code;
> ssize_t len;
>
> - if (!is_inside_work_tree(the_repository))
> - /*
> - * FIXME:
> - * We might have a superproject, but it is harder
> - * to determine.
> - */
> + worktree = repo_get_work_tree(r);
We now use the passed repository to get the working tree instead of
relying getting the current working directory and checking if we are
inside a worktree. Looks good.
> + if (!worktree)
> + goto out;
> +
> + if (!strbuf_realpath(&target_wt, worktree, 0))
> goto out;
>
> - if (!strbuf_realpath(&one_up, "../", 0))
> + strbuf_addf(&one_up, "%s/..", target_wt.buf);
> + if (!strbuf_realpath(&one_up, one_up.buf, 0))
I was confused at first why we bother invoking `strbuf_realpath()` here
since it's just an intermediate step, but I assume that is so we can use
it in the error statement later on.
> goto out;
>
> - subpath = relative_path(cwd, one_up.buf, &sb);
> + subpath = relative_path(target_wt.buf, one_up.buf, &sb);
>
> prepare_submodule_repo_env(&cp.env);
> strvec_pop(&cp.env);
>
> - strvec_pushl(&cp.args, "--literal-pathspecs", "-C", "..",
> + strvec_pushl(&cp.args, "--literal-pathspecs", "-C", one_up.buf,
> "ls-files", "-z", "--stage", "--full-name", "--",
> subpath, NULL);
> strbuf_reset(&sb);
> @@ -2648,14 +2649,14 @@ int get_superproject_working_tree(struct strbuf *buf)
> cp.git_cmd = 1;
>
> if (start_command(&cp))
> - die(_("could not start ls-files in .."));
> + die(_("could not start ls-files in %s"), one_up.buf);
>
> len = strbuf_read(&sb, cp.out, PATH_MAX);
> close(cp.out);
>
> if (starts_with(sb.buf, "160000")) {
> int super_sub_len;
> - int cwd_len = strlen(cwd);
> + int wt_len = target_wt.len;
> char *super_sub, *super_wt;
>
> /*
[snip]
> +test_expect_success 'path.superproject-root works with --git-dir' '
> + test_when_finished "rm -rf sub super" &&
> + git init sub &&
> + test_commit -C sub initial &&
> + git init super &&
> + (
> + cd super &&
> + git -c protocol.file.allow=always submodule add "../sub" sub &&
> + git commit -m "add submodule" &&
> +
> + SUPER_ROOT="$(test-tool path-utils real_path .)" &&
> + MODULE_DIR="$SUPER_ROOT/.git/modules/sub" &&
> +
> + echo "path.superproject-root.absolute=$SUPER_ROOT" >expect &&
> + git --git-dir="$MODULE_DIR" repo info path.superproject-root.absolute >actual &&
`path.superproject-root` isn't introduced until the next patch, so this
test fails at this commit. Maybe the test should exercise the existing
`git --git-dir=... rev-parse --show-superproject-working-tree` caller in
t1500 instead?
-Justin
next prev parent reply other threads:[~2026-11-02 21:36 UTC|newest]
Thread overview: 109+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-16 1:21 [GSoC Patch 0/7] repo: add more path keys to git repo info K Jayatheerth
2026-07-16 1:21 ` [GSoC Patch 1/7] repo: add path.toplevel with absolute and relative suffix formatting K Jayatheerth
2026-08-15 23:06 ` Lucas Seiki Oshiro
2026-08-18 16:09 ` K Jayatheerth
2026-07-16 1:21 ` [GSoC Patch 2/7] repo: add path.superproject-working-tree with absolute and relative suffixes K Jayatheerth
2026-07-16 1:21 ` [GSoC Patch 3/7] repo: add path.objects with absolute and relative suffix formatting K Jayatheerth
2026-07-16 1:21 ` [GSoC Patch 4/7] repo: add path.hooks " K Jayatheerth
2026-07-16 1:21 ` [GSoC Patch 5/7] repo: add path.index " K Jayatheerth
2026-07-16 1:21 ` [GSoC Patch 6/7] repo: add path.grafts " K Jayatheerth
2026-07-16 1:21 ` [GSoC Patch 7/7] repo: add path.git-prefix path key validation K Jayatheerth
2026-07-16 3:23 ` Junio C Hamano
2026-07-16 15:36 ` K Jayatheerth
2026-07-17 13:30 ` [GSoC Patch v2 0/7] repo: add more path keys to git repo info K Jayatheerth
2026-07-17 13:30 ` [GSoC Patch v2 1/7] repo: add path.toplevel with absolute and relative suffix formatting K Jayatheerth
2026-07-17 13:30 ` [GSoC Patch v2 2/7] repo: add path.superproject-working-tree with absolute and relative suffixes K Jayatheerth
2026-07-17 13:30 ` [GSoC Patch v2 3/7] repo: add path.objects with absolute and relative suffix formatting K Jayatheerth
2026-07-17 13:30 ` [GSoC Patch v2 4/7] repo: add path.hooks " K Jayatheerth
2026-07-17 13:30 ` [GSoC Patch v2 5/7] repo: add path.index " K Jayatheerth
2026-07-20 0:35 ` Lucas Seiki Oshiro
2026-07-24 17:49 ` K Jayatheerth
2026-07-24 19:21 ` Junio C Hamano
2026-07-17 13:30 ` [GSoC Patch v2 6/7] repo: add path.grafts " K Jayatheerth
2026-07-20 0:20 ` Lucas Seiki Oshiro
2026-07-20 4:01 ` Junio C Hamano
2026-07-21 2:19 ` K Jayatheerth
2026-07-17 13:30 ` [GSoC Patch v2 7/7] repo: add path.git-prefix path key K Jayatheerth
2026-07-26 10:43 ` [GSoC Patch v3 0/7] repo: add more path keys to git repo info K Jayatheerth
2026-07-26 10:43 ` [PATCH v3 1/7] repo: add path.toplevel with absolute and relative suffix formatting K Jayatheerth
2026-07-27 8:45 ` Junio C Hamano
2026-07-28 1:21 ` K Jayatheerth
2026-07-28 16:36 ` Justin Tobler
2026-07-29 16:36 ` K Jayatheerth
2026-07-26 10:43 ` [PATCH v3 2/7] repo: add path.superproject-working-tree with absolute and relative suffixes K Jayatheerth
2026-07-28 16:43 ` Justin Tobler
2026-07-26 10:43 ` [PATCH v3 3/7] repo: add path.objects with absolute and relative suffix formatting K Jayatheerth
2026-07-28 17:12 ` Justin Tobler
2026-07-26 10:43 ` [PATCH v3 4/7] repo: add path.hooks " K Jayatheerth
2026-07-28 19:00 ` Justin Tobler
2026-07-26 10:43 ` [PATCH v3 5/7] repo: add path.index " K Jayatheerth
2026-07-26 10:43 ` [PATCH v3 6/7] repo: add path.grafts " K Jayatheerth
2026-07-26 10:43 ` [PATCH v3 7/7] repo: add path.git-prefix path key K Jayatheerth
2026-07-26 16:29 ` [GSoC Patch v3 0/7] repo: add more path keys to git repo info Junio C Hamano
2026-07-26 17:00 ` K Jayatheerth
2026-07-27 0:57 ` Lucas Seiki Oshiro
2026-07-27 5:55 ` Junio C Hamano
2026-08-06 10:15 ` [GSoC PATCH v4 " K Jayatheerth
2026-08-06 10:15 ` [GSoC PATCH v4 1/7] repo: add path.toplevel with absolute and relative suffix formatting K Jayatheerth
2026-08-06 10:15 ` [GSoC PATCH v4 2/7] repo: add path.superproject-root with absolute and relative suffixes K Jayatheerth
2026-08-06 10:15 ` [GSoC PATCH v4 3/7] repo: add path.hooks " K Jayatheerth
2026-08-06 10:15 ` [GSoC PATCH v4 4/7] repo: add path.index " K Jayatheerth
2026-08-06 10:15 ` [GSoC PATCH v4 5/7] repo: add path.grafts " K Jayatheerth
2026-08-06 10:15 ` [GSoC PATCH v4 6/7] repo: add path.git-prefix K Jayatheerth
2026-08-16 0:53 ` Lucas Seiki Oshiro
2026-08-18 16:33 ` K Jayatheerth
2026-08-18 17:09 ` Junio C Hamano
2026-08-21 14:08 ` K Jayatheerth
2026-08-06 10:15 ` [GSoC PATCH v4 7/7] repo: remove unused setup.h include K Jayatheerth
2026-08-25 17:58 ` [GSoC Patch v5 0/7] add more path keys to git repo info K Jayatheerth
2026-08-25 17:58 ` [GSoC Patch v5 1/7] repo: add path.toplevel with absolute and relative suffix formatting K Jayatheerth
2026-08-25 17:58 ` [GSoC Patch v5 2/7] repo: add path.superproject-root with absolute and relative suffixes K Jayatheerth
2026-09-04 22:09 ` Junio C Hamano
2026-09-05 10:01 ` K Jayatheerth
2026-08-25 17:58 ` [GSoC Patch v5 3/7] repo: add path.hooks " K Jayatheerth
2026-08-25 17:58 ` [GSoC Patch v5 4/7] repo: add path.index " K Jayatheerth
2026-08-25 17:58 ` [GSoC Patch v5 5/7] repo: add path.grafts " K Jayatheerth
2026-08-25 17:58 ` [GSoC Patch v5 6/7] repo: add path.git-prefix K Jayatheerth
2026-08-25 17:58 ` [GSoC Patch v5 7/7] repo: add path.cdup K Jayatheerth
2026-08-25 19:31 ` Junio C Hamano
2026-09-04 14:37 ` K Jayatheerth
2026-08-26 7:23 ` [GSoC Patch v5 0/7] add more path keys to git repo info SZEDER Gábor
2026-08-26 14:18 ` Junio C Hamano
2026-09-11 14:45 ` [GSoC Patch v6 " K Jayatheerth
2026-09-11 14:45 ` [GSoC Patch v6 1/7] repo: add path.toplevel with absolute and relative suffix formatting K Jayatheerth
2026-09-11 14:45 ` [GSoC Patch v6 2/7] repo: add path.superproject-root with absolute and relative suffixes K Jayatheerth
2026-09-11 22:08 ` Junio C Hamano
2026-09-23 17:40 ` K Jayatheerth
2026-09-11 14:45 ` [GSoC Patch v6 3/7] repo: add path.hooks " K Jayatheerth
2026-09-11 14:45 ` [GSoC Patch v6 4/7] repo: add path.index " K Jayatheerth
2026-09-11 16:55 ` Junio C Hamano
2026-09-23 17:25 ` K Jayatheerth
2026-09-11 14:45 ` [GSoC Patch v6 5/7] repo: add path.grafts " K Jayatheerth
2026-09-11 14:45 ` [GSoC Patch v6 6/7] repo: add path.git-prefix K Jayatheerth
2026-09-11 14:45 ` [GSoC Patch v6 7/7] repo: add path.cdup K Jayatheerth
2026-09-11 17:37 ` Junio C Hamano
2026-09-23 17:37 ` K Jayatheerth
2026-09-27 11:44 ` [GSoC Patch v7 0/8] add more path keys to git repo info K Jayatheerth
2026-09-27 11:44 ` [GSoC Patch v7 1/8] repo: add path.toplevel with absolute and relative suffix formatting K Jayatheerth
2026-09-27 11:44 ` [GSoC Patch v7 2/8] submodule: use repository to find superproject K Jayatheerth
2026-11-02 21:36 ` Justin Tobler [this message]
2026-11-03 2:08 ` K Jayatheerth
2026-09-27 11:44 ` [GSoC Patch v7 3/8] repo: add path.superproject-root with absolute and relative suffixes K Jayatheerth
2026-11-02 21:43 ` Justin Tobler
2026-11-03 2:10 ` K Jayatheerth
2026-09-27 11:44 ` [GSoC Patch v7 4/8] repo: add path.hooks " K Jayatheerth
2026-11-02 22:32 ` Justin Tobler
2026-11-03 2:31 ` K Jayatheerth
2026-11-03 16:16 ` Justin Tobler
2026-11-03 18:27 ` K Jayatheerth
2026-09-27 11:44 ` [GSoC Patch v7 5/8] repo: add path.index " K Jayatheerth
2026-09-27 11:44 ` [GSoC Patch v7 6/8] repo: add path.grafts " K Jayatheerth
2026-11-02 22:47 ` Justin Tobler
2026-11-03 2:50 ` K Jayatheerth
2026-09-27 11:44 ` [GSoC Patch v7 7/8] repo: add path.git-prefix K Jayatheerth
2026-09-27 11:44 ` [GSoC Patch v7 8/8] repo: add path.cdup K Jayatheerth
2026-11-02 23:20 ` Justin Tobler
2026-11-03 2:54 ` K Jayatheerth
2026-11-01 23:30 ` [GSoC Patch v7 0/8] add more path keys to git repo info Junio C Hamano
2026-11-01 23:51 ` Justin Tobler
2026-11-02 9:31 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=auj3hhrRvyX9lus6@denethor \
--to=jltobler@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jayatheerthkulkarni2005@gmail.com \
--cc=lucasseikioshiro@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.