On Wed, Dec 5, 2012 at 4:10 PM, PJ Eby <span dir="ltr"><<a href="mailto:pje@telecommunity.com" target="_blank">pje@telecommunity.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div>On Wed, Dec 5, 2012 at 2:46 AM, Donald Stufft <<a href="mailto:donald.stufft@gmail.com" target="_blank">donald.stufft@gmail.com</a>> wrote:<br>
> There's nothing preventing an installer from, during it's attempt to<br>
> install B, see it Obsoletes A, looking at what depends on A and<br>
> warning the user what is going to happen and prompt it.<br>
<br>
</div>Unless the user wrote those things that depend on A, they aren't going<br>
to be in a position to do anything about it.  (Contrast with a distro,<br>
where dependencies are indirect - the other package will depend on an<br>
abstraction provided by both A and B, rather than directly depending<br>
on A *or* B.)<br>
<br>
(Also note that all the user knows at this point is that the author of<br>
B *claims* to obsolete A, not that the authority managing the<br>
repository as a whole has decreed B to obsolete A.)<br>
<div><br>
<br>
> You can automatically uninstall A from B in an automatic dependency<br>
management system<br>
<br>
</div>My point is that this can only work if the "obsoleting" is effectively<br>
just a rename, in which case the field should be "renames", or better<br>
still, "renamed-to" on the originating package.<br>
<br>
As I've mentioned repeatedly, Obsoleted-By handles more use cases than<br>
Obsoletes, and has at least one practical automated use case<br>
(notifying a developer that their project is depending on something<br>
that's obsolete).<br>
<br>
Also, the example given as a use case in the PEP (Gorgon to Torqued)<br>
is not just wrong, it's *actively misleading*.  Gorgon and Torqued are<br>
transparent renames of Medusa and Twisted, which do not share a common<br>
API and thus cannot be used as the subject of any automated processing<br>
(in the case of Obsoletes) without doing some kind of PyPI metadata<br>
search for every package installed every time a package is installed.<br>
<div><br>
<br>
> I think Obsoletes as is an alright bit of information.<br>
<br>
</div>1. It cannot be used to prevent the installation of an obsolete<br>
package without a PyPI metadata search, since you must examine every<br>
*other* package on PyPI to find out whether some package obsoletes the<br>
one you're trying to install.<br>
<br>
2. Unlike RPM, where metadata is provided by a trusted third party,<br>
Obsoletes can be specified by any random forker (no pun intended),<br>
which makes this information a mere advertisement... and an<br>
advertisement to the wrong audience at that, because they must have<br>
*already* found B in order to discover that it replaces A!<br>
<br>
3. Nobody has yet supplied a use case where Obsoletes would not be<br>
strictly improved upon by Obsoleted-By.  (Note that "the author of<br>
package X no longer maintains it" does not equal "package Y is<br>
entitled to name itself the successor and enforce this upon all users"<br>
-- this can work in RPM only because it is a third party Z who<br>
declares Y the successor to X, and there is no such party Z in the<br>
Python world.)<br>
<div><br>
<br>
> I don't see this in this thread, could you link it again?<br>
<br>
</div><a href="http://mail.python.org/pipermail/catalog-sig/2010-October/003368.html" target="_blank">http://mail.python.org/pipermail/catalog-sig/2010-October/003368.html</a><br>
<a href="http://mail.python.org/pipermail/catalog-sig/2010-October/003364.html" target="_blank">http://mail.python.org/pipermail/catalog-sig/2010-October/003364.html</a><br>
<br>
These posts also address why a "Conflicts" field is *also* unlikely to<br>
be particularly useful in practice, in part for reasons that relate to<br>
differences between RPM-land and Python-land.  (For example, RPMs can<br>
conflict over things besides files, due to runtime and configuration<br>
issues that are out-of-scope for a Python installer tool.)<br>
<br>
While it's certainly desirable to not invent wheels, it's important to<br></blockquote><div><br></div><div>My desire is to invent the useful "wheel" binary package format in a reasonable and limited amount of time by making changes to Metadata 1.2 and implementing the new metadata format and wheel in distribute and pip. Help me out by allowing useless but un-changed fields to remain in this version of the PEP. I am done with the PEP and submit that it is not worse than its predecessor.<br>
</div>
<div><br></div><div>I can participate in a discussion about any of the following:</div><div><h1 style="font-family:Georgia,'Bitstream Vera Serif','New York',Palatino,serif;font-weight:normal;line-height:1em;font-size:23px;color:rgb(35,71,100);margin:0.7em 0px">

Summary of Differences From <a href="http://www.python.org/dev/peps/pep-0345" style="color:rgb(85,26,139);text-decoration:initial" target="_blank">PEP 345</a></h1><ul style="padding-left:0px;line-height:17.816667556762695px;font-size:15px;margin-left:1em;font-family:Arial,Verdana,Geneva,'Bitstream Vera Sans',Helvetica,sans-serif">

<li style="margin-left:1em;padding-left:0px;line-height:1.5">Metadata-Version is now 1.3.</li><li style="margin-left:1em;padding-left:0px;line-height:1.5">Values are now expected to be UTF-8.</li><li style="margin-left:1em;padding-left:0px;line-height:1.5">

A payload (containing the description) may appear after the headers.</li><li style="margin-left:1em;padding-left:0px;line-height:1.5">Added <cite>extra</cite> to environment markers.</li><li style="margin-left:1em;padding-left:0px;line-height:1.5">

Most fields are now optional.</li><li style="margin-left:1em;padding-left:0px;line-height:1.5">Changed fields:<ul style="margin-left:1em;padding-left:0px"><li style="margin-left:1em;padding-left:0px;line-height:1.5">Description</li>

<li style="margin-left:1em;padding-left:0px;line-height:1.5">Project-URL</li><li style="margin-left:1em;padding-left:0px;line-height:1.5">Requires-Dist</li></ul></li><li style="margin-left:1em;padding-left:0px;line-height:1.5">

Added fields:<ul style="margin-left:1em;padding-left:0px"><li style="margin-left:1em;padding-left:0px;line-height:1.5">Extension</li><li style="margin-left:1em;padding-left:0px;line-height:1.5">Provides-Extra</li><li style="margin-left:1em;padding-left:0px;line-height:1.5">

Setup-Requires-Dist</li></ul></li></ul></div></div></div>