From 96b49301274ac12ce82c3dfd3361929f0344b9e3 Mon Sep 17 00:00:00 2001 From: thierry volpiatto Date: Tue, 28 Feb 2012 10:28:52 +0100 Subject: [PATCH] * lisp/files.el (file-equal-p): renamed from `files-equal-p'. Now return nil when one or both files doesn't exists. (file-subdir-of-p): Now only top directory must exists, return nil if it doesn't. (copy-directory): No need to test with `file-subdir-of-p' after creating dir. * tramp.el (tramp-file-name-for-operation): Rename `files-equal-p' to `file-equal-p'. * files.texi: Rename `files-equal-p' to `file-equal-p'. --- doc/lispref/ChangeLog | 5 +++++ doc/lispref/files.texi | 9 ++++----- lisp/ChangeLog | 9 +++++++++ lisp/files.el | 32 +++++++++++++------------------- lisp/net/tramp.el | 2 +- 5 files changed, 32 insertions(+), 25 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index b27bcef9c12..1b5418b47aa 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2012-02-28 Thierry Volpiatto + + * files.texi Rename files-equal-p to file-equal-p. + Update chnaged behavior of file-subdir-of-p. + 2012-02-28 Glenn Morris * advice.texi, anti.texi, display.texi, elisp.texi: diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi index cffaef37988..87a3035403f 100644 --- a/doc/lispref/files.texi +++ b/doc/lispref/files.texi @@ -1018,7 +1018,7 @@ a regular file (not a directory, named pipe, terminal, or other I/O device). @end defun -@defun files-equal-p file1 file2 +@defun file-equal-p file1 file2 This function returns @code{t} if the files @var{file1} and @var{file2} name the same file. Two ordinary files are considered to be the same if the function @code{file-attributes} (@pxref{File @@ -1029,9 +1029,8 @@ Attributes}) returns @code{equal} values for them. This function returns @code{t} if directory @var{dir1} is a subdirectory of @var{dir2}, or if @var{dir1} and @var{dir2} are the same directory. It compares the @code{file-truename} values of the -two directories (@pxref{Truenames}). If either @var{dir1} or -@var{dir2} do not name existing directories, the return value is -@code{nil}. +two directories (@pxref{Truenames}). If @var{dir2} +do not name an existing directory, the return value is @code{nil}. @end defun @node Truenames @@ -2722,7 +2721,7 @@ first, before handlers for jobs such as remote file access. @code{file-ownership-preserved-p}, @code{file-readable-p}, @code{file-regular-p}, @code{file-subdir-of-p}, @code{file-symlink-p}, @code{file-truename}, @code{file-writable-p}, -@code{files-equal-p}, @code{find-backup-file-name}, +@code{file-equal-p}, @code{find-backup-file-name}, @c Not sure why it was here: @code{find-file-noselect},@* @code{get-file-buffer}, @code{insert-directory}, diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ab70527073a..b92ef3d6b12 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2012-02-28 Thierry Volpiatto + + * lisp/files.el (file-equal-p): renamed from `files-equal-p'. + Now return nil when one or both files doesn't exists. + (file-subdir-of-p): Now only top directory must exists, + return nil if it doesn't. + (copy-directory): No need to test with `file-subdir-of-p' after creating dir. + * tramp.el (tramp-file-name-for-operation): Rename `files-equal-p' to `file-equal-p'. + 2012-02-28 Glenn Morris * shell.el (shell-mode): diff --git a/lisp/files.el b/lisp/files.el index 8ebb98c001b..0d687a157fe 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -4985,27 +4985,26 @@ given. With a prefix argument, TRASH is nil." directory 'full directory-files-no-dot-files-regexp))) (delete-directory-internal directory))))) -(defun files-equal-p (file1 file2) - "Return non-nil if FILE1 and FILE2 name the same file. -Ordinary files are considered to be the same if `file-attributes' -returns `equal' values for them." - (let ((handler (or (find-file-name-handler file1 'files-equal-p) - (find-file-name-handler file2 'files-equal-p)))) +(defun file-equal-p (file1 file2) + "Return non-nil if existing files FILE1 and FILE2 name the same file. +Return nil if one or both files doesn't exists." + (let ((handler (or (find-file-name-handler file1 'file-equal-p) + (find-file-name-handler file2 'file-equal-p)))) (if handler - (funcall handler 'files-equal-p file1 file2) - (equal (file-attributes (file-truename file1)) - (file-attributes (file-truename file2)))))) + (funcall handler 'file-equal-p file1 file2) + (let ((f1-attr (file-attributes (file-truename file1))) + (f2-attr (file-attributes (file-truename file2)))) + (and f1-attr f2-attr (equal f1-attr f2-attr)))))) (defun file-subdir-of-p (dir1 dir2) "Return non-nil if DIR1 is a subdirectory of DIR2. A directory is considered to be a subdirectory of itself. -Return nil if DIR1 or DIR2 are not existing directories." +Return nil if top directory DIR2 is not an existing directory." (let ((handler (or (find-file-name-handler dir1 'file-subdir-of-p) (find-file-name-handler dir2 'file-subdir-of-p)))) (if handler (funcall handler 'file-subdir-of-p dir1 dir2) - (when (and (file-directory-p dir1) - (file-directory-p dir2)) + (when (file-directory-p dir2) ; Top dir must exist. (setq dir1 (file-truename dir1) dir2 (file-truename dir2)) (let ((ls1 (or (split-string dir1 "/" t) '("/"))) @@ -5019,7 +5018,7 @@ Return nil if DIR1 or DIR2 are not existing directories." (setq ls1 (cdr ls1) ls2 (cdr ls2))) (unless mismatch - (files-equal-p (file-truename root) dir2))))))) + (file-equal-p root dir2))))))) (defun copy-directory (directory newname &optional keep-time parents copy-contents) "Copy DIRECTORY to NEWNAME. Both args must be strings. @@ -5065,12 +5064,7 @@ directly into NEWNAME instead." (cond ((not (file-directory-p newname)) ;; If NEWNAME is not an existing directory, create it; ;; that is where we will copy the files of DIRECTORY. - (make-directory newname parents) - ;; `file-subdir-of-p' doesn't handle non--existing directories, - ;; so double check now if NEWNAME is not a subdir of DIRECTORY. - (and (file-subdir-of-p newname directory) - (error "Cannot copy `%s' into its subdirectory `%s'" - directory newname))) + (make-directory newname parents)) ;; If NEWNAME is an existing directory and COPY-CONTENTS ;; is nil, copy into NEWNAME/[DIRECTORY-BASENAME]. ((not copy-contents) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index a5e3da9d04c..df0ac53a8f8 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -1810,7 +1810,7 @@ ARGS are the arguments OPERATION has been called with." ;; Emacs 23+ only. 'copy-directory ;; Emacs 24+ only. - 'files-equal-p 'file-subdir-of-p + 'file-equal-p 'file-subdir-of-p ;; XEmacs only. 'dired-make-relative-symlink 'vm-imap-move-mail 'vm-pop-move-mail 'vm-spool-move-mail)) -- 2.11.4.GIT