Fixes for #24: Session ChangeSet compression after a commit is broken [2/3]
authorJan Vrany <jan.vrany@fit.cvut.cz>
Sun, 16 Nov 2014 08:53:12 +0000
changeset 472 e037e301b4e5
parent 471 44664f7f71c5
child 473 eeb6f7e3394d
Fixes for #24: Session ChangeSet compression after a commit is broken [2/3] Fixed changeset compression for nested packages.
common/SCMAbstractCommitTask.st
common/common.rc
mercurial/HGStXTests.st
mercurial/mercurial.rc
--- a/common/SCMAbstractCommitTask.st	Sat Nov 15 17:17:02 2014 +0000
+++ b/common/SCMAbstractCommitTask.st	Sun Nov 16 08:53:12 2014 +0000
@@ -263,7 +263,7 @@
 
         "/ paths is list of !!!!!!absolute filenames!!!!!!, so we have to construct full name
         "/ furtunately, that's easy...
-        root := temporaryWorkingCopyRoot asFilename.
+        root := package temporaryWorkingCopyRoot asFilename.
 
         commitedClasses := Set new.
         package classes do:[:class | 
@@ -292,7 +292,7 @@
     ].
 
     "Created: / 15-11-2014 / 00:37:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 15-11-2014 / 01:46:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 16-11-2014 / 08:47:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !SCMAbstractCommitTask methodsFor:'queries'!
--- a/common/common.rc	Sat Nov 15 17:17:02 2014 +0000
+++ b/common/common.rc	Sun Nov 16 08:53:12 2014 +0000
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "Copyright Jan Vrany 2012\0"
       VALUE "ProductName", "Smalltalk/X SCM Support Library\0"
       VALUE "ProductVersion", "6.2.5.0\0"
-      VALUE "ProductDate", "Sat, 15 Nov 2014 16:39:16 GMT\0"
+      VALUE "ProductDate", "Sun, 16 Nov 2014 08:51:54 GMT\0"
     END
 
   END
--- a/mercurial/HGStXTests.st	Sat Nov 15 17:17:02 2014 +0000
+++ b/mercurial/HGStXTests.st	Sun Nov 16 08:53:12 2014 +0000
@@ -2844,6 +2844,278 @@
     "
 
     "Created: / 01-05-2014 / 09:25:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_commit_nested_07a
+    "
+    Nested packages
+      mocks:hg/p2
+      mocks:hg/p2/n1
+      mocks:hg/p2/n2
+
+    1) load all of them
+    2) modify & commit p2 & p2/n1, commit both 
+    3) check that current ChangeSet has no changes for commited classes
+    "
+
+    | repo pmP2 pmP2N1 pmP2N2 ctP2 |
+
+    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'.
+
+    "=== A modifies & commits =============================== "
+    ((Smalltalk at: #MocksHgP2Foo) compile:'zork ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2Foo) package.
+    ((Smalltalk at: #Object) compile:'bark ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2N1Foo) package.
+
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2Foo)).     
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#Object) selector: #bark).     
+
+    ctP2 := pmP2 commitTask.
+    ctP2 message:'test_commit_nested_07a 1'.
+    ctP2 paths:{
+        (ctP2 temporaryWorkingCopy path / 'MocksHgP2Foo.st') pathName.
+        (ctP2 temporaryWorkingCopy path / 'n1' / 'extensions.st') pathName.
+    }.
+    ctP2 do.
+
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2Foo)) not.     
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2N1Foo)) not.     
+    "
+    repo workingCopy browse
+    "
+
+    "Created: / 16-11-2014 / 07:24:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 16-11-2014 / 08:45:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_commit_nested_07b
+    "
+    Nested packages
+      mocks:hg/p2
+      mocks:hg/p2/n1
+      mocks:hg/p2/n2
+
+    1) load all of them
+    2) modify & commit p2 & p2/n1, commit only p1
+    3) check that current ChangeSet has no changes for commited classes
+    "
+
+    | repo pmP2 pmP2N1 pmP2N2 ctP2 |
+
+    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'.
+
+    "=== A modifies & commits =============================== "
+    ((Smalltalk at: #MocksHgP2Foo) compile:'zork ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2Foo) package.
+    ((Smalltalk at: #MocksHgP2N1Foo) compile:'bark ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2N1Foo) package.
+
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2Foo)).     
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2N1Foo)).     
+
+    ctP2 := pmP2 commitTask.
+    ctP2 message:'test_commit_nested_07a 1'.
+    ctP2 paths:{
+        (ctP2 temporaryWorkingCopy path / 'MocksHgP2Foo.st') pathName.
+    }.
+    ctP2 do.
+
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2Foo)) not.     
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2N1Foo)).     
+    "
+    repo workingCopy browse
+    "
+
+    "Created: / 16-11-2014 / 08:42:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_commit_nested_07c
+    "
+    Nested packages
+      mocks:hg/p2
+      mocks:hg/p2/n1
+      mocks:hg/p2/n2
+
+    1) load all of them
+    2) modify & commit p2 & p2/n1, commit only n1 
+    3) check that current ChangeSet has no changes for commited classes
+    "
+
+    | repo pmP2 pmP2N1 pmP2N2 ctP2 |
+
+    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'.
+
+    "=== A modifies & commits =============================== "
+    ((Smalltalk at: #MocksHgP2Foo) compile:'zork ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2Foo) package.
+    ((Smalltalk at: #MocksHgP2N1Foo) compile:'bark ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2N1Foo) package.
+
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2Foo)).     
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2N1Foo)).     
+
+    ctP2 := pmP2 commitTask.
+    ctP2 message:'test_commit_nested_07a 1'.
+    ctP2 paths:{
+        (ctP2 temporaryWorkingCopy path / 'n1' / 'MocksHgP2N1Foo.st') pathName.
+    }.
+    ctP2 do.
+
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2Foo)).     
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2N1Foo)) not.     
+    "
+    repo workingCopy browse
+    "
+
+    "Created: / 16-11-2014 / 08:43:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_commit_nested_07d
+    "
+    Nested packages
+      mocks:hg/p2
+      mocks:hg/p2/n1
+      mocks:hg/p2/n2
+
+    1) load all of them
+    2) modify & commit p2 & p2/n1, none
+    3) check that current ChangeSet has no changes for commited classes
+    "
+
+    | repo pmP2 pmP2N1 pmP2N2 ctP2 |
+
+    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'.
+
+    "=== A modifies & commits =============================== "
+    ((Smalltalk at: #MocksHgP2Foo) compile:'zork ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2Foo) package.
+    ((Smalltalk at: #MocksHgP2N1Foo) compile:'bark ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2N1Foo) package.
+
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2Foo)).     
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2N1Foo)).     
+
+    ctP2 := pmP2 commitTask.
+    ctP2 message:'test_commit_nested_07a 1'.
+    ctP2 paths:{
+    }.
+    ctP2 do.
+
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2Foo)).     
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2N1Foo)).     
+    "
+    repo workingCopy browse
+    "
+
+    "Created: / 16-11-2014 / 08:44:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_commit_nested_07e
+    "
+    Nested packages
+      mocks:hg/p2
+      mocks:hg/p2/n1
+      mocks:hg/p2/n2
+
+    1) load all of them
+    2) modify & commit p2 & p2/n1, commit both 
+    3) check that current ChangeSet has no changes for commited classes
+    "
+
+    | repo pmP2 pmP2N1 pmP2N2 ctP2 |
+
+    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'.
+
+    "=== A modifies & commits =============================== "
+    ((Smalltalk at: #MocksHgP2Foo) compile:'zork ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2Foo) package.
+    ((Smalltalk at: #Object) compile:'bark ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2N1Foo) package.
+
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2Foo)).     
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#Object) selector: #bark).     
+
+    ctP2 := pmP2 commitTask.
+    ctP2 message:'test_commit_nested_07a 1'.
+    ctP2 paths:{
+        (ctP2 temporaryWorkingCopy path / 'MocksHgP2Foo.st') pathName.
+        (ctP2 temporaryWorkingCopy path / 'n1' / 'extensions.st') pathName.
+    }.
+    ctP2 do.
+
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2Foo)) not.     
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#Object) selector: #bark) not.     
+    "
+    repo workingCopy browse
+    "
+
+    "Created: / 16-11-2014 / 08:45:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_commit_nested_07f
+    "
+    Nested packages
+      mocks:hg/p2
+      mocks:hg/p2/n1
+      mocks:hg/p2/n2
+
+    1) load all of them
+    2) modify & commit p2 & p2/n1, commit both 
+    3) check that current ChangeSet has no changes for commited classes
+    "
+
+    | repo pmP2 pmP2N1 pmP2N2 ctP2 |
+
+    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'.
+
+    "=== A modifies & commits =============================== "
+    ((Smalltalk at: #MocksHgP2Foo) compile:'zork ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2Foo) package.
+    ((Smalltalk at: #Object) compile:'bark ^ 2' classified:'test') package: (Smalltalk at: #MocksHgP2N1Foo) package.
+
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2Foo)).     
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#Object) selector: #bark).     
+
+    ctP2 := pmP2 commitTask.
+    ctP2 message:'test_commit_nested_07a 1'.
+    ctP2 paths:{
+        (ctP2 temporaryWorkingCopy path / 'MocksHgP2Foo.st') pathName.
+    }.
+    ctP2 do.
+
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#MocksHgP2Foo)) not.     
+    self assert: (ChangeSet current includesChangeForClass: (Smalltalk at:#Object) selector: #bark).     
+    "
+    repo workingCopy browse
+    "
+
+    "Created: / 16-11-2014 / 08:46:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !HGStXTests methodsFor:'tests - manager API'!
--- a/mercurial/mercurial.rc	Sat Nov 15 17:17:02 2014 +0000
+++ b/mercurial/mercurial.rc	Sun Nov 16 08:53:12 2014 +0000
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "Copyright Jan Vrany 2012\0"
       VALUE "ProductName", "Smalltalk/X Mercurial Integration\0"
       VALUE "ProductVersion", "6.2.5.0\0"
-      VALUE "ProductDate", "Sat, 15 Nov 2014 16:39:15 GMT\0"
+      VALUE "ProductDate", "Sun, 16 Nov 2014 08:51:52 GMT\0"
     END
 
   END