# HG changeset patch # User Jan Vrany # Date 1480353106 0 # Node ID 66a7a47f925302fe49dc4aa80edeb9991062d1d8 # Parent e96794cd9edd789bd36e14b0b6eca356d2ae0204# Parent 55ad833b981ebd1680f00770a1e4e2a80f33f36b Merge diff -r e96794cd9edd -r 66a7a47f9253 AbstractSourceCodeManager.st --- a/AbstractSourceCodeManager.st Wed Sep 07 16:04:00 2016 +0100 +++ b/AbstractSourceCodeManager.st Mon Nov 28 17:11:46 2016 +0000 @@ -14,19 +14,21 @@ "{ NameSpace: Smalltalk }" Object subclass:#AbstractSourceCodeManager - instanceVariableNames:'' - classVariableNames:'CacheDirectoryName CachingSources DefaultManager ManagerPerModule - UseWorkTree Verbose WorkTreeDirectoryName - ManagerForPackageCache' - poolDictionaries:'' - category:'System-SourceCodeManagement' + instanceVariableNames:'' + classVariableNames:'CacheDirectoryName CachingSources DefaultManager ManagerPerModule + UseWorkTree Verbose WorkTreeDirectoryName + PackagesWithoutExtensionMethodConfirmation + SuppressExtensionMethodConfirmation + ManagerForPackageCache' + poolDictionaries:'' + category:'System-SourceCodeManagement' ! Object subclass:#PackageAndManager - instanceVariableNames:'package managerTypeName' - classVariableNames:'' - poolDictionaries:'' - privateIn:AbstractSourceCodeManager + instanceVariableNames:'package managerTypeName' + classVariableNames:'' + poolDictionaries:'' + privateIn:AbstractSourceCodeManager ! !AbstractSourceCodeManager class methodsFor:'documentation'! @@ -701,7 +703,7 @@ The returned information is a structure (IdentityDictionary) filled with: - #container -> the RCS/CVS container file name + #container -> the container file name (for container-based SCMs) #cvsRoot -> the CVS root (repository) #filename -> the actual source file name #newestRevision -> the revisionString of the newest revision @@ -1071,16 +1073,28 @@ actions := #(#cancel false #browse true). ]. - answer := OptionBox - request:(SystemBrowser classResources - stringWithCRs:msg - withArgs:args) - label:'Change packageID ?' - image:(InfoBox iconBitmap) - buttonLabels:(Dialog resources array:labels) - values:actions - default:true. - + (SuppressExtensionMethodConfirmation == true + or:[ self isPackageWithoutExtensionMethodConfirmation:aClass package]) + ifTrue:[ + answer := true + ] ifFalse:[ + Dialog + withOptoutOption:[ self rememberPackageWithoutExtensionMethodConfirmation:aClass package ] + labelled:(SystemBrowser classResources string:'Do not show this dialog again (for this package)') + andOptoutOption:[ SuppressExtensionMethodConfirmation := true ] + labelled:(SystemBrowser classResources string:'Do not show this dialog again (for any package)') + do:[ + answer := OptionBox + request:(SystemBrowser classResources + stringWithCRs:msg + withArgs:args) + label:'Change packageID ?' + image:(InfoBox iconBitmap) + buttonLabels:(Dialog resources array:labels) + values:actions + default:true. + ]. + ]. answer == #browse ifTrue:[ UserPreferences systemBrowserClass browseMethods:unassignedMethods @@ -1133,7 +1147,7 @@ ]. ^ #base - "Modified: / 24-07-2011 / 07:13:58 / cg" + "Modified: / 18-11-2016 / 11:34:14 / cg" ! checkTabSpaceConventionIn: aStream @@ -1360,6 +1374,17 @@ "Created: / 23-08-2006 / 14:10:29 / cg" ! +isPackageWithoutExtensionMethodConfirmation:aPackageID + "usually, the checkin dialog asks if unpackaged methods should be moved + to the package. + This can be suppressed on a per-package base with a checkbox ('do not...again') + in the dialog. + This method returns true, if this was done for a particular package" + + ^ PackagesWithoutExtensionMethodConfirmation notNil + and:[ PackagesWithoutExtensionMethodConfirmation includes:aPackageID] +! + moduleFromContainerPath:containerPath forClass:aClass "given a full path as in an RCS header, extract the module." @@ -1522,6 +1547,19 @@ ]. ! +rememberPackageWithoutExtensionMethodConfirmation:aPackageID + "usually, the checkin dialog asks if unpackaged methods should be moved + to the package. + This can be suppressed on a per-package base with a checkbox ('do not...again') + in the dialog. + This method adds a package to the set of non-asking packages" + + PackagesWithoutExtensionMethodConfirmation isNil ifTrue:[ + PackagesWithoutExtensionMethodConfirmation := Set new + ]. + PackagesWithoutExtensionMethodConfirmation add:aPackageID +! + reportError:msg |fullMsg| @@ -2016,8 +2054,7 @@ sourceCodeManagerForPackage:aPackageID |defaultManager module mgr| - "JV@2012-01-23: If source code management is disabled, return #(). Following code - is hack since there is no global boolean flag, sigh" + "JV@2012-01-23: If source code management is disabled, return #()." defaultManager := Smalltalk at:#SourceCodeManager. defaultManager isNil ifTrue:[ "eg. disabled" ^ nil ]. @@ -2626,178 +2663,6 @@ !AbstractSourceCodeManager class methodsFor:'source code administration'! -ensureDollarsInVersionMethod:aString - "given the source code of my version method, ensure that it contains dollars for - proper keyword expansion" - - |versionString| - - versionString := aString copyWithout: (Character codePoint: 167). - ^ self ensureKeywordExpansionWith: $$ inVersionMethod:versionString. - - " - self ensureDollarsInVersionMethod:'foo ^ ''hello'' ' - self ensureDollarsInVersionMethod:'foo ^ ''hello'' ' - self ensureDollarsInVersionMethod:'foo ^ '' hello '' ' - self ensureDollarsInVersionMethod:'foo ^ ''$','Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.228 2009/10/20 09:55:58 fm Exp $'' ' - -- errors: - self ensureDollarsInVersionMethod:'foo ^ ''$Head'' ' - self ensureDollarsInVersionMethod:'foo ^ ''Header$'' ' - " - - "Modified: / 04-05-2016 / 10:51:27 / Jan Vrany " -! - -ensureKeyword: keyword inVersionMethod: source - - | startQuote endQuote doubleColon | - - "/nil keyword means that given source code management system - "/does not expand keywords (StORE or Monticello, for example) - keyword isNil ifTrue:[ - ^source. - ]. - - startQuote := source indexOf: $'. - startQuote == 0 ifTrue:[ - self error:'Does not seem to be a valid version method source. Invalid source?' - ]. - (source at: startQuote + 1) == $$ ifFalse:[ - self error:'Does not seem to be a valid version method source. Invalid source?' - ]. - - endQuote := source lastIndexOf: $'. - startQuote == endQuote ifTrue:[ - self error:'Does not seem to be a valid version method source. Invalid source?' - ]. - (source at: endQuote - 1) == $$ ifFalse:[ - self error:'Does not seem to be a valid version method source. Invalid source?' - ]. - - doubleColon := source indexOf: $: startingAt: startQuote + 2. - "/ There may be no double colon at all, if the version method - "/ is fresh, like 'dollar-Header-dollar' (no real dollar here, as cvs expands the string) - (doubleColon == 0 or:[doubleColon > endQuote]) ifTrue:[ - doubleColon := endQuote - 1. - ]. - - (source copyFrom: startQuote + 2 to: doubleColon - 1) = keyword ifTrue:[ - "/ Good, desired keyword is already there - ^source - ]. - - ^(source copyTo: startQuote + 1) , keyword , (source copyFrom: doubleColon) - - "Created: / 27-09-2011 / 15:00:20 / Jan Vrany " - "Modified (comment): / 26-01-2012 / 14:52:19 / cg" -! - -ensureKeywordExpansionWith: aCharacter inVersionMethod:aString - "given the source code of my version method, ensure that it contains aCharacter for - proper keyword expansion" - - |indexOfFirstQuote indexOfNextAfterFirstQuote indexOfSecondDollar indexOfNextAfterSecondDollar indexOfLastQuote| - - indexOfFirstQuote := aString indexOf:$'. - indexOfFirstQuote == 0 ifTrue:[ - "/ no ' found - mhmh is this a valid version method's source ? - ^ aString - ]. - indexOfNextAfterFirstQuote := aString indexOfNonSeparatorStartingAt:indexOfFirstQuote+1. - (aString at:indexOfNextAfterFirstQuote) = aCharacter ifTrue:[ - indexOfSecondDollar := aString indexOf:aCharacter startingAt:indexOfNextAfterFirstQuote+1. - ((indexOfSecondDollar == 0) - or:[ indexOfNextAfterSecondDollar := aString indexOfNonSeparatorStartingAt:indexOfSecondDollar+1. - (aString at:indexOfNextAfterSecondDollar) ~= $' - ]) ifTrue:[ - self error:'invalid source (no valid version method string)' - ]. - "/ fine - ^ aString - ]. - - indexOfLastQuote := aString lastIndexOf:$'. - - ^ (aString copyTo:indexOfFirstQuote) - , aCharacter asString - ,(aString copyFrom:indexOfFirstQuote+1 to:indexOfLastQuote-1) - ,aCharacter asString ,(aString copyFrom:indexOfLastQuote) - - " - self ensureKeywordExpansionWith: $ inVersionMethod: 'foo ^ ''hello'' ' - self ensureKeywordExpansionWith: $ inVersionMethod: 'foo ^ '' hello '' ' - self ensureKeywordExpansionWith: $ inVersionMethod: 'foo ^ ''Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.218 2009/10/07 12:12:30 fm Exp '' ' - - self ensureKeywordExpansionWith: $$ inVersionMethod: 'foo ^ ''hello'' ' - self ensureKeywordExpansionWith: $$ inVersionMethod: 'foo ^ '' hello '' ' - self ensureKeywordExpansionWith: $$ inVersionMethod: 'foo ^ ''$','Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.228 2009/10/20 09:55:58 fm Exp $'' ' - - -- errors: - self ensureKeywordExpansionWith: $ inVersionMethod: 'foo ^ ''Head'' ' - self ensureKeywordExpansionWith: $ inVersionMethod: 'foo ^ ''Header'' ' - " -! - -ensureKeywordInVersionMethod: source - - ^self ensureKeyword: self versionMethodKeyword inVersionMethod: source - - "Created: / 27-09-2011 / 14:50:46 / Jan Vrany " -! - -ensureNoDollarsInVersionMethod:aString - "given the source code of another manager's version method, ensure that it does NOT - contain dollars and add $ instead, to avoid that CVS expands keywords in it" - - |versionString| - - versionString := aString copyWithout: $$. - ^ self ensureKeywordExpansionWith: $ inVersionMethod:versionString. - - " - self ensureNoDollarsInVersionMethod:'foo ^ ''$','Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.228 2009/10/20 09:55:58 fm Exp $'' ' - self ensureNoDollarsInVersionMethod:'foo ^ ''$','Head'' ' - self ensureNoDollarsInVersionMethod:'foo ^ ''Header$'' ' - self ensureNoDollarsInVersionMethod:'foo ^ ''Header'' ' - - -- errors: - - self ensureNoDollarsInVersionMethod:'foo ^ ''Header'' ' - self ensureNoDollarsInVersionMethod:'foo ^ ''Header'' ' - - " -! - -extractKeyValueFor:key fromRevisionString:aString - "{ Pragma: +optSpace }" - - "extract a particular value from a string which has the format: - key1: value1, key2: value2, .... keyN: valueN" - - |value idx1 idx2| - - "/ 'Path: stx/libbasic/Array.st, Version: 123, User: cg, Time: 2011-12-21T21:03:08.826' - - idx1 := aString indexOfSubCollection:(key,': '). - idx1 ~~ 0 ifTrue:[ - idx1 := idx1 + (key,': ') size. - idx2 := aString indexOfSubCollection:', ' startingAt:idx1. - idx2 == 0 ifTrue:[ idx2 := aString size + 1 ]. - value := aString copyFrom:idx1 to:idx2-1. - ]. - ^ value - - " - self - extractKeyValueFor:'Path' - fromRevisionString:'Path: stx/libbasic/Array.st, Version: 123, User: cg, Time: 2011-12-21T21:03:08.826' - - self - extractKeyValueFor:'Time' - fromRevisionString:'Path: stx/libbasic/Array.st, Version: 123, User: cg, Time: 2011-12-21T21:03:08.826' - " -! - fileOutSourceCodeExtensions: extensions package: package on: stream "File out extension methods for given package on stream. Not programming-language safe - can handle smalltalk methods." @@ -2911,43 +2776,6 @@ "Created: / 20.5.1998 / 19:38:23 / cg" ! -initialRCSRevisionStringFor:aClass in:dir container:fileName - "return a string usable as initial revision string" - - "/ do not make the string below into one string; - "/ RCS would expand it into a wrong rev-string - - |nm oldRev idx special| - - nm := fileName. - (nm endsWith:',v') ifTrue:[ - nm := nm copyButLast:2 - ]. - (nm endsWith:'.st') ifFalse:[ - nm := nm , '.st' - ]. - - oldRev := aClass revisionString. - special := ''. - - oldRev notNil ifTrue:[ - idx := oldRev lastIndexOf:$[. - idx ~~ 0 ifTrue:[ - idx := oldRev indexOf:$[ startingAt:idx+1. - idx ~~ 0 ifTrue:[ - special := ' ' , (oldRev copyFrom:idx). - ] - ] - ]. - - - ^ '$' , 'Header: ' , dir , '/' , fileName , ',v $' - , special - - "Modified: 17.9.1996 / 15:57:15 / cg" - "Created: 14.2.1997 / 20:59:28 / cg" -! - knownTagsAndRevisionsFor:aClass "retrieve a list of symbolic tags -> versionNr associations known for that class. @@ -3080,7 +2908,7 @@ "return a dictionary filled with revision info. This extracts the relevant info from aString." - ^ CVSVersionInfo fromRCSString:aString. + ^ CVSSourceCodeManager versionInfoClass fromRCSString:aString. " SourceCodeManager revisionInfoFromString:'$' , 'Revision: 1.122 $' @@ -3145,7 +2973,7 @@ Return nil on failure. The returned information is a structure (IdentityDictionary) filled with: - #container -> the RCS container file name + #container -> the container file name (for container-based SCMs) #filename -> the actual source file name #newestRevision -> the revisionString of the newest revision #numberOfRevisions -> the number of revisions in the container @@ -3181,7 +3009,7 @@ The returned information is a structure (IdentityDictionary) filled with: - #container -> the RCS container file name + #container -> the container file name (for container-based SCMs) #filename -> the actual source file name #newestRevision -> the revisionString of the newest revision #numberOfRevisions -> the number of revisions in the container @@ -3227,7 +3055,7 @@ The returned information is a structure (IdentityDictionary) filled with: - #container -> the RCS container file name + #container -> the container file name (for container-based SCMs) #filename -> the actual source file name #newestRevision -> the revisionString of the newest revision #numberOfRevisions -> the number of revisions in the container @@ -3271,7 +3099,7 @@ The returned information is a structure (IdentityDictionary) filled with: - #container -> the RCS container file name + #container -> the container file name (for container-based SCMs) #filename -> the actual source file name #newestRevision -> the revisionString of the newest revision #numberOfRevisions -> the number of revisions in the container @@ -3348,7 +3176,7 @@ The returned information is a structure (IdentityDictionary) filled with: - #container -> the RCS container file name + #container -> the container file name (for container-based SCMs) #filename -> the actual source file name #newestRevision -> the revisionString of the newest revision #numberOfRevisions -> the number of revisions in the container (nil for all) @@ -3432,7 +3260,7 @@ The returned information is a structure (IdentityDictionary) filled with: - #container -> the RCS container file name + #container -> the container file name (for container-based SCMs) #filename -> the actual source file name #newestRevision -> the revisionString of the newest revision #numberOfRevisions -> the number of revisions in the container @@ -3474,7 +3302,7 @@ The returned information is a structure (IdentityDictionary) filled with: - #container -> the RCS container file name + #container -> the container file name (for container-based SCMs) #filename -> the actual source file name #newestRevision -> the revisionString of the newest revision #numberOfRevisions -> the number of revisions in the container @@ -3950,6 +3778,279 @@ " ! ! +!AbstractSourceCodeManager class methodsFor:'source code utilities'! + +diffListFor:clsOrNil fileName:classFileName directory:packageDir module:moduleDir revision1:rev1 revision2:rev2 + "return diff info. This is supposed to return a standard diff-like + list of lines, representing the diffs between two revisions. + experimental (for ownershipGraph)" + + ^ self + diffListFor:clsOrNil fileName:classFileName directory:packageDir module:moduleDir revision1:rev1 revision2:rev2 + cache:true +! + +diffListFor:clsOrNil fileName:classFileNameArg directory:packageDirArg module:moduleDirArg revision1:rev1 revision2:rev2 cache:cacheIt + "return diff info. This is supposed to return a standard diff-like + list of lines, representing the diffs between two revisions. + experimental (for ownershipGraph). + This fallback retrieves the two versions and calls a diff" + + |fullName modulePath inStream list msg cacheDir cachedFile classFileName diffDir + sourceStream1 sourceStream2 source1 source2 tmpSource1 tmpSource2 + moduleDir packageDir| + + moduleDir := moduleDirArg. + packageDir := packageDirArg. + + clsOrNil notNil ifTrue:[ + modulePath := clsOrNil package copyReplaceAll:$: with:$/. + moduleDir := clsOrNil package asPackageId module. + packageDir := clsOrNil package asPackageId directory. + fullName := modulePath , '/' , (classFileName := clsOrNil classFilename). + ] ifFalse:[ + modulePath := moduleDir , '/' , packageDir. + fullName := modulePath , '/' , (classFileName := classFileNameArg). + ]. + + (cacheIt) ifTrue:[ + (cacheDir := self sourceCacheDirectory) isNil ifTrue:[ + ('SourceCodeManager [warning]: no source cache directory') infoPrintCR. + ] ifFalse:[ + diffDir := (cacheDir / modulePath / '.diffs'). + diffDir exists ifFalse:[ + diffDir recursiveMakeDirectory. + ]. + cachedFile := diffDir / (classFileName,'_',rev1,'_',rev2). + cachedFile exists ifTrue:[ + ^ cachedFile contents + ]. + ]. + ]. + + msg := 'SourceCodeManager: Fetching diff list of '. + clsOrNil isNil ifTrue:[ + msg := msg , fullName. + ] ifFalse:[ + msg := msg , clsOrNil name. + ]. + msg := msg , ' ' , rev1 , ' vs. ' , rev2. + self activityNotification:msg. + + sourceStream1 := self + streamForClass:clsOrNil + fileName:classFileName + revision:rev1 + directory:packageDir + module:moduleDir + cache:cacheIt. + source1 := sourceStream1 contents. + sourceStream1 close. + tmpSource1 := Filename newTemporary. + tmpSource1 contents:source1. + + sourceStream2 := self + streamForClass:clsOrNil + fileName:classFileName + revision:rev2 + directory:packageDir + module:moduleDir + cache:cacheIt. + source2 := sourceStream2 contents. + sourceStream2 close. + tmpSource2 := Filename newTemporary. + tmpSource2 contents:source2. + + [ + inStream := PipeStream readingFrom:('diff %1 %2' bindWith:tmpSource1 pathName with:tmpSource1 pathName ). + inStream isNil ifTrue:[ + ('SourceCodeManager [error]: cannot open pipe to diff ', fullName) errorPrintCR. + ^ nil + ]. + list := inStream contents. + ] ensure:[ + inStream close. + tmpSource1 remove. + tmpSource2 remove. + ]. + list := list reject:[:line | line startsWith:'\ ']. + + cachedFile notNil ifTrue:[ + cachedFile contents:list. + ]. + ^ list +! + +ensureDollarsInVersionMethod:aString + "given the source code of my version method, ensure that it contains dollars for + proper keyword expansion" + + |versionString| + + versionString := aString copyWithout: (Character codePoint: 167). + ^ self ensureKeywordExpansionWith: $$ inVersionMethod:versionString. + + " + self ensureDollarsInVersionMethod:'foo ^ ''hello'' ' + self ensureDollarsInVersionMethod:'foo ^ ''hello'' ' + self ensureDollarsInVersionMethod:'foo ^ '' hello '' ' + self ensureDollarsInVersionMethod:'foo ^ ''$','Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.228 2009/10/20 09:55:58 fm Exp $'' ' + -- errors: + self ensureDollarsInVersionMethod:'foo ^ ''$Head'' ' + self ensureDollarsInVersionMethod:'foo ^ ''Header$'' ' + " +! + +ensureKeyword: keyword inVersionMethod: source + + | startQuote endQuote doubleColon | + + "/nil keyword means that given source code management system + "/does not expand keywords (StORE or Monticello, for example) + keyword isNil ifTrue:[ + ^source. + ]. + + startQuote := source indexOf: $'. + startQuote == 0 ifTrue:[ + self error:'Does not seem to be a valid version method source. Invalid source?' + ]. + (source at: startQuote + 1) == $$ ifFalse:[ + self error:'Does not seem to be a valid version method source. Invalid source?' + ]. + + endQuote := source lastIndexOf: $'. + startQuote == endQuote ifTrue:[ + self error:'Does not seem to be a valid version method source. Invalid source?' + ]. + (source at: endQuote - 1) == $$ ifFalse:[ + self error:'Does not seem to be a valid version method source. Invalid source?' + ]. + + doubleColon := source indexOf: $: startingAt: startQuote + 2. + "/ There may be no double colon at all, if the version method + "/ is fresh, like 'dollar-Header-dollar' (no real dollar here, as cvs expands the string) + (doubleColon == 0 or:[doubleColon > endQuote]) ifTrue:[ + doubleColon := endQuote - 1. + ]. + + (source copyFrom: startQuote + 2 to: doubleColon - 1) = keyword ifTrue:[ + "/ Good, desired keyword is already there + ^source + ]. + + ^(source copyTo: startQuote + 1) , keyword , (source copyFrom: doubleColon) + + "Created: / 27-09-2011 / 15:00:20 / Jan Vrany " + "Modified (comment): / 26-01-2012 / 14:52:19 / cg" +! + +ensureKeywordExpansionWith: aCharacter inVersionMethod:aString + "given the source code of my version method, ensure that it contains aCharacter for + proper keyword expansion" + + |indexOfFirstQuote indexOfNextAfterFirstQuote indexOfSecondDollar indexOfNextAfterSecondDollar indexOfLastQuote| + + indexOfFirstQuote := aString indexOf:$'. + indexOfFirstQuote == 0 ifTrue:[ + "/ no ' found - mhmh is this a valid version method's source ? + ^ aString + ]. + indexOfNextAfterFirstQuote := aString indexOfNonSeparatorStartingAt:indexOfFirstQuote+1. + (aString at:indexOfNextAfterFirstQuote) = aCharacter ifTrue:[ + indexOfSecondDollar := aString indexOf:aCharacter startingAt:indexOfNextAfterFirstQuote+1. + ((indexOfSecondDollar == 0) + or:[ indexOfNextAfterSecondDollar := aString indexOfNonSeparatorStartingAt:indexOfSecondDollar+1. + (aString at:indexOfNextAfterSecondDollar) ~= $' + ]) ifTrue:[ + self error:'invalid source (no valid version method string)' + ]. + "/ fine + ^ aString + ]. + + indexOfLastQuote := aString lastIndexOf:$'. + + ^ (aString copyTo:indexOfFirstQuote) + , aCharacter asString + ,(aString copyFrom:indexOfFirstQuote+1 to:indexOfLastQuote-1) + ,aCharacter asString ,(aString copyFrom:indexOfLastQuote) + + " + self ensureKeywordExpansionWith: $ inVersionMethod: 'foo ^ ''hello'' ' + self ensureKeywordExpansionWith: $ inVersionMethod: 'foo ^ '' hello '' ' + self ensureKeywordExpansionWith: $ inVersionMethod: 'foo ^ ''Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.218 2009/10/07 12:12:30 fm Exp '' ' + + self ensureKeywordExpansionWith: $$ inVersionMethod: 'foo ^ ''hello'' ' + self ensureKeywordExpansionWith: $$ inVersionMethod: 'foo ^ '' hello '' ' + self ensureKeywordExpansionWith: $$ inVersionMethod: 'foo ^ ''$','Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.228 2009/10/20 09:55:58 fm Exp $'' ' + + -- errors: + self ensureKeywordExpansionWith: $ inVersionMethod: 'foo ^ ''Head'' ' + self ensureKeywordExpansionWith: $ inVersionMethod: 'foo ^ ''Header'' ' + " +! + +ensureKeywordInVersionMethod: source + + ^self ensureKeyword: self versionMethodKeyword inVersionMethod: source + + "Created: / 27-09-2011 / 14:50:46 / Jan Vrany " +! + +ensureNoDollarsInVersionMethod:aString + "given the source code of another manager's version method, ensure that it does NOT + contain dollars and add $ instead, to avoid that CVS expands keywords in it" + + |versionString| + + versionString := aString copyWithout: $$. + ^ self ensureKeywordExpansionWith: $ inVersionMethod:versionString. + + " + self ensureNoDollarsInVersionMethod:'foo ^ ''$','Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.228 2009/10/20 09:55:58 fm Exp $'' ' + self ensureNoDollarsInVersionMethod:'foo ^ ''$','Head'' ' + self ensureNoDollarsInVersionMethod:'foo ^ ''Header$'' ' + self ensureNoDollarsInVersionMethod:'foo ^ ''Header'' ' + + -- errors: + + self ensureNoDollarsInVersionMethod:'foo ^ ''Header'' ' + self ensureNoDollarsInVersionMethod:'foo ^ ''Header'' ' + + " +! + +extractKeyValueFor:key fromRevisionString:aString + "{ Pragma: +optSpace }" + + "extract a particular value from a string which has the format: + key1: value1, key2: value2, .... keyN: valueN" + + |value idx1 idx2| + + "/ 'Path: stx/libbasic/Array.st, Version: 123, User: cg, Time: 2011-12-21T21:03:08.826' + + idx1 := aString indexOfSubCollection:(key,': '). + idx1 ~~ 0 ifTrue:[ + idx1 := idx1 + (key,': ') size. + idx2 := aString indexOfSubCollection:', ' startingAt:idx1. + idx2 == 0 ifTrue:[ idx2 := aString size + 1 ]. + value := aString copyFrom:idx1 to:idx2-1. + ]. + ^ value + + " + self + extractKeyValueFor:'Path' + fromRevisionString:'Path: stx/libbasic/Array.st, Version: 123, User: cg, Time: 2011-12-21T21:03:08.826' + + self + extractKeyValueFor:'Time' + fromRevisionString:'Path: stx/libbasic/Array.st, Version: 123, User: cg, Time: 2011-12-21T21:03:08.826' + " +! ! + !AbstractSourceCodeManager class methodsFor:'subclass responsibility'! reportHistoryLogSince:timeGoal filterSTSources:filter filterUser:userFilter @@ -4094,13 +4195,15 @@ !AbstractSourceCodeManager::PackageAndManager methodsFor:'queries'! match: packageId - | manager | + | manager packageMatches| manager := self manager. manager isNil ifTrue:[^false]. - ^ (package match: packageId) - and: [manager isResponsibleForPackage: packageId] + packageMatches := package includesMatchCharacters + ifTrue:[ package match: packageId ] + ifFalse:[ packageId startsWith:(package,':') ]. + ^ packageMatches and: [manager isResponsibleForPackage: packageId] " self managerForModule:'stx:libbasic' diff -r e96794cd9edd -r 66a7a47f9253 CVSSourceCodeManager.st --- a/CVSSourceCodeManager.st Wed Sep 07 16:04:00 2016 +0100 +++ b/CVSSourceCodeManager.st Mon Nov 28 17:11:46 2016 +0000 @@ -23,6 +23,13 @@ category:'System-SourceCodeManagement' ! +VersionInfo subclass:#CVSVersionInfo + instanceVariableNames:'repositoryPathName timeZone changedLinesInfo' + classVariableNames:'' + poolDictionaries:'' + privateIn:CVSSourceCodeManager +! + !CVSSourceCodeManager class methodsFor:'documentation'! copyright @@ -1324,7 +1331,7 @@ "read and parse a single revision info-entry from the cvs log output. Return nil on end. - The returned information is a structure (IdentityDictionary) + The returned information is a CVSVersionInfo object (used to be an IdentityDictionary) filled with: #revision -> the revision string #author -> who checked that revision into the repository @@ -1348,7 +1355,7 @@ ]. revLine2 := inStream nextLine. (revLine1 notNil and:[revLine2 notNil]) ifTrue:[ - record := IdentityDictionary new. + record := CVSVersionInfo "IdentityDictionary" new. record at:#revision put:(revLine1 asCollectionOfWords at:2). "/ decompose date/author/state etc. (revLine2 asCollectionOfSubstringsSeparatedBy:$;) do:[:info | @@ -1367,8 +1374,8 @@ ]. ]. - "first revision does not hav a 'lines:' entry" - (record includesKey:#numberOfChangedLines) ifFalse:[ + "first revision does not have a 'lines:' entry" + (record at:#numberOfChangedLines ifAbsent:[nil]) isNil ifTrue:[ record at:#numberOfChangedLines put:'' ]. @@ -3141,104 +3148,6 @@ !CVSSourceCodeManager class methodsFor:'source code administration'! -annotationsFor:clsOrNil fileName:classFileName directory:packageDir module:moduleDir - "return info about who changed what and when. - Return nil on failure. - - The returned information is a structure entry for each line - #revision -> version of last change - #author -> author - #date -> change date - " - - |tempDir fullName modulePath inStream inHeaderInfo line info msg| - - tempDir := self createTempDirectory:nil forModule:nil. - tempDir isNil ifTrue:[ - ('CVSSourceCodeManager [error]: no tempDir - cannot extract log') errorPrintCR. - ^ nil. - ]. - - [ - |cmd revArg| - - modulePath := moduleDir , '/' , packageDir. - fullName := modulePath , '/' , classFileName. - - self createEntryFor:fullName - module:moduleDir - in:(tempDir construct:modulePath) - revision:'1.1' - date:'dummy' - special:'' - overwrite:false. - - msg := 'Fetching annotation log '. - clsOrNil isNil ifTrue:[ - msg := msg , 'in ' , fullName. - ] ifFalse:[ - msg := msg , 'of ', clsOrNil name. - ]. - self activityNotification:msg,'...'. - - inStream := self - executeCVSCommand:('annotate ' , fullName) - module:moduleDir - inDirectory:tempDir - log:true - pipe:true. - - inStream isNil ifTrue:[ - ('CVSSourceCodeManager [error]: cannot open pipe to cvs annotate ', fullName) errorPrintCR. - ^ nil - ]. - - "/ - "/ read the commands pipe output and extract the info - "/ - info := IdentityDictionary new. - inHeaderInfo := true. - [inHeaderInfo and:[inStream atEnd not]] whileTrue:[ - line:= inStream nextLine. - ((line ? '') startsWith:'*******') ifTrue:[ - inHeaderInfo := false. - ] - ]. - - "/ - "/ continue to read the commands pipe output - "/ and extract change info records - "/ - [inStream atEnd] whileFalse:[ - line := inStream nextLine. -Transcript showCR:line. - ]. - ] ensure:[ - inStream notNil ifTrue:[inStream close]. - - tempDir notNil ifTrue:[ - OperatingSystem accessDeniedErrorSignal handle:[:ex | - ('CVSSourceCodeManager [warning]: could not remove tempDir ', tempDir pathName) infoPrintCR. - ] do:[ - tempDir recursiveRemove - ]. - ]. - self activityNotification:nil. - ]. - ^ info - - " - SourceCodeManager - annotationsFor:Array - fileName:'Array.st' directory:'libbasic' module:'stx' - " - " - SourceCodeManager - annotationsFor:MenuPanel - fileName:'MenuPanel.st' directory:'libwidg2' module:'stx' - " -! - checkForExistingContainer:fileName inModule:moduleDir directory:packageDir "check for a container to exist" @@ -4006,108 +3915,6 @@ " ! -diffListFor:clsOrNil fileName:classFileName directory:packageDir module:moduleDir revision1:rev1 revision2:rev2 - "return diff info. This is supposed to return a standard diff-like - list of lines, representing the diffs between two revisions. - experimental (for ownershipGraph)" - - ^ self - diffListFor:clsOrNil fileName:classFileName directory:packageDir module:moduleDir revision1:rev1 revision2:rev2 - cache:true -! - -diffListFor:clsOrNil fileName:classFileNameArg directory:packageDir module:moduleDir revision1:rev1 revision2:rev2 cache:cacheIt - "return diff info. This is supposed to return a standard diff-like - list of lines, representing the diffs between two revisions. - experimental (for ownershipGraph)" - - |tempDir fullName modulePath inStream list msg cacheDir cachedFile classFileName| - - clsOrNil notNil ifTrue:[ - modulePath := clsOrNil package copyReplaceAll:$: with:$/. - fullName := modulePath , '/' , (classFileName := clsOrNil getClassFilename). - ] ifFalse:[ - modulePath := moduleDir , '/' , packageDir. - fullName := modulePath , '/' , (classFileName := classFileNameArg). - ]. - - (cacheIt) ifTrue:[ - (cacheDir := self sourceCacheDirectory) isNil ifTrue:[ - ('CVSSourceCodeManager [warning]: no source cache directory') infoPrintCR. - ] ifFalse:[ - (cacheDir / modulePath / '.diffs') exists ifFalse:[ - (cacheDir / modulePath / '.diffs') makeDirectory. - ]. - cachedFile := cacheDir / modulePath / '.diffs' / (classFileName,'_',rev1,'_',rev2). - cachedFile exists ifTrue:[ - ^ cachedFile contents - ]. - ]. - ]. - - tempDir := self createTempDirectory:nil forModule:nil. - tempDir isNil ifTrue:[ - ('CVSSourceCodeManager [error]: no tempDir - cannot extract status') errorPrintCR. - ^ nil. - ]. - - [ - self createEntryFor:fullName - module:moduleDir - in:(tempDir construct:modulePath) - revision:'1.1' - date:'dummy' - special:'' - overwrite:false. - - msg := 'CVS: Fetching diff list of '. - clsOrNil isNil ifTrue:[ - msg := msg , fullName. - ] ifFalse:[ - msg := msg , clsOrNil name. - ]. - msg := msg , ' ' , rev1 , ' vs. ' , rev2. - self activityNotification:msg. - - inStream := self - executeCVSCommand:('diff -w -r%1 -r%2 %3' bindWith:rev1 with:rev2 with:fullName) - module:moduleDir - inDirectory:tempDir - log:true - pipe:true. - - inStream isNil ifTrue:[ - ('CVSSourceCodeManager [error]: cannot open pipe to cvs diff ', fullName) errorPrintCR. - ^ nil - ]. - - "/ - "/ read the commands pipe output and extract the container info - "/ - [ inStream nextLine startsWith:'diff -'] whileFalse. - - list := inStream contents. - ] ensure:[ - inStream notNil ifTrue:[inStream close]. - tempDir recursiveRemove - ]. - list := list reject:[:line | line startsWith:'\ ']. - - cachedFile notNil ifTrue:[ - cachedFile contents:list. - ]. - ^ list - - " - SourceCodeManager statusOf:Array - SourceCodeManager statusOf:Array fileName:'Array.st' directory:'libbasic' module:'stx' - SourceCodeManager statusOf:Filename fileName:'Filename.st' directory:'libbasic' module:'stx' - SourceCodeManager statusOf:NewSystemBrowser fileName:'NewSystemBrowser.st' directory:'libtool' module:'stx' - " - - "Modified: / 29-08-2006 / 13:18:00 / cg" -! - getExistingContainersInModule:aModule directory:aPackage "return a list of existing containers." @@ -4146,27 +3953,6 @@ " ! -initialRevisionStringFor:aClass inModule:moduleDir directory:packageDir container:fileName - "return a string usable as initial revision string" - - |cvsRoot fullName| - - cvsRoot := self getCVSROOTForModule:moduleDir. - cvsRoot := self repositoryTopDirectoryFromCVSRoot:cvsRoot. - packageDir isEmptyOrNil ifTrue:[ - fullName := (cvsRoot , '/' , moduleDir) - ] ifFalse:[ - fullName := (cvsRoot , '/' , moduleDir , '/' , packageDir) - ]. - ^ self - initialRCSRevisionStringFor:aClass - in:fullName - container:fileName - - "Modified: / 16-01-1998 / 17:34:13 / stefan" - "Created: / 23-08-2006 / 14:05:46 / cg" -! - listDirectories:cvsPath "return a list of all directories in cvsPath. cvsPath is the path relative to the cvs root" @@ -4821,7 +4607,7 @@ The returned information is a structure (IdentityDictionary) filled with: - #container -> the RCS/CVS container file name + #container -> the CVS container file name #cvsRoot -> the CVS root (repository) #filename -> the actual source file name #newestRevision -> the revisionString of the newest revision @@ -4843,7 +4629,7 @@ #author -> who checked that revision into the repository #date -> when was it checked in #state -> the RCS state - #numberOfChangedLines -> the number of changed line w.r.t the previous + #numberOfChangedLines -> the number of changed lines w.r.t the previous (as string with +n -n) #logMessage -> the checkIn log message revisions are ordered newest first @@ -5049,7 +4835,7 @@ " The returned information is a list of structures (IdentityDictionary) each filled with: - #container -> the RCS/CVS container file name + #container -> the CVS container file name #cvsRoot -> the CVS root (repository) #filename -> the actual source file name #newestRevision -> the revisionString of the newest revision @@ -5071,7 +4857,7 @@ #author -> who checked that revision into the repository #date -> when was it checked in #state -> the RCS state - #numberOfChangedLines -> the number of changed line w.r.t the previous + #numberOfChangedLines -> the number of changed lines w.r.t the previous (as string with +n -n) #logMessage -> the checkIn log message revisions are ordered newest first @@ -5721,6 +5507,255 @@ "Modified: / 29-08-2006 / 13:18:00 / cg" ! ! +!CVSSourceCodeManager class methodsFor:'source code utilities'! + +annotationsFor:clsOrNil fileName:classFileName directory:packageDir module:moduleDir + "return info about who changed what and when. + Return nil on failure. + + The returned information is a structure entry for each line + #revision -> version of last change + #author -> author + #date -> change date + " + + |tempDir fullName modulePath inStream inHeaderInfo line info msg| + + tempDir := self createTempDirectory:nil forModule:nil. + tempDir isNil ifTrue:[ + ('CVSSourceCodeManager [error]: no tempDir - cannot extract log') errorPrintCR. + ^ nil. + ]. + + [ + |cmd revArg| + + modulePath := moduleDir , '/' , packageDir. + fullName := modulePath , '/' , classFileName. + + self createEntryFor:fullName + module:moduleDir + in:(tempDir construct:modulePath) + revision:'1.1' + date:'dummy' + special:'' + overwrite:false. + + msg := 'Fetching annotation log '. + clsOrNil isNil ifTrue:[ + msg := msg , 'in ' , fullName. + ] ifFalse:[ + msg := msg , 'of ', clsOrNil name. + ]. + self activityNotification:msg,'...'. + + inStream := self + executeCVSCommand:('annotate ' , fullName) + module:moduleDir + inDirectory:tempDir + log:true + pipe:true. + + inStream isNil ifTrue:[ + ('CVSSourceCodeManager [error]: cannot open pipe to cvs annotate ', fullName) errorPrintCR. + ^ nil + ]. + + "/ + "/ read the commands pipe output and extract the info + "/ + info := IdentityDictionary new. + inHeaderInfo := true. + [inHeaderInfo and:[inStream atEnd not]] whileTrue:[ + line:= inStream nextLine. + ((line ? '') startsWith:'*******') ifTrue:[ + inHeaderInfo := false. + ] + ]. + + "/ + "/ continue to read the commands pipe output + "/ and extract change info records + "/ + [inStream atEnd] whileFalse:[ + line := inStream nextLine. +Transcript showCR:line. + ]. + ] ensure:[ + inStream notNil ifTrue:[inStream close]. + + tempDir notNil ifTrue:[ + OperatingSystem accessDeniedErrorSignal handle:[:ex | + ('CVSSourceCodeManager [warning]: could not remove tempDir ', tempDir pathName) infoPrintCR. + ] do:[ + tempDir recursiveRemove + ]. + ]. + self activityNotification:nil. + ]. + ^ info + + " + SourceCodeManager + annotationsFor:Array + fileName:'Array.st' directory:'libbasic' module:'stx' + " + " + SourceCodeManager + annotationsFor:MenuPanel + fileName:'MenuPanel.st' directory:'libwidg2' module:'stx' + " +! + +diffListFor:clsOrNil fileName:classFileNameArg directory:packageDir module:moduleDir revision1:rev1 revision2:rev2 cache:cacheIt + "return diff info. This is supposed to return a standard diff-like + list of lines, representing the diffs between two revisions. + experimental (for ownershipGraph). + Here we ask cvs to give us the diff list" + + |tempDir fullName modulePath inStream list msg cacheDir cachedFile classFileName diffDir| + + clsOrNil notNil ifTrue:[ + modulePath := clsOrNil package copyReplaceAll:$: with:$/. + fullName := modulePath , '/' , (classFileName := clsOrNil getClassFilename). + ] ifFalse:[ + modulePath := moduleDir , '/' , packageDir. + fullName := modulePath , '/' , (classFileName := classFileNameArg). + ]. + + (cacheIt) ifTrue:[ + (cacheDir := self sourceCacheDirectory) isNil ifTrue:[ + ('CVSSourceCodeManager [warning]: no source cache directory') infoPrintCR. + ] ifFalse:[ + diffDir := (cacheDir / modulePath / '.diffs'). + diffDir exists ifFalse:[ + diffDir makeDirectory. + ]. + cachedFile := diffDir / (classFileName,'_',rev1,'_',rev2). + cachedFile exists ifTrue:[ + ^ cachedFile contents + ]. + ]. + ]. + + tempDir := self createTempDirectory:nil forModule:nil. + tempDir isNil ifTrue:[ + ('CVSSourceCodeManager [error]: no tempDir - cannot extract status') errorPrintCR. + ^ nil. + ]. + + [ + self createEntryFor:fullName + module:moduleDir + in:(tempDir construct:modulePath) + revision:'1.1' + date:'dummy' + special:'' + overwrite:false. + + msg := 'CVS: Fetching diff list of '. + clsOrNil isNil ifTrue:[ + msg := msg , fullName. + ] ifFalse:[ + msg := msg , clsOrNil name. + ]. + msg := msg , ' ' , rev1 , ' vs. ' , rev2. + self activityNotification:msg. + + inStream := self + executeCVSCommand:('diff -w -r%1 -r%2 %3' bindWith:rev1 with:rev2 with:fullName) + module:moduleDir + inDirectory:tempDir + log:true + pipe:true. + + inStream isNil ifTrue:[ + ('CVSSourceCodeManager [error]: cannot open pipe to cvs diff ', fullName) errorPrintCR. + ^ nil + ]. + + "/ + "/ read the command's pipe output, skipping some administrative info + "/ + [ inStream nextLine startsWith:'diff -'] whileFalse. + + list := inStream contents. + ] ensure:[ + inStream notNil ifTrue:[inStream close]. + tempDir recursiveRemove + ]. + list := list reject:[:line | line startsWith:'\ ']. + + cachedFile notNil ifTrue:[ + cachedFile contents:list. + ]. + ^ list + + " + SourceCodeManager statusOf:Array + SourceCodeManager statusOf:Array fileName:'Array.st' directory:'libbasic' module:'stx' + SourceCodeManager statusOf:Filename fileName:'Filename.st' directory:'libbasic' module:'stx' + SourceCodeManager statusOf:NewSystemBrowser fileName:'NewSystemBrowser.st' directory:'libtool' module:'stx' + " + + "Modified: / 29-08-2006 / 13:18:00 / cg" +! + +initialRCSRevisionStringFor:aClass in:dir container:fileName + "return a string usable as initial revision string" + + "/ do not make the string below into one string; + "/ RCS would expand it into a wrong rev-string + + |nm oldRev idx special| + + nm := fileName. + (nm endsWith:',v') ifTrue:[ + nm := nm copyButLast:2 + ]. + (nm endsWith:'.st') ifFalse:[ + nm := nm , '.st' + ]. + + oldRev := aClass revisionString. + special := ''. + + oldRev notNil ifTrue:[ + idx := oldRev lastIndexOf:$[. + idx ~~ 0 ifTrue:[ + idx := oldRev indexOf:$[ startingAt:idx+1. + idx ~~ 0 ifTrue:[ + special := ' ' , (oldRev copyFrom:idx). + ] + ] + ]. + + + ^ '$' , 'Header: ' , dir , '/' , fileName , ',v $' + , special + + "Modified: 17.9.1996 / 15:57:15 / cg" + "Created: 14.2.1997 / 20:59:28 / cg" +! + +initialRevisionStringFor:aClass inModule:moduleDir directory:packageDir container:fileName + "return a string usable as initial revision string" + + |cvsRoot fullName| + + cvsRoot := self getCVSROOTForModule:moduleDir. + cvsRoot := self repositoryTopDirectoryFromCVSRoot:cvsRoot. + packageDir isEmptyOrNil ifTrue:[ + fullName := (cvsRoot , '/' , moduleDir) + ] ifFalse:[ + fullName := (cvsRoot , '/' , moduleDir , '/' , packageDir) + ]. + ^ self initialRCSRevisionStringFor:aClass in:fullName container:fileName + + "Modified: / 16-01-1998 / 17:34:13 / stefan" + "Created: / 23-08-2006 / 14:05:46 / cg" +! ! + !CVSSourceCodeManager class methodsFor:'testing'! isCVS @@ -5729,6 +5764,179 @@ "Created: / 16-08-2006 / 10:58:19 / cg" ! ! +!CVSSourceCodeManager::CVSVersionInfo class methodsFor:'documentation'! + +copyright +" + COPYRIGHT (c) 2009 by 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. +" +! + +documentation +" + In ancient times, Class used to return a Dictionary when asked for versionInfo. + This has been replaced by instances of VersionInfo and subclasses. + + CVSVersionInfo adds some CVS specific data. + + [author:] + cg (cg@AQUA-DUO) +" +! + +version + ^ '$Header$' +! + +version_CVS + ^ '$Header$' +! ! + +!CVSSourceCodeManager::CVSVersionInfo class methodsFor:'instance creation'! + +fromRCSString:aString + "{ Pragma: +optSpace }" + + "I know how to parse RCS/CVS version id strings. + Return an instance filled with revision info which is + extracted from aString. This must be in RCS/CVS format." + + |words firstWord nextWord info nm s fn revString d | + + s := aString readStream. + s skipSeparators. + firstWord := s upToSeparator. + + info := self new. + + "/ + "/ supported formats: + "/ + "/ $-Header: pathName rev date time user state $ + "/ $-Revision: rev $ + "/ $-Id: fileName rev date time user state $ + "/ + (firstWord = '$Header:' or:[firstWord = 'Header:']) ifTrue:[ + d := firstWord first. + s skipSeparators. + nm := s throughAll:',v '. + nm := nm withoutSeparators. + info repositoryPathName:nm. + info fileName:(nm asFilename baseName copyButLast:2). + words := s upToEnd asCollectionOfWords readStream. + + words atEnd ifFalse:[ + nextWord := words next. + nextWord first ~= d ifTrue:[ + info revision:nextWord. + nextWord := words next. + (nextWord notNil and:[nextWord first ~= d]) ifTrue:[ + info date:nextWord. + info time:words next. + nextWord := words next. + (nextWord notNil and:[nextWord startsWithAnyOf:'+-']) ifTrue:[ + info timezone:nextWord. + nextWord := words next. + ]. + info user:nextWord. + info state:words next. + ] + ]. + ]. + ^ info + ]. + + (firstWord = '$Revision:' or:[firstWord = 'Revision:']) ifTrue:[ + info revision:(s upToEnd asCollectionOfWords first). + ^ info + ]. + + (firstWord = '$Id:' or:[firstWord = 'Id:']) ifTrue:[ + "/commented out by Jan Vrany, 2009/10/20 + "/according to http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.keywords.html + "/svn has no support for $ Header $ expansion. Therefore + "/libsvn uses $Id$ instead. + "/self halt:'no longer supported'. + words := s upToEnd asCollectionOfWords readStream. + info fileName:(fn := words next). + (fn endsWith:',v') ifFalse:[ + "/ not a CVS version + ^ nil + ]. + info revision:(revString := words next). + + "/ do not use matchesRegex:'[0-9]+\.[0-9]+.*') here: regex is an optional package + ((revString conform:[:c | c isDigit or:[c == $.]]) + and:[revString includes:$.]) ifFalse:[ + "/ not a CVS version + ^ nil + ]. + info date:(words next). + info time:(words next). + info user:(words next). + info state:(words next). + ^ info + ]. + + ^ nil + + " + CVSVersionInfo fromRCSString:('$' , 'Revision: 1.122 $') + CVSVersionInfo fromRCSString:(CVSSourceCodeManager version) + CVSVersionInfo fromRCSString:(SVNSourceCodeManager version_CVS) + " + + "Modified (comment): / 11-10-2011 / 23:41:05 / Jan Vrany " + "Modified: / 22-11-2011 / 16:15:49 / cg" + "Modified (format): / 24-11-2011 / 10:56:51 / cg" +! ! + +!CVSSourceCodeManager::CVSVersionInfo methodsFor:'accessing'! + +changedLinesInfo + ^ changedLinesInfo +! + +changedLinesInfo:aString + changedLinesInfo := aString. +! + +repositoryPathName + ^ repositoryPathName +! + +repositoryPathName:something + repositoryPathName := something. +! + +timeZone + ^ timeZone +! + +timeZone:something + timeZone := something. +! + +timezone + ^ timeZone + + "Created: / 22-10-2008 / 20:50:39 / cg" +! + +timezone:something + timeZone := something. + + "Created: / 22-10-2008 / 20:50:32 / cg" +! ! + !CVSSourceCodeManager class methodsFor:'documentation'! version diff -r e96794cd9edd -r 66a7a47f9253 CVSVersionInfo.st --- a/CVSVersionInfo.st Wed Sep 07 16:04:00 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,195 +0,0 @@ -" - COPYRIGHT (c) 2009 by 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' }" - -VersionInfo subclass:#CVSVersionInfo - instanceVariableNames:'repositoryPathName timeZone state' - classVariableNames:'' - poolDictionaries:'' - category:'System-SourceCodeManagement' -! - -!CVSVersionInfo class methodsFor:'documentation'! - -copyright -" - COPYRIGHT (c) 2009 by 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. -" -! - -documentation -" - In ancient times, Class used to return a Dictionary when asked for versionInfo. - This has been replaced by instances of VersionInfo and subclasses. - - CVSVersionInfo adds some CVS specific data. - - [author:] - cg (cg@AQUA-DUO) -" -! ! - -!CVSVersionInfo class methodsFor:'instance creation'! - -fromRCSString:aString - "{ Pragma: +optSpace }" - - "I know how to parse RCS/CVS version id strings. - Return an instance filled with revision info which is - extracted from aString. This must be in RCS/CVS format." - - |words firstWord nextWord info nm s fn revString d | - - s := aString readStream. - s skipSeparators. - firstWord := s upToSeparator. - - info := self new. - - "/ - "/ supported formats: - "/ - "/ $-Header: pathName rev date time user state $ - "/ $-Revision: rev $ - "/ $-Id: fileName rev date time user state $ - "/ - (firstWord = '$Header:' or:[firstWord = '§Header:']) ifTrue:[ - d := firstWord first. - s skipSeparators. - nm := s throughAll:',v '. - nm := nm withoutSeparators. - info repositoryPathName:nm. - info fileName:(nm asFilename baseName copyButLast:2). - words := s upToEnd asCollectionOfWords readStream. - - words atEnd ifFalse:[ - nextWord := words next. - nextWord first ~= d ifTrue:[ - info revision:nextWord. - nextWord := words next. - (nextWord notNil and:[nextWord first ~= d]) ifTrue:[ - info date:nextWord. - info time:words next. - nextWord := words next. - (nextWord notNil and:[nextWord startsWithAnyOf:'+-']) ifTrue:[ - info timezone:nextWord. - nextWord := words next. - ]. - info user:nextWord. - info state:words next. - ] - ]. - ]. - ^ info - ]. - - (firstWord = '$Revision:' or:[firstWord = '§Revision:']) ifTrue:[ - info revision:(s upToEnd asCollectionOfWords first). - ^ info - ]. - - (firstWord = '$Id:' or:[firstWord = '§Id:']) ifTrue:[ - "/commented out by Jan Vrany, 2009/10/20 - "/according to http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.keywords.html - "/svn has no support for $ Header $ expansion. Therefore - "/libsvn uses $Id: CVSVersionInfo.st,v 1.13 2014-11-28 17:28:37 cg Exp $ instead. - "/self halt:'no longer supported'. - words := s upToEnd asCollectionOfWords readStream. - info fileName:(fn := words next). - (fn endsWith:',v') ifFalse:[ - "/ not a CVS version - ^ nil - ]. - info revision:(revString := words next). - - "/ do not use matchesRegex:'[0-9]+\.[0-9]+.*') here: regex is an optional package - ((revString conform:[:c | c isDigit or:[c == $.]]) - and:[revString includes:$.]) ifFalse:[ - "/ not a CVS version - ^ nil - ]. - info date:(words next). - info time:(words next). - info user:(words next). - info state:(words next). - ^ info - ]. - - ^ nil - - " - CVSVersionInfo fromRCSString:('$' , 'Revision: 1.122 $') - CVSVersionInfo fromRCSString:(CVSSourceCodeManager version) - CVSVersionInfo fromRCSString:(SVNSourceCodeManager version_CVS) - " - - "Modified (comment): / 11-10-2011 / 23:41:05 / Jan Vrany " - "Modified: / 22-11-2011 / 16:15:49 / cg" - "Modified (format): / 24-11-2011 / 10:56:51 / cg" -! ! - -!CVSVersionInfo methodsFor:'accessing'! - -repositoryPathName - ^ repositoryPathName -! - -repositoryPathName:something - repositoryPathName := something. -! - -state - ^ state -! - -state:something - state := something. -! - -timeZone - ^ timeZone -! - -timeZone:something - timeZone := something. -! - -timezone - ^ timeZone - - "Created: / 22-10-2008 / 20:50:39 / cg" -! - -timezone:something - timeZone := something. - - "Created: / 22-10-2008 / 20:50:32 / cg" -! ! - -!CVSVersionInfo class methodsFor:'documentation'! - -version - ^ '$Header: /cvs/stx/stx/libbasic3/CVSVersionInfo.st,v 1.13 2014-11-28 17:28:37 cg Exp $' -! - -version_CVS - ^ '$Header: /cvs/stx/stx/libbasic3/CVSVersionInfo.st,v 1.13 2014-11-28 17:28:37 cg Exp $' -! ! - diff -r e96794cd9edd -r 66a7a47f9253 ChangeSet.st --- a/ChangeSet.st Wed Sep 07 16:04:00 2016 +0100 +++ b/ChangeSet.st Mon Nov 28 17:11:46 2016 +0000 @@ -2040,15 +2040,17 @@ |isForSame| isForSame := false. - (((aChangeInA isMethodChange and:[aChangeInB isMethodChange]) - and:[aChangeInA changeSelector = aChangeInB changeSelector]) - and:[aChangeInA changeClass isMeta = aChangeInB changeClass isMeta]) + (aChangeInA isMethodChange + and:[aChangeInB isMethodChange + and:[aChangeInA changeSelector = aChangeInB changeSelector + and:[aChangeInA changeClass isMeta = aChangeInB changeClass isMeta]]]) ifTrue:[ isForSame := true. ] ifFalse:[ - ((aChangeInA isClassChange and:[aChangeInB isClassChange]) + (aChangeInA isClassChange + and:[aChangeInB isClassChange and:[aChangeInA changeClass nameWithoutNameSpacePrefix - = aChangeInB changeClass nameWithoutNameSpacePrefix]) + = aChangeInB changeClass nameWithoutNameSpacePrefix]]) ifTrue:[ isForSame := true. ] diff -r e96794cd9edd -r 66a7a47f9253 DataBaseSourceCodeManager.st --- a/DataBaseSourceCodeManager.st Wed Sep 07 16:04:00 2016 +0100 +++ b/DataBaseSourceCodeManager.st Mon Nov 28 17:11:46 2016 +0000 @@ -21,7 +21,7 @@ ! VersionInfo subclass:#DBVersionInfo - instanceVariableNames:'state symbolicVersionName' + instanceVariableNames:'symbolicVersionName' classVariableNames:'' poolDictionaries:'' privateIn:DataBaseSourceCodeManager @@ -735,14 +735,6 @@ !DataBaseSourceCodeManager::DBVersionInfo methodsFor:'accessing'! -state - ^ state -! - -state:something - state := something. -! - symbolicVersionName "return an additional symbolic version name, which is used for human readers (and not unique)" diff -r e96794cd9edd -r 66a7a47f9253 FileBasedSourceCodeManager.st --- a/FileBasedSourceCodeManager.st Wed Sep 07 16:04:00 2016 +0100 +++ b/FileBasedSourceCodeManager.st Mon Nov 28 17:11:46 2016 +0000 @@ -237,7 +237,9 @@ |targetDir newestRevision newRevision newFile packageMode filter outStream| targetDir := self packageDirectoryForModule:moduleDir package:packageDir. - + targetDir exists ifFalse:[ + targetDir recursiveMakeDirectory + ]. (targetDir filesMatching:(classFileName,'_*')) do:[:eachVersionFile | |versionString| diff -r e96794cd9edd -r 66a7a47f9253 HTMLDocGenerator.st --- a/HTMLDocGenerator.st Wed Sep 07 16:04:00 2016 +0100 +++ b/HTMLDocGenerator.st Mon Nov 28 17:11:46 2016 +0000 @@ -1,5 +1,3 @@ -"{ Encoding: utf8 }" - " COPYRIGHT (c) 1996 by Claus Gittinger All Rights Reserved @@ -48,10 +46,13 @@ documentation " Generates HTML documentation for a class. - Although this is normally used with the SystemBrowser - (classes-generate documentation menu), - it may be useful on its own, to programatically generate - up-to-date documents from a classes source. + + This is used with the SystemBrowser (classes-generate documentation menu), + and the online documentation (which generates up-to-date documents just-in-time + out of the running system). + + It may also be useful, to programatically generate up-to-date documents + into a folder of self contained html files (eg. for deployment). This generator extracts the documentation methods source (or comment), individual method comments (the first comment in @@ -211,7 +212,8 @@ CachedKWIC := nil " CachedKWIC isNil ifTrue:[ - CachedKWIC := self generateKWIC. + "/ CachedKWIC := self generateKWIC. + CachedKWIC := self generateKWICForClassAndMethodNames. "/ to flush the cached kwic, whenever a class-documentation method is changed Smalltalk addDependent:self class. ]. @@ -368,6 +370,54 @@ !HTMLDocGenerator class methodsFor:'document generation-helpers'! +camelCaseSeparatedWordsOf:wordIn do:aBlock + " + self camelCaseSeparatedWordsOf:'HelloWorld' do:[:w | Transcript showCR:w] + self camelCaseSeparatedWordsOf:'abcDef' do:[:w | Transcript showCR:w] + self camelCaseSeparatedWordsOf:'UTFEncoder' do:[:w | Transcript showCR:w] + self camelCaseSeparatedWordsOf:'JisEncoder' do:[:w | Transcript showCR:w] + self camelCaseSeparatedWordsOf:'JISEncode' do:[:w | Transcript showCR:w] + " + |state newState in out ch part| + + in := wordIn readStream. + out := '' writeStream. + [in atEnd] whileFalse:[ + ch := in next. + (ch isDigit or:[ch == $_]) ifFalse:[ + newState := ch isUppercase. + ]. + (newState ~~ state) ifTrue:[ + newState == true ifTrue:[ + "/ going from lower- to uppercase + part := out contents. + part notEmpty ifTrue:[ aBlock value:part ]. + out := '' writeStream. + out nextPut:ch. + state := newState. + ] ifFalse:[ + "/ going upper- to lowercase + out size <= 1 ifTrue:[ + out nextPut:ch. + ] ifFalse:[ + |prev| + + prev := out contents. + aBlock value:(prev copyButLast). + out := '' writeStream. + out nextPut:prev last. + out nextPut:ch. + ]. + state := newState. + ]. + ] ifFalse:[ + out nextPut:ch. + ]. + ]. + part := out contents. + part notEmpty ifTrue:[ aBlock value:part ]. +! + generateKWIC |fillWords kwic| @@ -375,37 +425,117 @@ #( 'the' 'a' 'can' 'you' - 'to' 'in' 'at' 'of' + 'to' 'in' 'out' 'at' 'of' 'also' 'with' 'without' 'all' 'any' 'how' - 'however' 'although' 'always' + 'however' 'although' 'always' 'either' 'neither' 'anywhere' 'anyway' 'anything' 'anyone' - 'not' 'but' + 'not' 'but' 'else' 'elsewhere' 'am' 'are' 'is' 'be' 'will' 'wont' 'won''t' 'do' 'don''t' + 'no' 'non' 'now' 'old' 'on' 'only' 'my' 'their' 'your' 'its' 'one' 'two' 'three' - 'etc' 'for' + 'etc' 'for' 'lot' 'lots' 'made' 'may' 'most' 'mostly' 'much' 'use' 'this' 'that' 'which' 'what' 'why' + 'or' 'other' 'please' ). kwic := KeywordInContextIndexBuilder new. kwic excluded:fillWords. - kwic separatorAlgorithm:[:line | line asCollectionOfSubstringsSeparatedByAny:' ^~=@.:,;-+*/()[]|{}#"''<>',Character cr]. + kwic separatorAlgorithm:[:line | + line asCollectionOfSubstringsSeparatedByAny:' ^~=@.:,;-+*/()[]|{}#"''<>',Character cr + ]. kwic exclusionFilter:[:word | word size == 1 or:[ word conform:#isDigit ]]. - + Smalltalk allClassesDo:[:eachClass | - |doc| + eachClass isLoaded ifTrue:[ + |doc| + + doc := eachClass commentOrDocumentationString. + doc notEmptyOrNil ifTrue:[ + kwic addLine:doc reference:eachClass ignoreCase:true. + ]. + ]. + ]. + + "/ if we have a key like 'startWith:' in the list, + "/ and 'starts' is also there, place the 'startsWith:' entries into the same bin. + kwic remapKeywordsWith:[:oldKey :knownMappings | + |newKey| + + 6 to:oldKey size - 1 do:[:len | + newKey isNil ifTrue:[ + |part| + + part := (oldKey copyTo:len). + (knownMappings includes:part) ifTrue:[ + newKey := part. + ]. + ]. + ]. + newKey ? oldKey. + ]. + + ^ kwic + + " + CachedKWIC := nil. + self generateKWIC + " +! + +generateKWICForClassAndMethodNames + |fillWords kwic| + + fillWords := + #( +"/ 'the' 'a' +"/ 'can' 'you' +"/ 'to' 'in' 'out' 'at' 'of' +"/ 'also' 'with' 'without' 'all' 'any' 'how' +"/ 'however' 'although' 'always' 'either' 'neither' +"/ 'anywhere' 'anyway' 'anything' 'anyone' +"/ 'not' 'but' 'else' 'elsewhere' +"/ 'am' 'are' 'is' 'be' 'will' 'wont' 'won''t' 'do' 'don''t' +"/ 'no' 'non' 'now' 'old' 'on' 'only' +"/ 'my' 'their' 'your' 'its' +"/ 'one' 'two' 'three' +"/ 'etc' 'for' 'lot' 'lots' 'made' 'may' 'most' 'mostly' 'much' +"/ 'use' 'this' 'that' 'which' 'what' 'why' +"/ 'or' 'other' 'please' + ). - doc := eachClass commentOrDocumentationString. - doc notEmptyOrNil ifTrue:[ - kwic addLine:doc reference:eachClass ignoreCase:true. - ]. + kwic := KeywordInContextIndexBuilder new. + kwic excluded:fillWords. + kwic separatorAlgorithm:[:name | + |words| + words := Set new. + (name asCollectionOfSubstringsSeparatedBy:$:) do:[:eachPart | + eachPart notEmpty ifTrue:[ + self camelCaseSeparatedWordsOf:eachPart do:[:w | words add:w]. + ]. + ]. + words := words reject:[:w | w isEmpty]. + words + ]. + + Smalltalk allClassesDo:[:eachClass | + kwic addLine:eachClass name reference:eachClass ignoreCase:true. +"/ eachClass isLoaded ifTrue:[ +"/ eachClass theNonMetaclass selectorsAndMethodsDo:[:sel :mthd | +"/ kwic addLine:sel reference:mthd ignoreCase:true. +"/ ]. +"/ eachClass theMetaclass selectorsAndMethodsDo:[:sel :mthd| +"/ kwic addLine:sel reference:mthd ignoreCase:true. +"/ ]. +"/ ]. ]. ^ kwic " - self generateKWIC + CachedKWIC := nil. + self generateKWICForClassAndMethodNames " ! @@ -2317,13 +2447,13 @@ ]. ]. - aKWIC matchSorter:[:a :b | a value name < b value name]. + aKWIC matchSorter:[:a :b | a key < b key]. - aKWIC entriesDo:[:word :left :right :class| + aKWIC entriesDo:[:word :left :right :classOrMethod| |ref lcWord ctx| ctx := (HTMLUtilities escapeCharacterEntities:(left contractAtBeginningTo:25)) - ,' ',(HTMLUtilities escapeCharacterEntities:word),' ' + , ' ',(HTMLUtilities escapeCharacterEntities:word),' ' ,(HTMLUtilities escapeCharacterEntities:(right contractAtEndTo:25)). lcWord := word asLowercase. @@ -2334,14 +2464,22 @@ "/ outStream nextPutLine:'
',(HTMLUtilities escapeCharacterEntities:(caseMapping at:lcWord ifAbsent:[word])),'
'. outStream nextPutLine:'
',(HTMLUtilities escapeCharacterEntities:word),'
'. outStream nextPutLine:'
  • '. - self generateClassDocReferenceFor:class name. + classOrMethod isBehavior ifTrue:[ + self generateClassDocReferenceFor:classOrMethod name. + ] ifFalse:[ + self generateMethodDocReferenceFor:classOrMethod selector inClass:classOrMethod mclass name text:classOrMethod selector autoloading:nil. + ]. outStream nextPutAll:''. outStream nextPutLine:ctx. outStream nextPutLine:'
  • '. prevWord := lcWord. ] ifFalse:[ outStream nextPutLine:'
  • '. - self generateClassDocReferenceFor:class name. + classOrMethod isBehavior ifTrue:[ + self generateClassDocReferenceFor:classOrMethod name. + ] ifFalse:[ + self generateMethodDocReferenceFor:classOrMethod selector inClass:classOrMethod mclass name text:classOrMethod selector autoloading:nil. + ]. outStream nextPutAll:''. outStream nextPutLine:ctx. outStream nextPutLine:'
  • '. @@ -2363,7 +2501,21 @@ ! htmlPackageList - "generate an HTML string for a given list of selectors" + "generate an HTML string for a list of all packages in the system" + + ^ self + htmlPackageListFor:(Smalltalk allPackageIDs) + withDocumentation:true "/ false + + " + self new + generateDocumentForOfflineReading:true; + htmlPackageList. + " +! + +htmlPackageListFor:packageNames withDocumentation:withDocumentation + "generate an HTML string for a given list of packages" |s| @@ -2377,7 +2529,7 @@ self generateH1:'Package Index'. s nextPutLine:'
      '. - Smalltalk allPackageIDs + packageNames do:[:p | |pckgString| @@ -2910,6 +3062,38 @@ outStream nextPutLine:'
      '. ! +generateMethodDocReferenceFor:selector inClass:className text:text autoloading:autoloadedClass + "generates a link to a classes documentation" + + |href serviceLinkName action| + + self generatingForSTXBrowser ifTrue:[ + action := self class name , ' htmlDocOf:' , className. + autoloadedClass notNil ifTrue:[ + action := autoloadedClass , ' autoload,', action. + ]. + + href := self + anchorForHTMLAction:action + info:('Show documentation of ' , className ) + text:text. + ] ifFalse:[ + "/ page is generated for a real http service; + "/ generate a link to the services classDocOf page, + "/ Assumes that the server has a classDoc service running. + httpRequestOrNil notNil ifTrue:[ + serviceLinkName := httpRequestOrNil serviceLinkName. + ]. + href := self + anchorFor:(serviceLinkName, '/classDocOf,', (HTMLUtilities escape:className) ) + info:('Show documentation of ' , className ) + text:text + name:nil + ]. + + outStream nextPutAll:href. +! + generatePackageDocReferenceFor:packageID text:text "generates a link to a package documentation" diff -r e96794cd9edd -r 66a7a47f9253 Make.proto --- a/Make.proto Wed Sep 07 16:04:00 2016 +0100 +++ b/Make.proto Mon Nov 28 17:11:46 2016 +0000 @@ -151,8 +151,6 @@ # BEGINMAKEDEPEND --- do not remove this line; make depend needs it $(OUTDIR)AbstractSourceCodeManager.$(O) AbstractSourceCodeManager.$(C) AbstractSourceCodeManager.$(H): AbstractSourceCodeManager.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) -$(OUTDIR)BeeProjectWriter.$(O) BeeProjectWriter.$(C) BeeProjectWriter.$(H): BeeProjectWriter.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) -$(OUTDIR)BeeSourceWriter.$(O) BeeSourceWriter.$(C) BeeSourceWriter.$(H): BeeSourceWriter.st $(INCLUDE_TOP)/stx/libbasic/AbstractSourceFileWriter.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SmalltalkChunkFileSourceWriter.$(H) $(STCHDR) $(OUTDIR)CallChain.$(O) CallChain.$(C) CallChain.$(H): CallChain.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)Change.$(O) Change.$(C) Change.$(H): Change.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)ChangeDeltaInformation.$(O) ChangeDeltaInformation.$(C) ChangeDeltaInformation.$(H): ChangeDeltaInformation.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) @@ -174,15 +172,11 @@ $(OUTDIR)SourceCodeManagerUtilities.$(O) SourceCodeManagerUtilities.$(C) SourceCodeManagerUtilities.$(H): SourceCodeManagerUtilities.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)SystemEnvironment.$(O) SystemEnvironment.$(C) SystemEnvironment.$(H): SystemEnvironment.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)SystemOrganizer.$(O) SystemOrganizer.$(C) SystemOrganizer.$(H): SystemOrganizer.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) -$(OUTDIR)SystemProfiler.$(O) SystemProfiler.$(C) SystemProfiler.$(H): SystemProfiler.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)TraceBuffer.$(O) TraceBuffer.$(C) TraceBuffer.$(H): TraceBuffer.st $(INCLUDE_TOP)/stx/libbasic/Array.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(STCHDR) $(OUTDIR)VersionInfo.$(O) VersionInfo.$(C) VersionInfo.$(H): VersionInfo.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)WrappedMethod.$(O) WrappedMethod.$(C) WrappedMethod.$(H): WrappedMethod.st $(INCLUDE_TOP)/stx/libbasic/CompiledCode.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutableFunction.$(H) $(INCLUDE_TOP)/stx/libbasic/Method.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)stx_libbasic3.$(O) stx_libbasic3.$(C) stx_libbasic3.$(H): stx_libbasic3.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR) -$(OUTDIR)BeeProjectDefinitionWriter.$(O) BeeProjectDefinitionWriter.$(C) BeeProjectDefinitionWriter.$(H): BeeProjectDefinitionWriter.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/BeeProjectWriter.$(H) $(STCHDR) -$(OUTDIR)BeeProjectSourceWriter.$(O) BeeProjectSourceWriter.$(C) BeeProjectSourceWriter.$(H): BeeProjectSourceWriter.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/BeeProjectWriter.$(H) $(STCHDR) -$(OUTDIR)CVSSourceCodeManager.$(O) CVSSourceCodeManager.$(C) CVSSourceCodeManager.$(H): CVSSourceCodeManager.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/AbstractSourceCodeManager.$(H) $(STCHDR) -$(OUTDIR)CVSVersionInfo.$(O) CVSVersionInfo.$(C) CVSVersionInfo.$(H): CVSVersionInfo.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/VersionInfo.$(H) $(STCHDR) +$(OUTDIR)CVSSourceCodeManager.$(O) CVSSourceCodeManager.$(C) CVSSourceCodeManager.$(H): CVSSourceCodeManager.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/AbstractSourceCodeManager.$(H) $(INCLUDE_TOP)/stx/libbasic3/VersionInfo.$(H) $(STCHDR) $(OUTDIR)ChangeSetDiffEntry.$(O) ChangeSetDiffEntry.$(C) ChangeSetDiffEntry.$(H): ChangeSetDiffEntry.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/ChangeSetDiffComponent.$(H) $(STCHDR) $(OUTDIR)ChangeSetDiffSet.$(O) ChangeSetDiffSet.$(C) ChangeSetDiffSet.$(H): ChangeSetDiffSet.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/ChangeSetDiffComponent.$(H) $(STCHDR) $(OUTDIR)ClassChange.$(O) ClassChange.$(C) ClassChange.$(H): ClassChange.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/Change.$(H) $(STCHDR) @@ -199,7 +193,6 @@ $(OUTDIR)NameSpaceCreationChange.$(O) NameSpaceCreationChange.$(C) NameSpaceCreationChange.$(H): NameSpaceCreationChange.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/Change.$(H) $(STCHDR) $(OUTDIR)OtherChange.$(O) OtherChange.$(C) OtherChange.$(H): OtherChange.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/Change.$(H) $(STCHDR) $(OUTDIR)PerforceSourceCodeManager.$(O) PerforceSourceCodeManager.$(C) PerforceSourceCodeManager.$(H): PerforceSourceCodeManager.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(INCLUDE_TOP)/stx/libbasic3/AbstractSourceCodeManager.$(H) $(INCLUDE_TOP)/stx/libbasic3/VersionInfo.$(H) $(STCHDR) -$(OUTDIR)SVNVersionInfo.$(O) SVNVersionInfo.$(C) SVNVersionInfo.$(H): SVNVersionInfo.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/VersionInfo.$(H) $(STCHDR) $(OUTDIR)SourceCodeManagerUtilitiesForContainerBasedManagers.$(O) SourceCodeManagerUtilitiesForContainerBasedManagers.$(C) SourceCodeManagerUtilitiesForContainerBasedManagers.$(H): SourceCodeManagerUtilitiesForContainerBasedManagers.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/SourceCodeManagerUtilities.$(H) $(STCHDR) $(OUTDIR)SourceCodeManagerUtilitiesForWorkspaceBasedManagers.$(O) SourceCodeManagerUtilitiesForWorkspaceBasedManagers.$(C) SourceCodeManagerUtilitiesForWorkspaceBasedManagers.$(H): SourceCodeManagerUtilitiesForWorkspaceBasedManagers.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/SourceCodeManagerUtilities.$(H) $(STCHDR) $(OUTDIR)StoreSourceCodeManager.$(O) StoreSourceCodeManager.$(C) StoreSourceCodeManager.$(H): StoreSourceCodeManager.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/AbstractSourceCodeManager.$(H) $(STCHDR) @@ -228,6 +221,11 @@ $(OUTDIR)MethodPackageChange.$(O) MethodPackageChange.$(C) MethodPackageChange.$(H): MethodPackageChange.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/Change.$(H) $(INCLUDE_TOP)/stx/libbasic3/ClassChange.$(H) $(INCLUDE_TOP)/stx/libbasic3/MethodChange.$(H) $(STCHDR) $(OUTDIR)MethodPrivacyChange.$(O) MethodPrivacyChange.$(C) MethodPrivacyChange.$(H): MethodPrivacyChange.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/Change.$(H) $(INCLUDE_TOP)/stx/libbasic3/ClassChange.$(H) $(INCLUDE_TOP)/stx/libbasic3/MethodChange.$(H) $(STCHDR) $(OUTDIR)MethodRemoveChange.$(O) MethodRemoveChange.$(C) MethodRemoveChange.$(H): MethodRemoveChange.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/Change.$(H) $(INCLUDE_TOP)/stx/libbasic3/ClassChange.$(H) $(INCLUDE_TOP)/stx/libbasic3/MethodChange.$(H) $(STCHDR) +$(OUTDIR)MethodCategoryChange.$(O) MethodCategoryChange.$(C) MethodCategoryChange.$(H): MethodCategoryChange.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/Change.$(H) $(INCLUDE_TOP)/stx/libbasic3/ClassChange.$(H) $(INCLUDE_TOP)/stx/libbasic3/MethodChange.$(H) $(STCHDR) +$(OUTDIR)MethodDefinitionChange.$(O) MethodDefinitionChange.$(C) MethodDefinitionChange.$(H): MethodDefinitionChange.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/Change.$(H) $(INCLUDE_TOP)/stx/libbasic3/ClassChange.$(H) $(INCLUDE_TOP)/stx/libbasic3/MethodChange.$(H) $(STCHDR) +$(OUTDIR)MethodPackageChange.$(O) MethodPackageChange.$(C) MethodPackageChange.$(H): MethodPackageChange.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/Change.$(H) $(INCLUDE_TOP)/stx/libbasic3/ClassChange.$(H) $(INCLUDE_TOP)/stx/libbasic3/MethodChange.$(H) $(STCHDR) +$(OUTDIR)MethodPrivacyChange.$(O) MethodPrivacyChange.$(C) MethodPrivacyChange.$(H): MethodPrivacyChange.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/Change.$(H) $(INCLUDE_TOP)/stx/libbasic3/ClassChange.$(H) $(INCLUDE_TOP)/stx/libbasic3/MethodChange.$(H) $(STCHDR) +$(OUTDIR)MethodRemoveChange.$(O) MethodRemoveChange.$(C) MethodRemoveChange.$(H): MethodRemoveChange.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic3/Change.$(H) $(INCLUDE_TOP)/stx/libbasic3/ClassChange.$(H) $(INCLUDE_TOP)/stx/libbasic3/MethodChange.$(H) $(STCHDR) $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/CompiledCode.$(H) $(INCLUDE_TOP)/stx/libbasic/ConfigurableFeatures.$(H) $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutableFunction.$(H) $(INCLUDE_TOP)/stx/libbasic/IdentityDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/UserPreferences.$(H) $(STCHDR) # ENDMAKEDEPEND --- do not remove this line diff -r e96794cd9edd -r 66a7a47f9253 Make.spec --- a/Make.spec Wed Sep 07 16:04:00 2016 +0100 +++ b/Make.spec Mon Nov 28 17:11:46 2016 +0000 @@ -83,7 +83,6 @@ BeeProjectDefinitionWriter \ BeeProjectSourceWriter \ CVSSourceCodeManager \ - CVSVersionInfo \ ChangeSetDiffEntry \ ChangeSetDiffSet \ ClassChange \ @@ -100,7 +99,6 @@ NameSpaceCreationChange \ OtherChange \ PerforceSourceCodeManager \ - SVNVersionInfo \ SourceCodeManagerUtilitiesForContainerBasedManagers \ SourceCodeManagerUtilitiesForWorkspaceBasedManagers \ StoreSourceCodeManager \ @@ -166,7 +164,6 @@ $(OUTDIR_SLASH)BeeProjectDefinitionWriter.$(O) \ $(OUTDIR_SLASH)BeeProjectSourceWriter.$(O) \ $(OUTDIR_SLASH)CVSSourceCodeManager.$(O) \ - $(OUTDIR_SLASH)CVSVersionInfo.$(O) \ $(OUTDIR_SLASH)ChangeSetDiffEntry.$(O) \ $(OUTDIR_SLASH)ChangeSetDiffSet.$(O) \ $(OUTDIR_SLASH)ClassChange.$(O) \ @@ -183,7 +180,6 @@ $(OUTDIR_SLASH)NameSpaceCreationChange.$(O) \ $(OUTDIR_SLASH)OtherChange.$(O) \ $(OUTDIR_SLASH)PerforceSourceCodeManager.$(O) \ - $(OUTDIR_SLASH)SVNVersionInfo.$(O) \ $(OUTDIR_SLASH)SourceCodeManagerUtilitiesForContainerBasedManagers.$(O) \ $(OUTDIR_SLASH)SourceCodeManagerUtilitiesForWorkspaceBasedManagers.$(O) \ $(OUTDIR_SLASH)StoreSourceCodeManager.$(O) \ diff -r e96794cd9edd -r 66a7a47f9253 MessageTracer.st --- a/MessageTracer.st Wed Sep 07 16:04:00 2016 +0100 +++ b/MessageTracer.st Mon Nov 28 17:11:46 2016 +0000 @@ -1,5 +1,3 @@ -"{ Encoding: utf8 }" - " COPYRIGHT (c) 1994 by Claus Gittinger All Rights Reserved @@ -1750,7 +1748,7 @@ MessageTracer untraceMethod:(SequenceableCollection compiledMethodAt:#quickSortFrom:to:). " " - dont do this: + don't do this: " " MessageTracer traceMethod:(Object compiledMethodAt:#at:). @@ -2045,12 +2043,12 @@ !MessageTracer class methodsFor:'method wrapping'! unwrapAllMethods - "just in case you dont know what methods have break/trace-points + "just in case you don't know what methods have break/trace-points on them; this removes them all" WrappedMethod allInstancesDo:[:aWrapperMethod | - aWrapperMethod unregister. - self unwrapMethod:aWrapperMethod. + aWrapperMethod unregister. + self unwrapMethod:aWrapperMethod. ] " diff -r e96794cd9edd -r 66a7a47f9253 MethodChange.st --- a/MethodChange.st Wed Sep 07 16:04:00 2016 +0100 +++ b/MethodChange.st Mon Nov 28 17:11:46 2016 +0000 @@ -274,24 +274,56 @@ class nameWithoutPrefix = className ]]) ifFalse:[ - "/ ask for a replacement class - replacementClassName := Dialog - requestClassName:('Cannot apply change for missing class: %1\\Use replacement class (or press cancel)' bindWith:className) withCRs - initialAnswer:suggestion. - replacementClassName isNil ifTrue:[ AbortOperationRequest raise ]. + |action resources| - (replacementClassName isEmptyOrNil - or:[ (class := Smalltalk classNamed:replacementClassName) isNil]) ifTrue:[ - self error:('Cannot apply change for missing class: ' , replacementClassName) mayProceed:true. - ^ self + resources := self class projectDefinitionClass classResources. + + "/ ask for a repair action + action := OptionBox + request:(resources stringWithCRs:'Cannot apply change for missing class: %1\\Please choose a repair action:\- choose a replacement class\- define a dummy class\- skip this change\- cancel the load operation' + with:className) + buttonLabels:(resources array:#('Replace...' 'Create New...' 'Skip' 'Cancel')) + values:#(replace create skip cancel). + action == #skip ifTrue:[^ self]. + action == #cancel ifTrue:[ AbortOperationRequest raise]. + action == #replace ifTrue:[ + replacementClassName := Dialog + requestClassName:(resources + string:'Replacement class for "%1"?' + with:className) + initialAnswer:suggestion. + ] ifFalse:[ + replacementClassName := Dialog + requestClassName:(resources + stringWithCRs:'Create dummy class for "%1"?\(will be created in Namespace "%2")' + with:className with:(Class nameSpaceQuerySignal query ? Smalltalk) name) + initialAnswer:suggestion. + ]. + replacementClassName isEmptyOrNil ifTrue:[ AbortOperationRequest raise ]. + + action == #create ifTrue:[ + Object + subclass:(replacementClassName asSymbol) + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + category:'* dummy for porting *' + ]. + class := Smalltalk classNamed:replacementClassName. + class isNil ifTrue:[ + class := (Class nameSpaceQuerySignal query ? Smalltalk) classNamed:replacementClassName. + class isNil ifTrue:[ + self error:(resources string:'Cannot apply change for missing class: %1' with:replacementClassName) mayProceed:true. + ^ self + ]. ]. - class := Smalltalk classNamed:replacementClassName. "/ (className endsWith:' class') ifTrue:[ "/ class := class theMetaclass "/ ] ifFalse:[ "/ class := class theNonMetaclass "/ ]. - LastReplacementClass := replacementClassName + + LastReplacementClass := replacementClassName. ] ] ]. diff -r e96794cd9edd -r 66a7a47f9253 MethodFinder.st --- a/MethodFinder.st Wed Sep 07 16:04:00 2016 +0100 +++ b/MethodFinder.st Mon Nov 28 17:11:46 2016 +0000 @@ -1061,7 +1061,7 @@ #(#'doubleWordAt:put:' #'wordAt:put:' #'longAt:put:bigEndian:' #'shortAt:put:bigEndian:' #'unsignedLongAt:put:bigEndian:' #'unsignedShortAt:put:bigEndian:' ) do: [:sel | AddAndRemove add: sel]. -"FloatArray" "Dont know what happens when prims not here" +"FloatArray" "Don't know what happens when prims not here" false ifTrue: [#( "accessing" "arithmetic" diff -r e96794cd9edd -r 66a7a47f9253 PerforceSourceCodeManager.st --- a/PerforceSourceCodeManager.st Wed Sep 07 16:04:00 2016 +0100 +++ b/PerforceSourceCodeManager.st Mon Nov 28 17:11:46 2016 +0000 @@ -399,7 +399,7 @@ ensureDollarsInVersionMethod:aString "given the source code of my version method, ensure that it contains dollars for proper keyword expansion - do nothing here because we dont need this - make our own version + do nothing here because we don't need this - make our own version " ^aString @@ -732,7 +732,7 @@ ! createModule:moduleName - "we dont need to create directories in perforce before checkin" + "we don't need to create directories in perforce before checkin" ^self checkForExistingModule:moduleName ! @@ -827,7 +827,6 @@ #author -> who checked that revision into the repository #date -> when was it checked in #state -> the RCS state - #numberOfChangedLines -> the number of changed line w.r.t the previous #logMessage -> the checkIn log message revisions are ordered newest first diff -r e96794cd9edd -r 66a7a47f9253 SVNVersionInfo.st --- a/SVNVersionInfo.st Wed Sep 07 16:04:00 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,165 +0,0 @@ -" - COPYRIGHT (c) 2011 by 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' }" - -"{ NameSpace: Smalltalk }" - -VersionInfo subclass:#SVNVersionInfo - instanceVariableNames:'' - classVariableNames:'' - poolDictionaries:'' - category:'System-SourceCodeManagement' -! - -!SVNVersionInfo class methodsFor:'documentation'! - -copyright -" - COPYRIGHT (c) 2011 by 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. -" -! - -documentation -" - In ancient times, Class used to return a Dictionary when asked for versionInfo. - This has been replaced by instances of VersionInfo and subclasses. - - SVNVersionInfo adds some SVN specific data. - - [author:] - cg (cg@AQUA-DUO) -" -! ! - -!SVNVersionInfo class methodsFor:'instance creation'! - -fromSVNString:aString - "{ Pragma: +optSpace }" - - "I know how to parse SVN version id strings. - Return an instance filled with revision info which is - extracted from aString. This must be in SVN format. - Return nil for non-SVN strings" - - |words firstWord info s fn revString user | - - s := aString readStream. - s skipSeparators. - firstWord := s through:$:. - - info := self new. - - "/ - "/ supported formats: - "/ - "/ $ Id: baseFileName rev-int date time user $ - "/ - ((firstWord = '$Id:') - or:[ (firstWord = '$ Id:') - or:[ (firstWord = '§Id:') - or:[ (firstWord = '§ Id:')]]] - ) ifTrue:[ - "/Skip next : it might be SVN's fixed-width keyword" - s peek == $: ifTrue:[s next]. - - words := s upToEnd asCollectionOfWords readStream. - (words peek = '$') ifTrue:[ - "/ empty fixed-width version method - '$Id: SVNVersionInfo.st,v 1.10 2015-03-02 12:01:06 cg Exp $' - ^nil - ]. - info fileName:(fn := words next). - (fn endsWith:',v') ifTrue:[ - "/ not an SVN version - ^ nil - ]. - info revision:(revString := words next). - "/ do not use matchesRegex: here (regex is an optional package) - (revString conform:[:c | c isDigit]) ifFalse:[ - "/ not an SVN version - ^ nil - ]. - info date:(words next). - info time:(words next). - user := words next. - (user includesAny:'$§') ifTrue:[ - info user: (user copyTo: (user indexOfAny:'$§') - 1) - ] ifFalse:[ - info user: user. - ( '$§' includes:words next first) ifFalse:[ - "/ not an SVN version - ^ nil - ] - ]. - words atEnd ifFalse:[ - ^ nil - ]. - ^ info - ]. - - ^ nil - - " - SVNVersionInfo fromSVNString:('$' , 'Revision: 1.122 $') - SVNVersionInfo fromSVNString:(SourceCodeManager version) - SVNVersionInfo fromSVNString:(ApplicationDefinition version_SVN) - SVNVersionInfo fromSVNString:(ApplicationDefinition version_CVS) - CVSVersionInfo fromRCSString:(ApplicationDefinition version_SVN) - CVSVersionInfo fromRCSString:(ApplicationDefinition version_CVS) - " - - "Created: / 29-09-2011 / 17:14:56 / cg" - "Modified: / 31-03-2012 / 01:12:34 / Jan Vrany " -! ! - -!SVNVersionInfo methodsFor:'accessing'! - -keysAndValuesDo:aBlock - - super keysAndValuesDo:aBlock. - "JV@2011-11-25: Fake repositoryPathName, as other tools - requires this. Returning nil should be fine, but then, - SourceCodeManagerUtilities constructs names as they are - in CVS, sigh" - aBlock value: #repositoryPathName value: self repositoryPathName - - "Created: / 25-11-2011 / 18:58:06 / Jan Vrany " -! - -repositoryPathName - - ^fileName - - "Created: / 25-11-2011 / 18:57:23 / Jan Vrany " -! ! - -!SVNVersionInfo class methodsFor:'documentation'! - -version - ^ '$Header: /cvs/stx/stx/libbasic3/SVNVersionInfo.st,v 1.10 2015-03-02 12:01:06 cg Exp $' -! - -version_CVS - ^ '$Header: /cvs/stx/stx/libbasic3/SVNVersionInfo.st,v 1.10 2015-03-02 12:01:06 cg Exp $' -! - -version_SVN - ^ '$Id: SVNVersionInfo.st,v 1.10 2015-03-02 12:01:06 cg Exp $' -! ! - diff -r e96794cd9edd -r 66a7a47f9253 SourceCodeManagerUtilities.st --- a/SourceCodeManagerUtilities.st Wed Sep 07 16:04:00 2016 +0100 +++ b/SourceCodeManagerUtilities.st Mon Nov 28 17:11:46 2016 +0000 @@ -1,5 +1,3 @@ -"{ Encoding: utf8 }" - " COPYRIGHT (c) 2000 eXept Software AG All Rights Reserved @@ -2494,6 +2492,21 @@ "Modified: / 12-09-2011 / 11:56:01 / cg" ! +compareProject:aProject withRepositoryVersionTaggedAs:aTag extensionsOnly:extensionsOnly + |diffSet| + + diffSet := self diffSetOfProject:aProject againstRepositoryVersionTaggedAs:aTag extensionsOnly:extensionsOnly. + VersionDiffBrowser + openOnDiffSet:diffSet + labelA:'Repository' + labelB:'Image' + title:('Differences of %1' bindWith:aProject) + ignoreExtensions:true + ignoreVersionMethods:true. + + "Created: / 12-11-2016 / 03:39:48 / cg" +! + compareProjectWithRepository:aProject ^ self compareProject:aProject withRepositoryVersionFrom:nil ! @@ -3212,6 +3225,16 @@ orTag:symbolicName ! +diffSetOfProject:aProject againstRepositoryVersionTaggedAs:aTag extensionsOnly:extensionsOnly + ^ self + diffSetOfProject:aProject + againstRepositoryVersionFrom:nil + orTag:aTag + extensionsOnly:extensionsOnly + + "Created: / 12-11-2016 / 03:41:23 / cg" +! + ensureCorrectVersionMethodsInClass:aClass usingManager:aManager |theMetaclass versionMthd src newSrc versionMethodName oldVersionMethodName| @@ -4068,15 +4091,30 @@ "/ fill in timestamps revisions do:[:each | - |timestampString timestamp| - - timestampString := each at:#date ifAbsent:nil. - timestampString notNil ifTrue:[ - timestamp := Timestamp readFrom:timestampString onError:nil. - timestamp notNil ifTrue:[ - each at:#timestamp put:timestamp. - each at:#day put:timestamp asDate. - ]. + |dateOrDateString timeOrTimeString timestampString timestamp| + + dateOrDateString := each at:#date ifAbsent:nil. + timeOrTimeString := each at:#time ifAbsent:nil. + dateOrDateString notNil ifTrue:[ + dateOrDateString isString ifTrue:[ + timestamp := Timestamp readFrom:dateOrDateString onError:nil. + timestamp notNil ifTrue:[ + each at:#timestamp put:timestamp. + each at:#day put:timestamp asDate. + ]. + ] ifFalse:[ + timeOrTimeString isString ifTrue:[ + self halt. + + ] ifFalse:[ + (dateOrDateString notNil and:[timeOrTimeString notNil]) ifTrue:[ + timestamp := Timestamp fromDate:dateOrDateString andTime:timeOrTimeString. + each at:#timestamp put:timestamp. + ] ifFalse:[ + self halt + ] + ] + ]. ]. ]. diff -r e96794cd9edd -r 66a7a47f9253 SystemEnvironment.st --- a/SystemEnvironment.st Wed Sep 07 16:04:00 2016 +0100 +++ b/SystemEnvironment.st Mon Nov 28 17:11:46 2016 +0000 @@ -335,6 +335,7 @@ ! allKeysDo:aBlock + "evaluate the argument, aBlock for all keys in the Smalltalk dictionary" self keysDo:aBlock diff -r e96794cd9edd -r 66a7a47f9253 VersionInfo.st --- a/VersionInfo.st Wed Sep 07 16:04:00 2016 +0100 +++ b/VersionInfo.st Mon Nov 28 17:11:46 2016 +0000 @@ -14,7 +14,8 @@ "{ NameSpace: Smalltalk }" Object subclass:#VersionInfo - instanceVariableNames:'revision binaryRevision user date time fileName' + instanceVariableNames:'moreAttributes logMessage revision binaryRevision user timestamp + date time fileName state' classVariableNames:'' poolDictionaries:'' category:'System-SourceCodeManagement' @@ -52,13 +53,12 @@ !VersionInfo methodsFor:'accessing'! -at:aKey +at:aSymbolKey "backward compatible dictionary-like accessing" - (self respondsTo:aKey) ifTrue:[ - ^ self perform:aKey - ]. - ^ self errorKeyNotFound:aKey + ^ self + at:aSymbolKey + ifAbsent:[ self warn:'VersionInfo: no such property: ',aSymbolKey. nil] " self new at:#binaryRevision @@ -68,13 +68,16 @@ "Modified: / 22-10-2008 / 20:23:31 / cg" ! -at:aKey ifAbsent:replacement +at:aSymbolKey ifAbsent:replacement "backward compatible dictionary-like accessing" - (self respondsTo:aKey) ifTrue:[ - ^ (self perform:aKey) ? replacement + (self respondsTo:aSymbolKey) ifTrue:[ + ^ (self perform:aSymbolKey) ]. - ^ replacement + moreAttributes notNil ifTrue:[ + ^ moreAttributes at:aSymbolKey ifAbsent:replacement + ]. + ^ replacement value " self new at:#binaryRevision @@ -84,18 +87,25 @@ "Created: / 22-10-2008 / 20:19:42 / cg" ! -at:aKey put:value +at:aSymbolKey put:value "backward compatible dictionary-like accessing" - (self respondsTo:aKey) ifTrue:[ - self perform:aKey asMutator with:value. + |setter| + + setter := aSymbolKey asMutator. + (self respondsTo:setter) ifTrue:[ + self perform:setter with:value. ^ value "/ sigh ]. - ^ self errorKeyNotFound:aKey + moreAttributes isNil ifTrue:[ + moreAttributes := IdentityDictionary new. + ]. + moreAttributes at:aSymbolKey put:value. + ^ value "/ sigh " self new at:#binaryRevision put:#bar - self new at:#foo put:#bar + self new at:#foo put:#bar; yourself " "Created: / 22-10-2008 / 20:20:54 / cg" @@ -107,15 +117,22 @@ "Created: / 21-12-2011 / 23:09:54 / cg" ! +author:aString + ^ self user:aString + + "Created: / 21-12-2011 / 23:09:54 / cg" +! + binaryRevision ^ binaryRevision ! -binaryRevision:something - binaryRevision := something. +binaryRevision:aString + binaryRevision := aString. ! date + timestamp notNil ifTrue:[^ timestamp asDate]. ^ date ! @@ -123,20 +140,37 @@ date := something. ! +day + ^ date +! + fileName ^ fileName ! -fileName:something - fileName := something. +fileName:aString + fileName := aString. ! keysAndValuesDo:aBlock self class instVarNames do:[:nm | - aBlock value:(nm asSymbol) value:(self perform:nm asSymbol) + nm ~= 'moreAttributes' ifTrue:[ + aBlock value:(nm asSymbol) value:(self perform:nm asSymbol) + ]. + ]. + moreAttributes notNil ifTrue:[ + moreAttributes keysAndValuesDo:aBlock ]. + + "Created: / 22-10-2008 / 20:48:08 / cg" +! - "Created: / 22-10-2008 / 20:48:08 / cg" +logMessage + ^ logMessage +! + +logMessage:aString + logMessage := aString. ! majorVersion @@ -179,8 +213,16 @@ ^ revision ! -revision:something - revision := something. +revision:aString + revision := aString. +! + +state + ^ state +! + +state:something + state := something. ! symbolicVersionName @@ -195,6 +237,7 @@ ! time + timestamp notNil ifTrue:[^ timestamp asTime]. ^ time ! @@ -209,9 +252,22 @@ "Created: / 04-12-2011 / 10:06:02 / cg" ! +timestamp + timestamp notNil ifTrue:[^ timestamp]. + date isNil ifTrue:[^ nil]. + time isNil ifTrue:[^ date asTimestamp]. + ^ Timestamp fromDate:date andTime:time +! + +timestamp:aTimestamp + timestamp := aTimestamp + + "Created: / 04-12-2011 / 10:06:02 / cg" +! + timezone - "raise an error: must be redefined in concrete subclass(es)" - + timestamp notNil ifTrue:[^ timestamp timezone]. + ^ nil "Not known" "Modified: / 23-11-2011 / 13:54:56 / Jan Vrany " @@ -221,17 +277,17 @@ ^ user ! -user:something - user := something. +user:aString + user := aString. ! ! !VersionInfo class methodsFor:'documentation'! version - ^ '$Header: /cvs/stx/stx/libbasic3/VersionInfo.st,v 1.10 2015-02-03 17:51:15 cg Exp $' + ^ '$Header$' ! version_CVS - ^ '$Header: /cvs/stx/stx/libbasic3/VersionInfo.st,v 1.10 2015-02-03 17:51:15 cg Exp $' + ^ '$Header$' ! ! diff -r e96794cd9edd -r 66a7a47f9253 WrappedMethod.st --- a/WrappedMethod.st Wed Sep 07 16:04:00 2016 +0100 +++ b/WrappedMethod.st Mon Nov 28 17:11:46 2016 +0000 @@ -1,5 +1,3 @@ -"{ Encoding: utf8 }" - " COPYRIGHT (c) 1994 by Claus Gittinger All Rights Reserved @@ -421,7 +419,7 @@ isBreakpointed "return true, if the receiver is a wrapped method for a breakpoint. - Ask the messageTracer, since I dont know if its a break or trace" + Ask the messageTracer, since I don't know if its a break or trace" ^ (MessageTracer isTrapped:self) @@ -438,7 +436,7 @@ isTimed "return true, if the receiver is a wrapped method for a time measurement. - Ask the messageTracer, since I dont know if its a break or trace" + Ask the messageTracer, since I don't know if its a break or trace" ^ (MessageTracer isTiming:self) @@ -447,7 +445,7 @@ isTraced "return true, if the receiver is a wrapped method for a trace point. - Ask the messageTracer, since I dont know if its a break or trace" + Ask the messageTracer, since I don't know if its a break or trace" ^ (MessageTracer isTrapped:self) not @@ -515,14 +513,14 @@ !WrappedMethod class methodsFor:'documentation'! version - ^ '$Header: /cvs/stx/stx/libbasic3/WrappedMethod.st,v 1.45 2015-05-27 14:26:30 cg Exp $' + ^ '$Header$' ! version_CVS - ^ '$Header: /cvs/stx/stx/libbasic3/WrappedMethod.st,v 1.45 2015-05-27 14:26:30 cg Exp $' + ^ '$Header$' ! version_SVN - ^ '$Id: WrappedMethod.st,v 1.45 2015-05-27 14:26:30 cg Exp $' + ^ '$Id$' ! ! diff -r e96794cd9edd -r 66a7a47f9253 abbrev.stc --- a/abbrev.stc Wed Sep 07 16:04:00 2016 +0100 +++ b/abbrev.stc Mon Nov 28 17:11:46 2016 +0000 @@ -33,7 +33,6 @@ BeeProjectDefinitionWriter BeeProjectDefinitionWriter stx:libbasic3 'Kernel-Classes-Support' 0 BeeProjectSourceWriter BeeProjectSourceWriter stx:libbasic3 'Kernel-Classes-Support' 0 CVSSourceCodeManager CVSSourceCodeManager stx:libbasic3 'System-SourceCodeManagement' 0 -CVSVersionInfo CVSVersionInfo stx:libbasic3 'System-SourceCodeManagement' 0 ChangeSetDiffEntry ChangeSetDiffEntry stx:libbasic3 'System-Changes-Diff' 0 ChangeSetDiffSet ChangeSetDiffSet stx:libbasic3 'System-Changes-Diff' 0 ClassChange ClassChange stx:libbasic3 'System-Changes' 0 @@ -50,7 +49,6 @@ NameSpaceCreationChange NameSpaceCreationChange stx:libbasic3 'System-Changes' 0 OtherChange OtherChange stx:libbasic3 'System-Changes' 0 PerforceSourceCodeManager PerforceSourceCodeManager stx:libbasic3 'System-SourceCodeManagement' 0 -SVNVersionInfo SVNVersionInfo stx:libbasic3 'System-SourceCodeManagement' 0 SourceCodeManagerUtilitiesForContainerBasedManagers SourceCodeManagerUtilitiesForContainerBasedManagers stx:libbasic3 'System-SourceCodeManagement' 0 SourceCodeManagerUtilitiesForWorkspaceBasedManagers SourceCodeManagerUtilitiesForWorkspaceBasedManagers stx:libbasic3 'System-SourceCodeManagement' 0 StoreSourceCodeManager StoreSourceCodeManager stx:libbasic3 'System-SourceCodeManagement' 0 diff -r e96794cd9edd -r 66a7a47f9253 bc.mak --- a/bc.mak Wed Sep 07 16:04:00 2016 +0100 +++ b/bc.mak Mon Nov 28 17:11:46 2016 +0000 @@ -79,8 +79,6 @@ # BEGINMAKEDEPEND --- do not remove this line; make depend needs it $(OUTDIR)AbstractSourceCodeManager.$(O) AbstractSourceCodeManager.$(C) AbstractSourceCodeManager.$(H): AbstractSourceCodeManager.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) -$(OUTDIR)BeeProjectWriter.$(O) BeeProjectWriter.$(C) BeeProjectWriter.$(H): BeeProjectWriter.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) -$(OUTDIR)BeeSourceWriter.$(O) BeeSourceWriter.$(C) BeeSourceWriter.$(H): BeeSourceWriter.st $(INCLUDE_TOP)\stx\libbasic\AbstractSourceFileWriter.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SmalltalkChunkFileSourceWriter.$(H) $(STCHDR) $(OUTDIR)CallChain.$(O) CallChain.$(C) CallChain.$(H): CallChain.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)Change.$(O) Change.$(C) Change.$(H): Change.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)ChangeDeltaInformation.$(O) ChangeDeltaInformation.$(C) ChangeDeltaInformation.$(H): ChangeDeltaInformation.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) @@ -102,15 +100,11 @@ $(OUTDIR)SourceCodeManagerUtilities.$(O) SourceCodeManagerUtilities.$(C) SourceCodeManagerUtilities.$(H): SourceCodeManagerUtilities.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)SystemEnvironment.$(O) SystemEnvironment.$(C) SystemEnvironment.$(H): SystemEnvironment.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)SystemOrganizer.$(O) SystemOrganizer.$(C) SystemOrganizer.$(H): SystemOrganizer.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) -$(OUTDIR)SystemProfiler.$(O) SystemProfiler.$(C) SystemProfiler.$(H): SystemProfiler.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)TraceBuffer.$(O) TraceBuffer.$(C) TraceBuffer.$(H): TraceBuffer.st $(INCLUDE_TOP)\stx\libbasic\Array.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(STCHDR) $(OUTDIR)VersionInfo.$(O) VersionInfo.$(C) VersionInfo.$(H): VersionInfo.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)WrappedMethod.$(O) WrappedMethod.$(C) WrappedMethod.$(H): WrappedMethod.st $(INCLUDE_TOP)\stx\libbasic\CompiledCode.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutableFunction.$(H) $(INCLUDE_TOP)\stx\libbasic\Method.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)stx_libbasic3.$(O) stx_libbasic3.$(C) stx_libbasic3.$(H): stx_libbasic3.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR) -$(OUTDIR)BeeProjectDefinitionWriter.$(O) BeeProjectDefinitionWriter.$(C) BeeProjectDefinitionWriter.$(H): BeeProjectDefinitionWriter.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\BeeProjectWriter.$(H) $(STCHDR) -$(OUTDIR)BeeProjectSourceWriter.$(O) BeeProjectSourceWriter.$(C) BeeProjectSourceWriter.$(H): BeeProjectSourceWriter.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\BeeProjectWriter.$(H) $(STCHDR) -$(OUTDIR)CVSSourceCodeManager.$(O) CVSSourceCodeManager.$(C) CVSSourceCodeManager.$(H): CVSSourceCodeManager.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\AbstractSourceCodeManager.$(H) $(STCHDR) -$(OUTDIR)CVSVersionInfo.$(O) CVSVersionInfo.$(C) CVSVersionInfo.$(H): CVSVersionInfo.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\VersionInfo.$(H) $(STCHDR) +$(OUTDIR)CVSSourceCodeManager.$(O) CVSSourceCodeManager.$(C) CVSSourceCodeManager.$(H): CVSSourceCodeManager.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\AbstractSourceCodeManager.$(H) $(INCLUDE_TOP)\stx\libbasic3\VersionInfo.$(H) $(STCHDR) $(OUTDIR)ChangeSetDiffEntry.$(O) ChangeSetDiffEntry.$(C) ChangeSetDiffEntry.$(H): ChangeSetDiffEntry.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\ChangeSetDiffComponent.$(H) $(STCHDR) $(OUTDIR)ChangeSetDiffSet.$(O) ChangeSetDiffSet.$(C) ChangeSetDiffSet.$(H): ChangeSetDiffSet.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\ChangeSetDiffComponent.$(H) $(STCHDR) $(OUTDIR)ClassChange.$(O) ClassChange.$(C) ClassChange.$(H): ClassChange.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\Change.$(H) $(STCHDR) @@ -127,7 +121,6 @@ $(OUTDIR)NameSpaceCreationChange.$(O) NameSpaceCreationChange.$(C) NameSpaceCreationChange.$(H): NameSpaceCreationChange.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\Change.$(H) $(STCHDR) $(OUTDIR)OtherChange.$(O) OtherChange.$(C) OtherChange.$(H): OtherChange.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\Change.$(H) $(STCHDR) $(OUTDIR)PerforceSourceCodeManager.$(O) PerforceSourceCodeManager.$(C) PerforceSourceCodeManager.$(H): PerforceSourceCodeManager.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libbasic3\AbstractSourceCodeManager.$(H) $(INCLUDE_TOP)\stx\libbasic3\VersionInfo.$(H) $(STCHDR) -$(OUTDIR)SVNVersionInfo.$(O) SVNVersionInfo.$(C) SVNVersionInfo.$(H): SVNVersionInfo.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\VersionInfo.$(H) $(STCHDR) $(OUTDIR)SourceCodeManagerUtilitiesForContainerBasedManagers.$(O) SourceCodeManagerUtilitiesForContainerBasedManagers.$(C) SourceCodeManagerUtilitiesForContainerBasedManagers.$(H): SourceCodeManagerUtilitiesForContainerBasedManagers.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\SourceCodeManagerUtilities.$(H) $(STCHDR) $(OUTDIR)SourceCodeManagerUtilitiesForWorkspaceBasedManagers.$(O) SourceCodeManagerUtilitiesForWorkspaceBasedManagers.$(C) SourceCodeManagerUtilitiesForWorkspaceBasedManagers.$(H): SourceCodeManagerUtilitiesForWorkspaceBasedManagers.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\SourceCodeManagerUtilities.$(H) $(STCHDR) $(OUTDIR)StoreSourceCodeManager.$(O) StoreSourceCodeManager.$(C) StoreSourceCodeManager.$(H): StoreSourceCodeManager.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\AbstractSourceCodeManager.$(H) $(STCHDR) @@ -156,6 +149,11 @@ $(OUTDIR)MethodPackageChange.$(O) MethodPackageChange.$(C) MethodPackageChange.$(H): MethodPackageChange.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\Change.$(H) $(INCLUDE_TOP)\stx\libbasic3\ClassChange.$(H) $(INCLUDE_TOP)\stx\libbasic3\MethodChange.$(H) $(STCHDR) $(OUTDIR)MethodPrivacyChange.$(O) MethodPrivacyChange.$(C) MethodPrivacyChange.$(H): MethodPrivacyChange.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\Change.$(H) $(INCLUDE_TOP)\stx\libbasic3\ClassChange.$(H) $(INCLUDE_TOP)\stx\libbasic3\MethodChange.$(H) $(STCHDR) $(OUTDIR)MethodRemoveChange.$(O) MethodRemoveChange.$(C) MethodRemoveChange.$(H): MethodRemoveChange.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\Change.$(H) $(INCLUDE_TOP)\stx\libbasic3\ClassChange.$(H) $(INCLUDE_TOP)\stx\libbasic3\MethodChange.$(H) $(STCHDR) +$(OUTDIR)MethodCategoryChange.$(O) MethodCategoryChange.$(C) MethodCategoryChange.$(H): MethodCategoryChange.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\Change.$(H) $(INCLUDE_TOP)\stx\libbasic3\ClassChange.$(H) $(INCLUDE_TOP)\stx\libbasic3\MethodChange.$(H) $(STCHDR) +$(OUTDIR)MethodDefinitionChange.$(O) MethodDefinitionChange.$(C) MethodDefinitionChange.$(H): MethodDefinitionChange.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\Change.$(H) $(INCLUDE_TOP)\stx\libbasic3\ClassChange.$(H) $(INCLUDE_TOP)\stx\libbasic3\MethodChange.$(H) $(STCHDR) +$(OUTDIR)MethodPackageChange.$(O) MethodPackageChange.$(C) MethodPackageChange.$(H): MethodPackageChange.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\Change.$(H) $(INCLUDE_TOP)\stx\libbasic3\ClassChange.$(H) $(INCLUDE_TOP)\stx\libbasic3\MethodChange.$(H) $(STCHDR) +$(OUTDIR)MethodPrivacyChange.$(O) MethodPrivacyChange.$(C) MethodPrivacyChange.$(H): MethodPrivacyChange.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\Change.$(H) $(INCLUDE_TOP)\stx\libbasic3\ClassChange.$(H) $(INCLUDE_TOP)\stx\libbasic3\MethodChange.$(H) $(STCHDR) +$(OUTDIR)MethodRemoveChange.$(O) MethodRemoveChange.$(C) MethodRemoveChange.$(H): MethodRemoveChange.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic3\Change.$(H) $(INCLUDE_TOP)\stx\libbasic3\ClassChange.$(H) $(INCLUDE_TOP)\stx\libbasic3\MethodChange.$(H) $(STCHDR) $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\CompiledCode.$(H) $(INCLUDE_TOP)\stx\libbasic\ConfigurableFeatures.$(H) $(INCLUDE_TOP)\stx\libbasic\Dictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutableFunction.$(H) $(INCLUDE_TOP)\stx\libbasic\IdentityDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\UserPreferences.$(H) $(STCHDR) # ENDMAKEDEPEND --- do not remove this line diff -r e96794cd9edd -r 66a7a47f9253 bmake.bat --- a/bmake.bat Wed Sep 07 16:04:00 2016 +0100 +++ b/bmake.bat Mon Nov 28 17:11:46 2016 +0000 @@ -4,9 +4,7 @@ @REM do not edit - automatically generated from ProjectDefinition @REM ------- @SET DEFINES= -@REM Kludge got Mercurial, cannot be implemented in Borland make -@FOR /F "tokens=*" %%i in ('hg root') do SET HGROOT=%%i -@IF "%HGROOT%" NEQ "" SET DEFINES=%DEFINES% "-DHGROOT=%HGROOT%" + make.exe -N -f bc.mak %DEFINES% %* diff -r e96794cd9edd -r 66a7a47f9253 libInit.cc --- a/libInit.cc Wed Sep 07 16:04:00 2016 +0100 +++ b/libInit.cc Mon Nov 28 17:11:46 2016 +0000 @@ -17,8 +17,6 @@ #endif extern void _AbstractSourceCodeManager_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); -extern void _BeeProjectWriter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); -extern void _BeeSourceWriter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _CallChain_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _Change_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _ChangeDeltaInformation_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); @@ -40,15 +38,11 @@ extern void _SourceCodeManagerUtilities_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _SystemEnvironment_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _SystemOrganizer_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); -extern void _SystemProfiler_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _TraceBuffer_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _VersionInfo_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _WrappedMethod_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _stx_137libbasic3_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); -extern void _BeeProjectDefinitionWriter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); -extern void _BeeProjectSourceWriter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _CVSSourceCodeManager_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); -extern void _CVSVersionInfo_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _ChangeSetDiffEntry_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _ChangeSetDiffSet_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _ClassChange_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); @@ -65,7 +59,6 @@ extern void _NameSpaceCreationChange_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _OtherChange_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _PerforceSourceCodeManager_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); -extern void _SVNVersionInfo_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _SourceCodeManagerUtilitiesForContainerBasedManagers_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _SourceCodeManagerUtilitiesForWorkspaceBasedManagers_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _StoreSourceCodeManager_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); @@ -94,6 +87,14 @@ extern void _MethodPackageChange_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _MethodPrivacyChange_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _MethodRemoveChange_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); +extern void _MethodPackageChange_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); +extern void _MethodPrivacyChange_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); +extern void _MethodRemoveChange_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); +extern void _BeeProjectWriter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); +extern void _BeeSourceWriter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); +extern void _SystemProfiler_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); +extern void _BeeProjectDefinitionWriter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); +extern void _BeeProjectSourceWriter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); extern void _stx_137libbasic3_extensions_Init(int pass, struct __vmData__ *__pRT__, OBJ snd); @@ -140,7 +141,6 @@ _BeeProjectDefinitionWriter_Init(pass,__pRT__,snd); _BeeProjectSourceWriter_Init(pass,__pRT__,snd); _CVSSourceCodeManager_Init(pass,__pRT__,snd); - _CVSVersionInfo_Init(pass,__pRT__,snd); _ChangeSetDiffEntry_Init(pass,__pRT__,snd); _ChangeSetDiffSet_Init(pass,__pRT__,snd); _ClassChange_Init(pass,__pRT__,snd); @@ -157,7 +157,6 @@ _NameSpaceCreationChange_Init(pass,__pRT__,snd); _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); diff -r e96794cd9edd -r 66a7a47f9253 mingwmake.bat --- a/mingwmake.bat Wed Sep 07 16:04:00 2016 +0100 +++ b/mingwmake.bat Mon Nov 28 17:11:46 2016 +0000 @@ -4,9 +4,6 @@ @REM do not edit - automatically generated from ProjectDefinition @REM ------- @SET DEFINES= -@REM Kludge got Mercurial, cannot be implemented in Borland make -@FOR /F "tokens=*" %%i in ('hg root') do SET HGROOT=%%i -@IF "%HGROOT%" NEQ "" SET DEFINES=%DEFINES% "-DHGROOT=%HGROOT%" @pushd ..\rules @call find_mingw.bat @@ -16,3 +13,5 @@ + + diff -r e96794cd9edd -r 66a7a47f9253 stx_libbasic3.st --- a/stx_libbasic3.st Wed Sep 07 16:04:00 2016 +0100 +++ b/stx_libbasic3.st Mon Nov 28 17:11:46 2016 +0000 @@ -1,5 +1,5 @@ " - COPYRIGHT (c) 2006 by eXept Software AG + COPYRIGHT (c) Claus Gittinger / eXept Software AG All Rights Reserved This software is furnished under a license and may be used @@ -24,7 +24,7 @@ copyright " - COPYRIGHT (c) 2006 by eXept Software AG + COPYRIGHT (c) Claus Gittinger / eXept Software AG All Rights Reserved This software is furnished under a license and may be used @@ -42,6 +42,12 @@ This library contains source-code-management, packaging, change and history related stuff. It is normally not required in end-user stand alone applications. + + [author:] + cg + + [primary maintainer:] + cg " ! ! @@ -218,7 +224,6 @@ BeeProjectDefinitionWriter BeeProjectSourceWriter CVSSourceCodeManager - CVSVersionInfo ChangeSetDiffEntry ChangeSetDiffSet ClassChange @@ -235,7 +240,6 @@ NameSpaceCreationChange OtherChange PerforceSourceCodeManager - SVNVersionInfo SourceCodeManagerUtilitiesForContainerBasedManagers SourceCodeManagerUtilitiesForWorkspaceBasedManagers StoreSourceCodeManager @@ -302,7 +306,9 @@ companyName "Return a companyname which will appear in .rc" - ^ 'eXept Software AG' + ^ 'Claus Gittinger / eXept Software AG' + + "Modified: / 18-11-2016 / 11:48:34 / cg" ! description @@ -316,9 +322,9 @@ legalCopyright "Return a copyright string which will appear in .rc" - ^ 'Copyright Claus Gittinger 1988-2012\nCopyright eXept Software AG 2012' + ^ 'Copyright Claus Gittinger 1988\nCopyright eXept Software AG 2012' - "Modified: / 18-07-2012 / 19:11:26 / cg" + "Modified: / 18-11-2016 / 12:17:42 / cg" ! productName diff -r e96794cd9edd -r 66a7a47f9253 stx_libbasic3WINrc.rc diff -r e96794cd9edd -r 66a7a47f9253 vcmake.bat --- a/vcmake.bat Wed Sep 07 16:04:00 2016 +0100 +++ b/vcmake.bat Mon Nov 28 17:11:46 2016 +0000 @@ -10,9 +10,7 @@ popd ) @SET DEFINES= -@REM Kludge got Mercurial, cannot be implemented in Borland make -@FOR /F "tokens=*" %%i in ('hg root') do SET HGROOT=%%i -@IF "%HGROOT%" NEQ "" SET DEFINES=%DEFINES% "-DHGROOT=%HGROOT%" + make.exe -N -f bc.mak -DUSEVC=1 %DEFINES% %*