#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
--- 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