[squeak-dev] The Inbox: Installer-Core-cmm.429.mcz

Fabio Niephaus lists at fniephaus.com
Mon Apr 8 19:07:37 UTC 2019


On Mon, 8 Apr 2019 at 9:01 pm, <commits at source.squeak.org> wrote:

> Chris Muller uploaded a new version of Installer-Core to project The Inbox:
> http://source.squeak.org/inbox/Installer-Core-cmm.429.mcz
>
> ==================== Summary ====================
>
> Name: Installer-Core-cmm.429
> Author: cmm
> Time: 8 April 2019, 2:01:23.400753 pm
> UUID: 12e11ef9-421b-4e4c-88b0-a4921fe4d4a8
> Ancestors: Installer-Core-tcj.426
>
> Allow installation of github projects via the scripts at the top of their
> readme files, without first having to manually ensure Metacello is
> installed.
>
>         Metacello new
>                 baseline: 'NameOfTheProject';
>                 repository: 'github://...';
>                 load
>
> =============== Diff against Installer-Core-tcj.426 ===============
>
> Item was changed:
>   ----- Method: Installer class>>ensureRecentMetacello (in category
> 'scripts') -----
>   ensureRecentMetacello
>         "Copied and adapted from
> https://github.com/Metacello/metacello/blob/master/README.md"
>
>         | metacello |
>         ((Smalltalk classNamed: #WebClient)
>                 ifNil: [ false ]
>                 ifNotNil: [ :webClient |
>                         [ (webClient httpHead: 'https://github.com')
> isSuccess ]
>                                 on: Error
>                                 do: [ false ] ])
>                 ifFalse: [ ^self inform: 'Could not connect to "
> https://github.com".\\You need an internet connection and SSL support\to
> install (or update) Metacello.\\Please fix those issues and try again.'
> translated withCRs ].
>
> +       "Squeak is shipped with the global #Metacello referring to
> lightweight MetacelloStub.  After the first message is sent, the latest
> Metacello is installed, replacing the stub."
> +       metacello := Smalltalk at: #Metacello.
> +       metacello = MetacelloStub ifTrue: [
> -       metacello := (Smalltalk classNamed: #Metacello) ifNil: [
>                 "Get the Metacello configuration (for Squeak users)"
>                 Installer gemsource
>                         project: 'metacello';
>                         addPackage: 'ConfigurationOfMetacello';
>                         install.
>
>                 "Bootstrap Metacello Preview, using mcz files
> (#'previewBootstrap' symbolic version"
>                 ((Smalltalk classNamed: #ConfigurationOfMetacello) project
>                         version: #'previewBootstrap') load.
>
>                 Smalltalk classNamed: #Metacello ].
>
>         "Now load latest version of Metacello"
>         metacello new
>                 baseline: 'Metacello';
>                 repository:
> 'github://Metacello/metacello:master/repository';
>                 get.
>         metacello new
>                 baseline: 'Metacello';
>                 repository:
> 'github://Metacello/metacello:master/repository';
>                 load: #('default' 'Metacello-Help').
>   !
>
> Item was added:
> + Object subclass: #MetacelloStub
> +       instanceVariableNames: ''
> +       classVariableNames: ''
> +       poolDictionaries: ''
> +       category: 'Installer-Core'!
> +
> + !MetacelloStub commentStamp: 'cmm 4/8/2019 14:00' prior: 0!
> + MetacelloStub is a loose reference to the class Metacello in its host
> repository.  It's kept at both its real name, #MetacelloStub, as well as
> the name #Metacello.  This is done to allow Squeak to respond to messages
> sent to Metacello (e.g., as referenced in external installation scripts),
> without the need to ship with Metacello pre-installed.!
>
> Item was added:
> + ----- Method: MetacelloStub class>>doesNotUnderstand: (in category
> 'overriding') -----
> + doesNotUnderstand: aMessage
> +       (UIManager confirm: 'This action requires Metacello, but it''s not
> installed.  Download and install it now?') ifTrue:
> +               [ Installer ensureRecentMetacello.
> +               ^ aMessage sentTo: (Smalltalk classNamed: #Metacello) ]!
>
> Item was added:
> + ----- Method: MetacelloStub class>>initialize (in category
> 'initialize-release') -----
> + initialize
> +       Smalltalk
> +               at: #Metacello
> +               ifAbsentPut: [ self ]!
>
>
> Great, that's /exactly/ what I meant! Will give this implementation a try
tomorrow.

Do we have a clever way to do the same within a GitBrowser menu item? Maybe
show an item "Install GitBrowser..." at the end of the Tools menu iif it's
main class is not found in the image. Jakob?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20190408/945ee1f1/attachment.html>


More information about the Squeak-dev mailing list