Re: [PATCH v2 5/6] bisect--helper: `is_expected_rev` & `check_expected_revs` shell function in C

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hey Christian,

On Fri, Jun 17, 2016 at 2:17 AM, Christian Couder
<christian.couder@xxxxxxxxx> wrote:
> On Thu, Jun 16, 2016 at 9:25 PM, Pranit Bauva <pranit.bauva@xxxxxxxxx> wrote:
>> Hey Eric,
>>
>> On Fri, Jun 17, 2016 at 12:46 AM, Eric Sunshine <sunshine@xxxxxxxxxxxxxx> wrote:
>>> On Thu, Jun 16, 2016 at 3:05 PM, Pranit Bauva <pranit.bauva@xxxxxxxxx> wrote:
>>>> On Thu, Jun 16, 2016 at 2:44 AM, Eric Sunshine <sunshine@xxxxxxxxxxxxxx> wrote:
>>>>> On Wed, Jun 15, 2016 at 10:00 AM, Pranit Bauva <pranit.bauva@xxxxxxxxx> wrote:
>>>>>> Reimplement `is_expected_rev` & `check_expected_revs` shell function in
>>>>>> C and add a `--check-expected-revs` subcommand to `git bisect--helper` to
>>>>>> call it from git-bisect.sh .
>>>>>> [...]
>>>>>> Signed-off-by: Pranit Bauva <pranit.bauva@xxxxxxxxx>
>>>>>> ---
>>>>>> diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c
>>>>>> @@ -162,13 +162,44 @@ static int bisect_reset(const char *commit)
>>>>>> +static int is_expected_rev(const char *expected_hex)
>>>>>> +{
>>>>>> +       struct strbuf actual_hex = STRBUF_INIT;
>>>>>> +       int res;
>>>>>> +
>>>>>> +       if (strbuf_read_file(&actual_hex, git_path_bisect_expected_rev(), 0) < 0) {
>>>>>> +               strbuf_release(&actual_hex);
>>>>>> +               return 0;
>>>>>> +       }
>>>>>> +
>>>>>> +       strbuf_trim(&actual_hex);
>>>>>> +       res = !strcmp(actual_hex.buf, expected_hex);
>>>>>> +       strbuf_release(&actual_hex);
>>>>>> +       return res;
>>>>>> +}
>>>>>
>>>>> Not worth a re-roll, but this could be re-structured to avoid having
>>>>> to remember to release the strbuf at all exits:
>>>>>
>>>>>     struct strbuf actual_hex = ...;
>>>>>     int res = 0;
>>>>>
>>>>>     if (strbuf_read_file(...) >= 0) {
>>>>>         strbuf_trim(...);
>>>>>         res = !strcmp(...);
>>>>>     }
>>>>>     strbuf_release(...);
>>>>>     return res;
>>>>>
>>>>> Alternately:
>>>>>
>>>>>     if (strbuf_read_file(...) < 0)
>>>>>         goto done;
>>>>>
>>>>>     strbuf_trim(...);
>>>>>     res = !strcmp(...);
>>>>>
>>>>> done:
>>>>>     strbuf_release(...);
>>>>>     return res;
>>>>>
>>>>> which is a bit less compact.
>>>>
>>>> I will avoid this for the reason that I will have to create a label
>>>> for a lot of functions. If I choose to do this for one function, I
>>>> think it would be more appropriate to do the same for other functions.
>>>> There would be a lot of functions in future which would be in the same
>>>> scenario and creating a separate label for each of them would be quite
>>>> tedious. What do you think?
>>>
>>> Not sure what you're talking about. Label names are not shared across
>>> functions. Anyhow, the first suggestion I presented above is more
>>> concise than the 'goto' version.
>>
>> Yes I am aware of the fact that labels aren't shared across functions.
>> What I meant by "separate label" was that I will have to make a label
>> "fail" in each function. But I recently noticed that its used quite a
>> lot so I think it would be okay to use it. Will re-roll with using
>> labels and goto.
>
> My opinion is that if there is a more concise version without labels
> and gotos, it's better to use it, so I would suggest Eric's first
> suggestion which is:
>
>>     struct strbuf actual_hex = ...;
>>     int res = 0;
>>
>>     if (strbuf_read_file(...) >= 0) {
>>         strbuf_trim(...);
>>         res = !strcmp(...);
>>     }
>>     strbuf_release(...);
>>     return res;

Sure I could do that!

Regards,
Pranit Bauva
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]