Le 02/04/2014 16:33, [email protected] a écrit :
On Wed, Apr 2, 2014 at 4:06 PM, Goubier Thierry <[email protected]
<mailto:[email protected]>> wrote:



    Le 02/04/2014 15:59, Sebastian Sastre a écrit :

        Advice:

        Never save a “big" package using monticello (lets say ~2000 classes)

        and then save the image

        Why?

        Because while you don’t have feedback of saving progress* it will be
        doing something on background (forked save?) and if for any
        reason you
        are tempted to do an image save or save and quit, it will save in a
        state that will prevent the image from opening again

        You have no option but to go to your previous image version or
        something
        of the kind

        :(

        *saving a package actually provides /some/ feedback on progress
        but when
        the progress bar finishes, the saving doesn’t actually finish and it
        still have something going on, so you get "silence”
        (no-feedback) until
        you get the little monticello window with your new package version


Does this mean that once we get the little window, we are safe?
I am saving a package with containing a lot of Pack-XXX Pack-YYY
Pack-ZZZ in a 2.0 image as a single Pack-PhilippeBack-nn.mcz thing.

What is the moves to make to be safe?

I already got my image locked at some points in a way that resembles
what you describe.

I'm looking at the code and I don't understand everything, but, yes, it seems there are a few ways to keep doing things while saving the package (and maybe locking up things).

MCWorkingCopyBrowser>>basicSaveVersionIn:
basicSaveVersionIn: aRepository
        | newVersion waitForVersion |
        waitForVersion := Semaphore new.
        
        UIManager default defer: [
                newVersion := workingCopy newVersionIn: aRepository.
                waitForVersion signal ].
        
        Processor activeProcess == UIManager default uiProcess
                ifFalse: [ waitForVersion wait ].
        newVersion ifNil: [ ^ self ].
        
        Cursor wait showWhile: [[
                self
                        storeVersion: newVersion in: aRepository;
                        storeDependencies: newVersion in: aRepository.]
                        ensure: [ (MCVersionInspector new version: newVersion) 
show ]]

It seems asynchronous, but I'm unsure of what it is doing. Progress bar is only displayed when doing newVersionIn:, but this is sent to the UIManager. And this is done in a fork (see saveVersion), so it's probably allways possible to interrupt the thing half-way (or save).

Anybody to explain what is the objective when writing code like that?

Thierry


Phil

    I'll profile that to see what's happening.

    Thierry
    --
    Thierry Goubier
    CEA list
    Laboratoire des Fondations des Systèmes Temps Réel Embarqués
    91191 Gif sur Yvette Cedex
    France
    Phone/Fax: +33 (0) 1 69 08 32 92
    <tel:%2B33%20%280%29%201%2069%2008%2032%2092> / 83 95



--
Thierry Goubier
CEA list
Laboratoire des Fondations des Systèmes Temps Réel Embarqués
91191 Gif sur Yvette Cedex
France
Phone/Fax: +33 (0) 1 69 08 32 92 / 83 95

Reply via email to