fixed fileIn of autoloaded class via CVS
authorClaus Gittinger <cg@exept.de>
Mon, 29 Mar 1999 13:57:38 +0200
changeset 745 a17a530bb089
parent 744 eaf185681d85
child 746 cdfe94499cf0
fixed fileIn of autoloaded class via CVS
AbstrSCMgr.st
AbstractSourceCodeManager.st
--- 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!