Issure #63: Simplified #doUpdateProjectDefinition
authorJan Vrany <jan.vrany@fit.cvut.cz>
Fri, 28 Jul 2017 08:29:24 +0100
changeset 764 7371720deeff
parent 762 8d9e88c99475
child 795 aea8f9d9a237
Issure #63: Simplified #doUpdateProjectDefinition Do not tinker with #classNamesAndAttributes manually when updating class list. Let the `ProjectDefinition` to care for all details (which is its job anyway). See https://swing.fit.cvut.cz/projects/stx-jv/ticket/63
common/SCMAbstractFileoutLikeTask.st
mercurial/HGStXTests.st
--- a/common/SCMAbstractFileoutLikeTask.st	Mon Jul 17 03:51:47 2017 +0000
+++ b/common/SCMAbstractFileoutLikeTask.st	Fri Jul 28 08:29:24 2017 +0100
@@ -538,7 +538,7 @@
 !
 
 doUpdateProjectDefinitionFor: package
-    | prjClass prjClassChanged classesSpec classNamesAndAttributesMap |
+    | prjClass prjClassChanged |
 
     (packageClassesChanged | packageExtensionsChanged) ifFalse:[
         ^ self
@@ -551,19 +551,6 @@
         prjClassChanged := true.
     ].
 
-    "/Update classlist beforehand - to care about order and removals...
-    classNamesAndAttributesMap := Dictionary new.
-    prjClass classNamesAndAttributes do:[:nameOrPair |
-        nameOrPair isArray
-            ifTrue:[classNamesAndAttributesMap at: nameOrPair first put: nameOrPair]
-            ifFalse:[classNamesAndAttributesMap at: nameOrPair put: (Array with: nameOrPair)]
-    ].
-    classesSpec := prjClass searchForClasses reject:[:cls | cls isJavaClass ] thenCollect:[:cls|
-        classNamesAndAttributesMap at: cls name ifAbsent:[Array with: cls name]
-    ].
-    prjClass classNamesAndAttributes:classesSpec usingCompiler:nil.
-
-
     "/Now do standard update
     [
         prjClass theNonMetaclass
@@ -582,7 +569,8 @@
     ].
 
     "Created: / 21-02-2014 / 23:17:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 11-06-2015 / 22:37:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 27-07-2017 / 11:10:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (comment): / 28-07-2017 / 08:22:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !SCMAbstractFileoutLikeTask methodsFor:'private'!
--- a/mercurial/HGStXTests.st	Mon Jul 17 03:51:47 2017 +0000
+++ b/mercurial/HGStXTests.st	Fri Jul 28 08:29:24 2017 +0100
@@ -825,6 +825,44 @@
     "Modified: / 05-03-2014 / 21:48:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+test_commit_10d
+    "
+        Test if project definition class is automatically updated when committing.
+
+        Case d: introduce a new superclass (which must be listed before its subclass)
+    "
+
+    | repo cls pm ct |
+
+    repo := self repositoryNamed: 'mocks/hg/p1'.
+    self assert: (Smalltalk loadPackage: 'mocks:hg/p1').
+
+    cls := Object subclass:#MockHGP1Baz instanceVariableNames:'' classVariableNames:'' poolDictionaries:''.
+    cls package: #'mocks:hg/p1'.
+    (cls compile:'zork ^ 1' classified:'test') package: #'mocks:hg/p1'.
+    cls := (Smalltalk at: #MockHGP1Baz) subclass:#MockHGP1Bar instanceVariableNames:'' classVariableNames:'' poolDictionaries:''.
+    cls package: #'mocks:hg/p1'.
+
+    self assert: (Smalltalk at: #MockHGP1Bar) superclass == (Smalltalk at: #MockHGP1Baz).
+    self assert: (Smalltalk at: #MockHGP1Bar) package = #'mocks:hg/p1'.
+
+    pm := HGPackageWorkingCopy named: #'mocks:hg/p1'.
+    ct := pm commitTask.
+    ct message:'test_commit_10a'.
+    ct doPrepareWorkingCopy.
+
+    self assert: ((Smalltalk at: #'mocks_hg_p1') classNamesAndAttributes includes: #MockHGP1Baz).
+    self assert: ((Smalltalk at: #'mocks_hg_p1') classNamesAndAttributes includes: #MockHGP1Bar).
+    self assert: ((Smalltalk at: #'mocks_hg_p1') classNamesAndAttributes indexOf: #MockHGP1Baz) < ((Smalltalk at: #'mocks_hg_p1') classNamesAndAttributes indexOf: #MockHGP1Bar).
+
+    "
+        repo workingCopy browse
+    "
+"/    self assert: (Smalltalk at:#mocks_hg_p1) hgLogicalRevision revno = 2.
+
+    "Created: / 28-07-2017 / 08:12:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 test_commit_11a
     "
         Test if commit task detects method protocol changes
@@ -2274,6 +2312,37 @@
     self assert: (repo @ 2) bookmarks anElement name = testSelector.
 
     "Created: / 27-06-2016 / 11:43:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_commit_issue63
+    "
+    Issue #63: Windowns specific classes are lost when build files are generated under Unix
+
+    See https://swing.fit.cvut.cz/projects/stx-jv/ticket/63
+    "
+
+    | pm ct classes1 classes2 |
+
+    [
+
+    classes1 := stx_libbasic classNamesAndAttributes.
+
+    pm := HGPackageWorkingCopy named: 'stx:libbasic'.
+    ct := pm commitTask.
+    ct doInitStateVariables.
+    ct doUpdateProjectDefinition.
+
+    classes2 := stx_libbasic classNamesAndAttributes.
+
+    self assert: (classes1 \ classes2) isEmpty.
+    self assert: (classes2 \ classes1) isEmpty.
+
+
+    ] ensure:[ 
+        stx_libbasic  classNamesAndAttributes:classes1 usingCompiler:nil.          
+    ].
+
+    "Created: / 24-07-2017 / 23:05:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !HGStXTests methodsFor:'tests - commit - java'!