added: #groupBy:labelAs:sort:
authorClaus Gittinger <cg@exept.de>
Tue, 30 Aug 2011 20:53:42 +0200
changeset 2491 882e07ee86bd
parent 2490 261165158ba9
child 2492 d26f39cbd4a8
added: #groupBy:labelAs:sort: changed: #groupBy:labelAs: #groupByClass
ChangeSet.st
--- a/ChangeSet.st	Sat Aug 20 19:10:01 2011 +0200
+++ b/ChangeSet.st	Tue Aug 30 20:53:42 2011 +0200
@@ -1775,7 +1775,26 @@
         by groupBlock as arg)
     "
 
-    | buckets newChangeset |
+    ^ self groupBy: groupBlock labelAs: labelBlock sort: false
+
+    "Created: / 24-07-2009 / 23:17:38 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 25-07-2009 / 19:40:16 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 29-10-2010 / 12:45:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 30-08-2011 / 16:07:30 / cg"
+!
+
+groupBy: groupBlock labelAs: labelBlock sort: doSort
+
+    "
+        returns a new changeset consisting of CompositeChanges.
+        Changes are grouped together by value (tag) of groupBlock.
+        Each composite change is then labeled using label
+        returned by labelBlock (called with the tag returned
+        by groupBlock as arg)
+    "
+
+    | buckets newChangeset keys |
+
     buckets := OrderedDictionary new.
     self do:
         [:change| | tag |
@@ -1783,8 +1802,18 @@
         (buckets at: tag ifAbsentPut: [ChangeSet new:4])
             add: change].
     newChangeset := ChangeSet new: buckets size.
-    buckets keysAndValuesDo:
-            [:tag :changes| | classDefs |
+
+    keys := buckets keys select:[:k | k notNil].
+    doSort ifTrue:[
+        keys sort.
+    ].
+    keys do:[:tag |
+        |changes classDefs|
+
+        changes := buckets at:tag.
+
+"/    buckets keysAndValuesDo:
+"/            [:tag :changes| | classDefs |
             "Move class definition to the front"
             classDefs := changes select:[:chg|chg isClassDefinitionChange].
             changes removeAll: classDefs.
@@ -1802,26 +1831,30 @@
     "Created: / 24-07-2009 / 23:17:38 / Jan Vrany <vranyj1@fel.cvut.cz>"
     "Modified: / 25-07-2009 / 19:40:16 / Jan Vrany <vranyj1@fel.cvut.cz>"
     "Modified: / 29-10-2010 / 12:45:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 30-08-2011 / 16:07:01 / cg"
 !
 
 groupByClass
+    |nm|
 
     ^self
-        groupBy:
-            [:change|
-            change isClassChange 
-                ifTrue:
-                    [|nm|
-                    nm := change className.
-                    (nm endsWith:' class') ifTrue:[nm := nm copyTo: nm size - 6].
-                    nm]
-                ifFalse:
-                    [nil]]
-        labelAs:
-            [:className|className]
+        groupBy: [:change|
+            change isClassChange ifTrue: [
+                nm := change className.
+                (nm endsWith:' class') ifTrue:[nm := nm copyTo: nm size - 6].
+                nm
+            ] ifFalse: [
+                nil
+            ]
+        ]
+        labelAs: [:className|
+            className
+        ]
+        sort: true
 
     "Created: / 25-07-2009 / 19:43:14 / Jan Vrany <vranyj1@fel.cvut.cz>"
     "Modified: / 24-10-2009 / 18:49:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 30-08-2011 / 16:08:38 / cg"
 !
 
 saveSignedToFile:aFilename
@@ -2907,6 +2940,6 @@
 !ChangeSet class methodsFor:'documentation'!
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/ChangeSet.st,v 1.180 2011-07-24 06:56:28 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ChangeSet.st,v 1.181 2011-08-30 18:53:42 cg Exp $'
 
 ! !