NewSystemBrowser.st
changeset 9740 444d45977355
parent 9728 d5e005104a22
child 9741 069dce167930
--- a/NewSystemBrowser.st	Tue Feb 08 09:27:00 2011 +0100
+++ b/NewSystemBrowser.st	Tue Feb 08 11:10:27 2011 +0100
@@ -39,8 +39,8 @@
 		DefaultShowSpecialResourceEditors SharedMethodCategoryCache
 		LastMethodProcessingBlockString LastLoadedPackages
 		DefaultShortAllClassesInNameSpaceOrganisation LastTag
-		DefaultShowPseudoProtocols DefaultShowMultitabMode LastRenamedOld
-		LastRenamedNew'
+		LastBaseVersionTag DefaultShowPseudoProtocols
+		DefaultShowMultitabMode LastRenamedOld LastRenamedNew'
 	poolDictionaries:''
 	category:'Interface-Browsers-New'
 !
@@ -7945,26 +7945,26 @@
             translateLabel: true
           )
          (MenuItem
-            enabled: hasSingleRealProjectSelectedHolder
+            enabled: hasProjectSelectedHolder
             label: 'Generate'
             translateLabel: true
             submenu: 
            (Menu
               (
                (MenuItem
-                  enabled: hasProjectSelectedHolder
+                  enabled: hasSingleRealProjectSelectedHolder "/ hasProjectSelectedHolder
                   label: 'Generate Project Definition Methods'
                   itemValue: projectMenuGenerateProjectDefinitions
                   translateLabel: true
                 )
                (MenuItem
-                  enabled: hasProjectSelectedHolder
+                  enabled: hasSingleRealProjectSelectedHolder "/ hasProjectSelectedHolder
                   label: 'Update Project Contents Definition Methods'
                   itemValue: projectMenuUpdateProjectContentsDefinitions
                   translateLabel: true
                 )
                (MenuItem
-                  enabled: hasProjectSelectedHolder
+                  enabled: hasSingleRealProjectSelectedHolder "/ hasProjectSelectedHolder
                   label: 'Regenerate Project Contents Definition Methods'
                   itemValue: projectMenuRegenerateProjectContentsDefinitions
                   translateLabel: true
@@ -7979,6 +7979,13 @@
                   translateLabel: true
                   showBusyCursorWhilePerforming: true
                 )
+               (MenuItem
+                  enabled: hasProjectSelectedHolder
+                  label: 'Patch-Set...'
+                  itemValue: projectMenuGeneratePatchSet
+                  translateLabel: true
+                  showBusyCursorWhilePerforming: true
+                )
                )
               nil
               nil
@@ -8031,7 +8038,7 @@
         nil
       )
 
-    "Modified: / 27-04-2010 / 12:42:43 / cg"
+    "Modified: / 08-02-2011 / 11:00:43 / cg"
 !
 
 projectMenuCVS
@@ -23259,6 +23266,19 @@
 
 !NewSystemBrowser methodsFor:'menu actions-class repository'!
 
+allKnownTagsInClasses:aCollectionOfClasses
+    |knownTags thisClassesTags|
+
+    knownTags := Set new.
+    aCollectionOfClasses do:[:eachClass |
+        thisClassesTags := eachClass sourceCodeManager knownTagsFor:eachClass.
+        knownTags addAll:thisClassesTags.
+    ].
+    ^ knownTags asSortedCollection.
+
+    "Created: / 08-02-2011 / 09:45:56 / cg"
+!
+
 checkInClasses:aCollectionOfClasses withInfo:logInfoOrNil withCheck:doCheck
     "check a bunch of classes into the source repository.
      If logInfoOrNil isNil, ask for one."
@@ -23789,7 +23809,7 @@
 classMenuCompareTwoRepositoryVersions
     "open a diff-textView comparing two versions found in the repository."
 
-    |currentClass source1 source2 sources mgr
+    |currentClass source1 source2 mgr
      nm rev1 rev2 versionsAreTheSame|
 
     currentClass := self theSingleSelectedLoadedNonMetaclassOrNil.
@@ -23817,35 +23837,8 @@
                 class:currentClass.
     rev2 isNil ifTrue:[^ self].
 
-self breakPoint:#cg.
-    versionsAreTheSame := false.
-    sources := (Array with:rev1 with:rev2)
-                   collect:[:rev |
-                        |msg stream source|
-
-                        msg := 'extracting previous %1'.
-                        stream := mgr getSourceStreamFor:currentClass revision:rev.
-                        self busyLabel:msg with:rev.
-
-                        stream isNil ifTrue:[
-                            self warn:(resources
-                                 string:'Could not extract source of rev %1 from repository'
-                                 with:rev).
-                            ^ self
-                        ].
-                        stream class readErrorSignal handle:[:ex |
-                            self warn:('read error while reading extracted source\\' , ex description) withCRs.
-                            stream close.
-                            ^ self
-                        ] do:[
-                            source := stream contents asString.
-                        ].
-                        stream close.
-                        source
-                    ].
-
-    source1 := sources at:1.
-    source2 := sources at:2.
+    source1 := self getClassSourceFor:currentClass revision:rev1.
+    source2 := self getClassSourceFor:currentClass revision:rev2.
 
     self busyLabel:'comparing  ...' with:nil.
     versionsAreTheSame := (source1 = source2).
@@ -23865,6 +23858,8 @@
         ].
     ].
     self normalLabel.
+
+    "Modified: / 08-02-2011 / 10:26:45 / cg"
 !
 
 classMenuCompareWithFile
@@ -24234,39 +24229,39 @@
 !
 
 classMenuSetTag
-    |log tag knownTags|
-
-    (Dialog confirm:'Fetch known tags to choose from ?\(this may take some time)' withCRs) ifTrue:[
-        knownTags := Set new.
-        self selectedNonMetaclasses do:[:eachClass |
-            log := eachClass sourceCodeManager revisionLogOf:eachClass fromRevision:nil toRevision:nil finishAfter:20.
-            log isNil ifTrue:[
-                (Dialog confirm:'Oops - could not fetch log for %1 (cvs connection error?)\\Skip this class and proceed?' withCRs)
-                ifFalse:[
-                    ^ self.
-                ].
-            ].
-            knownTags addAll:(log at:#symbolicNames) keys.
-        ].
-        knownTags := knownTags asSortedCollection.
-        tag := Dialog 
-                    request:(resources string:'Tag:')
-                    initialAnswer:LastTag  
-                    list:knownTags.  
-    ] ifFalse:[
-        tag := Dialog 
+    |classes tag knownTags|
+
+    classes := self selectedNonMetaclasses.
+
+    ((classes size <= 10) 
+        or:[ |answer|
+             answer := Dialog 
+                        confirmWithCancel:'Fetch known tags to choose from all classes?\(this may take some time)' withCRs
+                        default:false.
+             answer isNil ifTrue:[^ self].
+             answer == true
+           ]
+    ) ifTrue:[
+        "/ fetch from all classes
+        knownTags := self allKnownTagsInClasses:classes.
+    ] ifFalse:[
+        "/ only fetch from ProjectDefinitionClasses
+        knownTags := self allKnownTagsInClasses:(classes select:[:cls | cls isProjectDefinition]).
+    ].
+
+    tag := Dialog 
                 request:(resources string:'Tag:')
-                initialAnswer:LastTag.  
-    ].
+                initialAnswer:LastTag  
+                list:knownTags.  
     tag isEmptyOrNil ifTrue:[^ self ].
 
     LastTag := tag.
     self withWaitCursorDo:[
-        SourceCodeManagerUtilities tagClasses:(self selectedNonMetaclasses) as:tag.
+        SourceCodeManagerUtilities tagClasses:classes as:tag.
     ]
 
     "Created: / 12-09-2006 / 13:36:59 / cg"
-    "Modified: / 13-01-2011 / 14:12:40 / cg"
+    "Modified: / 08-02-2011 / 10:30:49 / cg"
 !
 
 classMenuShortRevisionLog
@@ -24587,6 +24582,34 @@
     "Modified: / 12-10-2006 / 23:30:12 / cg"
 !
 
+getClassSourceFor:aClass revision:revision
+    "ask aClass's sourceCodeManager to retrieve a (possibly older or newer) version's source code"
+
+    |msg stream source|
+
+    msg := 'extracting previous %1'.
+    self busyLabel:msg with:revision.
+
+    stream := aClass sourceCodeManager getSourceStreamFor:aClass revision:revision.
+    stream isNil ifTrue:[
+        self warn:(resources
+                     string:'Could not extract source of rev %1 from repository'
+                    with:revision).
+        ^ self
+    ].
+    stream class readErrorSignal handle:[:ex |
+        self warn:('read error while reading extracted source\\' , ex description) withCRs.
+        stream close.
+        ^ self
+    ] do:[
+        source := stream contents asString.
+    ].
+    stream close.
+    ^ source
+
+    "Created: / 08-02-2011 / 10:24:50 / cg"
+!
+
 repositoryHistoryForProjects:projectListOrNil
     (self askIfModified:'Code was modified.\\Show history anyway ?')
      ifFalse:[^ self].
@@ -27482,6 +27505,82 @@
     self window setClipboardText:stream contents
 !
 
+generatePatchSetForClasses:classes
+    "ask for two tags, generate a patchSet to bring a baseSystem (tag1) to the
+     level of the tag2 version"
+
+    |baseVersionTag patchVersionTag knownTags|
+
+    ((classes size <= 10) 
+        or:[ |answer|
+             answer := Dialog 
+                        confirmWithCancel:'Fetch known tags to choose from all classes?\(this may take some time)' withCRs
+                        default:false.
+             answer isNil ifTrue:[^ self].
+             answer == true
+           ]
+    ) ifTrue:[
+        "/ fetch from all classes
+        knownTags := self allKnownTagsInClasses:classes.
+    ] ifFalse:[
+        "/ only fetch from ProjectDefinitionClasses
+        knownTags := self allKnownTagsInClasses:(classes select:[:cls | cls isProjectDefinition]).
+    ].
+
+    baseVersionTag := Dialog request:'Tag of Base Version:' initialAnswer:LastBaseVersionTag list:knownTags.
+    baseVersionTag isEmptyOrNil ifTrue:[^ self].
+    patchVersionTag := Dialog request:'Tag of Patch Version:' initialAnswer:LastTag list:knownTags.
+    patchVersionTag isEmptyOrNil ifTrue:[^ self].
+
+    LastBaseVersionTag := baseVersionTag.
+    LastTag := patchVersionTag.
+    self generatePatchSetForClasses:classes from:baseVersionTag to:patchVersionTag.
+
+    "Created: / 08-02-2011 / 09:31:22 / cg"
+!
+
+generatePatchSetForClasses:classes from:baseVersionTag to:patchVersionTag
+    "given two tags, generate a patchSet to bring a baseSystem (tag1) to the
+     level of the tag2 version"
+
+    |fullPatchSet|
+
+    fullPatchSet := ChangeSet new.
+
+    classes do:[:eachClass |
+        |tagRevisionMapping baseVersion patchVersion baseVersionSource patchVersionSource 
+         baseChangeSet patchChangeSet diffSet thisPatchSet|
+
+        tagRevisionMapping := eachClass sourceCodeManager knownTagsAndRevisionsFor:eachClass.
+        (tagRevisionMapping includesKey:patchVersionTag) ifTrue:[
+            (tagRevisionMapping includesKey:baseVersionTag) ifTrue:[
+                "/ versions?
+                baseVersion := tagRevisionMapping at:baseVersionTag.
+                patchVersion := tagRevisionMapping at:patchVersionTag.
+
+                baseVersion ~= patchVersion ifTrue:[
+                    "/ change-sets...
+                    baseVersionSource := self getClassSourceFor:eachClass revision:baseVersion.
+                    patchVersionSource := self getClassSourceFor:eachClass revision:patchVersion.
+
+                    baseChangeSet := ChangeSet fromStream:baseVersionSource readStream.
+                    patchChangeSet := ChangeSet fromStream:patchVersionSource readStream.
+
+                    diffSet := baseChangeSet diffSetsAgainst:patchChangeSet.
+                    thisPatchSet := ChangeSet fromDiffSet:diffSet.
+
+                    fullPatchSet addAll:thisPatchSet.
+                ].
+            ]
+        ]
+    ].
+
+    ChangeSetBrowser openOn:fullPatchSet
+
+    "Created: / 08-02-2011 / 09:44:36 / cg"
+    "Modified: / 08-02-2011 / 11:08:04 / cg"
+!
+
 generateProjectDefinitionsIn:classes
     self
         generateUndoableChange:'Generate Project Definitions'
@@ -28928,6 +29027,15 @@
     self projectMenuFileOutAsWithFormat:#xml
 !
 
+projectMenuGeneratePatchSet
+    "ask for two tags, generate a patchSet to bring a baseSystem (tag1) to the
+     level of the tag2 version"
+
+    self generatePatchSetForClasses:(self selectedProjectClasses)
+
+    "Created: / 08-02-2011 / 09:29:38 / cg"
+!
+
 projectMenuGenerateProjectDefinitions
     |projectClasses|
 
@@ -44887,11 +44995,11 @@
 !NewSystemBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/Attic/NewSystemBrowser.st,v 1.1508 2011-01-31 17:30:35 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Attic/NewSystemBrowser.st,v 1.1509 2011-02-08 10:10:27 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Attic/NewSystemBrowser.st,v 1.1508 2011-01-31 17:30:35 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Attic/NewSystemBrowser.st,v 1.1509 2011-02-08 10:10:27 cg Exp $'
 ! !
 
 NewSystemBrowser initialize!