From: Junio C Hamano <gitster@pobox.com>
To: Nguyen Thai Ngoc Duy <pclouds@gmail.com>
Cc: git@vger.kernel.org, Jeff King <peff@peff.net>,
Johannes Sixt <j.sixt@viscovery.net>
Subject: Re: [PATCH 1/3] quote: let caller reset buffer for quote_path_relative()
Date: Thu, 11 Oct 2012 09:42:57 -0700 [thread overview]
Message-ID: <7v8vbd7yem.fsf@alter.siamese.dyndns.org> (raw)
In-Reply-To: <CACsJy8CTGpDW46-37oX14+JxLxWmoz2f4mawr4QPkqCSunF7dQ@mail.gmail.com> (Nguyen Thai Ngoc Duy's message of "Thu, 11 Oct 2012 20:04:05 +0700")
Nguyen Thai Ngoc Duy <pclouds@gmail.com> writes:
> On Thu, Oct 11, 2012 at 4:13 AM, Junio C Hamano <gitster@pobox.com> wrote:
>> This sounds a lot stronger than "let" to me. All existing callers
>> that assumed that buf to be emptied by the function now has to clear
>> it. "quote: stop resetting output buffer of quote_path_relative()"
>> may better describe what this really does.
>>
>> How should this interact with the logic in the called function that
>> used to say "if we ended up returning an empty string because the
>> path is the same as the base, we should give ./ back", and what
>> should the return value of this function be?
>> ...
>> So what does it mean to have an existing string in the output buffer
>> when calling the function? Is it supposed to be a path to a
>> directory, or just a general uninterpreted string (e.g. a message)?
>
> I prefer the KISS principle in this case: do not interpret existing string.
Sorry, I do not quite understand what you mean.
The original function is about turning one path into a path that is
relative to the other path (e.g. make the result usable for chdir()
when your cwd() is the other path to name that path), and because
you do not want to end up with an empty path, it adds "./" to the
result when the two paths are equal.
That is simple and stupid, in the sense that you can explain in
simple terms what it does even to a stupid person and make him
understand.
If a patch changes one aspect of the implementation of the function,
but keeps other parts intact without thinking the ramifications of
doing so through, and ends up giving the end result unnecessarily
complex semantics, the _patch_ might be simple and stupid, but the
end result is no longer simple.
That is why I asked what it means to "append" and asked you to write
it down for people who may need to decide if this function is an
appropriate thing to call for their new code in the future.
You didn't answer that question, so I have to ask again. What is
the existing string this function appends its result to?
- If it is a leading path (in other words, you are transplanting a
hierarchy to somewhere else --- see and (re)read "But if the
caller did this instead" part from the message you are responding
to), "because you do not want to end up with an empty path, it
adds "./" to the result when the two paths are equal" does not
make sense at all.
- If it is a message that describes the resulting relative path
(the use case above that "transplant" example in the same
message), it needs to add "./" to the result, but the logic to
determine it now needs to take the length of what was in the
buffer when the function was called into account.
- Is there a third possibility?
Whatever your answer is, please make sure the next person who wants
to call this function from his code does not have to ask "Why does
it append "./" when out->len is zero? Shouldn't the condition be
when *rel is an empty string?"
Thanks.
next prev parent reply other threads:[~2012-10-11 16:43 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-09 9:03 'git grep needle rev' attempts to access 'rev:.../.gitattributes' in the worktree Johannes Sixt
2012-10-09 9:38 ` Nguyen Thai Ngoc Duy
2012-10-09 12:01 ` Nguyen Thai Ngoc Duy
2012-10-09 12:41 ` Jeff King
2012-10-09 18:59 ` Junio C Hamano
2012-10-10 5:17 ` Nguyen Thai Ngoc Duy
2012-10-10 5:33 ` Junio C Hamano
2012-10-10 5:45 ` Nguyen Thai Ngoc Duy
2012-10-10 11:34 ` Nguyễn Thái Ngọc Duy
2012-10-10 11:34 ` [PATCH 1/3] quote: let caller reset buffer for quote_path_relative() Nguyễn Thái Ngọc Duy
2012-10-10 21:13 ` Junio C Hamano
2012-10-11 13:04 ` Nguyen Thai Ngoc Duy
2012-10-11 16:42 ` Junio C Hamano [this message]
2012-10-10 11:34 ` [PATCH 2/3] grep: pass true path name to grep machinery Nguyễn Thái Ngọc Duy
2012-10-10 11:34 ` [PATCH 3/3] grep: stop looking at random places for .gitattributes Nguyễn Thái Ngọc Duy
2012-10-10 11:51 ` Johannes Sixt
2012-10-10 12:03 ` Nguyen Thai Ngoc Duy
2012-10-10 12:12 ` Johannes Sixt
2012-10-10 12:32 ` Nguyen Thai Ngoc Duy
2012-10-10 12:43 ` Johannes Sixt
2012-10-10 12:51 ` Nguyen Thai Ngoc Duy
2012-10-10 19:44 ` Junio C Hamano
2012-10-11 5:55 ` Johannes Sixt
2012-10-11 7:04 ` Michael Haggerty
2012-10-11 8:17 ` Nguyen Thai Ngoc Duy
2012-10-10 13:59 ` [PATCH v2 0/2] Re: 'git grep needle rev' attempts to access 'rev:.../.gitattributes' in the worktree Nguyễn Thái Ngọc Duy
2012-10-10 13:59 ` [PATCH v2 1/2] quote: let caller reset buffer for quote_path_relative() Nguyễn Thái Ngọc Duy
2012-10-10 13:59 ` [PATCH v2 2/2] grep: stop looking at random places for .gitattributes Nguyễn Thái Ngọc Duy
2012-10-10 14:21 ` Johannes Sixt
2012-10-10 19:56 ` Junio C Hamano
2012-10-11 5:45 ` Johannes Sixt
2012-10-11 15:51 ` Junio C Hamano
2012-10-12 7:33 ` Johannes Sixt
2012-10-14 4:29 ` Junio C Hamano
2012-10-15 6:02 ` Johannes Sixt
2012-10-15 16:54 ` Junio C Hamano
2012-10-16 6:39 ` Johannes Sixt
2012-10-17 7:05 ` Johannes Sixt
2012-10-17 7:33 ` Junio C Hamano
2012-10-11 1:49 ` Nguyen Thai Ngoc Duy
2012-10-11 3:15 ` Junio C Hamano
2012-10-12 10:49 ` [PATCH v3] " Nguyễn Thái Ngọc Duy
2012-10-12 16:47 ` 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=7v8vbd7yem.fsf@alter.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=j.sixt@viscovery.net \
--cc=pclouds@gmail.com \
--cc=peff@peff.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).