Below is a fileout of 'ConfigurationOfPharoJS'. I download new releases of PharoJS as they become available. Recently I found a regression ��- a ��method 'PjApplication class >> playgroundWithoutLaunch' did not work any more. What I wanted to do was to revert the whole project to an earlier version until the method worked again - then look for the code that has been changed between releases and find the bug.
In practice, even the earliest version (version 1.0 - method #version10) did have the bug and I could not roll back the project to earlier release states because there is no metadate for them. But I'd still like to learn how to do it, so let's just say I want to compare version 1.2 and 1.3:
version12: spec
<version: '1.2' imports: #('0.1-baseline' )>
version13: spec
<version: '1.3' imports: #('0.2-baseline' )>
I hope this makes sense. Thanks for helping me understand!
-- Siemen
Fileout:
------------
'From Pharo5.0 of 16 April 2015 [Latest update: #50765] on 30 March 2017 at 8:41:59.866839 am'!
Object subclass: #ConfigurationOfPharoJS
instanceVariableNames: 'project'
classVariableNames: 'LastVersionLoad'
poolDictionaries: ''
category: 'ConfigurationOfPharoJS'!
!ConfigurationOfPharoJS methodsFor: 'symbolic versions' stamp: 'NouryBouraqadi 3/9/2017 17:03'!
development: spec
<symbolicVersion: #'development'>
spec for: #'common' version: '0.2-baseline'.
! !
!ConfigurationOfPharoJS methodsFor: 'symbolic versions' stamp: 'NouryBouraqadi 3/9/2017 17:03'!
stable: spec
<symbolicVersion: #'stable'>
spec for: #'common' version: '1.3'.
! !
!ConfigurationOfPharoJS methodsFor: 'accessing' stamp: 'NouryBouraqadi 12/6/2016 10:27'!
customProjectAttributes
�� �� "Edit to return a collection of any custom attributes e.g. for conditional loading: Array with: #'Condition1' with: #'Condition2.
�� �� ^ #()! !
!ConfigurationOfPharoJS methodsFor: 'accessing' stamp: 'NouryBouraqadi 12/6/2016 10:27'!
project��
�� �� ^ project��
�� �� �� �� ifNil: [��
�� �� �� �� �� �� "Bootstrap Metacello if it is not already loaded"
�� �� �� �� �� �� self class ensureMetacello.
�� �� �� �� �� �� project := MetacelloMCProject new projectAttributes: self customProjectAttributes. "Create the Metacello project"
�� �� �� �� �� �� (Smalltalk at: #'MetacelloVersionConstructor') on: self project: project. "Construct the project"
�� �� �� �� �� �� project loadType: #'linear'. "change to #atomic if desired"
�� �� �� �� �� �� project ]! !
!ConfigurationOfPharoJS methodsFor: 'versions' stamp: 'NouryBouraqadi 3/9/2017 17:03'!
version13: spec
<version: '1.3' imports: #('0.2-baseline' )>
spec for: #'common' do: [
spec blessing: #'stable'.
spec description: 'version 1.3'.
spec author: 'NouryBouraqadi'.
spec timestamp: '3/9/2017 17:03'.
spec��
project: 'ReusableBricks' with: '1.2';
project: 'WebBrowser' with: '0.2.0';
project: 'ZincHTTPComponents' with: '2.8.3'.
spec��
package: 'PharoJsApp' with: 'PharoJsApp-DaveMason.27';
package: 'PharoJsBridge' with: 'PharoJsBridge-DaveMason.114';
package: #PharoJsCoreLibraries with: 'PharoJsCoreLibraries-NouryBouraqadi.85';
package: #PharoJsCoreLibrariesTest with: 'PharoJsCoreLibrariesTest-NouryBouraqadi.5';
package: 'PharoJsExamples' with: 'PharoJsExamples-NouryBouraqadi.24';
package: #PharoJsExporter with: 'PharoJsExporter-DaveMason.67';
package: 'PharoJsTestFramework' with: 'PharoJsTestFramework-NouryBouraqadi.43';
package: #PharoJsTiming with: 'PharoJsTiming-DaveMason.20';
package: 'PharoJsTools' with: 'PharoJsTools-DaveMason.33';
package: 'PharoJsTranspiler' with: 'PharoJsTranspiler-DaveMason.251';
package: #PharoJsTranspilerOptimization with: 'PharoJsTranspilerOptimization-DaveMason.36'. ].
! !
!ConfigurationOfPharoJS methodsFor: 'versions' stamp: 'NouryBouraqadi 2/18/2017 20:29'!
version12: spec
<version: '1.2' imports: #('0.1-baseline' )>
spec for: #'common' do: [
spec blessing: #'stable'.
spec description: 'version 1.2'.
spec author: 'NouryBouraqadi'.
spec timestamp: '2/18/2017 20:29'.
spec��
project: 'ReusableBricks' with: '1.2';
project: 'WebBrowser' with: '0.2.0';
project: 'ZincHTTPComponents' with: '2.8.3'.
spec��
package: 'PharoJsApp' with: 'PharoJsApp-NouryBouraqadi.25';
package: 'PharoJsBridge' with: 'PharoJsBridge-DaveMason.111';
package: #PharoJsCoreLibraries with: 'PharoJsCoreLibraries-DaveMason.79';
package: 'PharoJsExamples' with: 'PharoJsExamples-NouryBouraqadi.22';
package: #PharoJsExporter with: 'PharoJsExporter-DaveMason.65';
package: 'PharoJsTestFramework' with: 'PharoJsTestFramework-NouryBouraqadi.38';
package: #PharoJsTiming with: 'PharoJsTiming-DaveMason.20';
package: 'PharoJsTools' with: 'PharoJsTools-DaveMason.33';
package: 'PharoJsTranspiler' with: 'PharoJsTranspiler-DaveMason.248';
package: #PharoJsTranspilerOptimization with: 'PharoJsTranspilerOptimization-DaveMason.36'. ].
! !
!ConfigurationOfPharoJS methodsFor: 'versions' stamp: 'NouryBouraqadi 12/7/2016 13:19'!
version10: spec
<version: '1.0' imports: #('0.1-baseline' )>
spec for: #'common' do: [
spec blessing: #'stable'.
spec description: 'version 1.0'.
spec author: 'NouryBouraqadi'.
spec timestamp: '12/7/2016 13:19'.
spec��
project: 'ReusableBricks' with: '1.2';
project: 'WebBrowser' with: '0.2.0';
project: 'ZincHTTPComponents' with: '2.8.0'.
spec��
package: 'PharoJsApp' with: 'PharoJsApp-DaveMason.23';
package: 'PharoJsBridge' with: 'PharoJsBridge-NouryBouraqadi.86';
package: #PharoJsCoreLibraries with: 'PharoJsCoreLibraries-NouryBouraqadi.67';
package: 'PharoJsExamples' with: 'PharoJsExamples-NouryBouraqadi.17';
package: #PharoJsExporter with: 'PharoJsExporter-DaveMason.54';
package: 'PharoJsTestFramework' with: 'PharoJsTestFramework-NouryBouraqadi.35';
package: #PharoJsTiming with: 'PharoJsTiming-DaveMason.16';
package: 'PharoJsTools' with: 'PharoJsTools-DaveMason.22';
package: 'PharoJsTranspiler' with: 'PharoJsTranspiler-NouryBouraqadi.237';
package: #PharoJsTranspilerOptimization with: 'PharoJsTranspilerOptimization-DaveMason.35'. ].
! !
!ConfigurationOfPharoJS methodsFor: 'versions' stamp: 'NouryBouraqadi 2/6/2017 17:53'!
version11: spec
<version: '1.1' imports: #('0.1-baseline' )>
spec for: #'common' do: [
spec blessing: #'stable'.
spec description: 'version 1.1'.
spec author: 'NouryBouraqadi'.
spec timestamp: '2/6/2017 17:53'.
spec��
project: 'ReusableBricks' with: '1.2';
project: 'WebBrowser' with: '0.2.0';
project: 'ZincHTTPComponents' with: '2.8.2'.
spec��
package: 'PharoJsApp' with: 'PharoJsApp-NouryBouraqadi.25';
package: 'PharoJsBridge' with: 'PharoJsBridge-NouryBouraqadi.109';
package: #PharoJsCoreLibraries with: 'PharoJsCoreLibraries-NouryBouraqadi.77';
package: 'PharoJsExamples' with: 'PharoJsExamples-NouryBouraqadi.22';
package: #PharoJsExporter with: 'PharoJsExporter-nouryBouraqadi.64';
package: 'PharoJsTestFramework' with: 'PharoJsTestFramework-NouryBouraqadi.38';
package: #PharoJsTiming with: 'PharoJsTiming-DaveMason.20';
package: 'PharoJsTools' with: 'PharoJsTools-NouryBouraqadi.32';
package: 'PharoJsTranspiler' with: 'PharoJsTranspiler-NouryBouraqadi.246';
package: #PharoJsTranspilerOptimization with: 'PharoJsTranspilerOptimization-DaveMason.35'. ].
! !
!ConfigurationOfPharoJS methodsFor: 'baselines' stamp: 'NouryBouraqadi 12/6/2016 10:29'!
baseline01: spec
<version: '0.1-baseline'>
spec for: #'common' do: [
spec blessing: #'baseline'.
spec��
project: 'ReusableBricks' with: [
spec
className: #ConfigurationOfReusableBricks;
versionString: #'stable';
loads: #('Equals' );
project: 'WebBrowser' with: [
spec
className: #ConfigurationOfWebBrowser;
versionString: #'stable';
project: 'ZincHTTPComponents' with: [
spec
className: #ConfigurationOfZincHTTPComponents;
versionString: #'stable';
loads: #('Zinc-WebSocket-Core' );
spec��
package: 'PharoJsApp' with: [
spec requires: #('PharoJsTranspiler' ). ];
package: 'PharoJsBridge' with: [
spec requires: #(#PharoJsCoreLibraries #PharoJsExporter 'PharoJsApp' 'WebBrowser' 'ZincHTTPComponents' ). ];
package: #PharoJsCoreLibraries with: [
spec requires: #('PharoJsTranspiler' ). ];
package: 'PharoJsExamples' with: [
spec requires: #('PharoJsApp' 'PharoJsTranspiler' 'PharoJsTestFramework' ). ];
package: #PharoJsExporter with: [
spec requires: #('PharoJsTranspiler' 'PharoJsApp' ). ];
package: 'PharoJsTestFramework' with: [
spec requires: #(#PharoJsExporter 'PharoJsBridge' 'PharoJsApp' ). ];
package: #PharoJsTiming with: [
spec requires: #(#PharoJsTranspilerOptimization 'PharoJsBridge' ). ];
package: 'PharoJsTools' with: [
spec requires: #('PharoJsBridge' ). ];
package: 'PharoJsTranspiler' with: [
spec requires: #('ReusableBricks' ). ];
package: #PharoJsTranspilerOptimization with: [
spec requires: #('PharoJsTranspiler' ). ]. ].
! !
!ConfigurationOfPharoJS methodsFor: 'baselines' stamp: 'NouryBouraqadi 3/3/2017 12:36'!
baseline02: spec
<version: '0.2-baseline'>
spec for: #'common' do: [
spec blessing: #'baseline'.
spec��
project: 'ReusableBricks' with: [
spec
className: #ConfigurationOfReusableBricks;
versionString: #'stable';
loads: #('Equals' );
project: 'WebBrowser' with: [
spec
className: #ConfigurationOfWebBrowser;
versionString: #'stable';
project: 'ZincHTTPComponents' with: [
spec
className: #ConfigurationOfZincHTTPComponents;
versionString: #'stable';
loads: #('Zinc-WebSocket-Core' );
spec��
package: 'PharoJsApp' with: [
spec requires: #('PharoJsTranspiler' ). ];
package: 'PharoJsBridge' with: [
spec requires: #(#PharoJsCoreLibraries #PharoJsExporter 'PharoJsApp' 'WebBrowser' 'ZincHTTPComponents' ). ];
package: #PharoJsCoreLibraries with: [
spec requires: #('PharoJsTranspiler' ). ];
package: #PharoJsCoreLibrariesTest with: [
spec requires: #(#PharoJsCoreLibraries 'PharoJsBridge' ). ];
package: 'PharoJsExamples' with: [
spec requires: #('PharoJsApp' 'PharoJsTranspiler' 'PharoJsTestFramework' ). ];
package: #PharoJsExporter with: [
spec requires: #('PharoJsTranspiler' 'PharoJsApp' ). ];
package: 'PharoJsTestFramework' with: [
spec requires: #(#PharoJsExporter 'PharoJsBridge' 'PharoJsApp' ). ];
package: #PharoJsTiming with: [
spec requires: #(#PharoJsTranspilerOptimization 'PharoJsBridge' ). ];
package: 'PharoJsTools' with: [
spec requires: #('PharoJsBridge' ). ];
package: 'PharoJsTranspiler' with: [
spec requires: #('ReusableBricks' ). ];
package: #PharoJsTranspilerOptimization with: [
spec requires: #('PharoJsTranspiler' ). ]. ].
! !
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!
ConfigurationOfPharoJS class
instanceVariableNames: ''!
!ConfigurationOfPharoJS class methodsFor: 'loading' stamp: 'NouryBouraqadi 12/6/2016 10:27'!
loadDevelopment
"Load the #development version defined for this platform. The #development version will change over time and is not expected to be stable."
"self loadDevelopment"
<apiDocumentation>
^(self project version: #development) load! !
!ConfigurationOfPharoJS class methodsFor: 'loading' stamp: 'NouryBouraqadi 12/6/2016 10:27'!
load
"Load the #stable version defined for this platform. The #stable version is the version that is recommended to be used on this platform."
"self load"
<apiDocumentation>
^(self project version: #stable) load! !
!ConfigurationOfPharoJS class methodsFor: 'loading' stamp: 'NouryBouraqadi 12/6/2016 10:27'!
loadBleedingEdge
"Load the latest versions of the mcz files defined for this project. It is not likely that the #bleedingEdge has been tested."
"self loadBleedingEdge"
<apiDocumentation>
^(self project version: #bleedingEdge) load! !
!ConfigurationOfPharoJS class methodsFor: 'private' stamp: 'NouryBouraqadi 12/6/2016 10:27'!
ensureMetacello
(self baseConfigurationClassIfAbsent: []) ensureMetacello! !
!ConfigurationOfPharoJS class methodsFor: 'private' stamp: 'NouryBouraqadi 12/6/2016 10:27'!
baseConfigurationClassIfAbsent: aBlock
^Smalltalk
at: #'ConfigurationOf'
ifAbsent: [��
self ensureMetacelloBaseConfiguration.
Smalltalk at: #'ConfigurationOf' ifAbsent: aBlock ].! !
!ConfigurationOfPharoJS class methodsFor: 'private' stamp: 'NouryBouraqadi 12/6/2016 10:27'!
ensureMetacelloBaseConfiguration
�� Smalltalk
�� �� at: #'ConfigurationOf'
�� �� ifAbsent: [��
�� �� �� | repository version |
�� �� �� repository := MCHttpRepository
�� �� �� �� user: ''
�� �� �� �� password: ''.
�� �� �� repository
�� �� �� �� versionReaderForFileNamed: 'Metacello-Base-dkh.107'
�� �� �� �� do: [ :reader |��
�� �� �� �� �� version := reader version.
�� �� �� �� �� version load.
�� �� �� �� �� version workingCopy repositoryGroup addRepository: repository ] ]! !
!ConfigurationOfPharoJS class methodsFor: 'development support' stamp: 'NouryBouraqadi 12/6/2016 10:27'!
DevelopmentSupport
"See the methods in the 'development support' category on the class-side of MetacelloBaseConfiguration. Decide what development support methods you would like to use and copy them the the class-side of your configuration."
<apiDocumentation>! !
!ConfigurationOfPharoJS class methodsFor: 'development support' stamp: 'NouryBouraqadi 12/6/2016 10:27'!
validate
"Check the configuration for Errors, Critical Warnings, and Warnings (see class comment for MetacelloMCVersionValidator for more information).��
Errors identify specification issues that will result in unexpected behaviour when you load the configuration.��
Critical Warnings identify specification issues that may result in unexpected behavior when you load the configuration.
Warnings identify specification issues that are technically correct, but are worth take a look at."
"self validate"
<apiDocumentation>
self ensureMetacello.
^ ((Smalltalk at: #MetacelloToolBox) validateConfiguration: self debug: #() recurse: false) explore! !
!ConfigurationOfPharoJS class methodsFor: 'accessing' stamp: 'NouryBouraqadi 12/6/2016 10:27'!
project
^self new project! !
!ConfigurationOfPharoJS class methodsFor: 'metacello tool support' stamp: 'NouryBouraqadi 12/6/2016 10:27'!
isMetacelloConfig
"Answer true and the Metacello tools will operate on you"
^true! !