[Cuis-dev] Fwd: Missing parserClass preference

Mariano Montone marianomontone at gmail.com
Mon Sep 19 12:18:05 PDT 2022


El 19/9/22 a las 16:01, Mariano Montone escribió:
> El 19/9/22 a las 15:32, Mariano Montone escribió:
>> El 19/9/22 a las 14:24, Hilaire Fernandes via Cuis-dev escribió:
>>>
>>> Hi,
>>>
>>> The issue occurs on my development image, freshly installed, but 
>>> involving a lot of packages. I try to install Erudit, but it happens 
>>> with other package.
>>>
>>> The Cuis image is #5485.
>>>
>>> class argument is #Preference. The receiver of #parserClass is a 
>>> PreferenceSet
>>>
>>> Here is an image from where you can review with the debugger open: 
>>> https://www.dropbox.com/s/rdvqfxn0m5n4xxq/Bug.zip?dl=0
>>>
>> Looks like this could be related to Erudite package, that received 
>> some updates. I'll have a look.
>>
> I know what is going on. The PackageDownloader asks the 
> PackageInstaller to scan for the current list of packages. To 
> determine the current list of packages every Cuis package file on disk 
> is scanned. That scanning involves loading its changesets somehow. The 
> changeset of some of the packages reference the Preferences class, 
> that does not exist anymore. That triggers an error. (Actually, it is 
> a bit weirder than that, since the problematic code is: (Smalltalk at: 
> class ifAbsent: [Object class]) parserClass), but Smalltalk at: 
> #Preferences gives a PreferenceSet instance! (I have no explanation 
> for that part ...)
>
> That is the problem.
>
> Some solutions:
>
> - Remove those packages from disk (if you empty your download 
> directory there are changes that the PackageInstaller and downloader 
> work for you.)
>
> - Update those packages.
>
> - Use Feature require instead of the installer (Erudite loads fine 
> with Feature require btw).
>
>
> I'm thinking of if something else can be done about it...
>
>
>         Mariano
>
The solution in my opinion is to handle errors when the PackageInstaller 
scans packages; print a warning and ignore the package.

Like this:

PackageInstaller>>collectPackagesFromDirectory: aDirectory

     "Create a collection of PackageSpec with package files found in 
aDirectory."

     |packageFiles|

     packageFiles _ aDirectory fileNamesMatching: '*.pck.st'.

     packageFiles do: [:packageFile | | codePackage |
         [codePackage _ CodePackageFile onFileEntry: (aDirectory // 
packageFile).
             self addPackage: codePackage]
         on: Error
         do: [:e | Transcript nextPutAll: 'Warning: Error scanning the 
package ', packageFile, '. Ignoring ...'; newLine]]


You can also use that. I'll submit the patch later.


      Mariano
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cuis.st/mailman/archives/cuis-dev/attachments/20220919/268a3abd/attachment.htm>


More information about the Cuis-dev mailing list