[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master a08a9a9: Improve `file-has-changed-p'
From: |
Michael Albinus |
Subject: |
master a08a9a9: Improve `file-has-changed-p' |
Date: |
Fri, 5 Nov 2021 15:46:42 -0400 (EDT) |
branch: master
commit a08a9a9aead5c03a9e0eba3b2e6f5117283cde96
Author: Michael Albinus <michael.albinus@gmx.de>
Commit: Michael Albinus <michael.albinus@gmx.de>
Improve `file-has-changed-p'
* doc/lispref/files.texi (File Attributes): Be precise when
filename does not exist in `file-has-changed-p'.
* lisp/files.el (file-has-changed-p): Suppress remote file caches.
Handle the case FILE does not exists.
---
doc/lispref/files.texi | 16 ++++++++--------
lisp/files.el | 14 +++++++++-----
2 files changed, 17 insertions(+), 13 deletions(-)
diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi
index 24f059e..ddc1d05 100644
--- a/doc/lispref/files.texi
+++ b/doc/lispref/files.texi
@@ -1318,14 +1318,14 @@ on the 19th, @file{aug-20} was written on the 20th, and
the file
This function returns non-@code{nil} if the time stamp of
@var{filename} has changed since the last call. When called for the
first time for some @var{filename}, it records the last modification
-time and size of the file, and returns non-@code{nil}. Thereafter,
-when called for the same @var{filename}, it compares the current time
-stamp and size with the recorded ones, and returns non-@code{nil} only
-if either the time stamp or the size (or both) are different. This is
-useful when a Lisp program wants to re-read a file whenever it
-changes. With an optional argument @var{tag}, which must be a symbol,
-the size and modification time comparisons are limited to calls with
-the same tag.
+time and size of the file, and returns non-@code{nil} when
+@var{filename} exists. Thereafter, when called for the same
+@var{filename}, it compares the current time stamp and size with the
+recorded ones, and returns non-@code{nil} only if either the time
+stamp or the size (or both) are different. This is useful when a Lisp
+program wants to re-read a file whenever it changes. With an optional
+argument @var{tag}, which must be a symbol, the size and modification
+time comparisons are limited to calls with the same tag.
@end defun
@defun file-attributes filename &optional id-format
diff --git a/lisp/files.el b/lisp/files.el
index 173198a..3af9730 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -6187,15 +6187,19 @@ Return nil if DIR is not an existing directory."
(defun file-has-changed-p (file &optional tag)
"Return non-nil if FILE has changed.
The size and modification time of FILE are compared to the size
-and modification time of tghe same FILE during a previous
+and modification time of the same FILE during a previous
invocation of `file-has-changed-p'. Thus, the first invocation
-of `file-has-changed-p' always returns non-nil.
+of `file-has-changed-p' always returns non-nil when FILE exists.
The optional argument TAG, which must be a symbol, can be used to
limit the comparison to invocations with identical tags; it can be
the symbol of the calling function, for example."
- (let* ((fileattr (file-attributes file 'integer))
- (attr (cons (file-attribute-size fileattr)
- (file-attribute-modification-time fileattr)))
+ (let* (;; FIXME: Shall we use `file-truename'?
+ (file (directory-file-name file))
+ (remote-file-name-inhibit-cache t)
+ (fileattr (file-attributes file 'integer))
+ (attr (and fileattr
+ (cons (file-attribute-size fileattr)
+ (file-attribute-modification-time fileattr))))
(sym (concat (symbol-name tag) "@" file))
(cachedattr (gethash sym file-has-changed-p--hash-table)))
(when (not (equal attr cachedattr))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master a08a9a9: Improve `file-has-changed-p',
Michael Albinus <=