--- a/AbstrSCMgr.st Fri Mar 19 23:28:21 1999 +0100
+++ b/AbstrSCMgr.st Mon Mar 29 13:57:38 1999 +0200
@@ -809,6 +809,21 @@
(not knowing anything about its version).
Used when autoloading classes."
+ ^ self
+ getMostRecentSourceStreamForClassNamed:aClassName
+ inPackage:nil
+!
+
+getMostRecentSourceStreamForClassNamed:aClassName inPackage:forcedPackage
+ "given a class, return an open stream to its most recent source
+ (not knowing anything about its version).
+ Used when autoloading classes or to compare a classes source with the most
+ recent found in the repostitory.
+ The forcePackage argument passes the classes package information
+ and is only required when autoloading or when the class is not already
+ present (i.e. there is no way to extract the package info).
+ If nil, the package is extracted from the class - which must exist."
+
|cls sourceInfo classFileName packageDir moduleDir s m components|
cls := Smalltalk classNamed:aClassName.
@@ -822,15 +837,19 @@
] ifFalse:[
classFileName := (Smalltalk fileNameForClass:aClassName) , '.st'.
packageDir := Smalltalk sourceDirectoryNameOfClass:aClassName.
- (packageDir startsWith:'stx/') ifTrue:[
+ (packageDir notNil and:[packageDir startsWith:'stx/']) ifTrue:[
packageDir := packageDir copyFrom:5.
].
moduleDir := 'stx'.
].
packageDir isNil ifTrue:[
- 'SourceCodeManager [warning]: could not extract packageDir' errorPrintCR.
- ^ nil
+ forcedPackage isNil ifTrue:[
+ 'SourceCodeManager [warning]: could not extract packageDir' errorPrintCR.
+ ^ nil
+ ].
+ packageDir := forcedPackage copyFrom:(forcedPackage indexOf:$/) + 1.
+ moduleDir := forcedPackage copyTo:(forcedPackage indexOf:$/) - 1.
].
s := self
@@ -1102,7 +1121,7 @@
^ nil
"
- SourceCodeManager revisionInfoFromString:'$Revision: 1.90 $'
+ SourceCodeManager revisionInfoFromString:'$Revision: 1.91 $'
SourceCodeManager revisionInfoFromString:(SourceCodeManager version)
"
@@ -1438,6 +1457,6 @@
!AbstractSourceCodeManager class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic3/Attic/AbstrSCMgr.st,v 1.90 1999-03-19 22:28:21 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic3/Attic/AbstrSCMgr.st,v 1.91 1999-03-29 11:57:38 cg Exp $'
! !
AbstractSourceCodeManager initialize!
--- a/AbstractSourceCodeManager.st Fri Mar 19 23:28:21 1999 +0100
+++ b/AbstractSourceCodeManager.st Mon Mar 29 13:57:38 1999 +0200
@@ -809,6 +809,21 @@
(not knowing anything about its version).
Used when autoloading classes."
+ ^ self
+ getMostRecentSourceStreamForClassNamed:aClassName
+ inPackage:nil
+!
+
+getMostRecentSourceStreamForClassNamed:aClassName inPackage:forcedPackage
+ "given a class, return an open stream to its most recent source
+ (not knowing anything about its version).
+ Used when autoloading classes or to compare a classes source with the most
+ recent found in the repostitory.
+ The forcePackage argument passes the classes package information
+ and is only required when autoloading or when the class is not already
+ present (i.e. there is no way to extract the package info).
+ If nil, the package is extracted from the class - which must exist."
+
|cls sourceInfo classFileName packageDir moduleDir s m components|
cls := Smalltalk classNamed:aClassName.
@@ -822,15 +837,19 @@
] ifFalse:[
classFileName := (Smalltalk fileNameForClass:aClassName) , '.st'.
packageDir := Smalltalk sourceDirectoryNameOfClass:aClassName.
- (packageDir startsWith:'stx/') ifTrue:[
+ (packageDir notNil and:[packageDir startsWith:'stx/']) ifTrue:[
packageDir := packageDir copyFrom:5.
].
moduleDir := 'stx'.
].
packageDir isNil ifTrue:[
- 'SourceCodeManager [warning]: could not extract packageDir' errorPrintCR.
- ^ nil
+ forcedPackage isNil ifTrue:[
+ 'SourceCodeManager [warning]: could not extract packageDir' errorPrintCR.
+ ^ nil
+ ].
+ packageDir := forcedPackage copyFrom:(forcedPackage indexOf:$/) + 1.
+ moduleDir := forcedPackage copyTo:(forcedPackage indexOf:$/) - 1.
].
s := self
@@ -1102,7 +1121,7 @@
^ nil
"
- SourceCodeManager revisionInfoFromString:'$Revision: 1.90 $'
+ SourceCodeManager revisionInfoFromString:'$Revision: 1.91 $'
SourceCodeManager revisionInfoFromString:(SourceCodeManager version)
"
@@ -1438,6 +1457,6 @@
!AbstractSourceCodeManager class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.90 1999-03-19 22:28:21 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.91 1999-03-29 11:57:38 cg Exp $'
! !
AbstractSourceCodeManager initialize!