]> code.delx.au - gnu-emacs/blobdiff - lisp/ediff-ptch.el
(command-line-1): Refer to "Pure Storage" on
[gnu-emacs] / lisp / ediff-ptch.el
index ec0e26e7d5c8e6a386e3dfd58b091cf5b671a857..b911c33f0fb0ac82b9ffc6a66b909acc5c7c629e 100644 (file)
@@ -1,7 +1,7 @@
 ;;; ediff-ptch.el --- Ediff's  patch support
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-;;   2003, 2004, 2005 Free Software Foundation, Inc.
+;;   2003, 2004, 2005, 2006 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 
@@ -26,7 +26,6 @@
 
 ;;; Code:
 
-(provide 'ediff-ptch)
 
 (defgroup ediff-ptch nil
   "Ediff patch support."
@@ -297,16 +296,23 @@ program."
                      ;; (file1 . file2). Get it using ediff-get-session-objA.
                      (ediff-get-session-objA-name session-info))
                     ;; base-dir1 is  the dir part of the 1st file in the patch
-                    (base-dir1 (file-name-directory (car proposed-file-names)))
+                    (base-dir1
+                     (or (file-name-directory (car proposed-file-names))
+                         ""))
                     ;; directory part of the 2nd file in the patch
-                    (base-dir2 (file-name-directory (cdr proposed-file-names)))
+                    (base-dir2
+                     (or (file-name-directory (cdr proposed-file-names))
+                         ""))
                     )
-               ;; If both base-dir1 and base-dir2 are relative, assume that
+               ;; If both base-dir1 and base-dir2 are relative and exist,
+               ;; assume that
                ;; these dirs lead to the actual files starting at the present
                ;; directory. So, we don't strip these relative dirs from the
                ;; file names. This is a heuristic intended to improve guessing
                (unless (or (file-name-absolute-p base-dir1)
-                           (file-name-absolute-p base-dir2))
+                           (file-name-absolute-p base-dir2)
+                           (not (file-exists-p base-dir1))
+                           (not (file-exists-p base-dir2)))
                  (setq base-dir1 ""
                        base-dir2 ""))
                (or (string= (car proposed-file-names) "/dev/null")
@@ -377,8 +383,8 @@ other files, enter /dev/null
                           (concat actual-dir (cdr proposed-file-names)))))
                ))
            ediff-patch-map)
-    ;; check for the shorter existing file in each pair and discard the other
-    ;; one
+    ;; Check for the existing files in each pair and discard the nonexisting
+    ;; ones. If both exist, ask the user.
     (mapcar (lambda (session-info)
              (let* ((file1 (car (ediff-get-session-objA-name session-info)))
                     (file2 (cdr (ediff-get-session-objA-name session-info)))
@@ -837,6 +843,8 @@ you can still examine the changes via M-x ediff-files"
 
 
 
+(provide 'ediff-ptch)
+
 
 ;;; Local Variables:
 ;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)