--- a/VersionDiffBrowser.st Thu Nov 30 14:53:24 2017 +0100
+++ b/VersionDiffBrowser.st Thu Nov 30 17:52:54 2017 +0100
@@ -25,10 +25,11 @@
includeExtensionsHolder canIncludeExtensionsHolder
includeCategoryChangesHolder includeVersionMethodsHolder
isMultipleVersionBrowser versionInfoList versionList
- selectedVersionHolder symbolicVersionList
+ versionEntriesList selectedVersionHolder symbolicVersionList
selectedSymbolicVersionHolder symbolicToVersionMapping
filteredClasses filteredMethods filteredSelectors
- classPatternFilters selectorPatternFilters'
+ classPatternFilters selectorPatternFilters
+ selectedVersionIndexHolder'
classVariableNames:'RememberedFilters'
poolDictionaries:''
category:'Interface-Browsers'
@@ -313,10 +314,12 @@
^
#(FullSpec
name: windowSpecForMultipleVersions
+ uuid: '55cb9d62-d4fd-11e7-af82-c42c033b4871'
window:
(WindowSpec
label: 'Version DiffBrowser'
name: 'Version DiffBrowser'
+ uuid: '2b3f2546-d4fd-11e7-af82-c42c033b4871'
min: (Point 10 10)
bounds: (Rectangle 0 0 865 504)
menu: mainMenu
@@ -327,26 +330,30 @@
(VariableVerticalPanelSpec
name: 'VariableVerticalPanel1'
layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 -25 1.0)
+ uuid: '2b3f297e-d4fd-11e7-af82-c42c033b4871'
component:
(SpecCollection
collection: (
(ViewSpec
name: 'Box1'
+ uuid: '2b3f2c08-d4fd-11e7-af82-c42c033b4871'
component:
(SpecCollection
collection: (
(SequenceViewSpec
name: 'VersionList'
layout: (LayoutFrame 0 0 0 0 0 0.5 0 1)
- model: selectedVersionHolder
+ uuid: '2b3f2d20-d4fd-11e7-af82-c42c033b4871'
+ model: selectedVersionIndexHolder
hasHorizontalScrollBar: true
hasVerticalScrollBar: true
- useIndex: false
- sequenceList: versionList
+ useIndex: true
+ sequenceList: versionEntriesList
)
(SequenceViewSpec
name: 'List1'
layout: (LayoutFrame 0 0.5 0 0 0 1 0 1)
+ uuid: '2b3f3086-d4fd-11e7-af82-c42c033b4871'
model: selectedSymbolicVersionHolder
hasHorizontalScrollBar: true
hasVerticalScrollBar: true
@@ -359,6 +366,7 @@
)
(HorizontalPanelViewSpec
name: 'TopHorizontalPanel'
+ uuid: '2b3f3234-d4fd-11e7-af82-c42c033b4871'
horizontalLayout: fit
verticalLayout: fit
horizontalSpace: 3
@@ -368,6 +376,7 @@
collection: (
(ViewSpec
name: 'BoxA'
+ uuid: '2b3f3464-d4fd-11e7-af82-c42c033b4871'
level: 0
visibilityChannel: boxAVisible
component:
@@ -377,12 +386,14 @@
label: 'Only in A'
name: 'OnlyInALabel'
layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 20 0)
+ uuid: '2b3f3568-d4fd-11e7-af82-c42c033b4871'
translateLabel: true
labelChannel: onlyInALabelHolder
)
(SequenceViewSpec
name: 'ListA'
layout: (LayoutFrame 0 0.0 20 0.0 0 1.0 -3 1.0)
+ uuid: '2b3f37c0-d4fd-11e7-af82-c42c033b4871'
model: methodsOnlyInASelection
menu: menuAHolder
hasHorizontalScrollBar: true
@@ -400,6 +411,7 @@
)
(ViewSpec
name: 'BoxM'
+ uuid: '2b3f39a0-d4fd-11e7-af82-c42c033b4871'
visibilityChannel: boxMVisible
component:
(SpecCollection
@@ -408,12 +420,14 @@
label: 'Changed'
name: 'ChangedLabel'
layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 20 0)
+ uuid: '2b3f3a86-d4fd-11e7-af82-c42c033b4871'
translateLabel: true
labelChannel: changedLabelHolder
)
(SequenceViewSpec
name: 'ListM'
layout: (LayoutFrame 0 0.0 20 0.0 0 1.0 -3 1.0)
+ uuid: '2b3f3b94-d4fd-11e7-af82-c42c033b4871'
model: methodsChangedSelection
menu: menuMHolder
hasHorizontalScrollBar: true
@@ -431,6 +445,7 @@
)
(ViewSpec
name: 'BoxB'
+ uuid: '2b3f3d1a-d4fd-11e7-af82-c42c033b4871'
visibilityChannel: boxBVisible
component:
(SpecCollection
@@ -439,12 +454,14 @@
label: 'Only in B'
name: 'OnlyInBLabel'
layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 20 0)
+ uuid: '2b3f3dec-d4fd-11e7-af82-c42c033b4871'
translateLabel: true
labelChannel: onlyInBLabelHolder
)
(SequenceViewSpec
name: 'ListB'
layout: (LayoutFrame 0 0.0 20 0.0 0 1.0 -3 1.0)
+ uuid: '2b3f3f04-d4fd-11e7-af82-c42c033b4871'
model: methodsOnlyInBSelection
menu: menuBHolder
hasHorizontalScrollBar: true
@@ -466,12 +483,14 @@
)
(ViewSpec
name: 'DiffBox'
+ uuid: '2b3f408a-d4fd-11e7-af82-c42c033b4871'
component:
(SpecCollection
collection: (
(ViewSpec
name: 'diffTextViewBox'
layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+ uuid: '2b3f415c-d4fd-11e7-af82-c42c033b4871'
initiallyInvisible: true
component:
(SpecCollection
@@ -480,6 +499,7 @@
label: 'A'
name: 'DiffTextLabelA'
layout: (LayoutFrame 0 0 0 0 0 0.5 20 0)
+ uuid: '2b3f426a-d4fd-11e7-af82-c42c033b4871'
translateLabel: true
labelChannel: diffTextLabelA
)
@@ -487,12 +507,14 @@
label: 'B'
name: 'DiffTextLabelB'
layout: (LayoutFrame 0 0.5 0 0 0 1 20 0)
+ uuid: '2b3f43d2-d4fd-11e7-af82-c42c033b4871'
translateLabel: true
labelChannel: diffTextLabelB
)
(ArbitraryComponentSpec
name: 'diffTextView'
layout: (LayoutFrame 0 0.0 20 0.0 0 1.0 0 1.0)
+ uuid: '2b3f4508-d4fd-11e7-af82-c42c033b4871'
hasBorder: false
component: diffTextView
)
@@ -503,6 +525,7 @@
(CodeViewSpec
name: 'singleTextView'
layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+ uuid: '2b3f4738-d4fd-11e7-af82-c42c033b4871'
model: methodText
hasHorizontalScrollBar: true
hasVerticalScrollBar: true
@@ -517,11 +540,12 @@
)
)
- handles: (Any 0.217118997912317 0.666666666666667 1.0)
+ handles: (Any 0.22 0.67000000000000004 1.0)
)
(LabelSpec
name: 'InfoLabel'
layout: (LayoutFrame 0 0 -25 1 0 1 0 1)
+ uuid: '2b3f4a44-d4fd-11e7-af82-c42c033b4871'
level: -1
translateLabel: true
labelChannel: infoHolder
@@ -531,8 +555,6 @@
)
)
-
- "Modified: / 05-02-2017 / 10:08:18 / cg"
! !
!VersionDiffBrowser class methodsFor:'menu specs'!
@@ -1818,6 +1840,16 @@
^ selectedVersionHolder
!
+selectedVersionIndexHolder
+ selectedVersionIndexHolder isNil ifTrue:[
+ selectedVersionIndexHolder := nil asValue.
+ selectedVersionIndexHolder onChangeSend:#selectedVersionIndexHolderChanged to:self.
+ ].
+ ^ selectedVersionIndexHolder
+
+ "Created: / 29-11-2017 / 13:02:49 / cg"
+!
+
symbolicVersionList
symbolicVersionList isNil ifTrue:[
symbolicVersionList := List new.
@@ -1825,6 +1857,15 @@
^ symbolicVersionList
!
+versionEntriesList
+ versionEntriesList isNil ifTrue:[
+ versionEntriesList := List new.
+ ].
+ ^ versionEntriesList
+
+ "Created: / 29-11-2017 / 13:06:14 / cg"
+!
+
versionList
versionList isNil ifTrue:[
versionList := List new.
@@ -1964,28 +2005,70 @@
changeA := (methodsChangedFiltered at:sel) first.
changeB := (methodsChangedFiltered at:sel) second.
self withReadCursorDo:[
+ |info|
+
"/ see if the semantics have changed (or only prettyPrinted)
RBParser notNil ifTrue:[
(classChangeSet notNil
and:[ classChangeSet classBeingCompared notNil ]) ifTrue:[
parseError := false.
- treeA := RBParser parseMethod:changeA source onError: [:str :pos | parseError := true].
- treeB := RBParser parseMethod:changeB source onError: [:str :pos | parseError := true].
- parseError ifFalse:[
- (treeA "semanticallyEqualTo:" equalTo:treeB withMapping:(Dictionary new)) ifTrue:[
- self infoHolder value:'Methods only differ in formatting / comments.'.
- ] ifFalse:[
+ changeA isMethodChange ifTrue:[
+ treeA := RBParser parseMethod:(changeA source) onError: [:str :pos | parseError := true].
+ treeB := RBParser parseMethod:(changeB source) onError: [:str :pos | parseError := true].
+ parseError ifFalse:[
+ (treeA equalTo:treeB withMapping:(Dictionary new)) ifTrue:[
+ info := 'Methods only differ in formatting / comments.'.
+ ] ifFalse:[
+ (treeA semanticallyEqualTo:treeB withMapping:(Dictionary new)) ifTrue:[
+ info := 'Methods seem to do the same.'.
+ ] ifFalse:[
+ info := 'Methods are different.'.
+ ]
+ ]
+ ] ifTrue:[
+ self infoHolder value:'ParseError while comparing - please check the code'.
+ ].
+ ] ifFalse:[
+ changeA isClassDefinitionChange ifTrue:[
+ treeA := RBParser parseExpression:(changeA source) onError: [:str :pos | parseError := true].
+ treeB := RBParser parseExpression:(changeB source) onError: [:str :pos | parseError := true].
(treeA semanticallyEqualTo:treeB withMapping:(Dictionary new)) ifTrue:[
- self infoHolder value:'Methods seem to do the same.'.
+ info := 'Class definitions seem to do the same.'.
] ifFalse:[
- self infoHolder value:'Methods are different.'.
- ]
- ]
- ] ifTrue:[
- self infoHolder value:'ParseError while comparing - please check the code'.
+ info := 'Class definitions are different.'.
+ ].
+ treeA receiver = treeB receiver ifFalse:[
+ info := 'Superclass changed.'.
+ ] ifTrue:[
+ treeA arg1 = treeB arg1 ifFalse:[
+ info := 'Name changed.'.
+ ] ifTrue:[
+ treeA arg2 = treeB arg2 ifFalse:[
+ info := 'Instvars changed.'.
+ ] ifTrue:[
+ treeA arg3 = treeB arg3 ifFalse:[
+ info := 'Classvars changed.'.
+ ] ifTrue:[
+ (treeA arg:4) = (treeB arg:4) ifFalse:[
+ info := 'Pooldict changed.'.
+ ] ifTrue:[
+ (treeA arg:5) = (treeB arg:5) ifFalse:[
+ info := 'Category changed.'.
+ ].
+ ].
+ ].
+ ].
+ ].
+ ].
+ ] ifFalse:[
+ self halt.
+ ].
].
].
].
+ info notNil ifTrue:[
+ self infoHolder value:info
+ ].
self diffTextView
text1:(changeA prettyPrintedSource)
text2:(changeB prettyPrintedSource)
@@ -1997,7 +2080,7 @@
]
"Modified: / 03-09-1999 / 15:01:30 / ps"
- "Modified: / 28-11-2017 / 14:21:41 / cg"
+ "Modified: / 29-11-2017 / 12:56:28 / cg"
!
methodsOnlyInASelectionChanged
@@ -2118,6 +2201,12 @@
"Modified: / 06-02-2017 / 02:32:24 / cg"
!
+selectedVersionIndexHolderChanged
+ self selectedVersionHolder value:(versionList at:self selectedVersionIndexHolder value)
+
+ "Created: / 29-11-2017 / 13:04:12 / cg"
+!
+
update:something with:parameter from:changedObject
((changedObject == includeExtensionsHolder)
or:[ changedObject == includeCategoryChangesHolder
@@ -2423,7 +2512,7 @@
This is only used when comparing multiple versions."
|cls sourceCodeManager numShown newNumShown numOverallRevisions
- partialLog newestRev revisions symbolicNames
+ partialLog newestRev revisions revisionEntries symbolicNames
stableRevision releasedRevision tagList logMessages|
cls := classHolder value.
@@ -2480,7 +2569,16 @@
"/ ].
"/
"/ revisions := revisions collect:[:eachItem | eachItem at:#revision].
- revisions := versionInfoList collect:[:each | each at:#revision].
+ revisions := OrderedCollection new.
+ revisionEntries := OrderedCollection new.
+ versionInfoList do:[:eachVersionInfo |
+ revisions add:eachVersionInfo revision.
+ revisionEntries add:(
+ '%1 (by %2 at %3)'
+ bindWith:(eachVersionInfo revision)
+ with:(eachVersionInfo user)
+ with:(eachVersionInfo date)).
+ ].
revisions size < numOverallRevisions ifTrue:[
revisions add:'...'
@@ -2488,8 +2586,9 @@
symbolicToVersionMapping := symbolicNames.
self symbolicVersionList contents:tagList.
self versionList contents:revisions.
-
- "Modified (comment): / 05-02-2017 / 10:32:08 / cg"
+ self versionEntriesList contents:revisionEntries.
+
+ "Modified: / 29-11-2017 / 13:06:21 / cg"
! !
!VersionDiffBrowser methodsFor:'initialization & release'!