On Tue, Apr 7, 2020 at 8:26 AM Petr Viktorin <pviktori(a)redhat.com> wrote:
On 2020-04-07 12:40, Miro Hrončok wrote:
> On 07. 04. 20 11:06, Petr Viktorin wrote:
>> On 2020-04-03 20:44, Miro Hrončok wrote:
>>> Hello Python packagers.
>>> I have just updated python-rpm-generators to
>>> python-rpm-generators-11-1.fc33 in Rawhide. It uses some fresh stuff
>>> from RPM 4.16 and will not be backported to older releases.
>>> The python(abi) requirement is now added from a RPM Lua macro,
>>> instead of by executing a Shell script. This is a bit faster
>>> especially for packages with a lot of files. For 10 000 files in one
>>> package, the speedup is roughly from ~80 to ~2 seconds (time of the
>>> entire package build incl. creating the files from a Python script).
>>> That is a lot, but most of the real packages have much less files, so
>>> I am afraid you won't feel it.
>> One thing I'm wondering about is: why is python(abi) provided by a
>> generator, anyway?
>> It's provided by a very small set of packages (python2 and python3 in
>> Fedora). Couldn't it just be listed in those specfiles?
> Just to put this into more context: The time overhead is for the
> requires. The provides are filtered on a certain path and even if we are
> automating stuff for 2 packages which indeed might not be needed, it
> doesn't really hurt anything.
> See also
> for me trying to figure out when this provides are useful -- depending
> on the answer there, we might want to keep the automated provides of
> python(abi) only and remove the manual ones.
The part I don't get is: why keep the automated provides over manual
ones. Compared to a line in the relevant spec files, the macro looks
like it adds complexity for no benefit.
I get the automatic *requires* on python(abi) -- that's used by
thousands of packages and easy to forget. But the provides will only
ever be in CPython.
I'd use the same argument to get rid of the manual Provides, but the
reason for why they exist in both manual and generated form is simple:
to prevent human error.
There have been cases in the past where the python RPM was being built
in places where generators are disabled or not going to work properly
(e.g. in this multi-python case), then the manual Provides would
ensure things came out as intended. The automatic Provides generation
is used to ensure that if things are using the generator, that
everything is _ensured_ to be consistent. It's a very bad idea to have
generated requires without generated provides, because you cannot
guarantee the names will match up.
真実はいつも一つ！/ Always, there's only one truth!