gitHub/GitHubSmalltalkPackageReader.st
author Claus Gittinger <cg@exept.de>
Mon, 15 Jul 2019 15:37:27 +0200
branchcvs_MAIN
changeset 880 bd52c31956df
parent 836 0532577f26df
permissions -rw-r--r--
#OTHER by cg unneeded subProjects method removed (already inherited)

"{ 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$'
! !