Am 02.11.2010 um 12:51 schrieb Stephan Witt:

> Am 02.11.2010 um 12:34 schrieb Vincent van Ravesteijn:
> 
>> 
>>>>> first step to cure the VCS load problem
>>>> Can I please remind you and ask you to write meaningful commit-logs. Logs 
>>>> explaining why the change has been made, why the new design or solution or 
>>>> implementation is better, what problem it fixed, why other solutions might 
>>>> be wrong although it may seem not to be at first sight and so forth.
>>>> 
>>>> In the example of the VCS load problem, please explain what the VCS load 
>>>> problem is. Please explain why it is only a first step, and what still 
>>>> needs to be done.
>>> The VCS load problem is (was) twofold:
>>> 1. the parser of the document needs the VCS state so this state (checked by 
>>> file_found_hook) had to be done earlier.
>>> =>  first step, move it some lines up, above the readDocument() call.
>> 
>> Why does the parser need to know the state ? If the state changes, do we 
>> then reparse the file too ?
> 
> Yes. The file is reloaded after VCS operations.
> 
>> I think this stumbles on a other design problem.
>> 
>> If we have a file, we insert an InsetInfo about vcs, then we add the file to 
>> a vcs, will the InsetInfo be updated ? Apparently not, apparently the file 
>> is updated not until we parse the file again.
> 
> See above.
> 
>> We probably need to have some call in updateBuffer or something that will 
>> update the InsetInfo's, and we call updateBuffer() probably somewhere after 
>> loading the file, so we don't need to register the vc status while reading 
>> the file.
> 
> May be. My plan was to complete CVS backend implementation and the last 
> changes did disturb it seriously. 
> They where overdue but for my TODO list the worst time to happen. So, I where 
> tempted to make the "hot fixes".
> 
>> 
>>> 2. in case of loading the autosave or emergency file the real file name has 
>>> to be passed to file_found_hook.
>>> =>  the patch I posted does this. (I missed to diff src/buffer_funcs.cpp 
>>> and - of course - I'd fix the comments).
>> 
>> Well, I made two public functions of Buffer: loadLyXFile and 
>> loadThisLyXFile. The first one takes a filename, checks for 
>> autosave/emergency files, and when it is sure which file exactly it wants to 
>> read it calls loadThisLyXFile(). So, after this point, the code shouldn't be 
>> adapted to the fact that LyX is reading a different file as the user 
>> requested.
>> 
>> The name of the file is already stored in d->filename, so we can just call 
>> lyxvc.found_file_hook(d->filename). The only reason for readFile to have a 
>> FileName parameter is that we might want to load a recovery/emergency save 
>> file instead. This brings me to the conclusion that the FileName parameter 
>> to loadLyXFile and loadThisLyXFile is already WRONG!.
> 
> I agree.
> 
>> We do not set d->filename when calling this file, so we have to make sure 
>> that we call loadLyXFile and loadThisLyXFile with exactly the same filename 
>> as the one we supplied when creating the buffer. If we rename the buffer we 
>> have to explicitly call Buffer::setFileName.
>> 
>> To conclude: instead of adding a second parameter to the load*LyXFIle 
>> functions, I think we should lose all parameters because we already have 
>> this information. The problem with lyxvc only revealed this bug. Thank you 
>> for finding the thinko that was present in the code.
> 
> Glad to hear this.
> 
>> But please don't cure the symptom but criticisize and fix the (re)design.
> 
> I did not have the time to follow your redesign of the buffer load operation 
> closely.
> 
>> Please correct me if I'm wrong. I'm just thinking aloud.
> 
> But you cannot test it easily? I'll test your proposal...

The attached patch works.

Stephan

PS. Thank you for the lecture in other mail - (no sarcasm).
My problem is I spend to much time for LyX already. That's why I feel in a 
hurry and make mistakes.
Like "solving" a problem by curing the symptom.

Index: src/Buffer.cpp
===================================================================
--- src/Buffer.cpp      (Revision 35992)
+++ src/Buffer.cpp      (Arbeitskopie)
@@ -876,7 +876,7 @@
        }
 
        // InsetInfo needs to know if file is under VCS
-       lyxvc().file_found_hook(fn);
+       lyxvc().file_found_hook(d->filename);
 
        if (readDocument(lex)) {
                Alert::error(_("Document format failure"),
@@ -3651,7 +3651,6 @@
                bool const success = (ret_llf == ReadSuccess);
                if (success) {
                        markDirty();
-                       lyxvc().file_found_hook(fn);
                        str = _("Document was successfully recovered.");
                } else
                        str = _("Document was NOT successfully recovered.");
@@ -3707,7 +3706,6 @@
                // the file is not saved if we load the autosave file.
                if (ret_llf == ReadSuccess) {
                        markDirty();
-                       lyxvc().file_found_hook(fn);
                        return ReadSuccess;
                }
                return ReadAutosaveFailure;

Reply via email to