[etoys-dev] Etoys Inbox: System-Richo.12.mcz

Ricardo Moran richi.moran at gmail.com
Thu May 13 15:28:09 EDT 2010


After uploading this, I clicked "update code from server" and now I have the
System package marked dirty. It also has now two ancestors: System-Richo.12
and System-bf.13. If I check the history it is something like this:

<working copy>
System-Richo.12
System-bf.13
System-Richo.11
System-bf.12
System-Richo.10
System-bf.11
System-bf.9
System-bf.10
...

I think I messed up something, and I don't know how to fix it.

Richo

On Thu, May 13, 2010 at 4:10 PM, <commits at source.squeak.org> wrote:

> A new version of System was added to project Etoys Inbox:
> http://source.squeak.org/etoysinbox/System-Richo.12.mcz
>
> ==================== Summary ====================
>
> Name: System-Richo.12
> Author: Richo
> Time: 13 May 2010, 4:10:15 pm
> UUID: 3188de42-860f-5949-9f9a-12f540c657b7
> Ancestors: System-Richo.11
>
> * Removed a lot of stuff used for Localization.
> * Modified TextDomainManager to use method properties to store the text
> domain of each method. This happens in a lazy way. It's also posible to
> preconfigure the method properties of all methods with translations but it
> takes forever and it ends up with a Space Low warning (see TextDomainManager
> class>>updateDomainOfAllMethodsWithTranslations)
>
> =============== Diff against System-Richo.11 ===============
>
> Item was added:
> + ----- Method: TextDomainManager classSide>>allMethodsWithTranslations (in
> category 'accessing') -----
> + allMethodsWithTranslations
> + "Look for #translated calls"
> + | methodsWithTranslations |
> + methodsWithTranslations := TranslatedReceiverFinder new
> stringReceiversWithContext: #translated.
> + methodsWithTranslations := methodsWithTranslations,
> (TranslatedReceiverFinder new
> + stringReceiversWithContext: #translatedNoop).
> +
> + methodsWithTranslations := methodsWithTranslations collect: [:each | each
> key compiledMethod].
> +
> + "Look for Etoys tiles and vocabularies"
> + methodsWithTranslations := methodsWithTranslations, (EToyVocabulary
> allPhrasesWithContextToTranslate collect: [:r |
> +       (MethodReference new setStandardClass: r second methodSymbol: r
> third) compiledMethod.
> + ]).
> +
> + ^methodsWithTranslations!
>
> Item was changed:
>  ----- Method: TextDomainManager classSide>>domainForPackage: (in category
> 'accessing') -----
>  domainForPackage: aPackageInfo
> + "Package names and text domains are synonyms now"
> +       ^aPackageInfo name!
> -       ^self domainForPackageNamed: aPackageInfo name!
>
> Item was changed:
>  Object subclass: #TextDomainManager
>        instanceVariableNames: ''
>        classVariableNames: 'ClassCategories Classes DefaultDomain
> DomainInfos LoneClasses Packages'
>        poolDictionaries: ''
>        category: 'System-Localization'!
> + TextDomainManager class
> +       instanceVariableNames: 'defaultDomain'!
>
>  !TextDomainManager commentStamp: 'tk 1/4/2008 16:08' prior: 0!
>  I manages mapping from class category to textdomain.
>
>  Class variables:
>   ClassCategories      IdentityDictionary -- classCategory -> domainName
>   Classes                      IdentityDictionary -- class name (a Symbol)
> -> domainName   (a cache only!!)
>   DefaultDomain        String -- the default domain name
>   DomainInfos          Dictionary -- domainName -> a TextDomainInfo
>   LoneClasses          IdentityDictionary -- class name (a Symbol) ->
> domainName.  For classes whose entire category are not all in the same
> domain (BookMorph and QuickGuideMorph)
>
>  TextDomainManager registerCategoryPrefix: 'DrGeoII' domain: 'DrGeoII'.
>  TextDomainManager unregisterDomain: 'DrGeoII'.
>
>  TextDomainManager registerClass: #QuickGuideMorph domain: 'quickguides'.
>  TextDomainManager registerClass: #QuickGuideHolderMorph  domain:
> 'quickguides'.
>  !
> + TextDomainManager class
> +       instanceVariableNames: 'defaultDomain'!
>
> Item was added:
> + ----- Method: TextDomainManager classSide>>domainOfMethod: (in category
> 'accessing') -----
> + domainOfMethod: aCompiledMethod
> +       ^ aCompiledMethod
> +               propertyValueAt: self textDomainProperty
> +               ifAbsent: [self updateDomainOfMethod: aCompiledMethod] !
>
> Item was added:
> + ----- Method: TextDomainManager classSide>>clearAllDomains (in category
> 'private') -----
> + clearAllDomains
> +       SystemNavigation default
> +               allCompiledMethodDo: [:each | each
> +                               removeProperty: self textDomainProperty
> +                               ifAbsent: []] !
>
> Item was added:
> + ----- Method: TextDomainManager
> classSide>>updateDomainOfAllMethodsWithTranslations (in category 'private')
> -----
> + updateDomainOfAllMethodsWithTranslations
> + self allMethodsWithTranslations do: [:each|
> +       self updateDomainOfMethod: each
> + ]!
>
> Item was changed:
>  ----- Method: TextDomainManager classSide>>initialize (in category 'class
> initialization') -----
>  initialize
>        "       TextDomainManager initialize    "
> +       self defaultDomain: 'Etoys'; clearAllDomains!
> -
> -       ClassCategories _ IdentityDictionary new.
> -       Classes _ IdentityDictionary new.
> -       Packages := Dictionary new.
> -       DomainInfos _ Dictionary new.
> -       self defaultDomain: 'Etoys'.
> -       "self registerClass: #QuickGuideMorph domain: 'quickguides'.
> -       self registerClass: #QuickGuideHolderMorph  domain:
> 'quickguides'."!
>
> Item was added:
> + ----- Method: TextDomainManager classSide>>textDomainProperty (in
> category 'private') -----
> + textDomainProperty
> + ^#textDomain!
>
> Item was changed:
>  ----- Method: TextDomainManager classSide>>defaultDomain (in category
> 'accessing') -----
>  defaultDomain
> + "I'm not sure we still need a default domain, AFAIK the default domain
> will only be used when no domain is found. In that case, wouldn't it be
> better to just look for a translation in all domains?"
> +       ^defaultDomain!
> -       ^DefaultDomain!
>
> Item was added:
> + ----- Method: TextDomainManager classSide>>updateDomainOfMethod: (in
> category 'private') -----
> + updateDomainOfMethod: aCompiledMethod
> +       "First it looks for the package of the method reference (using
> +       the PackageOrganizer: deadly slow). If the method doesn't
> +       belong to any package it uses the default domain. Finally it
> +       stores the text domain of the method using a method
> +       property, this way we gain performance the next time we
> +       translate the same method because we avoid the use of
> +       PackageOrganizer. Have I mentioned it is really slow? :)"
> +       | package |
> +       package := PackageOrganizer default
> +                               packageOfMethod: aCompiledMethod
> methodReference
> +                               ifNone: [].
> +       ^ aCompiledMethod
> +               propertyValueAt: self textDomainProperty
> +               put: (package isNil
> +                               ifTrue: [TextDomainManager defaultDomain]
> +                               ifFalse: [package name])!
>
> Item was changed:
>  ----- Method: TextDomainManager classSide>>allKnownDomains (in category
> 'accessing') -----
>  allKnownDomains
> + "Every package has it's own text domain now so it's not necessary to keep
> a registry of all domains, we can simply return all the packages in the
> image.
> + PROBLEM: If a package doesn't contain translations, it won't have a mo
> file but the GetTextTranslator will try to load it anyway. This happens when
> we switch languages. So far I tested it briefly and it seems to work..."
> + ^PackageOrganizer default packageNames!
> -       | domains |
> -       domains _ Set new.
> -       domains addAll: Packages values.
> -       domains add: self defaultDomain.
> -       ^domains
> - !
>
> Item was changed:
>  ----- Method: TextDomainManager classSide>>defaultDomain: (in category
> 'accessing') -----
>  defaultDomain: aDomainName
> +       defaultDomain := aDomainName!
> -       DefaultDomain _ aDomainName!
>
> Item was removed:
> - ----- Method: TextDomainManager classSide>>unregisterDomain: (in category
> 'accessing') -----
> - unregisterDomain: domainName
> -       DomainInfos removeKey: domainName.
> -       self refresh.
> -       NaturalLanguageTranslator domainUnregistered: domainName.
> - !
>
> Item was removed:
> - ----- Method: TextDomainInfo>>categories (in category 'accessing') -----
> - categories
> -       ^categories!
>
> Item was removed:
> - ----- Method: TextDomainInfo>>matchedPackages (in category 'accessing')
> -----
> - matchedPackages
> - "Returns all the packages with this domain"
> - ^PackageInfo allPackages select: [:package | self includesPackage:
> package name]!
>
> Item was removed:
> - ----- Method: TextDomainManager classSide>>registerPackage:domain: (in
> category 'accessing') -----
> - registerPackage: aPackageName domain: aDomainName
> -       | domInfo |
> -       domInfo _ self domainInfoFor: aDomainName.
> -       domInfo packages add: aPackageName asSymbol.
> -       "self refresh."
> -       Packages at: aPackageName put: aDomainName
> - !
>
> Item was removed:
> - ----- Method: TextDomainManager classSide>>refresh (in category
> 'private') -----
> - refresh
> -       Packages := Dictionary new.
> -       DomainInfos keysAndValuesDo: [:domainName :domainInfo |
> -               domainInfo matchedPackages do: [:package |
> -                       Packages at: package name ifPresent: [:err| self
> error: 'Package ', (package name asString) , '  belongs to multiple
> domains'].
> -                       Packages at: package name put: domainName.
> -                       ]
> -               ]
> - !
>
> Item was removed:
> - ----- Method: TextDomainManager classSide>>domainInfoFor: (in category
> 'private') -----
> - domainInfoFor: domainName
> -       ^DomainInfos at: domainName ifAbsentPut: [ self registerDomain:
> domainName]!
>
> Item was removed:
> - ----- Method: TextDomainManager classSide>>domainInfos (in category
> 'private') -----
> - domainInfos
> -       ^DomainInfos!
>
> Item was removed:
> - ----- Method: TextDomainManager classSide>>domainForClass: (in category
> 'accessing') -----
> - domainForClass: aClass
> -       ^Classes at: aClass theNonMetaClass name ifAbsent: [self
> defaultDomain]!
>
> Item was removed:
> - ----- Method: TextDomainInfo>>packages (in category 'accessing') -----
> - packages
> -       ^packages!
>
> Item was removed:
> - Object subclass: #TextDomainInfo
> -       instanceVariableNames: 'categoryPrefixes categories packages'
> -       classVariableNames: ''
> -       poolDictionaries: ''
> -       category: 'System-Localization'!
> -
> - !TextDomainInfo commentStamp: '<historical>' prior: 0!
> - I hold criteria for deciding wheter a systemCategory belongs to domain.
> - - categoryPrefixes is collection of prefix of class category.
> - - categories is for specifying fine grained criterion.
> - !
>
> Item was removed:
> - ----- Method: TextDomainInfo>>includesPackage: (in category 'accessing')
> -----
> - includesPackage: packageName
> -       ^packages includes: packageName!
>
> Item was removed:
> - ----- Method: TextDomainInfo>>initialize (in category
> 'initialize-release') -----
> - initialize
> -       categoryPrefixes _ Set new.
> -       categories _ IdentitySet new.
> -       packages := Set new. !
>
> Item was removed:
> - ----- Method: TextDomainManager classSide>>registerDomain: (in category
> 'accessing') -----
> - registerDomain: domainName
> -       | domInfo |
> -       domInfo _ TextDomainInfo new.
> -       DomainInfos at: domainName put: domInfo.
> -       NaturalLanguageTranslator domainRegistered: domainName.
> -       ^domInfo!
>
> Item was removed:
> - ----- Method: TextDomainInfo>>categoryPrefixes (in category 'accessing')
> -----
> - categoryPrefixes
> -       ^categoryPrefixes!
>
> Item was removed:
> - ----- Method: TextDomainManager classSide>>domainForPackageNamed: (in
> category 'accessing') -----
> - domainForPackageNamed: packageName
> -       ^Packages at: packageName ifAbsent: [self defaultDomain]!
>
> _______________________________________________
> etoys-dev mailing list
> etoys-dev at squeakland.org
> http://lists.squeakland.org/mailman/listinfo/etoys-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakland.org/pipermail/etoys-dev/attachments/20100513/d04b3adc/attachment-0001.html


More information about the etoys-dev mailing list