[squeak-dev] The Trunk: Installer-Core-cmm.377.mcz

Dale K. Henrichs dale.henrichs at gemtalksystems.com
Tue Aug 13 22:47:52 UTC 2013



----- Original Message -----
| From: "Chris Muller" <asqueaker at gmail.com>
| To: "The general-purpose Squeak developers list" <squeak-dev at lists.squeakfoundation.org>, "Dale Henrichs"
| <dhenrich at vmware.com>, "Frank Shearar" <frank.shearar at angband.za.org>
| Sent: Tuesday, August 13, 2013 2:51:30 PM
| Subject: Re: [squeak-dev] The Trunk: Installer-Core-cmm.377.mcz
| 
| On Tue, Aug 13, 2013 at 11:27 AM, Dale K. Henrichs
| <dale.henrichs at gemtalksystems.com> wrote:
| > It's not just cross-platform issues that caused Metacello to be
| > invented:)
| >
| > Metacello allows you to decouple the dependency graphs at the
| > project level ...
| 
| This is just a small and simple utility to address the
| chicken-and-egg
| problem, not a replacement for Metacello.  We need a core loader
| utility to "bootstrap" the Core image back up to a full trunk
| development image.  The Core should be small and devoid of as many
| tools domains as possible.
| 
| For several projects (see #fuel), Metacello will be one of the very
| first packages loaded and used to finish configuration.
| 
| We need a structure for installing #metacello too.

A clean bootstrapping scheme is definitely required ... My main point was that Metacello is more than a cross-platform tool.
 
| 
| > What happens to the literal array that is baked into your image,
| > when the formula for one of the components you are using changes
| > the day after you ship the image?
| 
| The release image will include two fixed-configuration structures,
| one
| for Metacello and one for SqueakMap.  That will ensure the
| configurator can arrive at a platform baseline from which any other
| Metacello-based or SM package can be installed.

That sounds good ... I do look forward to the day when Metacello no longer has to boot itself on demand:)
 
| 
| > Metacello was invented to address this problem as well:)
| 
| Now, we _could_ actually include fixed-configuration (where the
| version #'s are specified) for other packages specified by these
| literal-arrays if we want.  But for now I want this to simply help
| manage the on-going trunk modularization effort with Frank.  IOW, I
| want to add scripts for the *internal* packages so that the
| dependency
| hierarchy of Core packages ends up tersely codified in the image and
| easily reinstalled back to full trunk using clean, minimal code.

Yes there are trade-offs to be made.

If you bootstrap Metacello and/or SqueakMap then you could use Metacello and/or Squeakmap to load the rest of the packages beyond the minimal core and make it possible for folks to completely customize their image, if they desire to do so. But then you will "always have Metacello and/or SqueakMap loaded" in any version of the image beyond the minimal.

If having Metacello and/or SqueakMap always "loaded" is not desirable, then the bootstrapper _can_ be used to bootstrap sets of packages beyond Metacello and/or SqueakMap. 

| 
| 
| >
| > Dale
| >
| > ----- Original Message -----
| > | From: "Frank Shearar" <frank.shearar at gmail.com>
| > | To: "Chris Muller" <ma.chris.m at gmail.com>, "The general-purpose
| > | Squeak developers list"
| > | <squeak-dev at lists.squeakfoundation.org>
| > | Sent: Tuesday, August 13, 2013 9:08:16 AM
| > | Subject: Re: [squeak-dev] The Trunk: Installer-Core-cmm.377.mcz
| > |
| > | Specifically, these are recipes for building up a fatter Squeak
| > | from
| > | a
| > | leaner one, so we don't have to worry about cross-platform
| > | issues.
| > | It's exactly those kinds of issues that cause people to invent
| > | things
| > | like Metacello.
| > |
| > | frank
| > |
| > | On 9 August 2013 23:30, Chris Muller <asqueaker at gmail.com> wrote:
| > | > As Frank works toward a smaller image where packages have been
| > | > unloaded, I want to establish the hierarchies for reloading
| > | > them
| > | > directly into the image.  This approach utilizes simple
| > | > Smalltalk
| > | > literal structures, suitable for making a core image expandable
| > | > without bloating it.
| > | >
| > | > Since it is so little code (with good pop), and no disruption
| > | > to
| > | > anything, I felt comfortable putting into trunk.
| > | >
| > | > On Fri, Aug 9, 2013 at 5:21 PM,  <commits at source.squeak.org>
| > | > wrote:
| > | >> Chris Muller uploaded a new version of Installer-Core to
| > | >> project
| > | >> The Trunk:
| > | >> http://source.squeak.org/trunk/Installer-Core-cmm.377.mcz
| > | >>
| > | >> ==================== Summary ====================
| > | >>
| > | >> Name: Installer-Core-cmm.377
| > | >> Author: cmm
| > | >> Time: 9 August 2013, 9:51:53.931 am
| > | >> UUID: 85dd5a14-e50a-482c-b9cb-f8971264f602
| > | >> Ancestors: Installer-Core-fbs.373
| > | >>
| > | >> Document externally-loadable Squeak packages as simple literal
| > | >> structures that can be merged via:
| > | >>
| > | >>         Installer new merge: #thePackageName
| > | >>
| > | >> =============== Diff against Installer-Core-fbs.373
| > | >> ===============
| > | >>
| > | >> Item was changed:
| > | >>   Object subclass: #Installer
| > | >> +       instanceVariableNames: 'answers packages
| > | >> messagesToSuppress useFileIn noiseLevel currentRepository'
| > | >> -       instanceVariableNames: 'answers packages
| > | >> messagesToSuppress useFileIn noiseLevel'
| > | >>         classVariableNames: 'InstallerBindings
| > | >>         IsSetToTrapErrors
| > | >>         Remembered SkipLoadingTests ValidationBlock'
| > | >>         poolDictionaries: ''
| > | >>         category: 'Installer-Core'!
| > | >>
| > | >>   !Installer commentStamp: 'kph 3/30/2009 01:29' prior: 0!
| > | >>   Documentation now available at
| > | >>   http://installer.pbwiki.com/Installer
| > | >>
| > | >>   useFileIn - flag to load source.st rather than using
| > | >>   Monticello!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer class>>krestianstvo (in category
| > | >> 'repositories') -----
| > | >> + krestianstvo
| > | >> +       "Krestianstvo SDK code repository."
| > | >> +       ^ self monticello http:
| > | >> 'http://sdk.krestianstvo.org/sdk/'!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer>>broomMorphsBase (in category
| > | >> 'external-packages') -----
| > | >> + broomMorphsBase
| > | >> +       "Morph alignment user-interface tool."
| > | >> +       ^ { #ss3 -> 'Connectors'.
| > | >> +       'BroomMorphs-Base' }!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer>>connectors (in category
| > | >> 'external-packages') -----
| > | >> + connectors
| > | >> +       "Connect Morphs together.  Make diagrams."
| > | >> +       ^ { self broomMorphsBase.
| > | >> +       'CGPrereqs'.
| > | >> +       'FSM'.
| > | >> +       'Connectors'.
| > | >> +       'ConnectorsText'.
| > | >> +       'ConnectorsShapes'.
| > | >> +       'ConnectorsTools'.
| > | >> +       'ConnectorsGraphLayout'.
| > | >> +       'BroomMorphs-Connectors' }!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer>>curvedSpaceExplorer (in category
| > | >> 'external-packages') -----
| > | >> + curvedSpaceExplorer
| > | >> +       "Explore curved 3D spaces."
| > | >> +       ^ { self openGL.
| > | >> +       'CCSpaceExplorer' }!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer>>depthFirstOf:do: (in category
| > | >> 'private') -----
| > | >> + depthFirstOf: structure do: oneArgBlock
| > | >> +       self
| > | >> +               depthFirstOf: structure
| > | >> +               do: oneArgBlock
| > | >> +               ifNotIn: Set new!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer>>depthFirstOf:do:ifNotIn: (in
| > | >> category
| > | >> 'private') -----
| > | >> + depthFirstOf: structure do: oneArgBlock ifNotIn: aSet
| > | >> +       (aSet includes: structure) ifTrue: [ ^ self ].
| > | >> +       aSet add: structure.
| > | >> +       structure isArray
| > | >> +               ifTrue:
| > | >> +                       [ structure do:
| > | >> +                               [ : each | self
| > | >> +                                       depthFirstOf: each
| > | >> +                                       do: oneArgBlock
| > | >> +                                       ifNotIn: aSet ] ]
| > | >> +               ifFalse: [ oneArgBlock value: structure ]!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer>>ffi (in category
| > | >> 'external-packages')
| > | >> -----
| > | >> + ffi
| > | >> +       "Foreign Function Interface."
| > | >> +       ^ { #squeak -> 'FFI'.
| > | >> +       'FFI-Pools'.
| > | >> +       'FFI-Kernel' }!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer>>ffiTests (in category
| > | >> 'external-packages') -----
| > | >> + ffiTests
| > | >> +       "Tests for Foreign Function Interface."
| > | >> +       ^ { self ffi.
| > | >> +       'FFI-Tests' }!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer>>fuel (in category
| > | >> 'external-packages')
| > | >> -----
| > | >> + fuel
| > | >> +       "Serialization package."
| > | >> +       ^ { #ss3 -> 'Fuel'.
| > | >> +       'ConfigurationOfFuel' }!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer>>htmlValidator (in category
| > | >> 'external-packages') -----
| > | >> + htmlValidator
| > | >> +       "Validates HTML and CSS pages against W3C DTD."
| > | >> +       ^ { #ss -> 'htmlcssparser'.
| > | >> +       'HTML-tb.37' }!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer>>merge: (in category 'public
| > | >> interface')
| > | >> -----
| > | >> + merge: structureOrSymbol
| > | >> +       structureOrSymbol isSymbol
| > | >> +               ifTrue: [ self merge: (self perform:
| > | >> structureOrSymbol) ]
| > | >> +               ifFalse:
| > | >> +                       [ self
| > | >> +                               depthFirstOf:
| > | >> structureOrSymbol
| > | >> +                               do:
| > | >> +                                       [ : each | each
| > | >> isVariableBinding
| > | >> +                                               ifTrue: [ self
| > | >> setRepository: each ]
| > | >> +                                               ifFalse:
| > | >> +                                                       [ each
| > | >> isString
| > | >> +
| > | >>                                                               ifTrue:
| > | >> [ self primMerge: each ]
| > | >> +
| > | >>                                                               ifFalse:
| > | >> [ self error: 'invalid specification' ] ] ] ]!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer>>openGL (in category
| > | >> 'external-packages') -----
| > | >> + openGL
| > | >> +       "3D library."
| > | >> +       ^ { self threeDtransform.
| > | >> +       #krestianstvo -> 'ccse'.
| > | >> +       'OpenGL-Pools'.
| > | >> +       'OpenGL-Core'.
| > | >> +       'OpenGL-NameManager' }!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer>>osProcess (in category
| > | >> 'external-packages') -----
| > | >> + osProcess
| > | >> +       "Launch external executable programs."
| > | >> +       ^ { #ss -> 'OSProcess'.
| > | >> +       'OSProcess' }!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer>>primMerge: (in category 'private')
| > | >> -----
| > | >> + primMerge: packageName
| > | >> +       [ | version |
| > | >> +       version := (currentRepository includesVersionNamed:
| > | >> packageName)
| > | >> +               ifTrue: [ currentRepository versionNamed:
| > | >> packageName ]
| > | >> +               ifFalse: [ currentRepository
| > | >> highestNumberedVersionForPackageNamed: packageName ].
| > | >> +       version shouldMerge
| > | >> +               ifTrue: [ version merge ]
| > | >> +               ifFalse: [ version load ] ]
| > | >> +               on: MCNoChangesException
| > | >> +               do: [ : req | req resume ]
| > | >> +               on: MCMergeResolutionRequest
| > | >> +               do:
| > | >> +                       [ : request | request merger conflicts
| > | >> isEmpty
| > | >> +                               ifTrue: [ request resume: true
| > | >> ]
| > | >> +                               ifFalse: [ request pass ] ]!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer>>setRepository: (in category
| > | >> 'private')
| > | >> -----
| > | >> + setRepository: anAssociation
| > | >> +       currentRepository := (self class perform:
| > | >> anAssociation
| > | >> key)
| > | >> +                project: anAssociation value ;
| > | >> +                mc!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer>>threeDtransform (in category
| > | >> 'external-packages') -----
| > | >> + threeDtransform
| > | >> +       ^ { self ffiTests.
| > | >> +       #ss -> 'CroquetGL'.
| > | >> +       '3DTransform' }!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer>>webClientCore (in category
| > | >> 'external-packages') -----
| > | >> + webClientCore
| > | >> +       "Simple, compact, and easy to use HTTP client
| > | >> implementation from Andreas Raab."
| > | >> +       ^ { #ss -> 'WebClient'.
| > | >> +       'WebClient-Core' }!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer>>webClientSsp (in category
| > | >> 'external-packages') -----
| > | >> + webClientSsp
| > | >> +       "WebClient supports NTLM/SPNEGO authentication via the
| > | >> Microsoft SSP interface (Windows only)."
| > | >> +       ^ { self ffiTests.
| > | >> +       self webClientTests.
| > | >> +       'WebClient-SSP' }!
| > | >>
| > | >> Item was added:
| > | >> + ----- Method: Installer>>webClientTests (in category
| > | >> 'external-packages') -----
| > | >> + webClientTests
| > | >> +       "Help documentation and tests for Web Client."
| > | >> +       ^ { self webClientCore.
| > | >> +       'WebClient-Tests'.
| > | >> +       'WebClient-Help' }!
| > | >>
| > | >>
| > | >
| > |
| > |
| >
| 


More information about the Squeak-dev mailing list