<div dir="ltr"><div><div><div><div>Ah, but I see that you use SqueakMap...<br></div>SqueakMap point to ConfigurationOfFuel-MartinDias.197<br></div>Unfortunately, this configuration is obsolete.<br></div>Because it points to <a href="http://ss3.gemstone.com/ss/Fuel">http://ss3.gemstone.com/ss/Fuel</a> which has been drained from every .mcz (IMHO a mistake, it should have been used as a fallback repository...).<br>
<br></div>There is another problem even with more recent configuration: they do not attempt anything for a squeak4.5.x serie, and will thus fail to load the FuelCompatibility layer... Fixing the configuration is not enough, because it is also necessary to fix Metacello which never heard of squeak4.5 either...<br>
<div><br><div class="gmail_extra">That&#39;s a few hurdles, but we can make it.<br></div><div class="gmail_extra"><br><div class="gmail_quote">2013/11/1 Frank Shearar <span dir="ltr">&lt;<a href="mailto:frank.shearar@gmail.com" target="_blank">frank.shearar@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Fuel works in 4.4, but not quite yet in 4.5:<br>
<a href="http://build.squeak.org/job/ExternalPackage-Fuel/lastFailedBuild/console" target="_blank">http://build.squeak.org/job/ExternalPackage-Fuel/lastFailedBuild/console</a><br>
Sadly, that output&#39;s not particularly useful.<br>
<br>
frank<br>
<br>
On 31 October 2013 23:02, Nicolas Cellier<br>
<div class="HOEnZb"><div class="h5">&lt;<a href="mailto:nicolas.cellier.aka.nice@gmail.com">nicolas.cellier.aka.nice@gmail.com</a>&gt; wrote:<br>
&gt; +1, please include in the update.mcm!<br>
&gt; I also like the Pharo alternative to Fuel out the error context...<br>
&gt; Lighter than full image save. Oh but we don&#39;t have Fuel yet :(<br>
&gt; Who wants to make it with a segment?<br>
&gt;<br>
&gt;<br>
&gt; 2013/10/31 &lt;<a href="mailto:commits@source.squeak.org">commits@source.squeak.org</a>&gt;<br>
&gt;<br>
&gt;&gt; Frank Shearar uploaded a new version of CommandLine to project The Trunk:<br>
&gt;&gt; <a href="http://source.squeak.org/trunk/CommandLine-fbs.1.mcz" target="_blank">http://source.squeak.org/trunk/CommandLine-fbs.1.mcz</a><br>
&gt;&gt;<br>
&gt;&gt; ==================== Summary ====================<br>
&gt;&gt;<br>
&gt;&gt; Name: CommandLine-fbs.1<br>
&gt;&gt; Author: fbs<br>
&gt;&gt; Time: 31 October 2013, 10:32:52.821 pm<br>
&gt;&gt; UUID: dc871e85-bd16-d742-acbf-4d2b838113d1<br>
&gt;&gt; Ancestors:<br>
&gt;&gt;<br>
&gt;&gt; CommandLineToolSet does little more than dump errors to stderr.<br>
&gt;&gt;<br>
&gt;&gt; DummyUIManager comes from Pharo via Pavel Krivanek&#39;s minimising script.<br>
&gt;&gt;<br>
&gt;&gt; ==================== Snapshot ====================<br>
&gt;&gt;<br>
&gt;&gt; SystemOrganization addCategory: #&#39;CommandLine-Tools&#39;!<br>
&gt;&gt; SystemOrganization addCategory: #&#39;CommandLine-UIManager&#39;!<br>
&gt;&gt;<br>
&gt;&gt; UIManager subclass: #DummyUIManager<br>
&gt;&gt;         instanceVariableNames: &#39;&#39;<br>
&gt;&gt;         classVariableNames: &#39;&#39;<br>
&gt;&gt;         poolDictionaries: &#39;&#39;<br>
&gt;&gt;         category: &#39;CommandLine-UIManager&#39;!<br>
&gt;&gt;<br>
&gt;&gt; !DummyUIManager commentStamp: &#39;fbs 10/31/2013 07:36&#39; prior: 0!<br>
&gt;&gt; I&#39;m an alternative UIManager used to run an the image without GUI.  I<br>
&gt;&gt; redefine methods which require user input as these requests are irrelevant<br>
&gt;&gt; in a headless environment. !<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: DummyUIManager&gt;&gt;checkForNewDisplaySize (in category<br>
&gt;&gt; &#39;display&#39;) -----<br>
&gt;&gt; checkForNewDisplaySize<br>
&gt;&gt;         Display extent = DisplayScreen actualScreenSize ifTrue: [^ self].<br>
&gt;&gt;         DisplayScreen startUp.<br>
&gt;&gt; !<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: DummyUIManager&gt;&gt;chooseDirectory:from: (in category &#39;ui<br>
&gt;&gt; requests&#39;) -----<br>
&gt;&gt; chooseDirectory: label from: dir<br>
&gt;&gt;         ^ nil!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: DummyUIManager&gt;&gt;chooseFrom:lines:title: (in category &#39;ui<br>
&gt;&gt; requests&#39;) -----<br>
&gt;&gt; chooseFrom: aList lines: linesArray title: aString<br>
&gt;&gt;         ^ aList first!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: DummyUIManager&gt;&gt;chooseFrom:values:lines:title: (in category<br>
&gt;&gt; &#39;ui requests&#39;) -----<br>
&gt;&gt; chooseFrom: labelList values: valueList lines: linesArray title: aString<br>
&gt;&gt;         ^ valueList first!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: DummyUIManager&gt;&gt;confirm: (in category &#39;ui requests&#39;) -----<br>
&gt;&gt; confirm: queryString<br>
&gt;&gt;         (ProvideAnswerNotification signal: queryString)<br>
&gt;&gt;                 ifNotNil: [:answer|^answer].<br>
&gt;&gt;<br>
&gt;&gt;         self error: &#39;No user response possible&#39;!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: DummyUIManager&gt;&gt;confirm:orCancel: (in category &#39;ui<br>
&gt;&gt; requests&#39;) -----<br>
&gt;&gt; confirm: aString orCancel: cancelBlock<br>
&gt;&gt;         (ProvideAnswerNotification signal: aString) ifNotNil: [:answer |<br>
&gt;&gt;         ^answer == #cancel ifTrue: [cancelBlock value] ifFalse: [answer]].<br>
&gt;&gt;<br>
&gt;&gt;         self error: &#39;No user response possible&#39;!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: DummyUIManager&gt;&gt;displayProgress:at:from:to:during: (in<br>
&gt;&gt; category &#39;ui requests&#39;) -----<br>
&gt;&gt; displayProgress: titleString at: aPoint from: minVal to: maxVal during:<br>
&gt;&gt; workBlock<br>
&gt;&gt;         ^ workBlock value: Association new!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: DummyUIManager&gt;&gt;edit:label:accept: (in category &#39;ui<br>
&gt;&gt; requests&#39;) -----<br>
&gt;&gt; edit: aText label: labelString accept: anAction<br>
&gt;&gt;         ^ nil!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: DummyUIManager&gt;&gt;fontFromUser: (in category &#39;ui requests&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; fontFromUser: priorFont<br>
&gt;&gt;         self error: &#39;No user response possible&#39;!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: DummyUIManager&gt;&gt;inform: (in category &#39;ui requests&#39;) -----<br>
&gt;&gt; inform: aString<br>
&gt;&gt;         &quot;Nothing to be done here&quot;!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: DummyUIManager&gt;&gt;informUserDuring: (in category &#39;ui<br>
&gt;&gt; requests&#39;) -----<br>
&gt;&gt; informUserDuring: aBlock<br>
&gt;&gt;         aBlock value: nil!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: DummyUIManager&gt;&gt;newDisplayDepthNoRestore: (in category<br>
&gt;&gt; &#39;display&#39;) -----<br>
&gt;&gt; newDisplayDepthNoRestore: pixelSize<br>
&gt;&gt;         &quot;Change depths.  Check if there is enough space!!  , di&quot;<br>
&gt;&gt;         | area need |<br>
&gt;&gt;         pixelSize = Display depth ifTrue: [^ self  &quot;no change&quot;].<br>
&gt;&gt;         pixelSize abs &lt; Display depth ifFalse:<br>
&gt;&gt;                 [&quot;Make sure there is enough space&quot;<br>
&gt;&gt;                 area := Display boundingBox area. &quot;pixels&quot;<br>
&gt;&gt;<br>
&gt;&gt;                 need := (area * (pixelSize abs - Display depth) // 8)<br>
&gt;&gt; &quot;new bytes needed&quot;<br>
&gt;&gt;                                 + Smalltalk lowSpaceThreshold.<br>
&gt;&gt;                 (Smalltalk garbageCollectMost &lt;= need<br>
&gt;&gt;                         and: [Smalltalk garbageCollect &lt;= need])<br>
&gt;&gt;                         ifTrue: [self error: &#39;Insufficient free space&#39;]].<br>
&gt;&gt;         Display setExtent: Display extent depth: pixelSize.<br>
&gt;&gt;<br>
&gt;&gt;         DisplayScreen startUp!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: DummyUIManager&gt;&gt;request:initialAnswer: (in category &#39;ui<br>
&gt;&gt; requests&#39;) -----<br>
&gt;&gt; request: queryString initialAnswer: defaultAnswer<br>
&gt;&gt;         (ProvideAnswerNotification signal: queryString)<br>
&gt;&gt;         ifNotNil: [:answer |<br>
&gt;&gt;             ^ answer == #default ifTrue: [defaultAnswer] ifFalse:<br>
&gt;&gt; [answer]].<br>
&gt;&gt;<br>
&gt;&gt;         self error: &#39;No user response possible&#39;!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: DummyUIManager&gt;&gt;requestPassword: (in category &#39;ui requests&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; requestPassword: queryString<br>
&gt;&gt;         ^ self request: queryString initialAnswer: &#39;&#39;!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: DummyUIManager&gt;&gt;restoreDisplay (in category &#39;display&#39;) -----<br>
&gt;&gt; restoreDisplay!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: DummyUIManager&gt;&gt;restoreDisplayAfter: (in category &#39;display&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; restoreDisplayAfter: aBlock<br>
&gt;&gt;         aBlock value.<br>
&gt;&gt;         Sensor waitButton.!<br>
&gt;&gt;<br>
&gt;&gt; StandardToolSet subclass: #CommandLineToolSet<br>
&gt;&gt;         instanceVariableNames: &#39;&#39;<br>
&gt;&gt;         classVariableNames: &#39;SaveSnapshotOnError&#39;<br>
&gt;&gt;         poolDictionaries: &#39;&#39;<br>
&gt;&gt;         category: &#39;CommandLine-Tools&#39;!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: CommandLineToolSet class&gt;&gt;debugError: (in category<br>
&gt;&gt; &#39;debugging&#39;) -----<br>
&gt;&gt; debugError: anError<br>
&gt;&gt;         &quot;Print out a sensible stack trace and bail&quot;<br>
&gt;&gt;         | problemPlace s |<br>
&gt;&gt;         self saveSnapshotOnError<br>
&gt;&gt;                 ifTrue: [Smalltalk saveAs: &#39;Debug-&#39; , (Smalltalk imageName<br>
&gt;&gt; subStrings: &#39;/&#39;) last].<br>
&gt;&gt;         problemPlace := anError signalerContext.<br>
&gt;&gt;         s := FileStream stderr.<br>
&gt;&gt;         (anError isKindOf: MessageNotUnderstood) ifTrue: [<br>
&gt;&gt;                 s<br>
&gt;&gt;                         nextPutAll: anError messageText; cr;<br>
&gt;&gt;                         nextPutAll: problemPlace sender methodNode<br>
&gt;&gt; printString; cr].<br>
&gt;&gt;         (problemPlace stackOfSize: 20) do: [:ctx | s cr. ctx printOn: s].<br>
&gt;&gt;         s flush.<br>
&gt;&gt;<br>
&gt;&gt;         SmalltalkImage current snapshot: false andQuit: true!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: CommandLineToolSet class&gt;&gt;debugSyntaxError: (in category<br>
&gt;&gt; &#39;debugging&#39;) -----<br>
&gt;&gt; debugSyntaxError: anError<br>
&gt;&gt;         | s |<br>
&gt;&gt;         s := FileStream stderr.<br>
&gt;&gt;         s nextPutAll: &#39;----- Syntax error -----&#39;; cr.<br>
&gt;&gt;         s nextPutAll: anError errorCode; cr.<br>
&gt;&gt;         s nextPutAll: &#39;----- Syntax error -----&#39;; cr.<br>
&gt;&gt;<br>
&gt;&gt;         self debugError: anError!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: CommandLineToolSet class&gt;&gt;saveSnapshotOnError (in category<br>
&gt;&gt; &#39;preferences&#39;) -----<br>
&gt;&gt; saveSnapshotOnError<br>
&gt;&gt;         &lt;preference: &#39;Save snapshot of image on failure&#39;<br>
&gt;&gt;         category: &#39;debug&#39;<br>
&gt;&gt;         description: &#39;If true, saves a snapshot of the failing image to<br>
&gt;&gt; the current directory.&#39;<br>
&gt;&gt;         type: #Boolean&gt;<br>
&gt;&gt;         ^ SaveSnapshotOnError ifNil: [SaveSnapshotOnError := false].!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: CommandLineToolSet class&gt;&gt;saveSnapshotOnError: (in category<br>
&gt;&gt; &#39;preferences&#39;) -----<br>
&gt;&gt; saveSnapshotOnError: aBoolean<br>
&gt;&gt;         SaveSnapshotOnError := aBoolean.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: CommandLineToolSet class&gt;&gt;unload (in category &#39;class<br>
&gt;&gt; initialization&#39;) -----<br>
&gt;&gt; unload<br>
&gt;&gt;         ToolSet unregister: self.!<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
<br>
</div></div></blockquote></div><br></div></div></div>