8.10: About Dependency Granularity

Deep into Pharo · LibreTexts

0%

Contents

    Text

    Size
    100%
    Theme
    Typeface
    Line length
    Spacing

    From LibreTexts, under CC BY-SA 3.0, as the source states it; its equations are written in TeX, which the PDF shows typeset. This page at LibreTexts.

    8.10: About Dependency Granularity

    We want to discuss the difference between depending on a package, depending on a project and the different ways to express it. Imagine the following baseline1.1 from Fame.

    baseline11: spec
        <version: '1.1-baseline'>
    
        spec for: #'common' do: [
            spec blessing: #'baseline'.
            spec description: 'Baseline 1.1 first version on SmalltalkHub, copied from baseline
            1.0 on SqueakSource'.
            spec repository: 'http://www.smalltalkhub.com/mc/Moose/Fame/main'.
            spec
                package: 'Fame-Core';
                package: 'Fame-Util';
                package: 'Fame-ImportExport' with: [spec requires: #('Fame-Core' ) ];
                package: 'Fame-SmalltalkBinding' with: [spec requires: #('Fame-Core' ) ];
                package: 'Fame-Example';
                package: 'Phexample' with: [spec repository: 'http://smalltalkhub.com/mc/
             PharoExtras/Phexample/main' ];
                package: 'Fame-Tests-Core' with: [spec requires: #('Fame-Core' 'Fame-
             Example' 'Phexample' ) ].
            spec
                group: 'Core' with: #('Fame-Core' 'Fame-ImportExport' 'Fame-Util' 'Fame-
             SmalltalkBinding' );
                group: 'Tests' with: #('Fame-Tests-Core' ) ].
    

    In this baseline, package: 'Phexample' with: [spec repository: 'http://smalltalkhub. com/mc/PharoExtras/Phexample/main' ]; expresses that there is one package that can be found in the specified repository. However, such an approach is not good because this way you are just downloading a package from a repository and Metacello is not involved. For example, if PhexampleCore has dependencies they will not be loaded.

    In the following baseline1.2 we express dependencies between projects as presented above.

    baseline12: spec
        <version: '1.2-baseline'>
        
        spec for: #'common' do: [
            spec blessing: #'baseline'.
            spec description: 'Baseline 1.2 to make explicit that Fame depends on HashTable
             and Phexample (now on smalltalkHub and with working configurations'.
            spec repository: 'http://www.smalltalkhub.com/mc/Moose/Fame/main'.
    
            spec project: 'HashTable' with: [
                    spec
                        versionString: #stable;
                        repository: 'http://www.smalltalkhub.com/mc/Moose/HashTable/main' ].
    
            spec project: 'Phexample' with: [
                    spec
                        versionString: #stable;
                        repository: 'http://www.smalltalkhub.com/mc/Phexample/main' ].
            spec
                package: 'Fame-Core' with: [spec requires: 'HashTable'];
                package: 'Fame-Util';
                package: 'Fame-ImportExport' with: [spec requires: #('Fame-Core' ) ];
                package: 'Fame-SmalltalkBinding' with: [spec requires: #('Fame-Core' ) ];
                package: 'Fame-Example';
                package: 'Fame-Tests-Core' with: [spec requires: #('Fame-Core' 'Fame-
             Example') ].
            spec
                group: 'Core' with: #('Fame-Core' 'Fame-ImportExport' 'Fame-Util' 'Fame-
             SmalltalkBinding' );
                group: 'Tests' with: #('Fame-Tests-Core' ) ].
    

    Now when we express dependencies between projects we lose the fact that this is the package Fame-Tests-Core that depends on Phexample and this is a loss of information.

    To keep such information we can simply define in our configuration a new project named for example, PhexampleCore and we will be able to express that Fame-Tests-Core is dependent on PhexampleCore as follows.

    spec
        project: 'PhexampleCore'
        with: [ spec
                versionString: #stable;
                loads: #('Core');
                repository: 'http://www.smalltalkhub.com/mc/Phexample/main' ].
        ....
        'Fame-Tests-Core' with: [spec requires: #('Fame-Core' 'Fame-Example'
            'PhexampleCore' ) ].
    

    This page titled 8.10: About Dependency Granularity was last modified on Mon, 26 Jul 2021 15:16:54 GMT and is shared under a CC BY-SA 3.0 license and was authored, remixed, and/or curated by Alexandre Bergel, Damien Cassou, Stéphane Ducasse, Jannik Laval (Square Bracket Associates) via source content that was edited to the style and standards of the LibreTexts platform.