--- 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 <jan.vrany@fit.cvut.cz>"
-!
-
-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 <jan.vrany@fit.cvut.cz>"
- "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 <jan.vrany@fit.cvut.cz>"
-!
-
-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 <jan.vrany@fit.cvut.cz>"
+ "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 <jan.vrany@fit.cvut.cz>"
+!
+
+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'
--- 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 <jan.vrany@fit.cvut.cz>"
+ "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
--- 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 <jan.vrany@fit.cvut.cz>"
- "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 $'
-! !
-
--- 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.
]
--- 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)"
--- 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|
--- 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))
- ,' <b>',(HTMLUtilities escapeCharacterEntities:word),'</b> '
+ , ' <b>',(HTMLUtilities escapeCharacterEntities:word),'</b> '
,(HTMLUtilities escapeCharacterEntities:(right contractAtEndTo:25)).
lcWord := word asLowercase.
@@ -2334,14 +2464,22 @@
"/ outStream nextPutLine:'<dt>',(HTMLUtilities escapeCharacterEntities:(caseMapping at:lcWord ifAbsent:[word])),'</dt>'.
outStream nextPutLine:'<dt>',(HTMLUtilities escapeCharacterEntities:word),'</dt>'.
outStream nextPutLine:'<dd><ul><li>'.
- 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:'<tab indent=300>'.
outStream nextPutLine:ctx.
outStream nextPutLine:'</li>'.
prevWord := lcWord.
] ifFalse:[
outStream nextPutLine:'</li><li>'.
- 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:'<tab indent=300>'.
outStream nextPutLine:ctx.
outStream nextPutLine:'</li>'.
@@ -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:'<ul>'.
- Smalltalk allPackageIDs
+ packageNames
do:[:p |
|pckgString|
@@ -2910,6 +3062,38 @@
outStream nextPutLine:'<hr>'.
!
+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"
--- 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
--- 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) \
--- 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.
]
"
--- 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.
]
]
].
--- 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"
--- 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
--- 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 <jan.vrany@fit.cvut.cz>"
-! !
-
-!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 <jan.vrany@fit.cvut.cz>"
-!
-
-repositoryPathName
-
- ^fileName
-
- "Created: / 25-11-2011 / 18:57:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
-!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 $'
-! !
-
--- 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
+ ]
+ ]
+ ].
].
].
--- 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
+ <resource: #obsolete>
"evaluate the argument, aBlock for all keys in the Smalltalk dictionary"
self keysDo:aBlock
--- 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 <jan.vrany@fit.cvut.cz>"
@@ -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$'
! !
--- 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$'
! !
--- 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
--- 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
--- 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% %*
--- 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);
--- 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 @@
+
+
--- 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 <lib>.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 <lib>.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
--- 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% %*