Re: pgsql: Skip \password TAP test on old IPC::Run versions

Поиск
Список
Период
Сортировка
От Daniel Gustafsson
Тема Re: pgsql: Skip \password TAP test on old IPC::Run versions
Дата
Msg-id B05CB1A2-4AB9-484D-9B5D-A492349E208C@yesql.se
обсуждение исходный текст
Ответ на Re: pgsql: Skip \password TAP test on old IPC::Run versions  (Andrew Dunstan <andrew@dunslane.net>)
Список pgsql-committers
> On 8 Apr 2023, at 22:37, Andrew Dunstan <andrew@dunslane.net> wrote:
> On 2023-04-08 Sa 16:20, Daniel Gustafsson wrote:
>>> On 8 Apr 2023, at 18:23, Tom Lane <tgl@sss.pgh.pa.us>
>>>  wrote:
>>>
>>> Andrew Dunstan
>>> <andrew@dunslane.net>
>>>  writes:
>>>
>>>> Stylistic nitpick: It's not necessary to have 2 evals here:
>>>>
>>>> +   skip "IO::Pty and IPC::Run >= 0.98 required", 1 unless
>>>> +       (eval { require IO::Pty; } && eval { $IPC::Run::VERSION >=
>>>> '0.98' });
>>>>
>>>> just say "eval { require IO::Pty; return $IPC::Run::VERSION >= '0.98'; }"
>>>>
>>> What I was wondering about was if it's safe to depend on the VERSION
>>> being fully numeric.
>>>
>> Reading documentation online pointed at this being the established way, and
>> trying to read the Perl5 code it seems to essentially turn whatever is set in
>> $VERSION into a numeric.
>>
>>
>>> Can't we write "use IPC::Run 0.98;" and let
>>> some other code manage the version comparison?
>>>
>> We can, but that AFAIK (Andrew might have a better answer) requires the below
>> diff which I think leaves some readability to be desired:
>>
>> -   (eval { require IO::Pty; } && eval { $IPC::Run::VERSION >= '0.98' });
>> +   (eval { require IO::Pty; } && !!eval { IPC::Run->VERSION('0.98'); 1 });
>>
>> This is needed since ->VERSION die()'s if the version isn't satisfied.  That
>> seems to work fine though, and will ensure that the UNIVERSAL version method
>> does the version comparison.  We can of course expand the comment on why that
>> construct is needed.
>
> I still don't understand why you're using two evals here. This should be sufficient and seems simpler to me:
>
>   unless eval { require IO:Pty; IPC::Run->VERSION('0.98'); }

Because I was trying to get "use IPC::Run" to work and that required multiple
evals, and got stuck on that track.  I agree that your version is better and
does indeed work (and offloads version comparison to the UNIVERSAL class), so
I'll go ahead with the below.

-   (eval { require IO::Pty; } && eval { $IPC::Run::VERSION >= '0.98' });
+   eval { require IO::Pty; IPC::Run->VERSION('0.98'); };

--
Daniel Gustafsson




В списке pgsql-committers по дате отправления:

Предыдущее
От: Andrew Dunstan
Дата:
Сообщение: Re: pgsql: Skip \password TAP test on old IPC::Run versions
Следующее
От: Daniel Gustafsson
Дата:
Сообщение: pgsql: Simplify version check for SKIP clause