On 03/10/2016 12:25 PM, Tom Hughes wrote:
On 10/03/16 16:20, Stephen Gallagher wrote:
> I've just pushed a new update to the repository that also includes Node.js 5.8.0
> (released yesterday). Of course, since the minor version jumped, binary packages
> may need a rebuild.
>
> If we're going to look into supporting the rapidly-updating 5.x branch in F25, I
> wonder if we should modify the automatic dependency-generation to do:
> Requires: nodejs(abi) >= %{abi_major}.%{abi_minor}
> Conflicts: nodejs(abi) >= %{abi_major+1}
>
> Of course, I have no idea how this automatic dependency is created, so I don't
> know how complicated it will be to fix. But I think we have to, since 5.x seems
> to bump minor versions at least once every couple months. Assuming it's properly
> following semantic versioning, the rebuild shouldn't actually be needed unless
> we bump the major version.
Oh it's easy to do - the nodejs spec file creates nodejs_native.req in the
%install section with those rules.
Why makes the second conflicts though? Why not:
Requires: nodejs(abi) >= %{abi_major}.%{abi_minor}
Requires: nodejs(abi) < %{abi_major+1}
Which is what the dependency generator would do for a caret dependency on a node
module.
After some discussion on #fedora-devel, we opted to change the virtual Provides: to
Provides: nodejs(abi%{nodejs_major}) = %{nodejs_major}.%{nodejs_minor}
and then the binary packages will get
Requires: nodejs(abi%{nodejs_major}) >= %{nodejs_major}.%{nodejs_minor}
(or, without the variables:)
Provides: nodejs(abi5) = 5.8
Requires: nodejs(abi5) >= 5.8
The advantage this gives us is that if Node.js ever decides to offer two ABI
versions together (such as if they have a total rewrite and thus opt to keep the
old version around for a transition period), we'd be able to have
Provides: nodejs(abiX) = X.Y
and
Provides: nodejs(abiX+1) = X+1.Z
This is now building in my COPR for 5.8. After this, we won't need to *force* a
rebuild of a package unless the major Node version changes again.