--- a/VersionDiffBrowser.st Fri May 08 06:59:19 2015 +0200
+++ b/VersionDiffBrowser.st Sat May 09 06:56:52 2015 +0200
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 2000 by eXept Software AG
All Rights Reserved
@@ -24,9 +26,9 @@
classHolder versionAHolder versionBHolder infoHolder
includeExtensionsHolder canIncludeExtensionsHolder
includeCategoryChangesHolder includeVersionMethodsHolder
- isMultipleVersionBrowser versionList selectedVersionHolder
- symbolicVersionList selectedSymbolicVersionHolder
- symbolicToVersionMapping'
+ isMultipleVersionBrowser versionInfoList versionList
+ selectedVersionHolder symbolicVersionList
+ selectedSymbolicVersionHolder symbolicToVersionMapping'
classVariableNames:''
poolDictionaries:''
category:'Interface-Browsers'
@@ -61,7 +63,7 @@
"
This is not yet finished (work in progress).
- A browser to show differences between class versions,
+ A quickly hacked up browser to show differences between class versions,
allowing easy comparison; will also eventually add capabilities
to checkIn / load classes into / from the repository.
@@ -71,8 +73,6 @@
[class variables:]
"
-
-
! !
!VersionDiffBrowser class methodsFor:'interface specs'!
@@ -1582,7 +1582,7 @@
selectedVersionHolder
selectedVersionHolder isNil ifTrue:[
- selectedVersionHolder := nil asValue.
+ selectedVersionHolder := nil asValue.
selectedVersionHolder onChangeSend:#selectedVersionHolderChanged to:self.
].
^ selectedVersionHolder
@@ -1708,6 +1708,8 @@
].
self showDiffTextView.
self diffTextView moveToNextChanged
+ ] ifFalse:[
+ self showVersionInfoIfNothingSelected
]
"Modified: / 03-09-1999 / 15:01:30 / ps"
@@ -1733,7 +1735,9 @@
change := methodsOnlyInAFiltered "self changeSetA" at:sel.
self methodText value:(change prettyPrintedSource).
self showSingleTextView.
- ]
+ ] ifFalse:[
+ self showVersionInfoIfNothingSelected
+ ].
"Modified: / 17-07-2012 / 18:31:22 / cg"
!
@@ -1757,7 +1761,9 @@
change := methodsOnlyInBFiltered "self changeSetB" at:sel.
self methodText value:(change prettyPrintedSource).
self showSingleTextView.
- ]
+ ] ifFalse:[
+ self showVersionInfoIfNothingSelected
+ ].
"Modified: / 17-07-2012 / 18:31:32 / cg"
!
@@ -1768,18 +1774,61 @@
!
selectedVersionHolderChanged
- |idx|
self withWaitCursorDo:[
+ |idx prevSelectionIndexA prevSelectionIndexB prevSelectionIndexDifferent
+ previousChange previousClass previousSelector|
+
+ "/ remember the previous selected method
+ (prevSelectionIndexA := methodsOnlyInASelection value) notNil ifTrue:[
+ previousChange := methodsOnlyInAFiltered at:prevSelectionIndexA.
+ ].
+ (prevSelectionIndexB := methodsOnlyInBSelection value) notNil ifTrue:[
+ previousChange := methodsOnlyInBFiltered at:prevSelectionIndexB.
+ ].
+ (prevSelectionIndexDifferent := methodsChangedSelection value) notNil ifTrue:[
+ previousChange := (methodsChangedFiltered at:prevSelectionIndexDifferent) first.
+ ].
+ previousChange notNil ifTrue:[
+ previousClass := previousChange className.
+ previousSelector := previousChange selector.
+ ].
+
+ "/ possibly expand a contracted list
selectedVersionHolder value = '...' ifTrue:[
idx := self versionList size.
self updateVersionList.
selectedVersionHolder setValue:(self versionList at:idx).
].
+ "/ update the view
self
setupForClass:classHolder value
againstVersion:(selectedVersionHolder value).
+
+ "/ try to reselect the same method again.
+ previousChange notNil ifTrue:[
+ "/ search a change for that in the three lists
+
+ (idx := methodsChangedFiltered findFirst:[:entry | entry first className = previousClass
+ and:[ entry first selector = previousSelector]]) ~= 0
+ ifTrue:[
+ methodsChangedSelection value:idx. self methodsChangedSelectionChanged.
+ ] ifFalse:[
+ (idx := methodsOnlyInAFiltered findFirst:[:chg | chg className = previousClass
+ and:[ chg selector = previousSelector]]) ~= 0
+ ifTrue:[
+ methodsOnlyInASelection value:idx. self methodsOnlyInASelectionChanged
+ ] ifFalse:[
+ (idx := methodsOnlyInBFiltered findFirst:[:chg | chg className = previousClass
+ and:[ chg selector = previousSelector]]) ~= 0
+ ifTrue:[
+ methodsOnlyInBSelection value:idx. self methodsOnlyInBSelectionChanged.
+ ]
+ ]
+ ].
+ ].
+ self showVersionInfoIfNothingSelected
]
!
@@ -1880,30 +1929,24 @@
!
createPatchFile
- "create a patchFile, to patch the old version (versionB) into the new version (versionA).
+ "create a patchFile, to patch the old version (versionA) into the new version (versionB).
I.e. a little changeFile to transport those changes."
- |defaultName f oldVersion newVersion vsnMthdA vsnMthdB vsnA vsnB info classBeingCompared|
-
+ |defaultName diffSet f oldVersion newVersion vsnMthdA vsnMthdB vsnA vsnB info classBeingCompared|
+
+self warn:'Sorry: This function is not yet implemented'.
defaultName := 'patchFile.chg'.
classBeingCompared := classChangeSet classBeingCompared.
- classBeingCompared notNil ifTrue:[
- defaultName := classBeingCompared nameWithoutPrefix.
- classChangeSet versionA notNil ifTrue:[
- defaultName := defaultName , '-'.
- defaultName := defaultName , classChangeSet versionA.
- classChangeSet versionB notNil ifTrue:[
- defaultName := defaultName , '-'.
- defaultName := defaultName , classChangeSet versionB.
- ].
- ].
- defaultName := defaultName , '.chg'.
- ].
+ defaultName := '%1-%2-to-%3.chg'
+ bindWith:(classBeingCompared isNil ifTrue:['unknown'] ifFalse:[classBeingCompared nameWithoutPrefix])
+ with:(classChangeSet versionA ? 'old')
+ with:(classChangeSet versionB ? 'new').
f := Dialog
- requestFileNameForSave:'Name of patchFile:'
- default:defaultName.
-self warn:'Sorry: This function is not yet implemented'.
+ requestFileNameForSave:'Name of patchFile:'
+ default:defaultName.
+self halt.
+ diffSet := classChangeSet diffSet.
^ self.
"/ vsnMthdA := self changeSetA
@@ -2210,6 +2253,29 @@
self addAcceptToTextViewMenus.
!
+showVersionInfoIfNothingSelected
+ "show the revision info (author, date, time and logMessage), if no method is selected"
+
+ |revInfo infoText|
+
+ self infoHolder value:''.
+
+ (methodsOnlyInASelection value isNil
+ and:[ methodsOnlyInBSelection value isNil
+ and:[ methodsChangedSelection value isNil ]]) ifTrue:[
+ revInfo := versionInfoList detect:[:info | (info at:#revision) = selectedVersionHolder value] ifNone:nil.
+ revInfo notNil ifTrue:[
+ infoText := 'Revision: %1\Author: %2\Date: %3\Log:\\%4' withCRs
+ bindWith:(revInfo at:#revision)
+ with:(revInfo at:#author)
+ with:(revInfo at:#date)
+ with:(revInfo at:#logMessage).
+ ].
+ self methodText value:infoText.
+ self showSingleTextView.
+ ].
+!
+
updateLabels
"update the labels of the diff text view. Show the version numbers
of the class."
@@ -2351,6 +2417,10 @@
!
updateVersionList
+ "asks the classes source code manager for a list of revisions;
+ construct versionInfoList (containing the full info), versionList (containing version numbers only)
+ and tagList (containing symbolic names only)"
+
|cls sourceCodeManager numShown newNumShown numOverallRevisions
partialLog newestRev revisions symbolicNames
stableRevision releasedRevision tagList logMessages items|
@@ -2373,9 +2443,12 @@
'.
^ nil
].
+
numOverallRevisions := partialLog at:#numberOfRevisions.
newestRev := partialLog at:#newestRevision.
revisions := partialLog at:#revisions.
+
+ "/ fetch the symbolic (tag) version list
symbolicNames := partialLog at:#symbolicNames ifAbsent:[].
symbolicNames notNil ifTrue:[
stableRevision := symbolicNames at:'stable' ifAbsent:[].
@@ -2388,21 +2461,26 @@
].
logMessages := Dictionary new.
- items := revisions collect:[:each | |rev date who flag|
- rev := each at:#revision.
- logMessages at:rev put:(each at:#logMessage).
- date := (each at:#date ifAbsent:nil) ? '?'.
- who := (each at:#author ifAbsent:nil) ? '?'.
- rev = stableRevision ifTrue:[
- flag := ' Stable' allBold.
- ] ifFalse:[rev = releasedRevision ifTrue:[
- flag := ' Released' allBold.
- ] ifFalse:[
- flag := ' '
- ]].
- rev allBold , flag, ' [' , date , ' by ' , who , ']'
- ].
- revisions := revisions collect:[:each | each at:#revision].
+ versionInfoList := revisions.
+
+"/ items := versionInfoList collect:[:each | |rev date who flag|
+"/ rev := each at:#revision.
+"/ logMessages at:rev put:(each at:#logMessage).
+"/ date := (each at:#date ifAbsent:nil) ? '?'.
+"/ who := (each at:#author ifAbsent:nil) ? '?'.
+"/ rev = stableRevision ifTrue:[
+"/ flag := ' Stable' allBold.
+"/ ] ifFalse:[rev = releasedRevision ifTrue:[
+"/ flag := ' Released' allBold.
+"/ ] ifFalse:[
+"/ flag := ' '
+"/ ]].
+"/ rev allBold , flag, ' [' , date , ' by ' , who , ']'
+"/ ].
+"/
+"/ revisions := revisions collect:[:eachItem | eachItem at:#revision].
+ revisions := versionInfoList collect:[:each | each at:#revision].
+
revisions size < numOverallRevisions ifTrue:[
revisions add:'...'
].
@@ -2882,10 +2960,10 @@
!VersionDiffBrowser class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/VersionDiffBrowser.st,v 1.123 2015-02-24 11:48:54 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/VersionDiffBrowser.st,v 1.124 2015-05-08 10:02:18 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libtool/VersionDiffBrowser.st,v 1.123 2015-02-24 11:48:54 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/VersionDiffBrowser.st,v 1.124 2015-05-08 10:02:18 cg Exp $'
! !