SourceCodeManagerUtilities.st
changeset 2948 548a75a5a3b5
parent 2939 f7838209baad
child 2949 83170e2244f3
--- a/SourceCodeManagerUtilities.st	Tue Oct 30 15:35:50 2012 +0100
+++ b/SourceCodeManagerUtilities.st	Tue Oct 30 15:36:42 2012 +0100
@@ -962,9 +962,7 @@
      If askForRevision is false, check-out the newest version.
      Return a changeSet or nil (if any error occurred)"
 
-    |resources directory module file aStream sourceToLoad rev msg newestRev |
-
-    resources := self classResources.
+    |directory module file aStream sourceToLoad rev msg newestRev |
 
     directory := packageToCheckOut asPackageId directory.
     module := packageToCheckOut asPackageId module.
@@ -1027,9 +1025,8 @@
 !
 
 checkForExistingModule:module directory:directory container:containerFileName usingManager:mgr allowCreate:allowCreate
-    |resources moduleName directoryName containerName|
-
-    resources := self classResources.
+    |moduleName directoryName containerName|
+
     moduleName := module allBold.
     directoryName := directory allBold.
     containerName := containerFileName allBold.
@@ -1063,9 +1060,8 @@
 !
 
 checkForExistingModule:module directory:directory usingManager:mgr allowCreate:allowCreate
-    |resources moduleNameBold directoryNameBold|
-
-    resources := self classResources.
+    |moduleNameBold directoryNameBold|
+
     moduleNameBold := module allBold.
     directoryNameBold := directory allBold.
 
@@ -1102,10 +1098,9 @@
 !
 
 checkForExistingModule:module usingManager:mgr allowCreate:allowCreate
-    |resources moduleName answer|
+    |moduleName answer|
 
     (mgr checkForExistingModule:module) ifFalse:[
-        resources := self classResources.
         moduleName := module allBold.
 
         allowCreate ifFalse:[
@@ -1158,7 +1153,7 @@
     "check-out a class from the source repository.
      If askForRevision is false, check-out the newest version."
 
-    |mgr resources sourceInfo
+    |mgr sourceInfo
      currentClass inChangeSet
      aStream sourceToLoad currentSource rev revString
      nm msg rev2 newestRev
@@ -1170,8 +1165,6 @@
 
     aClass isNil ifTrue:[self error:'nil class'].
 
-    resources := self classResources.
-
     currentClass := aClass theNonMetaclass.
 
     nm := currentClass name.
@@ -1653,8 +1646,7 @@
     "check-out a class from the source repository.
      If askForRevision is false, check-out the newest version."
 
-    |resources 
-     inChangeSet extensionMethods
+    |inChangeSet extensionMethods
      rev msg
      listHere listRep diffSet 
      changed onlyHere onlyInRep answer labels values singleChangeSelector
@@ -1663,8 +1655,6 @@
     listRep := self changeSetForExtensionMethodsForPackage:packageToCheckOut askForRevision:askForRevision usingManager:aSourceCodeManager.
     listRep isNil ifTrue:[ ^self ].
 
-    resources := self classResources.
-
     self activityNotification:'generating diffSet...'.
 
     extensionMethods := OrderedCollection new.
@@ -1841,12 +1831,10 @@
     "open a diff-textView comparing the current (in-image) version
      against its orgiginal version found in the repository."
 
-    |classToCompare resources brwsr
+    |classToCompare brwsr
      aStream comparedSource currentSource rev revString thisRevString mgr
      nm msg revisionInClass newestRev versionsAreTheSame|
 
-    resources := self classResources.
-
     classToCompare := aClass theNonMetaclass.
 
     nm := classToCompare name.
@@ -2033,7 +2021,7 @@
         labelA:'Repository ("',aSymbolicName,'")' 
         labelB:'Image' 
         title:('Differences of %1' bindWith:aProject)
-        ignoreExtensions:false.
+        ignoreExtensions:true.
 
     "Modified: / 12-09-2011 / 11:56:01 / cg"
 !
@@ -2057,11 +2045,8 @@
     "let user specify the source-repository values for aClass.
      Return false, if failed."
 
-    |resources|
-
     aManager isNil ifTrue:[^ false].
 
-    resources := self classResources.
     ^ self 
         defineSourceContainerForClass:aClass
         usingManager:aManager
@@ -2096,12 +2081,11 @@
      "oldModule oldPackage" oldFileName
      module directory fileName nameSpace nameSpacePrefix
      info project nm creatingNew msg 
-     answer doCheckinWithoutAsking forceCheckIn resources rslt note
+     answer doCheckinWithoutAsking forceCheckIn rslt note
      requiredPackage|
 
     mgr isNil ifTrue:[^  false].
 
-    resources := self classResources.
     aClass isLoaded ifFalse:[
         self warn:(resources string:'Please load the %1-class first' with:aClass name).
         ^ false.
@@ -2424,17 +2408,14 @@
 
     |classesInImage filesInImage module directory perProjectInfo 
      classesNotInRepository filesNotInImage classesDeletedInRepository
-     classesModifiedInImage classesNotReallyModified classesReallyModified classesModifiedInRepository 
+     classesModifiedInImage classesNotReallyModified classesReallyModified classesNewerInRepository 
      classesAddedInImage extensionMethods extensionsInImage extensionsInRepository extensionDiffs
-     box doCleanup resources diffSet def autoloadedFilesNotInImage 
-     autoloadedClassesInImage autoloadedFilesInImage|
-
-    resources := self classResources.
+     box doCleanup diffSet def autoloadedFilesNotInImage 
+     autoloadedClassesInImage autoloadedFilesInImage versionMethodsAndDoitsRejected|
 
     module := aProject asPackageId module.
     directory := aProject asPackageId directory.
 
-self halt.
     (aDateOrNilForNewest isNil and:[ aTagOrNil notNil ]) ifTrue:[
         perProjectInfo := SourceCodeManager revisionsInModule:module directory:directory taggedAs:aTagOrNil.
     ] ifFalse:[
@@ -2444,6 +2425,15 @@
     perProjectInfo := perProjectInfo select:[:info | info key asFilename hasSuffix:'st'].
     perProjectInfo := Dictionary withAssociations:perProjectInfo.
 
+    "/ to ignore version_xxx methods
+    versionMethodsAndDoitsRejected := 
+        [:aChangeSet | 
+            aChangeSet reject:[:chg | 
+                chg isMethodChangeForVersionMethod 
+                or:[chg isMethodChangeForExtensionsVersionMethod
+                or:[chg isDoIt]]]
+        ].
+
     classesInImage := Smalltalk allClassesInPackage:aProject.
     autoloadedClassesInImage := classesInImage reject:[:cls | cls isLoaded].
     classesInImage := classesInImage select:[:cls | cls isLoaded and:[cls isPrivate not]].
@@ -2461,9 +2451,16 @@
     classesModifiedInImage := classesInImage select:[:cls | ChangeSet current includesChangeForClassOrMetaclass:cls].
     classesModifiedInImage := classesModifiedInImage \ classesNotInRepository.
 
-    classesModifiedInRepository := classesInImage select:[:cls | |v|
-                                                    v := (perProjectInfo at:cls classBaseFilename ifAbsent:nil).
-                                                    v notNil and:[ cls isLoaded and:[ v > cls revision ]]].
+    classesNewerInRepository := classesInImage 
+                                    select:[:cls | 
+                                        |v clsRevision|
+
+                                        v := (perProjectInfo at:cls classBaseFilename ifAbsent:nil).
+                                        v notNil 
+                                            and:[ cls isLoaded 
+                                            and:[ (clsRevision := cls revision) notNil 
+                                            and:[ v > clsRevision ]]]
+                                    ].
 
     "/ 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.
@@ -2475,22 +2472,27 @@
         |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 := SourceCodeManager
+                    streamForClass:nil fileName:'extensions.st' revision:extensionsRevision 
+                    directory:directory module:module cache:true.
+            s notNil ifTrue:[
+                extensionsInRepository := ChangeSet fromStream:s.
+            ].
+        ] ensure:[
+            s notNil ifTrue:[s close]
         ].
+        extensionsInRepository isNil ifTrue:[extensionsInRepository := ChangeSet new].
+
+        "/ ignore package doIts and all extensionVersion_xxx methods
+        extensionsInRepository := versionMethodsAndDoitsRejected value:extensionsInRepository.
     ] value.
     extensionDiffs := extensionsInRepository diffSetsAgainst:extensionsInImage.
 
     diffSet := extensionDiffs copy.
 
     (aDateOrNilForNewest isNil and:[aTagOrNil isNil]) ifTrue:[
-        "/ we could do the same as above for each class.
+        "/ we could do the same as below 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:[
@@ -2499,13 +2501,21 @@
                     |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.
+                    [    
+                        s := SourceCodeManager
+                                streamForClass:nil fileName:stFile revision:#newest 
+                                directory:directory module:module cache:true.
+                        s notNil ifTrue:[
+                            repositoryVersion := ChangeSet fromStream:s.
+                        ].
+                    ] ensure:[
+                        s notNil ifTrue:[s close].
+                    ].
+                    repositoryVersion isNil ifTrue:[ repositoryVersion := ChangeSet new ].
+                    repositoryVersion := versionMethodsAndDoitsRejected value:repositoryVersion.
+
+                    currentVersion := ChangeSet forExistingClass:eachChangedClass withExtensions:false withLooseMethods:true.
+                    currentVersion := versionMethodsAndDoitsRejected value:currentVersion.
                     diffs := repositoryVersion diffSetsAgainst:currentVersion .
                     diffSet addDiffSet:diffs.
                     diffs notEmpty
@@ -2519,19 +2529,26 @@
                 |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:[
+                stRevision := perProjectInfo at:stFile ifAbsent:nil.
+                stRevision notNil ifTrue:[
+                    [
+                        s := SourceCodeManager
+                                streamForClass:nil fileName:stFile revision:stRevision 
+                                directory:directory module:module cache:true.
+                        s notNil ifTrue:[
+                            repositoryVersion := ChangeSet fromStream:s.
+                        ].
+                    ] ensure:[
+                        s notNil ifTrue:[s close].
+                    ].
+                ].
+                repositoryVersion isNil ifTrue:[
                     repositoryVersion := ChangeSet new.
-                ] ifFalse:[
-                    repositoryVersion := ChangeSet fromStream:s.
-                    s close.
                 ].
-
-                currentVersion := ChangeSet forExistingClass:eachClass.
+                repositoryVersion := versionMethodsAndDoitsRejected value:repositoryVersion.
+
+                currentVersion := ChangeSet forExistingClass:eachClass withExtensions:false withLooseMethods:true.
+                currentVersion := versionMethodsAndDoitsRejected value:currentVersion.
                 diffs := repositoryVersion diffSetsAgainst:currentVersion .
                 diffSet addDiffSet:diffs.
                 diffs notEmpty
@@ -2562,29 +2579,37 @@
         (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.
-
+            [
+                s := SourceCodeManager
+                        streamForClass:nil fileName:eachSTFile revision:#newest directory:directory module:module cache:true.
+                chgSet := ChangeSet fromStream:s.
+            ] ensure:[
+                s notNil ifTrue:[s close].
+            ].
+            chgSet := versionMethodsAndDoitsRejected value:chgSet.
             diffSet onlyInReceiver addAll:chgSet
         ].
     ].
 
-    classesModifiedInRepository notEmpty ifTrue:[
-        classesModifiedInRepository do:[:eachClass|
+    classesNewerInRepository notEmpty ifTrue:[
+        classesNewerInRepository 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.
+            [
+                s := SourceCodeManager
+                        streamForClass:eachClass fileName:nil revision:#newest directory:directory module:module cache:true.
+                repositoryVersion := ChangeSet fromStream:s.
+            ] ensure:[
+                s notNil ifTrue:[s close].
+            ].
+
+            currentVersion := ChangeSet forExistingClass:eachClass withExtensions:false withLooseMethods:true.
+            currentVersion := versionMethodsAndDoitsRejected value:currentVersion.
             diffs := repositoryVersion diffSetsAgainst:currentVersion .
             diffSet addDiffSet:diffs.
         ].
     ].
+
     classesDeletedInRepository notEmpty ifTrue:[
 "/ self halt.
     ].
@@ -2597,7 +2622,8 @@
         classesAddedInImage do:[:eachAddedClass |
             |currentVersion|
 
-            currentVersion := ChangeSet forExistingClass:eachAddedClass.
+            currentVersion := ChangeSet forExistingClass:eachAddedClass withExtensions:false withLooseMethods:true.
+            currentVersion := versionMethodsAndDoitsRejected value:currentVersion.
             diffSet onlyInArg addAll:currentVersion.
         ].
     ].
@@ -2738,9 +2764,7 @@
 removeSourceContainerForClass:aClass confirm:doConfirm warn:doWarn
     "show container & optionally let user confirm twice."
 
-    |module directory fileName info mgr resources|
-
-    resources := self classResources.
+    |module directory fileName info mgr|
 
     aClass isLoaded ifFalse:[
         doWarn ifTrue:[
@@ -3796,9 +3820,9 @@
 !SourceCodeManagerUtilities class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilities.st,v 1.257 2012-10-30 01:10:43 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilities.st,v 1.258 2012-10-30 14:36:42 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilities.st,v 1.257 2012-10-30 01:10:43 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/SourceCodeManagerUtilities.st,v 1.258 2012-10-30 14:36:42 cg Exp $'
 ! !