#UI_ENHANCEMENT by cg
authorClaus Gittinger <cg@exept.de>
Wed, 06 Dec 2017 12:32:01 +0100
changeset 4287 c9ef4001cebd
parent 4286 3286be6412f3
child 4288 abe0dbd3fb66
#UI_ENHANCEMENT by cg class: SourceCodeManagerUtilities changed: #askForExistingRevision:title:class:manager:module:package:fileName: #revisionForSymbolicName:class:fileName:directory:module:manager: #versionString:isLessThan:
SourceCodeManagerUtilities.st
--- 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'!