X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/31ca4639ad1bfaa355a3f30ef92eb977bd2c6b78..f0db3488160698cb48206d53742f938b71d1aeeb:/lisp/vc/diff.el diff --git a/lisp/vc/diff.el b/lisp/vc/diff.el index 6cfee52cbb..b789b80df8 100644 --- a/lisp/vc/diff.el +++ b/lisp/vc/diff.el @@ -1,10 +1,11 @@ ;;; diff.el --- run `diff' -*- lexical-binding: t -*- -;; Copyright (C) 1992, 1994, 1996, 2001-2012 Free Software Foundation, Inc. +;; Copyright (C) 1992, 1994, 1996, 2001-2014 Free Software Foundation, +;; Inc. ;; Author: Frank Bresz ;; (according to authors.el) -;; Maintainer: FSF +;; Maintainer: emacs-devel@gnu.org ;; Keywords: unix, vc, tools ;; This file is part of GNU Emacs. @@ -32,8 +33,6 @@ (declare-function diff-setup-whitespace "diff-mode" ()) -(eval-when-compile (require 'cl)) - (defgroup diff nil "Comparing files with `diff'." :group 'tools) @@ -87,7 +86,7 @@ exists. If NO-ASYNC is non-nil, call diff synchronously. When called interactively with a prefix argument, prompt interactively for diff switches. Otherwise, the switches -specified in `diff-switches' are passed to the diff command." +specified in the variable `diff-switches' are passed to the diff command." (interactive (let* ((newf (if (and buffer-file-name (file-exists-p buffer-file-name)) (read-file-name @@ -115,6 +114,13 @@ specified in `diff-switches' are passed to the diff command." tempfile)) (file-local-copy file-or-buf))) +(defvar diff-use-labels 'check + "Whether `diff-command' understands the \"--label\" option. +Possible values are: + t -- yes, it does + nil -- no, it does not + check -- try to probe whether it does") + (defun diff-no-select (old new &optional switches no-async buf) ;; Noninteractive helper for creating and reverting diff buffers (unless (bufferp new) (setq new (expand-file-name new))) @@ -122,6 +128,11 @@ specified in `diff-switches' are passed to the diff command." (or switches (setq switches diff-switches)) ; If not specified, use default. (unless (listp switches) (setq switches (list switches))) (or buf (setq buf (get-buffer-create "*Diff*"))) + (when (eq 'check diff-use-labels) + (setq diff-use-labels + (with-temp-buffer + (when (ignore-errors (call-process diff-command nil t nil "--help")) + (if (search-backward "--label" nil t) t))))) (let* ((old-alt (diff-file-local-copy old)) (new-alt (diff-file-local-copy new)) (command @@ -131,11 +142,14 @@ specified in `diff-switches' are passed to the diff command." ,@switches ,@(mapcar #'shell-quote-argument (nconc - (when (or old-alt new-alt) - (list "-L" (if (stringp old) - old (prin1-to-string old)) - "-L" (if (stringp new) - new (prin1-to-string new)))) + (and (or old-alt new-alt) + (eq diff-use-labels t) + (list "--label" + (if (stringp old) old + (prin1-to-string old)) + "--label" + (if (stringp new) new + (prin1-to-string new)))) (list (or old-alt old) (or new-alt new))))) " ")) @@ -199,7 +213,8 @@ With prefix arg, prompt for diff switches." ori file)) (diff bak ori switches))) -(defun diff-latest-backup-file (fn) ; actually belongs into files.el +;;;###autoload +(defun diff-latest-backup-file (fn) "Return the latest existing backup of FILE, or nil." (let ((handler (find-file-name-handler fn 'diff-latest-backup-file))) (if handler