#UI_ENHANCEMENT by cg
class: SourceCodeManagerUtilities
changed:
#askForExistingRevision:title:class:manager:module:package:fileName:
#revisionForSymbolicName:class:fileName:directory:module:manager:
#versionString:isLessThan:
--- a/SourceCodeManagerUtilities.st Wed Dec 06 03:34:07 2017 +0100
+++ b/SourceCodeManagerUtilities.st Wed Dec 06 12:32:01 2017 +0100
@@ -1191,47 +1191,50 @@
versionString:a isLessThan:b
"compare two strings of the form: a.b.c..."
- |i1 i2 a1 b1 rest1 rest2|
-
- i1 := a indexOf:$. .
- i2 := b indexOf:$. .
- i1 == 0 ifTrue:[
- i1 := a size + 1.
- ].
- i2 == 0 ifTrue:[
- i2 := b size + 1.
- ].
-
- a1 := Integer readFrom:(a copyTo:i1-1).
- b1 := Integer readFrom:(b copyTo:i2-1).
- a1 < b1 ifTrue:[^ true].
- a1 > b1 ifTrue:[^ false].
- rest1 := (a copyFrom:i1+1).
- rest2 := (b copyFrom:i2+1).
- rest1 isEmpty ifTrue:[
- ^ rest2 notEmpty
- ].
- rest2 isEmpty ifTrue:[
- ^ false
- ].
- ^ self versionString:rest1 isLessThan:rest2
+ |i1 i2 a1 b1 restA restB|
+
+ restA := a.
+ restB := b.
+ [
+ i1 := restA indexOf:$. .
+ i2 := restB indexOf:$. .
+ i1 == 0 ifTrue:[
+ i1 := restA size + 1.
+ ].
+ i2 == 0 ifTrue:[
+ i2 := restB size + 1.
+ ].
+
+ a1 := Integer readFrom:(restA copyTo:i1-1).
+ b1 := Integer readFrom:(restB copyTo:i2-1).
+ a1 < b1 ifTrue:[^ true].
+ a1 > b1 ifTrue:[^ false].
+ restA := (restA copyFrom:i1+1).
+ restB := (restB copyFrom:i2+1).
+ restA isEmpty ifTrue:[
+ ^ restB notEmpty
+ ].
+ restB isEmpty ifTrue:[
+ ^ false
+ ].
+ ] loop.
"
- self assert:(self versionString:'12.34.66' isLessThan:'12.35.66').
- self assert:(self versionString:'12.34.66' isLessThan:'12.35.67').
- self assert:(self versionString:'11.34.66' isLessThan:'12.34.67').
- self assert:(self versionString:'11.35.66' isLessThan:'12.34.67').
- self assert:(self versionString:'13.35.66' isLessThan:'12.34.67') not.
- self assert:(self versionString:'13.35.66' isLessThan:'13.34.67') not.
- self assert:(self versionString:'13.35.66' isLessThan:'13.35.67').
- self assert:(self versionString:'13.35.66' isLessThan:'13.35.65') not.
- self assert:(self versionString:'13.35.66.1' isLessThan:'13.35.66') not.
- self assert:(self versionString:'13.35.66' isLessThan:'13.35.66.1').
- self assert:(self versionString:'13.35.66.2' isLessThan:'13.35.66.1') not.
- self assert:(self versionString:'13.35.66.1' isLessThan:'13.35.66.2').
+ self assert:(self default versionString:'12.34.66' isLessThan:'12.35.66').
+ self assert:(self default versionString:'12.34.66' isLessThan:'12.35.67').
+ self assert:(self default versionString:'11.34.66' isLessThan:'12.34.67').
+ self assert:(self default versionString:'11.35.66' isLessThan:'12.34.67').
+ self assert:(self default versionString:'13.35.66' isLessThan:'12.34.67') not.
+ self assert:(self default versionString:'13.35.66' isLessThan:'13.34.67') not.
+ self assert:(self default versionString:'13.35.66' isLessThan:'13.35.67').
+ self assert:(self default versionString:'13.35.66' isLessThan:'13.35.65') not.
+ self assert:(self default versionString:'13.35.66.1' isLessThan:'13.35.66') not.
+ self assert:(self default versionString:'13.35.66' isLessThan:'13.35.66.1').
+ self assert:(self default versionString:'13.35.66.2' isLessThan:'13.35.66.1') not.
+ self assert:(self default versionString:'13.35.66.1' isLessThan:'13.35.66.2').
"
- "Modified: / 17-02-2011 / 10:20:14 / cg"
+ "Modified (comment): / 06-12-2017 / 12:21:56 / cg"
! !
!SourceCodeManagerUtilities methodsFor:'utilities-encoding'!
@@ -4836,11 +4839,11 @@
|partialLog revisions items newestRev
box y component revisionHolder symbolicNames stableRevision releasedRevision
- tagHolder tagList lockChange|
+ tagPlusRevisionHolder tagHolder tagList lockChange|
partialLog := aSourceCodeManager
revisionLogOf:clsOrNil
- numberOfRevisions:20
+ numberOfRevisions:30
fileName:fileName
directory:directory
module:module.
@@ -4848,18 +4851,38 @@
partialLog notNil ifTrue:[
newestRev := partialLog at:#newestRevision.
revisions := partialLog at:#revisions.
- symbolicNames := partialLog at:#symbolicNames ifAbsent:[].
+ symbolicNames := partialLog at:#symbolicNames ifAbsent:[nil].
symbolicNames notNil ifTrue:[
- stableRevision := symbolicNames at:'stable' ifAbsent:[].
- releasedRevision := symbolicNames at:'released' ifAbsent:[].
- tagList := ((symbolicNames associations sort:[:a :b | a key < b key "self versionString:(a value) isLessThan:(b value)"])
- collect:[:assoc | assoc key]) reverse.
- tagList remove:'stable' ifAbsent:[].
- tagList notEmpty ifTrue:[tagList addFirst:'-'].
- tagList addFirst:'stable'.
- LastTag notNil ifTrue:[
+ stableRevision := symbolicNames at:'stable' ifAbsent:[nil].
+ releasedRevision := symbolicNames at:'released' ifAbsent:[nil].
+
+ "/ sort by revision; within same revision, sort by tag name
+ tagList := (((symbolicNames associations
+ sort:[:a :b | a key < b key "self versionString:(a value) isLessThan:(b value)"])
+ stableSort:[:a :b | self versionString:(a value) isLessThan:(b value)])
+ collect:[:assoc | assoc key]) reverse.
+
+ stableRevision notNil ifTrue:[
+ tagList remove:'stable'.
+ tagList notEmpty ifTrue:[
+ tagList addFirst:'-'
+ ].
+ tagList addFirst:'stable'.
+ ].
+
+ LastTag notEmptyOrNil ifTrue:[
tagList addFirst:LastTag.
- ].
+ ].
+ tagList := tagList collect:[:tag |
+ |rev|
+
+ rev := symbolicNames at:tag ifAbsent:[nil].
+ rev isNil ifTrue:[
+ tag
+ ] ifFalse:[
+ tag,((' (', rev value, ')') withColor:(Color grey))
+ ].
+ ].
].
"/ fill in timestamps
@@ -4965,6 +4988,7 @@
]
].
lockChange ifFalse:[
+ tagPlusRevisionHolder value:''.
tagHolder value:''
].
].
@@ -4976,8 +5000,8 @@
(tag := tagHolder value) notEmptyOrNil ifTrue:[
"/ LastTag := tag.
- rev := symbolicNames at:tag.
- rev ~= revisionHolder value ifTrue:[
+ rev := symbolicNames at:tag ifAbsent:[nil].
+ (rev notNil and:[rev ~= revisionHolder value]) ifTrue:[
lockChange := true.
revisionHolder value:rev.
lockChange := false.
@@ -4985,6 +5009,17 @@
]
].
+ tagPlusRevisionHolder := '' asValue.
+ tagPlusRevisionHolder
+ onChangeEvaluate:[
+ |tagPlusRevision tag|
+
+ (tagPlusRevision := tagPlusRevisionHolder value) notEmptyOrNil ifTrue:[
+ tag := (tagPlusRevision string upTo:$( ) withoutSeparators.
+ tagHolder value:tag.
+ ]
+ ].
+
"/
"/ open a dialog for this
"/
@@ -5008,7 +5043,7 @@
component := box addTextLabel:(resources string:'or Tag:') adjust:#right.
component width:0.4.
box yPosition:y.
- component := box addComboListOn:tagHolder tabable:true.
+ component := box addComboListOn:tagPlusRevisionHolder tabable:true.
component list:tagList.
component width:0.6; left:0.4.
tagList isNil ifTrue:[
@@ -5050,17 +5085,17 @@
"/ ^ revisionHolder value withoutSpaces.
"
- SourceCodeManagerUtilities
- askForRevisionToCompare:'enter revision'
+ CVSSourceCodeManager utilities
+ askForExistingRevision:'enter revision'
title:'revision'
- class:nil
- manager:SourceCodeManager
+ class:Array
+ manager:CVSSourceCodeManager
module:'stx'
- directory:'libbasic'
- fileName:'Array.st'
+ package:'libbasic'
+ fileName:nil
"
- "Modified: / 24-02-2017 / 11:38:39 / cg"
+ "Modified: / 06-12-2017 / 12:30:32 / cg"
!
checkAndWarnAboutBadMessagesInClass:aClass checkAgainHolder:checkAgainHolder
@@ -5263,22 +5298,16 @@
revisionForSymbolicName:tag class:cls fileName:classFileName directory:packageDir module:moduleDir manager:aSourceCodeManager
"given a tag, return the corresponding revision"
- |partialLog symbolicNames|
-
- partialLog := aSourceCodeManager
- revisionLogOf:cls
- numberOfRevisions:20
- fileName:classFileName
- directory:packageDir
- module:moduleDir.
-
- partialLog notNil ifTrue:[
- symbolicNames := partialLog at:#symbolicNames ifAbsent:[].
- symbolicNames notNil ifTrue:[
- ^ symbolicNames at:tag ifAbsent:nil
- ].
- ].
- ^ nil
+ ^ aSourceCodeManager revisionForSymbolicName:tag class:cls fileName:classFileName directory:packageDir module:moduleDir
+
+ "
+ CVSSourceCodeManager
+ revisionForSymbolicName:'stable'
+ class:Array fileName:'Array.st'
+ directory:'libbasic' module:'stx'
+ "
+
+ "Modified (format): / 06-12-2017 / 11:45:12 / cg"
! !
!SourceCodeManagerUtilities class methodsFor:'documentation'!