From: John Keeping <john@keeping.me.uk>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Duy Nguyen <pclouds@gmail.com>,
Jens Lehmann <Jens.Lehmann@web.de>, Johannes Sixt <j6t@kdbg.org>
Subject: Re: [PATCH v2 2/4] pathspec: strip multiple trailing slashes from submodules
Date: Thu, 12 Sep 2013 21:21:28 +0100 [thread overview]
Message-ID: <20130912202128.GB2582@serenity.lan> (raw)
In-Reply-To: <xmqqzjrhom85.fsf@gitster.dls.corp.google.com>
On Thu, Sep 12, 2013 at 12:48:10PM -0700, Junio C Hamano wrote:
> John Keeping <john@keeping.me.uk> writes:
>
> > This allows us to replace the submodule path trailing slash removal in
> > builtin/rm.c with the PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP flag to
> > parse_pathspec() without changing the behaviour with respect to multiple
> > trailing slashes.
>
> Where does prefix_pathspec()'s input, which could have an unwanted
> trailing slash, come from?
>
> If it is read from some of our internal data structure and known to
> have at most one, then this change makes me feel very uneasy to cope
> with potentially sloppy end-user input and data generated by ourselves
> with the same logic. It will allow our internal to be sloppy without
> forcing us notice and fix that sloppiness.
>
> If it is coming from an end-user input, then I would not object to
> the change, though.
I added this in response to Duy's comment on v1 [1].
[1] http://article.gmane.org/gmane.comp.version-control.git/234548
Looking more closely, this does come from user input (via the argv
passed into parse_pathspec) but does (some of the time) go through
prefix_path_gently which calls normalize_path_copy_len.
It's not immediately clear to me when prefix_pathspec goes through this
particular code path, but I think we may be able to drop this (and the
previous patch) without affecting the user.
> > Signed-off-by: John Keeping <john@keeping.me.uk>
> > ---
> > pathspec.c | 27 +++++++++++++++++----------
> > 1 file changed, 17 insertions(+), 10 deletions(-)
> >
> > diff --git a/pathspec.c b/pathspec.c
> > index 7c6963b..11b031a 100644
> > --- a/pathspec.c
> > +++ b/pathspec.c
> > @@ -251,12 +251,16 @@ static unsigned prefix_pathspec(struct pathspec_item *item,
> > item->len = strlen(item->match);
> > item->prefix = prefixlen;
> >
> > - if ((flags & PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP) &&
> > - (item->len >= 1 && is_dir_sep(item->match[item->len - 1])) &&
> > - (i = cache_name_pos(item->match, item->len - 1)) >= 0 &&
> > - S_ISGITLINK(active_cache[i]->ce_mode)) {
> > - item->len--;
> > - match[item->len] = '\0';
> > + if (flags & PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP) {
> > + size_t pathlen = item->len;
> > + while (pathlen > 0 && is_dir_sep(item->match[pathlen - 1]))
> > + pathlen--;
> > +
> > + if ((i = cache_name_pos(item->match, pathlen)) >= 0 &&
> > + S_ISGITLINK(active_cache[i]->ce_mode)) {
> > + item->len = pathlen;
> > + match[item->len] = '\0';
> > + }
> > }
> >
> > if (flags & PATHSPEC_STRIP_SUBMODULE_SLASH_EXPENSIVE)
> > @@ -271,11 +275,14 @@ static unsigned prefix_pathspec(struct pathspec_item *item,
> > !is_dir_sep(match[ce_len]) ||
> > memcmp(ce->name, match, ce_len))
> > continue;
> > - if (item->len == ce_len + 1) {
> > - /* strip trailing slash */
> > +
> > + while (item->len > 0 && is_dir_sep(match[item->len - 1]))
> > item->len--;
> > - match[item->len] = '\0';
> > - } else
> > +
> > + /* strip trailing slash */
> > + match[item->len] = '\0';
> > +
> > + if (item->len != ce_len)
> > die (_("Pathspec '%s' is in submodule '%.*s'"),
> > elt, ce_len, ce->name);
> > }
next prev parent reply other threads:[~2013-09-12 20:21 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-10 19:13 [PATCH 0/2] reset: handle submodule with trailing slash John Keeping
2013-09-10 19:13 ` [PATCH 1/2] " John Keeping
2013-09-10 19:37 ` Jens Lehmann
2013-09-10 19:46 ` John Keeping
2013-09-11 6:05 ` Johannes Sixt
2013-09-11 8:20 ` John Keeping
2013-09-11 10:54 ` Duy Nguyen
2013-09-11 11:08 ` John Keeping
2013-09-11 11:20 ` Duy Nguyen
2013-09-11 17:08 ` Junio C Hamano
2013-09-11 17:27 ` John Keeping
2013-09-11 18:14 ` Junio C Hamano
2013-09-11 18:22 ` John Keeping
2013-09-11 18:45 ` Junio C Hamano
2013-09-10 19:13 ` [PATCH 2/2] rm: re-use parse_pathspec's trailing-slash removal John Keeping
2013-09-11 7:48 ` Duy Nguyen
2013-09-11 8:24 ` John Keeping
2013-09-12 19:24 ` [PATCH v2 0/4] submodule trailing slash improvements John Keeping
2013-09-12 19:24 ` [PATCH v2 1/4] pathspec: use is_dir_sep() to check for trailing slashes John Keeping
2013-09-12 20:17 ` Johannes Sixt
2013-09-12 19:24 ` [PATCH v2 2/4] pathspec: strip multiple trailing slashes from submodules John Keeping
2013-09-12 19:48 ` Junio C Hamano
2013-09-12 20:21 ` John Keeping [this message]
2013-09-13 1:28 ` Duy Nguyen
2013-09-13 8:48 ` John Keeping
2013-09-12 19:25 ` [PATCH v2 3/4] rm: re-use parse_pathspec's trailing-slash removal John Keeping
2013-09-12 19:25 ` [PATCH v2 4/4] reset: handle submodule with trailing slash John Keeping
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=20130912202128.GB2582@serenity.lan \
--to=john@keeping.me.uk \
--cc=Jens.Lehmann@web.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=j6t@kdbg.org \
--cc=pclouds@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.