Tools__NewSystemBrowser.st
branchjv
changeset 15623 f2b38a3b5dba
parent 15606 4756ec1dfc4d
parent 15622 e467bad9d69f
child 15629 1adff41f5fd0
--- a/Tools__NewSystemBrowser.st	Fri May 08 06:59:19 2015 +0200
+++ b/Tools__NewSystemBrowser.st	Sat May 09 06:56:52 2015 +0200
@@ -45349,87 +45349,103 @@
     |s aStream comparedSource currentSource thisRevString
      current repositoryChangeSet diffs allDiffs
      mclass mselector theNonMetaclass lastClass lastRepositoryChangeSet
-     isExtension title labelA labelB|
+     isExtension title labelA labelB failedToGetSource failureMessage|
+
+    failedToGetSource := false.
 
     self withWaitCursorDo:[
-        Method flushSourceStreamCache.
-
-        methods do:[:eachMethod |
-            |classPackage methodPackage|
-
-            mclass := eachMethod mclass.
-            mclass isNil ifTrue:[
-                self warn:('Cannot find methods class (obsolete).').
-            ] ifFalse:[
-                classPackage := mclass package.
-                methodPackage := eachMethod package.
-                (classPackage == methodPackage or:[ methodPackage == PackageId noProjectID ]) ifTrue:[
-                    theNonMetaclass := mclass theNonMetaclass.
-                    isExtension := false.
-                ] ifFalse:[
-                    isExtension := true.
-                ].
-
-                mselector := eachMethod selector.
-
-                currentSource := eachMethod source asString.
-                current := ChangeSet new.
-                current addMethodChange:eachMethod in:mclass.
-
-                self busyLabel:'getting repository source...' with:nil.
-
-                isExtension ifTrue:[
-                    repositoryChangeSet := manager utilities
-                                                 changeSetForExtensionMethodsForPackage:methodPackage
-                                                 askForRevision:false
-                                                 usingManager:manager.
-                    repositoryChangeSet := repositoryChangeSet
-                                    select:[:eachChange | eachChange isMethodChange
-                                                          and:[eachChange selector = mselector
-                                                          and:[eachChange className = mclass name]]].
-                    lastClass := nil.
+        SourceCodeManagerError handle:[:ex |
+            failedToGetSource := true.
+            failureMessage := 'SourceCodeManager reports: ',ex description.
+        ] do:[
+            Method flushSourceStreamCache.
+
+            methods do:[:eachMethod |
+                |classPackage methodPackage|
+
+                mclass := eachMethod mclass.
+                mclass isNil ifTrue:[
+                    self warn:('Cannot find methods class (obsolete).').
                 ] ifFalse:[
-                    (lastClass ~~ theNonMetaclass) ifTrue:[
-                        aStream := self sourceStreamForRepositorySourceOfClass:theNonMetaclass.
-                        aStream notNil ifTrue:[
-                            aStream class readErrorSignal handle:[:ex |
-                                self warn:('read error while reading extracted source\\' , ex description) withCRs.
+                    classPackage := mclass package.
+                    methodPackage := eachMethod package.
+                    (classPackage == methodPackage or:[ methodPackage == PackageId noProjectID ]) ifTrue:[
+                        theNonMetaclass := mclass theNonMetaclass.
+                        isExtension := false.
+                    ] ifFalse:[
+                        isExtension := true.
+                    ].
+
+                    mselector := eachMethod selector.
+
+                    currentSource := eachMethod source asString.
+                    current := ChangeSet new.
+                    current addMethodChange:eachMethod in:mclass.
+
+                    self busyLabel:'getting repository source...' with:nil.
+
+                    isExtension ifTrue:[
+                        repositoryChangeSet := manager utilities
+                                                     changeSetForExtensionMethodsForPackage:methodPackage
+                                                     askForRevision:false
+                                                     usingManager:manager.
+                        repositoryChangeSet := repositoryChangeSet
+                                        select:[:eachChange | eachChange isMethodChange
+                                                              and:[eachChange selector = mselector
+                                                              and:[eachChange className = mclass name]]].
+                        lastClass := nil.
+                    ] ifFalse:[
+                        (lastClass ~~ theNonMetaclass) ifTrue:[
+                            aStream := self sourceStreamForRepositorySourceOfClass:theNonMetaclass.
+                            aStream isNil ifTrue:[
+                                failedToGetSource := true.
+                                failureMessage := 'No source for ',theNonMetaclass name.
+                            ] ifFalse:[
+                                aStream class readErrorSignal handle:[:ex |
+                                    self warn:('read error while reading extracted source\\' , ex description) withCRs.
+                                    aStream close.
+                                    comparedSource := nil.
+                                ] do:[
+                                    comparedSource := aStream contents asString.
+                                ].
                                 aStream close.
-                                comparedSource := nil.
-                            ] do:[
-                                comparedSource := aStream contents asString.
-                            ].
-                            aStream close.
-
-                            thisRevString := theNonMetaclass revision.
-                            thisRevString isNil ifTrue:[
-                                thisRevString := 'no revision'
+
+                                thisRevString := theNonMetaclass revision.
+                                thisRevString isNil ifTrue:[
+                                    thisRevString := 'no revision'
+                                ].
+
+                                lastRepositoryChangeSet := ChangeSet fromStream:(s := comparedSource readStream). s close.
+                                lastClass := theNonMetaclass.
+
+                                self busyLabel:'comparing...' with:nil.
                             ].
-
-                            lastRepositoryChangeSet := ChangeSet fromStream:(s := comparedSource readStream). s close.
-                            lastClass := theNonMetaclass.
-
-                            self busyLabel:'comparing...' with:nil.
                         ].
-                    ].
-                    repositoryChangeSet := (lastRepositoryChangeSet ? #())
-                                    select:[:eachChange | eachChange isMethodChange
-                                                          and:[eachChange selector = mselector
-                                                          and:[eachChange className = mclass name]]].
-                ].
-                repositoryChangeSet notEmptyOrNil ifTrue:[
-                    diffs := repositoryChangeSet diffSetsAgainst:current.
-                ].
-                allDiffs isNil ifTrue:[
-                    allDiffs := diffs.
-                ] ifFalse:[
-                    allDiffs changed addAll:(diffs changed).
-                    allDiffs onlyInArg addAll:(diffs onlyInArg).
-                    allDiffs onlyInReceiver addAll:(diffs onlyInReceiver).
-                ].
-            ].
-        ].
-    ].
+                        repositoryChangeSet := (lastRepositoryChangeSet ? #())
+                                        select:[:eachChange | eachChange isMethodChange
+                                                              and:[eachChange selector = mselector
+                                                              and:[eachChange className = mclass name]]].
+                    ].
+                    repositoryChangeSet notEmptyOrNil ifTrue:[
+                        diffs := repositoryChangeSet diffSetsAgainst:current.
+                    ].
+                    allDiffs isNil ifTrue:[
+                        allDiffs := diffs.
+                    ] ifFalse:[
+                        allDiffs changed addAll:(diffs changed).
+                        allDiffs onlyInArg addAll:(diffs onlyInArg).
+                        allDiffs onlyInReceiver addAll:(diffs onlyInReceiver).
+                    ].
+                ].
+            ].
+        ].
+    ].
+
+    failedToGetSource ifTrue:[
+        self information:'Failed to fetch the source from the repository:\\',failureMessage.
+        ^ self.
+    ].
+
 
     (allDiffs isNil or:[allDiffs isEmpty]) ifTrue:[
         (methods
@@ -62507,11 +62523,11 @@
 !NewSystemBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__NewSystemBrowser.st,v 1.2219 2015-05-01 14:50:21 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__NewSystemBrowser.st,v 1.2220 2015-05-08 12:27:29 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__NewSystemBrowser.st,v 1.2219 2015-05-01 14:50:21 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__NewSystemBrowser.st,v 1.2220 2015-05-08 12:27:29 cg Exp $'
 !
 
 version_HG
@@ -62520,7 +62536,7 @@
 !
 
 version_SVN
-    ^ '$Id: Tools__NewSystemBrowser.st,v 1.2219 2015-05-01 14:50:21 cg Exp $'
+    ^ '$Id: Tools__NewSystemBrowser.st,v 1.2220 2015-05-08 12:27:29 cg Exp $'
 ! !