2017-04-25 16:11 GMT+02:00 Dale Henrichs <[email protected]>:
[ Shortened for brevity ... ] > >>> >> Hum. I'm not trying to determine a version for the configurations present >> in the image... and #primeRegistryFromImage seems to, and then I seem to >> get errors because it selects a wrong version (at least I got an error >> doing that with ConfigurationOfEpicea, set at version 7.8.p4 where it >> should be version 8.1.3, and Metacello fails with a version not found). >> >> I'll look a bit deeper to see what is happening and how to reproduce it. >> > It is very likely that you are running into the very type of bug that > caused me to go with the Metacello registry in the first place ... It can > be impossible for Metacello to guess the correct version of a loaded > configuration ... I'm not sure it is worth much effort to try to > characterize the problem ... better would be for Pharo to use "Metacello > new" to build the image, so that the loaded versions are registered in the > first place ... > Of course... Now, I just compute the closure of all the configuration version specs over the set of packages present in the image, by name. If a package name is present in one of the version specs, then it is considered as part of the project. > > If you insist on looking deeper:) a common cause of wrong guesses is that > the configuration specifies a project version dependency or a version of > package that is later than the versions actually loaded in the image --- > this can happen when only a partial load of the configuration is done where > those projects or packages are not actually loaded by the configuration > itself --- without the actual registration information from the load, > Metacello looks at the loaded projects/packages and tries to match it with > a version of the configuration and this "false" dependency information > causes Metacello to look for an earlier version that matches ... Yes, this is the reason. In the case of Epicea in the latest image, the last version is 8.1.3, but ConfigurationOfEpicea>>#currentVersion returns 7.8p4. 7.8p4 is the highest version for which there is a dependency on the STON project, dependency which is respected in the image (version requested is 0.17, version present is 0.23). 7.8p4 and all higher versions also have a dependency on Smark, which isn't loaded. Would that mean that: - If one of the project in requirements is present in the image, then the version is considered current (here, for 7.8p4, Ston is present, Smark is not) if, for the packages of the project, all are present with versions higher than the current configuration version spec? - If none of the projects in requirements are present in the image, then the version is not considered current (in 8.1.3, Smark is not present but I see no dependency on Ston[*]) ? I have a feeling this is a strange result, and I'd prefer 8.1.3 to have the same validity as 7.8p4. Is this MetacelloProject>>#currentVersion used to determine if a project should be upgraded? Another question, related to the original topic: if the current configurations in the image are in this state, is it a good idea to leave them in? Would it have a chance of triggering incorrect updates or suspicious errors[**] if we start using them to load Metacello projects that depends on them? Thierry [*] The dependency on Ston is removed starting version 7.8p5 [**] for example, a project requiring Epicea >= 8.0 > > > Dale > > > >
