Merged with /trunk jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Thu, 26 Jul 2012 16:09:40 +0100
branchjv
changeset 3065 c60f15e53fce
parent 3064 5aaeb66c9663
child 3066 25b5d22fdd54
Merged with /trunk
AbstractSourceCodeManager.st
Change.st
ChangeSet.st
GitSourceCodeManager.st
Make.proto
Make.spec
MethodChange.st
ProjectChecker.st
ProjectProblem.st
SourceCodeManagerUtilities.st
SourceCodeManagerUtilitiesForContainerBasedManagers.st
SourceCodeManagerUtilitiesForWorkspaceBasedManagers.st
abbrev.stc
bc.mak
libInit.cc
libbasic3.rc
stx_libbasic3.st
--- a/AbstractSourceCodeManager.st	Thu Jul 26 11:05:27 2012 +0100
+++ b/AbstractSourceCodeManager.st	Thu Jul 26 16:09:40 2012 +0100
@@ -385,10 +385,13 @@
      manager, but individual managers may override this
      method and supply its own, customized utilities."
 
-    ^ SourceCodeManagerUtilities forManager: self
+    ^ (self isContainerBased
+            ifTrue: [ SourceCodeManagerUtilitiesForContainerBasedManagers ]
+            ifFalse: [ SourceCodeManagerUtilitiesForWorkspaceBasedManagers ]
+      ) forManager: self
 
     "Created: / 10-10-2011 / 15:10:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified (format): / 21-12-2011 / 20:05:31 / cg"
+    "Modified (format): / 25-07-2012 / 17:08:05 / cg"
 !
 
 workTreeDirectoryName
@@ -808,12 +811,6 @@
     "Modified (format): / 21-12-2011 / 18:58:53 / cg"
 ! !
 
-!AbstractSourceCodeManager class methodsFor:'others'!
-
-version_CVS
-    ^ '§Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.294 2012/07/24 07:43:36 cg Exp §'
-! !
-
 !AbstractSourceCodeManager class methodsFor:'private'!
 
 checkMethodPackagesOf:aClass
@@ -1858,65 +1855,25 @@
      only does the checkin, using a temporary file.
      Return true if ok, false if not."
 
-    |tempDir tempFile ok packageMode filter|
-
-    packageMode := self checkMethodPackagesOf:aClass.
-    packageMode == #base ifTrue:[
-        filter := [:mthd | mthd package = aClass package].
-    ].
-
-    tempDir := Filename newTemporaryDirectory.
-    ok := false.
-    [
-        |aStream|
-
-        tempFile := tempDir construct:classFileName.
-        [
-            aStream := tempFile writeStream.
-        ] on:FileStream openErrorSignal do:[:ex|
-            self reportError:('temporary fileout failed').
-            ^ false
+    ^ self 
+        withClass:aClass 
+        classFileName:classFileName 
+        filedOutToTemporaryFileDo:[:tempFile |
+            self 
+                checkinClass:aClass
+                fileName:classFileName 
+                directory:packageDir 
+                module:moduleDir
+                source:(tempFile name)
+                logMessage:logMessage
+                force:force.
         ].
 
-        Method flushSourceStreamCache.
-        Class fileOutErrorSignal handle:[:ex |
-            aStream close.
-            self reportError:('fileout failed (',ex description,')').
-            ^ false
-        ] do:[
-            self 
-                fileOutSourceCodeOf:aClass 
-                on:aStream 
-                withTimeStamp:false 
-                withInitialize:true 
-                withDefinition:true
-                methodFilter:filter.
-        ].
-        aStream close.
-
-        tempFile exists ifFalse:[
-            self reportError:'temporary fileout failed'.
-            ^ false.
-        ].
-        ok := self 
-            checkinClass:aClass
-            fileName:classFileName 
-            directory:packageDir 
-            module:moduleDir
-            source:(tempFile name)
-            logMessage:logMessage
-            force:force.
-    ] ensure:[
-        tempDir recursiveRemove
-    ].
-    ^ ok
-
     "
      SourceCodeManager checkinClass:Array
     "
 
     "Modified: / 25-09-1997 / 12:16:00 / stefan"
-    "Modified: / 20-08-2011 / 14:52:01 / cg"
     "Created: / 21-12-2011 / 19:30:06 / cg"
 !
 
@@ -2279,6 +2236,64 @@
     "
 
     "Created: / 29-08-2006 / 15:41:43 / cg"
+!
+
+withClass:aClass classFileName:classFileName filedOutToTemporaryFileDo:aBlock
+    "helper. fileout and eval aBlock"
+
+    |tempDir tempFile ok packageMode filter|
+
+    packageMode := self checkMethodPackagesOf:aClass.
+    packageMode == #base ifTrue:[
+        filter := [:mthd | mthd package = aClass package].
+    ].
+
+    tempDir := Filename newTemporaryDirectory.
+    ok := false.
+    [
+        |aStream|
+
+        tempFile := tempDir construct:classFileName.
+        [
+            aStream := tempFile writeStream.
+        ] on:FileStream openErrorSignal do:[:ex|
+            self reportError:('temporary fileout failed').
+            ^ false
+        ].
+
+        Method flushSourceStreamCache.
+        Class fileOutErrorSignal handle:[:ex |
+            aStream close.
+            self reportError:('fileout failed (',ex description,')').
+            ^ false
+        ] do:[
+            self 
+                fileOutSourceCodeOf:aClass 
+                on:aStream 
+                withTimeStamp:false 
+                withInitialize:true 
+                withDefinition:true
+                methodFilter:filter.
+        ].
+        aStream close.
+
+        tempFile exists ifFalse:[
+            self reportError:'temporary fileout failed'.
+            ^ false.
+        ].
+        ok := aBlock value:tempFile 
+    ] ensure:[
+        tempDir recursiveRemove
+    ].
+    ^ ok
+
+    "
+     SourceCodeManager checkinClass:Array
+    "
+
+    "Modified: / 25-09-1997 / 12:16:00 / stefan"
+    "Modified: / 20-08-2011 / 14:52:01 / cg"
+    "Created: / 25-07-2012 / 19:38:23 / cg"
 ! !
 
 !AbstractSourceCodeManager class methodsFor:'source code administration'!
@@ -3739,11 +3754,15 @@
 !AbstractSourceCodeManager class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.294 2012/07/24 07:43:36 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.295 2012/07/25 23:33:08 cg Exp $'
+!
+
+version_CVS
+    ^ '§Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.295 2012/07/25 23:33:08 cg Exp §'
 !
 
 version_SVN
-    ^ '$Id: AbstractSourceCodeManager.st 1937 2012-07-25 08:46:08Z vranyj1 $'
+    ^ '$Id: AbstractSourceCodeManager.st 1940 2012-07-26 15:09:40Z vranyj1 $'
 ! !
 
 AbstractSourceCodeManager initialize!
--- a/Change.st	Thu Jul 26 11:05:27 2012 +0100
+++ b/Change.st	Thu Jul 26 16:09:40 2012 +0100
@@ -80,26 +80,30 @@
 !
 
 changeLanguage
+    "Answer the programming language of the receiver. 
+     Since changesets are currently only supported for Smalltalk, 
+     return SmalltalkLanguage unconditionally"
 
-    "Answer the language of the receiver. Since changesets 
-    are now supported only for Smalltalk, return SmalltalkLanguage
-    unconditionally"
+    ^ SmalltalkLanguage instance
 
-    ^SmalltalkLanguage instance
+    "Modified (comment): / 25-07-2012 / 17:40:47 / cg"
 !
 
 changeSelector
+    "the selector, if it is a method change. Nil oherwise"
+
     ^ nil
 
-    "Created: / 6.2.1998 / 13:29:35 / cg"
+    "Created: / 06-02-1998 / 13:29:35 / cg"
 !
 
 changeSource
-
+    "Return the source of the change"
 
     ^ self source
 
     "Created: / 19-07-2011 / 19:03:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (comment): / 25-07-2012 / 17:39:24 / cg"
 !
 
 className
@@ -143,12 +147,13 @@
 !
 
 imageSource
-    "Return the source of image thingy or nil if there is no source
-     for given change"
+    "Return the source of the in-image version
+     or nil if there is no source for this change"
 
-    ^nil
+    ^ nil
 
     "Created: / 19-07-2011 / 11:58:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 25-07-2012 / 17:37:23 / cg"
 !
 
 nameSpaceOverride:ns
@@ -498,13 +503,13 @@
 !Change class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/Change.st,v 1.59 2012/03/20 18:19:03 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/Change.st,v 1.60 2012/07/25 16:12:42 cg Exp $'
 !
 
 version_CVS
-    ^ '§Header: /cvs/stx/stx/libbasic3/Change.st,v 1.59 2012/03/20 18:19:03 cg Exp §'
+    ^ '§Header: /cvs/stx/stx/libbasic3/Change.st,v 1.60 2012/07/25 16:12:42 cg Exp §'
 !
 
 version_SVN
-    ^ '$Id: Change.st 1909 2012-03-31 00:14:49Z vranyj1 $'
+    ^ '$Id: Change.st 1940 2012-07-26 15:09:40Z vranyj1 $'
 ! !
--- a/ChangeSet.st	Thu Jul 26 11:05:27 2012 +0100
+++ b/ChangeSet.st	Thu Jul 26 16:09:40 2012 +0100
@@ -542,7 +542,6 @@
     "Created: / 27.10.1997 / 13:52:54 / cg"
 ! !
 
-
 !ChangeSet class methodsFor:'Compatibility-VW'!
 
 component: component definition: anObject change: changeSymbol
@@ -1085,7 +1084,6 @@
     "Created: / 05-12-2009 / 12:32:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-
 !ChangeSet methodsFor:'misc'!
 
 addPatch:nameOfPatch
@@ -1094,7 +1092,6 @@
     ^ self
 ! !
 
-
 !ChangeSet methodsFor:'private-accessing'!
 
 addChange:aChange
@@ -1205,41 +1202,40 @@
 !
 
 changesForPackage:aPackageSymbol
-
-    "
-	ChangeSet current changesForPackage:#'stx:goodies/libsvn'.
+    ^(self select:[:aChange |
+        |includeThis mClass mthd|
+
+        includeThis := false.
+        (aChange isMethodChange or:[aChange isMethodRemoveChange]) ifTrue:[
+            mClass := aChange changeClass.
+            mClass notNil ifTrue:[
+                mthd := mClass compiledMethodAt:(aChange selector).
+                mthd isNil ifTrue:[
+                    aChange isMethodRemoveChange ifTrue:[
+                        includeThis := (mClass package = aPackageSymbol)
+                    ].
+                ] ifFalse:[
+                    includeThis := (mthd package = aPackageSymbol)
+                ]
+            ].
+        ] ifFalse:[
+            (aChange isClassChange) ifTrue:[
+                (aChange changeClass notNil) ifTrue:[
+                    includeThis := (aChange changeClass package = aPackageSymbol)
+                ].
+            ].
+        ].
+        includeThis
+    ])
 
     "
-
-    ^(self select:[:aChange |
-	|removeThis mClass mthd|
-
-	removeThis := false.
-	(aChange isMethodChange or:[aChange isMethodRemoveChange]) ifTrue:[
-	    mClass := aChange changeClass.
-	    mClass notNil ifTrue:[
-		mthd := mClass compiledMethodAt:(aChange selector).
-		mthd isNil ifTrue:[
-		    aChange isMethodRemoveChange ifTrue:[
-			removeThis := (mClass package = aPackageSymbol)
-		    ].
-		] ifFalse:[
-		    removeThis := (mthd package = aPackageSymbol)
-		]
-	    ].
-	] ifFalse:[
-	    (aChange isClassChange) ifTrue:[
-		(aChange changeClass notNil) ifTrue:[
-		    removeThis := (aChange changeClass package = aPackageSymbol)
-		].
-	    ].
-	].
-	removeThis
-    ])
+     ChangeSet current changesForPackage:#'stx:goodies/libsvn'
+    "
 
     "Created: / 05-11-2001 / 14:21:17 / cg"
     "Modified: / 12-10-2006 / 16:51:27 / cg"
     "Modified: / 22-10-2008 / 13:25:02 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified (comment): / 26-07-2012 / 11:54:00 / cg"
 !
 
 includesChangeForClass:aClass
@@ -1320,6 +1316,7 @@
         changeClassName := aChange className.
         (changeClassName = nameOfClass) ifTrue:[^ true].
         (changeClassName = nameOfMetaclass) ifTrue:[^ true].
+
         changeClass := aChange changeClass.
         (changeClass notNil
         and:[changeClass isPrivate
@@ -1328,6 +1325,8 @@
         ]
     ].
     ^ false
+
+    "Modified (format): / 25-07-2012 / 16:50:26 / cg"
 !
 
 includesChangeForClassOrMetaclassOrPrivateClassOfAny:aCollectionOfClasses
@@ -1368,25 +1367,34 @@
 !
 
 selectForWhichIncludesChangeForClassOrMetaclassOrPrivateClassFrom:aCollectionOfClasses
-    |namesOfClasses namesOfMetaclasses|
-
-    namesOfClasses := aCollectionOfClasses collect:[:eachClass | eachClass theNonMetaclass name] as:Array.
-    namesOfMetaclasses := aCollectionOfClasses collect:[:eachClass | eachClass theMetaclass name] as:Array.
-
-    ^ aCollectionOfClasses 
-        select:[:aChange | 
-            |changeClassName changeClass|
-
-            changeClassName := aChange className.
-            (namesOfClasses includes:changeClassName) 
-            or:[ (namesOfMetaclasses includes:changeClassName)
-            or:[
-                changeClass := aChange changeClass.
-                (changeClass notNil 
-                and:[ changeClass isPrivate
-                and:[ (aCollectionOfClasses includes:changeClass owningClass) ]])
-            ]]
-        ].
+    |selected alreadyProcessed classes prev|
+
+    classes := aCollectionOfClasses collect:[:eachClass | eachClass theNonMetaclass] as:Array.
+
+    selected := Set new.
+    alreadyProcessed := Set new.
+
+    self do:[:eachChange | 
+        |changeClassName changeClass isIn|
+
+        changeClass := eachChange changeClass.
+        (changeClass notNil and:[ changeClass ~~ prev ]) ifTrue:[
+            changeClass := changeClass theNonMetaclass.
+            (alreadyProcessed includes:changeClass) ifFalse:[            
+                ((classes includes:changeClass)
+                    or: [
+                        changeClass isPrivate
+                        and: [ (classes includes:changeClass owningClass) ]
+                    ]
+                ) ifTrue:[
+                    selected add: changeClass
+                ].
+                alreadyProcessed add: changeClass
+            ].
+            prev := changeClass.
+        ]
+    ].
+    ^ selected.
 
     "Created: / 08-09-2011 / 04:38:32 / cg"
 ! !
@@ -1843,35 +1851,33 @@
     | buckets newChangeset keys |
 
     buckets := OrderedDictionary new.
-    self do:
-        [:change| | tag |
+    self do:[:change| 
+        | tag |
+
         tag := groupBlock value: change.
-        (buckets at: tag ifAbsentPut: [ChangeSet new:4])
-            add: change].
-    newChangeset := ChangeSet new: buckets size.
+        (buckets at: tag ifAbsentPut: [self class new:4]) add: change
+    ].
+    newChangeset := self class new: buckets size.
 
     keys := buckets keys select:[:k | k notNil].
-    doSort ifTrue:[
-        keys sort.
-    ].
+    doSort ifTrue:[ keys sort ].
     keys do:[:tag |
         |changes classDefs|
 
         changes := buckets at:tag.
 
-"/    buckets keysAndValuesDo:
-"/            [:tag :changes| | classDefs |
-            "Move class definition to the front"
-            classDefs := changes select:[:chg|chg isClassDefinitionChange].
-            changes removeAll: classDefs.
-            changes addAllFirst: classDefs.
-
-            tag notNil ifTrue:[
-                newChangeset add:
-                    (CompositeChange 
-                        name: (labelBlock value: tag)
-                        changes: changes)]
-            ].
+        "Move class definition to the front"
+        classDefs := changes select:[:chg|chg isClassDefinitionChange].
+        changes removeAll: classDefs.
+        changes addAllFirst: classDefs.
+
+        tag notNil ifTrue:[
+            newChangeset add:
+                (CompositeChange 
+                    name: (labelBlock value: tag)
+                    changes: changes)
+        ]
+    ].
     (buckets includesKey: nil) ifTrue:[
         newChangeset addAll: (buckets at: nil)
     ].
@@ -1917,17 +1923,19 @@
 saveSignedToFile:aFilename format:formatSymbolOrNil
     "write the changeSet to a signed file in some format.
      Sign with the exept key (which you do not have outside of exept!!).
-     Nil fomat is chunk"
+     Nil is chunk format (currently, the only supported)"
 
     |s pkcs7SignedData|
 
+    self assert: (Smalltalk at:#'Expecco::KeyFileGenerator') notNil.
+
     s := WriteStream on:(String new:2000).
     self saveToStream:s format:formatSymbolOrNil.
 
-    pkcs7SignedData := Expecco::KeyFileGenerator new signExpeccoCode:s contents.
+    pkcs7SignedData := (Smalltalk at:#'Expecco::KeyFileGenerator') new signExpeccoCode:s contents.
     aFilename asFilename contents:pkcs7SignedData.
 
-    "Modified: / 08-02-2011 / 11:48:01 / cg"
+    "Modified (comment): / 26-07-2012 / 12:15:58 / cg"
 !
 
 saveToFile:aFilename
@@ -1940,7 +1948,7 @@
 
 saveToFile:aFilename format:formatSymbolOrNil
     "write the changeSet to a regular file in some format.
-     Nil fomat is chunk"
+     Nil is chunk format (currently, the only supported)"
 
     |s|
 
@@ -1953,7 +1961,7 @@
 
 saveToStream:aStream format:formatSymbolOrNil
     "write the changeSet to a stream in some format.
-     Nil fomat is chunk"
+     Nil is chunk format (currently the only supported format)"
 
     formatSymbolOrNil isNil ifTrue:[
         self do:[:eachChange |
@@ -1970,7 +1978,7 @@
             ].
             aStream cr.
         ].
-        ^self.
+        ^ self
     ].
 
     formatSymbolOrNil == #classSource ifTrue:[
@@ -3911,10 +3919,10 @@
 !ChangeSet class methodsFor:'documentation'!
 
 version_CVS
-    ^ '§Header: /cvs/stx/stx/libbasic3/ChangeSet.st,v 1.188 2012/04/05 10:02:38 stefan Exp §'
+    ^ '§Header: /cvs/stx/stx/libbasic3/ChangeSet.st,v 1.190 2012/07/26 10:20:26 cg Exp §'
 
 !
 
 version_SVN
-    ^ '$Id: ChangeSet.st 1923 2012-05-18 17:58:53Z vranyj1 $'
+    ^ '$Id: ChangeSet.st 1940 2012-07-26 15:09:40Z vranyj1 $'
 ! !
--- a/GitSourceCodeManager.st	Thu Jul 26 11:05:27 2012 +0100
+++ b/GitSourceCodeManager.st	Thu Jul 26 16:09:40 2012 +0100
@@ -347,13 +347,11 @@
     "Created: / 19-09-1997 / 06:13:06 / cg"
 !
 
-repositoryNameForPackage:packageId 
-    "superclass AbstractSourceCodeManager class says that I am responsible to implement this method"
-    
-    ^ self getGitRepositoryForModule:(packageId upTo:$: )
+repositoryNameForPackage:packageId     
+    ^ self repositoryNameForModule:(packageId upTo:$:)
 
     "Created: / 10-10-2011 / 19:44:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 02-03-2012 / 15:25:35 / cg"
+    "Modified (format): / 25-07-2012 / 18:23:06 / cg"
 !
 
 workDirectory
@@ -370,6 +368,12 @@
 
 !GitSourceCodeManager class methodsFor:'basic administration'!
 
+addFile:fileName inDirectory:dirPath
+    self executeGitCommand:('add "',fileName,'"') inDirectory:dirPath
+
+    "Created: / 25-07-2012 / 23:07:57 / cg"
+!
+
 checkForExistingContainer:fileName inModule:moduleName directory:dirName
     "check for a container to be present"
 
@@ -416,7 +420,25 @@
     "Created: / 23-07-2012 / 19:07:34 / cg"
 !
 
-checkinClass:aClass fileName:classFileName directory:packageDir module:moduleDir source:sourceFile logMessage:logMessage force:force
+checkin:containerFilename text:someText directory:packageDir module:moduleDir logMessage:logMessage force:force
+    |path relPath|
+
+    relPath := (moduleDir asFilename construct:packageDir) construct:containerFilename.
+    path := self repositoryName asFilename construct:relPath.
+    path contents: someText.
+
+    ^ self checkinClass:nil 
+        fileName:containerFilename 
+        directory:packageDir 
+        module:moduleDir
+        source:nil
+        logMessage:logMessage 
+        force:force
+
+    "Created: / 25-07-2012 / 14:29:10 / cg"
+!
+
+checkinClass:aClassOrNil fileName:classFileName directory:packageDir module:moduleDir source:sourceFileOrNil logMessage:logMessage force:force
     "checkin of a class into the source repository.
      Return true if ok, false if not."
 
@@ -424,7 +446,9 @@
 
     relPath := (moduleDir asFilename construct:packageDir) construct:classFileName.
     path := self repositoryName asFilename construct:relPath.
-    sourceFile asFilename moveTo: path.
+    sourceFileOrNil notNil ifTrue:[
+        sourceFileOrNil asFilename moveTo: path.
+    ].
 
     (self executeGitCommand:'add ',relPath name inDirectory:self repositoryName) ifFalse:[
         self halt
@@ -450,6 +474,25 @@
     "Created: / 23-07-2012 / 20:05:14 / cg"
 !
 
+commitRepository:repositoryDirectory logMessage:logMessage
+    |logArg|
+
+    self 
+        executeGitCommand:('status') 
+        outputTo:Transcript 
+        errorTo:Transcript     
+        inDirectory:repositoryDirectory.
+
+    logArg := logMessage copyReplaceAll:$" withAll:''''''.
+    self 
+        executeGitCommand:('commit -m "',logArg,'"') 
+        outputTo:Transcript 
+        errorTo:Transcript     
+        inDirectory:repositoryDirectory.
+
+    "Created: / 25-07-2012 / 22:47:57 / cg"
+!
+
 createContainerFor:aClass inModule:moduleName directory:dirName container:fileName
     "create a new container & check into it an initial version of aClass"
 
@@ -516,6 +559,12 @@
     ^ self standardRevisionStringFor:aClass inModule:moduleDir directory:packageDir container:fileName revision:revisionString
 
     "Created: / 23-07-2012 / 19:01:17 / cg"
+!
+
+updateRepository:repositoryDirectory
+    self executeGitCommand:'update' inDirectory:repositoryDirectory
+
+    "Created: / 25-07-2012 / 18:55:56 / cg"
 ! !
 
 !GitSourceCodeManager class methodsFor:'debugging'!
@@ -530,6 +579,12 @@
 
 !GitSourceCodeManager class methodsFor:'queries'!
 
+isContainerBased
+    ^ false
+
+    "Created: / 24-07-2012 / 18:21:32 / cg"
+!
+
 isResponsibleForPackage:aString
     ^true.
 
@@ -597,15 +652,15 @@
 !GitSourceCodeManager class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/GitSourceCodeManager.st,v 1.5 2012/07/24 07:38:58 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/GitSourceCodeManager.st,v 1.6 2012/07/25 23:31:16 cg Exp $'
 !
 
 version_CVS
-    ^ '§Header: /cvs/stx/stx/libbasic3/GitSourceCodeManager.st,v 1.5 2012/07/24 07:38:58 cg Exp §'
+    ^ '§Header: /cvs/stx/stx/libbasic3/GitSourceCodeManager.st,v 1.6 2012/07/25 23:31:16 cg Exp §'
 !
 
 version_SVN
-    ^ '$Id:: GitSourceCodeManager.st 1937 2012-07-25 08:46:08Z vranyj1                                                              $'
+    ^ '$Id:: GitSourceCodeManager.st 1940 2012-07-26 15:09:40Z vranyj1                                                              $'
 ! !
 
 GitSourceCodeManager initialize!
--- a/Make.proto	Thu Jul 26 11:05:27 2012 +0100
+++ b/Make.proto	Thu Jul 26 16:09:40 2012 +0100
@@ -63,7 +63,7 @@
 
 all:: preMake classLibRule postMake
 
-pre_objs::  
+pre_objs::
 
 
 
@@ -78,13 +78,13 @@
 		echo -n exported > .svnversion; \
 	fi
 
-stx_libbasic3.o: stx_libbasic3.st .svnversion 
+stx_libbasic3.o: stx_libbasic3.st .svnversion
 	if [ -d .svn ]; then \
 		rev2="$(shell printf "%-16s" $$(cat .svnversion))"; \
 		sed -e "s/\"\$$SVN\-Revision:\".*\"\$$\"/\"\$$SVN-Revision:\"\'$$rev2\'\"\$$\"/g" $< > .stx_libbasic3.svn.st; \
 	fi
 	$(MAKE) CC="$(CLASSLIB_CC)" OPT="$(OPT)" SEPINITCODE="$(SEPINITCODE)" STC="$(STC)" STFILE=.stx_libbasic3.svn $(O_RULE);
-	mv .stx_libbasic3.svn.$(O) stx_libbasic3.$(O) 
+	mv .stx_libbasic3.svn.$(O) stx_libbasic3.$(O)
 endif
 
 
@@ -165,8 +165,10 @@
 $(OUTDIR)MethodChangeNotificationParameter.$(O) MethodChangeNotificationParameter.$(H): MethodChangeNotificationParameter.st $(INCLUDE_TOP)/stx/libbasic3/ChangeNotificationParameter.$(H) $(INCLUDE_TOP)/stx/libbasic/Array.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)NameSpaceCreationChange.$(O) NameSpaceCreationChange.$(H): NameSpaceCreationChange.st $(INCLUDE_TOP)/stx/libbasic3/Change.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)OtherChange.$(O) OtherChange.$(H): OtherChange.st $(INCLUDE_TOP)/stx/libbasic3/Change.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)PerforceSourceCodeManager.$(O) PerforceSourceCodeManager.$(H): PerforceSourceCodeManager.st $(INCLUDE_TOP)/stx/libbasic3/AbstractSourceCodeManager.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic3/VersionInfo.$(H) $(STCHDR)
+$(OUTDIR)PerforceSourceCodeManager.$(O) PerforceSourceCodeManager.$(H): PerforceSourceCodeManager.st $(INCLUDE_TOP)/stx/libbasic3/AbstractSourceCodeManager.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/VersionInfo.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(STCHDR)
 $(OUTDIR)SVNVersionInfo.$(O) SVNVersionInfo.$(H): SVNVersionInfo.st $(INCLUDE_TOP)/stx/libbasic3/VersionInfo.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)SourceCodeManagerUtilitiesForContainerBasedManagers.$(O) SourceCodeManagerUtilitiesForContainerBasedManagers.$(H): SourceCodeManagerUtilitiesForContainerBasedManagers.st $(INCLUDE_TOP)/stx/libbasic3/SourceCodeManagerUtilities.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)SourceCodeManagerUtilitiesForWorkspaceBasedManagers.$(O) SourceCodeManagerUtilitiesForWorkspaceBasedManagers.$(H): SourceCodeManagerUtilitiesForWorkspaceBasedManagers.st $(INCLUDE_TOP)/stx/libbasic3/SourceCodeManagerUtilities.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)StoreSourceCodeManager.$(O) StoreSourceCodeManager.$(H): StoreSourceCodeManager.st $(INCLUDE_TOP)/stx/libbasic3/AbstractSourceCodeManager.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)ClassCategoryChange.$(O) ClassCategoryChange.$(H): ClassCategoryChange.st $(INCLUDE_TOP)/stx/libbasic3/ClassChange.$(H) $(INCLUDE_TOP)/stx/libbasic3/Change.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)ClassClassVariableChange.$(O) ClassClassVariableChange.$(H): ClassClassVariableChange.st $(INCLUDE_TOP)/stx/libbasic3/ClassChange.$(H) $(INCLUDE_TOP)/stx/libbasic3/Change.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -195,4 +197,3 @@
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/libbasic/UserPreferences.$(H) $(INCLUDE_TOP)/stx/libbasic/IdentityDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ConfigurableFeatures.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
-
--- a/Make.spec	Thu Jul 26 11:05:27 2012 +0100
+++ b/Make.spec	Thu Jul 26 16:09:40 2012 +0100
@@ -115,9 +115,11 @@
 	ProjectChecker \
 	MercurialSourceCodeManager \
 	InvalidChange \
-	ProjectProblem \
 	GitSourceCodeManager \
 	InfoChange \
+	ProjectProblem \
+	SourceCodeManagerUtilitiesForContainerBasedManagers \
+	SourceCodeManagerUtilitiesForWorkspaceBasedManagers \
 
 
 
@@ -188,10 +190,9 @@
     $(OUTDIR)ProjectChecker.$(O) \
     $(OUTDIR)MercurialSourceCodeManager.$(O) \
     $(OUTDIR)InvalidChange.$(O) \
-    $(OUTDIR)ProjectProblem.$(O) \
     $(OUTDIR)GitSourceCodeManager.$(O) \
     $(OUTDIR)InfoChange.$(O) \
+    $(OUTDIR)ProjectProblem.$(O) \
+    $(OUTDIR)SourceCodeManagerUtilitiesForContainerBasedManagers.$(O) \
+    $(OUTDIR)SourceCodeManagerUtilitiesForWorkspaceBasedManagers.$(O) \
     $(OUTDIR)extensions.$(O) \
-
-
-
--- a/MethodChange.st	Thu Jul 26 11:05:27 2012 +0100
+++ b/MethodChange.st	Thu Jul 26 16:09:40 2012 +0100
@@ -156,14 +156,18 @@
 !
 
 imageSource
+    "return the source for the in-image version of the method"
 
     | mth |
 
-    self isMethodCodeChange ifFalse:[^super imageSource].
+    self isMethodCodeChange ifFalse:[^ super imageSource].
     mth := self changeMethod.
-    ^mth isNil ifTrue: [nil] ifFalse:[mth source]
+    ^ mth isNil 
+        ifTrue: [nil] 
+        ifFalse:[mth source]
 
     "Created: / 19-07-2011 / 12:02:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 25-07-2012 / 17:37:52 / cg"
 !
 
 methodCategory
@@ -449,9 +453,9 @@
 !MethodChange class methodsFor:'documentation'!
 
 version_CVS
-    ^ '§Header: /cvs/stx/stx/libbasic3/MethodChange.st,v 1.64 2011/11/27 12:29:49 cg Exp §'
+    ^ '§Header: /cvs/stx/stx/libbasic3/MethodChange.st,v 1.65 2012/07/25 23:22:03 cg Exp §'
 !
 
 version_SVN
-    ^ '$Id: MethodChange.st 1909 2012-03-31 00:14:49Z vranyj1 $'
+    ^ '$Id: MethodChange.st 1940 2012-07-26 15:09:40Z vranyj1 $'
 ! !
--- a/ProjectChecker.st	Thu Jul 26 11:05:27 2012 +0100
+++ b/ProjectChecker.st	Thu Jul 26 16:09:40 2012 +0100
@@ -87,12 +87,6 @@
     "Created: / 11-01-2012 / 16:46:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!ProjectChecker class methodsFor:'others'!
-
-version_CVS
-    ^ '§Header: /cvs/stx/stx/libbasic3/ProjectChecker.st,v 1.4 2012/03/14 16:25:24 vrany Exp §'
-! !
-
 !ProjectChecker methodsFor:'accessing'!
 
 classes: aCollection
@@ -159,7 +153,7 @@
     "Checks whether all classes listed in #classNamesAndAttributes are present
     and if all present classes are listed"
 
-    |classesInImage classesInDescription onlyInImage onlyInDescription|
+    |classesInImage classesInDescription onlyInDescription|
     "WARNING: Copy/paste of ProjectDefinition>>validateDescription"
 
     classesInImage := Smalltalk allClasses select:[:cls | (cls package = self package) and:[cls isPrivate not]].
@@ -206,11 +200,12 @@
     ].
 
     classesInImage ~= classesInDescription ifTrue:[
-        onlyInImage := (classesInImage reject:[:cls | classesInDescription includes:cls]).
-        onlyInImage do:[:cls|
-            self addProblem: 
-                (ProjectProblem newClassNotListed className: cls name).
-        ].
+        "This is done later in checkClassesListedInProjectDefinition:"
+"/        onlyInImage := (classesInImage reject:[:cls | classesInDescription includes:cls]).
+"/        onlyInImage do:[:cls|
+"/            self addProblem: 
+"/                (ProjectProblem newClassNotListed className: cls name).
+"/        ].
         onlyInDescription := (classesInDescription reject:[:cls | classesInImage includes:cls]).
         onlyInDescription do:[:cls|
             self addProblem: 
@@ -480,9 +475,13 @@
 !ProjectChecker class methodsFor:'documentation'!
 
 version
-    ^ '$Id: ProjectChecker.st 1938 2012-07-26 10:05:27Z vranyj1 $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ProjectChecker.st,v 1.6 2012/07/26 11:59:15 vrany Exp $'
+!
+
+version_CVS
+    ^ '§Header: /cvs/stx/stx/libbasic3/ProjectChecker.st,v 1.6 2012/07/26 11:59:15 vrany Exp §'
 !
 
 version_SVN
-    ^ '$Id: ProjectChecker.st 1938 2012-07-26 10:05:27Z vranyj1 $'
+    ^ '$Id: ProjectChecker.st 1940 2012-07-26 15:09:40Z vranyj1 $'
 ! !
--- a/ProjectProblem.st	Thu Jul 26 11:05:27 2012 +0100
+++ b/ProjectProblem.st	Thu Jul 26 16:09:40 2012 +0100
@@ -1,6 +1,6 @@
 "
  COPYRIGHT (c) 2006 by eXept Software AG
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -128,7 +128,7 @@
 copyright
 "
  COPYRIGHT (c) 2006 by eXept Software AG
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -235,24 +235,24 @@
     fixes isEmpty ifTrue:[ ^ self description ].
 
     ^String streamContents:[:html |
-        html nextPutAll: self description.
+	html nextPutAll: self description.
 
-        html nextPutAll: '<br><br>'.
-        fixes size == 1 ifTrue:[
-            html nextPutLine: 'Possible fix:'.
-        ] ifFalse:[
-            html nextPutLine: 'Possible fixes:'.
-        ].
-        html nextPutLine:'<ul>'.
-        fixes withIndexDo:[:fix :index|
-            html 
-                nextPutAll:'<li><a action="doit: self application doFix: ';
-                nextPutAll: index printString;
-                nextPutAll:'">';
-                nextPutAll: fix first;
-                nextPutAll:'</a></li>'.
-        ].
-        html nextPutLine:'</ul>'.
+	html nextPutAll: '<br><br>'.
+	fixes size == 1 ifTrue:[
+	    html nextPutLine: 'Possible fix:'.
+	] ifFalse:[
+	    html nextPutLine: 'Possible fixes:'.
+	].
+	html nextPutLine:'<ul>'.
+	fixes withIndexDo:[:fix :index|
+	    html
+		nextPutAll:'<li><a action="doit: self application doFix: ';
+		nextPutAll: index printString;
+		nextPutAll:'">';
+		nextPutAll: fix first;
+		nextPutAll:'</a></li>'.
+	].
+	html nextPutLine:'</ul>'.
     ].
 
     "Created: / 26-07-2012 / 09:46:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -319,7 +319,7 @@
 initializeFixes
 
     fixes isNil ifTrue:[
-        fixes := self fixes
+	fixes := self fixes
     ].
 
     "/ super initialize.   -- commented since inherited method does nothing
@@ -354,11 +354,11 @@
     | className |
 
     className := classOrclassName isBehavior
-                    ifTrue: [classOrclassName storeString]
-                    ifFalse:[classOrclassName].
+		    ifTrue: [classOrclassName storeString]
+		    ifFalse:[classOrclassName].
 
     ^'<A INFO="Click to browse class" ACTION="doit: UserPreferences current systemBrowserClass openInClass:%1"><CODE>%1</CODE></A>'
-        bindWith: className
+	bindWith: className
 
     "Created: / 23-02-2012 / 13:44:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -373,18 +373,18 @@
 
     | className |
     className := classOrclassName isBehavior
-                    ifTrue: [classOrclassName name]
-                    ifFalse:[classOrclassName].
+		    ifTrue: [classOrclassName name]
+		    ifFalse:[classOrclassName].
     ^omitClassName ifTrue:[
-        '<A INFO="Click to browse method" ACTION="doit: UserPreferences current systemBrowserClass openInClass:%1 selector: %2"><CODE>#%3</CODE></A>'
-            bindWith: className
-                with: selector storeString
-                with: selector
+	'<A INFO="Click to browse method" ACTION="doit: UserPreferences current systemBrowserClass openInClass:%1 selector: %2"><CODE>#%3</CODE></A>'
+	    bindWith: className
+		with: selector storeString
+		with: selector
     ] ifFalse:[
-        '<A INFO="Click to browse method" ACTION="doit: UserPreferences current systemBrowserClass openInClass:%1 selector: %2"><CODE>%1>>%3</CODE></A>'
-            bindWith: className
-                with: selector storeString
-                with: selector
+	'<A INFO="Click to browse method" ACTION="doit: UserPreferences current systemBrowserClass openInClass:%1 selector: %2"><CODE>%1>>%3</CODE></A>'
+	    bindWith: className
+		with: selector storeString
+		with: selector
     ]
 
     "Created: / 26-07-2012 / 10:26:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -402,14 +402,14 @@
 
 klass
     "Return the class which is subject of the problem"
-    
+
     | class |
 
     (className endsWith: ' class') ifTrue:[
-        class := Smalltalk at: (className copyTo: className size - 6) asSymbol.
-        class := class theMetaclass.
+	class := Smalltalk at: (className copyTo: className size - 6) asSymbol.
+	class := class theMetaclass.
     ] ifFalse:[
-        class := Smalltalk at: className  asSymbol
+	class := Smalltalk at: className  asSymbol
     ].
     ^class
 
@@ -440,6 +440,7 @@
     cls := self klass.
     cls isNil ifTrue:[ ^ false ].
     def includeClasses:(Array with: cls) usingCompiler: nil.
+    UserNotification notify: ('Class added. Do not forgot to check in build support files!!' bindWith: className).
     ^true
 
     "Created: / 26-07-2012 / 10:41:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -454,6 +455,7 @@
     cls := self klass.
     cls isNil ifTrue:[ ^ false ].
     def makeClassesAutoloaded:(Array with: cls) usingCompiler: nil.
+    UserNotification notify: ('Class added. Do not forgot to check in build support files!!' bindWith: className).
     ^true
 
     "Created: / 26-07-2012 / 10:41:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -461,9 +463,9 @@
 
 fixes
 
-    ^Array 
-        with: (Array with: 'Include in project' with: [ self doIncludeInProject ])
-        with: (Array with: 'Include in project as autoloaded' with: [ self doIncludeInProjectAsAutoloaded ])
+    ^Array
+	with: (Array with: 'Include in project' with: [ self doIncludeInProject ])
+	with: (Array with: 'Include in project as autoloaded' with: [ self doIncludeInProjectAsAutoloaded ])
 
     "Created: / 26-07-2012 / 10:41:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -484,7 +486,7 @@
 'A class (<code>%1</code>) is listed in project definition class but
 it is not present in the system.
 
-You should either create it or remove it from %2.' 
+You should either create it or remove it from %2.'
     bindWith: className with: (self linkToClass: self packageDefinitionClass class selector: #classNamesAndAttributes)
 
     "Modified: / 28-02-2012 / 22:23:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -510,7 +512,7 @@
     "Return a (HTML) describing the problem."
 
     ^
-'A class %1 uses pool %2 but it does not exists. 
+'A class %1 uses pool %2 but it does not exists.
 
 The pool should be removed from class definition otherwise
 the package won''t compile due missing class.'
@@ -541,12 +543,12 @@
     "Return a (HTML) describing the problem."
 
     ^
-'A class %1 uses pool %2 but it does not exists. 
+'A class %1 uses pool %2 but it does not exists.
 
 The pool should be removed from class definition otherwise
 the package won''t compile due missing class.'
-    bindWith: (self linkToClass: className) 
-        with: (self linkToClass: poolName)
+    bindWith: (self linkToClass: className)
+	with: (self linkToClass: poolName)
 
     "Modified: / 23-02-2012 / 13:48:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -618,7 +620,7 @@
 ^'Method %1 is not listed in %2. Although it does not hurt,
 it should be listed'
     bindWith: (self linkToMethod)
-        with: (self linkToClass: self packageDefinitionClass class selector: #extensionMethodNames)
+	with: (self linkToClass: self packageDefinitionClass class selector: #extensionMethodNames)
 
     "Modified: / 23-02-2012 / 14:34:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -639,27 +641,27 @@
     | issuePrinter |
 
     issuePrinter := [:stream :issue|
-        stream nextPutAll:'<li>'.
-        issue descriptionOn: stream.
-        stream nextPutAll:'</li>'.
-        stream cr.
+	stream nextPutAll:'<li>'.
+	issue descriptionOn: stream.
+	stream nextPutAll:'</li>'.
+	stream cr.
     ].
 
     ^ String streamContents:[:s|
-        s 
-            nextPutAll: 'Following problems has been found in ';
-            nextPutAll: self linkToMethod;
-            nextPutAll: ':'; cr;
-            nextPutAll: '<ul>'.
-        errors ? #() do:[:issue|issuePrinter value: s value: issue].
-        warnings ? #() do:[:issue|issuePrinter value: s value: issue].
-        s 
-            nextPutAll: '</ul>'.
+	s
+	    nextPutAll: 'Following problems has been found in ';
+	    nextPutAll: self linkToMethod;
+	    nextPutAll: ':'; cr;
+	    nextPutAll: '<ul>'.
+	errors ? #() do:[:issue|issuePrinter value: s value: issue].
+	warnings ? #() do:[:issue|issuePrinter value: s value: issue].
+	s
+	    nextPutAll: '</ul>'.
 
-        errors notNil ifTrue:[
-            s nextPutAll:
+	errors notNil ifTrue:[
+	    s nextPutAll:
 'STC won''t compile such a code, therefore you must fix it before commiting'
-        ].
+	].
     ]
 
     "Modified: / 11-04-2012 / 15:51:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -669,9 +671,9 @@
     "Return the label (possibly instance if a Text) shortly describing the problem"
 
     ^ errors notNil ifTrue:[
-        'Uncompilable method %1>>%2' bindWith: className with: selector
+	'Uncompilable method %1>>%2' bindWith: className with: selector
     ] ifFalse:[
-        'Warnings for method %1>>%2' bindWith: className with: selector
+	'Warnings for method %1>>%2' bindWith: className with: selector
     ]
 
     "Modified: / 11-04-2012 / 16:04:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -738,7 +740,7 @@
     "warning notification during fileIn - ignore it.
      This is sent by the compiler/evaluator if it detects errors."
 
-"/    No, do not show warnings now, too many false positives  
+"/    No, do not show warnings now, too many false positives
 "/    warnings isNil ifTrue:[ warnings := OrderedCollection new].
 "/    warnings   add: (Warning message: aMessage from: position to: endPos).
 
@@ -759,10 +761,10 @@
 message: message from: startPosition to: endPosition
 
     ^self new
-        message: message;
-        startPosition: startPosition;
-        endPosition: endPosition;
-        yourself.
+	message: message;
+	startPosition: startPosition;
+	endPosition: endPosition;
+	yourself.
 
     "Created: / 11-04-2012 / 15:38:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
@@ -805,10 +807,10 @@
 message: message from: startPosition to: endPosition
 
     ^self new
-        message: message;
-        startPosition: startPosition;
-        endPosition: endPosition;
-        yourself.
+	message: message;
+	startPosition: startPosition;
+	endPosition: endPosition;
+	yourself.
 
     "Created: / 11-04-2012 / 15:38:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
@@ -855,8 +857,8 @@
 'Method %1 does not belong to any package. Such methods
 are not commited and will be lost when you restart/recompile.
 Method should be moved to some package, %2 maybe?'
-    bindWith: (self linkToMethod) 
-        with: package
+    bindWith: (self linkToMethod)
+	with: package
 
     "Modified: / 23-02-2012 / 14:21:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -864,18 +866,18 @@
 fixes
 
     ^Array with:
-        (Array  with: 'Move method to package ', package 
-                with: [ 
-                    | m |
+	(Array  with: 'Move method to package ', package
+		with: [
+		    | m |
 
-                    m := self method.
-                    m notNil ifTrue:[
-                        m package: package.
-                        true
-                    ] ifFalse:[
-                        false
-                    ]
-                ])
+		    m := self method.
+		    m notNil ifTrue:[
+			m package: package.
+			true
+		    ] ifFalse:[
+			false
+		    ]
+		])
 
     "Created: / 26-07-2012 / 09:53:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -895,11 +897,11 @@
 
 ^'Method %1>>%2 listed in %3 but does not exists. This does not hurt
 if you stc-compile all your code, but such a package will fail to
-(auto)load from sources. 
+(auto)load from sources.
 
 It is highly reccomended to remove the method from the list (%3).'
     bindWith: className with: selector
-        with: (self linkToClass: self packageDefinitionClass class selector: #extensionMethodNames)
+	with: (self linkToClass: self packageDefinitionClass class selector: #extensionMethodNames)
 
     "Modified: / 23-02-2012 / 15:18:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -921,8 +923,8 @@
 'Source code for %1 is <b>corrupted</b>. This is likely because
 the binary class version does not match the source file. This may happen,
 for instance, if you compile a class library and then edit the .st file.'
-    bindWith: (self linkToMethod) 
-        with: package
+    bindWith: (self linkToMethod)
+	with: package
 
     "Modified: / 11-04-2012 / 12:47:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -952,8 +954,8 @@
 'Source code for %1  is not available. Check your package path
 and/or source code management settings.
 '
-    bindWith: (self linkToMethod) 
-        with: package
+    bindWith: (self linkToMethod)
+	with: package
 
     "Modified: / 11-04-2012 / 12:44:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -1003,5 +1005,10 @@
 !ProjectProblem class methodsFor:'documentation'!
 
 version_SVN
-    ^ '$Id: ProjectProblem.st 1938 2012-07-26 10:05:27Z vranyj1 $'
+    ^ '$Id: ProjectProblem.st 1940 2012-07-26 15:09:40Z vranyj1 $'
+!
+
+version_CVS
+    ^ '§Header: /cvs/stx/stx/libbasic3/ProjectProblem.st,v 1.3 2012/07/26 11:58:48 vrany Exp §'
+
 ! !
--- a/SourceCodeManagerUtilities.st	Thu Jul 26 11:05:27 2012 +0100
+++ b/SourceCodeManagerUtilities.st	Thu Jul 26 16:09:40 2012 +0100
@@ -1,6 +1,6 @@
 "
  COPYRIGHT (c) 2000 eXept Software AG
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -12,7 +12,7 @@
 "{ Package: 'stx:libbasic3' }"
 
 Object subclass:#SourceCodeManagerUtilities
-	instanceVariableNames:'manager resources'
+	instanceVariableNames:'manager resources confirmNewFiles'
 	classVariableNames:'LastSourceLogMessage LastModule LastPackage YesToAllQuery
 		YesToAllNotification LastSourceLogMessages'
 	poolDictionaries:''
@@ -24,7 +24,7 @@
 copyright
 "
  COPYRIGHT (c) 2000 eXept Software AG
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -42,7 +42,7 @@
     (extracted from the browser)
 
     [author:]
-        Claus Gittinger (cg@exept)
+	Claus Gittinger (cg@exept)
 
     [see also:]
 
@@ -64,21 +64,24 @@
 new
     "return an initialized instance"
 
+    self == SourceCodeManagerUtilities ifTrue:[ self error:'trying to instatiate abstract class' ].
     ^ self basicNew initialize.
+
+    "Modified: / 25-07-2012 / 17:10:55 / cg"
 ! !
 
 !SourceCodeManagerUtilities class methodsFor:'Signal constants'!
 
 yesToAllNotification
     YesToAllNotification isNil ifTrue:[
-        YesToAllNotification := QuerySignal new.
+	YesToAllNotification := QuerySignal new.
     ].
     ^ YesToAllNotification
 !
 
 yesToAllQuery
     YesToAllQuery isNil ifTrue:[
-        YesToAllQuery := QuerySignal new.
+	YesToAllQuery := QuerySignal new.
     ].
     ^ YesToAllQuery
 ! !
@@ -122,13 +125,13 @@
 doesNotUnderstand: aMessage
 
     (self default respondsTo: aMessage selector) ifTrue:[
-        "Bad, method moved to instance side but not forwarded"
-        self breakPoint: #jv.
-        self breakPoint: #cg.
-
-        ^aMessage sendTo: self default
+	"Bad, method moved to instance side but not forwarded"
+	self breakPoint: #jv.
+	self breakPoint: #cg.
+
+	^aMessage sendTo: self default
     ] ifFalse:[
-        ^super doesNotUnderstand: aMessage
+	^super doesNotUnderstand: aMessage
     ]
 
     "Created: / 10-10-2011 / 14:04:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -141,17 +144,17 @@
     "Utility method"
 
     "
-        SourceCodeManagerUtilities compileForwarders.
+	SourceCodeManagerUtilities compileForwarders.
     "
 
     self methodsDo:[:m|
-        | sel |
-        sel := m selector.
-        ((self class includesSelector: sel) and: [(self class >> sel) source = m source]) ifTrue:[
-            | source header |
-
-            header := m source asStringCollection first.
-            source := '%1
+	| sel |
+	sel := m selector.
+	((self class includesSelector: sel) and: [(self class >> sel) source = m source]) ifTrue:[
+	    | source header |
+
+	    header := m source asStringCollection first.
+	    source := '%1
 
     <resource: #obsolete>
 
@@ -159,10 +162,10 @@
 
     ^self default %1' bindWith: header with: header.
 
-            self halt: 'Inspect source'.
-            self class compile: source classified: m category.    
-        ].
-            
+	    self halt: 'Inspect source'.
+	    self class compile: source classified: m category.
+	].
+
     ]
 
     "Created: / 11-10-2011 / 10:55:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -262,11 +265,11 @@
 
     self obsoleteMethodWarning: 'Please use instance protocol (SourceCodeManagerUtilities default doSomething)'.
 
-    ^self default 
-        changeSetForExtensionMethodsForPackage:packageToCheckOut 
-        revision:revisionOrNil 
-        orAskForRevision:askForRevision 
-        usingManager:aSourceCodeManager
+    ^self default
+	changeSetForExtensionMethodsForPackage:packageToCheckOut
+	revision:revisionOrNil
+	orAskForRevision:askForRevision
+	usingManager:aSourceCodeManager
 
     "Created: / 29-12-2011 / 14:28:14 / cg"
 !
@@ -612,18 +615,18 @@
 !
 
 getCheckinInfoFor:aClassNameOrPackageNameString initialAnswer:initialAnswerOrNil
-    ^self default 
-        getCheckinInfoFor:aClassNameOrPackageNameString     
-        initialAnswer:initialAnswerOrNil
+    ^self default
+	getCheckinInfoFor:aClassNameOrPackageNameString
+	initialAnswer:initialAnswerOrNil
 
     "Modified: / 12-03-2012 / 12:56:45 / cg"
 !
 
 getCheckinInfoFor:aClassNameOrPackageNameString initialAnswer:initialAnswerOrNil withQuickOption:withQuickOption
-    ^self default 
-        getCheckinInfoFor:aClassNameOrPackageNameString 
-        initialAnswer:initialAnswerOrNil 
-        withQuickOption:withQuickOption
+    ^self default
+	getCheckinInfoFor:aClassNameOrPackageNameString
+	initialAnswer:initialAnswerOrNil
+	withQuickOption:withQuickOption
 
     "Modified: / 12-03-2012 / 12:56:50 / cg"
 !
@@ -664,14 +667,22 @@
     "Created: / 10-10-2011 / 11:42:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+confirmNewFiles:aBoolean
+    "if true, ask if new files are about to be added to the repo"
+
+    confirmNewFiles := aBoolean.
+
+    "Modified (comment): / 24-07-2012 / 18:18:34 / cg"
+!
+
 lastSourceLogMessageHeadlines
     LastSourceLogMessage isNil ifTrue:[
-        LastSourceLogMessages := OrderedCollection new.
+	LastSourceLogMessages := OrderedCollection new.
     ].
-    ^ LastSourceLogMessages 
-        collect:[:msg |
-            msg withoutLeadingSeparators asCollectionOfLines first , '...'
-        ]
+    ^ LastSourceLogMessages
+	collect:[:msg |
+	    msg withoutLeadingSeparators asCollectionOfLines first , '...'
+	]
 
     "Created: / 12-03-2012 / 12:34:35 / cg"
 !
@@ -695,13 +706,13 @@
 doesNotUnderstand: aMessage
 
     (self class respondsTo: aMessage selector) ifTrue:[
-        "Bad, method is not moved the the instance side"
-        self breakPoint: #jv.
-        self breakPoint: #cg.
-
-        ^aMessage sendTo: self class
+	"Bad, method is not moved the the instance side"
+	self breakPoint: #jv.
+	self breakPoint: #cg.
+
+	^aMessage sendTo: self class
     ] ifFalse:[
-        ^super doesNotUnderstand: aMessage
+	^super doesNotUnderstand: aMessage
     ]
 
     "Created: / 10-10-2011 / 14:02:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -710,17 +721,24 @@
 !SourceCodeManagerUtilities methodsFor:'initialization'!
 
 initialize
-
+    confirmNewFiles := true.
     resources := self classResources.
 
     "Modified: / 13-10-2011 / 11:03:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 24-07-2012 / 18:17:57 / cg"
 !
 
 setManager: aSourceCodeManager
 
-    manager := aSourceCodeManager
+    manager := aSourceCodeManager.
+    manager isContainerBased ifFalse:[
+	confirmNewFiles isNil "not yet set by user" ifTrue:[
+	    confirmNewFiles := false.
+	]
+    ].
 
     "Created: / 10-10-2011 / 11:47:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 25-07-2012 / 08:35:35 / cg"
 ! !
 
 !SourceCodeManagerUtilities methodsFor:'utilities'!
@@ -730,7 +748,7 @@
 
     info := mgr sourceInfoOfClass:aClass.
 
-    ^ (info isNil 
+    ^ (info isNil
     or:[(info at:#fileName ifAbsent:nil) isNil
     or:[(info at:#module ifAbsent:nil) isNil
     or:[(info at:#directory ifAbsent:nil) isNil]]])
@@ -755,17 +773,17 @@
 
     anyChange := false.
     aClass withAllPrivateClassesDo:[:eachClass |
-        anyChangeHere := false.
-        eachClass instAndClassSelectorsAndMethodsDo:[:sel :mthd | 
-            mthd package ~= aPackage ifTrue:[
-                mthd setPackage:aPackage.
-                anyChangeHere := true.
-            ].
-        ].
-        anyChangeHere ifTrue:[
-            eachClass changed:#projectOrganization
-        ].
-        anyChangeHere ifTrue:[anyChange := true].
+	anyChangeHere := false.
+	eachClass instAndClassSelectorsAndMethodsDo:[:sel :mthd |
+	    mthd package ~= aPackage ifTrue:[
+		mthd setPackage:aPackage.
+		anyChangeHere := true.
+	    ].
+	].
+	anyChangeHere ifTrue:[
+	    eachClass changed:#projectOrganization
+	].
+	anyChangeHere ifTrue:[anyChange := true].
     ].
     anyChange ifTrue:[
        Smalltalk changed:#projectOrganization
@@ -777,15 +795,69 @@
     "make all methods belong to the classes project"
 
     aChangeSet do:[:eachChange |
-        eachChange isMethodCodeChange ifTrue:[
-            eachChange changeMethod package ~= aPackage ifTrue:[
-                Transcript showCR:'change package of ',eachChange changeMethod whoString.
-                eachChange changeMethod setPackage:aPackage.        
-            ]
-        ]
+	eachChange isMethodCodeChange ifTrue:[
+	    eachChange changeMethod package ~= aPackage ifTrue:[
+		Transcript showCR:'change package of ',eachChange changeMethod whoString.
+		eachChange changeMethod setPackage:aPackage.
+	    ]
+	]
     ].
 !
 
+sourceCodeForExtensions:aCollectionOfMethods package:aPackageID forManager:scmManager
+    |s methodsSortedByName defClass|
+
+    s := '' writeStream.
+
+    s nextPutAll:'"{ Package: '''.
+    s nextPutAll:aPackageID asString.
+    s nextPutAll:''' }"'; nextPutChunkSeparator; cr; cr.
+
+    "/ don't write a timestamp. Otherwise we would always generate a new version, even if nothing changed
+    "/ s nextPutAll:(Smalltalk timeStamp).
+    "/ s nextPutChunkSeparator.
+    "/ s cr; cr.
+
+    "/ sort them by name (to avoid conflicts due to SCM merge)
+    methodsSortedByName := aCollectionOfMethods asOrderedCollection.
+    methodsSortedByName sort:[:a :b |
+				|clsA clsB|
+
+				clsA := a mclass name.
+				clsB := b mclass name.
+				clsA < clsB ifTrue:[
+				    true
+				] ifFalse:[
+				    clsA > clsB ifTrue:[
+					false
+				    ] ifFalse:[
+					a selector < b selector
+				    ]
+				]
+			      ].
+    methodsSortedByName do:[:aMethod |
+	aMethod mclass fileOutMethod:aMethod on:s.
+	s cr.
+    ].
+
+    defClass := ProjectDefinition definitionClassForPackage:aPackageID.
+    defClass notNil ifTrue:[
+	"/ make sure, an extensionVersion_XXX method is included...
+	"/ (notice: no need to support a secondary backward compatible non-manager related version method here)
+	(methodsSortedByName contains:[:aMethod | aMethod selector == scmManager nameOfVersionMethodForExtensions]) ifFalse:[
+	    s nextPutLine:('!!%1 class methodsFor:''documentation''!!' bindWith:defClass name).
+	    s cr.
+	    s nextChunkPut:
+		(scmManager versionMethodTemplateForSmalltalkFor:(scmManager nameOfVersionMethodForExtensions)).
+	    s space; nextPutChunkSeparator.
+	].
+    ].
+
+    ^ s contents.
+
+    "Created: / 25-07-2012 / 18:38:05 / cg"
+!
+
 sourceCodeManagerFor:aClass
     |mgr assumption|
 
@@ -793,18 +865,18 @@
 
     mgr := aClass theNonMetaclass sourceCodeManager.
     mgr isNil ifTrue:[
-        SourceCodeManager isNil ifTrue:[
-            (self warn:'SourceCodeManagement is disabled or not configured.\\Please setup in the Launcher.' withCRs) ifFalse:[
-                ^ nil
-            ].
-        ].
-        assumption := AbstractSourceCodeManager defaultManager ? CVSSourceCodeManager.
-        assumption notNil ifTrue:[
-            (self confirm:('Class does not seem to provide a valid sourceCodeManager.\\Assume %1 ?' bindWith:assumption managerTypeName) withCRs) ifFalse:[
-                ^ nil
-            ].
-            mgr := assumption.
-        ].
+	SourceCodeManager isNil ifTrue:[
+	    (self warn:'SourceCodeManagement is disabled or not configured.\\Please setup in the Launcher.' withCRs) ifFalse:[
+		^ nil
+	    ].
+	].
+	assumption := AbstractSourceCodeManager defaultManager ? CVSSourceCodeManager.
+	assumption notNil ifTrue:[
+	    (self confirm:('Class does not seem to provide a valid sourceCodeManager.\\Assume %1 ?' bindWith:assumption managerTypeName) withCRs) ifFalse:[
+		^ nil
+	    ].
+	    mgr := assumption.
+	].
     ].
     ^ mgr
 
@@ -831,10 +903,10 @@
     i1 := a indexOf:$. .
     i2 := b indexOf:$. .
     i1 == 0 ifTrue:[
-        i1 := a size + 1.
+	i1 := a size + 1.
     ].
     i2 == 0 ifTrue:[
-        i2 := b size + 1.
+	i2 := b size + 1.
     ].
 
     a1 := Integer readFrom:(a copyTo:i1-1).
@@ -844,10 +916,10 @@
     rest1 := (a copyFrom:i1+1).
     rest2 := (b copyFrom:i2+1).
     rest1 isEmpty ifTrue:[
-        ^ rest2 notEmpty
+	^ rest2 notEmpty
     ].
     rest2 isEmpty ifTrue:[
-        ^ false
+	^ false
     ].
     ^ self versionString:rest1 isLessThan:rest2
 
@@ -877,9 +949,9 @@
      Return a changeSet or nil (if any error occurred)"
 
     ^ self
-        changeSetForExtensionMethodsForPackage:packageToCheckOut 
-        revision:nil orAskForRevision:askForRevision 
-        usingManager:aSourceCodeManager
+	changeSetForExtensionMethodsForPackage:packageToCheckOut
+	revision:nil orAskForRevision:askForRevision
+	usingManager:aSourceCodeManager
 
     "Created: / 29-12-2011 / 14:26:01 / cg"
 !
@@ -901,51 +973,51 @@
     "/ ask for revision
     "/
     (rev := revisionOrNil) isNil ifTrue:[
-        newestRev := aSourceCodeManager newestRevisionInFile:file directory:directory module:module.
-        askForRevision ifFalse:[
-            rev := newestRev ? ''
-        ] ifTrue:[
-            msg := resources string:'CheckOut which revision of extensions for ''%1'': (empty for newest)' with:packageToCheckOut allBold.
-            newestRev notNil ifTrue:[
-                msg := msg , '\' , (resources string:'Newest in reporitory is %1.' with:newestRev)
-            ].
-
-            rev := self
-                    askForExistingRevision:msg 
-                    title:'CheckOut from repository' 
-                    class:nil 
-                    manager:aSourceCodeManager 
-                    module:module package:directory fileName:file.
-
-            rev isNil ifTrue:[
-                ^ nil   "/ canceled
-            ].
-        ].
+	newestRev := aSourceCodeManager newestRevisionInFile:file directory:directory module:module.
+	askForRevision ifFalse:[
+	    rev := newestRev ? ''
+	] ifTrue:[
+	    msg := resources string:'CheckOut which revision of extensions for ''%1'': (empty for newest)' with:packageToCheckOut allBold.
+	    newestRev notNil ifTrue:[
+		msg := msg , '\' , (resources string:'Newest in reporitory is %1.' with:newestRev)
+	    ].
+
+	    rev := self
+		    askForExistingRevision:msg
+		    title:'CheckOut from repository'
+		    class:nil
+		    manager:aSourceCodeManager
+		    module:module package:directory fileName:file.
+
+	    rev isNil ifTrue:[
+		^ nil   "/ canceled
+	    ].
+	].
     ].
     rev withoutSpaces isEmpty ifTrue:[
-        rev := #newest.
-        msg := 'extracting newest %1 (' , (newestRev ? '???') , ')'.
+	rev := #newest.
+	msg := 'extracting newest %1 (' , (newestRev ? '???') , ')'.
     ] ifFalse:[
-        msg := 'extracting previous %1'.
+	msg := 'extracting previous %1'.
     ].
-    aStream := aSourceCodeManager  
-        streamForClass:nil
-        fileName:file 
-        revision:rev 
-        directory:directory 
-        module:module
-        cache:true.
+    aStream := aSourceCodeManager
+	streamForClass:nil
+	fileName:file
+	revision:rev
+	directory:directory
+	module:module
+	cache:true.
 
     aStream isNil ifTrue:[
-        self warn:(resources string:'Could not extract "extensions.st" for %1 from repository' with:packageToCheckOut allBold).
-        ^ nil
+	self warn:(resources string:'Could not extract "extensions.st" for %1 from repository' with:packageToCheckOut allBold).
+	^ nil
     ].
     aStream class readErrorSignal handle:[:ex |
-        self warn:('read error while reading extracted source\\' , ex description) withCRs.
-        aStream close.
-        ^ nil
+	self warn:('read error while reading extracted source\\' , ex description) withCRs.
+	aStream close.
+	^ nil
     ] do:[
-        sourceToLoad := aStream contents asString.
+	sourceToLoad := aStream contents asString.
     ].
     aStream close.
     ^ ChangeSet fromStream:(sourceToLoad readStream).
@@ -965,23 +1037,23 @@
     "/ check for the container
     "/
     (mgr checkForExistingContainer:containerFileName inModule:module directory:directory) ifFalse:[
-        allowCreate ifFalse:[
-            self warn:(resources string:'A container for ''%1'' does not exist in ''%2:%3''' 
-                                   with:containerName with:moduleName with:directoryName) withCRs.
-            ^ false
-        ].
-        (Dialog 
-            confirm:(resources string:'''%1'' is a new container (in ''%2:%3'').\\Create it ?' 
-                                 with:containerName with:moduleName with:directoryName) withCRs
-            noLabel:'Cancel') 
-        ifFalse:[
-            ^ false.
-        ].
-        (mgr createContainerForText:'' inModule:module package:directory container:containerFileName) ifFalse:[
-            self warn:(resources string:'Cannot create new container: ''%1'' (in ''%2:%3'')' 
-                                 with:containerName with:moduleName with:directoryName).
-            ^ false.
-        ]
+	allowCreate ifFalse:[
+	    self warn:(resources string:'A container for ''%1'' does not exist in ''%2:%3'''
+				   with:containerName with:moduleName with:directoryName) withCRs.
+	    ^ false
+	].
+	(Dialog
+	    confirm:(resources string:'''%1'' is a new container (in ''%2:%3'').\\Create it ?'
+				 with:containerName with:moduleName with:directoryName) withCRs
+	    noLabel:'Cancel')
+	ifFalse:[
+	    ^ false.
+	].
+	(mgr createContainerForText:'' inModule:module package:directory container:containerFileName) ifFalse:[
+	    self warn:(resources string:'Cannot create new container: ''%1'' (in ''%2:%3'')'
+				 with:containerName with:moduleName with:directoryName).
+	    ^ false.
+	]
     ].
     ^ true.
 
@@ -1000,27 +1072,27 @@
     "/ check for the directory
     "/
     (mgr checkForExistingModule:module directory:directory) ifFalse:[
-        allowCreate ifFalse:[
-            self warn:(resources string:'A directory for ''%1'' does not exist in module ''%2''' 
-                                   with:directoryNameBold with:moduleNameBold) withCRs.
-            ^ false
-        ].
-        (Dialog 
-            confirm:(resources stringWithCRs:'''%1'' is a new directory in module ''%2''.\\Create it in %3?' 
-                                with:directoryNameBold 
-                                with:moduleNameBold
-                                with:mgr managerTypeName)
-            noLabel:'Cancel') 
-        ifFalse:[
-            ^ false.
-        ].
-        (mgr createModule:module directory:directory) ifFalse:[
-            self warn:(resources stringWithCRs:'Cannot create new directory: ''%1'' in module ''%2'' in %3' 
-                                 with:directoryNameBold 
-                                 with:moduleNameBold
-                                 with:mgr managerTypeName).
-            ^ false.
-        ]
+	allowCreate ifFalse:[
+	    self warn:(resources string:'A directory for ''%1'' does not exist in module ''%2'''
+				   with:directoryNameBold with:moduleNameBold) withCRs.
+	    ^ false
+	].
+	(Dialog
+	    confirm:(resources stringWithCRs:'''%1'' is a new directory in module ''%2''.\\Create it in %3?'
+				with:directoryNameBold
+				with:moduleNameBold
+				with:mgr managerTypeName)
+	    noLabel:'Cancel')
+	ifFalse:[
+	    ^ false.
+	].
+	(mgr createModule:module directory:directory) ifFalse:[
+	    self warn:(resources stringWithCRs:'Cannot create new directory: ''%1'' in module ''%2'' in %3'
+				 with:directoryNameBold
+				 with:moduleNameBold
+				 with:mgr managerTypeName).
+	    ^ false.
+	]
     ].
     ^ true.
 
@@ -1032,30 +1104,30 @@
     |resources moduleName answer|
 
     (mgr checkForExistingModule:module) ifFalse:[
-        resources := self classResources.
-        moduleName := module allBold.
-
-        allowCreate ifFalse:[
-            self warn:(resources stringWithCRs:'A module named ''%1'' does not exist in the repository' 
-                                  with:moduleName) .
-            ^ false
-        ].
-        AbortAllOperationWantedQuery query ifTrue:[
-            answer := Dialog 
-                confirmWithCancel:(resources stringWithCRs:'''%1'' is a new module.\\create it ?' with:moduleName)
-                labels:(resources array:#('Cancel All' 'Cancel' 'Yes' )).
-            answer isNil ifTrue:[ AbortAllOperationRequest raise ].
-        ] ifFalse:[
-            answer := Dialog 
-                confirm:(resources stringWithCRs:'''%1'' is a new module in %2.\\create it ?' with:moduleName with:mgr managerTypeName) 
-                noLabel:'Cancel'
-        ].
-        answer ifFalse:[ ^ false].
-
-        (mgr createModule:module) ifFalse:[
-            self warn:(resources stringWithCRs:'Cannot create new module: ''%1'' in %2' with:moduleName with:mgr managerTypeName) .
-            ^ false.
-        ]
+	resources := self classResources.
+	moduleName := module allBold.
+
+	allowCreate ifFalse:[
+	    self warn:(resources stringWithCRs:'A module named ''%1'' does not exist in the repository'
+				  with:moduleName) .
+	    ^ false
+	].
+	AbortAllOperationWantedQuery query ifTrue:[
+	    answer := Dialog
+		confirmWithCancel:(resources stringWithCRs:'''%1'' is a new module.\\create it ?' with:moduleName)
+		labels:(resources array:#('Cancel All' 'Cancel' 'Yes' )).
+	    answer isNil ifTrue:[ AbortAllOperationRequest raise ].
+	] ifFalse:[
+	    answer := Dialog
+		confirm:(resources stringWithCRs:'''%1'' is a new module in %2.\\create it ?' with:moduleName with:mgr managerTypeName)
+		noLabel:'Cancel'
+	].
+	answer ifFalse:[ ^ false].
+
+	(mgr createModule:module) ifFalse:[
+	    self warn:(resources stringWithCRs:'Cannot create new module: ''%1'' in %2' with:moduleName with:mgr managerTypeName) .
+	    ^ false.
+	]
     ].
     ^ true.
 
@@ -1063,369 +1135,23 @@
     "Created: / 29-12-2011 / 14:35:06 / cg"
 !
 
-checkinBuildSupportFilesForPackage:packageID 
-
-    |anyFailure module directory mgr defClass |
-
-    mgr := self sourceCodeManagerFor: packageID. 
-    defClass := ProjectDefinition definitionClassForPackage: packageID.
-
-    defClass validateDescription.
-
-    anyFailure := false.
-
-    module := packageID asPackageId module.
-    directory := packageID asPackageId directory.
-
-    self activityNotification:(resources string:'checking in build-support files...').
-    (mgr checkForExistingModule:module directory:directory) ifFalse:[
-        mgr createModule:module directory:directory
-    ].
-        defClass forEachFileNameAndGeneratedContentsDo:[:fileName :fileContents |
-            |realFileName realDirectory|
-
-            "/ care for subdirectories
-            (fileName includes:$/) ifTrue:[
-                realDirectory := (directory asFilename construct:(fileName asFilename directoryName)) name.
-                realFileName := fileName asFilename baseName.
-            ] ifFalse:[
-                realDirectory := directory.
-                realFileName := fileName.
-            ].
-            realDirectory := realDirectory replaceAll:$\ with:$/.
-
-            self activityNotification:(resources string:'checking in %1...' with:realFileName).
-
-            UserInformation
-                handle:[:ex | Transcript showCR:ex description ]
-                do:[
-                    (mgr
-                        checkForExistingContainer:realFileName inModule:module directory:realDirectory)
-                    ifFalse:[
-                        realDirectory ~= directory ifTrue:[
-                            (mgr checkForExistingModule:module directory:realDirectory) ifFalse:[
-                                mgr createModule:module directory:realDirectory
-                            ].
-                        ].
-                        (mgr
-                            createContainerForText:fileContents
-                            inModule:module
-                            package:realDirectory
-                            container:realFileName)
-                                ifFalse:[
-                                    Dialog warn:(resources
-                                                stringWithCRs:'Cannot create new container: ''%3'' (in %1:%2)'
-                                                with:module
-                                                with:realDirectory
-                                                with:realFileName)
-                                ].
-                    ] ifTrue:[
-                        (mgr
-                            checkin:realFileName
-                            text:fileContents
-                            directory:realDirectory
-                            module:module
-                            logMessage:'automatically generated by browser'
-                            force:false)
-                                ifFalse:[
-                                    Transcript showCR:'checkin of ' , realFileName , ' failed'.
-                                    anyFailure := true.
-                                ].
-                    ].
-                ].
-        ].
-
-        defClass instAndClassMethodsDo:[:m | m package:defClass package].
-
-        self
-            checkinClasses:(Array with:defClass)
-            withInfo:'automatic checkIn'
-            withCheck:false.
-
-
-    self activityNotification:nil.
-
-    anyFailure ifTrue:[
-        self warn:'Checkin failed - see Transcript.'.
-        self activityNotification:'Checkin of build-support files failed - see Transcript.'.
-    ] ifFalse:[
-        self activityNotification:'Build-support files checked into the repository.'.
-    ].
-
-    "Created: / 09-08-2006 / 18:59:42 / fm"
-    "Modified: / 16-08-2006 / 18:38:49 / User"
-    "Created: / 06-09-2011 / 08:00:57 / cg"
-    "Modified: / 12-10-2011 / 11:36:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Created: / 13-10-2011 / 11:15:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-checkinClass:aClass
-    "check a class into the source repository.
-     Asks interactively for a log-message."
-
-    ^ self checkinClass:aClass withInfo:nil
-!
-
-checkinClass:aClass withInfo:aLogInfoOrNil
-    "check a class into the source repository.
-     If the argument, aLogInfoOrNil isNil, ask interactively for a log-message."
-
-    ^ self checkinClass:aClass withInfo:aLogInfoOrNil withCheck:true
-!
-
-checkinClass:aClass withInfo:aLogInfoOrNil withCheck:doCheckClass
-    "check a class into the source repository.
-     If the argument, aLogInfoOrNil isNil, ask interactively for log-message.
-     If doCheckClass is true, the class is checked for send of halts etc."
-
-    ^ self 
-        checkinClass:aClass 
-        withInfo:aLogInfoOrNil 
-        withCheck:doCheckClass 
-        usingManager:(self sourceCodeManagerFor:aClass)
-
-    "Modified: / 21-12-2011 / 18:19:55 / cg"
-!
-
-checkinClass:aClass withInfo:aLogInfoOrNil withCheck:doCheckClass usingManager:managerOrNil
-    "check a class into the source repository.
-     If the argument, aLogInfoOrNil isNil, ask interactively for log-message.
-     If doCheckClass is true, the class is checked for send of halts etc."
-
-    |logMessage checkinInfo mgr pri resources|
-
-    aClass isLoaded ifFalse:[
-        self information:(resources string:'Cannot checkin unloaded classes (%1)' with:aClass name).
-        ^ false.
-    ].
-
-    mgr := managerOrNil.
-    mgr isNil ifTrue:[
-        mgr := self sourceCodeManagerFor:aClass.
-        mgr isNil ifTrue:[
-            ^ false
-        ]
-    ].
-
-    self ensureCorrectVersionMethodsInClass:aClass usingManager:mgr.
-    mgr supportsCheckinLogMessages ifTrue:[
-        (self 
-            getLogMessageForClassCheckinTakingDefaultsFromPreviousLogInfo:aLogInfoOrNil 
-            forClass:aClass
-            valuesInto:[:logMessageRet :checkinInfoRet |
-                logMessage := logMessageRet.
-                checkinInfo := checkinInfoRet.
-            ]
-        ) ifFalse:[^ false].
-    ].
-
-    resources := self classResources.
-
-    (self classIsNotYetInRepository:aClass withManager:mgr) ifTrue:[
-        (self createSourceContainerForClass:aClass usingManager:mgr) ifFalse:[
-"/            self warn:'did not create a container for ''' , aClass name , ''''.
-            ^ false
-        ].
-        ^ true.
-    ].
-
-    self activityNotification:(resources string:'checking in %1' with:aClass name).
-    pri := Processor activePriority.
-    Processor activeProcess withPriority:pri-1 to:pri
-    do:[
-        |revision aborted freshCreated|
-
-        freshCreated := false.
-        revision := aClass revision.
-        revision isNil ifTrue:[ 
-            "/ mhmh - check if it has a container.
-            (mgr checkForExistingContainerForClass:aClass) ifFalse:[
-                (self createSourceContainerForClass:aClass usingManager:mgr) ifFalse:[
-                    self warn:'Did not create/change repository container for ''' , aClass name allBold , ''''.
-                    ^ false.
-                ].
-                freshCreated := true.
-            ]
-        ].
-
-        doCheckClass value ifTrue:[
-            "/ check if the class contains halts, error-sends etc.
-            (self checkAndWarnAboutBadMessagesInClass:aClass checkAgainHolder:doCheckClass) ifFalse:[
-                ^ false
-            ].
-        ].
-
-        freshCreated ifFalse:[
-            aborted := false.
-            AbortOperationRequest handle:[:ex |
-                aborted := true.
-                ex return.
-            ] do:[
-                |checkinState cause|
-                checkinState := false.
-                cause := ''.
-                [
-                    checkinState := mgr checkinClass:aClass logMessage:logMessage
-                ] on:SourceCodeManagerError do:[:ex| 
-                    cause := ex description.
-                    ex proceed.
-                ].
-
-                checkinState ifFalse:[
-                    Transcript showCR:'checkin of ''' , aClass name , ''' failed - ', cause.
-                    self warn:(resources stringWithCRs:'Checkin of "%1" failed\\' with:aClass name allBold),cause.
-                    ^ false.
-                ].
-                checkinInfo notNil ifTrue:[
-                    checkinInfo isStable ifTrue:[
-                        "set stable tag for class that has been checked in"
-                        self tagClass:aClass as:#stable.
-                    ].
-                    checkinInfo tagIt ifTrue:[
-                        "set an additional tag for class that has been checked in"
-                        self tagClass:aClass as:(checkinInfo tag).
-                    ].
-                ].
-            ].
-            aborted ifTrue:[  |con|
-                Transcript showCR:'Checkin of ''' , aClass name , ''' aborted'.
-
-                AbortAllOperationWantedQuery query ifTrue:[
-                    (Dialog 
-                        confirm:(resources stringWithCRs:'Checkin of "%1" aborted.\\Cancel all ?' with:aClass name)
-                        default:false)
-                    ifTrue:[
-                        AbortAllOperationRequest raise.
-                    ]
-                ].
-                ^ false.
-            ].
-        ].
-    ].
-    ^ true
-
-    "Created: / 21-12-2011 / 18:19:14 / cg"
-!
-
-checkinClasses:aCollectionOfClass
-    "check a collection of classes into the source repository.
-     Asks interactively for log-message."
-
-    ^ self checkinClasses:aCollectionOfClass withInfo:nil
-!
-
-checkinClasses:aCollectionOfClasses withInfo:aLogInfoOrNil
-    "check a bunch of classes into the source repository.
-     If the argument, aLogInfoOrNil isNil, ask interactively for log-message."
-
-    ^ self
-        checkinClasses:aCollectionOfClasses 
-        withInfo:aLogInfoOrNil 
-        withCheck:(UserPreferences current at:#checkClassesWhenCheckingIn ifAbsent:true)
-!
-
-checkinClasses:aCollectionOfClasses withInfo:aLogInfoOrStringNil withCheck:doCheckClasses
-    "check a bunch of classes into the source repository.
-     If the argument, aLogInfoOrStringNil isNil, ask interactively for log-message."
-
-    self checkinClasses:aCollectionOfClasses withInfo:aLogInfoOrStringNil withCheck:doCheckClasses usingManager:nil
-
-    "Modified: / 21-12-2011 / 18:24:47 / cg"
-!
-
-checkinClasses:aCollectionOfClasses withInfo:aLogInfoOrStringNil withCheck:doCheckClasses usingManager:aManagerOrNil
-    "check a bunch of classes into the source repository.
-     If the argument, aLogInfoOrStringNil isNil, ask interactively for log-message."
-
-    |classes allClasses checkinInfoOrString resources yesOrNoToAll unchangedClasses|
-
-    "/ ignore private classes
-    classes := aCollectionOfClasses select:[:aClass | aClass owningClass isNil].
-    classes isEmpty ifTrue:[
-        self information:'Only private classes given - nothing checked in.'.
-        ^ self
-    ].
-    classes := classes select:[:aClass | aClass isLoaded].
-    classes isEmpty ifTrue:[
-        self information:'Only unloaded classes given - nothing checked in.'.
-        ^ self
-    ].
-
-    classes size == 1 ifTrue:[
-        ^ self checkinClass:classes first withInfo:aLogInfoOrStringNil withCheck:doCheckClasses usingManager:aManagerOrNil.
-    ].
-
-    resources := self classResources.
-
-    "ask once, for all classes"
-    aLogInfoOrStringNil isNil ifTrue:[
-        checkinInfoOrString := self 
-                        getCheckinInfoFor:(resources string:'%1 classes to checkin' with:aCollectionOfClasses size)
-                        initialAnswer:nil
-                        withQuickOption:true.
-        checkinInfoOrString isNil ifTrue:[^ self].
-    ] ifFalse:[
-        checkinInfoOrString := aLogInfoOrStringNil.
-    ].
-
-    allClasses := classes.    
-    checkinInfoOrString quickCheckIn ifTrue:[
-        classes := classes select:[:aClass | aClass hasUnsavedChanges].
-        classes isEmpty ifTrue:[ Dialog information:'no changes to checkin (quickCheckIn)' ]
-    ].
-
-    "abortAll is handled, and also asked for here!!"
-    AbortAllOperationRequest handleAndAnswerQueryIn:[
-        classes notEmpty ifTrue:[
-            self yesToAllNotification handle:[:ex |
-                yesOrNoToAll := ex parameter.
-                ex proceed
-            ] do:[
-                self yesToAllQuery handle:[:ex |
-                    ex proceedWith:yesOrNoToAll
-                ] do:[
-                    classes do:[:aClass |
-                        self activityNotification:(resources string:'checking in %1' with:aClass name).
-                        "/ ca does not want boxes to pop up all over ...
-                        UserInformation handle:[:ex |
-                            Transcript showCR:ex description.
-                            ex proceed.
-                        ] do:[
-                            AbortOperationRequest catch:[
-                                self 
-                                    checkinClass:aClass 
-                                    withInfo:checkinInfoOrString 
-                                    withCheck:doCheckClasses
-                                    usingManager:aManagerOrNil
-                            ]
-                        ].
-                    ].
-                ]
-            ].
-        ].
-
-        (checkinInfoOrString isStable or:[checkinInfoOrString tagIt])
-        ifTrue:[
-            "/mhmh - but tag should be set on all (even unchanged ones)
-            "/ the other onces have already been tagged
-            unchangedClasses := allClasses select:[:eachClass | (classes includes:eachClass) not].
-
-            "mhmh - could still have to tag them"
-            checkinInfoOrString isStable ifTrue:[
-                unchangedClasses do:[:eachClass |
-                    self tagClass:eachClass as:#stable.
-                ].
-            ].
-            checkinInfoOrString tagIt ifTrue:[
-                unchangedClasses do:[:eachClass |
-                    self tagClass:eachClass as:(checkinInfoOrString tag).
-                ].
-            ].
-        ].
-    ].
-
-    "Created: / 21-12-2011 / 18:24:25 / cg"
-!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 
 checkinExtensionMethods:aCollectionOfMethods forPackage:aPackageID withInfo:aLogInfoOrStringOrNil
     "checkin a projects extensions into the source repository.
@@ -1437,9 +1163,9 @@
 
     "/ the following is wrong - must ask the projectDefinition !!
     aPackageID asPackageId projectDefinitionClass notNil ifTrue:[
-        mgr := self sourceCodeManagerFor:aPackageID asPackageId projectDefinitionClass.
+	mgr := self sourceCodeManagerFor:aPackageID asPackageId projectDefinitionClass.
     ] ifFalse:[
-        mgr := self sourceCodeManagerFor:aCollectionOfMethods first mclass.
+	mgr := self sourceCodeManagerFor:aCollectionOfMethods first mclass.
     ].
     mgr isNil ifTrue:[ ^ false ].
 
@@ -1448,299 +1174,83 @@
     containerFileName := self nameOfExtensionsContainer.
 
     aLogInfoOrStringOrNil isNil ifTrue:[
-        checkinInfo := self getCheckinInfoFor:containerFileName allBold initialAnswer:nil.
-        checkinInfo isNil ifTrue:[^ false].
-        logMessage := checkinInfo logMessage.
+	checkinInfo := self getCheckinInfoFor:containerFileName allBold initialAnswer:nil.
+	checkinInfo isNil ifTrue:[^ false].
+	logMessage := checkinInfo logMessage.
     ] ifFalse:[
-        aLogInfoOrStringOrNil isString ifTrue:[
-            logMessage := aLogInfoOrStringOrNil
-        ] ifFalse:[
-            checkinInfo := aLogInfoOrStringOrNil.
-            logMessage := checkinInfo logMessage.
-        ].
+	aLogInfoOrStringOrNil isString ifTrue:[
+	    logMessage := aLogInfoOrStringOrNil
+	] ifFalse:[
+	    checkinInfo := aLogInfoOrStringOrNil.
+	    logMessage := checkinInfo logMessage.
+	].
     ].
 
     (mgr checkForExistingContainer:containerFileName inModule:module directory:directory) ifFalse:[
-        (self checkForExistingModule:module usingManager:mgr allowCreate:true) ifFalse:[^ false].
-        LastModule := module.
-
-        (self checkForExistingModule:module directory:directory usingManager:mgr allowCreate:true) ifFalse:[^ false].
-        LastPackage := directory.
-
-        (self checkForExistingModule:module directory:directory container:containerFileName usingManager:mgr allowCreate:true) ifFalse:[^ false].
+	(self checkForExistingModule:module usingManager:mgr allowCreate:true) ifFalse:[^ false].
+	LastModule := module.
+
+	(self checkForExistingModule:module directory:directory usingManager:mgr allowCreate:true) ifFalse:[^ false].
+	LastPackage := directory.
+
+	(self checkForExistingModule:module directory:directory container:containerFileName usingManager:mgr allowCreate:true) ifFalse:[^ false].
     ].
 
     self activityNotification:(resources string:'Checking in %1' with:containerFileName).
     pri := Processor activePriority.
-    Processor activeProcess 
-        withPriority:pri-1 to:pri
-        do:[
-            methodSource := String streamContents: [:s|mgr fileOutSourceCodeExtensions: aCollectionOfMethods package: aPackageID on: s]
+    Processor activeProcess
+	withPriority:pri-1 to:pri
+	do:[
+	    methodSource := String streamContents: [:s|mgr fileOutSourceCodeExtensions: aCollectionOfMethods package: aPackageID on: s]
 .
-            UserInformation handle:[:ex |
-                Transcript showCR:ex description.
-                ex proceed.
-            ] do:[
-                Transcript showCR:('checking in ',containerFileName,' ...').
-                (mgr 
-                    checkin:containerFileName
-                    text:methodSource
-                    directory:directory 
-                    module:module
-                    logMessage:logMessage
-                    force:false) 
-                ifFalse:[
-                    Transcript showCR:'Checkin of ''' , containerFileName , ''' failed'.
-                    self warn:'Checkin of ''' , containerFileName allBold , ''' failed'.
-                    ^ false.
-                ].
-                checkinInfo notNil ifTrue:[
-                    |path|
-
-                    path := (module, '/', directory, '/', containerFileName).
-                    checkinInfo isStable ifTrue:[
-                        "set stable tag for class that has been checked in"
-                        self tagPath:path as:#stable usingManager:mgr.    
-                    ].
-                    checkinInfo tagIt ifTrue:[
-                        "set an additional tag for class that has been checked in"
-                        self tagPath:path as:(checkinInfo tag) usingManager:mgr.    
-                    ].
-                ].
-                mgr postCheckInExtensionsForPackage:aPackageID    
-            ].
-        ].
+	    UserInformation handle:[:ex |
+		Transcript showCR:ex description.
+		ex proceed.
+	    ] do:[
+		Transcript showCR:('checking in ',containerFileName,' ...').
+		(mgr
+		    checkin:containerFileName
+		    text:methodSource
+		    directory:directory
+		    module:module
+		    logMessage:logMessage
+		    force:false)
+		ifFalse:[
+		    Transcript showCR:'Checkin of ''' , containerFileName , ''' failed'.
+		    self warn:'Checkin of ''' , containerFileName allBold , ''' failed'.
+		    ^ false.
+		].
+		checkinInfo notNil ifTrue:[
+		    |path|
+
+		    path := (module, '/', directory, '/', containerFileName).
+		    checkinInfo isStable ifTrue:[
+			"set stable tag for class that has been checked in"
+			self tagPath:path as:#stable usingManager:mgr.
+		    ].
+		    checkinInfo tagIt ifTrue:[
+			"set an additional tag for class that has been checked in"
+			self tagPath:path as:(checkinInfo tag) usingManager:mgr.
+		    ].
+		].
+		mgr postCheckInExtensionsForPackage:aPackageID
+	    ].
+	].
     ^ true
 
     "Modified: / 29-12-2011 / 14:32:11 / cg"
     "Modified: / 02-02-2012 / 15:32:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-checkinPackage:packageToCheckIn classes:doClasses extensions:doExtensions buildSupport:doBuild askForMethodsInOtherPackages:askForMethodsInOtherPackages
-    |mgr classes classesToCheckIn methodsToCheckIn
-     methodsInOtherPackages looseMethods otherPackages
-     msg classesInChangeSet checkinInfo originalCheckinInfo classesToTag|
-
-    mgr := self sourceCodeManagerFor: packageToCheckIn.
-    classes := Smalltalk allClasses.
-
-    classesToCheckIn := IdentitySet new.
-    methodsToCheckIn := IdentitySet new.
-    methodsInOtherPackages := IdentitySet new.
-    looseMethods := IdentitySet new.
-
-    "/ classes ...
-    classes do:[:aClass | |owner classPackage|
-        (owner := aClass owningClass) notNil ifTrue:[
-            classPackage := aClass topOwningClass package
-        ] ifFalse:[
-            classPackage := aClass package
-        ].
-        (classPackage = packageToCheckIn) ifTrue:[
-            classesToCheckIn add:aClass.
-        ].
-    ].
-
-    "/ cg: O(n^2) algorithm
-    "/  classesInChangeSet := classesToCheckIn select:[:cls | cls hasUnsavedChanges].
-    "/ replaced by: O(n) algorithm
-    classesInChangeSet := ChangeSet current selectForWhichIncludesChangeForClassOrMetaclassOrPrivateClassFrom:classesToCheckIn. 
-
-    "/ individual methods ...
-    classes do:[:aClass |
-        aClass isMeta ifFalse:[
-            "/ ... whose class is not in the chechIn-set
-            (classesToCheckIn includes:aClass) ifFalse:[
-                aClass instAndClassSelectorsAndMethodsDo:[:sel :mthd |
-                    "/ methods in this project ...
-                    (mthd package = packageToCheckIn) ifTrue:[
-                        methodsToCheckIn add:mthd
-                    ]
-                ]
-            ].
-        ].
-    ].
-
-    doExtensions ifTrue:[
-        methodsToCheckIn notEmpty ifTrue:[
-            doClasses ifTrue:[
-                msg := '%1 classes (%4 changed) '.
-            ] ifFalse:[
-                msg := ''.
-            ].
-            doExtensions ifTrue:[
-                doClasses ifTrue:[
-                    msg := msg , 'and '.
-                ].
-                msg := msg , '%2 extensions '.
-            ].
-            msg := msg , 'of project "%3"'.
-
-            checkinInfo := self
-                        getCheckinInfoFor:(msg
-                                                    bindWith:classesToCheckIn size
-                                                    with:methodsToCheckIn size
-                                                    with:packageToCheckIn allBold
-                                                    with:classesInChangeSet size)
-                        initialAnswer:nil
-                        withQuickOption:(classesToCheckIn size > 0).
-            checkinInfo isNil ifTrue:[
-                ^ self.
-            ].
-            (self
-                checkinExtensionMethods:methodsToCheckIn
-                forPackage:packageToCheckIn
-                withInfo:checkinInfo)
-            ifFalse:[
-                Dialog warn:(resources string:'Could not check in extensions for project %1' with:packageToCheckIn).
-                ^ self.
-            ]
-        ] ifFalse:[
-            "/ there may have been extension-methods previously - if so, remove them
-            (mgr
-                checkForExistingContainer:'extensions.st' inPackage:packageToCheckIn)
-            ifTrue:[
-"/ self halt.
-                (self
-                    checkinExtensionMethods:#()
-                    forPackage:packageToCheckIn
-                    withInfo:'No extensions any more')
-                ifFalse:[
-                    Dialog warn:(resources string:'Could not check in extensions for project %1' with:packageToCheckIn).
-                    ^ self.
-                ]
-            ]
-        ].
-    ].
-
-    checkinInfo isNil ifTrue:[
-        checkinInfo := self
-                    getCheckinInfoFor:('%1 classes (%4 changed) and %2 extensions for project "%3"'
-                                                        bindWith:classesToCheckIn size
-                                                        with:methodsToCheckIn size
-                                                        with:packageToCheckIn allBold
-                                                        with:classesInChangeSet size)
-                    initialAnswer:nil
-                    withQuickOption:(classesToCheckIn size > 0).
-        checkinInfo isNil ifTrue:[
-            ^ self.
-        ].
-    ].
-
-    checkinInfo quickCheckIn ifTrue:[
-        (checkinInfo isStable or:[checkinInfo tagIt]) ifTrue:[
-            classesToTag := classesToCheckIn.
-            originalCheckinInfo := checkinInfo.
-            checkinInfo := checkinInfo copy.
-            checkinInfo isStable:false.
-            checkinInfo tag:nil.
-        ].
-        classesToCheckIn := classesInChangeSet.
-    ].
-
-    "/ check if any of the classes contains methods for other packages ...
-    classesToCheckIn do:[:eachClass |
-        eachClass instAndClassMethodsDo:[:eachMethod |
-            |mPgk|
-
-            mPgk := eachMethod package.
-            (mPgk = packageToCheckIn) ifFalse:[
-                mPgk == PackageId noProjectID ifTrue:[
-                    looseMethods add:eachMethod
-                ] ifFalse:[
-                    methodsInOtherPackages add:eachMethod
-                ]
-            ]
-        ].
-    ].
-
-    askForMethodsInOtherPackages ifTrue:[
-        methodsInOtherPackages notEmpty ifTrue:[
-            otherPackages := Set new.
-            methodsInOtherPackages do:[:eachMethod | otherPackages add:eachMethod package].
-
-            methodsInOtherPackages size == 1 ifTrue:[
-                msg := 'The ''%4'' method in ''%5'' is contained in the ''%2'' package.'.
-                msg := msg , '\\This method will remain in its package.'.
-            ] ifFalse:[
-                otherPackages size == 1 ifTrue:[
-                    msg := 'The %1 methods from the %2 package will remain in its package.'
-                ] ifFalse:[
-                    msg := 'The %1 methods from %3 other packages will remain in their packages.'
-                ].
-                msg := msg , '\\Hint: if these are meant to belong to this package,'.
-                msg := msg , '\move them first, then repeat the checkin operation.'.
-            ].
-            msg := msg withCRs.
-            msg := msg bindWith:methodsInOtherPackages size
-                           with:otherPackages first allBold
-                           with:otherPackages size
-                           with:methodsInOtherPackages first selector allBold
-                           with:methodsInOtherPackages first mclass name allBold.
-            (Dialog confirm:msg noLabel:(resources string:'Cancel')) ifFalse:[^ self].
-        ].
-    ].
-
-    doClasses ifTrue:[
-        classesToCheckIn notEmpty ifTrue:[
-            looseMethods notEmpty ifTrue:[
-                looseMethods size == 1 ifTrue:[
-                    msg := 'The ''%2'' method in ''%3'' is unassigned (loose).'.
-                    msg := msg , '\\If you proceed, this method will be moved to the ''%4'' package'.
-                    msg := msg , '\\Hint: if this is meant to be an extension of another package,'.
-                    msg := msg , '\cancel and move it to the appropriate package first.'.
-                ] ifFalse:[
-                    msg := 'There are %1 unassigned (loose) methods in classes from this project.'.
-                    msg := msg , '\\If you proceed, those will be moved to the ''%4'' package ?'.
-                    msg := msg , '\\Hint: if these are meant to be extensions of another package,'.
-                    msg := msg , '\cancel and move them to the appropriate package first.'.
-                ].
-                doClasses ifTrue:[
-                    msg := msg , '\\If you answer with "No" here, you will be asked for each class individually.'.
-                ].
-                msg := msg withCRs.
-                msg := msg bindWith:looseMethods size
-                               with:(looseMethods isEmpty ifTrue:[''] ifFalse:[looseMethods first selector allBold])
-                               with:(looseMethods isEmpty ifTrue:[''] ifFalse:[looseMethods first mclass name allBold])
-                               with:packageToCheckIn allBold.
-                (Dialog confirm:msg noLabel:(resources string:'Cancel')) ifFalse:[^ self].
-
-                looseMethods do:[:mthd |
-                    mthd package:packageToCheckIn
-                ].
-            ].
-            self checkinClasses:classesToCheckIn withInfo:checkinInfo.
-        ].
-
-        originalCheckinInfo notNil ifTrue:[
-            originalCheckinInfo isStable ifTrue:[
-                classesToTag do:[:eachClass |
-                    self tagClass:eachClass as:#stable
-                ].
-            ].
-            originalCheckinInfo tagIt ifTrue:[
-                classesToTag do:[:eachClass |
-                    self tagClass:eachClass as:(originalCheckinInfo tag)
-                ].
-            ].
-        ].
-    ].
-
-    doBuild ifTrue:[
-        self checkinBuildSupportFilesForPackage:packageToCheckIn
-    ].
-
-    "Modified: / 08-09-2011 / 04:42:38 / cg"
-    "Created: / 13-10-2011 / 11:15:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
+
 
 checkoutClass:aClass askForMerge:askForMerge
     "check-out a class from the source repository."
 
     self
-        checkoutClass:aClass 
-        askForRevision:true
-        askForMerge:askForMerge
+	checkoutClass:aClass
+	askForRevision:true
+	askForMerge:askForMerge
 !
 
 checkoutClass:aClass askForRevision:askForRevision askForMerge:askForMerge
@@ -1748,8 +1258,8 @@
      If askForRevision is false, check-out the newest version."
 
     self
-        checkoutClass:aClass askForRevision:askForRevision askForMerge:askForMerge 
-        askForConfirmation:true
+	checkoutClass:aClass askForRevision:askForRevision askForMerge:askForMerge
+	askForConfirmation:true
 !
 
 checkoutClass:aClass askForRevision:askForRevision askForMerge:askForMerge askForConfirmation:askForConfirmation
@@ -1761,7 +1271,7 @@
      aStream sourceToLoad currentSource rev revString
      nm msg rev2 newestRev
      containerModule containerPackage containerFile rslt
-     pkg listHere listRep diffSet 
+     pkg listHere listRep diffSet
      changed onlyHere onlyInRep answer labels values singleChangeSelector
      changedClasses default versionMethodsHere versionMethodsRep changedClassDefinitions
      wasInChangeSetBefore|
@@ -1775,75 +1285,75 @@
     nm := currentClass name.
     mgr := self sourceCodeManagerFor:currentClass.
     mgr isNil ifTrue:[
-        ^ self
+	^ self
     ].
 
     sourceInfo := mgr sourceInfoOfClass:currentClass.
     sourceInfo notNil ifTrue:[
-        currentClass package ~= PackageId noProjectID ifTrue:[
-            containerPackage := mgr directoryFromSourceInfo:sourceInfo.
-            containerModule := mgr moduleFromSourceInfo:sourceInfo.
-        ].
-        containerFile := mgr containerFromSourceInfo:sourceInfo.
+	currentClass package ~= PackageId noProjectID ifTrue:[
+	    containerPackage := mgr directoryFromSourceInfo:sourceInfo.
+	    containerModule := mgr moduleFromSourceInfo:sourceInfo.
+	].
+	containerFile := mgr containerFromSourceInfo:sourceInfo.
     ].
 
     currentClass isLoaded ifTrue:[
-        rev := currentClass binaryRevision.
-        rev2 := currentClass revision.
-        rev isNil ifTrue:[
-            rev := rev2
-        ].
-        rev isNil ifTrue:[
-            pkg := currentClass package.
-            (pkg notNil and:[pkg ~= PackageId noProjectID]) ifTrue:[
-                containerModule := pkg upTo:$:.
-                containerPackage := pkg copyFrom:(containerModule size + 2).
-            ].
-            containerModule size == 0 ifTrue:[
-                containerModule := (self class lastModule ) ? Project current repositoryModule.
-            ].
-            containerPackage size == 0 ifTrue:[
-                containerPackage := (self class lastPackage ) ? Project current package.
-            ].
-            answer := self confirmWithCancel:(resources 
-                                                string:'The class %3 seems to have no (valid) repository information.\\I assume you want to check it out from: %1/%2.' 
-                                                with:containerModule allBold 
-                                                with:containerPackage allBold
-                                                with:currentClass name allBold) withCRs.
-            answer isNil ifTrue:[^ self "cancelled"].
-            answer ifFalse:[
-                rslt := self
-                    askForContainer:(resources string:'The class seems to have no repository information.\\Do you want to checkOut from an existing containers contents ?')
-                    title:'Container to load from' note:nil 
-                    initialModule:containerModule 
-                    initialPackage:containerPackage 
-                    initialFileName:(currentClass nameWithoutPrefix , '.st')
-                    forNewContainer:false.
-
-                rslt isNil ifTrue:[
-                    "/ canel
-                    ^ self
-                ].
-                containerModule := "lastModule :=" rslt at:#module.
-                containerPackage := "lastPackage :=" rslt at:#package.
-                containerFile := rslt at:#fileName.
-            ].
+	rev := currentClass binaryRevision.
+	rev2 := currentClass revision.
+	rev isNil ifTrue:[
+	    rev := rev2
+	].
+	rev isNil ifTrue:[
+	    pkg := currentClass package.
+	    (pkg notNil and:[pkg ~= PackageId noProjectID]) ifTrue:[
+		containerModule := pkg upTo:$:.
+		containerPackage := pkg copyFrom:(containerModule size + 2).
+	    ].
+	    containerModule size == 0 ifTrue:[
+		containerModule := (self class lastModule ) ? Project current repositoryModule.
+	    ].
+	    containerPackage size == 0 ifTrue:[
+		containerPackage := (self class lastPackage ) ? Project current package.
+	    ].
+	    answer := self confirmWithCancel:(resources
+						string:'The class %3 seems to have no (valid) repository information.\\I assume you want to check it out from: %1/%2.'
+						with:containerModule allBold
+						with:containerPackage allBold
+						with:currentClass name allBold) withCRs.
+	    answer isNil ifTrue:[^ self "cancelled"].
+	    answer ifFalse:[
+		rslt := self
+		    askForContainer:(resources string:'The class seems to have no repository information.\\Do you want to checkOut from an existing containers contents ?')
+		    title:'Container to load from' note:nil
+		    initialModule:containerModule
+		    initialPackage:containerPackage
+		    initialFileName:(currentClass nameWithoutPrefix , '.st')
+		    forNewContainer:false.
+
+		rslt isNil ifTrue:[
+		    "/ canel
+		    ^ self
+		].
+		containerModule := "lastModule :=" rslt at:#module.
+		containerPackage := "lastPackage :=" rslt at:#package.
+		containerFile := rslt at:#fileName.
+	    ].
 
 "/            rslt := self
 "/                askForContainer:(resources string:'The class seems to have no (valid) repository information.\\Do you want to check it out from an existing container ?')
-"/                title:'Container to checkOut' note:nil 
-"/                initialModule:containerModule 
+"/                title:'Container to checkOut' note:nil
+"/                initialModule:containerModule
 "/                initialPackage:containerPackage
 "/                initialFileName:(currentClass name , '.st').
 "/                forNewContainer:false.
 "/            rslt isNil ifTrue:[^ self].
-            "/ self warn:(resources string:'Class %1 seems to be not yet in the repository' with:currentClass name allBold).
-            "/ ^ self
-        ].
+	    "/ self warn:(resources string:'Class %1 seems to be not yet in the repository' with:currentClass name allBold).
+	    "/ ^ self
+	].
     ].
 
     containerFile isNil ifTrue:[
-        containerFile := currentClass classFilename.
+	containerFile := currentClass classFilename.
     ].
 
     "/
@@ -1851,396 +1361,396 @@
     "/
 "/    newestRev := mgr newestRevisionOf:currentClass.
     containerModule isNil ifTrue:[
-        containerModule := Dialog request:(resources 
-                                        stringWithCRs:'Missing Module Information for CheckOut of "%1".\\Module:'
-                                        with:aClass name allBold).
-        containerModule isEmptyOrNil ifTrue:[^ self].
+	containerModule := Dialog request:(resources
+					stringWithCRs:'Missing Module Information for CheckOut of "%1".\\Module:'
+					with:aClass name allBold).
+	containerModule isEmptyOrNil ifTrue:[^ self].
     ].
     containerPackage isNil ifTrue:[
-        containerPackage := Dialog request:(resources 
-                                        stringWithCRs:'Missing Package Information for CheckOut of "%1".\\Package:'
-                                        with:aClass name allBold).
-        containerPackage isEmptyOrNil ifTrue:[^ self].
+	containerPackage := Dialog request:(resources
+					stringWithCRs:'Missing Package Information for CheckOut of "%1".\\Package:'
+					with:aClass name allBold).
+	containerPackage isEmptyOrNil ifTrue:[^ self].
     ].
 
     newestRev := mgr newestRevisionInFile:containerFile directory:containerPackage module:containerModule.
     askForRevision ifFalse:[
-        rev := newestRev ? ''
+	rev := newestRev ? ''
     ] ifTrue:[
-        msg := resources string:'CheckOut which revision of ''%1'': (empty for newest)' with:nm allBold.
-        rev notNil ifTrue:[
-            msg := msg , '\\' , (resources string:'Current ''%1'' is based upon rev %2.'
-                                           with:nm allBold with:rev).
-            (rev2 notNil and:[rev2 ~= rev]) ifTrue:[
-                msg := msg , '\' , (resources string:'And has been checked into the repository as %1.' with:rev2)
-            ]
-        ].
-        newestRev notNil ifTrue:[
-            msg := msg , '\' , (resources string:'Newest in repository is %1.' with:newestRev)
-        ].
-
-        rev := self
-                    askForExistingRevision:msg 
-                    title:'CheckOut from repository' 
-                    class:currentClass.
-        rev isNil ifTrue:[
-            ^ self   "/ canceled
-        ].
+	msg := resources string:'CheckOut which revision of ''%1'': (empty for newest)' with:nm allBold.
+	rev notNil ifTrue:[
+	    msg := msg , '\\' , (resources string:'Current ''%1'' is based upon rev %2.'
+					   with:nm allBold with:rev).
+	    (rev2 notNil and:[rev2 ~= rev]) ifTrue:[
+		msg := msg , '\' , (resources string:'And has been checked into the repository as %1.' with:rev2)
+	    ]
+	].
+	newestRev notNil ifTrue:[
+	    msg := msg , '\' , (resources string:'Newest in repository is %1.' with:newestRev)
+	].
+
+	rev := self
+		    askForExistingRevision:msg
+		    title:'CheckOut from repository'
+		    class:currentClass.
+	rev isNil ifTrue:[
+	    ^ self   "/ canceled
+	].
     ].
 
     rev withoutSpaces isEmpty ifTrue:[
-        msg := 'extracting newest %1 (' , (newestRev ? '???') , ')'.
-        "/ aStream := mgr getMostRecentSourceStreamForClassNamed:nm.
-        aStream := mgr getSourceStreamFor:currentClass revision:newestRev.
-        revString := '(newest: ' , (newestRev ? '???') , ')'.
+	msg := 'extracting newest %1 (' , (newestRev ? '???') , ')'.
+	"/ aStream := mgr getMostRecentSourceStreamForClassNamed:nm.
+	aStream := mgr getSourceStreamFor:currentClass revision:newestRev.
+	revString := '(newest: ' , (newestRev ? '???') , ')'.
     ] ifFalse:[
-        msg := 'extracting previous %1'.
+	msg := 'extracting previous %1'.
 "/        aStream := mgr getSourceStreamFor:currentClass revision:rev.
 "/        revString := rev
-        aStream := mgr  
-            streamForClass:currentClass
-            fileName:containerFile 
-            revision:rev 
-            directory:containerPackage 
-            module:containerModule
-            cache:true.
+	aStream := mgr
+	    streamForClass:currentClass
+	    fileName:containerFile
+	    revision:rev
+	    directory:containerPackage
+	    module:containerModule
+	    cache:true.
     ].
 
     aStream isNil ifTrue:[
-        self warn:(resources string:'Could not extract source of %1 from repository' with:aClass name allBold).
-        ^ self
+	self warn:(resources string:'Could not extract source of %1 from repository' with:aClass name allBold).
+	^ self
     ].
     aStream class readErrorSignal handle:[:ex |
-        self warn:('Read error while reading extracted source\\' , ex description) withCRs.
-        aStream close.
-        ^ self
+	self warn:('Read error while reading extracted source\\' , ex description) withCRs.
+	aStream close.
+	^ self
     ] do:[
-        sourceToLoad := aStream contents asString.
+	sourceToLoad := aStream contents asString.
     ].
     aStream close.
 
     wasInChangeSetBefore := ChangeSet current includesChangeForClassOrMetaclass:currentClass.
 
     currentClass isLoaded ifFalse:[
-        rev = newestRev ifTrue:[
-            currentClass autoload.
-        ] ifFalse:[
-            sourceToLoad readStream fileIn.
-        ].
-        wasInChangeSetBefore ifFalse:[
-            ChangeSet current condenseChangesForClass:currentClass.
-        ].
-        ^ self.
+	rev = newestRev ifTrue:[
+	    currentClass autoload.
+	] ifFalse:[
+	    sourceToLoad readStream fileIn.
+	].
+	wasInChangeSetBefore ifFalse:[
+	    ChangeSet current condenseChangesForClass:currentClass.
+	].
+	^ self.
     ].
 
     inChangeSet := aClass hasUnsavedChanges.
 
     Error handle:[:ex |
-        (Dialog 
-            confirm:(resources 
-                        stringWithCRs:'An error:\    %1\was encountered while generating the current source of the class %2.\This might be due to some missing or corrupted source file.\You may proceed, but no information about the differences between your current version and the repositories version can be shown.\\Continue ?'
-                        with:ex description 
-                        with:currentClass name allBold) 
-            noLabel:'Cancel') 
-        ifFalse:[
-            AbortOperationRequest raise
-        ].
-        sourceToLoad readStream fileIn.
-        ^ self.
+	(Dialog
+	    confirm:(resources
+			stringWithCRs:'An error:\    %1\was encountered while generating the current source of the class %2.\This might be due to some missing or corrupted source file.\You may proceed, but no information about the differences between your current version and the repositories version can be shown.\\Continue ?'
+			with:ex description
+			with:currentClass name allBold)
+	    noLabel:'Cancel')
+	ifFalse:[
+	    AbortOperationRequest raise
+	].
+	sourceToLoad readStream fileIn.
+	^ self.
     ] do:[
-        self activityNotification:'generating current source...'.
-
-        currentSource := self sourceCodeOfClass:currentClass.
-
-        self activityNotification:'comparing...'.
-
-        sourceToLoad = currentSource ifTrue:[
-            "/ make all methods belong to the classes project
-            self setPackageOfAllMethodsIn:aClass to:aClass package.
-            inChangeSet ifTrue:[
-                rev = newestRev ifTrue:[
-                    (askForConfirmation not
-                    or:[ wasInChangeSetBefore not
-                    or:[ self confirm:(resources 
-                                    stringWithCRs:'%1 is up-to-date.\\Remove entries for %1 from changeSet ?'
-                                    with:aClass name)]]) 
-                    ifTrue:[
-                        ChangeSet current condenseChangesForClass:aClass.
-                    ].
-                ].
-            ].
-            self activityNotification:'... nothing changed in repository'.
-            ^ self.
-        ].
-
-        self activityNotification:'generating diffSet...'.
-        listHere := ChangeSet fromStream:(currentSource readStream).
+	self activityNotification:'generating current source...'.
+
+	currentSource := self sourceCodeOfClass:currentClass.
+
+	self activityNotification:'comparing...'.
+
+	sourceToLoad = currentSource ifTrue:[
+	    "/ make all methods belong to the classes project
+	    self setPackageOfAllMethodsIn:aClass to:aClass package.
+	    inChangeSet ifTrue:[
+		rev = newestRev ifTrue:[
+		    (askForConfirmation not
+		    or:[ wasInChangeSetBefore not
+		    or:[ self confirm:(resources
+				    stringWithCRs:'%1 is up-to-date.\\Remove entries for %1 from changeSet ?'
+				    with:aClass name)]])
+		    ifTrue:[
+			ChangeSet current condenseChangesForClass:aClass.
+		    ].
+		].
+	    ].
+	    self activityNotification:'... nothing changed in repository'.
+	    ^ self.
+	].
+
+	self activityNotification:'generating diffSet...'.
+	listHere := ChangeSet fromStream:(currentSource readStream).
     ].
 
     listRep := ChangeSet fromStream:(sourceToLoad readStream).
 
     Error handle:[:ex |
-        (Dialog 
-            confirm:(resources 
-                        stringWithCRs:'An error:\    %1\was encountered while trying to figure out what has changed.\This might be due to some missing or corrupted source file.\If you proceed, the old code will be loaded over the existing code without further checks (fileIn).\\Continue ?'
-                        with:ex description
-                    ) 
-            noLabel:'Cancel') 
-        ifFalse:[
-            ^ self
-        ].
-        sourceToLoad readStream fileIn.
-        ^ self.
+	(Dialog
+	    confirm:(resources
+			stringWithCRs:'An error:\    %1\was encountered while trying to figure out what has changed.\This might be due to some missing or corrupted source file.\If you proceed, the old code will be loaded over the existing code without further checks (fileIn).\\Continue ?'
+			with:ex description
+		    )
+	    noLabel:'Cancel')
+	ifFalse:[
+	    ^ self
+	].
+	sourceToLoad readStream fileIn.
+	^ self.
     ] do:[
-        versionMethodsHere := listHere select:[:change | (change isMethodChange 
-                                               and:[(AbstractSourceCodeManager isVersionMethodSelector:change selector)
-                                               and:[change changeClass isMeta]])].
-
-        versionMethodsRep := listRep select:[:change | (change isMethodChange 
-                                               and:[(AbstractSourceCodeManager isVersionMethodSelector:change selector)
-                                               and:[change changeClass isMeta]])].
-
-        "/ compare all but the version methods
-        listHere := listHere select:[:change | (change isMethodChange 
-                                               and:[(AbstractSourceCodeManager isVersionMethodSelector:change selector)
-                                               and:[change changeClass isMeta]]) not].
-        listRep := listRep select:[:change | (change isMethodChange 
-                                               and:[(AbstractSourceCodeManager isVersionMethodSelector:change selector)
-                                               and:[change changeClass isMeta]]) not].
-
-        diffSet := listHere diffSetsAgainst:listRep.
-        changed := diffSet changed.
-        onlyHere := diffSet onlyInReceiver.
-
-        "/ reject extensions
-        onlyHere := onlyHere reject:[:eachDiff|  
-                        |method methodsPackage|
-
-                        eachDiff isClassDefinitionChange  
-                        and:[ eachDiff changeClass notNil
-                        and:[ (method := (eachDiff changeClass compiledMethodAt:eachDiff selector)) notNil 
-                        and:[ (methodsPackage := method package) ~= containerPackage
-                        and:[ methodsPackage ~= PackageId noProjectID  ]]]]
-                    ]. 
-
-        onlyInRep := diffSet onlyInArg.
-
-        changedClassDefinitions := changed select:[:eachChangePair | eachChangePair first isClassDefinitionChange]. 
-        changed := changed reject:[:eachChangePair | eachChangePair first isClassDefinitionChange]. 
-        changed := changed reject:[:eachChangePair | eachChangePair first isClassCommentChange]. 
-
-        labels := #('Cancel' 'Merge' 'Load'). 
-        values := #(nil #merge #load). 
-        default := askForRevision 
-                        ifTrue:[3. "i.e. load"]
-                        ifFalse:[2. "i.e. merge"].
-
-        msg := 'About to load ''%4''.\\'.
-        onlyInRep size > 0 ifTrue:[
-            msg := msg , 'The repositories version contains %1 method(s) which are not in your current class.\'.
-        ].
-        onlyHere size > 0 ifTrue:[
-            msg := msg , (onlyInRep size > 0 ifTrue:['And there '] ifFalse:['There ']).
-            msg := msg , 'are %2 methods in your current class, which are not in the repository.\'.
-        ].
-        changed size > 0 ifTrue:[
-            changed size == 1 ifTrue:[
-                msg := msg , 'The ''%6''-method is different (present in both).\\'.
-                singleChangeSelector := changed first first selector allBold
-            ] ifFalse:[
-                msg := msg , '%3 methods are different (present in both).\\'.
-            ]
-        ].
-        changedClassDefinitions size > 0 ifTrue:[
-            msg := msg , (changedClassDefinitions size == 1 
-                            ifTrue:['The class definition is different.\\'] 
-                            ifFalse:['%5 class definitions are different.\\'])
-        ].
-
-        onlyHere isEmpty ifTrue:[
-            onlyInRep isEmpty ifTrue:[
-                (changed isEmpty and:[changedClassDefinitions isEmpty]) ifTrue:[
+	versionMethodsHere := listHere select:[:change | (change isMethodChange
+					       and:[(AbstractSourceCodeManager isVersionMethodSelector:change selector)
+					       and:[change changeClass isMeta]])].
+
+	versionMethodsRep := listRep select:[:change | (change isMethodChange
+					       and:[(AbstractSourceCodeManager isVersionMethodSelector:change selector)
+					       and:[change changeClass isMeta]])].
+
+	"/ compare all but the version methods
+	listHere := listHere select:[:change | (change isMethodChange
+					       and:[(AbstractSourceCodeManager isVersionMethodSelector:change selector)
+					       and:[change changeClass isMeta]]) not].
+	listRep := listRep select:[:change | (change isMethodChange
+					       and:[(AbstractSourceCodeManager isVersionMethodSelector:change selector)
+					       and:[change changeClass isMeta]]) not].
+
+	diffSet := listHere diffSetsAgainst:listRep.
+	changed := diffSet changed.
+	onlyHere := diffSet onlyInReceiver.
+
+	"/ reject extensions
+	onlyHere := onlyHere reject:[:eachDiff|
+			|method methodsPackage|
+
+			eachDiff isClassDefinitionChange
+			and:[ eachDiff changeClass notNil
+			and:[ (method := (eachDiff changeClass compiledMethodAt:eachDiff selector)) notNil
+			and:[ (methodsPackage := method package) ~= containerPackage
+			and:[ methodsPackage ~= PackageId noProjectID  ]]]]
+		    ].
+
+	onlyInRep := diffSet onlyInArg.
+
+	changedClassDefinitions := changed select:[:eachChangePair | eachChangePair first isClassDefinitionChange].
+	changed := changed reject:[:eachChangePair | eachChangePair first isClassDefinitionChange].
+	changed := changed reject:[:eachChangePair | eachChangePair first isClassCommentChange].
+
+	labels := #('Cancel' 'Merge' 'Load').
+	values := #(nil #merge #load).
+	default := askForRevision
+			ifTrue:[3. "i.e. load"]
+			ifFalse:[2. "i.e. merge"].
+
+	msg := 'About to load ''%4''.\\'.
+	onlyInRep size > 0 ifTrue:[
+	    msg := msg , 'The repositories version contains %1 method(s) which are not in your current class.\'.
+	].
+	onlyHere size > 0 ifTrue:[
+	    msg := msg , (onlyInRep size > 0 ifTrue:['And there '] ifFalse:['There ']).
+	    msg := msg , 'are %2 methods in your current class, which are not in the repository.\'.
+	].
+	changed size > 0 ifTrue:[
+	    changed size == 1 ifTrue:[
+		msg := msg , 'The ''%6''-method is different (present in both).\\'.
+		singleChangeSelector := changed first first selector allBold
+	    ] ifFalse:[
+		msg := msg , '%3 methods are different (present in both).\\'.
+	    ]
+	].
+	changedClassDefinitions size > 0 ifTrue:[
+	    msg := msg , (changedClassDefinitions size == 1
+			    ifTrue:['The class definition is different.\\']
+			    ifFalse:['%5 class definitions are different.\\'])
+	].
+
+	onlyHere isEmpty ifTrue:[
+	    onlyInRep isEmpty ifTrue:[
+		(changed isEmpty and:[changedClassDefinitions isEmpty]) ifTrue:[
 "/ self halt.
-                    versionMethodsRep notEmpty ifTrue:[
-                        (self confirm:(resources string:'Only version methods are different in %1.\\Update the version-IDs ?' with:aClass name allBold) withCRs) ifTrue:[
-                            versionMethodsRep do:[:each | each apply].
-                        ]
-                    ].
-                    "/ make all those methods belong to the classes project
-                    "/ no - that is wrong !! self setPackageOfAllMethodsIn:aClass to:aClass package.
-                    self setPackageOfAllMethodsInChangeSet:listRep to:aClass package.
-                    self activityNotification:'Only version methods are different in the repository'.
-                    ^ self
-                ].
-                inChangeSet ifTrue:[
-                    msg := msg , '\Attention:\Load will undo your changes made to ''%4'' (if any were made).'.
-                ].
-                labels := #('Cancel' 'Load'). 
-                values := #(nil #load). 
-                default := askForRevision 
-                                ifTrue:[2. "i.e. load"]
-                                ifFalse:[1. "i.e. cancel"].
-                default := 2. 
-            ] ifFalse:[
-                changed isEmpty ifTrue:[
-                    msg := msg , '\Attention:\Load will load methods which are not present in ''%4''.'.
-                    labels := #('Cancel' 'Load'). 
-                    values := #(nil #load). 
-                    default := askForRevision 
-                                    ifTrue:[2. "i.e. load"]
-                                    ifFalse:[1. "i.e. cancel"].
-                    default := 2. 
-                ] ifFalse:[
-                    inChangeSet ifTrue:[
-                        msg := msg , '\Attention:\Load will undo your changes made to ''%4'' (if any were made);'.
-                    ].
-                    msg := msg , '\Merge will only load methods which are not present in ''%4'' (i.e. undo removals but preserve changes).'.
-                ].
-            ]
-        ] ifFalse:[
-            onlyInRep isEmpty ifTrue:[
-                inChangeSet ifTrue:[
-                    msg := msg , '\Attention:\Load will undo your changes made to ''%4'' (if any were made),'.
-                    msg := msg , '\and remove added methods which are not present in the repository version.'.
-                ].
-                labels := #('Cancel' 'Load'). 
-                values := #(nil #load). 
-                default := askForRevision 
-                                ifTrue:[2. "i.e. load"]
-                                ifFalse:[1. "i.e. cancel"].
-                default := 2. 
-            ] ifFalse:[
-                inChangeSet ifTrue:[
-                    msg := msg , '\Attention:\Load will undo your changes made to ''%4'' (if any were made);'.
-                    msg := msg , '\Merge will only load methods which are not present in ''%4'' (i.e. undo removals but preserve changes).'.
-                ]
-            ]
-        ].
-
-        msg := msg bindWith:onlyInRep size printString 
-                   with:onlyHere size printString 
-                   with:changed size printString
-                   with:aClass name allBold
-                   with:changedClassDefinitions size printString
-                   with:singleChangeSelector.
-
-        askForConfirmation ifFalse:[
-            answer := #load           
-        ] ifTrue:[
-            answer := (Dialog confirmWithCancel:msg withCRs
-                   labels:(resources array:labels)
-                   values:values 
-                   default:default).
-            answer isNil ifTrue:[
-                self activityNotification:'...cancelled'.
-                ^ self
-            ].
-        ].
-        self activityNotification:'updating...'.
-        changedClasses := IdentitySet new.
+		    versionMethodsRep notEmpty ifTrue:[
+			(self confirm:(resources string:'Only version methods are different in %1.\\Update the version-IDs ?' with:aClass name allBold) withCRs) ifTrue:[
+			    versionMethodsRep do:[:each | each apply].
+			]
+		    ].
+		    "/ make all those methods belong to the classes project
+		    "/ no - that is wrong !! self setPackageOfAllMethodsIn:aClass to:aClass package.
+		    self setPackageOfAllMethodsInChangeSet:listRep to:aClass package.
+		    self activityNotification:'Only version methods are different in the repository'.
+		    ^ self
+		].
+		inChangeSet ifTrue:[
+		    msg := msg , '\Attention:\Load will undo your changes made to ''%4'' (if any were made).'.
+		].
+		labels := #('Cancel' 'Load').
+		values := #(nil #load).
+		default := askForRevision
+				ifTrue:[2. "i.e. load"]
+				ifFalse:[1. "i.e. cancel"].
+		default := 2.
+	    ] ifFalse:[
+		changed isEmpty ifTrue:[
+		    msg := msg , '\Attention:\Load will load methods which are not present in ''%4''.'.
+		    labels := #('Cancel' 'Load').
+		    values := #(nil #load).
+		    default := askForRevision
+				    ifTrue:[2. "i.e. load"]
+				    ifFalse:[1. "i.e. cancel"].
+		    default := 2.
+		] ifFalse:[
+		    inChangeSet ifTrue:[
+			msg := msg , '\Attention:\Load will undo your changes made to ''%4'' (if any were made);'.
+		    ].
+		    msg := msg , '\Merge will only load methods which are not present in ''%4'' (i.e. undo removals but preserve changes).'.
+		].
+	    ]
+	] ifFalse:[
+	    onlyInRep isEmpty ifTrue:[
+		inChangeSet ifTrue:[
+		    msg := msg , '\Attention:\Load will undo your changes made to ''%4'' (if any were made),'.
+		    msg := msg , '\and remove added methods which are not present in the repository version.'.
+		].
+		labels := #('Cancel' 'Load').
+		values := #(nil #load).
+		default := askForRevision
+				ifTrue:[2. "i.e. load"]
+				ifFalse:[1. "i.e. cancel"].
+		default := 2.
+	    ] ifFalse:[
+		inChangeSet ifTrue:[
+		    msg := msg , '\Attention:\Load will undo your changes made to ''%4'' (if any were made);'.
+		    msg := msg , '\Merge will only load methods which are not present in ''%4'' (i.e. undo removals but preserve changes).'.
+		]
+	    ]
+	].
+
+	msg := msg bindWith:onlyInRep size printString
+		   with:onlyHere size printString
+		   with:changed size printString
+		   with:aClass name allBold
+		   with:changedClassDefinitions size printString
+		   with:singleChangeSelector.
+
+	askForConfirmation ifFalse:[
+	    answer := #load
+	] ifTrue:[
+	    answer := (Dialog confirmWithCancel:msg withCRs
+		   labels:(resources array:labels)
+		   values:values
+		   default:default).
+	    answer isNil ifTrue:[
+		self activityNotification:'...cancelled'.
+		^ self
+	    ].
+	].
+	self activityNotification:'updating...'.
+	changedClasses := IdentitySet new.
 
     "/    Class withoutUpdatingChangesDo:[
-        answer == #load ifTrue:[
-            "when loading, remove all the methods which are no longer in classes with a changed
-             class definition. So we avoid possible compile errors of old methods, which will go away"
-            onlyHere do:[:eachChange |   
-                 "remove this change (method not present in repository version)"
-                 |cClass cSel|
-                 eachChange isMethodChange ifTrue:[
-                     cClass := eachChange changeClass.
-                     cSel := eachChange selector.
-                     cClass notNil ifTrue:[ cClass basicRemoveSelector:cSel ].
-                 ]
-            ].
-
-            changedClassDefinitions do:[:eachChangeArr | 
-                |cHere eachChangedClass| 
-                cHere := eachChangeArr at:1.
-                eachChangedClass := cHere changeClass.
-                eachChangedClass notNil ifTrue:[
-                    changedClasses add:eachChangedClass.
-                    eachChangedClass := eachChangedClass theNonMetaclass.
-
-                    "remove changed methods now, but keep the changes (to be applied later)"
-                    changed do:[:eachChangeArr|
-                        |eachChange eachClass|
-
-                        eachChange := eachChangeArr first.
-                        eachChange isMethodChange ifTrue:[
-                            eachClass := eachChange changeClass.
-                            eachClass theNonMetaclass == eachChangedClass ifTrue:[
-                                eachClass basicRemoveSelector:eachChange selector.
-                            ].
-                        ].
-                    ].
-                ]
-            ].
-
-           "apply class definition changes (use the repository version)"
-           changedClassDefinitions do:[:eachChangeArr |    
-                |cRep| 
-                cRep := eachChangeArr at:2.
-                cRep apply.
-            ].
-        ].
-
-        onlyInRep do:[:eachChange |
-            |changeClass|
-
-            "apply this change (method only present in rep-version)"
-             eachChange apply.
-             eachChange isMethodChange ifTrue:[
-                 changeClass := eachChange changeClass.
-                 changeClass notNil ifTrue:[
-                     eachChange changeMethod setPackage:(changeClass package).
-                     changedClasses add:changeClass.
-                 ]
-             ]
-        ]
+	answer == #load ifTrue:[
+	    "when loading, remove all the methods which are no longer in classes with a changed
+	     class definition. So we avoid possible compile errors of old methods, which will go away"
+	    onlyHere do:[:eachChange |
+		 "remove this change (method not present in repository version)"
+		 |cClass cSel|
+		 eachChange isMethodChange ifTrue:[
+		     cClass := eachChange changeClass.
+		     cSel := eachChange selector.
+		     cClass notNil ifTrue:[ cClass basicRemoveSelector:cSel ].
+		 ]
+	    ].
+
+	    changedClassDefinitions do:[:eachChangeArr |
+		|cHere eachChangedClass|
+		cHere := eachChangeArr at:1.
+		eachChangedClass := cHere changeClass.
+		eachChangedClass notNil ifTrue:[
+		    changedClasses add:eachChangedClass.
+		    eachChangedClass := eachChangedClass theNonMetaclass.
+
+		    "remove changed methods now, but keep the changes (to be applied later)"
+		    changed do:[:eachChangeArr|
+			|eachChange eachClass|
+
+			eachChange := eachChangeArr first.
+			eachChange isMethodChange ifTrue:[
+			    eachClass := eachChange changeClass.
+			    eachClass theNonMetaclass == eachChangedClass ifTrue:[
+				eachClass basicRemoveSelector:eachChange selector.
+			    ].
+			].
+		    ].
+		]
+	    ].
+
+	   "apply class definition changes (use the repository version)"
+	   changedClassDefinitions do:[:eachChangeArr |
+		|cRep|
+		cRep := eachChangeArr at:2.
+		cRep apply.
+	    ].
+	].
+
+	onlyInRep do:[:eachChange |
+	    |changeClass|
+
+	    "apply this change (method only present in rep-version)"
+	     eachChange apply.
+	     eachChange isMethodChange ifTrue:[
+		 changeClass := eachChange changeClass.
+		 changeClass notNil ifTrue:[
+		     eachChange changeMethod setPackage:(changeClass package).
+		     changedClasses add:changeClass.
+		 ]
+	     ]
+	]
     .
-        answer == #load ifTrue:[
-            changed do:[:eachChangeArr | "apply this change (go to rep-version)"
-                 |cHere cRep| 
-                 cHere := eachChangeArr at:1.
-                 cRep := eachChangeArr at:2.
-                 cRep apply.
-                 cRep isMethodChange ifTrue:[
-                     cRep changeMethod setPackage:(cRep changeClass package).
-                     changedClasses add:cRep changeClass.
-                 ]
-            ].
-
-            versionMethodsRep size >= 1 ifTrue:[
-                versionMethodsRep last apply.
-            ] ifFalse:[
-                self error:'missing version method in repository' mayProceed:true.
-            ].
-            "/ make all those methods belong to the classes project
-            "/ no - that is wrong !! self setPackageOfAllMethodsIn:aClass to:aClass package.
-            self setPackageOfAllMethodsInChangeSet:listRep to:aClass package.
-        ].
+	answer == #load ifTrue:[
+	    changed do:[:eachChangeArr | "apply this change (go to rep-version)"
+		 |cHere cRep|
+		 cHere := eachChangeArr at:1.
+		 cRep := eachChangeArr at:2.
+		 cRep apply.
+		 cRep isMethodChange ifTrue:[
+		     cRep changeMethod setPackage:(cRep changeClass package).
+		     changedClasses add:cRep changeClass.
+		 ]
+	    ].
+
+	    versionMethodsRep size >= 1 ifTrue:[
+		versionMethodsRep last apply.
+	    ] ifFalse:[
+		self error:'missing version method in repository' mayProceed:true.
+	    ].
+	    "/ make all those methods belong to the classes project
+	    "/ no - that is wrong !! self setPackageOfAllMethodsIn:aClass to:aClass package.
+	    self setPackageOfAllMethodsInChangeSet:listRep to:aClass package.
+	].
     "/    ].
 
-        answer == #load ifTrue:[
-            inChangeSet := aClass hasUnsavedChanges.
-            inChangeSet ifTrue:[
-                rev = newestRev ifTrue:[
-                    (wasInChangeSetBefore not
-                     or:[ self confirm:(resources 
-                                    stringWithCRs:'%1 is now up-to-date.\\Remove entries for %1 from changeSet ?'
-                                    with:aClass name)]) 
-                    ifTrue:[
-                        ChangeSet current condenseChangesForClass:aClass.
-                    ].
-                ].
-            ].
-        ].
-
-        changedClasses do:[:eachClass |
-             eachClass changed:#projectOrganization.
-        ].
-        Smalltalk changed:#projectOrganization.
-        self activityNotification:'... done'.
+	answer == #load ifTrue:[
+	    inChangeSet := aClass hasUnsavedChanges.
+	    inChangeSet ifTrue:[
+		rev = newestRev ifTrue:[
+		    (wasInChangeSetBefore not
+		     or:[ self confirm:(resources
+				    stringWithCRs:'%1 is now up-to-date.\\Remove entries for %1 from changeSet ?'
+				    with:aClass name)])
+		    ifTrue:[
+			ChangeSet current condenseChangesForClass:aClass.
+		    ].
+		].
+	    ].
+	].
+
+	changedClasses do:[:eachClass |
+	     eachClass changed:#projectOrganization.
+	].
+	Smalltalk changed:#projectOrganization.
+	self activityNotification:'... done'.
     ].
 
     "Modified: / 07-02-2001 / 18:18:32 / ps"
@@ -2251,10 +1761,10 @@
     "check-out a class from the source repository.
      If askForRevision is false, check-out the newest version."
 
-    |resources 
+    |resources
      inChangeSet extensionMethods
      rev msg
-     listHere listRep diffSet 
+     listHere listRep diffSet
      changed onlyHere onlyInRep answer labels values singleChangeSelector
      changedClasses default |
 
@@ -2267,156 +1777,156 @@
 
     extensionMethods := OrderedCollection new.
     Smalltalk allClassesDo:[:aClass | |owner classPackage|
-        "/ individual methods ...
-        aClass isMeta ifFalse:[
-            (aClass package ~= packageToCheckOut) ifTrue:[
-                aClass instAndClassSelectorsAndMethodsDo:[:sel :mthd |
-                    "/ methods in this project ...
-                    (mthd package = packageToCheckOut) ifTrue:[
-                        "/ ... whose class is not in the ckechIn-set
-                        extensionMethods add:mthd
-                    ]
-                ].
-            ].
-        ].
+	"/ individual methods ...
+	aClass isMeta ifFalse:[
+	    (aClass package ~= packageToCheckOut) ifTrue:[
+		aClass instAndClassSelectorsAndMethodsDo:[:sel :mthd |
+		    "/ methods in this project ...
+		    (mthd package = packageToCheckOut) ifTrue:[
+			"/ ... whose class is not in the ckechIn-set
+			extensionMethods add:mthd
+		    ]
+		].
+	    ].
+	].
     ].
     listHere := ChangeSet forExistingMethods:extensionMethods.
 
     inChangeSet := listRep contains:[:someChange |
-                            |cClass cSel|
-
-                            someChange isMethodChange ifTrue:[
-                                cClass := someChange changeClass.
-                                cSel := someChange selector.
-                                ChangeSet current includesChangeForClass:cClass selector:cSel
-                            ]
-                    ].
+			    |cClass cSel|
+
+			    someChange isMethodChange ifTrue:[
+				cClass := someChange changeClass.
+				cSel := someChange selector.
+				ChangeSet current includesChangeForClass:cClass selector:cSel
+			    ]
+		    ].
 
     diffSet := listHere diffSetsAgainst:listRep.
     changed := diffSet changed.
     onlyHere := diffSet onlyInReceiver.
     onlyInRep := diffSet onlyInArg.
 
-    labels := #('Cancel' 'Merge' 'Load'). 
-    values := #(nil #merge #load). 
-    default := askForRevision 
-                    ifTrue:[3. "i.e. load"]
-                    ifFalse:[2. "i.e. merge"].
+    labels := #('Cancel' 'Merge' 'Load').
+    values := #(nil #merge #load).
+    default := askForRevision
+		    ifTrue:[3. "i.e. load"]
+		    ifFalse:[2. "i.e. merge"].
 
     msg := 'About to load extensions for ''%5''.\\'.
     onlyInRep size > 0 ifTrue:[
-        msg := msg , 'The repositories version contains %1 extension method(s) which are not in your current image.\'.
+	msg := msg , 'The repositories version contains %1 extension method(s) which are not in your current image.\'.
     ].
     onlyHere size > 0 ifTrue:[
-        onlyInRep size > 0 ifTrue:[
-            msg := msg , 'And there '.
-        ] ifFalse:[
-            msg := msg , 'There '.
-        ].
-        msg := msg , 'are %2 extension methods in your current image, which are not in the repository.\'.
+	onlyInRep size > 0 ifTrue:[
+	    msg := msg , 'And there '.
+	] ifFalse:[
+	    msg := msg , 'There '.
+	].
+	msg := msg , 'are %2 extension methods in your current image, which are not in the repository.\'.
     ].
     changed size > 0 ifTrue:[
-        changed size == 1 ifTrue:[
-            msg := msg , 'The ''%5''-method is different (present in both).\\'.
-            singleChangeSelector := changed first first selector allBold
-        ] ifFalse:[
-            msg := msg , '%3 methods are different (present in both).\\'.
-        ]
+	changed size == 1 ifTrue:[
+	    msg := msg , 'The ''%5''-method is different (present in both).\\'.
+	    singleChangeSelector := changed first first selector allBold
+	] ifFalse:[
+	    msg := msg , '%3 methods are different (present in both).\\'.
+	]
     ].
 
     onlyHere isEmpty ifTrue:[
-        onlyInRep isEmpty ifTrue:[
-            (changed isEmpty) ifTrue:[
-                listRep do:[:eachChange |
-                    eachChange changeMethod setPackage:packageToCheckOut.
-                ].
-                ^ self
-            ].
-            inChangeSet ifTrue:[
-                msg := msg , '\Attention:\Load may undo any changes made to on of the extension methods (if any were made).'.
-            ].
-            labels := #('Cancel' 'Load'). 
-            values := #(nil #load). 
-            default := askForRevision 
-                            ifTrue:[2. "i.e. load"]
-                            ifFalse:[1. "i.e. cancel"].
-        ] ifFalse:[
-            changed isEmpty ifTrue:[
-                msg := msg , '\Attention:\Load will load methods which are not present in the image.'.
-                labels := #('Cancel' 'Load'). 
-                values := #(nil #load). 
-                default := askForRevision 
-                                ifTrue:[2. "i.e. load"]
-                                ifFalse:[1. "i.e. cancel"].
-            ] ifFalse:[
-                inChangeSet ifTrue:[
-                    msg := msg , '\Attention:\Load will undo your changes made to the image (if any were made);'.
-                ].
-                msg := msg , '\Merge will only load methods which are not present in the image (i.e. undo removals but preserve changes).'.
-            ].
-        ]
+	onlyInRep isEmpty ifTrue:[
+	    (changed isEmpty) ifTrue:[
+		listRep do:[:eachChange |
+		    eachChange changeMethod setPackage:packageToCheckOut.
+		].
+		^ self
+	    ].
+	    inChangeSet ifTrue:[
+		msg := msg , '\Attention:\Load may undo any changes made to on of the extension methods (if any were made).'.
+	    ].
+	    labels := #('Cancel' 'Load').
+	    values := #(nil #load).
+	    default := askForRevision
+			    ifTrue:[2. "i.e. load"]
+			    ifFalse:[1. "i.e. cancel"].
+	] ifFalse:[
+	    changed isEmpty ifTrue:[
+		msg := msg , '\Attention:\Load will load methods which are not present in the image.'.
+		labels := #('Cancel' 'Load').
+		values := #(nil #load).
+		default := askForRevision
+				ifTrue:[2. "i.e. load"]
+				ifFalse:[1. "i.e. cancel"].
+	    ] ifFalse:[
+		inChangeSet ifTrue:[
+		    msg := msg , '\Attention:\Load will undo your changes made to the image (if any were made);'.
+		].
+		msg := msg , '\Merge will only load methods which are not present in the image (i.e. undo removals but preserve changes).'.
+	    ].
+	]
     ] ifFalse:[
-        onlyInRep isEmpty ifTrue:[
-            inChangeSet ifTrue:[
-                msg := msg , '\Attention:\Load will undo your changes made to the image (if any were made),'.
-                msg := msg , '\and remove added methods which are not present in the repository version.'.
-            ].
-            labels := #('Cancel' 'Load'). 
-            values := #(nil #load). 
-            default := askForRevision 
-                            ifTrue:[2. "i.e. load"]
-                            ifFalse:[1. "i.e. cancel"].
-        ] ifFalse:[
-            inChangeSet ifTrue:[
-                msg := msg , '\Attention:\Load will undo your changes made to the image (if any were made);'.
-                msg := msg , '\Merge will only load methods which are not present in the image (i.e. undo removals but preserve changes).'.
-            ]
-        ]
+	onlyInRep isEmpty ifTrue:[
+	    inChangeSet ifTrue:[
+		msg := msg , '\Attention:\Load will undo your changes made to the image (if any were made),'.
+		msg := msg , '\and remove added methods which are not present in the repository version.'.
+	    ].
+	    labels := #('Cancel' 'Load').
+	    values := #(nil #load).
+	    default := askForRevision
+			    ifTrue:[2. "i.e. load"]
+			    ifFalse:[1. "i.e. cancel"].
+	] ifFalse:[
+	    inChangeSet ifTrue:[
+		msg := msg , '\Attention:\Load will undo your changes made to the image (if any were made);'.
+		msg := msg , '\Merge will only load methods which are not present in the image (i.e. undo removals but preserve changes).'.
+	    ]
+	]
     ].
 
-    msg := msg bindWith:onlyInRep size printString 
-               with:onlyHere size printString 
-               with:changed size printString
-               with:singleChangeSelector
-               with:packageToCheckOut allBold.
+    msg := msg bindWith:onlyInRep size printString
+	       with:onlyHere size printString
+	       with:changed size printString
+	       with:singleChangeSelector
+	       with:packageToCheckOut allBold.
 
     answer := (Dialog confirmWithCancel:msg withCRs
-           labels:(resources array:labels)
-           values:values 
-           default:default).
+	   labels:(resources array:labels)
+	   values:values
+	   default:default).
     answer isNil ifTrue:[^ self].
 
     self activityNotification:'updating...'.
     changedClasses := IdentitySet new.
 
 "/    Class withoutUpdatingChangesDo:[
-        onlyInRep do:[:eachChange | "apply this change (method only present in rep-version)"
-                                     Class withoutUpdatingChangeSetDo:[ eachChange apply ].
-
-                                     eachChange changeMethod setPackage:packageToCheckOut.
-                                     changedClasses add:eachChange changeClass.   
-                     ].
-        answer == #load ifTrue:[
-            onlyHere do:[:eachChange |   "remove this change (method not present in rep-version)"
-                                         |cClass cSel|
-
-                                         cClass := eachChange changeClass.
-                                         cSel := eachChange selector.
-                                         Class withoutUpdatingChangeSetDo:[ cClass removeSelector:cSel ].
-                        ].
-            changed do:[:eachChangeArr | "apply this change (go to rep-version)"
-                                         |cHere cRep| 
-                                         cHere := eachChangeArr at:1.
-                                         cRep := eachChangeArr at:2.
-                                         Class withoutUpdatingChangeSetDo:[ cRep apply ].
-
-                                         cRep changeMethod setPackage:packageToCheckOut.
-                                         changedClasses add:cRep changeClass.
-                       ].
-        ].
+	onlyInRep do:[:eachChange | "apply this change (method only present in rep-version)"
+				     Class withoutUpdatingChangeSetDo:[ eachChange apply ].
+
+				     eachChange changeMethod setPackage:packageToCheckOut.
+				     changedClasses add:eachChange changeClass.
+		     ].
+	answer == #load ifTrue:[
+	    onlyHere do:[:eachChange |   "remove this change (method not present in rep-version)"
+					 |cClass cSel|
+
+					 cClass := eachChange changeClass.
+					 cSel := eachChange selector.
+					 Class withoutUpdatingChangeSetDo:[ cClass removeSelector:cSel ].
+			].
+	    changed do:[:eachChangeArr | "apply this change (go to rep-version)"
+					 |cHere cRep|
+					 cHere := eachChangeArr at:1.
+					 cRep := eachChangeArr at:2.
+					 Class withoutUpdatingChangeSetDo:[ cRep apply ].
+
+					 cRep changeMethod setPackage:packageToCheckOut.
+					 changedClasses add:cRep changeClass.
+		       ].
+	].
 "/    ].
     changedClasses do:[:eachClass |
-         eachClass changed:#projectOrganization.
+	 eachClass changed:#projectOrganization.
     ].
     Smalltalk changed:#projectOrganization.
 
@@ -2448,172 +1958,175 @@
     classToCompare := aClass theNonMetaclass.
 
     nm := classToCompare name.
-    mgr := self sourceCodeManagerFor:classToCompare.
-    mgr isNil ifTrue:[
-        ^ self
+    (mgr := manager) isNil ifTrue:[
+	mgr := self sourceCodeManagerFor:classToCompare.
+	mgr isNil ifTrue:[
+	    self error:'oops - no sourcecode manager' mayProceed:true.
+	    ^ self
+	].
     ].
 
     rev := classToCompare revisionInfoOfManager:mgr.
 "/    rev := classToCompare binaryRevision.
     revisionInClass := classToCompare revision.
     rev isNil ifTrue:[
-        rev := revisionInClass
+	rev := revisionInClass
     ].
     rev isNil ifTrue:[
-        (Dialog confirm:'Class seems to be not yet in the repository (or classes revision info is corrupted)\\Proceed ?' withCRs)
-        ifFalse:[
-            ^ self
-        ]
+	(Dialog confirm:'Class seems to be not yet in the repository (or classes revision info is corrupted)\\Proceed ?' withCRs)
+	ifFalse:[
+	    ^ self
+	]
     ].
 
     "/
     "/ class in repository - ask for revision
     "/
     SourceCodeManagerError handle:[:ex |
-        Dialog warn:(resources 
-                                stringWithCRs:'Could not fetch source of "%1".\\Please check your %1-sourcecode manager''s settings.'
-                                with:classToCompare name
-                                with:classToCompare sourceCodeManager managerTypeName).
-        ^ self.
+	Dialog warn:(resources
+				stringWithCRs:'Could not fetch source of "%1".\\Please check your %1-sourcecode manager''s settings.'
+				with:classToCompare name
+				with:classToCompare sourceCodeManager managerTypeName).
+	^ self.
 
     ] do:[
-        newestRev := mgr newestRevisionOf:classToCompare.
+	newestRev := mgr newestRevisionOf:classToCompare.
     ].
     askForRevision ifTrue:[
-        msg := resources string:'Compare to revision: (empty for newest)'.
-        rev notNil ifTrue:[
-            msg := msg , '\\' , (resources string:'Current %1 is based upon rev %2.'
-                                           with:nm allBold with:rev).
-            (revisionInClass notNil and:[revisionInClass ~= rev]) ifTrue:[
-                msg := msg , '\' , (resources string:'And has been checked into the repository as %1.'
-                                               with:revisionInClass)
-            ]
-        ].
-        newestRev notNil ifTrue:[
-            msg := msg , '\' , (resources string:'Newest in reporitory is %1.'
-                                           with:newestRev)
-        ].
-
-        rev := self
-                    askForExistingRevision:msg 
-                    title:'Compare with repository' 
-                    class:classToCompare.
+	msg := resources string:'Compare to revision: (empty for newest)'.
+	rev notNil ifTrue:[
+	    msg := msg , '\\' , (resources string:'Current %1 is based upon rev %2.'
+					   with:nm allBold with:rev).
+	    (revisionInClass notNil and:[revisionInClass ~= rev]) ifTrue:[
+		msg := msg , '\' , (resources string:'And has been checked into the repository as %1.'
+					       with:revisionInClass)
+	    ]
+	].
+	newestRev notNil ifTrue:[
+	    msg := msg , '\' , (resources string:'Newest in reporitory is %1.'
+					   with:newestRev)
+	].
+
+	rev := self
+		    askForExistingRevision:msg
+		    title:'Compare with repository'
+		    class:classToCompare.
     ] ifFalse:[
-        rev := newestRev.
+	rev := newestRev.
     ].
 
     rev notNil ifTrue:[
-        rev withoutSpaces isEmpty ifTrue:[
-            msg := 'extracting newest %1 (' , (newestRev ? '???') , ')'.
-            "/ aStream := mgr getMostRecentSourceStreamForClassNamed:nm.
-            aStream := mgr getSourceStreamFor:classToCompare revision:newestRev.
-            revString := '(newest: ' , (newestRev ? '???') , ')'.
-        ] ifFalse:[
-            msg := 'extracting previous %1'.
-            aStream := mgr getSourceStreamFor:classToCompare revision:rev.
-            revString := rev
-        ].
-
-        aStream isNil ifTrue:[
-            self warn:'Could not extract source from repository (check repository settings / network)'.
-            ^ self
-        ].
-        aStream class readErrorSignal handle:[:ex |
-            self warn:('Read error while reading extracted source\\' , ex description) withCRs.
-            aStream close.
-            ^ self
-        ] do:[
-            comparedSource := aStream contents asString.
-        ].
-        aStream close.
-
-        self activityNotification:'generating current source...'.
-
-        currentSource := self sourceCodeOfClass:classToCompare.
-
-        self activityNotification:'comparing...'.
-
-        versionsAreTheSame := false.
-        comparedSource = currentSource ifTrue:[
-            versionsAreTheSame := true.
-        ] ifFalse:[
-            thisRevString := revisionInClass ? 'no revision'.
-
-            revString = '(newest)' ifTrue:[
-                (rev := mgr newestRevisionOf:classToCompare) notNil ifTrue:[
-                    revString := '(newest is ' , rev , ')'
-                ]
-            ].
-
-            self activityNotification:'comparing...'.
-
-            brwsr := (UserPreferences versionDiffViewerClass)
-                  openOnClass:classToCompare
-                  labelA:('Repository: ' , revString)
-                  sourceA:comparedSource
-                  labelB:('Current: (based on: ' , thisRevString , ')')
-                  sourceB:currentSource
-                  title:('Comparing ' , classToCompare name)
-                  ifSame:[versionsAreTheSame := true].
-
-            versionsAreTheSame ifFalse:[
-                brwsr classChangeSet 
-                    classBeingCompared:classToCompare;
-                    versionA:rev;
-                    versionB:rev , 'mod'.
-            ].
-        ].
-
-        versionsAreTheSame ifTrue:[
-            (classToCompare hasUnsavedChanges) ifTrue:[
-                (self confirm:(resources 
-                                stringWithCRs:'Versions of %1 are identical.\\Remove entries from changeSet ?'
-                                with:classToCompare name allBold)) ifTrue:[
-                    ChangeSet current condenseChangesForClass:classToCompare.
-                ].
-            ] ifFalse:[
-                self information:'Versions are identical.'.
-                ChangeSet current unrememberChangedClasses.
-            ].
-            revisionInClass isNil ifTrue:[
-                (Dialog confirm:'Update (Fix) the classes Revision Info ?' withCRs)
-                ifTrue:[
-                    |newString root|
-
-                    newString := mgr updatedRevisionStringOf:aClass forRevision:rev with:aClass revisionString.
-                    newString isNil ifTrue:[
-                        root := mgr getCVSROOTForModule:(aClass package upTo:$:).
-                        root := mgr repositoryTopDirectoryFromCVSRoot:root.
-                        newString := '$', 'Header: ',(root copyReplaceAll: $: with:$/ ),'/'
-                                     ,(Smalltalk fileNameForClass:aClass),'.st,v ',rev,' '
-                                     ,(Date today printStringFormat:'%y-%m-%d'),' '
-                                     ,(Time now printStringFormat:'%h:%m:%s'),' '
-                                     ,'+0000 '
-                                     ,(OperatingSystem getLoginName),' Exp $'.
-                    ].
-                    mgr updateVersionMethodOf:aClass for:newString.
-                ]
-            ].
-        ].
+	rev withoutSpaces isEmpty ifTrue:[
+	    msg := 'extracting newest %1 (' , (newestRev ? '???') , ')'.
+	    "/ aStream := mgr getMostRecentSourceStreamForClassNamed:nm.
+	    aStream := mgr getSourceStreamFor:classToCompare revision:newestRev.
+	    revString := '(newest: ' , (newestRev ? '???') , ')'.
+	] ifFalse:[
+	    msg := 'extracting previous %1'.
+	    aStream := mgr getSourceStreamFor:classToCompare revision:rev.
+	    revString := rev
+	].
+
+	aStream isNil ifTrue:[
+	    self warn:'Could not extract source from repository (check repository settings / network)'.
+	    ^ self
+	].
+	aStream class readErrorSignal handle:[:ex |
+	    self warn:('Read error while reading extracted source\\' , ex description) withCRs.
+	    aStream close.
+	    ^ self
+	] do:[
+	    comparedSource := aStream contents asString.
+	].
+	aStream close.
+
+	self activityNotification:'generating current source...'.
+
+	currentSource := self sourceCodeOfClass:classToCompare.
+
+	self activityNotification:'comparing...'.
+
+	versionsAreTheSame := false.
+	comparedSource = currentSource ifTrue:[
+	    versionsAreTheSame := true.
+	] ifFalse:[
+	    thisRevString := revisionInClass ? 'no revision'.
+
+	    revString = '(newest)' ifTrue:[
+		(rev := mgr newestRevisionOf:classToCompare) notNil ifTrue:[
+		    revString := '(newest is ' , rev , ')'
+		]
+	    ].
+
+	    self activityNotification:'comparing...'.
+
+	    brwsr := (UserPreferences versionDiffViewerClass)
+		  openOnClass:classToCompare
+		  labelA:('Repository: ' , revString)
+		  sourceA:comparedSource
+		  labelB:('Current: (based on: ' , thisRevString , ')')
+		  sourceB:currentSource
+		  title:('Comparing ' , classToCompare name)
+		  ifSame:[versionsAreTheSame := true].
+
+	    versionsAreTheSame ifFalse:[
+		brwsr classChangeSet
+		    classBeingCompared:classToCompare;
+		    versionA:rev;
+		    versionB:rev , 'mod'.
+	    ].
+	].
+
+	versionsAreTheSame ifTrue:[
+	    (classToCompare hasUnsavedChanges) ifTrue:[
+		(self confirm:(resources
+				stringWithCRs:'Versions of %1 are identical.\\Remove entries from changeSet ?'
+				with:classToCompare name allBold)) ifTrue:[
+		    ChangeSet current condenseChangesForClass:classToCompare.
+		].
+	    ] ifFalse:[
+		self information:'Versions are identical.'.
+		ChangeSet current unrememberChangedClasses.
+	    ].
+	    revisionInClass isNil ifTrue:[
+		(Dialog confirm:'Update (Fix) the classes Revision Info ?' withCRs)
+		ifTrue:[
+		    |newString root|
+
+		    newString := mgr updatedRevisionStringOf:aClass forRevision:rev with:aClass revisionString.
+		    newString isNil ifTrue:[
+			root := mgr getCVSROOTForModule:(aClass package upTo:$:).
+			root := mgr repositoryTopDirectoryFromCVSRoot:root.
+			newString := '$', 'Header: ',(root copyReplaceAll: $: with:$/ ),'/'
+				     ,(Smalltalk fileNameForClass:aClass),'.st,v ',rev,' '
+				     ,(Date today printStringFormat:'%y-%m-%d'),' '
+				     ,(Time now printStringFormat:'%h:%m:%s'),' '
+				     ,'+0000 '
+				     ,(OperatingSystem getLoginName),' Exp $'.
+		    ].
+		    mgr updateVersionMethodOf:aClass for:newString.
+		]
+	    ].
+	].
     ].
 
     "
       self compareClassWithRepository:Array
     "
 
-    "Modified: / 06-03-2012 / 11:57:28 / cg"
+    "Modified: / 24-07-2012 / 18:11:27 / cg"
 !
 
 compareProject:aProject withRepositoryVersionFrom:aDateOrNilForNewest
     |diffSet|
 
     diffSet := self diffSetOfProject:aProject againstRepositoryVersionFrom:aDateOrNilForNewest.
-    VersionDiffBrowser 
-        openOnDiffSet:diffSet 
-        labelA:'Repository' 
-        labelB:'Image' 
-        title:('Differences of %1' bindWith:aProject)
-        ignoreExtensions:false.
+    VersionDiffBrowser
+	openOnDiffSet:diffSet
+	labelA:'Repository'
+	labelB:'Image'
+	title:('Differences of %1' bindWith:aProject)
+	ignoreExtensions:false.
 
     "Modified: / 12-09-2011 / 11:56:01 / cg"
 !
@@ -2626,9 +2139,9 @@
     "let user specify the source-repository values for aClass.
      Return false, if failed."
 
-    ^ self 
-        createSourceContainerForClass:aClass
-        usingManager:(self sourceCodeManagerFor:aClass).
+    ^ self
+	createSourceContainerForClass:aClass
+	usingManager:(self sourceCodeManagerFor:aClass).
 
     "Modified: / 21-12-2011 / 18:31:49 / cg"
 !
@@ -2642,15 +2155,15 @@
     aManager isNil ifTrue:[^ false].
 
     resources := self classResources.
-    ^ self 
-        defineSourceContainerForClass:aClass
-        usingManager:aManager
-        title:(resources string:'Repository information for %1' with:aClass name)
-        text:(resources string:'Create new %1-repository container for ''%2''' 
-                            with:aManager managerTypeName
-                            with:aClass name allBold)
-        createDirectories:true
-        createContainer:true.
+    ^ self
+	defineSourceContainerForClass:aClass
+	usingManager:aManager
+	title:(resources string:'Repository information for %1' with:aClass name)
+	text:(resources string:'Create new %1-repository container for ''%2'''
+			    with:aManager managerTypeName
+			    with:aClass name allBold)
+	createDirectories:true
+	createContainer:true.
 
     "Created: / 21-12-2011 / 18:31:23 / cg"
 !
@@ -2659,12 +2172,12 @@
     "let user specify the source-repository values for aClass"
 
     ^ self
-        defineSourceContainerForClass:aClass 
-        usingManager:(self sourceCodeManagerFor:aClass)
-        title:title 
-        text:boxText 
-        createDirectories:createDirs 
-        createContainer:createContainer
+	defineSourceContainerForClass:aClass
+	usingManager:(self sourceCodeManagerFor:aClass)
+	title:title
+	text:boxText
+	createDirectories:createDirs
+	createContainer:createContainer
 
     "Modified: / 21-12-2011 / 18:34:44 / cg"
 !
@@ -2675,7 +2188,7 @@
     |className
      "oldModule oldPackage" oldFileName
      module directory fileName nameSpace nameSpacePrefix
-     info project nm creatingNew msg 
+     info project nm creatingNew msg
      answer doCheckinWithoutAsking forceCheckIn resources rslt note
      requiredPackage|
 
@@ -2683,58 +2196,58 @@
 
     resources := self classResources.
     aClass isLoaded ifFalse:[
-        self warn:(resources string:'Please load the %1-class first' with:aClass name).
-        ^ false.
+	self warn:(resources string:'Please load the %1-class first' with:aClass name).
+	^ false.
     ].
 
     className := aClass name.
 
     aClass isProjectDefinition ifTrue:[
-        "/ no way - their package is already known and fix.
-        module := aClass module.
-        directory := aClass moduleDirectory.
+	"/ no way - their package is already known and fix.
+	module := aClass module.
+	directory := aClass moduleDirectory.
     ] ifFalse:[
-        "/JV@2012-07-23: The class may have package already defined!!!!!!
-        "/Try that package first!!
-        (aClass package notNil and:[aClass package ~~ Project noProjectID]) ifTrue:[
-            | doubleCollon |
-
-            doubleCollon := aClass package indexOf: $:.
-            doubleCollon == 0 ifTrue:[
-                module := aClass package.
-                directory := nil.
-            ] ifFalse:[
-                module := aClass package copyTo: doubleCollon - 1.
-                directory := aClass package copyFrom: doubleCollon + 1.
-            ]
-        ] ifFalse:[
-            "/
-            "/ defaults, if nothing at all is known
-            "/
-            (module := LastModule) isNil ifTrue:[
-                module := (OperatingSystem getLoginName).
-            ].
-            (directory := LastPackage) isNil ifTrue:[
-                directory := 'private'.
-            ].
-        ].
+	"/JV@2012-07-23: The class may have package already defined!!!!!!
+	"/Try that package first!!
+	(aClass package notNil and:[aClass package ~~ Project noProjectID]) ifTrue:[
+	    | doubleCollon |
+
+	    doubleCollon := aClass package indexOf: $:.
+	    doubleCollon == 0 ifTrue:[
+		module := aClass package.
+		directory := nil.
+	    ] ifFalse:[
+		module := aClass package copyTo: doubleCollon - 1.
+		directory := aClass package copyFrom: doubleCollon + 1.
+	    ]
+	] ifFalse:[
+	    "/
+	    "/ defaults, if nothing at all is known
+	    "/
+	    (module := LastModule) isNil ifTrue:[
+		module := (OperatingSystem getLoginName).
+	    ].
+	    (directory := LastPackage) isNil ifTrue:[
+		directory := 'private'.
+	    ].
+	].
     ].
 
     "/
     "/ try to extract some useful defaults from the current project
     "/
     (Project notNil and:[(project := Project current) notNil]) ifTrue:[
-        directory isNil ifTrue:[
-            (nm := project repositoryDirectory) isNil ifTrue:[
-                nm := project name
-            ].
-            directory := nm.
-        ].
-        module isNil ifTrue:[
-            (nm := project repositoryModule) notNil ifTrue:[
-                module := nm
-            ]
-        ].
+	directory isNil ifTrue:[
+	    (nm := project repositoryDirectory) isNil ifTrue:[
+		nm := project name
+	    ].
+	    directory := nm.
+	].
+	module isNil ifTrue:[
+	    (nm := project repositoryModule) notNil ifTrue:[
+		module := nm
+	    ]
+	].
     ].
 
     "/
@@ -2743,23 +2256,23 @@
     "/
     info := mgr sourceInfoOfClass:aClass.
     info notNil ifTrue:[
-        true "module ~= LastModule" ifTrue:[
-            (info includesKey:#module) ifTrue:[
-                module := (info at:#module).
-            ].
-        ].
+	true "module ~= LastModule" ifTrue:[
+	    (info includesKey:#module) ifTrue:[
+		module := (info at:#module).
+	    ].
+	].
 "/        true "package ~= LastPackage" ifTrue:[
 "/            (info includesKey:#directory) ifTrue:[
 "/                package := (info at:#directory).
 "/            ].
 "/        ].
-        fileName := mgr containerFromSourceInfo:info.
-        (nameSpace := aClass nameSpace) ~~ Smalltalk ifTrue:[
-            nameSpacePrefix := nameSpace name , '::'.
-            (fileName startsWith:nameSpacePrefix) ifTrue:[
-                fileName := fileName copyFrom:(nameSpacePrefix size + 1).
-            ]
-        ].
+	fileName := mgr containerFromSourceInfo:info.
+	(nameSpace := aClass nameSpace) ~~ Smalltalk ifTrue:[
+	    nameSpacePrefix := nameSpace name , '::'.
+	    (fileName startsWith:nameSpacePrefix) ifTrue:[
+		fileName := fileName copyFrom:(nameSpacePrefix size + 1).
+	    ]
+	].
 "/        (info includesKey:#fileName) ifTrue:[
 "/            fileName := (info at:#fileName).
 "/        ] ifFalse:[
@@ -2774,12 +2287,12 @@
     ].
 
     fileName isNil ifTrue:[
-        fileName := (Smalltalk fileNameForClass:aClass) , '.st'.
+	fileName := (Smalltalk fileNameForClass:aClass) , '.st'.
     ].
 
     OperatingSystem isMSDOSlike ifTrue:[
-        module replaceAll:$\ with:$/.
-        directory replaceAll:$\ with:$/.
+	module replaceAll:$\ with:$/.
+	directory replaceAll:$\ with:$/.
     ].
 
     "/
@@ -2788,7 +2301,7 @@
     doCheckinWithoutAsking := false.
 "/false ifTrue:[
 "/    (mgr checkForExistingContainer:fileName inModule:module directory:directory) ifTrue:[
-"/        answer := Dialog confirmWithCancel:(resources 
+"/        answer := Dialog confirmWithCancel:(resources
 "/                            string:'About to change the source container.
 "/
 "/Notice: there is a container for %1 in:
@@ -2814,36 +2327,37 @@
 "/    ].
 "/].
     mgr isContainerBased ifTrue:[
-        doCheckinWithoutAsking ifFalse:[
-            "/
-            "/ open a dialog for this
-            "/
-            (mgr checkForExistingContainer:fileName inModule:module directory:directory) ifFalse:[
-                note := 'Notice: class seems to have no container yet.'.
-                creatingNew := true.
-            ] ifTrue:[
-                creatingNew := false.
-            ].
-
-            rslt := self 
-                    askForContainer:boxText title:title note:note
-                    initialModule:module initialPackage:directory initialFileName:fileName
-                    forNewContainer:true.        
-
-            rslt isNil ifTrue:[
-                ^ false
-            ].
-
-            module := rslt at:#module.
-            directory := rslt at:#package.
-            fileName := rslt at:#fileName.
-        ].
-        (fileName endsWith:',v') ifTrue:[
-            fileName := fileName copyWithoutLast:2
-        ].
-        (fileName endsWith:'.st') ifFalse:[
-            fileName := fileName , '.st'
-        ].
+	doCheckinWithoutAsking ifFalse:[
+	    "/
+	    "/ open a dialog for this
+	    "/
+	    (mgr checkForExistingContainer:fileName inModule:module directory:directory) ifFalse:[
+		note := 'Notice: class seems to have no container yet.'.
+		creatingNew := true.
+	    ] ifTrue:[
+		creatingNew := false.
+	    ].
+	    confirmNewFiles ifTrue:[
+		rslt := self
+			    askForContainer:boxText title:title note:note
+			    initialModule:module initialPackage:directory initialFileName:fileName
+			    forNewContainer:true.
+
+		rslt isNil ifTrue:[
+		    ^ false
+		].
+
+		module := rslt at:#module.
+		directory := rslt at:#package.
+		fileName := rslt at:#fileName.
+	    ]
+	].
+	(fileName endsWith:',v') ifTrue:[
+	    fileName := fileName copyWithoutLast:2
+	].
+	(fileName endsWith:'.st') ifFalse:[
+	    fileName := fileName , '.st'
+	].
 
     ].
 
@@ -2858,45 +2372,45 @@
 "/                ^ false
 "/            ]
 "/        ].
-        aClass instAndClassSelectorsAndMethodsDo:[:sel :mthd | mthd setPackage:requiredPackage].
-        aClass package:requiredPackage.
+	aClass instAndClassSelectorsAndMethodsDo:[:sel :mthd | mthd setPackage:requiredPackage].
+	aClass package:requiredPackage.
     ].
 
     info := aClass revisionInfo.
     info notNil ifTrue:[
-        (info repositoryPathName isNil) ifTrue:[
-            info := nil
-        ].
+	(info repositoryPathName isNil) ifTrue:[
+	    info := nil
+	].
 "/        (info includesKey:#repositoryPathName) ifFalse:[
 "/            info := nil
 "/        ]
     ].
 
     info isNil ifTrue:[
-        true "doCheckinWithoutAsking" ifFalse:[
-            answer := Dialog 
-                 confirmWithCancel:(resources string:'%1 does not have any (usable) revision info (#version method)\\Shall I create one ?' with:className) withCRs
-                 labels:(resources array:#( 'Cancel' 'No' 'Yes')).
-            answer isNil ifTrue:[^ false].
-        ] ifTrue:[
-            answer := true.
-        ].
-        answer ifTrue:[
-            mgr
-                updateVersionMethodOf:aClass 
-                for:(mgr initialRevisionStringFor:aClass 
-                         inModule:module 
-                         directory:directory 
-                         container:fileName).
-        ].
+	true "doCheckinWithoutAsking" ifFalse:[
+	    answer := Dialog
+		 confirmWithCancel:(resources string:'%1 does not have any (usable) revision info (#version method)\\Shall I create one ?' with:className) withCRs
+		 labels:(resources array:#( 'Cancel' 'No' 'Yes')).
+	    answer isNil ifTrue:[^ false].
+	] ifTrue:[
+	    answer := true.
+	].
+	answer ifTrue:[
+	    mgr
+		updateVersionMethodOf:aClass
+		for:(mgr initialRevisionStringFor:aClass
+			 inModule:module
+			 directory:directory
+			 container:fileName).
+	].
     ].
 
     (self checkForExistingModule:module usingManager:mgr allowCreate:(createDirs or:[creatingNew]))
-        ifFalse:[^ false].
+	ifFalse:[^ false].
     LastModule := module.
 
     (self checkForExistingModule:module directory:directory usingManager:mgr allowCreate:(createDirs or:[creatingNew]))
-        ifFalse:[^ false].
+	ifFalse:[^ false].
     LastPackage := directory.
 
     "/
@@ -2913,92 +2427,92 @@
 "/                ^ false.
 "/            ].
 
-        mgr isContainerBased ifTrue:[
-            creatingNew ifTrue:[
-                self warn:(resources string:'Container for %1 already exists in %2/%3.' with:fileName with:module with:directory) withCRs.
-            ].
-
-            doCheckinWithoutAsking ifFalse:[
-                (Dialog 
-                    confirm:(resources string:'check %1 into the existing container
+	mgr isContainerBased ifTrue:[
+	    creatingNew ifTrue:[
+		self warn:(resources string:'Container for %1 already exists in %2/%3.' with:fileName with:module with:directory) withCRs.
+	    ].
+
+	    doCheckinWithoutAsking ifFalse:[
+		(Dialog
+		    confirm:(resources string:'check %1 into the existing container
 
     %2 / %3 / %4  ?'
-                                    with:className
-                                    with:module 
-                                    with:directory 
-                                    with:fileName) withCRs
-                    noLabel:'Cancel') 
-                ifFalse:[
-                    ^ false.
-                ].  
-            ].  
-        ].
-
-        mgr 
-            updateVersionMethodOf:aClass 
-            for:('$' , 'Header' , '$'). "/ concatenated to avoid RCS-expansion
-
-        oldFileName notNil ifTrue:[
-            msg := ('forced checkin / source container change from ' , oldFileName).
-        ] ifFalse:[
-            msg := 'defined source container'
-        ].
-
-        (forceCheckIn := doCheckinWithoutAsking) ifFalse:[
-            (mgr
-                checkinClass:aClass 
-                fileName:fileName 
-                directory:directory 
-                module:module 
-                logMessage:msg)
-            ifFalse:[
-                doCheckinWithoutAsking ifFalse:[
-                    (Dialog 
-                        confirm:'No easy merge seems possible; force checkin (no merge) ?'
-                        noLabel:'Cancel') 
-                    ifFalse:[
-                        ^ false.
-                    ].
-                ].
-                forceCheckIn := true.
-            ]
-        ].
-        forceCheckIn ifTrue:[
-            (mgr
-                checkinClass:aClass 
-                fileName:fileName 
-                directory:directory 
-                module:module 
-                logMessage:msg
-                force:true)
-            ifFalse:[
-                self warn:(resources string:'Failed to check into existing container.').
-                ^ false.
-            ].
-        ].
-        ^ true
+				    with:className
+				    with:module
+				    with:directory
+				    with:fileName) withCRs
+		    noLabel:'Cancel')
+		ifFalse:[
+		    ^ false.
+		].
+	    ].
+	].
+
+	mgr
+	    updateVersionMethodOf:aClass
+	    for:('$' , 'Header' , '$'). "/ concatenated to avoid RCS-expansion
+
+	oldFileName notNil ifTrue:[
+	    msg := ('forced checkin / source container change from ' , oldFileName).
+	] ifFalse:[
+	    msg := 'defined source container'
+	].
+
+	(forceCheckIn := doCheckinWithoutAsking) ifFalse:[
+	    (mgr
+		checkinClass:aClass
+		fileName:fileName
+		directory:directory
+		module:module
+		logMessage:msg)
+	    ifFalse:[
+		doCheckinWithoutAsking ifFalse:[
+		    (Dialog
+			confirm:'No easy merge seems possible; force checkin (no merge) ?'
+			noLabel:'Cancel')
+		    ifFalse:[
+			^ false.
+		    ].
+		].
+		forceCheckIn := true.
+	    ]
+	].
+	forceCheckIn ifTrue:[
+	    (mgr
+		checkinClass:aClass
+		fileName:fileName
+		directory:directory
+		module:module
+		logMessage:msg
+		force:true)
+	    ifFalse:[
+		self warn:(resources string:'Failed to check into existing container.').
+		^ false.
+	    ].
+	].
+	^ true
     ] ifFalse:[
-        (createContainer or:[creatingNew]) ifFalse:[
-            (Dialog
-                 confirm:(resources string:'No container exists for %1 in %2/%3\\create ?' 
-                                      with:fileName with:module with:directory) withCRs
-                 noLabel:'Cancel') ifFalse:[
-                ^ false
-            ]
-        ]
+	(createContainer or:[creatingNew]) ifFalse:[
+	    (Dialog
+		 confirm:(resources string:'No container exists for %1 in %2/%3\\create ?'
+				      with:fileName with:module with:directory) withCRs
+		 noLabel:'Cancel') ifFalse:[
+		^ false
+	    ]
+	]
     ].
 
     aClass instAndClassSelectorsAndMethodsDo:[:sel :mthd | mthd setPackage:requiredPackage].
     aClass package:requiredPackage.
 
     (mgr
-        createContainerFor:aClass
-        inModule:module
-        package:directory
-        container:fileName
+	createContainerFor:aClass
+	inModule:module
+	package:directory
+	container:fileName
     ) ifFalse:[
-        self warn:(resources string:'Failed to create container.').
-        ^ false.
+	self warn:(resources string:'Failed to create container.').
+	^ false.
     ].
     ^ true
 
@@ -3007,11 +2521,11 @@
 !
 
 diffSetOfProject:aProject againstRepositoryVersionFrom:aDateOrNilForNewest
-    |classesInImage filesInImage module directory perProjectInfo 
+    |classesInImage filesInImage module directory perProjectInfo
      classesNotInRepository filesNotInImage classesDeletedInRepository
-     classesModifiedInImage classesNotReallyModified classesReallyModified classesModifiedInRepository 
+     classesModifiedInImage classesNotReallyModified classesReallyModified classesModifiedInRepository
      classesAddedInImage extensionMethods extensionsInImage extensionsInRepository extensionDiffs
-     box doCleanup resources diffSet def autoloadedFilesNotInImage 
+     box doCleanup resources diffSet def autoloadedFilesNotInImage
      autoloadedClassesInImage autoloadedFilesInImage|
 
     resources := self classResources.
@@ -3043,8 +2557,8 @@
     classesModifiedInImage := classesModifiedInImage \ classesNotInRepository.
 
     classesModifiedInRepository := classesInImage select:[:cls | |v|
-                                                    v := (perProjectInfo at:cls classBaseFilename ifAbsent:nil).
-                                                    v notNil and:[ cls isLoaded and:[ v > cls revision ]]].
+						    v := (perProjectInfo at:cls classBaseFilename ifAbsent:nil).
+						    v notNil and:[ cls isLoaded and:[ v > cls revision ]]].
 
     "/ stupid: as we do not have any revision information for extensions (sigh);
     "/ we must checkout and look at the extension.st contents, to see if it has changed.
@@ -3053,180 +2567,180 @@
     extensionsInImage := ChangeSet forExistingMethods:extensionMethods.
 
     [
-        |s extensionsRevision|
-
-        extensionsRevision := perProjectInfo at:'extensions.st' ifAbsent:#newest.
-        s := SourceCodeManager
-                streamForClass:nil fileName:'extensions.st' revision:extensionsRevision 
-                directory:directory module:module cache:true.
-        s isNil ifTrue:[
-            extensionsInRepository := ChangeSet new.
-        ] ifFalse:[
-            extensionsInRepository := ChangeSet fromStream:s.
-            s close.
-        ].
+	|s extensionsRevision|
+
+	extensionsRevision := perProjectInfo at:'extensions.st' ifAbsent:#newest.
+	s := SourceCodeManager
+		streamForClass:nil fileName:'extensions.st' revision:extensionsRevision
+		directory:directory module:module cache:true.
+	s isNil ifTrue:[
+	    extensionsInRepository := ChangeSet new.
+	] ifFalse:[
+	    extensionsInRepository := ChangeSet fromStream:s.
+	    s close.
+	].
     ] value.
     extensionDiffs := extensionsInRepository diffSetsAgainst:extensionsInImage.
 
     diffSet := extensionDiffs copy.
 
     aDateOrNilForNewest isNil ifTrue:[
-        "/ we could do the same as above for each class.
-        "/ however - as we do have change-info and revision info, we can avoid checking out
-        "/ for all classes which are not changed and which have the same version info.
-        classesModifiedInImage notEmpty ifTrue:[
-            classesReallyModified :=
-                classesModifiedInImage select:[:eachChangedClass |
-                    |currentVersion repositoryVersion s stFile diffs|
-
-                    stFile := eachChangedClass classBaseFilename.
-                    s := SourceCodeManager
-                        streamForClass:nil fileName:stFile revision:#newest 
-                        directory:directory module:module cache:true.
-                    repositoryVersion := ChangeSet fromStream:s.
-                    s close.
-
-                    currentVersion := ChangeSet forExistingClass:eachChangedClass.
-                    diffs := repositoryVersion diffSetsAgainst:currentVersion .
-                    diffSet addDiffSet:diffs.
-                    diffs notEmpty
-                ].
-
-            classesNotReallyModified := classesModifiedInImage \ classesReallyModified.
-        ].
+	"/ we could do the same as above for each class.
+	"/ however - as we do have change-info and revision info, we can avoid checking out
+	"/ for all classes which are not changed and which have the same version info.
+	classesModifiedInImage notEmpty ifTrue:[
+	    classesReallyModified :=
+		classesModifiedInImage select:[:eachChangedClass |
+		    |currentVersion repositoryVersion s stFile diffs|
+
+		    stFile := eachChangedClass classBaseFilename.
+		    s := SourceCodeManager
+			streamForClass:nil fileName:stFile revision:#newest
+			directory:directory module:module cache:true.
+		    repositoryVersion := ChangeSet fromStream:s.
+		    s close.
+
+		    currentVersion := ChangeSet forExistingClass:eachChangedClass.
+		    diffs := repositoryVersion diffSetsAgainst:currentVersion .
+		    diffSet addDiffSet:diffs.
+		    diffs notEmpty
+		].
+
+	    classesNotReallyModified := classesModifiedInImage \ classesReallyModified.
+	].
     ] ifFalse:[
-        classesReallyModified :=
-            classesInImage select:[:eachClass |
-                |currentVersion repositoryVersion s stFile stRevision diffs|
-
-                stFile := eachClass classBaseFilename.
-                stRevision := perProjectInfo at:stFile ifAbsent:#newest.
-
-                s := SourceCodeManager
-                        streamForClass:nil fileName:stFile revision:stRevision 
-                        directory:directory module:module cache:true.
-                s isNil ifTrue:[
-                    repositoryVersion := ChangeSet new.
-                ] ifFalse:[
-                    repositoryVersion := ChangeSet fromStream:s.
-                    s close.
-                ].
-
-                currentVersion := ChangeSet forExistingClass:eachClass.
-                diffs := repositoryVersion diffSetsAgainst:currentVersion .
-                diffSet addDiffSet:diffs.
-                diffs notEmpty
-            ].
+	classesReallyModified :=
+	    classesInImage select:[:eachClass |
+		|currentVersion repositoryVersion s stFile stRevision diffs|
+
+		stFile := eachClass classBaseFilename.
+		stRevision := perProjectInfo at:stFile ifAbsent:#newest.
+
+		s := SourceCodeManager
+			streamForClass:nil fileName:stFile revision:stRevision
+			directory:directory module:module cache:true.
+		s isNil ifTrue:[
+		    repositoryVersion := ChangeSet new.
+		] ifFalse:[
+		    repositoryVersion := ChangeSet fromStream:s.
+		    s close.
+		].
+
+		currentVersion := ChangeSet forExistingClass:eachClass.
+		diffs := repositoryVersion diffSetsAgainst:currentVersion .
+		diffSet addDiffSet:diffs.
+		diffs notEmpty
+	    ].
     ].
 
     filesNotInImage notEmpty ifTrue:[
-        "/ first, check if these are autoloaded classes which have NOT been installed
-        "/ (for example, due to a --quick argument during startup)
-        autoloadedFilesNotInImage := OrderedCollection new.
-
-        def := ProjectDefinition definitionClassForPackage:aProject createIfAbsent:false projectType:nil.
-        def notNil ifTrue:[
-            def classNamesAndAttributesDo:[:eachClassname :eachAttributes | 
-                |cls eachFileName isAutoload|
-
-                cls := Smalltalk classNamed:eachClassname.
-                cls isNil ifTrue:[
-                    isAutoload := eachAttributes includes:#autoload.
-                    isAutoload ifTrue:[
-                        eachFileName := Smalltalk fileNameForClass:eachClassname.
-                        autoloadedFilesNotInImage add:(eachFileName , '.st')
-                    ]
-                ]
-            ].
-        ].
-
-        (filesNotInImage \ autoloadedFilesNotInImage) do:[:eachSTFile |
-            |s chgSet classDefinitions|
-
-            s := SourceCodeManager
-                streamForClass:nil fileName:eachSTFile revision:#newest directory:directory module:module cache:true.
-            chgSet := ChangeSet fromStream:s.
-            s close.
-
-            diffSet onlyInReceiver addAll:chgSet
-        ].
+	"/ first, check if these are autoloaded classes which have NOT been installed
+	"/ (for example, due to a --quick argument during startup)
+	autoloadedFilesNotInImage := OrderedCollection new.
+
+	def := ProjectDefinition definitionClassForPackage:aProject createIfAbsent:false projectType:nil.
+	def notNil ifTrue:[
+	    def classNamesAndAttributesDo:[:eachClassname :eachAttributes |
+		|cls eachFileName isAutoload|
+
+		cls := Smalltalk classNamed:eachClassname.
+		cls isNil ifTrue:[
+		    isAutoload := eachAttributes includes:#autoload.
+		    isAutoload ifTrue:[
+			eachFileName := Smalltalk fileNameForClass:eachClassname.
+			autoloadedFilesNotInImage add:(eachFileName , '.st')
+		    ]
+		]
+	    ].
+	].
+
+	(filesNotInImage \ autoloadedFilesNotInImage) do:[:eachSTFile |
+	    |s chgSet classDefinitions|
+
+	    s := SourceCodeManager
+		streamForClass:nil fileName:eachSTFile revision:#newest directory:directory module:module cache:true.
+	    chgSet := ChangeSet fromStream:s.
+	    s close.
+
+	    diffSet onlyInReceiver addAll:chgSet
+	].
     ].
 
     classesModifiedInRepository notEmpty ifTrue:[
-        classesModifiedInRepository do:[:eachClass|
-            |s diffs repositoryVersion currentVersion|
-
-            s := SourceCodeManager
-                streamForClass:eachClass fileName:nil revision:#newest directory:directory module:module cache:true.
-            repositoryVersion := ChangeSet fromStream:s.
-            s close.
-
-            currentVersion := ChangeSet forExistingClass:eachClass.
-            diffs := repositoryVersion diffSetsAgainst:currentVersion .
-            diffSet addDiffSet:diffs.
-        ].
+	classesModifiedInRepository do:[:eachClass|
+	    |s diffs repositoryVersion currentVersion|
+
+	    s := SourceCodeManager
+		streamForClass:eachClass fileName:nil revision:#newest directory:directory module:module cache:true.
+	    repositoryVersion := ChangeSet fromStream:s.
+	    s close.
+
+	    currentVersion := ChangeSet forExistingClass:eachClass.
+	    diffs := repositoryVersion diffSetsAgainst:currentVersion .
+	    diffSet addDiffSet:diffs.
+	].
     ].
     classesDeletedInRepository notEmpty ifTrue:[
 "/ self halt.
     ].
     classesNotInRepository notEmpty ifTrue:[
-        "/ if there are no changeSet entries for those classes, they seem to be
-        "/ no longer in the repository (possibly moved ?)
-        "/ If there are entries, these might have been added in the image and need a check-in
-
-        classesAddedInImage := classesNotInRepository \ classesDeletedInRepository.
-        classesAddedInImage do:[:eachAddedClass |
-            |currentVersion|
-
-            currentVersion := ChangeSet forExistingClass:eachAddedClass.
-            diffSet onlyInArg addAll:currentVersion.
-        ].
+	"/ if there are no changeSet entries for those classes, they seem to be
+	"/ no longer in the repository (possibly moved ?)
+	"/ If there are entries, these might have been added in the image and need a check-in
+
+	classesAddedInImage := classesNotInRepository \ classesDeletedInRepository.
+	classesAddedInImage do:[:eachAddedClass |
+	    |currentVersion|
+
+	    currentVersion := ChangeSet forExistingClass:eachAddedClass.
+	    diffSet onlyInArg addAll:currentVersion.
+	].
     ].
 
     diffSet isEmpty ifTrue:[
-        "/ Dialog information:(resources string:'%1 is up-to-date.' with:eachProject allBold).
-        Transcript showCR:('%1 is up-to-date.' bindWith:aProject allBold).
-        (ChangeSet current includesChangeForPackage:aProject) ifTrue:[
-            (Dialog confirm:('%1 is up-to-date.\\Cleanup ChangeSet ?' bindWith:aProject allBold) withCRs) ifTrue:[
-                ChangeSet current condenseChangesForPackage:aProject.
-            ].
-        ].
-        ^ diffSet.
+	"/ Dialog information:(resources string:'%1 is up-to-date.' with:eachProject allBold).
+	Transcript showCR:('%1 is up-to-date.' bindWith:aProject allBold).
+	(ChangeSet current includesChangeForPackage:aProject) ifTrue:[
+	    (Dialog confirm:('%1 is up-to-date.\\Cleanup ChangeSet ?' bindWith:aProject allBold) withCRs) ifTrue:[
+		ChangeSet current condenseChangesForPackage:aProject.
+	    ].
+	].
+	^ diffSet.
     ].
 
     "/ as a side-effect, if we find that some classes are modified but the same as in the repository,
     "/ give user a chance to cleanup the changeSet here.
     aDateOrNilForNewest isNil ifTrue:[
-        classesNotReallyModified notEmptyOrNil ifTrue:[
-            doCleanup := false.
-            box := Dialog
-                forRequestText:(resources 
-                                    stringWithCRs:'The following classes from %1 are equal to the repository version.\\Remove entries from the changeSet ?'
-                                    with:aProject allBold) 
-                editViewClass:ListView
-                lines:10 columns:20 
-                initialAnswer:nil model:nil
-                setupWith:
-                   [:v :d | 
-                            |removeButton|
-
-                            v list:classesNotReallyModified.
-                            removeButton := Button label:(resources string:'Cleanup ChangeSet').
-                            removeButton action:[ doCleanup := true. box okPressed. ].
-                            d addButton:removeButton after:(d okButton).
-                            d okButton label:(resources string:'Continue').
-                            d okButton isReturnButton:false.
-                            removeButton isReturnButton:true.
-                   ].
-            box open.
-            box accepted ifTrue:[
-                doCleanup ifTrue:[
-                    classesNotReallyModified do:[:class |
-                        ChangeSet current condenseChangesForClass:class.
-                    ]
-                ].
-            ]
-        ].
+	classesNotReallyModified notEmptyOrNil ifTrue:[
+	    doCleanup := false.
+	    box := Dialog
+		forRequestText:(resources
+				    stringWithCRs:'The following classes from %1 are equal to the repository version.\\Remove entries from the changeSet ?'
+				    with:aProject allBold)
+		editViewClass:ListView
+		lines:10 columns:20
+		initialAnswer:nil model:nil
+		setupWith:
+		   [:v :d |
+			    |removeButton|
+
+			    v list:classesNotReallyModified.
+			    removeButton := Button label:(resources string:'Cleanup ChangeSet').
+			    removeButton action:[ doCleanup := true. box okPressed. ].
+			    d addButton:removeButton after:(d okButton).
+			    d okButton label:(resources string:'Continue').
+			    d okButton isReturnButton:false.
+			    removeButton isReturnButton:true.
+		   ].
+	    box open.
+	    box accepted ifTrue:[
+		doCleanup ifTrue:[
+		    classesNotReallyModified do:[:class |
+			ChangeSet current condenseChangesForClass:class.
+		    ]
+		].
+	    ]
+	].
     ].
     ^ diffSet
 
@@ -3242,28 +2756,28 @@
 
     (theMetaclass includesSelector:versionMethodName) ifTrue:[
 "/        (theMetaclass includesSelector:oldVersionMethodName) ifTrue:[
-"/            theMetaclass removeSelector:oldVersionMethodName.   
+"/            theMetaclass removeSelector:oldVersionMethodName.
 "/        ].
-        "/ ensure that my version method is parsable (contains $'s)
-        src := (theMetaclass compiledMethodAt:versionMethodName) source.
-        src notNil ifTrue:[
-            newSrc := aManager ensureDollarsInVersionMethod:src.
-            newSrc ~= src ifTrue:[
-                theMetaclass compile:newSrc.
-            ]
-        ].
+	"/ ensure that my version method is parsable (contains $'s)
+	src := (theMetaclass compiledMethodAt:versionMethodName) source.
+	src notNil ifTrue:[
+	    newSrc := aManager ensureDollarsInVersionMethod:src.
+	    newSrc ~= src ifTrue:[
+		theMetaclass compile:newSrc.
+	    ]
+	].
     ] ifFalse:[
-        (theMetaclass includesSelector:oldVersionMethodName) ifTrue:[
-            "/ but make sure, it is a version method for this sourcecodemanager...
-            (theMetaclass methodDictionary keys count:[:sel | sel startsWith:'version']) size == 1 ifTrue:[
-                src := (theMetaclass compiledMethodAt:oldVersionMethodName) source.
-                (src startsWith:oldVersionMethodName) ifTrue:[
-                    newSrc := versionMethodName 
-                              , (src copyFrom:(oldVersionMethodName size + 1))
-                ].
-                theMetaclass compile:newSrc.
-            ]
-        ].
+	(theMetaclass includesSelector:oldVersionMethodName) ifTrue:[
+	    "/ but make sure, it is a version method for this sourcecodemanager...
+	    (theMetaclass methodDictionary keys count:[:sel | sel startsWith:'version']) size == 1 ifTrue:[
+		src := (theMetaclass compiledMethodAt:oldVersionMethodName) source.
+		(src startsWith:oldVersionMethodName) ifTrue:[
+		    newSrc := versionMethodName
+			      , (src copyFrom:(oldVersionMethodName size + 1))
+		].
+		theMetaclass compile:newSrc.
+	    ]
+	].
     ].
 
     "Modified: / 20-08-2011 / 14:40:27 / cg"
@@ -3274,30 +2788,30 @@
     "returns 2 values"
 
     |initialLogMessage checkinInfo logMessage|
-    
+
     "/ heuristics for a useful initial log message...
     aLogInfoOrNil isNil ifTrue:[
-        initialLogMessage := (self goodInitialLogMessageForCheckinClassOfClass:aClass) ? ''.
-        "/ initial checkin ?
-        (aClass package isNil or:[aClass revision isNil]) ifTrue:[ 
-            initialLogMessage := 'initial checkin\\' withCRs , initialLogMessage
-        ].
-        checkinInfo := self 
-                        getCheckinInfoFor:aClass name 
-                        initialAnswer:initialLogMessage.
-        checkinInfo isNil ifTrue:[^ false].
-        logMessage := checkinInfo logMessage.
+	initialLogMessage := (self goodInitialLogMessageForCheckinClassOfClass:aClass) ? ''.
+	"/ initial checkin ?
+	(aClass package isNil or:[aClass revision isNil]) ifTrue:[
+	    initialLogMessage := 'initial checkin\\' withCRs , initialLogMessage
+	].
+	checkinInfo := self
+			getCheckinInfoFor:aClass name
+			initialAnswer:initialLogMessage.
+	checkinInfo isNil ifTrue:[^ false].
+	logMessage := checkinInfo logMessage.
     ] ifFalse:[
-        aLogInfoOrNil isString ifTrue:[
-            "soon obsolete..."    
-            logMessage := aLogInfoOrNil
-        ] ifFalse:[ 
-            checkinInfo := aLogInfoOrNil.
-            logMessage := checkinInfo logMessage.
-        ].
+	aLogInfoOrNil isString ifTrue:[
+	    "soon obsolete..."
+	    logMessage := aLogInfoOrNil
+	] ifFalse:[
+	    checkinInfo := aLogInfoOrNil.
+	    logMessage := checkinInfo logMessage.
+	].
     ].
-    logMessage notNil ifTrue:[  
-        logMessage := logMessage asSingleByteStringReplaceInvalidWith:$?
+    logMessage notNil ifTrue:[
+	logMessage := logMessage asSingleByteStringReplaceInvalidWith:$?
     ].
     aBlock value:logMessage value:checkinInfo.
     ^ true
@@ -3317,10 +2831,10 @@
     resources := self classResources.
 
     aClass isLoaded ifFalse:[
-        doWarn ifTrue:[
-            self warn:(resources string:'Please load the class first.').
-        ].
-        ^ false.
+	doWarn ifTrue:[
+	    self warn:(resources string:'Please load the class first.').
+	].
+	^ false.
     ].
 
     "/
@@ -3329,79 +2843,79 @@
     "/
     mgr := self sourceCodeManagerFor:aClass.
     mgr isNil ifTrue:[
-        ^ false
+	^ false
     ].
 
     info := mgr sourceInfoOfClass:aClass.
     info notNil ifTrue:[
-        (info includesKey:#module) ifTrue:[
-            module := (info at:#module).
-        ].
-        (info includesKey:#directory) ifTrue:[
-            directory := (info at:#directory).
-        ].
-        fileName := mgr containerFromSourceInfo:info.
+	(info includesKey:#module) ifTrue:[
+	    module := (info at:#module).
+	].
+	(info includesKey:#directory) ifTrue:[
+	    directory := (info at:#directory).
+	].
+	fileName := mgr containerFromSourceInfo:info.
     ].
 
     module isNil ifTrue:[
-        doWarn ifTrue:[
-            self warn:(resources stringWithCRs:'classes module is unknown.\\It seems to not have a container.') .
-        ].
-        ^ false.
+	doWarn ifTrue:[
+	    self warn:(resources stringWithCRs:'classes module is unknown.\\It seems to not have a container.') .
+	].
+	^ false.
     ].
     directory isNil ifTrue:[
-        doWarn ifTrue:[
-            self warn:(resources stringWithCRs:'classes package is unknown.\\It seems to not have a container.') .
-        ].
-        ^ false.
+	doWarn ifTrue:[
+	    self warn:(resources stringWithCRs:'classes package is unknown.\\It seems to not have a container.') .
+	].
+	^ false.
     ].
     fileName isNil ifTrue:[
-        doWarn ifTrue:[
-            self warn:(resources stringWithCRs:'classes container fileName is unknown.\\It seems to not have a container.') .
-        ].
-        ^ false.
+	doWarn ifTrue:[
+	    self warn:(resources stringWithCRs:'classes container fileName is unknown.\\It seems to not have a container.') .
+	].
+	^ false.
     ].
 
     OperatingSystem isMSDOSlike ifTrue:[
-        "cvs expects unix-filenames"
-        module := module copy replaceAll:$\ with:$/.
-        directory := directory copy replaceAll:$\ with:$/.
+	"cvs expects unix-filenames"
+	module := module copy replaceAll:$\ with:$/.
+	directory := directory copy replaceAll:$\ with:$/.
     ].
     (mgr checkForExistingContainer:fileName inModule:module directory:directory) ifFalse:[
-        doWarn ifTrue:[
-            self warn:(resources stringWithCRs:'Class had no source container (or SCM access is broken).') .
-        ].
-        ^ false.
+	doWarn ifTrue:[
+	    self warn:(resources stringWithCRs:'Class had no source container (or SCM access is broken).') .
+	].
+	^ false.
     ].
 
     doConfirm ifTrue:[
-        (Dialog
-            choose:(resources 
-                        stringWithCRs:'Please confirm removal of the container for %1:
+	(Dialog
+	    choose:(resources
+			stringWithCRs:'Please confirm removal of the container for %1:
 
 container:    %2 / %3 / %4
 
-Really remove ?' 
-                        with:aClass name 
-                        with:module 
-                        with:directory 
-                        with:fileName) 
-            labels:(Array 
-                        with:(resources string:'No') 
-                        with:(resources string:'Remove'))
-            values:#(false true)
-            default:false) ifFalse:[
-            ^ false.
-        ].
+Really remove ?'
+			with:aClass name
+			with:module
+			with:directory
+			with:fileName)
+	    labels:(Array
+			with:(resources string:'No')
+			with:(resources string:'Remove'))
+	    values:#(false true)
+	    default:false) ifFalse:[
+	    ^ false.
+	].
     ].
 
     (mgr removeContainer:fileName
-                inModule:module
-               directory:directory) ifFalse:[
-        doWarn ifTrue:[
-            self warn:(resources string:'failed to remove container.').
-        ].
-        ^ true.
+		inModule:module
+	       directory:directory) ifFalse:[
+	doWarn ifTrue:[
+	    self warn:(resources string:'failed to remove container.').
+	].
+	^ true.
     ].
     ^ false
 
@@ -3417,75 +2931,75 @@
 
     mgr := self sourceCodeManagerFor:aClass.
     mgr notNil ifTrue:[
-        info := aClass revisionInfoOfManager: mgr.
+	info := aClass revisionInfoOfManager: mgr.
     ] ifFalse:[
-        info := aClass revisionInfo
+	info := aClass revisionInfo
     ].
 
     rv := aClass binaryRevision.
     rv notNil ifTrue:[
-        aStream nextPutLine:'**** Loaded classes binary information ****'; cr.
-        aStream nextPutLine:'  Binary based upon : ' , rv.
-        aStream cr.
+	aStream nextPutLine:'**** Loaded classes binary information ****'; cr.
+	aStream nextPutLine:'  Binary based upon : ' , rv.
+	aStream cr.
     ].
 
     info notNil ifTrue:[
-        (info revision notNil) ifFalse:[
-            aStream nextPutLine:'WARNING:'; cr.
-            aStream nextPutLine:'  The class seems not to be loaded from the repository.'.
-            aStream nextPutLine:'  Check carefully before checking anything in.'.
-            aStream nextPutLine:'  (i.e. compare with repository for renamed class(es), same-name but unrelated etc.)'.
-            aStream cr.
-        ].
-
-        aStream nextPutLine:'**** Classes source information ****'; cr.
-        s := info repositoryPathName.
-        s notNil ifTrue:[
-            aStream nextPutLine:'  Source repository : ' , s
-        ].
-        aStream nextPutLine:'  Filename ........ : ' , (info fileName ? '?').
-        aStream nextPutLine:'  Revision ........ : ' , (info revision ? '?').
-        aStream nextPutLine:'  Checkin date .... : ' , (info date  ? '?') , ' ' , 
-                                                       (info time ? '?'), ' ', 
-                                                       (info timezone ? '').
-        aStream nextPutLine:'  Checkin user .... : ' , (info user ? '?').
-
-        (info2 := aClass packageSourceCodeInfo) notNil ifTrue:[
-            aStream nextPutLine:'  Repository: ..... : ' , (info2 at:#module ifAbsent:'?').
-            aStream nextPutLine:'  Directory: ...... : ' , (info2 at:#directory ifAbsent:'?').
-        ].
-        aStream nextPutLine:'  Container ....... : ' , (info repositoryPathName ? '?').
-        aStream cr.
-
-        mgr notNil ifTrue:[
-            aStream nextPutLine:'**** Repository information ****'; cr.
-
-            module := nil.
-            info2 notNil ifTrue:[
-                module := info2 at:#module ifAbsent:nil.
-            ].
-            module notNil ifTrue:[
-                aStream nextPutLine:('  Repository URL ......: ' , 
-                                    ((mgr repositoryNameForPackage:aClass package) ifNil:[mgr repositoryName , ' (default)'])).
-            ].
-            mgr writeRevisionLogOf:aClass short:shortOrNot to:aStream.
-        ]
+	(info revision notNil) ifFalse:[
+	    aStream nextPutLine:'WARNING:'; cr.
+	    aStream nextPutLine:'  The class seems not to be loaded from the repository.'.
+	    aStream nextPutLine:'  Check carefully before checking anything in.'.
+	    aStream nextPutLine:'  (i.e. compare with repository for renamed class(es), same-name but unrelated etc.)'.
+	    aStream cr.
+	].
+
+	aStream nextPutLine:'**** Classes source information ****'; cr.
+	s := info repositoryPathName.
+	s notNil ifTrue:[
+	    aStream nextPutLine:'  Source repository : ' , s
+	].
+	aStream nextPutLine:'  Filename ........ : ' , (info fileName ? '?').
+	aStream nextPutLine:'  Revision ........ : ' , (info revision ? '?').
+	aStream nextPutLine:'  Checkin date .... : ' , (info date  ? '?') , ' ' ,
+						       (info time ? '?'), ' ',
+						       (info timezone ? '').
+	aStream nextPutLine:'  Checkin user .... : ' , (info user ? '?').
+
+	(info2 := aClass packageSourceCodeInfo) notNil ifTrue:[
+	    aStream nextPutLine:'  Repository: ..... : ' , (info2 at:#module ifAbsent:'?').
+	    aStream nextPutLine:'  Directory: ...... : ' , (info2 at:#directory ifAbsent:'?').
+	].
+	aStream nextPutLine:'  Container ....... : ' , (info repositoryPathName ? '?').
+	aStream cr.
+
+	mgr notNil ifTrue:[
+	    aStream nextPutLine:'**** Repository information ****'; cr.
+
+	    module := nil.
+	    info2 notNil ifTrue:[
+		module := info2 at:#module ifAbsent:nil.
+	    ].
+	    module notNil ifTrue:[
+		aStream nextPutLine:('  Repository URL ......: ' ,
+				    ((mgr repositoryNameForPackage:aClass package) ifNil:[mgr repositoryName , ' (default)'])).
+	    ].
+	    mgr writeRevisionLogOf:aClass short:shortOrNot to:aStream.
+	]
     ] ifFalse:[
-        aStream nextPutLine:'No revision info found'.
-        aClass isLoaded ifFalse:[
-            aStream cr; nextPutAll:'This is an autoloaded class - you may see more after it is loaded.'
-        ] ifTrue:[
-            fn := aClass classFilename.
-            aClass wasAutoloaded ifTrue:[
-                msg := 'This class was autoloaded.'.
-                msg := msg , ' (from ''' , fn , ''')'.
-            ] ifFalse:[
-                msg := 'This class was loaded from ''' , fn , '''.'
-            ].
-            msg notNil ifTrue:[
-                aStream cr; nextPutAll:msg.
-            ]
-        ]
+	aStream nextPutLine:'No revision info found'.
+	aClass isLoaded ifFalse:[
+	    aStream cr; nextPutAll:'This is an autoloaded class - you may see more after it is loaded.'
+	] ifTrue:[
+	    fn := aClass classFilename.
+	    aClass wasAutoloaded ifTrue:[
+		msg := 'This class was autoloaded.'.
+		msg := msg , ' (from ''' , fn , ''')'.
+	    ] ifFalse:[
+		msg := 'This class was loaded from ''' , fn , '''.'
+	    ].
+	    msg notNil ifTrue:[
+		aStream cr; nextPutAll:msg.
+	    ]
+	]
     ]
 
     "Modified: / 06-06-2012 / 11:07:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -3497,10 +3011,10 @@
 
     mgr := self sourceCodeManagerFor:aClass.
     mgr
-        setSymbolicName:tag 
-        revision:nil 
-        overWrite:true 
-        class:aClass.
+	setSymbolicName:tag
+	revision:nil
+	overWrite:true
+	class:aClass.
 
     "Modified: / 12-09-2006 / 13:03:59 / cg"
 !
@@ -3509,20 +3023,20 @@
     |classesPerManager|
 
     classesPerManager := Dictionary new.
-    aCollectionOfClasses 
-        do:[:eachClass | 
-            |manager|
-
-            manager := self sourceCodeManagerFor:eachClass.
-            (classesPerManager at:manager ifAbsentPut:[Set new]) add:eachClass
-        ].
+    aCollectionOfClasses
+	do:[:eachClass |
+	    |manager|
+
+	    manager := self sourceCodeManagerFor:eachClass.
+	    (classesPerManager at:manager ifAbsentPut:[Set new]) add:eachClass
+	].
 
     classesPerManager keysAndValuesDo:[:manager :classesPerManager|
-        manager
-            setSymbolicName:tag 
-            revision:nil 
-            overWrite:true 
-            classes:classesPerManager.
+	manager
+	    setSymbolicName:tag
+	    revision:nil
+	    overWrite:true
+	    classes:classesPerManager.
     ].
     ^ true
 
@@ -3538,11 +3052,11 @@
 !
 
 tagPath:aPath as:tag usingManager:aManager
-    aManager 
-        setSymbolicName:tag 
-        revision:nil 
-        overWrite:true 
-        path:aPath.
+    aManager
+	setSymbolicName:tag
+	revision:nil
+	overWrite:true
+	path:aPath.
 
     "Modified: / 12-09-2006 / 12:04:44 / cg"
     "Created: / 29-12-2011 / 14:32:38 / cg"
@@ -3561,20 +3075,20 @@
 
     mgr := self sourceCodeManagerFor:theClass.
     mgr isNil ifTrue:[
-        self error:'no sourceCodeManager'.
+	self error:'no sourceCodeManager'.
     ].
 
     revisionLog := mgr
-                        revisionLogOf:theClass
-                        numberOfRevisions:numberOfRevisionsOrNil.
+			revisionLogOf:theClass
+			numberOfRevisions:numberOfRevisionsOrNil.
 
     revisions := revisionLog at:#revisions.
     items := revisions collect:[:each | |rev date who|
-                                    rev := each at:#revision.
-                                    date := each at:#date.
-                                    who := each at:#author.
-                                    rev allBold , ' [' , date , ' by ' , who , ']'
-                               ].
+				    rev := each at:#revision.
+				    date := each at:#date.
+				    who := each at:#author.
+				    rev allBold , ' [' , date , ' by ' , who , ']'
+			       ].
 
     revisions := revisions collect:[:each | each at:#revision].
     revisions addFirst:#current.
@@ -3582,39 +3096,39 @@
 
     previousVersion := nil.
     revisions reverseDo:[:eachRevision |
-        |srcStream entries thisVersion|
-
-        eachRevision == #current ifTrue:[
-            s := '' writeStream.
-            theClass fileOutOn:s withTimeStamp:false.
-            srcStream := s contents readStream.
-        ] ifFalse:[
-            self activityNotification:('checking out revision ' , eachRevision , '...').
-            srcStream := mgr getSourceStreamFor:theClass revision:eachRevision.
-        ].
-
-        entries := ChangeSet fromStream:srcStream.
-        srcStream close.
-
-        "/ remove all definitions       
-        entries := entries select:[:each | each isMethodChange].
-        "/ remove all methods which are for other selectors      
-        entries := entries select:[:each | each selector == selector].
-        "/ remove all methods which are for private subclasses      
-        entries := entries select:[:each | each className = aClass name].
-
-        entries size == 1 ifTrue:[
-            "/ the method is there
-            thisVersion := entries first.
-            (previousVersion notNil and:[previousVersion sameAs:thisVersion]) ifTrue:[
-                "/ no change
-            ] ifFalse:[
-                entriesPerRevision at:eachRevision put:thisVersion.
-            ].
-        ] ifFalse:[
-            "/ the method is not there
-        ].
-        previousVersion := thisVersion.
+	|srcStream entries thisVersion|
+
+	eachRevision == #current ifTrue:[
+	    s := '' writeStream.
+	    theClass fileOutOn:s withTimeStamp:false.
+	    srcStream := s contents readStream.
+	] ifFalse:[
+	    self activityNotification:('checking out revision ' , eachRevision , '...').
+	    srcStream := mgr getSourceStreamFor:theClass revision:eachRevision.
+	].
+
+	entries := ChangeSet fromStream:srcStream.
+	srcStream close.
+
+	"/ remove all definitions
+	entries := entries select:[:each | each isMethodChange].
+	"/ remove all methods which are for other selectors
+	entries := entries select:[:each | each selector == selector].
+	"/ remove all methods which are for private subclasses
+	entries := entries select:[:each | each className = aClass name].
+
+	entries size == 1 ifTrue:[
+	    "/ the method is there
+	    thisVersion := entries first.
+	    (previousVersion notNil and:[previousVersion sameAs:thisVersion]) ifTrue:[
+		"/ no change
+	    ] ifFalse:[
+		entriesPerRevision at:eachRevision put:thisVersion.
+	    ].
+	] ifFalse:[
+	    "/ the method is not there
+	].
+	previousVersion := thisVersion.
     ].
     self error:'unfinished code'.
 
@@ -3632,9 +3146,9 @@
      or nil if canceled."
 
     ^ self
-        askForContainer:boxText title:title note:notice 
-        initialModule:initialModule initialPackage:initialPackage initialFileName:initialFileName 
-        forNewContainer:true
+	askForContainer:boxText title:title note:notice
+	initialModule:initialModule initialPackage:initialPackage initialFileName:initialFileName
+	forNewContainer:true
 !
 
 askForContainer:boxText title:title note:notice initialModule:initialModule initialPackage:initialPackage initialFileName:initialFileName forNewContainer:forNewContainer
@@ -3644,57 +3158,57 @@
 
     |box y component resources answer
      moduleHolder packageHolder fileNameHolder
-     module package fileName 
+     module package fileName
      knownContainers knownPackages packageUpdater
      packageBoxComponent fileNameBoxComponent fileNameUpdater|
 
     knownContainers := Set new.
     Smalltalk allClassesDo:[:cls | |pckg|
-        pckg := cls package.
-        pckg size > 0 ifTrue:[
-            knownContainers add:(pckg upTo:$:)
-        ]
+	pckg := cls package.
+	pckg size > 0 ifTrue:[
+	    knownContainers add:(pckg upTo:$:)
+	]
     ].
     knownContainers := knownContainers asOrderedCollection.
     knownContainers := knownContainers select:[:module | module isBlank not].
     knownContainers sort.
 
     packageUpdater := [
-        |theModulePrefix|
-
-        theModulePrefix := moduleHolder value , ':'.
-
-        Cursor wait showWhile:[
-            knownPackages := Set new.
-            Smalltalk allClassesDo:[:cls | |pckg idx|
-                pckg := cls package.
-                pckg size > 0 ifTrue:[
-                    (pckg startsWith:theModulePrefix) ifTrue:[
-                        idx := pckg indexOf:$:.
-                        knownPackages add:(pckg copyFrom:idx + 1)
-                    ]
-                ]
-            ].
-            knownPackages := knownPackages asOrderedCollection.
-            knownPackages := knownPackages select:[:package | package isBlank not].
-            knownPackages sort.
-            packageBoxComponent list:knownPackages.
-        ].
+	|theModulePrefix|
+
+	theModulePrefix := moduleHolder value , ':'.
+
+	Cursor wait showWhile:[
+	    knownPackages := Set new.
+	    Smalltalk allClassesDo:[:cls | |pckg idx|
+		pckg := cls package.
+		pckg size > 0 ifTrue:[
+		    (pckg startsWith:theModulePrefix) ifTrue:[
+			idx := pckg indexOf:$:.
+			knownPackages add:(pckg copyFrom:idx + 1)
+		    ]
+		]
+	    ].
+	    knownPackages := knownPackages asOrderedCollection.
+	    knownPackages := knownPackages select:[:package | package isBlank not].
+	    knownPackages sort.
+	    packageBoxComponent list:knownPackages.
+	].
     ].
 
     fileNameUpdater := [
-        |module package files|
-
-        Cursor read showWhile:[
-            module := moduleHolder value ? (PackageId noProjectID).
-            package := packageHolder value ? (PackageId noProjectID).
-
-            files := SourceCodeManager getExistingContainersInModule:module directory:package.
-            files := files asOrderedCollection.
-            files := files select:[:eachFile | eachFile asFilename hasSuffix:'st'].
-            files sort.
-            fileNameBoxComponent list:files.
-        ].
+	|module package files|
+
+	Cursor read showWhile:[
+	    module := moduleHolder value ? (PackageId noProjectID).
+	    package := packageHolder value ? (PackageId noProjectID).
+
+	    files := SourceCodeManager getExistingContainersInModule:module directory:package.
+	    files := files asOrderedCollection.
+	    files := files select:[:eachFile | eachFile asFilename hasSuffix:'st'].
+	    files sort.
+	    fileNameBoxComponent list:files.
+	].
     ].
 
     moduleHolder := initialModule asValue.
@@ -3742,78 +3256,78 @@
     box yPosition:y.
 
     forNewContainer ifTrue:[
-        component := box addInputFieldOn:fileNameHolder tabable:true.
-        component width:0.6; left:0.4; immediateAccept:true; acceptOnLeave:false; cursorMovementWhenUpdating:#beginOfLine.
+	component := box addInputFieldOn:fileNameHolder tabable:true.
+	component width:0.6; left:0.4; immediateAccept:true; acceptOnLeave:false; cursorMovementWhenUpdating:#beginOfLine.
     ] ifFalse:[
-        fileNameBoxComponent := component := box addComboBoxOn:fileNameHolder tabable:true.
-        component width:0.6; left:0.4; immediateAccept:true; acceptOnLeave:false; cursorMovementWhenUpdating:#beginOfLine.
-        fileNameUpdater value.
-        packageHolder onChangeEvaluate:fileNameUpdater.
+	fileNameBoxComponent := component := box addComboBoxOn:fileNameHolder tabable:true.
+	component width:0.6; left:0.4; immediateAccept:true; acceptOnLeave:false; cursorMovementWhenUpdating:#beginOfLine.
+	fileNameUpdater value.
+	packageHolder onChangeEvaluate:fileNameUpdater.
     ].
 
     box addVerticalSpace.
 
     notice notNil ifTrue:[
-        component := box addTextLabel:notice.
-        component adjust:#left; borderWidth:0.
+	component := box addTextLabel:notice.
+	component adjust:#left; borderWidth:0.
     ].
 
     box addVerticalSpace.
     box addAbortAndOkButtons.
 
     (YesToAllNotification notNil and:[YesToAllNotification isHandled]) ifTrue:[
-        component := Button label:'Yes to all'.
-        component action:[
-                            YesToAllNotification queryWith:true.
-                            box doAccept.
-                            box okPressed.
-                         ].
-        (DialogBox defaultOKButtonAtLeft) ifTrue:[
-            box addButton:component after:nil.
-        ] ifFalse:[
-            box addButton:component before:nil.
-        ].
+	component := Button label:'Yes to all'.
+	component action:[
+			    YesToAllNotification queryWith:true.
+			    box doAccept.
+			    box okPressed.
+			 ].
+	(DialogBox defaultOKButtonAtLeft) ifTrue:[
+	    box addButton:component after:nil.
+	] ifFalse:[
+	    box addButton:component before:nil.
+	].
     ].
     (AbortAllSignal isHandled) ifTrue:[
-        component := Button label:'Cancel all'.
-        component action:[
-                            box hide.
-                            AbortAllSignal raiseSignal.
-                         ].
-        (DialogBox defaultOKButtonAtLeft) ifTrue:[
-            box addButton:component before:nil.
-        ] ifFalse:[
-            box addButton:component after:nil.
-        ].
+	component := Button label:'Cancel all'.
+	component action:[
+			    box hide.
+			    AbortAllSignal raiseSignal.
+			 ].
+	(DialogBox defaultOKButtonAtLeft) ifTrue:[
+	    box addButton:component before:nil.
+	] ifFalse:[
+	    box addButton:component after:nil.
+	].
     ].
 
     (YesToAllQuery notNil and:[YesToAllQuery isHandled]) ifTrue:[
-        answer := YesToAllQuery query.
+	answer := YesToAllQuery query.
     ].
 
     answer isNil ifTrue:[
-        box showAtPointer.
-        answer := box accepted
+	box showAtPointer.
+	answer := box accepted
     ].
 
     box destroy.
     answer ifFalse:[
-        ^ nil
+	^ nil
     ].
 
     module := moduleHolder value withoutSpaces.
     package := packageHolder value withoutSpaces.
     fileName := fileNameHolder value withoutSpaces.
     ^ Dictionary new
-        at:#module put:module;
-        at:#package put:package;
-        at:#fileName put:fileName;
-        yourself
+	at:#module put:module;
+	at:#package put:package;
+	at:#fileName put:fileName;
+	yourself
 
     "
-     self 
-        askForContainer:'enter container' title:'container' note:'some note'
-        initialModule:'foo' initialPackage:'bar' initialFileName:'baz'        
+     self
+	askForContainer:'enter container' title:'container' note:'some note'
+	initialModule:'foo' initialPackage:'bar' initialFileName:'baz'
     "
 
     "Modified: / 23-08-2006 / 14:13:04 / cg"
@@ -3830,21 +3344,21 @@
     sourceInfo isNil ifTrue:[^ nil].
 
     package := mgr directoryFromSourceInfo:sourceInfo.
-    module := mgr moduleFromSourceInfo:sourceInfo.  
+    module := mgr moduleFromSourceInfo:sourceInfo.
     fileName := mgr containerFromSourceInfo:sourceInfo.
     ^ self
-        askForExistingRevision:boxText 
-        title:title 
-        class:aClass 
-        manager:mgr 
-        module:module package:package 
-        fileName:fileName
+	askForExistingRevision:boxText
+	title:title
+	class:aClass
+	manager:mgr
+	module:module package:package
+	fileName:fileName
 
     "
      SourceCodeManagerUtilities
-        askForRevisionToCompare:'enter revision'
-        title:'revision'
-        class:Array
+	askForRevisionToCompare:'enter revision'
+	title:'revision'
+	class:Array
     "
 
     "Modified: / 12-09-2006 / 14:17:04 / cg"
@@ -3855,97 +3369,97 @@
      return a revision number, or nil if canceled."
 
     |partialLog revisions items newestRev
-     box y component resources 
+     box y component resources
      revisionHolder symbolicNames stableRevision releasedRevision
      tagHolder tagList lockChange|
 
     resources := self classResources.
 
     partialLog := aSourceCodeManager
-        revisionLogOf:clsOrNil
-        numberOfRevisions:20
-        fileName:fileName
-        directory:directory 
-        module:module.
+	revisionLogOf:clsOrNil
+	numberOfRevisions:20
+	fileName:fileName
+	directory:directory
+	module:module.
 
     partialLog notNil ifTrue:[
-        newestRev := partialLog at:#newestRevision.
-        revisions := partialLog at:#revisions.
-        symbolicNames := partialLog at:#symbolicNames ifAbsent:[].
-        symbolicNames notNil ifTrue:[
-            stableRevision := symbolicNames at:'stable' ifAbsent:[].
-            releasedRevision := symbolicNames at:'released' ifAbsent:[].
-            tagList := ((symbolicNames associations sort:[:a :b | self versionString:(a value) isLessThan:(b value)])
-                         collect:[:assoc | assoc key]) reverse.
-        ].
-            
-        items := revisions collect:[:each | |rev date who flag|
-                                        rev := each at:#revision.
-                                        date := (each at:#date ifAbsent:nil) ? '?'.
-                                        who := (each at:#author ifAbsent:nil) ? '?'.
-                                        rev = stableRevision ifTrue:[
-                                            flag := ' Stable' allBold.
-                                        ] ifFalse:[rev = releasedRevision ifTrue:[
-                                            flag := ' Released' allBold.
-                                        ] ifFalse:[
-                                            flag := ' '
-                                        ]].
-                                        rev allBold , flag, ' [' , date , ' by ' , who , ']'
-                                   ].
-        revisions := revisions collect:[:each | each at:#revision].
+	newestRev := partialLog at:#newestRevision.
+	revisions := partialLog at:#revisions.
+	symbolicNames := partialLog at:#symbolicNames ifAbsent:[].
+	symbolicNames notNil ifTrue:[
+	    stableRevision := symbolicNames at:'stable' ifAbsent:[].
+	    releasedRevision := symbolicNames at:'released' ifAbsent:[].
+	    tagList := ((symbolicNames associations sort:[:a :b | self versionString:(a value) isLessThan:(b value)])
+			 collect:[:assoc | assoc key]) reverse.
+	].
+
+	items := revisions collect:[:each | |rev date who flag|
+					rev := each at:#revision.
+					date := (each at:#date ifAbsent:nil) ? '?'.
+					who := (each at:#author ifAbsent:nil) ? '?'.
+					rev = stableRevision ifTrue:[
+					    flag := ' Stable' allBold.
+					] ifFalse:[rev = releasedRevision ifTrue:[
+					    flag := ' Released' allBold.
+					] ifFalse:[
+					    flag := ' '
+					]].
+					rev allBold , flag, ' [' , date , ' by ' , who , ']'
+				   ].
+	revisions := revisions collect:[:each | each at:#revision].
     ] ifFalse:[
-        newestRev := aSourceCodeManager newestRevisionInFile:fileName directory:directory module:module.
-        revisions := items := nil.
-
-        newestRev isNil ifTrue:[
-            (aSourceCodeManager checkForExistingContainer:fileName inModule:module directory:directory)
-            ifFalse:[
-                self warn:'Could not find/access the container for ',fileName,' in the repository.
+	newestRev := aSourceCodeManager newestRevisionInFile:fileName directory:directory module:module.
+	revisions := items := nil.
+
+	newestRev isNil ifTrue:[
+	    (aSourceCodeManager checkForExistingContainer:fileName inModule:module directory:directory)
+	    ifFalse:[
+		self warn:'Could not find/access the container for ',fileName,' in the repository.
 This could be due to:
     - invalid/wrong CVS-Root setting
     - missing CVS access rights
-        (no access / not logged in)
+	(no access / not logged in)
     - changed CVSRoot after compilation
-        (i.e. wrong CVS-path in classes version method)
+	(i.e. wrong CVS-path in classes version method)
 '.
-                ^ nil
-            ]
-        ]
+		^ nil
+	    ]
+	]
     ].
 
     lockChange := false.
     revisionHolder := newestRev asValue.
     revisionHolder onChangeEvaluate:[
-        "/ cut off everything after revision
-        |s first words tag|
-
-        s := revisionHolder value.
-        words := s asCollectionOfWords.
-        words size > 0 ifTrue:[
-            first := words first string.
-            first ~= s ifTrue:[
-                revisionHolder value:first
-            ]
-        ].
-        lockChange ifFalse:[
-            tagHolder value:''
-        ].
+	"/ cut off everything after revision
+	|s first words tag|
+
+	s := revisionHolder value.
+	words := s asCollectionOfWords.
+	words size > 0 ifTrue:[
+	    first := words first string.
+	    first ~= s ifTrue:[
+		revisionHolder value:first
+	    ]
+	].
+	lockChange ifFalse:[
+	    tagHolder value:''
+	].
     ].
 
     tagHolder := '' asValue.
-    tagHolder 
-        onChangeEvaluate:[
-            |tag rev|
-
-            (tag := tagHolder value) notEmptyOrNil ifTrue:[
-                rev := symbolicNames at:tag.
-                rev ~= revisionHolder value ifTrue:[
-                    lockChange := true.
-                    revisionHolder value:rev.
-                    lockChange := false.
-                ].
-            ]
-        ].
+    tagHolder
+	onChangeEvaluate:[
+	    |tag rev|
+
+	    (tag := tagHolder value) notEmptyOrNil ifTrue:[
+		rev := symbolicNames at:tag.
+		rev ~= revisionHolder value ifTrue:[
+		    lockChange := true.
+		    revisionHolder value:rev.
+		    lockChange := false.
+		].
+	    ]
+	].
 
     "/
     "/ open a dialog for this
@@ -3974,7 +3488,7 @@
     component list:tagList.
     component width:0.6; left:0.4.
     tagList isNil ifTrue:[
-        component disable
+	component disable
     ].
 
     box addVerticalSpace.
@@ -3982,14 +3496,14 @@
     box addAbortAndOkButtons.
 
     AbortAllOperationWantedQuery query ifTrue:[
-        (box addAbortButtonLabelled:'Cancel all') action:[AbortAllSignal raise].
+	(box addAbortButtonLabelled:'Cancel all') action:[AbortAllSignal raise].
     ].
 
     box showAtPointer.
 
     box accepted ifFalse:[
-        box destroy.
-        ^ nil
+	box destroy.
+	^ nil
     ].
     box destroy.
 
@@ -3997,13 +3511,13 @@
 
     "
      SourceCodeManagerUtilities
-        askForRevisionToCompare:'enter revision'
-        title:'revision'
-        class:nil
-        manager:SourceCodeManager 
-        module:'stx'
-        directory:'libbasic'
-        fileName:'Array.st'
+	askForRevisionToCompare:'enter revision'
+	title:'revision'
+	class:nil
+	manager:SourceCodeManager
+	module:'stx'
+	directory:'libbasic'
+	fileName:'Array.st'
     "
 
     "Modified: / 21-12-2011 / 23:09:26 / cg"
@@ -4011,10 +3525,10 @@
 
 checkAndWarnAboutBadMessagesInClass:aClass checkAgainHolder:checkAgainHolder
     "check if a class contains message-sends to:
-        #halt , #halt:
-        #error
-        #todo , #todo:
-        (and maybe more in the future)
+	#halt , #halt:
+	#error
+	#todo , #todo:
+	(and maybe more in the future)
 
      Only checks in non-extension methods - as this is only called when checking "
 
@@ -4024,62 +3538,62 @@
     resources := Dialog classResources.
 
     badStuff := #(
-        ( halt         'send of #halt (use for debugging only) - better use #error:''some message'' or #breakPoint:')
-        ( halt:        'send of #halt: (use for debugging only) - better use #error: or #breakPoint:')
-        ( error        'send of #error without descriptive message - better use #error:''some message''' )
-        ( todo         'send of #todo - unfinished code present?' )
-        ( todo:        'send of #todo:- unfinished code present?' )
+	( halt         'send of #halt (use for debugging only) - better use #error:''some message'' or #breakPoint:')
+	( halt:        'send of #halt: (use for debugging only) - better use #error: or #breakPoint:')
+	( error        'send of #error without descriptive message - better use #error:''some message''' )
+	( todo         'send of #todo - unfinished code present?' )
+	( todo:        'send of #todo:- unfinished code present?' )
     ).
 
     methodsWithBadStuff := Set new.
     whatIsBad := Set new.
     aClass theNonMetaclass instAndClassSelectorsAndMethodsDo:[:sel :mthd |
-        |setOfLiterals setOfSentMessages|
-
-        mthd package = aClass package ifTrue:[
-            setOfLiterals := mthd literals.  "/ try without parsing first.
-            (badStuff contains:[:eachEntry | setOfLiterals includes:eachEntry first]) ifTrue:[
-                setOfSentMessages := mthd messagesSent.
-                badStuff do:[:eachEntry | 
-                    (setOfSentMessages includes:eachEntry first) ifTrue:[
-                        whatIsBad add:eachEntry second.
-                        methodsWithBadStuff add:mthd.
-                    ]
-                ].
-            ].
-        ].
+	|setOfLiterals setOfSentMessages|
+
+	mthd package = aClass package ifTrue:[
+	    setOfLiterals := mthd literals.  "/ try without parsing first.
+	    (badStuff contains:[:eachEntry | setOfLiterals includes:eachEntry first]) ifTrue:[
+		setOfSentMessages := mthd messagesSent.
+		badStuff do:[:eachEntry |
+		    (setOfSentMessages includes:eachEntry first) ifTrue:[
+			whatIsBad add:eachEntry second.
+			methodsWithBadStuff add:mthd.
+		    ]
+		].
+	    ].
+	].
     ].
     whatIsBad isEmpty ifTrue:[^ true].
 
     (YesToAllQuery notNil and:[YesToAllQuery isHandled]) ifTrue:[
-        answer := YesToAllQuery query.
-        answer notNil ifTrue:[ ^ answer ].
+	answer := YesToAllQuery query.
+	answer notNil ifTrue:[ ^ answer ].
     ].
 
     msg := resources string:'%1 contains the following (considered bad style) message sends:' with:aClass name.
     msg := msg , '\\'.
     whatIsBad do:[:each |
-        msg := msg , '   ' , each , '\'
+	msg := msg , '   ' , each , '\'
     ].
     msg := msg , '\'.
     methodsWithBadStuff size == 1 ifTrue:[
-        msg := msg , (resources string:'In %1.' 
-                        with:methodsWithBadStuff anElement whoString allBold).
+	msg := msg , (resources string:'In %1.'
+			with:methodsWithBadStuff anElement whoString allBold).
     ] ifFalse:[
-        msg := msg , (resources string:'In %1 and %2 other methods.' 
-                        with:methodsWithBadStuff anElement whoString allBold 
-                        with:methodsWithBadStuff size-1).
+	msg := msg , (resources string:'In %1 and %2 other methods.'
+			with:methodsWithBadStuff anElement whoString allBold
+			with:methodsWithBadStuff size-1).
     ].
     msg := msg , '\\' , (resources string:'Do you really want to checkIn the %1 class ?' with:aClass name).
 
     (YesToAllNotification notNil and:[YesToAllNotification isHandled]) ifTrue:[
-        labels := #('Cancel All' 'Cancel' 'No to All' 'No' 'No, Browse' 'Yes to All' 'Yes') "#('Yes' 'Yes to All' 'No' 'No to All' 'Cancel')".
-        values := #(#cancelAll nil #noToAll #noBrowse false #yesToAll true) "#(true #yesToAll false #noToAll nil)".
-        defaultAnswer := #yesToAll.
+	labels := #('Cancel All' 'Cancel' 'No to All' 'No' 'No, Browse' 'Yes to All' 'Yes') "#('Yes' 'Yes to All' 'No' 'No to All' 'Cancel')".
+	values := #(#cancelAll nil #noToAll #noBrowse false #yesToAll true) "#(true #yesToAll false #noToAll nil)".
+	defaultAnswer := #yesToAll.
     ] ifFalse:[
-        labels := #('No' 'No, Browse' 'Yes').
-        values := #(false #noBrowse true).
-        defaultAnswer := true.
+	labels := #('No' 'No, Browse' 'Yes').
+	values := #(false #noBrowse true).
+	defaultAnswer := true.
     ].
 
 "/        AbortAllOperationRequest isHandled ifTrue:[
@@ -4088,53 +3602,53 @@
 "/        ].
 
     DialogBox aboutToOpenBoxNotificationSignal handle:[:ex |
-        |box|
-
-        checkAgainHolder isValueModel ifTrue:[
-            dontShowAgain := checkAgainHolder value not asValue.
-            box := ex parameter.
-            box addCheckBoxAtBottom:(resources string:'Do not show this Dialog again (reenable in Launcher).')
-                on:dontShowAgain.
-        ].
-        ex proceed.
+	|box|
+
+	checkAgainHolder isValueModel ifTrue:[
+	    dontShowAgain := checkAgainHolder value not asValue.
+	    box := ex parameter.
+	    box addCheckBoxAtBottom:(resources string:'Do not show this Dialog again (reenable in Launcher).')
+		on:dontShowAgain.
+	].
+	ex proceed.
     ] do:[
-        answer := OptionBox 
-                      request:msg withCRs
-                      label:(resources string:'Really CheckIn ?')
-                      image:(InfoBox iconBitmap)
-                      buttonLabels:(resources array:labels)
-                      values:values
-                      default:defaultAnswer
-                      onCancel:nil.
+	answer := OptionBox
+		      request:msg withCRs
+		      label:(resources string:'Really CheckIn ?')
+		      image:(InfoBox iconBitmap)
+		      buttonLabels:(resources array:labels)
+		      values:values
+		      default:defaultAnswer
+		      onCancel:nil.
     ].
     answer isNil ifTrue:[
-        AbortSignal raise.
+	AbortSignal raise.
     ].
 
     dontShowAgain notNil ifTrue:[
-        checkAgainHolder value:dontShowAgain value not 
+	checkAgainHolder value:dontShowAgain value not
     ].
 
     answer == #noBrowse ifTrue:[
-        UserPreferences browserClass browseMethods:methodsWithBadStuff title:'Methods with Bad Stuff'.
-        self yesToAllNotification queryWith:false.
-        ^ false
+	UserPreferences browserClass browseMethods:methodsWithBadStuff title:'Methods with Bad Stuff'.
+	self yesToAllNotification queryWith:false.
+	^ false
     ].
     answer == #cancelAll ifTrue:[
-        AbortAllSignal raise.
+	AbortAllSignal raise.
     ].
     answer == #yesToAll ifTrue:[
-        YesToAllNotification queryWith:true.
-        ^ true
+	YesToAllNotification queryWith:true.
+	^ true
     ].
     answer == #noToAll ifTrue:[
-        YesToAllNotification queryWith:false.
-        ^ false
+	YesToAllNotification queryWith:false.
+	^ false
     ].
     ^ answer
 
     "
-     self checkAndWarnAboutBadMessagesInClass:(SourceCodeManagerUtilities)  
+     self checkAndWarnAboutBadMessagesInClass:(SourceCodeManagerUtilities)
     "
 
     "Modified: / 28-02-2012 / 10:41:38 / cg"
@@ -4146,9 +3660,9 @@
      Return the info-object (actually: the dialog) or nil if aborted."
 
     ^ self
-        getCheckinInfoFor:aClassNameOrPackageNameString 
-        initialAnswer:initialAnswerOrNil
-        withQuickOption:false
+	getCheckinInfoFor:aClassNameOrPackageNameString
+	initialAnswer:initialAnswerOrNil
+	withQuickOption:false
 
     "
      SourceCodeManagerUtilities getCheckinInfoFor:'hello' initialAnswer:'bla'
@@ -4164,25 +3678,25 @@
 
     |logMsg infoDialog|
 
-    infoDialog := Tools::CheckinInfoDialog 
-                    getCheckinInfoFor:aClassNameOrPackageNameString 
-                    initialAnswer:(initialAnswerOrNil ? LastSourceLogMessage)
-                    withQuickOption:withQuickOption
-                    logHistory:(LastSourceLogMessages ? #()).
+    infoDialog := Tools::CheckinInfoDialog
+		    getCheckinInfoFor:aClassNameOrPackageNameString
+		    initialAnswer:(initialAnswerOrNil ? LastSourceLogMessage)
+		    withQuickOption:withQuickOption
+		    logHistory:(LastSourceLogMessages ? #()).
 
     infoDialog notNil ifTrue:[
-        logMsg := infoDialog logMessage.
-        logMsg notEmptyOrNil ifTrue:[
-            LastSourceLogMessage := logMsg.
-            LastSourceLogMessages isNil ifTrue:[
-                LastSourceLogMessages := OrderedCollection new.
-            ].
-            LastSourceLogMessages remove:logMsg ifAbsent:[].
-            LastSourceLogMessages addFirst:logMsg.
-            LastSourceLogMessages size > 10 ifTrue:[
-                LastSourceLogMessages removeLast
-            ].
-        ].
+	logMsg := infoDialog logMessage.
+	logMsg notEmptyOrNil ifTrue:[
+	    LastSourceLogMessage := logMsg.
+	    LastSourceLogMessages isNil ifTrue:[
+		LastSourceLogMessages := OrderedCollection new.
+	    ].
+	    LastSourceLogMessages remove:logMsg ifAbsent:[].
+	    LastSourceLogMessages addFirst:logMsg.
+	    LastSourceLogMessages size > 10 ifTrue:[
+		LastSourceLogMessages removeLast
+	    ].
+	].
     ].
     ^ infoDialog
 
@@ -4194,138 +3708,138 @@
 !
 
 goodInitialLogMessageForCheckinClassOfClass:aClass
-    "figure out, if there were any non-comment changes. 
+    "figure out, if there were any non-comment changes.
      Provide a reasonable initial log message (I am tired of typing in 'comment only')"
 
     |selectorsInChangeSet newSelectors modifiedSelectors
-     classChanges changesForThisClass definitionChangesForThisClass methodChangesForThisClass 
+     classChanges changesForThisClass definitionChangesForThisClass methodChangesForThisClass
      allMethodChangesForThisClass modifiedMethodsForThisClass newMethodsForThisClass removedMethodsForThisClass
      initialLogStream printSelectors selectorsWithCommentOrFormattingChangeOnly
-     selectorsWithVariableChangeOnly 
+     selectorsWithVariableChangeOnly
      removedSelectors categoryChanges categoryChangeSelectors|
 
     "/ a helper function
-    printSelectors := 
-        [:what :selectors |
-            initialLogStream 
-                nextPutAll:(what,':').
-            selectors size < 5 ifTrue:[
-                selectors size == 1 ifTrue:[
-                    initialLogStream 
-                        print: ' #';
-                        print: (selectors first);
-                        cr.
-                ] ifFalse:[
-                    initialLogStream cr.
-                    selectors asSortedCollection do:[:sel | initialLogStream tab; nextPutAll:'#'; nextPutLine:sel].
-                ]
-            ] ifFalse:[
-                initialLogStream 
-                    print: (selectors size);
-                    print: ' methods';
-                    cr.
-            ].
-        ].
+    printSelectors :=
+	[:what :selectors |
+	    initialLogStream
+		nextPutAll:(what,':').
+	    selectors size < 5 ifTrue:[
+		selectors size == 1 ifTrue:[
+		    initialLogStream
+			print: ' #';
+			print: (selectors first);
+			cr.
+		] ifFalse:[
+		    initialLogStream cr.
+		    selectors asSortedCollection do:[:sel | initialLogStream tab; nextPutAll:'#'; nextPutLine:sel].
+		]
+	    ] ifFalse:[
+		initialLogStream
+		    print: (selectors size);
+		    print: ' methods';
+		    cr.
+	    ].
+	].
 
     classChanges := ChangeSet current select:[:aChange | aChange isClassChange].
 
-    changesForThisClass := classChanges 
-                                select:[:aChange | aChange className = aClass theNonMetaclass name
-                                                   or:[aChange className = aClass theMetaclass name] ].
+    changesForThisClass := classChanges
+				select:[:aChange | aChange className = aClass theNonMetaclass name
+						   or:[aChange className = aClass theMetaclass name] ].
 
     definitionChangesForThisClass := changesForThisClass select:[:aChange | aChange isMethodChange not].
-    categoryChanges := changesForThisClass select:[:aChange | aChange isMethodCategoryChange]. 
+    categoryChanges := changesForThisClass select:[:aChange | aChange isMethodCategoryChange].
     categoryChangeSelectors := categoryChanges collect:[:aChange | aChange changeSelector] as:Set.
     allMethodChangesForThisClass := changesForThisClass select:[:aChange | aChange isMethodCodeChange].
     selectorsInChangeSet := allMethodChangesForThisClass collect:[:aChange | aChange changeSelector] as:Set.
     methodChangesForThisClass := selectorsInChangeSet collect:[:eachSelector |
-                                        allMethodChangesForThisClass detectLast:[:change | change changeSelector = eachSelector]] as:OrderedCollection.
-                                            
-    modifiedMethodsForThisClass := methodChangesForThisClass 
-                                select:[:aChange | aChange previousVersion notNil].
+					allMethodChangesForThisClass detectLast:[:change | change changeSelector = eachSelector]] as:OrderedCollection.
+
+    modifiedMethodsForThisClass := methodChangesForThisClass
+				select:[:aChange | aChange previousVersion notNil].
     modifiedSelectors := modifiedMethodsForThisClass collect:[:aChange | aChange changeSelector] as:Set.
 
-    newMethodsForThisClass := allMethodChangesForThisClass 
-                                select:[:aChange | aChange previousVersion isNil].
+    newMethodsForThisClass := allMethodChangesForThisClass
+				select:[:aChange | aChange previousVersion isNil].
     newSelectors := newMethodsForThisClass collect:[:aChange | aChange changeSelector] as:Set.
-    
-    removedMethodsForThisClass := allMethodChangesForThisClass 
-                                select:[:aChange | aChange isMethodRemoveChange].
+
+    removedMethodsForThisClass := allMethodChangesForThisClass
+				select:[:aChange | aChange isMethodRemoveChange].
     removedSelectors := removedMethodsForThisClass collect:[:aChange | aChange changeSelector] as:Set.
 
     initialLogStream := '' writeStream.
     "/ definition?
     "/ suppress definition-message if initial checkin
-    (aClass package isNil or:[aClass revision isNil]) ifFalse:[ 
-        definitionChangesForThisClass notEmpty ifTrue:[
-            initialLogStream 
-                print:'class definition'; cr.
-        ].
+    (aClass package isNil or:[aClass revision isNil]) ifFalse:[
+	definitionChangesForThisClass notEmpty ifTrue:[
+	    initialLogStream
+		print:'class definition'; cr.
+	].
     ].
 
     "/ added selectors?
     newSelectors notEmpty ifTrue:[
-        printSelectors value:'added' value:newSelectors.
+	printSelectors value:'added' value:newSelectors.
     ].
     modifiedSelectors removeAllFoundIn:newSelectors.
     categoryChangeSelectors removeAllFoundIn:newSelectors.
 
     "/ removed selectors?
     removedSelectors notEmpty ifTrue:[
-        printSelectors value:'removed' value:removedSelectors.
+	printSelectors value:'removed' value:removedSelectors.
     ].
     modifiedSelectors removeAllFoundIn:removedSelectors.
     categoryChangeSelectors removeAllFoundIn:removedSelectors.
 
     "/ modifications?
     modifiedSelectors notEmpty ifTrue:[
-        selectorsWithCommentOrFormattingChangeOnly := Set new.
-        selectorsWithVariableChangeOnly := Set new.
-
-        "/ cehck for format/comment change
-        RBParser notNil ifTrue:[
-            modifiedSelectors do:[:eachSelector |
-                |oldest newest oldMethod newMethod oldTree newTree variableMapping|
-
-                (newSelectors includes:eachSelector) ifFalse:[
-                    oldest := allMethodChangesForThisClass detect:[:change | change changeSelector = eachSelector].
-                    newest := allMethodChangesForThisClass detectLast:[:change | change changeSelector = eachSelector].
-
-                    oldest := oldest previousVersion notNil ifTrue:[oldest previousVersion] ifFalse:[oldest].
-
-                    oldTree := RBParser parseMethod:oldest source onError:[:aString :pos | nil].
-                    newTree := RBParser parseMethod:newest source onError:[:aString :pos | nil].
-                    (oldTree notNil and:[newTree notNil]) ifTrue:[
-                        variableMapping := Dictionary new.
-                        (oldTree equalTo:newTree withMapping: variableMapping) ifTrue:[
-                            (variableMapping at:'self' ifAbsent:nil) = 'self' ifTrue:[
-                                ((variableMapping associations count:[:assoc | assoc key ~= assoc value]) == 0) ifTrue:[
-                                    selectorsWithCommentOrFormattingChangeOnly add:eachSelector.
-                                ] ifFalse:[
-                                    selectorsWithVariableChangeOnly add:eachSelector.
-                                ].
-                            ].
-                        ].
-                    ].
-                ]
-            ].
-        ].
-
-        modifiedSelectors removeAllFoundIn:selectorsWithCommentOrFormattingChangeOnly.
-        modifiedSelectors removeAllFoundIn:selectorsWithVariableChangeOnly.
-
-        (selectorsWithCommentOrFormattingChangeOnly notEmpty) ifTrue:[
-            printSelectors value:'comment/format in' value:selectorsWithCommentOrFormattingChangeOnly.
-        ].
-        (selectorsWithVariableChangeOnly notEmpty) ifTrue:[
-            printSelectors value:'variable renamed in' value:selectorsWithVariableChangeOnly.
-        ].
-        (modifiedSelectors notEmpty) ifTrue:[
-            printSelectors value:'changed' value:modifiedSelectors.
-        ].
+	selectorsWithCommentOrFormattingChangeOnly := Set new.
+	selectorsWithVariableChangeOnly := Set new.
+
+	"/ cehck for format/comment change
+	RBParser notNil ifTrue:[
+	    modifiedSelectors do:[:eachSelector |
+		|oldest newest oldMethod newMethod oldTree newTree variableMapping|
+
+		(newSelectors includes:eachSelector) ifFalse:[
+		    oldest := allMethodChangesForThisClass detect:[:change | change changeSelector = eachSelector].
+		    newest := allMethodChangesForThisClass detectLast:[:change | change changeSelector = eachSelector].
+
+		    oldest := oldest previousVersion notNil ifTrue:[oldest previousVersion] ifFalse:[oldest].
+
+		    oldTree := RBParser parseMethod:oldest source onError:[:aString :pos | nil].
+		    newTree := RBParser parseMethod:newest source onError:[:aString :pos | nil].
+		    (oldTree notNil and:[newTree notNil]) ifTrue:[
+			variableMapping := Dictionary new.
+			(oldTree equalTo:newTree withMapping: variableMapping) ifTrue:[
+			    (variableMapping at:'self' ifAbsent:nil) = 'self' ifTrue:[
+				((variableMapping associations count:[:assoc | assoc key ~= assoc value]) == 0) ifTrue:[
+				    selectorsWithCommentOrFormattingChangeOnly add:eachSelector.
+				] ifFalse:[
+				    selectorsWithVariableChangeOnly add:eachSelector.
+				].
+			    ].
+			].
+		    ].
+		]
+	    ].
+	].
+
+	modifiedSelectors removeAllFoundIn:selectorsWithCommentOrFormattingChangeOnly.
+	modifiedSelectors removeAllFoundIn:selectorsWithVariableChangeOnly.
+
+	(selectorsWithCommentOrFormattingChangeOnly notEmpty) ifTrue:[
+	    printSelectors value:'comment/format in' value:selectorsWithCommentOrFormattingChangeOnly.
+	].
+	(selectorsWithVariableChangeOnly notEmpty) ifTrue:[
+	    printSelectors value:'variable renamed in' value:selectorsWithVariableChangeOnly.
+	].
+	(modifiedSelectors notEmpty) ifTrue:[
+	    printSelectors value:'changed' value:modifiedSelectors.
+	].
     ].
     categoryChanges notEmpty ifTrue:[
-        printSelectors value:'category of' value:categoryChangeSelectors.
+	printSelectors value:'category of' value:categoryChangeSelectors.
     ].
     ^ initialLogStream contents
 
@@ -4336,10 +3850,10 @@
 
 guessEncodingOfFile:aFilename
     "look for a string
-        encoding #name
+	encoding #name
      or:
-        encoding: name
-     within the given buffer 
+	encoding: name
+     within the given buffer
      (which is usually the first few bytes of a textFile).
      If that's not found, use heuristics (in CharacterArray) to guess."
 
@@ -4358,9 +3872,9 @@
 
 guessEncodingOfStream:aStream
     "look for a string of the form
-            encoding #name
+	    encoding #name
      or:
-            encoding: name
+	    encoding: name
      in the first few bytes of aStream."
 
     <resource: #obsolete>
@@ -4372,13 +3886,13 @@
 !SourceCodeManagerUtilities class methodsFor:'documentation'!
 
 version
-    ^ '$Id: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilities.st,v 1.250 2012/06/02 09:01:13 cg Exp$'
+    ^ '$Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilities.st,v 1.253 2012/07/25 23:28:36 cg Exp $'
 !
 
 version_CVS
-    ^ '§Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilities.st,v 1.250 2012/06/02 09:01:13 cg Exp§'
+    ^ '§Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilities.st,v 1.253 2012/07/25 23:28:36 cg Exp §'
 !
 
 version_SVN
-    ^ '$Id: SourceCodeManagerUtilities.st 1934 2012-07-23 17:33:44Z vranyj1 $'
+    ^ '$Id: SourceCodeManagerUtilities.st 1940 2012-07-26 15:09:40Z vranyj1 $'
 ! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SourceCodeManagerUtilitiesForContainerBasedManagers.st	Thu Jul 26 16:09:40 2012 +0100
@@ -0,0 +1,719 @@
+"
+ COPYRIGHT (c) 2012 eXept Software AG
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libbasic3' }"
+
+SourceCodeManagerUtilities subclass:#SourceCodeManagerUtilitiesForContainerBasedManagers
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'System-SourceCodeManagement'
+!
+
+!SourceCodeManagerUtilitiesForContainerBasedManagers class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 2012 eXept Software AG
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+! !
+
+!SourceCodeManagerUtilitiesForContainerBasedManagers methodsFor:'utilities-cvs'!
+
+checkinBuildSupportFilesForPackage:packageID 
+    |anyFailure module directory mgr defClass |
+
+    mgr := self sourceCodeManagerFor: packageID. 
+    defClass := ProjectDefinition definitionClassForPackage: packageID.
+
+    defClass validateDescription.
+
+    anyFailure := false.
+
+    module := packageID asPackageId module.
+    directory := packageID asPackageId directory.
+
+    self activityNotification:(resources string:'checking in build-support files...').
+    (mgr checkForExistingModule:module directory:directory) ifFalse:[
+        mgr createModule:module directory:directory
+    ].
+
+    defClass forEachFileNameAndGeneratedContentsDo:[:fileName :fileContents |
+        |realFileName realDirectory|
+
+        "/ care for subdirectories
+        (fileName includes:$/) ifTrue:[
+            realDirectory := (directory asFilename construct:(fileName asFilename directoryName)) name.
+            realFileName := fileName asFilename baseName.
+        ] ifFalse:[
+            realDirectory := directory.
+            realFileName := fileName.
+        ].
+        realDirectory := realDirectory replaceAll:$\ with:$/.
+
+        self activityNotification:(resources string:'checking in %1...' with:realFileName).
+
+        UserInformation
+            handle:[:ex | Transcript showCR:ex description ]
+            do:[
+                (mgr isContainerBased
+                and:[
+                    (mgr checkForExistingContainer:realFileName inModule:module directory:realDirectory) not
+                ]) ifTrue:[
+                    realDirectory ~= directory ifTrue:[
+                        (mgr checkForExistingModule:module directory:realDirectory) ifFalse:[
+                            mgr createModule:module directory:realDirectory
+                        ].
+                    ].
+                    (mgr
+                        createContainerForText:fileContents
+                        inModule:module
+                        package:realDirectory
+                        container:realFileName)
+                            ifFalse:[
+                                Dialog warn:(resources
+                                            stringWithCRs:'Cannot create new container: ''%3'' (in %1:%2)'
+                                            with:module
+                                            with:realDirectory
+                                            with:realFileName)
+                            ].
+                ] ifFalse:[
+                    (mgr
+                        checkin:realFileName
+                        text:fileContents
+                        directory:realDirectory
+                        module:module
+                        logMessage:'automatically generated by browser'
+                        force:false)
+                            ifFalse:[
+                                Transcript showCR:'checkin of ' , realFileName , ' failed'.
+                                anyFailure := true.
+                            ].
+                ].
+            ].
+    ].
+
+    defClass instAndClassMethodsDo:[:m | m package:defClass package].
+
+    self
+        checkinClasses:(Array with:defClass)
+        withInfo:'automatic checkIn'
+        withCheck:false.
+
+
+    self activityNotification:nil.
+
+    anyFailure ifTrue:[
+        self warn:'Checkin failed - see Transcript.'.
+        self activityNotification:'Checkin of build-support files failed - see Transcript.'.
+    ] ifFalse:[
+        self activityNotification:'Build-support files checked into the repository.'.
+    ].
+
+    "Created: / 09-08-2006 / 18:59:42 / fm"
+    "Modified: / 12-10-2011 / 11:36:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 25-07-2012 / 14:27:30 / cg"
+    "Modified (format): / 25-07-2012 / 22:25:48 / cg"
+!
+
+checkinClass:aClass
+    "check a class into the source repository.
+     Asks interactively for a log-message."
+
+    ^ self checkinClass:aClass withInfo:nil
+!
+
+checkinClass:aClass withInfo:aLogInfoOrNil
+    "check a class into the source repository.
+     If the argument, aLogInfoOrNil isNil, ask interactively for a log-message."
+
+    ^ self checkinClass:aClass withInfo:aLogInfoOrNil withCheck:true
+!
+
+checkinClass:aClass withInfo:aLogInfoOrNil withCheck:doCheckClass
+    "check a class into the source repository.
+     If the argument, aLogInfoOrNil isNil, ask interactively for log-message.
+     If doCheckClass is true, the class is checked for send of halts etc."
+
+    ^ self 
+        checkinClass:aClass 
+        withInfo:aLogInfoOrNil 
+        withCheck:doCheckClass 
+        usingManager:(self sourceCodeManagerFor:aClass)
+
+    "Modified: / 21-12-2011 / 18:19:55 / cg"
+!
+
+checkinClass:aClass withInfo:aLogInfoOrNil withCheck:doCheckClass usingManager:managerOrNil
+    "check a class into the source repository.
+     If the argument, aLogInfoOrNil isNil, ask interactively for log-message.
+     If doCheckClass is true, the class is checked for send of halts etc."
+
+    |logMessage checkinInfo mgr pri resources|
+
+    aClass isLoaded ifFalse:[
+        self information:(resources string:'Cannot checkin unloaded classes (%1)' with:aClass name).
+        ^ false.
+    ].
+
+    mgr := managerOrNil.
+    mgr isNil ifTrue:[
+        mgr := self sourceCodeManagerFor:aClass.
+        mgr isNil ifTrue:[
+            ^ false
+        ]
+    ].
+
+    self ensureCorrectVersionMethodsInClass:aClass usingManager:mgr.
+    mgr supportsCheckinLogMessages ifTrue:[
+        (self 
+            getLogMessageForClassCheckinTakingDefaultsFromPreviousLogInfo:aLogInfoOrNil 
+            forClass:aClass
+            valuesInto:[:logMessageRet :checkinInfoRet |
+                logMessage := logMessageRet.
+                checkinInfo := checkinInfoRet.
+            ]
+        ) ifFalse:[^ false].
+    ].
+
+    resources := self classResources.
+
+    (self classIsNotYetInRepository:aClass withManager:mgr) ifTrue:[
+        (self createSourceContainerForClass:aClass usingManager:mgr) ifFalse:[
+"/            self warn:'did not create a container for ''' , aClass name , ''''.
+            ^ false
+        ].
+        ^ true.
+    ].
+
+    self activityNotification:(resources string:'checking in %1' with:aClass name).
+    pri := Processor activePriority.
+    Processor activeProcess withPriority:pri-1 to:pri
+    do:[
+        |revision aborted freshCreated|
+
+        freshCreated := false.
+        revision := aClass revision.
+        revision isNil ifTrue:[ 
+            mgr isContainerBased ifTrue:[
+                "/ mhmh - check if it has a container.
+                (mgr checkForExistingContainerForClass:aClass) ifFalse:[
+                    (self createSourceContainerForClass:aClass usingManager:mgr) ifFalse:[
+                        self warn:'Did not create/change repository container for ''' , aClass name allBold , ''''.
+                        ^ false.
+                    ].
+                    freshCreated := true.
+                ]
+            ]
+        ].
+
+        doCheckClass value ifTrue:[
+            "/ check if the class contains halts, error-sends etc.
+            (self checkAndWarnAboutBadMessagesInClass:aClass checkAgainHolder:doCheckClass) ifFalse:[
+                ^ false
+            ].
+        ].
+
+        freshCreated ifFalse:[
+            aborted := false.
+            AbortOperationRequest handle:[:ex |
+                aborted := true.
+                ex return.
+            ] do:[
+                |checkinState cause|
+                checkinState := false.
+                cause := ''.
+                [
+                    checkinState := mgr checkinClass:aClass logMessage:logMessage
+                ] on:SourceCodeManagerError do:[:ex| 
+                    cause := ex description.
+                    ex proceed.
+                ].
+
+                checkinState ifFalse:[
+                    Transcript showCR:'checkin of ''' , aClass name , ''' failed - ', cause.
+                    self warn:(resources stringWithCRs:'Checkin of "%1" failed\\' with:aClass name allBold),cause.
+                    ^ false.
+                ].
+                checkinInfo notNil ifTrue:[
+                    checkinInfo isStable ifTrue:[
+                        "set stable tag for class that has been checked in"
+                        self tagClass:aClass as:#stable.
+                    ].
+                    checkinInfo tagIt ifTrue:[
+                        "set an additional tag for class that has been checked in"
+                        self tagClass:aClass as:(checkinInfo tag).
+                    ].
+                ].
+            ].
+            aborted ifTrue:[
+                Transcript showCR:'Checkin of ''' , aClass name , ''' aborted'.
+
+                AbortAllOperationWantedQuery query ifTrue:[
+                    (Dialog 
+                        confirm:(resources stringWithCRs:'Checkin of "%1" aborted.\\Cancel all ?' with:aClass name)
+                        default:false)
+                    ifTrue:[
+                        AbortAllOperationRequest raise.
+                    ]
+                ].
+                ^ false.
+            ].
+        ].
+    ].
+    ^ true
+
+    "Created: / 21-12-2011 / 18:19:14 / cg"
+!
+
+checkinClasses:aCollectionOfClass
+    "check a collection of classes into the source repository.
+     Asks interactively for log-message."
+
+    ^ self checkinClasses:aCollectionOfClass withInfo:nil
+!
+
+checkinClasses:aCollectionOfClasses withInfo:aLogInfoOrNil
+    "check a bunch of classes into the source repository.
+     If the argument, aLogInfoOrNil isNil, ask interactively for log-message."
+
+    ^ self
+        checkinClasses:aCollectionOfClasses 
+        withInfo:aLogInfoOrNil 
+        withCheck:(UserPreferences current at:#checkClassesWhenCheckingIn ifAbsent:true)
+!
+
+checkinClasses:aCollectionOfClasses withInfo:aLogInfoOrStringNil withCheck:doCheckClasses
+    "check a bunch of classes into the source repository.
+     If the argument, aLogInfoOrStringNil isNil, ask interactively for log-message."
+
+    self checkinClasses:aCollectionOfClasses withInfo:aLogInfoOrStringNil withCheck:doCheckClasses usingManager:nil
+
+    "Modified: / 21-12-2011 / 18:24:47 / cg"
+!
+
+checkinClasses:aCollectionOfClasses withInfo:aLogInfoOrStringNil withCheck:doCheckClasses usingManager:aManagerOrNil
+    "check a bunch of classes into the source repository.
+     If the argument, aLogInfoOrStringNil isNil, ask interactively for log-message."
+
+    |classes allClasses checkinInfoOrString resources yesOrNoToAll unchangedClasses|
+
+    "/ ignore private classes
+    classes := aCollectionOfClasses select:[:aClass | aClass owningClass isNil].
+    classes isEmpty ifTrue:[
+        self information:'Only private classes given - nothing checked in.'.
+        ^ self
+    ].
+    classes := classes select:[:aClass | aClass isLoaded].
+    classes isEmpty ifTrue:[
+        self information:'Only unloaded classes given - nothing checked in.'.
+        ^ self
+    ].
+
+    classes size == 1 ifTrue:[
+        ^ self checkinClass:classes first withInfo:aLogInfoOrStringNil withCheck:doCheckClasses usingManager:aManagerOrNil.
+    ].
+
+    resources := self classResources.
+
+    "ask once, for all classes"
+    aLogInfoOrStringNil isNil ifTrue:[
+        checkinInfoOrString := self 
+                        getCheckinInfoFor:(resources string:'%1 classes to checkin' with:aCollectionOfClasses size)
+                        initialAnswer:nil
+                        withQuickOption:true.
+        checkinInfoOrString isNil ifTrue:[^ self].
+    ] ifFalse:[
+        checkinInfoOrString := aLogInfoOrStringNil.
+    ].
+
+    allClasses := classes.    
+    checkinInfoOrString quickCheckIn ifTrue:[
+        classes := classes select:[:aClass | aClass hasUnsavedChanges].
+        classes isEmpty ifTrue:[ Dialog information:'no changes to checkin (quickCheckIn)' ]
+    ].
+
+    "abortAll is handled, and also asked for here!!"
+    AbortAllOperationRequest handleAndAnswerQueryIn:[
+        classes notEmpty ifTrue:[
+            self yesToAllNotification handle:[:ex |
+                yesOrNoToAll := ex parameter.
+                ex proceed
+            ] do:[
+                self yesToAllQuery handle:[:ex |
+                    ex proceedWith:yesOrNoToAll
+                ] do:[
+                    classes do:[:aClass |
+                        self activityNotification:(resources string:'checking in %1' with:aClass name).
+                        "/ ca does not want boxes to pop up all over ...
+                        UserInformation handle:[:ex |
+                            Transcript showCR:ex description.
+                            ex proceed.
+                        ] do:[
+                            AbortOperationRequest catch:[
+                                self 
+                                    checkinClass:aClass 
+                                    withInfo:checkinInfoOrString 
+                                    withCheck:doCheckClasses
+                                    usingManager:aManagerOrNil
+                            ]
+                        ].
+                    ].
+                ]
+            ].
+        ].
+
+        (checkinInfoOrString isStable or:[checkinInfoOrString tagIt])
+        ifTrue:[
+            "/mhmh - but tag should be set on all (even unchanged ones)
+            "/ the other onces have already been tagged
+            unchangedClasses := allClasses select:[:eachClass | (classes includes:eachClass) not].
+
+            "mhmh - could still have to tag them"
+            checkinInfoOrString isStable ifTrue:[
+                unchangedClasses do:[:eachClass |
+                    self tagClass:eachClass as:#stable.
+                ].
+            ].
+            checkinInfoOrString tagIt ifTrue:[
+                unchangedClasses do:[:eachClass |
+                    self tagClass:eachClass as:(checkinInfoOrString tag).
+                ].
+            ].
+        ].
+    ].
+
+    "Created: / 21-12-2011 / 18:24:25 / cg"
+!
+
+checkinExtensionMethods:aCollectionOfMethods forPackage:aPackageID withInfo:aLogInfoOrStringOrNil
+    "checkin a projects extensions into the source repository.
+     If the argument, aLogInfoOrStringOrNil isNil, ask interactively for log-message."
+
+    |logMessage checkinInfo mgr pri resources module directory containerFileName methodSource|
+
+    resources := self classResources.
+
+    "/ the following is wrong - must ask the projectDefinition !!
+    aPackageID asPackageId projectDefinitionClass notNil ifTrue:[
+        mgr := self sourceCodeManagerFor:aPackageID asPackageId projectDefinitionClass.
+    ] ifFalse:[
+        mgr := self sourceCodeManagerFor:aCollectionOfMethods first mclass.
+    ].
+    mgr isNil ifTrue:[ ^ false ].
+
+    module := aPackageID asPackageId module.
+    directory := aPackageID asPackageId directory.
+    containerFileName := self nameOfExtensionsContainer.
+
+    aLogInfoOrStringOrNil isNil ifTrue:[
+        checkinInfo := self getCheckinInfoFor:containerFileName allBold initialAnswer:nil.
+        checkinInfo isNil ifTrue:[^ false].
+        logMessage := checkinInfo logMessage.
+    ] ifFalse:[
+        aLogInfoOrStringOrNil isString ifTrue:[
+            logMessage := aLogInfoOrStringOrNil
+        ] ifFalse:[
+            checkinInfo := aLogInfoOrStringOrNil.
+            logMessage := checkinInfo logMessage.
+        ].
+    ].
+
+    (mgr checkForExistingContainer:containerFileName inModule:module directory:directory) ifFalse:[
+        (self checkForExistingModule:module usingManager:mgr allowCreate:true) ifFalse:[^ false].
+        LastModule := module.
+
+        (self checkForExistingModule:module directory:directory usingManager:mgr allowCreate:true) ifFalse:[^ false].
+        LastPackage := directory.
+
+        (self checkForExistingModule:module directory:directory container:containerFileName usingManager:mgr allowCreate:true) ifFalse:[^ false].
+    ].
+
+    self activityNotification:(resources string:'Checking in %1' with:containerFileName).
+    pri := Processor activePriority.
+    Processor activeProcess 
+        withPriority:pri-1 to:pri
+        do:[
+            methodSource := self sourceCodeForExtensions:aCollectionOfMethods package:aPackageID forManager:mgr.
+
+            UserInformation handle:[:ex |
+                Transcript showCR:ex description.
+                ex proceed.
+            ] do:[
+                Transcript showCR:('checking in ',containerFileName,' ...').
+                (mgr 
+                    checkin:containerFileName
+                    text:methodSource
+                    directory:directory 
+                    module:module
+                    logMessage:logMessage
+                    force:false) 
+                ifFalse:[
+                    Transcript showCR:'Checkin of ''' , containerFileName , ''' failed'.
+                    self warn:'Checkin of ''' , containerFileName allBold , ''' failed'.
+                    ^ false.
+                ].
+                checkinInfo notNil ifTrue:[
+                    |path|
+
+                    path := (module, '/', directory, '/', containerFileName).
+                    checkinInfo isStable ifTrue:[
+                        "set stable tag for class that has been checked in"
+                        self tagPath:path as:#stable usingManager:mgr.    
+                    ].
+                    checkinInfo tagIt ifTrue:[
+                        "set an additional tag for class that has been checked in"
+                        self tagPath:path as:(checkinInfo tag) usingManager:mgr.    
+                    ].
+                ].
+                mgr postCheckInExtensionsForPackage:aPackageID    
+            ].
+        ].
+    ^ true
+
+    "Modified: / 25-07-2012 / 18:38:40 / cg"
+!
+
+checkinPackage:packageToCheckIn classes:doClasses extensions:doExtensions buildSupport:doBuild askForMethodsInOtherPackages:askForMethodsInOtherPackages
+    |mgr classes classesToCheckIn methodsToCheckIn
+     methodsInOtherPackages looseMethods otherPackages
+     msg classesInChangeSet checkinInfo originalCheckinInfo classesToTag|
+
+    mgr := self sourceCodeManagerFor: packageToCheckIn.
+    classes := Smalltalk allClasses.
+
+    classesToCheckIn := IdentitySet new.
+    methodsToCheckIn := IdentitySet new.
+    methodsInOtherPackages := IdentitySet new.
+    looseMethods := IdentitySet new.
+
+    "/ classes ...
+    classes do:[:aClass | |owner classPackage|
+        (owner := aClass owningClass) notNil ifTrue:[
+            classPackage := aClass topOwningClass package
+        ] ifFalse:[
+            classPackage := aClass package
+        ].
+        (classPackage = packageToCheckIn) ifTrue:[
+            classesToCheckIn add:aClass.
+        ].
+    ].
+
+    "/ cg: O(n^2) algorithm
+    "/  classesInChangeSet := classesToCheckIn select:[:cls | cls hasUnsavedChanges].
+    "/ replaced by: O(n) algorithm
+    classesInChangeSet := ChangeSet current selectForWhichIncludesChangeForClassOrMetaclassOrPrivateClassFrom:classesToCheckIn. 
+
+    "/ individual methods ...
+    classes do:[:aClass |
+        aClass isMeta ifFalse:[
+            "/ ... whose class is not in the chechIn-set
+            (classesToCheckIn includes:aClass) ifFalse:[
+                aClass instAndClassSelectorsAndMethodsDo:[:sel :mthd |
+                    "/ methods in this project ...
+                    (mthd package = packageToCheckIn) ifTrue:[
+                        methodsToCheckIn add:mthd
+                    ]
+                ]
+            ].
+        ].
+    ].
+
+    doExtensions ifTrue:[
+        methodsToCheckIn notEmpty ifTrue:[
+            doClasses ifTrue:[
+                msg := '%1 classes (%4 changed) '.
+            ] ifFalse:[
+                msg := ''.
+            ].
+            doExtensions ifTrue:[
+                doClasses ifTrue:[
+                    msg := msg , 'and '.
+                ].
+                msg := msg , '%2 extensions '.
+            ].
+            msg := msg , 'of project "%3"'.
+
+            checkinInfo := self
+                        getCheckinInfoFor:(msg
+                                                    bindWith:classesToCheckIn size
+                                                    with:methodsToCheckIn size
+                                                    with:packageToCheckIn allBold
+                                                    with:classesInChangeSet size)
+                        initialAnswer:nil
+                        withQuickOption:(classesToCheckIn size > 0).
+            checkinInfo isNil ifTrue:[
+                ^ self.
+            ].
+            (self
+                checkinExtensionMethods:methodsToCheckIn
+                forPackage:packageToCheckIn
+                withInfo:checkinInfo)
+            ifFalse:[
+                Dialog warn:(resources string:'Could not check in extensions for project %1' with:packageToCheckIn).
+                ^ self.
+            ]
+        ] ifFalse:[
+            "/ there may have been extension-methods previously - if so, remove them
+            (mgr
+                checkForExistingContainer:'extensions.st' inPackage:packageToCheckIn)
+            ifTrue:[
+"/ self halt.
+                (self
+                    checkinExtensionMethods:#()
+                    forPackage:packageToCheckIn
+                    withInfo:'No extensions any more')
+                ifFalse:[
+                    Dialog warn:(resources string:'Could not check in extensions for project %1' with:packageToCheckIn).
+                    ^ self.
+                ]
+            ]
+        ].
+    ].
+
+    checkinInfo isNil ifTrue:[
+        checkinInfo := self
+                    getCheckinInfoFor:('%1 classes (%4 changed) and %2 extensions for project "%3"'
+                                                        bindWith:classesToCheckIn size
+                                                        with:methodsToCheckIn size
+                                                        with:packageToCheckIn allBold
+                                                        with:classesInChangeSet size)
+                    initialAnswer:nil
+                    withQuickOption:(classesToCheckIn size > 0).
+        checkinInfo isNil ifTrue:[
+            ^ self.
+        ].
+    ].
+
+    checkinInfo quickCheckIn ifTrue:[
+        (checkinInfo isStable or:[checkinInfo tagIt]) ifTrue:[
+            classesToTag := classesToCheckIn.
+            originalCheckinInfo := checkinInfo.
+            checkinInfo := checkinInfo copy.
+            checkinInfo isStable:false.
+            checkinInfo tag:nil.
+        ].
+        classesToCheckIn := classesInChangeSet.
+    ].
+
+    "/ check if any of the classes contains methods for other packages ...
+    classesToCheckIn do:[:eachClass |
+        eachClass instAndClassMethodsDo:[:eachMethod |
+            |mPgk|
+
+            mPgk := eachMethod package.
+            (mPgk = packageToCheckIn) ifFalse:[
+                mPgk == PackageId noProjectID ifTrue:[
+                    looseMethods add:eachMethod
+                ] ifFalse:[
+                    methodsInOtherPackages add:eachMethod
+                ]
+            ]
+        ].
+    ].
+
+    askForMethodsInOtherPackages ifTrue:[
+        methodsInOtherPackages notEmpty ifTrue:[
+            otherPackages := Set new.
+            methodsInOtherPackages do:[:eachMethod | otherPackages add:eachMethod package].
+
+            methodsInOtherPackages size == 1 ifTrue:[
+                msg := 'The ''%4'' method in ''%5'' is contained in the ''%2'' package.'.
+                msg := msg , '\\This method will remain in its package.'.
+            ] ifFalse:[
+                otherPackages size == 1 ifTrue:[
+                    msg := 'The %1 methods from the %2 package will remain in its package.'
+                ] ifFalse:[
+                    msg := 'The %1 methods from %3 other packages will remain in their packages.'
+                ].
+                msg := msg , '\\Hint: if these are meant to belong to this package,'.
+                msg := msg , '\move them first, then repeat the checkin operation.'.
+            ].
+            msg := msg withCRs.
+            msg := msg bindWith:methodsInOtherPackages size
+                           with:otherPackages first allBold
+                           with:otherPackages size
+                           with:methodsInOtherPackages first selector allBold
+                           with:methodsInOtherPackages first mclass name allBold.
+            (Dialog confirm:msg noLabel:(resources string:'Cancel')) ifFalse:[^ self].
+        ].
+    ].
+
+    doClasses ifTrue:[
+        classesToCheckIn notEmpty ifTrue:[
+            looseMethods notEmpty ifTrue:[
+                looseMethods size == 1 ifTrue:[
+                    msg := 'The ''%2'' method in ''%3'' is unassigned (loose).'.
+                    msg := msg , '\\If you proceed, this method will be moved to the ''%4'' package'.
+                    msg := msg , '\\Hint: if this is meant to be an extension of another package,'.
+                    msg := msg , '\cancel and move it to the appropriate package first.'.
+                ] ifFalse:[
+                    msg := 'There are %1 unassigned (loose) methods in classes from this project.'.
+                    msg := msg , '\\If you proceed, those will be moved to the ''%4'' package ?'.
+                    msg := msg , '\\Hint: if these are meant to be extensions of another package,'.
+                    msg := msg , '\cancel and move them to the appropriate package first.'.
+                ].
+                doClasses ifTrue:[
+                    msg := msg , '\\If you answer with "No" here, you will be asked for each class individually.'.
+                ].
+                msg := msg withCRs.
+                msg := msg bindWith:looseMethods size
+                               with:(looseMethods isEmpty ifTrue:[''] ifFalse:[looseMethods first selector allBold])
+                               with:(looseMethods isEmpty ifTrue:[''] ifFalse:[looseMethods first mclass name allBold])
+                               with:packageToCheckIn allBold.
+                (Dialog confirm:msg noLabel:(resources string:'Cancel')) ifFalse:[^ self].
+
+                looseMethods do:[:mthd |
+                    mthd package:packageToCheckIn
+                ].
+            ].
+            self checkinClasses:classesToCheckIn withInfo:checkinInfo.
+        ].
+
+        originalCheckinInfo notNil ifTrue:[
+            originalCheckinInfo isStable ifTrue:[
+                classesToTag do:[:eachClass |
+                    self tagClass:eachClass as:#stable
+                ].
+            ].
+            originalCheckinInfo tagIt ifTrue:[
+                classesToTag do:[:eachClass |
+                    self tagClass:eachClass as:(originalCheckinInfo tag)
+                ].
+            ].
+        ].
+    ].
+
+    doBuild ifTrue:[
+        self checkinBuildSupportFilesForPackage:packageToCheckIn
+    ].
+
+    "Modified: / 08-09-2011 / 04:42:38 / cg"
+    "Created: / 13-10-2011 / 11:15:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!SourceCodeManagerUtilitiesForContainerBasedManagers class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilitiesForContainerBasedManagers.st,v 1.1 2012/07/25 23:29:44 cg Exp $'
+!
+
+version_CVS
+    ^ '§Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilitiesForContainerBasedManagers.st,v 1.1 2012/07/25 23:29:44 cg Exp §'
+! !
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SourceCodeManagerUtilitiesForWorkspaceBasedManagers.st	Thu Jul 26 16:09:40 2012 +0100
@@ -0,0 +1,222 @@
+"
+ COPYRIGHT (c) 2012 eXept Software AG
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libbasic3' }"
+
+SourceCodeManagerUtilities subclass:#SourceCodeManagerUtilitiesForWorkspaceBasedManagers
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'System-SourceCodeManagement'
+!
+
+!SourceCodeManagerUtilitiesForWorkspaceBasedManagers class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 2012 eXept Software AG
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+! !
+
+!SourceCodeManagerUtilitiesForWorkspaceBasedManagers methodsFor:'utilities-cvs'!
+
+checkinPackage:packageToCheckIn classes:doClasses extensions:doExtensions buildSupport:doBuild askForMethodsInOtherPackages:askForMethodsInOtherPackages
+    |mgr classesToCheckIn methodsToCheckIn
+     methodsInOtherPackages looseMethods otherPackages
+     msg classesInChangeSet checkinInfo repos pkgDir extensionsSource defClass
+     path fileIsNew|
+
+    mgr := self sourceCodeManagerFor: packageToCheckIn.
+
+    repos := (mgr repositoryNameForPackage:packageToCheckIn) ifNil:[mgr repositoryName].
+
+    "/ clear package directory in the repository (so we get rid of removed files)
+    pkgDir := packageToCheckIn asPackageId pathRelativeToTopDirectory:repos. 
+    pkgDir recursiveMakeDirectory.
+
+    "/ containerFileName := self nameOfExtensionsContainer.
+
+    methodsToCheckIn := IdentitySet new.
+    methodsInOtherPackages := IdentitySet new.
+    looseMethods := IdentitySet new.
+
+    classesToCheckIn := Smalltalk allClassesInPackage: packageToCheckIn.
+
+    "/ cg: O(n^2) algorithm
+    "/  classesInChangeSet := classesToCheckIn select:[:cls | cls hasUnsavedChanges].
+    "/ replaced by: O(n) algorithm
+    classesInChangeSet := ChangeSet current selectForWhichIncludesChangeForClassOrMetaclassOrPrivateClassFrom:classesToCheckIn. 
+
+    "/ individual methods ...
+    Smalltalk allClassesDo:[:aClass |
+        aClass isMeta ifFalse:[
+            methodsToCheckIn addAll:(aClass extensionsFrom:packageToCheckIn).
+        ].
+    ].
+
+    self assert:doExtensions.
+    self assert:doClasses.
+    self assert:doBuild.
+
+    msg := '%1 classes (%4 changed) '.
+    methodsToCheckIn notEmpty ifTrue:[
+        msg := msg , 'and %2 extensions '.
+    ].
+    msg := msg , 'of project "%3"'.
+
+    checkinInfo := self
+                getCheckinInfoFor:(msg
+                                        bindWith:classesToCheckIn size
+                                        with:methodsToCheckIn size
+                                        with:packageToCheckIn allBold
+                                        with:classesInChangeSet size)
+                initialAnswer:nil
+                withQuickOption:false.
+    checkinInfo isNil ifTrue:[
+        ^ self.
+    ].
+
+    "/ check if any of the classes contains methods for other packages ...
+    classesToCheckIn do:[:eachClass |
+        eachClass instAndClassMethodsDo:[:eachMethod |
+            |mPgk|
+
+            mPgk := eachMethod package.
+            (mPgk = packageToCheckIn) ifFalse:[
+                mPgk == PackageId noProjectID ifTrue:[
+                    looseMethods add:eachMethod
+                ] ifFalse:[
+                    methodsInOtherPackages add:eachMethod
+                ]
+            ]
+        ].
+    ].
+
+    askForMethodsInOtherPackages ifTrue:[
+        methodsInOtherPackages notEmpty ifTrue:[
+            otherPackages := Set new.
+            methodsInOtherPackages do:[:eachMethod | otherPackages add:eachMethod package].
+
+            methodsInOtherPackages size == 1 ifTrue:[
+                msg := 'The ''%4'' method in ''%5'' is contained in the ''%2'' package.'.
+                msg := msg , '\\This method will remain in its package.'.
+            ] ifFalse:[
+                otherPackages size == 1 ifTrue:[
+                    msg := 'The %1 methods from the %2 package will remain in its package.'
+                ] ifFalse:[
+                    msg := 'The %1 methods from %3 other packages will remain in their packages.'
+                ].
+                msg := msg , '\\Hint: if these are meant to belong to this package,'.
+                msg := msg , '\move them first, then repeat the checkin operation.'.
+            ].
+            msg := msg withCRs.
+            msg := msg bindWith:methodsInOtherPackages size
+                           with:otherPackages first allBold
+                           with:otherPackages size
+                           with:methodsInOtherPackages first selector allBold
+                           with:methodsInOtherPackages first mclass name allBold.
+            (Dialog confirm:msg noLabel:(resources string:'Cancel')) ifFalse:[^ self].
+        ].
+    ].
+
+    classesToCheckIn notEmpty ifTrue:[
+        looseMethods notEmpty ifTrue:[
+            looseMethods size == 1 ifTrue:[
+                msg := 'The ''%2'' method in ''%3'' is unassigned (loose).'.
+                msg := msg , '\\If you proceed, this method will be moved to the ''%4'' package'.
+                msg := msg , '\\Hint: if this is meant to be an extension of another package,'.
+                msg := msg , '\cancel and move it to the appropriate package first.'.
+            ] ifFalse:[
+                msg := 'There are %1 unassigned (loose) methods in classes from this project.'.
+                msg := msg , '\\If you proceed, those will be moved to the ''%4'' package ?'.
+                msg := msg , '\\Hint: if these are meant to be extensions of another package,'.
+                msg := msg , '\cancel and move them to the appropriate package first.'.
+            ].
+            msg := msg withCRs.
+            msg := msg bindWith:looseMethods size
+                           with:(looseMethods isEmpty ifTrue:[''] ifFalse:[looseMethods first selector allBold])
+                           with:(looseMethods isEmpty ifTrue:[''] ifFalse:[looseMethods first mclass name allBold])
+                           with:packageToCheckIn allBold.
+            (Dialog confirm:msg noLabel:(resources string:'Cancel')) ifFalse:[^ self].
+
+            looseMethods do:[:mthd |
+                mthd package:packageToCheckIn
+            ].
+        ].
+
+        classesToCheckIn do:[:eachClass |
+            |classFileName|
+
+            classFileName := (Smalltalk fileNameForClass:eachClass) , '.st'.
+            mgr
+                withClass:eachClass 
+                classFileName:classFileName 
+                filedOutToTemporaryFileDo:[:tempFile |
+                    path := pkgDir construct:classFileName.
+                    fileIsNew := path exists not.
+                    tempFile moveTo:path.
+                    fileIsNew ifTrue:[
+                        mgr addFile:path baseName inDirectory:path directory.
+                    ].
+                ].
+        ].
+    ].
+
+    path := pkgDir construct:self nameOfExtensionsContainer.
+    methodsToCheckIn notEmpty ifTrue:[
+        extensionsSource := self sourceCodeForExtensions:methodsToCheckIn package:packageToCheckIn forManager:mgr.
+        fileIsNew := path exists not.
+        path contents:extensionsSource.
+        fileIsNew ifTrue:[
+            mgr addFile:path baseName inDirectory:path directory.
+        ].
+   ] ifFalse:[
+        "/ there may have been extension-methods previously - if so, remove them
+        path remove
+    ].
+
+    defClass := ProjectDefinition definitionClassForPackage: packageToCheckIn.
+    defClass forEachFileNameAndGeneratedContentsDo:[:fileName :fileContents |
+        path := pkgDir construct:fileName.
+        fileIsNew := path exists not.
+        path directory exists ifFalse:[
+            path directory recursiveMakeDirectory. "/ for autopackage
+            mgr addFile:path directory baseName inDirectory:path directory directory.
+        ].
+        path contents:fileContents.
+        fileIsNew ifTrue:[
+            mgr addFile:fileName inDirectory:path directory.
+        ].
+    ].
+
+    mgr commitRepository:repos logMessage:checkinInfo logMessage.
+
+    "Created: / 13-10-2011 / 11:15:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 25-07-2012 / 23:15:47 / cg"
+! !
+
+!SourceCodeManagerUtilitiesForWorkspaceBasedManagers class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilitiesForWorkspaceBasedManagers.st,v 1.1 2012/07/25 23:30:21 cg Exp $'
+!
+
+version_CVS
+    ^ '§Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilitiesForWorkspaceBasedManagers.st,v 1.1 2012/07/25 23:30:21 cg Exp §'
+! !
\ No newline at end of file
--- a/abbrev.stc	Thu Jul 26 11:05:27 2012 +0100
+++ b/abbrev.stc	Thu Jul 26 16:09:40 2012 +0100
@@ -66,6 +66,8 @@
 ProjectChecker ProjectChecker stx:libbasic3 'System-Support-Projects' 0
 MercurialSourceCodeManager MercurialSourceCodeManager stx:libbasic3 'System-SourceCodeManagement' 0
 InvalidChange InvalidChange stx:libbasic3 'System-Changes' 0
-ProjectProblem ProjectProblem stx:libbasic3 'System-Support-Projects' 0
 GitSourceCodeManager GitSourceCodeManager stx:libbasic3 'System-SourceCodeManagement' 0
 InfoChange InfoChange stx:libbasic3 'System-Changes' 0
+ProjectProblem ProjectProblem stx:libbasic3 'System-Support-Projects' 0
+SourceCodeManagerUtilitiesForContainerBasedManagers SourceCodeManagerUtilitiesForContainerBasedManagers stx:libbasic3 'System-SourceCodeManagement' 0
+SourceCodeManagerUtilitiesForWorkspaceBasedManagers SourceCodeManagerUtilitiesForWorkspaceBasedManagers stx:libbasic3 'System-SourceCodeManagement' 0
--- a/bc.mak	Thu Jul 26 11:05:27 2012 +0100
+++ b/bc.mak	Thu Jul 26 16:09:40 2012 +0100
@@ -15,7 +15,7 @@
 #    bmake clobber - clean all
 #
 # Historic Note:
-#  this used to contain only rules to make with borland 
+#  this used to contain only rules to make with borland
 #    (called via bmake, by "make.exe -f bc.mak")
 #  this has changed; it is now also possible to build using microsoft visual c
 #    (called via vcmake, by "make.exe -f bc.mak -DUSEVC")
@@ -107,8 +107,10 @@
 $(OUTDIR)MethodChangeNotificationParameter.$(O) MethodChangeNotificationParameter.$(H): MethodChangeNotificationParameter.st $(INCLUDE_TOP)\stx\libbasic3\ChangeNotificationParameter.$(H) $(INCLUDE_TOP)\stx\libbasic\Array.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)NameSpaceCreationChange.$(O) NameSpaceCreationChange.$(H): NameSpaceCreationChange.st $(INCLUDE_TOP)\stx\libbasic3\Change.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)OtherChange.$(O) OtherChange.$(H): OtherChange.st $(INCLUDE_TOP)\stx\libbasic3\Change.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PerforceSourceCodeManager.$(O) PerforceSourceCodeManager.$(H): PerforceSourceCodeManager.st $(INCLUDE_TOP)\stx\libbasic3\AbstractSourceCodeManager.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic3\VersionInfo.$(H) $(STCHDR)
+$(OUTDIR)PerforceSourceCodeManager.$(O) PerforceSourceCodeManager.$(H): PerforceSourceCodeManager.st $(INCLUDE_TOP)\stx\libbasic3\AbstractSourceCodeManager.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\VersionInfo.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(STCHDR)
 $(OUTDIR)SVNVersionInfo.$(O) SVNVersionInfo.$(H): SVNVersionInfo.st $(INCLUDE_TOP)\stx\libbasic3\VersionInfo.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)SourceCodeManagerUtilitiesForContainerBasedManagers.$(O) SourceCodeManagerUtilitiesForContainerBasedManagers.$(H): SourceCodeManagerUtilitiesForContainerBasedManagers.st $(INCLUDE_TOP)\stx\libbasic3\SourceCodeManagerUtilities.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)SourceCodeManagerUtilitiesForWorkspaceBasedManagers.$(O) SourceCodeManagerUtilitiesForWorkspaceBasedManagers.$(H): SourceCodeManagerUtilitiesForWorkspaceBasedManagers.st $(INCLUDE_TOP)\stx\libbasic3\SourceCodeManagerUtilities.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)StoreSourceCodeManager.$(O) StoreSourceCodeManager.$(H): StoreSourceCodeManager.st $(INCLUDE_TOP)\stx\libbasic3\AbstractSourceCodeManager.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)ClassCategoryChange.$(O) ClassCategoryChange.$(H): ClassCategoryChange.st $(INCLUDE_TOP)\stx\libbasic3\ClassChange.$(H) $(INCLUDE_TOP)\stx\libbasic3\Change.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)ClassClassVariableChange.$(O) ClassClassVariableChange.$(H): ClassClassVariableChange.st $(INCLUDE_TOP)\stx\libbasic3\ClassChange.$(H) $(INCLUDE_TOP)\stx\libbasic3\Change.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
--- a/libInit.cc	Thu Jul 26 11:05:27 2012 +0100
+++ b/libInit.cc	Thu Jul 26 16:09:40 2012 +0100
@@ -1,5 +1,6 @@
 /*
  * $Header$
+ * $Header: /cvs/stx/stx/libbasic3/libInit.cc,v 1.96 2012/07/26 12:05:32 vrany Exp $
  *
  * DO NOT EDIT
  * automagically generated from the projectDefinition: stx_libbasic3.
@@ -70,6 +71,8 @@
 _OtherChange_Init(pass,__pRT__,snd);
 _PerforceSourceCodeManager_Init(pass,__pRT__,snd);
 _SVNVersionInfo_Init(pass,__pRT__,snd);
+_SourceCodeManagerUtilitiesForContainerBasedManagers_Init(pass,__pRT__,snd);
+_SourceCodeManagerUtilitiesForWorkspaceBasedManagers_Init(pass,__pRT__,snd);
 _StoreSourceCodeManager_Init(pass,__pRT__,snd);
 _ClassCategoryChange_Init(pass,__pRT__,snd);
 _ClassClassVariableChange_Init(pass,__pRT__,snd);
--- a/libbasic3.rc	Thu Jul 26 11:05:27 2012 +0100
+++ b/libbasic3.rc	Thu Jul 26 16:09:40 2012 +0100
@@ -3,7 +3,7 @@
 // automagically generated from the projectDefinition: stx_libbasic3.
 //
 VS_VERSION_INFO VERSIONINFO
-  FILEVERSION     6,2,0,1
+  FILEVERSION     6,2,1,70
   PRODUCTVERSION  6,2,2,1
 #if (__BORLANDC__)
   FILEFLAGSMASK   VS_FF_DEBUG | VS_FF_PRERELEASE
@@ -20,12 +20,12 @@
     BEGIN
       VALUE "CompanyName", "eXept Software AG\0"
       VALUE "FileDescription", "Smalltalk/X Additional Developer Basic Classes (LIB)\0"
-      VALUE "FileVersion", "6.2.0.1\0"
+      VALUE "FileVersion", "6.2.1.70\0"
       VALUE "InternalName", "stx:libbasic3\0"
       VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2012\nCopyright eXept Software AG 1998-2012\0"
       VALUE "ProductName", "Smalltalk/X\0"
       VALUE "ProductVersion", "6.2.2.1\0"
-      VALUE "ProductDate", "Thu, 26 Jul 2012 10:10:06 GMT\0"
+      VALUE "ProductDate", "Thu, 26 Jul 2012 12:04:13 GMT\0"
     END
 
   END
--- a/stx_libbasic3.st	Thu Jul 26 11:05:27 2012 +0100
+++ b/stx_libbasic3.st	Thu Jul 26 16:09:40 2012 +0100
@@ -11,7 +11,7 @@
 "
 "{ Package: 'stx:libbasic3' }"
 
-LibraryDefinition subclass:#stx_libbasic3
+LibraryDefinition subclass:#'stx_libbasic3'
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -41,9 +41,7 @@
 "
 !
 
-extensionsVersion_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/stx_libbasic3.st,v 1.70 2012/07/18 17:12:40 cg Exp $'
-! !
+ !
 
 !stx_libbasic3 class methodsFor:'description'!
 
@@ -166,9 +164,11 @@
         ProjectChecker
         MercurialSourceCodeManager
         InvalidChange
-        ProjectProblem
+        InfoChange
         GitSourceCodeManager
-        InfoChange
+        ProjectProblem
+        SourceCodeManagerUtilitiesForContainerBasedManagers
+        SourceCodeManagerUtilitiesForWorkspaceBasedManagers
     )
 !
 
@@ -235,13 +235,13 @@
 !stx_libbasic3 class methodsFor:'documentation'!
 
 version
-    ^ '$Id: stx_libbasic3.st 1938 2012-07-26 10:05:27Z vranyj1 $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/stx_libbasic3.st,v 1.71 2012/07/26 12:05:38 vrany Exp $'
 !
 
 version_CVS
-    ^ '§Header: /cvs/stx/stx/libbasic3/stx_libbasic3.st,v 1.70 2012/07/18 17:12:40 cg Exp §'
+    ^ '§Header: /cvs/stx/stx/libbasic3/stx_libbasic3.st,v 1.71 2012/07/26 12:05:38 vrany Exp §'
 !
 
 version_SVN
-    ^ '$Id:: stx_libbasic3.st 1938 2012-07-26 10:05:27Z vranyj1                                                                     $'
+    ^ '$ Id: stx_libbasic3.st 1867 2011-06-08 21:57:08Z vranyj1  $'
 ! !