Currently, work on PEAR 1.4.0 is progressing at a smooth clip. In an early morning message to the pecl-dev mailing list, I proposed (again) moving pecl stuff into its own channel. After that, I took my morning shower and as usually happens, the brainstorms came along with the water. Moving packages from one channel to another is likely to be an issue again in the future. Currently, this is simply not possible. Two packages on different channels are not compatible...
Currently, work on PEAR 1.4.0 is progressing at a smooth clip. In an early morning message to the pecl-dev mailing list, I proposed (again) moving pecl stuff into its own channel. After that, I took my morning shower and as usually happens, the brainstorms came along with the water. Moving packages from one channel to another is likely to be an issue again in the future. Currently, this is simply not possible. Two packages on different channels are not compatible.
When PECL packages move to the pecl.php.net channel, this could have a serious negative effect if done poorly. First of all, people using older versions of PEAR would suddenly find that commands such as upgrade-all fail to function. In addition, older releases of PECL packages use package.xml 1.0, which is another way of saying the pear.php.net channel is hard-coded into the release.
The most elegant solution to the problem involves adding a new return value to the package.getDownloadURL xml-rpc function. Currently, package.getDownloadURL returns a 2-3 item struct, which translates into an associative array in php. The first item is "version", the second "info" and the third is "url". Info is simply a copy of the package.xml from the release, and url is the location from which to download the release, if one is available that fits the constraints specified in the input parameters.
If a package has moved to channel pecl.php.net, it would be a simple task to check (server-side) on whether the release date is before the date that pecl.php.net existed. If the release is old, return it as a pear.php.net package. If the release is new, return a 1-item array that specifies the channel has migrated to pecl.php.net.
This still does not solve the issue of downgrading back to the old channel (not really possible without removing any of channel's benefits and opening up a whole slew of security holes), and dependencies on pear.php.net/peclpackagename would not allow upgrading to newer versions.
Perhaps a little more thought will solve these issues as well.