I just wanted to let people know that I just committed changes to the framework that may result in visible behavioral changes for users.

When bundles are updated or uninstalled, the packages exported by those bundles are marked for removal. In the old days, Oscar would still allow new bundles to resolve to these "removal pending" packages. During the R4 spec writing days, there was a decision to say that you should not resolve to "removal pending" packages. Thus, I modified Felix a little while back to not wire new bundles to such packages.

I was confronted with a use case from Eric Swindwell that was giving him some grief, so I looked into it and tracked it down to being related to this. As it turns out, my recollection of the R4 spec wasn't 100% accurate since section 4.3.7 said old versions of updated packages continue to be available to future bundles, but 4.3.8 said uninstalled packages are not available to future bundles. This surprised me, so I started to discuss this with Peter Kriens, which led to us contacting BJ Hargrave, which ultimately led to a conference call including Tom Watson.

The end result is that we decided to "improve" this situation for the imminent release of R4.1. The new rule is now the same for both update and uninstall, which is: if the uninstalled/updated bundle has any of its packages in use at the time of the uninstall/update, then all of its packages remain available for future bundle resolution until a refresh. If none of the packages of the uninstalled/updated bundle are in use at the time of the uninstall/update, then the none of its packages will be available for future bundle resolution.

Up until my commit, Felix ignored all "removal pending" packages, now it behaves according to the above rule. This includes the fact that Felix now immediately calls "refreshPackages()" on any uninstalled/updated bundle if none of its exports are being used.

I think this situation is better and avoids some ugly situations where you end up with bundles being forced to be wired to new or different versions of a given package after an update/uninstall, which results in reduce interoperability because existing bundles cannot communicate with these newly resolved bundles until after a refresh.

At any rate, if you notice different behavior in situation related to this, you should at least understand why.

-> richard

Reply via email to