Hi Lauren,<br>
<br>
I am not sure how tolerant we should be with respect to the corruption you are describing. If the MetacelloStub is not installed, it will be even harder to install Metacello. With Installer-Core-ct.447, I also have added further error checks to #ensureRecentMetacello which should reduce the chance for an incomplete installation of Metacello.<br>
<br>
Best,<br>
Christoph<br>
<br>
<font color="#808080">---<br>
</font><font color="#808080"><i>Sent from </i></font><font color="#808080"><i><a href="https://github.com/hpi-swa-lab/squeak-inbox-talk"><u><font color="#808080">Squeak Inbox Talk</font></u></a></i></font><br>
<br>
On 2022-05-24T03:42:08+00:00, commits@source.squeak.org wrote:<br>
<br>
> A new version of Installer-Core was added to project The Inbox:<br>
> http://source.squeak.org/inbox/Installer-Core-lrnp.447.mcz<br>
> <br>
> ==================== Summary ====================<br>
> <br>
> Name: Installer-Core-lrnp.447<br>
> Author: lrnp<br>
> Time: 23 May 2022, 9:42:06.780598 pm<br>
> UUID: 329797ae-a3e0-4567-a259-ab491943a3e5<br>
> Ancestors: Installer-Core-cmm.446<br>
> <br>
> harden code to recover Metacello in case of error<br>
> <br>
> In #ensureRecentMetacello, Metacello can become removed from the global dictionary if the process is aborted during load, such as by error or user interrupt.<br>
> <br>
> This patch handles absent dictionary lookup exceptions to recover from this state.<br>
> <br>
> =============== Diff against Installer-Core-cmm.446 ===============<br>
> <br>
> Item was changed:<br>
>   ----- Method: Installer class>>ensureRecentMetacello (in category 'scripts') -----<br>
>   ensureRecentMetacello<br>
>       "Copied and adapted from https://github.com/Metacello/metacello/blob/master/README.md"<br>
>       <br>
>       | metacello |<br>
>       ((Smalltalk classNamed: #WebClient)<br>
>           ifNil: [ false ]<br>
>           ifNotNil: [ :webClient | <br>
>               [ (webClient httpHead: 'https://github.com') isSuccess ] <br>
>                   on: Error<br>
>                   do: [ false ] ])<br>
>           ifFalse: [ ^self inform: 'Could not connect to "https://github.com".\\You need an internet connection and SSL support\to install (or update) Metacello.\\Please fix those issues and try again.' translated withCRs ].<br>
>       <br>
>       self isMetacelloInstalled ifFalse: [<br>
>           "Prepare a clean environment for it."<br>
> +         Smalltalk at: #Metacello ifPresent: [Smalltalk globals removeKey: #Metacello].<br>
> -         Smalltalk globals removeKey: #Metacello.<br>
>           "Get the Metacello configuration (for Squeak users)"<br>
>           Installer gemsource<br>
>               project: 'metacello';<br>
>               addPackage: 'ConfigurationOfMetacello';<br>
>               install.<br>
>   <br>
>           "Bootstrap Metacello Preview, using mcz files (#'previewBootstrap' symbolic version"<br>
>           ((Smalltalk classNamed: #ConfigurationOfMetacello) project <br>
>               version: #'previewBootstrap') load].<br>
>   <br>
>       metacello := Smalltalk classNamed: #Metacello.<br>
>   <br>
>       "Now load latest version of Metacello"<br>
>       metacello new<br>
>           baseline: 'Metacello';<br>
>           repository: 'github://Metacello/metacello:master/repository';<br>
>           get.<br>
>       metacello new<br>
>           baseline: 'Metacello';<br>
>           repository: 'github://Metacello/metacello:master/repository';<br>
>           load: #('default' 'Metacello-Help').<br>
>   !<br>
> <br>
> Item was changed:<br>
>   ----- Method: Installer class>>isMetacelloInstalled (in category 'scripts') -----<br>
>   isMetacelloInstalled<br>
>       "Squeak is shipped with the global #Metacello referring to lightweight MetacelloStub.  After the first message is sent, the latest Metacello is installed, replacing the stub."<br>
> +     ^ (Smalltalk at: #Metacello ifAbsent: [^ false]) ~= MetacelloStub!<br>
> -     ^ (Smalltalk at: #Metacello) ~= MetacelloStub!<br>
> <br>