depending on a group of a BaselineOf

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

depending on a group of a BaselineOf

Peter Uhnak
Hi,

I'm trying to define a dependency on a group of BaselineOf.

specifically #core of github://pharo-graphics/Bloc/src.


which recommends using import:provides:

baseline: spec
  <baseline>

  spec for: #common do: [
    "Sample defines the group 'default'"
    spec baseline: 'Sample' with: [
      spec repository: 'github://dalehenrich/Sample:master' ].
    spec import: 'Sample' provides: #('default').

    "OtherSample *also* defines the group 'default'"
    spec baseline: 'OtherSample' with: [
      spec repository: 'github://dalehenrich/Sample:master' ].
    spec import: 'OtherSample' provides: #('default').

    "'default' can now be successfully resolved, even though
    both projects define the same name"
    spec package: 'OtherProject-Core with: [
      spec requires: 'default' ] ].

However this code is confusing... both Sample & OtherSample provide `default`, so on what does `OtherProject-Core` actually depend?

In the examples here https://github.com/Metacello/metacello/blob/master/docs/LockCommandReference.md there are groups with the name of the project in them ('External Core' 'External Tests'), but this won't work if I don't control the project I am loading, plus it feels like a hackish workaround.

Also, can it be unified with the way ConfigurationOf works?


Thanks,
Peter
Reply | Threaded
Open this post in threaded view
|

Re: depending on a group of a BaselineOf

Pavel Krivanek-3
in BaselineOfBasicTools we use something like.

spec baseline: 'SUnit' with: [
    spec repository: repository.
    spec loads: #('UI' 'Help')].

-- Pavel

2018-02-26 23:30 GMT+01:00 Peter Uhnák <[hidden email]>:

> Hi,
>
> I'm trying to define a dependency on a group of BaselineOf.
>
> specifically #core of github://pharo-graphics/Bloc/src.
>
> I've looked at this
> https://github.com/Metacello/metacello/blob/master/docs/GettingStartedWithGitHub.md#create-baseline
>
> which recommends using import:provides:
>
> baseline: spec
>   <baseline>
>
>   spec for: #common do: [
>     "Sample defines the group 'default'"
>     spec baseline: 'Sample' with: [
>       spec repository: 'github://dalehenrich/Sample:master' ].
>     spec import: 'Sample' provides: #('default').
>
>     "OtherSample *also* defines the group 'default'"
>     spec baseline: 'OtherSample' with: [
>       spec repository: 'github://dalehenrich/Sample:master' ].
>     spec import: 'OtherSample' provides: #('default').
>
>     "'default' can now be successfully resolved, even though
>     both projects define the same name"
>     spec package: 'OtherProject-Core with: [
>       spec requires: 'default' ] ].
>
>
> However this code is confusing... both Sample & OtherSample provide
> `default`, so on what does `OtherProject-Core` actually depend?
>
> In the examples here
> https://github.com/Metacello/metacello/blob/master/docs/LockCommandReference.md
> there are groups with the name of the project in them ('External Core'
> 'External Tests'), but this won't work if I don't control the project I am
> loading, plus it feels like a hackish workaround.
>
> Also, can it be unified with the way ConfigurationOf works?
>
>
> Thanks,
> Peter

Reply | Threaded
Open this post in threaded view
|

Re: depending on a group of a BaselineOf

JupiterJones
In reply to this post by Peter Uhnak
(I hope this isn’t posted twice - I accidentally sent it from an address that wasn’t subscribed so this is a repost - apologies)

Hi Peter,

I’ve never had to use the provides: method even with fairly complex Baselines.

This is an example of the kind of thing I’ve been using:

baseline: spec
<baseline>

spec for #common do: [
spec 
“Dependency on project with BaselineOf"
 baseline: 'Seaside3' with: [ 
 spec 
 loads: #('Core' 'Development' 'Zinc'); 
 repository: '<a href="github://SeasideSt/Seaside:master/repository" class="">github://SeasideSt/Seaside:master/repository' ];
“Dependency on project with ConfigurationOf (note the version)”
configuration: ‘Magritte3’ with: [ 
spec
     versionString: '3.5.2';
                 repository: 'http://www.smalltalkhub.com/mc/Magritte/Magritte3/main' ];

“Now define my project packages”
package: 'MyProject-Model' with: [ 
spec requires: #(‘Magritte3') ]; 
package: ‘MyProject-UI' with: [ 
spec requires: #('MyProject-Model’ 'Seaside') ];
package: ‘MyProject-Tests-Model’ with: [
spec requires: #('MyProject-Model’) ];

“Now define groups for convenience. Groups can load dependencies, packages, or other groups”
group: ‘Model' with: #(‘MyProject-Model’);
group: ‘UI' with: #(‘MyProject-UI’);
group: ‘Tests’ with: #(‘MyProject-Tests’)

“Metacello will load the default group unless you specify otherwise"
group: ‘default’ with:  #(Model’ ‘UI’);

“Other possible convenience groups”
group: ‘Development’ with:  #(Model’ ‘UI’ ’Tests’);
group: ‘Production’ with:  #(Model’ ‘UI’)
]


Then you can load groups like:

Metacello new
baseline: ‘MyProject’;
repository: ‘<a href="github://MyGitHubUser/MyProject:master/repository'" class="">github://MyGitHubUser/MyProject:master/repository'
loads: #(‘Development’);
load

Hope this helps :)

Cheers,

Jupiter
On 27 Feb 2018, at 9:30 am, Peter Uhnák <[hidden email]> wrote:

Hi,

I'm trying to define a dependency on a group of BaselineOf.

specifically #core of <a href="github://pharo-graphics/Bloc/src" class="">github://pharo-graphics/Bloc/src.


which recommends using import:provides:

baseline: spec
  <baseline>

  spec for: #common do: [
    "Sample defines the group 'default'"
    spec baseline: 'Sample' with: [
      spec repository: '<a href="github://dalehenrich/Sample:master" class="">github://dalehenrich/Sample:master' ].
    spec import: 'Sample' provides: #('default').

    "OtherSample *also* defines the group 'default'"
    spec baseline: 'OtherSample' with: [
      spec repository: '<a href="github://dalehenrich/Sample:master" class="">github://dalehenrich/Sample:master' ].
    spec import: 'OtherSample' provides: #('default').

    "'default' can now be successfully resolved, even though
    both projects define the same name"
    spec package: 'OtherProject-Core with: [
      spec requires: 'default' ] ].

However this code is confusing... both Sample & OtherSample provide `default`, so on what does `OtherProject-Core` actually depend?

In the examples here https://github.com/Metacello/metacello/blob/master/docs/LockCommandReference.md there are groups with the name of the project in them ('External Core' 'External Tests'), but this won't work if I don't control the project I am loading, plus it feels like a hackish workaround.

Also, can it be unified with the way ConfigurationOf works?


Thanks,
Peter

Reply | Threaded
Open this post in threaded view
|

Re: depending on a group of a BaselineOf

Peter Uhnak
Thank you all... I guess I must have been doing something wrong, because I've tried `loads:` before.

But it is working now.

Thanks!
Peter

On Tue, Feb 27, 2018 at 11:56 AM, Jupiter Jones <[hidden email]> wrote:
(I hope this isn’t posted twice - I accidentally sent it from an address that wasn’t subscribed so this is a repost - apologies)

Hi Peter,

I’ve never had to use the provides: method even with fairly complex Baselines.

This is an example of the kind of thing I’ve been using:

baseline: spec
<baseline>

spec for #common do: [
spec 
“Dependency on project with BaselineOf"
 baseline: 'Seaside3' with: [ 
 spec 
 loads: #('Core' 'Development' 'Zinc'); 
“Dependency on project with ConfigurationOf (note the version)”
configuration: ‘Magritte3’ with: [ 
spec
     versionString: '3.5.2';
                 repository: 'http://www.smalltalkhub.com/mc/Magritte/Magritte3/main' ];

“Now define my project packages”
package: 'MyProject-Model' with: [ 
spec requires: #(‘Magritte3') ]; 
package: ‘MyProject-UI' with: [ 
spec requires: #('MyProject-Model’ 'Seaside') ];
package: ‘MyProject-Tests-Model’ with: [
spec requires: #('MyProject-Model’) ];

“Now define groups for convenience. Groups can load dependencies, packages, or other groups”
group: ‘Model' with: #(‘MyProject-Model’);
group: ‘UI' with: #(‘MyProject-UI’);
group: ‘Tests’ with: #(‘MyProject-Tests’)

“Metacello will load the default group unless you specify otherwise"
group: ‘default’ with:  #(Model’ ‘UI’);

“Other possible convenience groups”
group: ‘Development’ with:  #(Model’ ‘UI’ ’Tests’);
group: ‘Production’ with:  #(Model’ ‘UI’)
]


Then you can load groups like:

Metacello new
baseline: ‘MyProject’;
loads: #(‘Development’);
load

Hope this helps :)

Cheers,

Jupiter
On 27 Feb 2018, at 9:30 am, Peter Uhnák <[hidden email]> wrote:

Hi,

I'm trying to define a dependency on a group of BaselineOf.

specifically #core of github://pharo-graphics/Bloc/src.


which recommends using import:provides:

baseline: spec
  <baseline>

  spec for: #common do: [
    "Sample defines the group 'default'"
    spec baseline: 'Sample' with: [
      spec repository: 'github://dalehenrich/Sample:master' ].
    spec import: 'Sample' provides: #('default').

    "OtherSample *also* defines the group 'default'"
    spec baseline: 'OtherSample' with: [
      spec repository: 'github://dalehenrich/Sample:master' ].
    spec import: 'OtherSample' provides: #('default').

    "'default' can now be successfully resolved, even though
    both projects define the same name"
    spec package: 'OtherProject-Core with: [
      spec requires: 'default' ] ].

However this code is confusing... both Sample & OtherSample provide `default`, so on what does `OtherProject-Core` actually depend?

In the examples here https://github.com/Metacello/metacello/blob/master/docs/LockCommandReference.md there are groups with the name of the project in them ('External Core' 'External Tests'), but this won't work if I don't control the project I am loading, plus it feels like a hackish workaround.

Also, can it be unified with the way ConfigurationOf works?


Thanks,
Peter