MCStXPackageLoader.st
author Jan Vrany <jan.vrany@labware.com>
Tue, 11 Jul 2023 12:13:27 +0100
branchjv
changeset 1173 e3dd2050492e
parent 1166 e9b369305a8d
permissions -rw-r--r--
Update class category to match package name if it does not This is needed because in Squeak / Pharo world package membership is defined by (class) category prefix. This is soo annoying...

"
COPYRIGHT (c) 2021 LabWare
COPYRIGHT (c) 2023 LabWare
"
"{ Package: 'stx:goodies/monticello' }"

"{ NameSpace: Smalltalk }"

MCPackageLoader subclass:#MCStXPackageLoader
	instanceVariableNames:'manifests'
	classVariableNames:''
	poolDictionaries:''
	category:'SCM-Monticello-St/X support'
!

!MCStXPackageLoader class methodsFor:'documentation'!

copyright
"
COPYRIGHT (c) 2021 LabWare
COPYRIGHT (c) 2023 LabWare


"
! !

!MCStXPackageLoader methodsFor:'private'!

postLoad
    manifests do: [:manifest |
        manifest
            activityNotification:('Executing post-load actions for %1' bindWith: manifest package);
            projectIsLoaded:true.

        Smalltalk changed: #packageLoaded with: manifest.
    ].

    "Created: / 29-11-2021 / 17:28:13 / Jan Vrany <jan.vrany@labware.com>"
    "Modified: / 29-11-2021 / 19:55:59 / Jan Vrany <jan.vrany@labware.com>"
!

preLoad
    | manifestDefinitions manifestNames |

    "/ Collect all manifests (project definitions) classes...
    manifestDefinitions := additions select: [:e | e isManifestDefinition ].
    manifestNames := manifestDefinitions collect: [ :e | e className asSymbol ].
    "/ ...and methods.
    manifestDefinitions := manifestDefinitions , (additions select: [ :e | e isMethodDefinition and: [ manifestNames includes: e className ]]).

    "/ Load collected manifests.
     manifests := OrderedCollection new.
    [
        manifestDefinitions do: [:e | self tryToLoad: e] displayingProgress: 'Loading package manifests...'.
        manifests := manifestNames collect: [:name | Smalltalk at: name ].
    ] on: InMidstOfFileinNotification do: [:ex |
        ex resume: true
    ] ensure: [
        additions removeAll: manifestDefinitions.
        self flushChangesFile.
    ].
    manifests size > 1 ifTrue: [ self error: 'Loading multiple packages at once is not yet supported' mayProceed: true ].

    "/ Load dependencies and execute pre-load actions...
    "/ (see ProjectDefinition >> #loadAsAutoloaded: )
    manifests do: [:manifest |
        Smalltalk changed: #aboutToLoadPackage with: manifest.
        Smalltalk silentLoading ifFalse:[Logger info:'loading %1...' with:manifest name].

        manifest
            activityNotification:('Executing pre-load actions for %1' bindWith: manifest package);
            executeHooks: #preLoad;
            preLoadAction.
        "/ Answering 'nil' means use default package name.
        MCStXPackageQuery answer: nil do: [
            manifest loadPreRequisitesAsAutoloaded: false.
        ]
    ].

    "Created: / 29-11-2021 / 17:27:34 / Jan Vrany <jan.vrany@labware.com>"
    "Modified (comment): / 29-11-2021 / 22:26:50 / Jan Vrany <jan.vrany@labware.com>"
! !

!MCStXPackageLoader methodsFor:'public'!

installSnapshot: originalSnapshot
    | transformedSnapshot |

    transformedSnapshot := MCStXSnapshotPostReadTransformation transform: originalSnapshot.
    super installSnapshot: transformedSnapshot

    "Created: / 23-03-2023 / 14:00:45 / Jan Vrany <jan.vrany@labware.com>"
!

load
    self preLoad.
    super load.
    self postLoad.

    "Created: / 29-11-2021 / 17:28:44 / Jan Vrany <jan.vrany@labware.com>"
!

loadWithName: baseName
    self preLoad.
    super loadWithName: baseName.
    self postLoad.

    "Created: / 29-11-2021 / 17:28:59 / Jan Vrany <jan.vrany@labware.com>"
!

loadWithNameLike: baseName
    self preLoad.
    super loadWithNameLike: baseName.
    self postLoad.

    "Created: / 29-11-2021 / 17:29:15 / Jan Vrany <jan.vrany@labware.com>"
!

updatePackage: aPackage withSnapshot: originalSnapshot
    | transformedSnapshot |

    transformedSnapshot := MCStXSnapshotPostReadTransformation transform: originalSnapshot.
    super updatePackage: aPackage withSnapshot: transformedSnapshot

    "Created: / 23-03-2023 / 13:59:53 / Jan Vrany <jan.vrany@labware.com>"
! !

!MCStXPackageLoader class methodsFor:'documentation'!

version_HG

    ^ '$Changeset: <not expanded> $'
! !