Fixed regression for selective class commit.
After a refactoring to support selective commit dies not work as it called obsoleted
method #containersToFileOut. This commits re-implements this method and
adds a number of tests to cover this issue.
--- a/common/SCMAbstractFileoutLikeTask.st Sun Apr 27 11:12:27 2014 +0100
+++ b/common/SCMAbstractFileoutLikeTask.st Thu May 01 10:22:04 2014 +0100
@@ -246,8 +246,6 @@
"Created: / 21-02-2014 / 23:01:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
-
-
doFileOut
"Fileouts everything to the working copy"
@@ -541,20 +539,6 @@
!SCMAbstractFileoutLikeTask methodsFor:'private'!
-classesToFileOut
-
- self shouldNotImplement.
- suppressClasses == true ifTrue:[^#()].
-
- ^ self package classesFiltered:
- [:class |
- class isLoaded and: [ classes isNil or: [ classes includes: class ] ] ]
-
- "Created: / 23-03-2009 / 12:08:24 / Jan Vrany <vranyj1@fel.cvut.cz>"
- "Modified: / 11-06-2009 / 18:17:38 / Jan Vrany <vranyj1@fel.cvut.cz>"
- "Modified: / 22-02-2014 / 22:51:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
classesToFileOutFor: package
suppressClasses == true ifTrue:[^#()].
@@ -568,10 +552,18 @@
!
containersToFileOut
- self shouldNotImplement
+ ^ OrderedCollection streamContents: [ :s |
+ packages do:[:each |
+ each isVirtual ifFalse: [
+ | containers |
+ containers := (self containersToFileOutFor: each) collect:[ :container | each repositoryRoot , Filename separator , container ].
+ s nextPutAll: containers.
+ ]
+ ]
+ ].
"Created: / 14-05-2009 / 11:35:05 / Jan Vrany <vranyj1@fel.cvut.cz>"
- "Modified: / 22-02-2014 / 22:50:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 01-05-2014 / 10:07:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
containersToFileOutFor: package
@@ -649,9 +641,7 @@
"Created: / 24-06-2009 / 19:04:48 / Jan Vrany <vranyj1@fel.cvut.cz>"
"Modified: / 19-08-2009 / 13:54:39 / Jan Vrany <vranyj1@fel.cvut.cz>"
"Modified: / 03-03-2014 / 09:18:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
- !
+! !
!SCMAbstractFileoutLikeTask methodsFor:'queries'!
@@ -676,3 +666,4 @@
version_SVN
^ '§Id:: §'
! !
+
--- a/mercurial/HGStXTests.st Sun Apr 27 11:12:27 2014 +0100
+++ b/mercurial/HGStXTests.st Thu May 01 10:22:04 2014 +0100
@@ -1637,6 +1637,73 @@
self assert: ((cs / 'bc.mak') contents asString includesString: 'MockHGP1Bar') not.
"Created: / 02-04-2014 / 14:30:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_commit_19a
+ "
+ Simple selective commit
+ "
+
+ | repo pm ct |
+
+ repo := self repositoryNamed: 'mocks/hg/p1'.
+ self assert: (Smalltalk loadPackage:'mocks:hg/p1').
+ self dumpRepositoryLog: repo.
+
+ self deny: ((repo @ 1 / 'MockHGP1Bar.st') contents asString includesString:'zork ^ 1').
+
+ ((Smalltalk at: #MockHGP1Bar) compile:'zork ^ 1' classified:'test') package: (Smalltalk at: #MockHGP1Bar) package.
+ pm := HGPackageWorkingCopy named: 'mocks:hg/p1'.
+ ct := pm commitTask.
+ self assert: ct isCommitingNewHead not.
+ ct message:'test_commit_01'.
+ ct classes: (Array with: (Smalltalk at: #MockHGP1Bar)).
+ ct do.
+ self dumpRepositoryLog: repo.
+
+ "
+ repo workingCopy browse
+ "
+ self assert: ((repo @ 2 / 'MockHGP1Bar.st') contents asString includesString:'zork ^ 1').
+ self assert: (Smalltalk at:#mocks_hg_p1) hgLogicalRevision revno = 2.
+
+ "Created: / 01-05-2014 / 09:14:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_commit_19b
+ "
+ Simple selective commit - modify two classes
+ but commit only one.
+ "
+
+ | repo pm ct |
+
+ repo := self repositoryNamed: 'mocks/hg/p1'.
+ self assert: (Smalltalk loadPackage:'mocks:hg/p1').
+ self dumpRepositoryLog: repo.
+
+ self deny: ((repo @ 1 / 'MockHGP1Bar.st') contents asString includesString:'zork ^ 1').
+ self deny: ((repo @ 1 / 'MockHGP1Foo.st') contents asString includesString:'zork ^ 1').
+
+ ((Smalltalk at: #MockHGP1Bar) compile:'zork ^ 1' classified:'test') package: (Smalltalk at: #MockHGP1Bar) package.
+ ((Smalltalk at: #MockHGP1Foo) compile:'zork ^ 1' classified:'test') package: (Smalltalk at: #MockHGP1Foo) package.
+ pm := HGPackageWorkingCopy named: 'mocks:hg/p1'.
+ ct := pm commitTask.
+ self assert: ct isCommitingNewHead not.
+ ct message:'test_commit_01'.
+ ct classes: (Array with: (Smalltalk at: #MockHGP1Bar)).
+ ct do.
+ self dumpRepositoryLog: repo.
+
+ "
+ repo workingCopy browse
+ "
+ self assert: ((repo @ 2 / 'MockHGP1Bar.st') contents asString includesString:'zork ^ 1').
+ self assert: ((repo @ 2 / 'MockHGP1Foo.st') contents asString includesString:'zork ^ 1') not.
+ self assert: ((repo @ 2) changes size = 1).
+ self assert: (Smalltalk at:#mocks_hg_p1) hgLogicalRevision revno = 2.
+
+ "Created: / 01-05-2014 / 09:16:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!HGStXTests methodsFor:'tests - commit - nested'!
@@ -2142,6 +2209,391 @@
"Created: / 26-02-2014 / 22:56:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 05-03-2014 / 21:46:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_commit_nested_06a_1
+ "
+ Nested packages
+ mocks:hg/p2
+ mocks:hg/p2/n1
+ mocks:hg/p2/n2
+
+ 1) load all of them
+ 2) modify MocksHgP2Foo & (selectively) commit MocksHgP2Foo
+ 3) check that n1 & n2 has same logical revision as p1.
+ "
+
+ | repo pmP2 pmP2N1 pmP2N2 ctP2 cs |
+
+ repo := self repositoryNamed: 'mocks/hg/p2'.
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2').
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2/n1').
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2/n2').
+ pmP2 := HGPackageWorkingCopy named: 'mocks:hg/p2'.
+ pmP2N1 := HGPackageWorkingCopy named: 'mocks:hg/p2/n1'.
+ pmP2N2 := HGPackageWorkingCopy named: 'mocks:hg/p2/n2'.
+ self assert: pmP2N1 revision = pmP2N2 revision.
+
+ "=== A modifies & commits =============================== "
+ ((Smalltalk at: #MocksHgP2Foo) compile:'zork ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2Foo) package.
+
+ ctP2 := pmP2 commitTask.
+ ctP2 classes: (Array with: (Smalltalk at: #MocksHgP2Foo)).
+ ctP2 message:'test_commit_nested_06a 1'.
+ ctP2 do.
+
+ self assert: pmP2 revision = pmP2N1 revision.
+ self assert: pmP2 revision = pmP2N2 revision.
+
+ cs := repo @ 4.
+ self assert: cs changes size == 1.
+ self assert: cs changes anElement path = 'MocksHgP2Foo.st'.
+
+
+
+ "
+ repo workingCopy browse
+ "
+
+ "Created: / 01-05-2014 / 00:07:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_commit_nested_06a_2
+ "
+ Nested packages
+ mocks:hg/p2
+ mocks:hg/p2/n1
+ mocks:hg/p2/n2
+
+ 1) load all of them
+ 2) modify MocksHgP2Foo & (selectively) commit MocksHgP2Foo
+ 3) check that n1 & n2 has same logical revision as p1.
+ "
+
+ | repo pmP2 pmP2N1 pmP2N2 ctP2 cs |
+
+ repo := self repositoryNamed: 'mocks/hg/p2'.
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2').
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2/n1').
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2/n2').
+ pmP2 := HGPackageWorkingCopy named: 'mocks:hg/p2'.
+ pmP2N1 := HGPackageWorkingCopy named: 'mocks:hg/p2/n1'.
+ pmP2N2 := HGPackageWorkingCopy named: 'mocks:hg/p2/n2'.
+ self assert: pmP2N1 revision = pmP2N2 revision.
+
+ "=== A modifies & commits =============================== "
+ ((Smalltalk at: #MocksHgP2Foo) compile:'zork ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2Foo) package.
+ ((Smalltalk at: #mocks_hg_p2) compile:'qux ^ 2' classified:'test') package: (Smalltalk at: #mocks_hg_p2) package.
+
+ ctP2 := pmP2 commitTask.
+ ctP2 classes: (Array with: (Smalltalk at: #MocksHgP2Foo)).
+ ctP2 message:'test_commit_nested_06a 1'.
+ ctP2 do.
+
+ self assert: pmP2 revision = pmP2N1 revision.
+ self assert: pmP2 revision = pmP2N2 revision.
+
+ cs := repo @ 4.
+ self assert: cs changes size == 1.
+ self assert: cs changes anElement path = 'MocksHgP2Foo.st'.
+
+
+
+ "
+ repo workingCopy browse
+ "
+
+ "Created: / 01-05-2014 / 00:10:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 01-05-2014 / 10:02:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_commit_nested_06b_1
+ "
+ Nested packages
+ mocks:hg/p2
+ mocks:hg/p2/n1
+ mocks:hg/p2/n2
+
+ 1) load all of them
+ 2) modify MocksHgP2Foo & (selectively) commit MocksHgP2Foo
+ 3) check that n1 & n2 has same logical revision as p1.
+ "
+
+ | repo pmP2 pmP2N1 pmP2N2 ctP2 cs |
+
+ repo := self repositoryNamed: 'mocks/hg/p2'.
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2').
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2/n1').
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2/n2').
+ pmP2 := HGPackageWorkingCopy named: 'mocks:hg/p2'.
+ pmP2N1 := HGPackageWorkingCopy named: 'mocks:hg/p2/n1'.
+ pmP2N2 := HGPackageWorkingCopy named: 'mocks:hg/p2/n2'.
+ self assert: pmP2N1 revision = pmP2N2 revision.
+
+ "=== A modifies & commits =============================== "
+ ((Smalltalk at: #MocksHgP2N1Foo) compile:'zork ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2N1Foo) package.
+
+ ctP2 := pmP2 commitTask.
+ ctP2 classes: (Array with: (Smalltalk at: #MocksHgP2N1Foo)).
+ ctP2 message:'test_commit_nested_06a 1'.
+ ctP2 do.
+
+ self assert: pmP2 revision = pmP2N1 revision.
+ self assert: pmP2 revision = pmP2N2 revision.
+
+ cs := repo @ 4.
+ self assert: cs changes size == 1.
+ self assert: cs changes anElement path = 'n1/MocksHgP2N1Foo.st'.
+
+
+
+ "
+ repo workingCopy browse
+ "
+
+ "Created: / 01-05-2014 / 09:21:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_commit_nested_06b_2
+ "
+ Nested packages
+ mocks:hg/p2
+ mocks:hg/p2/n1
+ mocks:hg/p2/n2
+
+ 1) load all of them
+ 2) modify MocksHgP2Foo & (selectively) commit MocksHgP2Foo
+ 3) check that n1 & n2 has same logical revision as p1.
+ "
+
+ | repo pmP2 pmP2N1 pmP2N2 ctP2 cs |
+
+ repo := self repositoryNamed: 'mocks/hg/p2'.
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2').
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2/n1').
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2/n2').
+ pmP2 := HGPackageWorkingCopy named: 'mocks:hg/p2'.
+ pmP2N1 := HGPackageWorkingCopy named: 'mocks:hg/p2/n1'.
+ pmP2N2 := HGPackageWorkingCopy named: 'mocks:hg/p2/n2'.
+ self assert: pmP2N1 revision = pmP2N2 revision.
+
+ "=== A modifies & commits =============================== "
+ ((Smalltalk at: #MocksHgP2N1Foo) compile:'zork ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2N1Foo) package.
+ ((Smalltalk at: #mocks_hg_p2) compile:'qux ^ 2' classified:'test') package: (Smalltalk at: #mocks_hg_p2) package.
+
+ ctP2 := pmP2 commitTask.
+ ctP2 classes: (Array with: (Smalltalk at: #MocksHgP2N1Foo)).
+ ctP2 message:'test_commit_nested_06a 1'.
+ ctP2 do.
+
+ self assert: pmP2 revision = pmP2N1 revision.
+ self assert: pmP2 revision = pmP2N2 revision.
+
+ cs := repo @ 4.
+ self assert: cs changes size == 1.
+ self assert: cs changes anElement path = 'n1/MocksHgP2N1Foo.st'.
+
+
+
+ "
+ repo workingCopy browse
+ "
+
+ "Created: / 01-05-2014 / 09:21:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_commit_nested_06b_3
+ "
+ Nested packages
+ mocks:hg/p2
+ mocks:hg/p2/n1
+ mocks:hg/p2/n2
+
+ 1) load all of them
+ 2) modify MocksHgP2Foo & (selectively) commit MocksHgP2Foo
+ 3) check that n1 & n2 has same logical revision as p1.
+ "
+
+ | repo pmP2 pmP2N1 pmP2N2 ctP2 cs |
+
+ repo := self repositoryNamed: 'mocks/hg/p2'.
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2').
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2/n1').
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2/n2').
+ pmP2 := HGPackageWorkingCopy named: 'mocks:hg/p2'.
+ pmP2N1 := HGPackageWorkingCopy named: 'mocks:hg/p2/n1'.
+ pmP2N2 := HGPackageWorkingCopy named: 'mocks:hg/p2/n2'.
+ self assert: pmP2N1 revision = pmP2N2 revision.
+
+ "=== A modifies & commits =============================== "
+ ((Smalltalk at: #MocksHgP2N1Foo) compile:'zork ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2N1Foo) package.
+ ((Smalltalk at: #mocks_hg_p2_n1) compile:'qux ^ 2' classified:'test') package: (Smalltalk at: #mocks_hg_p2_n1) package.
+
+ ctP2 := pmP2 commitTask.
+ ctP2 classes: (Array with: (Smalltalk at: #MocksHgP2N1Foo)).
+ ctP2 message:'test_commit_nested_06a 1'.
+ ctP2 do.
+
+ self assert: pmP2 revision = pmP2N1 revision.
+ self assert: pmP2 revision = pmP2N2 revision.
+
+ cs := repo @ 4.
+ self assert: cs changes size == 1.
+ self assert: cs changes anElement path = 'n1/MocksHgP2N1Foo.st'.
+
+
+
+ "
+ repo workingCopy browse
+ "
+
+ "Created: / 01-05-2014 / 09:22:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_commit_nested_06b_4
+ "
+ Nested packages
+ mocks:hg/p2
+ mocks:hg/p2/n1
+ mocks:hg/p2/n2
+
+ 1) load all of them
+ 2) modify MocksHgP2Foo & (selectively) commit MocksHgP2Foo
+ 3) check that n1 & n2 has same logical revision as p1.
+ "
+
+ | repo pmP2 pmP2N1 pmP2N2 ctP2 cs |
+
+ repo := self repositoryNamed: 'mocks/hg/p2'.
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2').
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2/n1').
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2/n2').
+ pmP2 := HGPackageWorkingCopy named: 'mocks:hg/p2'.
+ pmP2N1 := HGPackageWorkingCopy named: 'mocks:hg/p2/n1'.
+ pmP2N2 := HGPackageWorkingCopy named: 'mocks:hg/p2/n2'.
+ self assert: pmP2N1 revision = pmP2N2 revision.
+
+ "=== A modifies & commits =============================== "
+ ((Smalltalk at: #MocksHgP2N1Foo) compile:'zork ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2N1Foo) package.
+ ((Smalltalk at: #MocksHgP2N2Foo) compile:'qux ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2N2Foo) package.
+
+ ctP2 := pmP2 commitTask.
+ ctP2 classes: (Array with: (Smalltalk at: #MocksHgP2N1Foo)).
+ ctP2 message:'test_commit_nested_06a 1'.
+ ctP2 do.
+
+ self assert: pmP2 revision = pmP2N1 revision.
+ self assert: pmP2 revision = pmP2N2 revision.
+
+ cs := repo @ 4.
+ self assert: cs changes size == 1.
+ self assert: cs changes anElement path = 'n1/MocksHgP2N1Foo.st'.
+
+
+
+ "
+ repo workingCopy browse
+ "
+
+ "Created: / 01-05-2014 / 09:23:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_commit_nested_06c_1
+ "
+ Nested packages
+ mocks:hg/p2
+ mocks:hg/p2/n1
+ mocks:hg/p2/n2
+
+ 1) load all of them
+ 2) modify MocksHgP2Foo & (selectively) commit MocksHgP2Foo
+ 3) check that n1 & n2 has same logical revision as p1.
+ "
+
+ | repo pmP2 pmP2N1 pmP2N2 ctP2 cs |
+
+ repo := self repositoryNamed: 'mocks/hg/p2'.
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2').
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2/n1').
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2/n2').
+ pmP2 := HGPackageWorkingCopy named: 'mocks:hg/p2'.
+ pmP2N1 := HGPackageWorkingCopy named: 'mocks:hg/p2/n1'.
+ pmP2N2 := HGPackageWorkingCopy named: 'mocks:hg/p2/n2'.
+ self assert: pmP2N1 revision = pmP2N2 revision.
+
+ "=== A modifies & commits =============================== "
+ ((Smalltalk at: #MocksHgP2N1Foo) compile:'zork ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2N1Foo) package.
+ ((Smalltalk at: #MocksHgP2N2Foo) compile:'qux ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2N2Foo) package.
+
+ ctP2 := pmP2 commitTask.
+ ctP2 classes: (Array with: (Smalltalk at: #MocksHgP2N1Foo) with: (Smalltalk at: #MocksHgP2N2Foo)).
+ ctP2 message:'test_commit_nested_06a 1'.
+ ctP2 do.
+
+ self assert: pmP2 revision = pmP2N1 revision.
+ self assert: pmP2 revision = pmP2N2 revision.
+
+ cs := repo @ 4.
+ self assert: cs changes size == 2.
+ self assert: (cs changes contains: [:e| e path = 'n1/MocksHgP2N1Foo.st' ]).
+ self assert: (cs changes contains: [:e| e path = 'n2/MocksHgP2N2Foo.st' ]).
+
+
+
+ "
+ repo workingCopy browse
+ "
+
+ "Created: / 01-05-2014 / 09:25:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_commit_nested_06c_2
+ "
+ Nested packages
+ mocks:hg/p2
+ mocks:hg/p2/n1
+ mocks:hg/p2/n2
+
+ 1) load all of them
+ 2) modify MocksHgP2N1Foo, MocksHgP2N1Foo & (selectively) commit MocksHgP2N1Foo and MocksHgP2N1Foo
+ 3) check that n1 & n2 has same logical revision as p1.
+ "
+
+ | repo pmP2 pmP2N1 pmP2N2 ctP2 cs |
+
+ repo := self repositoryNamed: 'mocks/hg/p2'.
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2').
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2/n1').
+ self assert: (Smalltalk loadPackage:'mocks:hg/p2/n2').
+ pmP2 := HGPackageWorkingCopy named: 'mocks:hg/p2'.
+ pmP2N1 := HGPackageWorkingCopy named: 'mocks:hg/p2/n1'.
+ pmP2N2 := HGPackageWorkingCopy named: 'mocks:hg/p2/n2'.
+ self assert: pmP2N1 revision = pmP2N2 revision.
+
+ "=== A modifies & commits =============================== "
+ ((Smalltalk at: #MocksHgP2N1Foo) compile:'zork ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2N1Foo) package.
+ ((Smalltalk at: #MocksHgP2N2Foo) compile:'qux ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2N2Foo) package.
+
+ ctP2 := (pmP2N1 , pmP2N2) commitTask.
+ ctP2 classes: (Array with: (Smalltalk at: #MocksHgP2N1Foo) with: (Smalltalk at: #MocksHgP2N2Foo)).
+ ctP2 message:'test_commit_nested_06a 1'.
+ ctP2 do.
+
+ self assert: pmP2 revision = pmP2N1 revision.
+ self assert: pmP2 revision = pmP2N2 revision.
+
+ cs := repo @ 4.
+ self assert: cs changes size == 2.
+ self assert: (cs changes contains: [:e| e path = 'n1/MocksHgP2N1Foo.st' ]).
+ self assert: (cs changes contains: [:e| e path = 'n2/MocksHgP2N2Foo.st' ]).
+
+
+
+ "
+ repo workingCopy browse
+ "
+
+ "Created: / 01-05-2014 / 09:25:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!HGStXTests methodsFor:'tests - manager API'!