[Cuis-dev] Saving a CodePackage and determining its class when installing it
Juan Vuletich
juan at jvuletich.org
Mon Oct 26 07:14:30 PDT 2020
Yes, same fix there. I just pushed it to GitHub. I hope that's all, but
if you find further trouble, please tell, and let's fix them.
Thanks,
On 10/26/2020 1:44 AM, Nicolás Papagna Maldonado via Cuis-dev wrote:
> Hi Juan,
>
> No worries! FakePackageClass is a hack until I have time to write some
> tests and be able to break the dependencies and inject Smalltalk and
> SystemOrganization into CodePackage instances, so these can be
> controlled from tests at will.
>
> I gave your fix a try but my package is still installed as an instance
> of FakeCodePackage.
>
> After some debugging, it looks like CodePackageFile>>install is
> checking whether any of the classes to be installed is a direct (just
> checks one level above) subclass of CodePackage, and uses it to
> create the code package.
> Here's an extract of that method that (I believe) exposes that behavior:
>
> *pckClass _ CodePackage*.
> classes do: [ :ee |
> (ee hasDefinition and: [*ee superclassName = 'CodePackage'*])
> ifTrue: [
> ee fileInDefinitionAndMetaclass.
> *pckClass _ Smalltalk at: ee name* ]].
>
> From what I understand, the method I mentioned in my previous email is
> used in the postPackageInstall phase, but this one happens before that.
>
> Should it be fixed too?
>
> Thanks for the help.
>
> Cheers!
> Nico PM
>
> On Sun, Oct 25, 2020 at 9:24 PM Juan Vuletich <juan at jvuletich.org
> <mailto:juan at jvuletich.org>> wrote:
>
> On 10/25/2020 12:04 PM, Nicolás Papagna Maldonado via Cuis-dev wrote:
>> Hi Folks,
>>
>> For some experiments I'm doing, I've created a subclass of
>> CodePackage (let's call it FakeCodePackage) to make my tests run
>> fast that avoids accessing Smalltalk or SystemOrganization.
>> When I filed-out the package and installed it in a fresh image,
>> to my surprise, the newly installed package was an instance of
>> FakeCodePackage.
>>
>> After poking around, I found this method in CodePackage that is
>> used when saving an instance:
>>
>> codePackageClass
>> "Answer the specific CodePackage subclass to use."
>>
>> self class == CodePackage ifFalse: [
>> ^ self class ].
>> self classesDo: [ :cls |
>> (cls inheritsFrom: CodePackage)
>> fTrue: [ ^ cls ]].
>> ^ nil
>>
>> This means that whenever there is a subclass of CodePackage in
>> the package being saved, It is assumed that is the class that
>> should be used to re-creating the CodePackage instance when
>> installing it.
>>
>> In my case, FakeCodePackage is not fully functional as I use it
>> only in my tests, so I was unable to either delete the package or
>> re-install it because of all sorts of errors.
>> Luckily this was a fresh image, so I had nothing to lose :)
>>
>> I was wondering what is the use case for that, and if it still
>> relevant/in use.
>>
>> Cheers!
>> Nico PM
>
> Too bad you found this bug. I hadn't thought of people writing
> subclasses of CodePackage, unless for instantiation of the package
> itself. This is used by ColorExtrasPackage and
> MorphicMisc1Package. It is only used to run #prePackageInstall and
> #postPackageInstall, and I don't think it is a clean solution.
> Anyway, I just posted a fix to that method, to also check for the
> package name.
>
> Thanks,
>
> --
> Juan Vuletich
> www.cuis-smalltalk.org <http://www.cuis-smalltalk.org>
> https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev
> https://github.com/jvuletich
> https://www.linkedin.com/in/juan-vuletich-75611b3
> @JuanVuletich
>
>
>
> --
>
> Nicolás Papagna
--
Juan Vuletich
www.cuis-smalltalk.org
https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev
https://github.com/jvuletich
https://www.linkedin.com/in/juan-vuletich-75611b3
@JuanVuletich
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cuis.st/mailman/archives/cuis-dev/attachments/20201026/37540a3f/attachment.htm>
More information about the Cuis-dev
mailing list