On Apr 2, 2014, at 12:10 PM, Goubier Thierry <[email protected]> wrote:

> 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?
> 

Good question Thierry.

I’m sure the cursor was normal during this episode. Suggesting that either it 
wasn’t storing the version or it was but not displaying the wait cursor as the 
code suggests.

Functionally, what sounds to me it should be doing, is overwriting the files 
which is reasonable to take a little. It takes reasonable time, that’s not the 
problem. Lack of feedback is the problem.

So one solution would be to provide a progress bar for that file writing 
process or whatever is doing.

Having one progress bar for the whole process would be the best solution. Plan 
B would be having 2 progress bars, ending when it really finishes. BTW, note 
that not giving control to the user while is saving would also prevent this 
kind of accidents.






Reply via email to