"{ Encoding: utf8 }"
"{ Package: 'stx:libscm/gitHub' }"
"{ NameSpace: Smalltalk }"
Object subclass:#GitHubSmalltalkPackageReader
instanceVariableNames:'changeSet packageDirectory packageName classChangeSets'
classVariableNames:''
poolDictionaries:''
category:'SCM-GitHub-Package-Reader'
!
!GitHubSmalltalkPackageReader class methodsFor:'documentation'!
documentation
"
a q&d hack, to read packages/classes from github
read a .package definition as stored by Pharo/Squeak in gitHub.
[author:]
Claus Gittinger
[instance variables:]
[class variables:]
[see also:]
"
!
examples
"
|changes|
changes := self new
packageDirectory:'/Users/cg/work/stx/goodies/smaCC/SmaCC-master/SmaCC-Cucumber.package';
readPackage;
changeSet.
ChangeSetBrowser openOn:changes
"
! !
!GitHubSmalltalkPackageReader class methodsFor:'reading'!
readPackageFrom:aPackageDirectory
"read a .package folder; return a changeSet for that package"
^ self new
packageDirectory:aPackageDirectory;
readPackage;
changeSet.
"Created: / 30-06-2018 / 18:16:04 / Claus Gittinger"
! !
!GitHubSmalltalkPackageReader methodsFor:'accessing'!
changeSet
^ changeSet
!
packageDirectory:aDirectoryName
packageDirectory := aDirectoryName asFilename.
"Modified: / 30-06-2018 / 18:20:35 / Claus Gittinger"
! !
!GitHubSmalltalkPackageReader methodsFor:'reading'!
buildPackageChangeSet
"sort the classChangeSets by inheritance, to allow for
filein in order"
|setAComesBeforeB|
setAComesBeforeB :=
[:setA :setB |
|definitionA definitionB nameA nameB superNameA superNameB|
definitionA := setA first.
self assert:(definitionA isClassDefinitionChange).
definitionB := setB first.
self assert:(definitionB isClassDefinitionChange).
nameA := definitionA className.
nameB := definitionB className.
superNameA := definitionA superClassName.
superNameB := definitionB superClassName.
nameA = superNameB.
].
classChangeSets := classChangeSets topologicalSort:setAComesBeforeB.
changeSet := ChangeSet new.
classChangeSets do:[:each |
changeSet addAll:each.
].
"
|changes|
changes := self new
packageDirectory:'/Users/cg/work/stx/goodies/smaCC/SmaCC-master/SmaCC-Cucumber.package';
readPackage;
changeSet.
ChangeSetBrowser openOn:changes
"
"Created: / 01-07-2018 / 09:14:35 / Claus Gittinger"
!
readClasses
packageDirectory directoriesDo:[:eachDirectory |
|changeSet|
(eachDirectory hasSuffix:'class') ifTrue:[
changeSet :=
GitHubSmalltalkClassReader new
classDirectory:eachDirectory;
readClass;
changeSet.
classChangeSets add:changeSet.
].
].
"
|changes|
changes := self new
classDirectory:'/Users/cg/work/stx/goodies/smaCC/SmaCC-master/SmaCC-Cucumber.package/CucumberParserTests.class';
readClass;
changeSet.
ChangeSetBrowser openOn:changes
"
"Created: / 30-06-2018 / 18:24:49 / Claus Gittinger"
"Modified: / 01-07-2018 / 09:12:46 / Claus Gittinger"
!
readPackage
|props|
classChangeSets := OrderedCollection new.
props := JSONReader fromJSON:(packageDirectory / 'properties.json') contentsOfEntireFile.
props notEmptyOrNil ifTrue:[self halt].
packageName := packageDirectory withoutSuffix baseName .
self readClasses.
self buildPackageChangeSet.
"
|changes|
changes := self new
packageDirectory:'/Users/cg/work/stx/goodies/smaCC/SmaCC-master/SmaCC-Cucumber.package';
readPackage;
changeSet.
ChangeSetBrowser openOn:changes
"
"Created: / 30-06-2018 / 18:20:13 / Claus Gittinger"
"Modified: / 01-07-2018 / 09:12:10 / Claus Gittinger"
! !
!GitHubSmalltalkPackageReader class methodsFor:'documentation'!
version
^ '$Header$'
!
version_CVS
^ '$Header$'
! !