From: Junio C Hamano <gitster@pobox.com>
To: Stefan Beller <sbeller@google.com>
Cc: szeder.dev@gmail.com, email@benjaminfuchs.de,
git@vger.kernel.org, sandals@crustytoothpaste.net,
ville.skytta@iki.fi
Subject: Re: [PATCHv2] rev-parse: add --show-superproject-working-tree
Date: Tue, 07 Mar 2017 22:01:36 -0800 [thread overview]
Message-ID: <xmqq60jk488v.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <20170308005615.20321-1-sbeller@google.com> (Stefan Beller's message of "Tue, 7 Mar 2017 16:56:15 -0800")
Stefan Beller <sbeller@google.com> writes:
> + if (!strcmp(arg, "--show-superproject-working-tree")) {
> + const char *superproject = get_superproject_working_tree();
> + if (superproject)
> + puts(superproject);
> + continue;
> + }
Returning the exact string of the path from the API function is
absolutely the right thing. I however have to wonder if rev-parse
need to do the c-quoting unless it is told to show pathnames in its
output without quoting (perhaps with "-z"). Paths from "rev-parse"
(like "--git-dir", "--show-toplevel", etc.) already are excempt from
the usual quoting rules, so doing puts() and nothing else is fine to
be consistent with the existing practice, but in the longer term, I
am sure we would need to revisit so that scripts can handle paths
with funny characters sensibly, but that would be a different topic
if existing ones like "--git-dir" are already unsafe.
> if (!strcmp(arg, "--show-prefix")) {
> if (prefix)
> puts(prefix);
> diff --git a/submodule.c b/submodule.c
> index 3b98766a6b..06473d3646 100644
> --- a/submodule.c
> +++ b/submodule.c
> @@ -1514,3 +1514,86 @@ void absorb_git_dir_into_superproject(const char *prefix,
> strbuf_release(&sb);
> }
> }
> +
> +const char *get_superproject_working_tree(void)
> +{
> +...
> + argv_array_pushl(&cp.args, "--literal-pathspecs", "-C", "..",
> + "ls-files", "--stage", "--full-name", "--", subpath, NULL);
> + strbuf_reset(&sb);
> +...
> + if (starts_with(sb.buf, "160000")) {
> + int super_sub_len;
> + int cwd_len = strlen(cwd);
> + char *super_sub, *super_wt;
> +
> + /*
> + * There is a superproject having this repo as a submodule.
> + * The format is <mode> SP <hash> SP <stage> TAB <full name> LF,
> + * First remove LF, then skip up to \t.
> + */
Looks more or less right but invoke "ls-files -z" and reading the \0
delimited output would be easier; otherwise you would have to worry
about c-unquoting the pathname when the submodule is bound at a path
with funny character (like a double-quote) in it.
next prev parent reply other threads:[~2017-03-08 6:08 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-30 20:44 [PATCH 0/4] git-prompt.sh: Full patch for submodule indicator Benjamin Fuchs
2017-01-30 20:44 ` [PATCH 1/4] git-prompt.sh: add " Benjamin Fuchs
2017-01-30 23:48 ` Junio C Hamano
2017-01-31 0:10 ` Benjamin Fuchs
2017-01-31 3:11 ` Junio C Hamano
2017-02-06 4:23 ` Stefan Beller
2017-02-06 5:55 ` Jacob Keller
2017-02-06 10:13 ` Stefan Beller
2017-01-30 20:44 ` [PATCH 2/4] git-prompt.sh: rework of " Benjamin Fuchs
2017-01-31 18:06 ` SZEDER Gábor
2017-01-30 20:44 ` [PATCH 3/4] git-prompt.sh: fix for submodule 'dirty' indicator Benjamin Fuchs
2017-01-30 20:44 ` [PATCH 4/4] git-prompt.sh: add tests for submodule indicator Benjamin Fuchs
2017-01-31 18:32 ` SZEDER Gábor
2017-01-31 22:06 ` Junio C Hamano
2017-01-31 22:12 ` Stefan Beller
2017-03-07 3:45 ` [RFC PATCH] rev-parse: add --show-superproject-working-tree Stefan Beller
2017-03-07 5:13 ` Junio C Hamano
2017-03-07 7:16 ` Junio C Hamano
2017-03-07 7:23 ` Junio C Hamano
2017-03-07 18:44 ` Junio C Hamano
2017-03-07 20:40 ` Stefan Beller
2017-03-07 22:49 ` Junio C Hamano
2017-03-08 0:56 ` [PATCHv2] " Stefan Beller
2017-03-08 1:30 ` Junio C Hamano
2017-03-08 6:01 ` Junio C Hamano [this message]
2017-03-08 19:20 ` [PATCHv3] " Stefan Beller
2017-03-08 22:28 ` Junio C Hamano
2017-03-08 23:07 ` [PATCHv4] " Stefan Beller
2017-03-08 23:51 ` Junio C Hamano
2017-03-17 22:28 ` Jonathan Nieder
2017-03-17 22:51 ` [PATCH] Documentation/git-worktree: use working tree for trees on the file system Stefan Beller
2017-03-17 22:55 ` Jonathan Nieder
2017-03-17 23:04 ` Stefan Beller
2017-03-18 17:24 ` Junio C Hamano
2017-03-18 1:47 ` Junio C Hamano
2017-03-18 1:36 ` Junio C Hamano
2017-03-20 17:29 ` Stefan Beller
2017-03-20 18:12 ` Junio C Hamano
2017-03-20 18:50 ` Jonathan Nieder
2017-03-20 19:22 ` [PATCH 0/2] use "working trees" instead of "worktree" in our API Stefan Beller
2017-03-20 19:22 ` [PATCH 1/2] git.c: introduce --working-tree superseding --work-tree Stefan Beller
2017-03-20 19:58 ` Jonathan Nieder
2017-03-20 19:22 ` [PATCH 2/2] revparse: introduce --is-inside-working-tree Stefan Beller
2017-03-20 20:00 ` Jonathan Nieder
2017-03-20 19:37 ` [PATCH 0/2] use "working trees" instead of "worktree" in our API Junio C Hamano
2017-03-21 10:37 ` [PATCH] Documentation/git-worktree: use working tree for trees on the file system Duy Nguyen
2017-03-21 15:48 ` Junio C Hamano
2017-03-23 17:06 ` Michael J Gruber
2017-03-23 17:55 ` Junio C Hamano
2017-03-25 12:07 ` Duy Nguyen
2017-04-07 13:59 ` Michael J Gruber
2017-04-07 16:14 ` Jacob Keller
2017-03-25 12:05 ` Duy Nguyen
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=xmqq60jk488v.fsf@gitster.mtv.corp.google.com \
--to=gitster@pobox.com \
--cc=email@benjaminfuchs.de \
--cc=git@vger.kernel.org \
--cc=sandals@crustytoothpaste.net \
--cc=sbeller@google.com \
--cc=szeder.dev@gmail.com \
--cc=ville.skytta@iki.fi \
/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.