]> code.delx.au - gnu-emacs/blobdiff - lisp/ediff-mult.el
*** empty log message ***
[gnu-emacs] / lisp / ediff-mult.el
index 536fdf4d47bbc0437702d4647c60160aad4c3d1c..41a7699cfdc5d9e5699876c75bf7e11a4c0b7433 100644 (file)
@@ -1,6 +1,6 @@
 ;;; ediff-mult.el --- support for multi-file/multi-buffer processing in Ediff
 
-;; Copyright (C) 1995, 96, 97, 98, 99, 2000, 01, 02 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 96, 97, 98, 99, 2000, 01, 02, 05 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 
@@ -167,6 +167,9 @@ directories.")
 ;; buffer used to collect custom diffs from individual sessions in the group
 (ediff-defvar-local ediff-meta-diff-buffer nil "")
 
+;; t means recurse into subdirs when deciding which files have same contents
+(ediff-defvar-local ediff-recurse-to-subdirectories nil "")
+
 ;; history var to use for filtering groups of files
 (defvar ediff-filtering-regexp-history nil "")
 
@@ -200,7 +203,7 @@ Should be a sexp. For instance (car ediff-filtering-regexp-history) or nil."
 (defcustom ediff-meta-truncate-filenames t
   "*If non-nil, truncate long file names in the session group buffers.
 This can be toggled with `ediff-toggle-filename-truncation'."
-  :type 'hook
+  :type 'boolean
   :group 'ediff-mult)
 (defcustom ediff-registry-setup-hook nil
   "*Hooks run just after the registry control panel is set up."
@@ -1689,6 +1692,7 @@ all marked sessions must be active."
         (info (ediff-get-meta-info meta-buf pos))
         (session-buf (ediff-get-session-buffer info))
         (session-number (ediff-get-session-number-at-pos pos meta-buf))
+        (default-regexp (eval ediff-default-filtering-regexp))
         merge-autostore-dir file1 file2 file3 regexp)
 
     (setq file1 (ediff-get-session-objA-name info)
@@ -1717,8 +1721,16 @@ all marked sessions must be active."
             ;; do ediff/ediff-merge on subdirectories
             (if (ediff-buffer-live-p session-buf)
                 (ediff-show-meta-buffer session-buf)
-              (setq regexp (read-string "Filter through regular expression: "
-                                        nil 'ediff-filtering-regexp-history))
+              (setq regexp
+                    (read-string
+                     (if (stringp default-regexp)
+                         (format
+                          "Filter through regular expression (default %s): "
+                          default-regexp)
+                       "Filter through regular expression: ")
+                     nil
+                     'ediff-filtering-regexp-history
+                     (eval ediff-default-filtering-regexp)))
               (ediff-directories-internal
                file1 file2 file3 regexp
                ediff-session-action-function
@@ -2340,6 +2352,7 @@ last-command-char is used to decide which action to take."
                ))
       (setq list (cdr list)))
     (message "Comparing files ... Done"))
+  (setq ediff-recurse-to-subdirectories nil)
   (ediff-update-meta-buffer (current-buffer) 'must-redraw))
 
 ;; mark files 1 and 2 as equal, if they are.
@@ -2347,12 +2360,11 @@ last-command-char is used to decide which action to take."
 (defun ediff-mark-if-equal (fileinfo1 fileinfo2)
   (let ((f1 (car fileinfo1))
        (f2 (car fileinfo2)))
-    (cond ((file-directory-p f1) nil)
-         ((file-directory-p f2) nil)
-         ((ediff-same-file-contents f1 f2)
-          (ediff-set-file-eqstatus fileinfo1 t)
-          (ediff-set-file-eqstatus fileinfo2 t)
-          t))
+    (if (and (stringp f1) (stringp f2) (ediff-same-contents f1 f2))
+       (progn
+         (ediff-set-file-eqstatus fileinfo1 t)
+         (ediff-set-file-eqstatus fileinfo2 t)
+         ))
     ))