#UI_ENHANCEMENT by cg
authorClaus Gittinger <cg@exept.de>
Tue, 05 Dec 2017 20:33:44 +0100
changeset 17841 ebab2c97cef3
parent 17840 826cd4cd9cae
child 17842 51877843555f
#UI_ENHANCEMENT by cg class: Tools::NewSystemBrowser preps for branches added: #projectMenuCheckInProject:classes:extensions:buildSupport:askForMethodsInOtherPackages:usingManager:onBranch: #projectMenuCheckInProject:classes:extensions:buildSupport:usingManager:onBranch: #projectMenuCheckOntoBranchUsingManager: #projectMenuCheckOntoBranchUsingManagerNamed: changed: #classMenuMoveToProject #moveClasses:toProject: #projectMenuCheckInProject:classes:extensions:buildSupport:askForMethodsInOtherPackages:usingManager: #projectMenuCheckInProject:classes:extensions:buildSupport:usingManager: #projectMenuStartBranchUsingManager: class: Tools::NewSystemBrowser class comment/format in: #projectMenuSCMExtra_CVS
Tools__NewSystemBrowser.st
--- a/Tools__NewSystemBrowser.st	Tue Dec 05 20:33:15 2017 +0100
+++ b/Tools__NewSystemBrowser.st	Tue Dec 05 20:33:44 2017 +0100
@@ -16674,12 +16674,18 @@
             itemValue: projectMenuStartBranchUsingManagerNamed:
             argument: CVSSourceCodeManager
           )
-         )
-        nil
-        nil
-      )
-
-    "Modified: / 04-12-2017 / 17:52:18 / cg"
+          (MenuItem
+            enabled: hasProjectSelectedAndSourceCodeManagerHolder
+            label: 'Checkin onto Branch...'
+            itemValue: projectMenuCheckOntoBranchUsingManagerNamed:
+            argument: CVSSourceCodeManager
+          )
+         )
+        nil
+        nil
+      )
+
+    "Modified: / 05-12-2017 / 18:53:06 / cg"
 !
 
 projectMenuSCMExtra_SVN
@@ -32148,7 +32154,7 @@
     "change the package-id of the selected classes.
      Will eventually update the Project-object"
 
-    |newProject packages msg|
+    |newProject packages msg defClass suggestion nm|
 
     packages := self selectedClassesValue collect:[:each | each package].
     packages size == 1 ifTrue:[
@@ -32157,7 +32163,16 @@
     ] ifFalse:[
         msg := resources string:'Move class(es) to which project:'
     ].
-    newProject := self askForProject:msg.
+    (packages size == 1 and:[packages first = PackageId noProjectID]) ifTrue:[
+        defClass := self selectedClassesValue detect:[:cls | cls isProjectDefinition] ifNone:nil.
+        defClass notNil ifTrue:[ 
+            nm := defClass name.
+            "/ suggest a good name for project definitions
+            suggestion := (nm upTo:$_),':',((nm copyFrom:(nm indexOf:$_)+1) replaceAll:$_ with:$/).
+        ].   
+    ].    
+    suggestion isNil ifTrue:[ suggestion := (LastProjectMoves ? #('')) first ].
+    newProject := self askForProject:msg initialText:suggestion.
     newProject notNil ifTrue:[
         self withWaitCursorDo:[
             self moveSelectedClassesToProject:newProject.
@@ -32165,7 +32180,7 @@
     ].
 
     "Created: / 17-02-2000 / 22:50:07 / cg"
-    "Modified: / 28-02-2012 / 16:47:31 / cg"
+    "Modified: / 05-12-2017 / 17:39:07 / cg"
 !
 
 classMenuNewApplication
@@ -33994,13 +34009,13 @@
     "Modified: / 04-09-2013 / 17:45:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-moveClasses:classes toProject:newProject
+moveClasses:classesArg toProject:newProject
     "change the packageID of the given classes
      (and optionally the packageID of any methods (if they are from different packages)"
 
-    |anyClassMoved anyMethodMoved classesNotYetInRepository classesAlreadyInRepository
+    |classes anyClassMoved anyMethodMoved classesNotYetInRepository classesAlreadyInRepository
      sourceInfoPerClassOfClassesAlreadyInRepository oldPackagePerClass newProjectDefinition
-     thereWasASourceCodeManagerError|
+     thereWasASourceCodeManagerError managerClasses manager repos|
 
     (newProject = PackageId noProjectID) ifTrue:[
         (Dialog confirm:(resources
@@ -34011,19 +34026,29 @@
         ].
     ].
 
+    "/ check if classes are already there
+    classes := classesArg select:[:cls | cls package ~= newProject].
+    classes isEmpty ifTrue:[
+        Dialog information:(resources stringWithCRs:'%1 class(es) already in the "%2"-package.' with:classesArg size with:newProject allBold).
+        ^ self
+    ].
+    
+
     classesNotYetInRepository := OrderedCollection new.
     classesAlreadyInRepository := OrderedCollection new.
     sourceInfoPerClassOfClassesAlreadyInRepository := Dictionary new.
     oldPackagePerClass := Dictionary new.
 
     thereWasASourceCodeManagerError := false.
+    managerClasses := Set new.
     
     classes do:[:eachClass | 
         |oldProject theClass mgr vsn|
 
         theClass := eachClass theNonMetaclass.
         mgr := theClass sourceCodeManager.
-
+        managerClasses add:mgr.
+        
         mgr notNil ifTrue:[ 
             SourceCodeManagerError handle:[:ex |
                 thereWasASourceCodeManagerError := true
@@ -34093,11 +34118,19 @@
     thereWasASourceCodeManagerError ifTrue:[
         Dialog warn:(resources stringWithCRs:'There was a problem accessing the source code repository.\\Please check your settings and/or network connection').
         ^ self
+    ].
+    
+    managerClasses size == 1 ifTrue:[
+        (manager := managerClasses first) notNil ifTrue:[
+            repos := '("',(manager repositoryNameForPackage:newProject),'") '.
+        ]
     ].    
-    (Dialog confirm:(resources string:
-                    (classesAlreadyInRepository notEmpty
-                        ifTrue:['Move the classes in the repository now (recommended)?']
-                        ifFalse:['Check the classes into the repository now?']))
+    (Dialog confirm:(resources 
+                        string:
+                            (classesAlreadyInRepository notEmpty
+                                ifTrue:['Move the classes in the repository now (recommended)?']
+                                ifFalse:['Check the classes into the repository %1now?'])
+                        with:repos)
     ) ifFalse:[ ^ self ].
 
     "remove version methods"
@@ -34140,9 +34173,9 @@
         ].
     ].
 
-    newProjectDefinition includeClasses:(classesAlreadyInRepository , classesNotYetInRepository) usingCompiler:nil.   
-
-    "Modified: / 02-08-2013 / 14:26:03 / cg"
+    newProjectDefinition includeClasses:(classesAlreadyInRepository , classesNotYetInRepository) usingCompiler:nil.
+
+    "Modified: / 05-12-2017 / 17:59:58 / cg"
 !
 
 moveSelectedClassesToCategory:newCategory
@@ -42356,7 +42389,15 @@
     "Modified: / 04-09-2012 / 14:05:59 / cg"
 !
 
-projectMenuCheckInProject:packageToCheckIn classes:doClasses extensions:doExtensions buildSupport:doBuild askForMethodsInOtherPackages:askForMethodsInOtherPackages usingManager: manager
+projectMenuCheckInProject:packageToCheckIn classes:doClasses extensions:doExtensions buildSupport:doBuild askForMethodsInOtherPackages:askForMethodsInOtherPackages usingManager:manager
+    ^ self projectMenuCheckInProject:packageToCheckIn classes:doClasses extensions:doExtensions buildSupport:doBuild askForMethodsInOtherPackages:askForMethodsInOtherPackages usingManager:manager onBranch:nil
+
+    "Created: / 13-10-2011 / 10:40:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 21-12-2011 / 20:25:11 / cg"
+    "Modified: / 05-12-2017 / 20:00:33 / cg"
+!
+
+projectMenuCheckInProject:packageToCheckIn classes:doClasses extensions:doExtensions buildSupport:doBuild askForMethodsInOtherPackages:askForMethodsInOtherPackages usingManager:manager onBranch:branchNameOrNil
     |utilities|
 
     manager isNil ifTrue:[
@@ -42374,15 +42415,23 @@
                     extensions:doExtensions
                     buildSupport:doBuild
                     askForMethodsInOtherPackages:askForMethodsInOtherPackages
-            ]
-        ]
-    ]
-
-    "Created: / 13-10-2011 / 10:40:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Created: / 21-12-2011 / 20:25:11 / cg"
-!
-
-projectMenuCheckInProject:packageToCheckIn classes:doClasses extensions:doExtensions buildSupport:doBuild usingManager: manager
+                    onBranch:branchNameOrNil
+            ]
+        ]
+    ]
+
+    "Created: / 05-12-2017 / 19:59:28 / cg"
+!
+
+projectMenuCheckInProject:packageToCheckIn classes:doClasses extensions:doExtensions buildSupport:doBuild usingManager:manager
+    ^ self projectMenuCheckInProject:packageToCheckIn classes:doClasses extensions:doExtensions buildSupport:doBuild usingManager:manager onBranch:nil
+
+    "Created: / 13-10-2011 / 10:37:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 21-12-2011 / 20:18:59 / cg"
+    "Modified: / 05-12-2017 / 19:58:55 / cg"
+!
+
+projectMenuCheckInProject:packageToCheckIn classes:doClasses extensions:doExtensions buildSupport:doBuild usingManager:manager onBranch:branchNameOrNil
     ^ self
         projectMenuCheckInProject:packageToCheckIn
         classes:doClasses
@@ -42390,10 +42439,70 @@
         buildSupport:doBuild
         askForMethodsInOtherPackages:true
         usingManager: manager
-
-    "Modified: / 21-08-2006 / 19:43:22 / cg"
-    "Created: / 13-10-2011 / 10:37:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Created: / 21-12-2011 / 20:18:59 / cg"
+        onBranch:branchNameOrNil
+
+    "Created: / 05-12-2017 / 19:58:29 / cg"
+!
+
+projectMenuCheckOntoBranchUsingManager: manager
+    |branchesInAllPackages branchName first|
+
+    first := true.
+    self selectedProjectsDo:[:eachPackageToCheckIn | 
+        |prjDef branchesAndReleasesInThisPackage branchesInThisPackage|
+
+        prjDef := ProjectDefinition definitionClassForPackage:eachPackageToCheckIn.
+        prjDef isNil ifTrue:[
+            Dialog warn:('Project "%1" has no project definition yet.\Please create one and checkin first' bindWith:eachPackageToCheckIn).
+            ^ self.
+        ].    
+        branchesAndReleasesInThisPackage := manager knownBranchTagsAndRevisionsFor:prjDef.
+        branchesAndReleasesInThisPackage isEmpty ifTrue:[
+            Dialog warn:('Project "%1" has no branches yet.\Please create one first' bindWith:eachPackageToCheckIn).
+            ^ self.
+        ].
+        branchesInThisPackage := branchesAndReleasesInThisPackage keys.
+        
+        first ifTrue:[
+            branchesInAllPackages := Set withAll:branchesInThisPackage.
+            first := false.
+        ] ifFalse:[
+            branchesInAllPackages := branchesInAllPackages intersect:branchesInThisPackage.
+            branchesInAllPackages := branchesInAllPackages select:[:b | branchesInThisPackage includes:b].
+        ].
+    ].
+
+    "/ strip off the 'branch_' prefix
+    branchesInAllPackages := branchesInAllPackages collect:[:tag | tag withoutPrefix:(AbstractSourceCodeManager branchTagPrefix)].
+    branchesInAllPackages := branchesInAllPackages reject:[:tag | tag matchesRegex:'.*_[0-9]+' ].
+    branchesInAllPackages := branchesInAllPackages asOrderedCollection sort.
+    
+    branchName := Dialog 
+                        choose:'Name of branch:' 
+                        fromList:branchesInAllPackages
+                        lines:5
+                        initialSelection:(branchesInAllPackages first)
+                        title:'Check onto which branch'.
+    branchName isNil ifTrue:[^ self].
+
+    self selectedProjectsDo:[:packageToCheckIn |
+        self
+            projectMenuCheckInProject:packageToCheckIn
+            classes:true
+            extensions:true
+            buildSupport:true
+            usingManager: manager
+            onBranch:branchName
+    ]
+
+    "Created: / 05-12-2017 / 18:54:36 / cg"
+    "Modified: / 05-12-2017 / 19:58:07 / cg"
+!
+
+projectMenuCheckOntoBranchUsingManagerNamed:sourceCodeManagerClassName
+    ^self projectMenuCheckOntoBranchUsingManager: (self sourceCodeManagerNamed:sourceCodeManagerClassName)
+
+    "Created: / 05-12-2017 / 18:53:52 / cg"
 !
 
 projectMenuCheckOut
@@ -44650,8 +44759,8 @@
         tagAlreadyUsed
     ] whileTrue.
 
-    (branchName startsWith:'branch_') ifFalse:[
-        branchName := 'branch_',branchName.
+    (branchName startsWith:(AbstractSourceCodeManager branchTagPrefix)) ifFalse:[
+        branchName := AbstractSourceCodeManager branchTagPrefix,branchName.
     ].    
     baseTag := branchName,'_0'.
 
@@ -44677,7 +44786,7 @@
     self projectMenuCheckInAllUsingManager:aManager onBranch:branchName
 
     "Created: / 04-12-2017 / 17:49:16 / cg"
-    "Modified: / 05-12-2017 / 13:47:27 / cg"
+    "Modified: / 05-12-2017 / 19:20:46 / cg"
 !
 
 projectMenuStartBranchUsingManagerNamed:sourceCodeManagerClassName