diff -r f58effe8daf2 -r 548a75a5a3b5 SourceCodeManagerUtilities.st --- 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 $' ! !