OK, making progress now:-)

Using your suggestion, I call the g.app.externalFilesController to solve 
the `self` problem and explicitly state the `path` as the files I'm 
interested in (good enough for what I need). I can now display in the log 
the old and new values for the time stamps and a new checksum. I find the 
difference between old and new times will range between ~0.04 - ~0.45 
seconds and this does not happen with files in another directory not backed 
up to the cloud. That's the information I need to help my cloud provider 
support effort.

The only thing I can't get right now is a valid `old` checksum 
(g.app.externalFilesController.checksum_d.get(FNAME) returns None as the 
value). Any idea why?

Thanks again, Vitalije, for taking the time to look at this.

Rob...

On Sunday, November 18, 2018 at 1:46:01 PM UTC-5, vitalije wrote:
>
>
>
> On Sunday, November 18, 2018 at 7:22:20 PM UTC+1, Rob wrote:
>>
>> Thanks for the suggested workaround. However, I don't want to bypass the 
>> warning, I need to explore why the warning is happening at all (it 
>> shouldn't). In order to do that, I need to simply get the file times (new 
>> and old) and the checksums (new and old) and write them to the log pane.
>>
>> So, as an example, looking in the leoExternalFiles.py file, I find this 
>> node: `class ExternalFilesController>efc.utilities>efc.get_mtime`:
>>
>> def get_mtime(self, path):
>>     '''Return the modification time for the path.'''
>>     return g.os_path_getmtime(path)
>>
>>
>> Then later in the same path: `efc.has_changed'
>>
>> def has_changed(self, c, path):
>>     '''Return True if p's external file has changed outside of Leo.'''
>>     if not g.os_path_exists(path):
>>         return False
>>     if g.os_path_isdir(path):
>>         return False
>>     #
>>     # First, check the modification times.
>>     old_time = self.get_time(path)
>>     new_time = self.get_mtime(path)
>>     if not old_time:
>>         # Initialize.
>>         self.set_time(path, new_time)
>>         self.checksum_d[path] = self.checksum(path)
>>         return False
>>     if old_time == new_time:
>>         # print('%s:times match %s %s' % (tag,c.shortFileName(),path))
>>         return False
>> #...(code continues)...
>>
>>
>> Here, it appears to call the function (method?) defined earlier to get 
>> the file times using `self` and `path`, but I don't see anywhere in the 
>> file how to define what `self` and `path` are. I'm sure this is probably 
>> pretty basic Python stuff, but it's not obvious to me:-(
>>
>
> Well, self in this code is g.app.externalFilesController and the path is 
> the full filename of the file being checked. 
>
> Now, I think that the problem is in checking for equality of two float 
> numbers, which can cause whole bunch of surprising effects. Try to replace 
> the line:
>     if old_time == new_time:
> # with something like
>     if abs(old_time - new_time) < 0.0001:
>
> and see if it solves your problem. 
>
> I guess your files in the cloud have different time granularity than 
> ordinary files on your hard disc. That can cause the modification time to 
> be slightly different than the value returned by your system. 
>
> That could explain why the old_time and new_time have different values, 
> but not why checksum values are different. 
>
> The checksum values can differ if there is a difference in line endings in 
> cloud and your operating system. Leo would treat both files as the same 
> comparing their text content, but still they would have different checksum 
> values.
>
> While playing with the script I posted earlier, I have noticed that saving 
> Leo document, do not change immediately checksum values in efc. They get 
> re-calculated the next time idle processing come to visit particular 
> commander. So, it is possible that efc contains stale checksum values.
>
> Vitalije
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/leo-editor.
For more options, visit https://groups.google.com/d/optout.

Reply via email to