Chris Muller uploaded a new version of Installer-Core to project The Inbox: http://source.squeak.org/inbox/Installer-Core-cmm.430.mcz
==================== Summary ====================
Name: Installer-Core-cmm.430 Author: cmm Time: 10 April 2019, 11:23:30.85688 pm UUID: cb5b16dd-ba30-4ca0-8293-a58f16759490 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.
=============== 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%22.%5C%5CYou need an internet connection and SSL support\to install (or update) Metacello.\Please fix those issues and try again.' translated withCRs ]. + self isMetacelloInstalled ifFalse: [ + "Prepare a clean environment for it." + Smalltalk globals removeKey: #Metacello. - 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.
+ metacello := Smalltalk classNamed: #Metacello ]. - 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: + ----- Method: Installer class>>installAndOpenGitBrowser (in category 'scripts') ----- + installAndOpenGitBrowser + self installGitInfrastructure. + (Smalltalk at: #SquitBrowser) open.!
Item was changed: ----- Method: Installer class>>installGitInfrastructure (in category 'scripts') ----- installGitInfrastructure + "for INIFileTest>>#testComplexRead" + Scanner allowUnderscoreAsAssignment: true. - - self ensureRecentMetacello. - (Smalltalk at: #Metacello) new baseline: 'Squot'; repository: 'github://hpi-swa/Squot:master/src'; load.!
Item was added: + ----- Method: Installer class>>isMetacelloInstalled (in category 'scripts') ----- + isMetacelloInstalled + "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." + ^ (Smalltalk at: #Metacello) ~= MetacelloStub!
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>>confirmMetacello (in category 'overriding') ----- + confirmMetacello + Installer isMetacelloInstalled ifFalse: + [ (UIManager confirm: 'This action requires Metacello, but it''s not installed. Download and install it now?') ifTrue: [ Installer ensureRecentMetacello ] ]!
Item was added: + ----- Method: MetacelloStub class>>doesNotUnderstand: (in category 'overriding') ----- + doesNotUnderstand: aMessage + "Handle any messages sent to Metacello class, too." + self confirmMetacello. + ^ aMessage sendTo: (Smalltalk classNamed: #Metacello)!
Item was added: + ----- Method: MetacelloStub class>>initialize (in category 'initialize-release') ----- + initialize + Smalltalk + at: #Metacello + ifAbsentPut: [ self ]!
Item was added: + ----- Method: MetacelloStub class>>isMetacelloConfig (in category 'overriding') ----- + isMetacelloConfig + "Sent during Metacello's bootstrap initialization to all classes in the system. Respond false." + ^ false!
Item was added: + ----- Method: MetacelloStub class>>new (in category 'overriding') ----- + new + self confirmMetacello. + ^ (Smalltalk at: #Metacello) new!
Thanks for that change to #installGitInfrastructure Jakob, it opened my eyes to an easy way to test this. I think this is the one.
There was an underscore assignment in one of the loaded packages of GitInfrastructure, that's why the Scanner allowUnderscoreAssignment:.
Best, Chris
PS -- I've updated the Tools menu from "GitInfrastructure" to "Git Browser", but will wait to commit that until after we're sure this is good.
On Wed, Apr 10, 2019 at 11:23 PM commits@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.430.mcz
==================== Summary ====================
Name: Installer-Core-cmm.430 Author: cmm Time: 10 April 2019, 11:23:30.85688 pm UUID: cb5b16dd-ba30-4ca0-8293-a58f16759490 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.
=============== 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 ].
self isMetacelloInstalled ifFalse: [
"Prepare a clean environment for it."
Smalltalk globals removeKey: #Metacello.
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.
metacello := Smalltalk classNamed: #Metacello ].
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:
- ----- Method: Installer class>>installAndOpenGitBrowser (in category 'scripts') -----
- installAndOpenGitBrowser
self installGitInfrastructure.
(Smalltalk at: #SquitBrowser) open.!
Item was changed: ----- Method: Installer class>>installGitInfrastructure (in category 'scripts') ----- installGitInfrastructure
- "for INIFileTest>>#testComplexRead"
- Scanner allowUnderscoreAsAssignment: true.
self ensureRecentMetacello.
(Smalltalk at: #Metacello) new baseline: 'Squot'; repository: 'github://hpi-swa/Squot:master/src'; load.!
Item was added:
- ----- Method: Installer class>>isMetacelloInstalled (in category 'scripts') -----
- isMetacelloInstalled
"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."
^ (Smalltalk at: #Metacello) ~= MetacelloStub!
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>>confirmMetacello (in category 'overriding') -----
- confirmMetacello
Installer isMetacelloInstalled ifFalse:
[ (UIManager confirm: 'This action requires Metacello, but it''s not installed. Download and install it now?') ifTrue: [ Installer ensureRecentMetacello ] ]!
Item was added:
- ----- Method: MetacelloStub class>>doesNotUnderstand: (in category 'overriding') -----
- doesNotUnderstand: aMessage
"Handle any messages sent to Metacello class, too."
self confirmMetacello.
^ aMessage sendTo: (Smalltalk classNamed: #Metacello)!
Item was added:
- ----- Method: MetacelloStub class>>initialize (in category 'initialize-release') -----
- initialize
Smalltalk
at: #Metacello
ifAbsentPut: [ self ]!
Item was added:
- ----- Method: MetacelloStub class>>isMetacelloConfig (in category 'overriding') -----
- isMetacelloConfig
"Sent during Metacello's bootstrap initialization to all classes in the system. Respond false."
^ false!
Item was added:
- ----- Method: MetacelloStub class>>new (in category 'overriding') -----
- new
self confirmMetacello.
^ (Smalltalk at: #Metacello) new!
What about running FixUnderscores on the affected package?
On Thu, Apr 11, 2019 at 12:28 AM Jakob Reschke forums.jakob@resfarm.de wrote:
Am Do., 11. Apr. 2019 um 06:32 Uhr schrieb Chris Muller asqueaker@gmail.com:
There was an underscore assignment in one of the loaded packages of GitInfrastructure, that's why the Scanner allowUnderscoreAssignment:.
Should this be reset after the load is complete?
squeak-dev@lists.squeakfoundation.org