Function: ediff-same-contents

ediff-same-contents is a byte-compiled function defined in ediff-diff.el.gz.

Signature

(ediff-same-contents D1 D2 &optional FILTER-RE)

Documentation

Return t if D1 and D2 have the same content.

D1 and D2 can either be both directories or both regular files. Symlinks and the likes are not handled. If FILTER-RE is non-nil, recursive checking in directories affects only files whose names match the expression.

Source Code

;; Defined in /usr/src/emacs/lisp/vc/ediff-diff.el.gz
(defun ediff-same-contents (d1 d2 &optional filter-re)
  "Return t if D1 and D2 have the same content.
D1 and D2 can either be both directories or both regular files.
Symlinks and the likes are not handled.
If FILTER-RE is non-nil, recursive checking in directories
affects only files whose names match the expression."
  ;; Normalize empty filter RE to nil.
  (unless (> (length filter-re) 0) (setq filter-re nil))
  ;; Indicate progress
  (message "Comparing `%s' and `%s' modulo `%s'" d1 d2 filter-re)
  (cond
   ;; D1 & D2 directories => recurse
   ((and (file-directory-p d1)
         (file-directory-p d2))
    (if (null ediff-recurse-to-subdirectories)
	(if (y-or-n-p "Compare subdirectories recursively? ")
	    (setq ediff-recurse-to-subdirectories 'yes)
	  (setq ediff-recurse-to-subdirectories 'no)))
    (if (eq ediff-recurse-to-subdirectories 'yes)
	(let* ((all-entries-1 (directory-files d1 t filter-re))
	       (all-entries-2 (directory-files d2 t filter-re))
	       (entries-1 (ediff-delete-all-matches "^\\.\\.?$" all-entries-1))
	       (entries-2 (ediff-delete-all-matches "^\\.\\.?$" all-entries-2))
	       )

	  (ediff-same-file-contents-lists entries-1 entries-2 filter-re)
	  ))
    ) ; end of the directories case
   ;; D1 & D2 are both files => compare directly
   ((and (file-regular-p d1)
         (file-regular-p d2))
    (ediff-same-file-contents d1 d2))
   ;; Otherwise => false: unequal contents
   )
  )