added: #groupBy:labelAs:sort:
changed:
#groupBy:labelAs:
#groupByClass
--- 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 $'
! !