On 11/10/17 1:14 AM, Peter Uhnák wrote:
Hi Dale,

I am aware of locking, but that requires I know all the recursive dependencies so I can lock them before loading the project itself.

I can do that locally (and I've done it in the past), but I cannot easily force that upon users. This also applies for SmalltalkCI which will just try to load the baseline and will run into the conflict (the conflict pasted in the first mail actually comes from SCI).
Ah .... well getting load conflicts is a feature in that case:)

In that case you are trying to load "two different" projects with the same name from incompatible repositories and someone has to decide ... the problem partially likes in the fact that the maintainers of project X haven't committed to a primary repository ...

The other part of the problem has to do with being able to specify conflict handling in SmalltalkCI ... the Metacello load command allows you to programmatically decide which side of the conflict wins during the load, but the SCIMetacelloLoadSpec hasn;t quite gotten to the point where the conflct resolution has been exposed

At the end of the day, the maintainers of project X need to make up their minds and SmalltalkCI needs to expose the conflict resolution api for Metacllo ...

Dale
Thanks,
Peter

On Thu, Nov 9, 2017 at 11:17 PM, Dale Henrichs <[email protected] <mailto:[email protected]>> wrote:

    Peter,

    Metacello locks are supposed to address this kind of problem ...
    at this point in time, any project that is loaded from a git
    project should be 'locked' using a Metacello lock.

    The lock means that any request to load that project will use the
    locked version instead of the version specified in the
    configuration/baseline.

    A lock can be applied to a project without actually loading the
    project ...

    Presuming that you have a preference towards using the local git
    repository for project X, then you can lock project X with a
    reference to the local git repository:

      Metacello new

        project: 'X';

        repository: '......';

        lock.

    ... and from this point on any attempt by Metacello to load
    project X will load from the local git repository ...

    Once you have a local clone of a project it is very likely that
    you will want to share that repository amongst many of your local
    pharo projects and to do that with Metacallo you need to lock
    those projects in each of your images, including new images ...

    This can lead to a lot of locking ... I talk about the approach
    that I use in tODE to address this problem in two Smalltalks talks
    [1] and [2]...

    Dale

    [1]
    
https://www.youtube.com/watch?v=Ejmqs0xLvSk&list=PLCGAAdUizzH06AkHg6_UxZ6QZBgz84yAc&index=25
    
<https://www.youtube.com/watch?v=Ejmqs0xLvSk&list=PLCGAAdUizzH06AkHg6_UxZ6QZBgz84yAc&index=25>

    [2] https://www.youtube.com/watch?v=QshDlH1ADZQ
    <https://www.youtube.com/watch?v=QshDlH1ADZQ>



    On 11/9/17 12:21 PM, Peter Uhnák wrote:

        Hi,

        as people are increasingly starting to move to git and
        baselines, it is becoming more and more common that there are
        loading issues:

        A depends on B and C

        B depends on ConfigurationOfX

        C depends on BaselineOfX

        and then loading fails on

        MetacelloConflictingProjectError: Load Conflict between existing
        BaselineOfStateSpecs [baseline] from
        github://dionisiydk/StateSpecs:v2.4.x and
        ConfigurationOfStateSpecs stable from
        http://www.smalltalkhub.com/mc/dionisiy/StateSpecs/main
        <http://www.smalltalkhub.com/mc/dionisiy/StateSpecs/main>

        I imagine that this will become more and more common.

        Can this be resolved in some automated fashion?

        Thanks,
        Peter





Reply via email to