emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Remote display-time-mail-file


From: Michael Albinus
Subject: Re: Remote display-time-mail-file
Date: Thu, 30 Sep 2010 15:07:34 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux)

Eli Zaretskii <address@hidden> writes:

>> From: Stefan Monnier <address@hidden>
>> Cc: Michael Albinus <address@hidden>, address@hidden
>> Date: Sat, 18 Sep 2010 11:00:27 +0200
>>
>> > Maybe I'm missing something, but I don't see how this can help.  For
>> > starters, time.el needs Tramp to check the remote every time, so the
>> > cache just gets in the way.
>>
>> But each use from time.el might end up calling some internal Tramp
>> functions several times, so the cache may still speed things up.
>
> That's true, but my conclusion from this is different: we probably
> should have finer granularity of the cache setting.
>
> I guess some of the internal Tramp functions need not be called any
> time soon after the first call, for example those that find out which
> method to use to access the remote and which scripts to run on the
> remote side.  Other internal functions will need to run every time
> display-time-file-nonempty-p is called.  And there could be those in
> between.  So perhaps these internal functions should be categorized in
> some reasonable manner, and then corresponding values added to the
> repertoire of tramp-cache-inhibit-cache's values, so that Lisp
> programs could have finer control on what is being cached and when the
> cache is refreshed.

I did some tests. It is hard to predict, which primitive functions are
called where, and in majority thes are file-attributes, file-exists-p,
file-readable-p, file-writable-p. Other primitive functions do profit
from those cached values, or they aren't called as much that it is worth
to spend extra handling for caching.

Therefore, I propose the following patch:

--8<---------------cut here---------------start------------->8---
*** /home/albinus/src/emacs/lisp/files.el.~101670~      2010-09-30 
15:02:06.590646221 +0200
--- /home/albinus/src/emacs/lisp/files.el       2010-09-30 14:24:08.655019756 
+0200
***************
*** 934,939 ****
--- 934,968 ----
        (funcall handler 'file-remote-p file identification connected)
        nil)))

+ (defcustom remote-file-name-inhibit-cache 10
+   "Inhibit remote file name cache read access, when `t'.
+ `nil' means to accept cache entries unconditionally.  An integer
+ prevents using of cache entries if they are older than this
+ amount of seconds.
+
+ File attributes of remote files are cached for better performance.
+ If they are changed out of Emacs' control, the cached values
+ become invalid, and must be invalidated.
+
+ In case a remote file is checked regularly, it might be
+ reasonable to let-bind this variable to a value less then the
+ time period between two checks.
+
+ Example:
+
+   \(defun display-time-file-nonempty-p \(file)
+     \(let \(\(remote-file-name-inhibit-cache \(- display-time-interval 5)))
+       \(and \(file-exists-p file)
+            \(< 0 \(nth 7 \(file-attributes \(file-chase-links file)))))))"
+   :group 'files
+   :version "24.1"
+   :type `(choice
+         (const   :tag "Do not inhibit file name cache" nil)
+         (const   :tag "Do not use file name cache" t)
+         (integer :tag "Do not use file name cache"
+                  :format "Do not use file name cache older then %v seconds"
+                  :value 10)))
+
  (defun file-local-copy (file)
    "Copy the file FILE into a temporary file on this machine.
  Returns the name of the local copy, or nil, if FILE is directly
--8<---------------cut here---------------end--------------->8---

Tramp would be adapted accordingly, of course.

Best regards, Michael.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]