I reflected a bit more on your requirements. How about the following? Put a separate reference for the project in each platform-specific section. I combine this with a #file: declaration because otherwise your package cache will play dirty tricks on you if it has a newer version of the ConfigurationOfB in it. This is really important. spec for: #common do:[ spec project: 'B' "empty def to allow dependency reference inside the #common secion" ] spec for: #pharo2.x do:[ spec project: 'B' with: [ spec className:'ConfigurationOfB'; versionString: #stable; file: 'ConfigurationOfB-johndoe.1.mcz'; repository: '<meta repo for pharo 2.0>' ] ] spec for: #pharo3.x do:[ spec project: 'B' with: [ spec className:'ConfigurationOfB'; versionString: #stable; file: 'ConfigurationOfB-johndoe.2.mcz'; repository: '<meta repo for pharo 3.0>' ] ] On 22 Mar 2014, at 23:06, Pharo4Stef <pharo4Stef@free.fr> wrote:
We were discussing about that. My point is that the system should work if the catalog fall apart. Now others told me that in other community this is the inverse. People only refer to the catalog.
Since we did not get last year and this year the engineer I requested to work on the validation of distirbution we did not make progress on that front because we are busy.
For me I do not use SqueakSource not because it is written Squeak but because I think that squeaksource is over and too old.
Stef
I'm currently browsing the various ConfigurationOf in MetaRepoForPharo30 catalog hoping to find a pattern to serve as guidelines, but what I see is a messy variety of solutions:
- direct reference to specific source repositories of package B as Johan suggested (and the successive baselines are effectively tracking motions of B) IMO the worst thing, I don't manage B and don't want to update my ConfigurationOfA each time B moves.
- references to ConfigurationOfB thru squeaksource MetacelloRepository. My preferred solution. I don't care if the catalog is centralized on squeaksource, Smalltalkhub or whatever, but I want a centralized catalog
Me too. Now the question is the following one. Ideally I would like to have one inbox and that configuration move to the catalog for their version. (Because I do not see the point of having around old versions of projects that do not load in the given version). I explained that in the Pharo vision document. Now may be other solutions are better.
Stef
- refrences thru MetaRepo catalog du jour (tracking motions of MetaRepo across baselines) My original question, using secondary catalogs is not a problem if they are just a duplicata, but I prefer to ask, because it sounds strange to have multiple catalogs just to implement a filter (the filter being select those packages that are tested and approved in pharo x.y)... Certainly a workaround for a missing feature of Metacello.
- a mixture of the 3 solutions above for some packages! That appears as randomness from my POV, or like of guidance
So again, what are the best practices currently, and could we think of it in a bit longer term?
2014-03-22 21:51 GMT+01:00 Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com>:
2014-03-22 21:27 GMT+01:00 Johan Brichau <johan@inceptive.be>:
I don't understand what squeaksource has to do with that. With main repository, I mean the repository of the project itself.
Almost all ConfigurationOfXXX are hosted together with the project itself. They are also referenced in that repo. The MetacelloRepo or MetaRepos are almost always secondary copies (if not, they should be)
Johan
Arghh NOOOO, so that is really going to be a problem for me ! With MetacelloRepository I absolutely don't care where to find a specific package, I have some kind of centralized catalog.
Now, if I must track each and every motion of package B from squeaksource to ss3 to SmalltalkHub to github to (what's next ?), the idea of catalog is completely broken then...
Nicolas
On 22 Mar 2014, at 21:10, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
OK, if the MetacelloRepository on squeaksource can still serve as reference, I'm perfectly OK with it, I don't know why I had this impression that anything beginning with those 6 letters was going to be seen as a problem ;)
2014-03-22 18:53 GMT+01:00 Johan Brichau <johan@inceptive.be>: Why can you not reference the main repository? The meta repository is just a place where the configuration loader tool fetches them.
Platform-specific elements go in the separate 'sections' of a baseline or version method.
Don't make separate branches of the same ConfigurationOf class. You will not only make your life hard but also confuse all users!
Maybe you can explain why you think you need those?
Johan
On 22 Mar 2014, at 18:20, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
I have some packages A that depend on another package B. In Metacello, I can easily declare the dependency spec className: 'ConfigurationOfB'; versionString: #'stable'; repository: ' http://www.squeaksource.com/MetacelloRepository' ]. But the repository is hardcoded here.
My problem is that I'd like to edit a ConfigurationOfA valid for pharo 1.x, 2.0.x and 3.0.x (so far so good) and put a copy in MetaRepoForPharo20 and another copy in MetaRepoForPharo30.
Since the repository is hardcoded, this is going to be a problem because the MetaRepo will then cross-ref other repositories and weaken robustness or miss uptodate ConfigurationOfB...
I'd like to avoid maintaining many branches of ConfigurationOfA.
How do others resolve this?