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
--- 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'!