From: Lars Schneider <larsxschneider@gmail.com>
To: "Torsten Bögershausen" <tboegi@web.de>
Cc: Git Mailing List <git@vger.kernel.org>,
Junio C Hamano <gitster@pobox.com>, Jeff King <peff@peff.net>,
e@80x24.org, ttaylorr@github.com, peartben@gmail.com
Subject: Re: [PATCH v5 4/5] convert: move multiple file filter error handling to separate function
Date: Mon, 19 Jun 2017 19:47:22 +0200 [thread overview]
Message-ID: <AE3AB022-B7C8-4C13-AF8F-E561E9AA57D2@gmail.com> (raw)
In-Reply-To: <cedddaed-829d-9bde-3399-5b4e85dcbe57@web.de>
> On 19 Jun 2017, at 19:18, Torsten Bögershausen <tboegi@web.de> wrote:
>
> On 2017-06-18 13:47, Lars Schneider wrote:
>>
>>> On 18 Jun 2017, at 09:20, Torsten Bögershausen <tboegi@web.de> wrote:
>>>
>>>
>>> On 2017-06-01 10:22, Lars Schneider wrote:
>>>> This is useful for the subsequent patch 'convert: add "status=delayed" to
>>>> filter process protocol'.
>>>
>>> May be
>>> Collecting all filter error handling is useful for the subsequent patch
>>> 'convert: add "status=delayed" to filter process protocol'.
>>
>> I think I get your point. However, I feel "Collecting" is not the right word.
>>
>> How about:
>> "Refactoring filter error handling is useful..."?
>
> OK
OK, I'll change it in the next round.
>>>>
>>>> Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
>>>> ---
>>>> convert.c | 47 ++++++++++++++++++++++++++---------------------
>>>> 1 file changed, 26 insertions(+), 21 deletions(-)
>>>>
>>>> diff --git a/convert.c b/convert.c
>>>> index f1e168bc30..a5e09bb0e8 100644
>>>> --- a/convert.c
>>>> +++ b/convert.c
>>>> @@ -565,6 +565,29 @@ static int start_multi_file_filter_fn(struct subprocess_entry *subprocess)
>>>> return err;
>>>> }
>>>>
>>>> +static void handle_filter_error(const struct strbuf *filter_status,
>>>> + struct cmd2process *entry,
>>>> + const unsigned int wanted_capability) {
>>>> + if (!strcmp(filter_status->buf, "error")) {
>>>> + /* The filter signaled a problem with the file. */
>>>> + } else if (!strcmp(filter_status->buf, "abort") && wanted_capability) {
>>>> + /*
>>>> + * The filter signaled a permanent problem. Don't try to filter
>>>> + * files with the same command for the lifetime of the current
>>>> + * Git process.
>>>> + */
>>>> + entry->supported_capabilities &= ~wanted_capability;
>>>> + } else {
>>>> + /*
>>>> + * Something went wrong with the protocol filter.
>>>> + * Force shutdown and restart if another blob requires filtering.
>>>> + */
>>>> + error("external filter '%s' failed", entry->subprocess.cmd);
>>>> + subprocess_stop(&subprocess_map, &entry->subprocess);
>>>> + free(entry);
>>>> + }
>>>> +}
>>>> +
>>>> static int apply_multi_file_filter(const char *path, const char *src, size_t len,
>>>> int fd, struct strbuf *dst, const char *cmd,
>>>> const unsigned int wanted_capability)
>>>> @@ -656,28 +679,10 @@ static int apply_multi_file_filter(const char *path, const char *src, size_t len
>>>> done:
>>>> sigchain_pop(SIGPIPE);
>>>>
>>>> - if (err) {
>>>> - if (!strcmp(filter_status.buf, "error")) {
>>>> - /* The filter signaled a problem with the file. */
>>> Note1: Do we need a line with a single ";" here ?
>>
>> The single ";" wouldn't hurt but I don't think it is helpful either.
>> I can't find anything in the coding guidelines about this...
>
> OK about that. I was thinking to remove the {}, and the we -need- the ";"
True. However, I prefer the {} style here. Would that be OK with you?
Plus, this commit is not supposed to change code. I just want to move the
code to a different function.
>>> Question: What should/will happen to the file ?
>>> Will Git complain later ? Retry later ?
>>
>> The file is not filtered and Git does not try, again.
>> That might be OK for certain filters:
>> If "filter.foo.required = false" then this would be OK.
>> If "filter.foo.required = true" then this would cause an error.
>
> Does it make sense to add it as a comment ?
> I know, everything is documented otherwise, but when looking at the source
> code only, the context may be useful, it may be not.
I agree. I'll add a comment!
>>
>>>> - } else if (!strcmp(filter_status.buf, "abort")) {
>>>> - /*
>>>> - * The filter signaled a permanent problem. Don't try to filter
>>>> - * files with the same command for the lifetime of the current
>>>> - * Git process.
>>>> - */
>>>> - entry->supported_capabilities &= ~wanted_capability;
>>> Hm, could this be clarified somewhat ?
>>> Mapping "abort" to "permanent problem" makes sense as
>>> such, but the only action that is done is to reset
>>> a capablity.
>>
>> I am not sure what you mean with "reset capability". We disable the capability here.
>> That means Git will not use the capability for the active session.
>
> Sorry, my wrong - reset is a bad word here.
> "Git will not use the capability for the active session" is perfect!
OK :)
>>> /*
>>> * The filter signaled a missing capabilty. Don't try to filter
>>> * files with the same command for the lifetime of the current
>>> * Git process.
>>> */
>>
>> I like the original version better because the capability is not "missing".
>> There is "a permanent problem" and the filter wants to signal Git to not use
>> this capability for the current session anymore.
>
> Git and the filter are in a negotiation phase to find out which side is able
> to do what.So I don't think there is a "problem" (in the sense that I understand
> it) at all.
No, at this point they are passed the negotiation phase. A problem actually
happened.
> And back to the "abort":
> I still think that the word feels to harsh...
> "abort" in my understanding smells too much "a program is terminated".
> If it is not too late, does it may sense to use something like "nack" ?
Well, at this point it is too late because we don't retry.
Plus, I would prefer to not change code here as this commit is supposed
to just move existing code. Changing "abort" would change the protocol
that was released with Git 2.11.
>>
>>> # And the there is a question why the answer is "abort" and not
>>> # "unsupported"
>>
>> Because the filter supports the capability. There is just some kind of failure that
>> that causes the capability to not work as expected. Again, depending on the filter
>> "required" flag this is an error or not.
>>
>
> May be I misunderstood the whole sequence, and abort is the right thing.
> If yes, how about this ?
>
> } else if (!strcmp(filter_status->buf, "abort") && wanted_capability) {
> /*
> * Don't try to filter files with this capability for lifetime
> * of the current Git process.
> */
> entry->supported_capabilities &= ~wanted_capability;
How about this:
The filter signaled a problem. Don't try to filter files with this capability
for the lifetime of the current Git process.
?
Thanks,
Lars
next prev parent reply other threads:[~2017-06-19 17:47 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-01 8:21 [PATCH v5 0/5] convert: add "status=delayed" to filter process protocol Lars Schneider
2017-06-01 8:21 ` [PATCH v5 1/5] t0021: keep filter log files on comparison Lars Schneider
2017-06-01 8:22 ` [PATCH v5 2/5] t0021: make debug log file name configurable Lars Schneider
2017-06-01 8:22 ` [PATCH v5 3/5] t0021: write "OUT" only on success Lars Schneider
2017-06-01 8:22 ` [PATCH v5 4/5] convert: move multiple file filter error handling to separate function Lars Schneider
2017-06-18 7:20 ` Torsten Bögershausen
2017-06-18 11:47 ` Lars Schneider
2017-06-19 17:18 ` Torsten Bögershausen
2017-06-19 17:47 ` Lars Schneider [this message]
2017-06-01 8:22 ` [PATCH v5 5/5] convert: add "status=delayed" to filter process protocol Lars Schneider
2017-06-02 2:21 ` Junio C Hamano
2017-06-05 11:36 ` Lars Schneider
2017-06-24 14:19 ` Jeff King
2017-06-24 17:22 ` Lars Schneider
2017-06-24 18:51 ` Junio C Hamano
2017-06-24 20:36 ` Jeff King
2017-06-24 20:32 ` Jeff King
2017-06-01 9:44 ` [PATCH v5 0/5] " Junio C Hamano
2017-06-02 2:06 ` Junio C Hamano
2017-06-24 14:23 ` Jeff King
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=AE3AB022-B7C8-4C13-AF8F-E561E9AA57D2@gmail.com \
--to=larsxschneider@gmail.com \
--cc=e@80x24.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peartben@gmail.com \
--cc=peff@peff.net \
--cc=tboegi@web.de \
--cc=ttaylorr@github.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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).