Hello,
Sometime there are obsolete of older packages by compat packages. The idea is that when coming from an old package a compatible package is needed. This is what is done in automake16. It is a compat package, and it has
Obsoletes: automake = 1.6.3
It makes sense, however I am not sure that it is that right, since somebody having automake-1.6.3-* would also want to have the latest automake version.
Another issue is that for this scheme to be really effective, one should have in automake15 Obsoletes: automake < 1.6.0 and automake >= 1.5.0
and in automake16 Obsoletes: automake < 1.7.0 and automake >= 1.6.0
which, unless I am wrong, cannot be done in rpm.
So, what do you think? Is that practice wrong, right, or should it be left to the maintainer?
I would personally think that it is wrong, it could be right if one could express that when updating 1.6.x, this package should be installed in addition to the latest package with same name.
-- Pat
On Mon, 27 Aug 2007 21:26:43 +0200, Patrice Dumas wrote:
Hello,
Sometime there are obsolete of older packages by compat packages. The idea is that when coming from an old package a compatible package is needed. This is what is done in automake16. It is a compat package, and it has
Obsoletes: automake = 1.6.3
It makes sense, however I am not sure that it is that right, since somebody having automake-1.6.3-* would also want to have the latest automake version.
Another issue is that for this scheme to be really effective, one should have in automake15 Obsoletes: automake < 1.6.0 and automake >= 1.5.0
and in automake16 Obsoletes: automake < 1.7.0 and automake >= 1.6.0
which, unless I am wrong, cannot be done in rpm.
As in the range 1.5.0 <= x < 1.6.0 ? I don't think that is possible with "Obsoletes". With Requires it is different, since all Requires must be satisfied.
So, what do you think? Is that practice wrong, right, or should it be left to the maintainer?
I would personally think that it is wrong, it could be right if one could express that when updating 1.6.x, this package should be installed in addition to the latest package with same name.
IMO it is right. "Obsoletes" in compat packages is used to rename a package, to move it from the old name to the new name. It doesn't matter whether there is a separate package that upgrades the old one:
automake = 1.6.3 renamed to automake16 = 1.6.3 automake = 1.10 replaces automake = 1.6.3
Also consider that a manual "rpm -Uvh automake16*.rpm" should get rid of the obsolete automake = 1.6.3, too, when they cannot coexist. The version upgrade can be requested on demand.
Le vendredi 07 septembre 2007 à 00:36 +0200, Michael Schwendt a écrit :
As in the range 1.5.0 <= x < 1.6.0 ? I don't think that is possible with "Obsoletes". With Requires it is different, since all Requires must be satisfied.
No it's not, since rpm is lacking true version range support you only need package A providing foo = 1.4.0 and package B foo = 1.8.0 to fool Requires 1.5.0 <= foo < 1.6.0
On Fri, 07 Sep 2007 00:45:49 +0200, Nicolas Mailhot wrote:
Le vendredi 07 septembre 2007 à 00:36 +0200, Michael Schwendt a écrit :
As in the range 1.5.0 <= x < 1.6.0 ? I don't think that is possible with "Obsoletes". With Requires it is different, since all Requires must be satisfied.
No it's not, since rpm is lacking true version range support you only need package A providing foo = 1.4.0 and package B foo = 1.8.0 to fool Requires 1.5.0 <= foo < 1.6.0
Not that notation. But
Requires: foo >= 1.5.0 Requires: foo < 1.6.0
does not work? It must be
Requires: foo >= 1.5.0 Conflicts: foo >= 1.6.0
?
Le vendredi 07 septembre 2007 à 01:04 +0200, Michael Schwendt a écrit :
On Fri, 07 Sep 2007 00:45:49 +0200, Nicolas Mailhot wrote:
Le vendredi 07 septembre 2007 à 00:36 +0200, Michael Schwendt a écrit :
As in the range 1.5.0 <= x < 1.6.0 ? I don't think that is possible with "Obsoletes". With Requires it is different, since all Requires must be satisfied.
No it's not, since rpm is lacking true version range support you only need package A providing foo = 1.4.0 and package B foo = 1.8.0 to fool Requires 1.5.0 <= foo < 1.6.0
Not that notation. But
Requires: foo >= 1.5.0 Requires: foo < 1.6.0
does not work? It must be
Requires: foo >= 1.5.0 Conflicts: foo >= 1.6.0
This blacklists newer foo-providing packages from the system, when what you really want is ensure there is a foo in the right range (and do not care if there are also older or newer foo provides)
On Fri, 07 Sep 2007 08:07:21 +0200, Nicolas Mailhot wrote:
Le vendredi 07 septembre 2007 à 01:04 +0200, Michael Schwendt a écrit :
On Fri, 07 Sep 2007 00:45:49 +0200, Nicolas Mailhot wrote:
Le vendredi 07 septembre 2007 à 00:36 +0200, Michael Schwendt a écrit :
As in the range 1.5.0 <= x < 1.6.0 ? I don't think that is possible with "Obsoletes". With Requires it is different, since all Requires must be satisfied.
No it's not, since rpm is lacking true version range support you only need package A providing foo = 1.4.0 and package B foo = 1.8.0 to fool Requires 1.5.0 <= foo < 1.6.0
Not that notation. But
Requires: foo >= 1.5.0 Requires: foo < 1.6.0
does not work? It must be
Requires: foo >= 1.5.0 Conflicts: foo >= 1.6.0
This blacklists newer foo-providing packages from the system, when what you really want is ensure there is a foo in the right range (and do not care if there are also older or newer foo provides)
That's sufficient. To have an old foo and new foo in the same namespace is a corner-case anyway. For a long time, the new foo would have upgraded the old foo (even wrt virtual provides), breaking dependencies on older foo.
On Fri, Sep 07, 2007 at 12:36:16AM +0200, Michael Schwendt wrote:
IMO it is right. "Obsoletes" in compat packages is used to rename a package, to move it from the old name to the new name. It doesn't matter whether there is a separate package that upgrades the old one:
automake = 1.6.3 renamed to automake16 = 1.6.3 automake = 1.10 replaces automake = 1.6.3
Ok. I hadn't understood it did that. So it fully does what I was asking for, that is install both automake = 1.10 and automake16 = 1.6.3.
Maybe this should be documented somewhere?
-- Pat