per package-id-match repository managers
authorClaus Gittinger <cg@exept.de>
Mon, 18 Apr 2011 21:27:56 +0200
changeset 2329 2fc2fbd7a63c
parent 2328 4620ff63e9b2
child 2330 96c6e13dded5
per package-id-match repository managers
AbstractSourceCodeManager.st
--- a/AbstractSourceCodeManager.st	Mon Apr 18 20:15:11 2011 +0200
+++ b/AbstractSourceCodeManager.st	Mon Apr 18 21:27:56 2011 +0200
@@ -14,7 +14,7 @@
 Object subclass:#AbstractSourceCodeManager
 	instanceVariableNames:''
 	classVariableNames:'DefaultManager CachingSources CacheDirectoryName UseWorkTree
-		WorkTreeDirectoryName'
+		WorkTreeDirectoryName ManagerPerModule'
 	poolDictionaries:''
 	category:'System-SourceCodeManagement'
 !
@@ -134,6 +134,76 @@
     "Modified: 12.9.1996 / 02:22:56 / cg"
 !
 
+managerForMatchingModule:aPackageIDMatchString put:aSourceCodeManagerClass
+    "update the per-module manager definitions, adding a manager class for a matchString"
+
+    ManagerPerModule isNil ifTrue:[
+        ManagerPerModule := OrderedCollection new.
+    ].
+    ManagerPerModule do:[:eachAssoc |
+        |packageMatch|
+
+        packageMatch := eachAssoc key.
+        (packageMatch = aPackageIDMatchString) ifTrue:[
+            eachAssoc value:aSourceCodeManagerClass.
+            ^ self
+        ].
+    ].
+    ManagerPerModule add:(aPackageIDMatchString -> aSourceCodeManagerClass).
+
+    "
+     self managerForModule:'stx:libbasic2' put:SVNSourceCodeManager
+     self managerForModule:'stx:libbasic2' put:CVSSourceCodeManager
+     self managerForModule:'stx:libbasic2'
+     self managerForModule:'exept:expecco' 
+    "
+
+    "Created: / 18-04-2011 / 19:48:19 / cg"
+!
+
+managerForModule:aPackageID
+    "return the sourceCodeManager for a aPackageID, nil if unspecified in the manager per package list"
+
+    ManagerPerModule notNil ifTrue:[
+        ManagerPerModule do:[:eachAssoc |
+            |packageMatch|
+
+            packageMatch := eachAssoc key.
+            (packageMatch match:aPackageID) ifTrue:[^ eachAssoc value].
+        ].
+    ].
+    ^ nil
+
+    "
+     self managerForModule:'stx:libbasic'
+     self managerForModule:'stx:libbasic2'
+     self managerForModule:'exept:expecco' 
+    "
+
+    "Created: / 18-04-2011 / 19:39:19 / cg"
+!
+
+managerPerMatchingModuleDefinitions
+    "return the sourceCodeManager definitions"
+
+    ManagerPerModule isNil ifTrue:[
+        ManagerPerModule := OrderedCollection new.
+    ].
+    ^ ManagerPerModule
+
+    "Created: / 18-04-2011 / 20:09:16 / cg"
+!
+
+managerPerMatchingModuleDefinitions:aCollection
+    "set the sourceCodeManager definitions; must be an orderedCollection of packageMatchString -> manager
+     associations 
+     (not a dictionary, because order is relevant in the matching process, where the first match counts)"
+
+    ManagerPerModule := aCollection
+
+    "Created: / 18-04-2011 / 20:09:21 / cg"
+!
+
 repositoryInfoPerModule
     "return the dictionary, which associates CVSRoots to module names.
      If no entry is contained in this dictionary for some module,
@@ -1293,22 +1363,35 @@
     ^ #'version'
 !
 
-sourceCodeManagerForPackage: packageId
-    |module|
-
-    packageId notNil ifTrue:[
+sourceCodeManagerForPackage:aPackageID
+    |module mgr|
+
+    aPackageID notNil ifTrue:[
         "/ see if there is a package-specific manager
+        (mgr := self managerForModule:aPackageID) notNil ifTrue:[^ mgr].
+
+        "/ more or less obsolete now - I know which manager is to be used per package
         self availableManagers do:[:mgr |
-            (mgr isResponsibleForPackage:packageId) ifTrue:[^ mgr ].
+            (mgr isResponsibleForPackage:aPackageID) ifTrue:[^ mgr ].
         ].
 
         "/ old stuff: see if there is a module-specific manager
-        module := packageId upTo:$:.
+        module := aPackageID upTo:$:.
         self availableManagers do:[:mgr |
             (mgr isResponsibleForModule:module) ifTrue:[^ mgr ].
         ]
     ].
     ^ Smalltalk at:#SourceCodeManager
+
+    "
+     self sourceCodeManagerForPackage:'stx:libbasic'.
+     self sourceCodeManagerForPackage:'stx:libboss'.
+     self managerForMatchingModule:'stx:libba*' put:SVNSourceCodeManager.
+     self sourceCodeManagerForPackage:'stx:libbasic'.
+     self sourceCodeManagerForPackage:'stx:libboss'.
+    "
+
+    "Modified: / 18-04-2011 / 19:53:03 / cg"
 !
 
 versionMethodTemplateForRuby
@@ -2809,11 +2892,11 @@
 !AbstractSourceCodeManager class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.238 2011-02-09 13:04:39 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.239 2011-04-18 19:27:56 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.238 2011-02-09 13:04:39 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.239 2011-04-18 19:27:56 cg Exp $'
 ! !
 
 AbstractSourceCodeManager initialize!