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

commits at source.squeak.org commits at source.squeak.org
Thu Apr 11 04:23:31 UTC 2019

Chris Muller uploaded a new version of Installer-Core to project The Inbox:

==================== 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') -----
  	"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';
  		"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';
  	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') -----
+ "for INIFileTest>>#testComplexRead"
+ Scanner allowUnderscoreAsAssignment: true. 
- 	self ensureRecentMetacello.
  	(Smalltalk at: #Metacello) new
  		  baseline: 'Squot';
  		  repository: 'github://hpi-swa/Squot:master/src';

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!

More information about the Squeak-dev mailing list