[Glass] Is there a way of specifying alternate repos in Baselines/Configurations

Dale Henrichs via Glass glass at lists.gemtalksystems.com
Mon Jul 6 17:48:11 PDT 2015


Jupiter,

This is one of the issues that I'm addressing with the combo of 
GsDevKitHome and tODE ...

In tODE, you can create "project entries" where you can specify whether 
or not you want a particular project to be locked or not and what 
repository to use ... these project entries do not have to represent 
loaded projects ... when you bring up tODE and use the `project *` 
family of commands the "project entries" are honored ...

In the "waiting for me to write documentation version of GsDevKitHome 
and tODE)" you specify "project entries" in three locations: default, 
local and stone.

The default is what gets shipped by default in GsDevKitHome ...

The local is intended to be a "site-wide" default and can be used to 
override/extend/prune the default.

The stone is created on a stone by stone basis so that you can override 
the site-wide specification for a particular stone ...

Other than some polish and a big dollop of documentation, the 
GsDevKitHome and tODE code base is functionally complete and I have been 
using the project entries for exactly the use case you describe for 6 
months or so and ...

I've gotten sucked into a second round of 3.3 work recently, but if you 
are interested in taking things for a spin, I can put together some 
links to the docs that I've already written and maybe fill in some of 
the blanks ... frankly one of the areas where I felt my documentation 
was lacking was the area where I was trying to describe how/why project 
entries are needed, but since you are already painfully aware of the 
need for project entries, you only need to install the new 
GsDevKitHome/tODE combo and create the needed project entries ... then 
convert your load scripts to use the tODE `project command` api and then 
I think you should be in business ...

Dale

On 07/06/2015 05:23 PM, Jupiter Jones via Glass wrote:
> I think this is a fairly common scenario when using a project and its 
> dependencies.
>
> Simple project scenario:
> - MainProject is cloned locally from github in /opt/git/MainProject
> - DependentProject is cloned locally from github in 
> /opt/git/DependentProject
> - MainProject is dependent on DependentProject and refers to its 
> github repository in its BaselineOfMainProject.
>
> Loading scenarios:
> - At the start of each development session, I load my base development 
> image then load the projects I’m working on from their local clones.
> - Also, in an automated deployment, I want to clone the projects 
> locally then have my image load them from the local disc rather than 
> the network.
>
> Loading:
> If I load my main project with:
> Metacello new
> baseline: ‘MainProject’;
> repository: ‘filetree:///opt/git/MainProject' 
> <filetree:///opt/git/MainProject%27>;
> load
> It will load the DependProject from github.
>
> So, I load DependentProject from my local repo 
> filetree:///opt/git/DependentProject using:
> Metacello new
> baseline: ‘DependentProject’;
> repository: ‘filetree:///opt/git/DependentProject' 
> <filetree:///opt/git/DependentProject%27>;
> load
>
> I then load MainProject from my local repo 
> filetree:///opt/git/MainProject using:
> Metacello new
> baseline: ‘MainProject’;
> repository: ‘filetree:///opt/git/MainProject' 
> <filetree:///opt/git/MainProject%27>;
> load
>
> Of course, this throws the error:
> Load Conflict between existing BaselineOfDependentProject [baseline] 
> from filetree:///opt/git/DependentProject 
> and BaselineOfDependentProject [baseline] from 
> github://GitHubUser/DependentProject
>
> To get around this, I’m loading DependingProject then locking it with:
> Metacello new
> baseline: ‘DependentProject’;
> repository: ‘filetree:///opt/git/DependentProject' 
> <filetree:///opt/git/DependentProject%27>;
> lock
>
> This becomes cumbersome with many dependents and isn’t easy to manage 
> with automated deployments. The pain scales when managing dependents 
> of dependents and third party projects… ideally all of which would be 
> cloned locally. eg. If MainProject depends on Seaside and Seaside 
> depends on Zinc, both of which are cloned locally, 
> BaselineOfMainProject would also need to specify an alternate repo for 
> Zinc.
>
> So my question... Is there a way of specifying alternate repos for 
> project dependents and their dependents in BaselineOfMainProject, then 
> selecting which repos will be used at load time, and have them apply 
> to all dependents and their dependents?
>
> Right now, I have custom load scripts to circumvent the dependency 
> management Metacello is so good at, doing lots of locking, and 
> wrapping it in GsDeployer deploy: blocks so I don’t get dialogs 
> warning about locks. Pharos loads are even more fiddly. I figure there 
> must be a better way :)
>
> How are others managing this?
>
> Cheers,
>
> Jupiter
>
>
> _______________________________________________
> Glass mailing list
> Glass at lists.gemtalksystems.com
> http://lists.gemtalksystems.com/mailman/listinfo/glass

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gemtalksystems.com/mailman/private/glass/attachments/20150706/8573343c/attachment.html>


More information about the Glass mailing list