#UI_ENHANCEMENT by cg cvs_MAIN
authorClaus Gittinger <cg@exept.de>
Sun, 01 Jul 2018 09:26:39 +0200
branchcvs_MAIN
changeset 834 2b28951ed901
parent 831 eec6475ab243
child 836 0532577f26df
#UI_ENHANCEMENT by cg class: GitHubSmalltalkPackageReader class definition added: #buildPackageChangeSet changed: #readClasses #readPackage
gitHub/GitHubSmalltalkPackageReader.st
--- a/gitHub/GitHubSmalltalkPackageReader.st	Sat Jun 30 18:44:05 2018 +0200
+++ b/gitHub/GitHubSmalltalkPackageReader.st	Sun Jul 01 09:26:39 2018 +0200
@@ -1,9 +1,11 @@
+"{ Encoding: utf8 }"
+
 "{ Package: 'stx:libscm/gitHub' }"
 
 "{ NameSpace: Smalltalk }"
 
 Object subclass:#GitHubSmalltalkPackageReader
-	instanceVariableNames:'changeSet packageDirectory packageName'
+	instanceVariableNames:'changeSet packageDirectory packageName classChangeSets'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'SCM-GitHub-Package-Reader'
@@ -56,13 +58,57 @@
 
 !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:[
-            GitHubSmalltalkClassReader new
-                changeSet:changeSet;
-                classDirectory:eachDirectory;
-                readClass.
+            changeSet := 
+                GitHubSmalltalkClassReader new
+                    classDirectory:eachDirectory;
+                    readClass;
+                    changeSet.
+            classChangeSets add:changeSet.        
         ].        
     ].
 
@@ -77,19 +123,21 @@
     "
 
     "Created: / 30-06-2018 / 18:24:49 / Claus Gittinger"
+    "Modified: / 01-07-2018 / 09:12:46 / Claus Gittinger"
 !
 
 readPackage
     |props|
 
-    changeSet := ChangeSet new.
-    
+    classChangeSets := OrderedCollection new.
     props := JSONReader fromJSON:(packageDirectory / 'properties.json') contentsOfEntireFile.
     props notEmptyOrNil ifTrue:[self halt].
     
     packageName := packageDirectory withoutSuffix baseName .
 
     self readClasses.
+    self buildPackageChangeSet.
+
 
     "
      |changes|
@@ -102,6 +150,7 @@
     "
 
     "Created: / 30-06-2018 / 18:20:13 / Claus Gittinger"
+    "Modified: / 01-07-2018 / 09:12:10 / Claus Gittinger"
 ! !
 
 !GitHubSmalltalkPackageReader class methodsFor:'documentation'!