annotate lisp/diff.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents 5acb1a85cb5d
children c23f7efbfd57
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
1 ;;; diff.el --- Run `diff' in compilation-mode.
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
2
14140
db5e78740d5c (diff): Fix local compilation-exit-message-function to take the proper
Roland McGrath <roland@gnu.org>
parents: 14106
diff changeset
3 ;; Copyright (C) 1992, 1994, 1996 Free Software Foundation, Inc.
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
4
2247
2c7997f249eb Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1215
diff changeset
5 ;; Keywords: unix, tools
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 669
diff changeset
6
349
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 ;; This file is part of GNU Emacs.
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 ;; GNU Emacs is free software; you can redistribute it and/or modify
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 ;; it under the terms of the GNU General Public License as published by
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 669
diff changeset
11 ;; the Free Software Foundation; either version 2, or (at your option)
349
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 ;; any later version.
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 ;; GNU Emacs is distributed in the hope that it will be useful,
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 ;; GNU General Public License for more details.
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14140
diff changeset
20 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14140
diff changeset
21 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14140
diff changeset
22 ;; Boston, MA 02111-1307, USA.
349
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
24 ;;; Commentary:
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
25
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
26 ;; This package helps you explore differences between files, using the
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
27 ;; UNIX command diff(1). The commands are `diff' and `diff-backup'.
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
28 ;; You can specify options with `diff-switches'.
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
29
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
30 ;;; Code:
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 669
diff changeset
31
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
32 (require 'compile)
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 669
diff changeset
33
18143
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
34 (defgroup diff nil
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
35 "Comparing files with `diff'."
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
36 :group 'tools)
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
37
18143
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
38 ;;;###autoload
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
39 (defcustom diff-switches "-c"
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
40 "*A string or list of strings specifying switches to be be passed to diff."
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
41 :type '(choice string (repeat string))
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
42 :group 'diff)
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
43
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
44 ;;;###autoload
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
45 (defcustom diff-command "diff"
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
46 "*The command to use to run diff."
18150
960597385f1c (diff-command): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 18143
diff changeset
47 :type 'string
18143
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
48 :group 'diff)
9736
093d80b4ae17 (diff-command): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8195
diff changeset
49
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
50 (defvar diff-regexp-alist
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
51 '(
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
52 ;; -u format: @@ -OLDSTART,OLDEND +NEWSTART,NEWEND @@
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
53 ("^@@ -\\([0-9]+\\),[0-9]+ \\+\\([0-9]+\\),[0-9]+ @@$" 1 2)
14140
db5e78740d5c (diff): Fix local compilation-exit-message-function to take the proper
Roland McGrath <roland@gnu.org>
parents: 14106
diff changeset
54
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
55 ;; -c format: *** OLDSTART,OLDEND ****
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
56 ("^\\*\\*\\* \\([0-9]+\\),[0-9]+ \\*\\*\\*\\*$" 1 nil)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
57 ;; --- NEWSTART,NEWEND ----
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
58 ("^--- \\([0-9]+\\),[0-9]+ ----$" nil 1)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
59
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
60 ;; plain diff format: OLDSTART[,OLDEND]{a,d,c}NEWSTART[,NEWEND]
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
61 ("^\\([0-9]+\\)\\(,[0-9]+\\)?[adc]\\([0-9]+\\)\\(,[0-9]+\\)?$" 1 3)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
62
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
63 ;; -e (ed) format: OLDSTART[,OLDEND]{a,d,c}
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
64 ("^\\([0-9]+\\)\\(,[0-9]+\\)?[adc]$" 1)
349
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
66 ;; -f format: {a,d,c}OLDSTART[ OLDEND]
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
67 ;; -n format: {a,d,c}OLDSTART LINES-CHANGED
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
68 ("^[adc]\\([0-9]+\\)\\( [0-9]+\\)?$" 1)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
69 )
14140
db5e78740d5c (diff): Fix local compilation-exit-message-function to take the proper
Roland McGrath <roland@gnu.org>
parents: 14106
diff changeset
70 "Alist (REGEXP OLD-IDX NEW-IDX) of regular expressions to match difference
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
71 sections in \\[diff] output. If REGEXP matches, the OLD-IDX'th
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
72 subexpression gives the line number in the old file, and NEW-IDX'th
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
73 subexpression gives the line number in the new file. If OLD-IDX or NEW-IDX
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
74 is nil, REGEXP matches only half a section.")
349
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75
1134
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
76 (defvar diff-old-file nil
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
77 "This is the old file name in the comparison in this buffer.")
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
78 (defvar diff-new-file nil
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
79 "This is the new file name in the comparison in this buffer.")
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
80 (defvar diff-old-temp-file nil
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
81 "This is the name of a temp file to be deleted after diff finishes.")
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
82 (defvar diff-new-temp-file nil
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
83 "This is the name of a temp file to be deleted after diff finishes.")
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
84
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
85 ;; See compilation-parse-errors-function (compile.el).
907
48ca3bf4b5f8 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 894
diff changeset
86 (defun diff-parse-differences (limit-search find-at-least)
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
87 (setq compilation-error-list nil)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
88 (message "Parsing differences...")
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
89
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
90 ;; Don't reparse diffs already seen at last parse.
2541
09e58f572f19 (diff-parse-differences): Small robustification --- don't lose if we
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
91 (if compilation-parsing-end (goto-char compilation-parsing-end))
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 349
diff changeset
92
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
93 ;; Construct in REGEXP a regexp composed of all those in dired-regexp-alist.
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
94 (let ((regexp (mapconcat (lambda (elt)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
95 (concat "\\(" (car elt) "\\)"))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
96 diff-regexp-alist
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
97 "\\|"))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
98 ;; (GROUP-IDX OLD-IDX NEW-IDX)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
99 (groups (let ((subexpr 1))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
100 (mapcar (lambda (elt)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
101 (prog1
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
102 (cons subexpr
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
103 (mapcar (lambda (n)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
104 (and n
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
105 (+ subexpr n)))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
106 (cdr elt)))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
107 (setq subexpr (+ subexpr 1
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
108 (count-regexp-groupings
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
109 (car elt))))))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
110 diff-regexp-alist)))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
111
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
112 (new-error
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
113 (function (lambda (file subexpr)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
114 (setq compilation-error-list
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
115 (cons
1179
7961d1af11a7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1134
diff changeset
116 (cons (save-excursion
7961d1af11a7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1134
diff changeset
117 ;; Report location of message
7961d1af11a7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1134
diff changeset
118 ;; at beginning of line.
7961d1af11a7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1134
diff changeset
119 (goto-char
7961d1af11a7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1134
diff changeset
120 (match-beginning subexpr))
7961d1af11a7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1134
diff changeset
121 (beginning-of-line)
7961d1af11a7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1134
diff changeset
122 (point-marker))
7961d1af11a7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1134
diff changeset
123 ;; Report location of corresponding text.
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
124 (let ((line (string-to-int
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
125 (buffer-substring
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
126 (match-beginning subexpr)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
127 (match-end subexpr)))))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
128 (save-excursion
3874
0a694f8e1730 * diff.el (diff-parse-differences): Preserve the match data
Jim Blandy <jimb@redhat.com>
parents: 3429
diff changeset
129 (save-match-data
0a694f8e1730 * diff.el (diff-parse-differences): Preserve the match data
Jim Blandy <jimb@redhat.com>
parents: 3429
diff changeset
130 (set-buffer (find-file-noselect file)))
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
131 (save-excursion
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
132 (goto-line line)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
133 (point-marker)))))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
134 compilation-error-list)))))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
135
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
136 (found-desired nil)
1215
92554bb95d51 (diff): Don't print echo area message.
Richard M. Stallman <rms@gnu.org>
parents: 1179
diff changeset
137 (num-loci-found 0)
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
138 g)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
139
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
140 (while (and (not found-desired)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
141 ;; We don't just pass LIMIT-SEARCH to re-search-forward
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
142 ;; because we want to find matches containing LIMIT-SEARCH
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
143 ;; but which extend past it.
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
144 (re-search-forward regexp nil t))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
145
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
146 ;; Find which individual regexp matched.
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
147 (setq g groups)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
148 (while (and g (null (match-beginning (car (car g)))))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
149 (setq g (cdr g)))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
150 (setq g (car g))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
151
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
152 (if (nth 1 g) ;OLD-IDX
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
153 (funcall new-error diff-old-file (nth 1 g)))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
154 (if (nth 2 g) ;NEW-IDX
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
155 (funcall new-error diff-new-file (nth 2 g)))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
156
1215
92554bb95d51 (diff): Don't print echo area message.
Richard M. Stallman <rms@gnu.org>
parents: 1179
diff changeset
157 (setq num-loci-found (1+ num-loci-found))
1134
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
158 (if (or (and find-at-least
1215
92554bb95d51 (diff): Don't print echo area message.
Richard M. Stallman <rms@gnu.org>
parents: 1179
diff changeset
159 (>= num-loci-found find-at-least))
907
48ca3bf4b5f8 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 894
diff changeset
160 (and limit-search (>= (point) limit-search)))
1215
92554bb95d51 (diff): Don't print echo area message.
Richard M. Stallman <rms@gnu.org>
parents: 1179
diff changeset
161 ;; We have found as many new loci as the user wants,
907
48ca3bf4b5f8 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 894
diff changeset
162 ;; or the user wanted a specific diff, and we're past it.
48ca3bf4b5f8 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 894
diff changeset
163 (setq found-desired t)))
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
164 (if found-desired
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
165 (setq compilation-parsing-end (point))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
166 ;; Set to point-max, not point, so we don't perpetually
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
167 ;; parse the last bit of text when it isn't a diff header.
1215
92554bb95d51 (diff): Don't print echo area message.
Richard M. Stallman <rms@gnu.org>
parents: 1179
diff changeset
168 (setq compilation-parsing-end (point-max)))
92554bb95d51 (diff): Don't print echo area message.
Richard M. Stallman <rms@gnu.org>
parents: 1179
diff changeset
169 (message "Parsing differences...done"))
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
170 (setq compilation-error-list (nreverse compilation-error-list)))
349
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171
16984
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
172 (defun diff-process-setup ()
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
173 "Set up \`compilation-exit-message-function' for \`diff'."
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
174 ;; Avoid frightening people with "abnormally terminated"
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
175 ;; if diff finds differences.
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
176 (set (make-local-variable 'compilation-exit-message-function)
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
177 (lambda (status code msg)
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
178 (cond ((not (eq status 'exit))
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
179 (cons msg code))
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
180 ((zerop code)
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
181 '("finished (no differences)\n" . "no differences"))
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
182 ((= code 1)
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
183 '("finished\n" . "differences found"))
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
184 (t
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
185 (cons msg code))))))
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
186
349
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 ;;;###autoload
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
188 (defun diff (old new &optional switches)
349
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 "Find and display the differences between OLD and NEW files.
4759
5ca1f3073ffc (diff): Doc fix.
Brian Fox <bfox@gnu.org>
parents: 3874
diff changeset
190 Interactively the current buffer's file name is the default for NEW
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
191 and a backup file for NEW is the default for OLD.
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
192 With prefix arg, prompt for diff switches."
349
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 (interactive
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
194 (nconc
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
195 (let (oldf newf)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
196 (nreverse
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
197 (list
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
198 (setq newf (buffer-file-name)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
199 newf (if (and newf (file-exists-p newf))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
200 (read-file-name
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
201 (concat "Diff new file: ("
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
202 (file-name-nondirectory newf) ") ")
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
203 nil newf t)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
204 (read-file-name "Diff new file: " nil nil t)))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
205 (setq oldf (file-newest-backup newf)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
206 oldf (if (and oldf (file-exists-p oldf))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
207 (read-file-name
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
208 (concat "Diff original file: ("
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
209 (file-name-nondirectory oldf) ") ")
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
210 (file-name-directory oldf) oldf t)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
211 (read-file-name "Diff original file: "
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
212 (file-name-directory newf) nil t))))))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
213 (if current-prefix-arg
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
214 (list (read-string "Diff switches: "
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
215 (if (stringp diff-switches)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
216 diff-switches
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
217 (mapconcat 'identity diff-switches " "))))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
218 nil)))
349
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 (setq new (expand-file-name new)
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 old (expand-file-name old))
1134
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
221 (let ((old-alt (file-local-copy old))
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
222 (new-alt (file-local-copy new))
1110
f165d900e06e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 907
diff changeset
223 buf)
15932
e4d0cf418b2b (diff): Don't pop to *diff* buffer. Change bogus
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
224 (save-excursion
16984
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
225 (let ((compilation-process-setup-function 'diff-process-setup)
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
226 (command
1110
f165d900e06e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 907
diff changeset
227 (mapconcat 'identity
9736
093d80b4ae17 (diff-command): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8195
diff changeset
228 (append (list diff-command)
3429
5c0a40a8a55d (diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents: 2704
diff changeset
229 ;; Use explicitly specified switches
5c0a40a8a55d (diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents: 2704
diff changeset
230 (if switches
5c0a40a8a55d (diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents: 2704
diff changeset
231 (if (consp switches)
5c0a40a8a55d (diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents: 2704
diff changeset
232 switches (list switches))
5c0a40a8a55d (diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents: 2704
diff changeset
233 ;; If not specified, use default.
5c0a40a8a55d (diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents: 2704
diff changeset
234 (if (consp diff-switches)
5c0a40a8a55d (diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents: 2704
diff changeset
235 diff-switches
5c0a40a8a55d (diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents: 2704
diff changeset
236 (list diff-switches)))
1110
f165d900e06e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 907
diff changeset
237 (if (or old-alt new-alt)
f165d900e06e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 907
diff changeset
238 (list "-L" old "-L" new))
5386
a91748bee657 (diff): Call shell-quote-argument.
Richard M. Stallman <rms@gnu.org>
parents: 4759
diff changeset
239 (list
a91748bee657 (diff): Call shell-quote-argument.
Richard M. Stallman <rms@gnu.org>
parents: 4759
diff changeset
240 (shell-quote-argument (or old-alt old)))
a91748bee657 (diff): Call shell-quote-argument.
Richard M. Stallman <rms@gnu.org>
parents: 4759
diff changeset
241 (list
a91748bee657 (diff): Call shell-quote-argument.
Richard M. Stallman <rms@gnu.org>
parents: 4759
diff changeset
242 (shell-quote-argument (or new-alt new))))
1110
f165d900e06e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 907
diff changeset
243 " ")))
f165d900e06e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 907
diff changeset
244 (setq buf
f165d900e06e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 907
diff changeset
245 (compile-internal command
f165d900e06e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 907
diff changeset
246 "No more differences" "Diff"
1112
1dba066c1e0a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 1110
diff changeset
247 'diff-parse-differences))
15932
e4d0cf418b2b (diff): Don't pop to *diff* buffer. Change bogus
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
248 (set-buffer buf)
5542
004856d1b311 (diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents: 5541
diff changeset
249 (set (make-local-variable 'diff-old-file) old)
004856d1b311 (diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents: 5541
diff changeset
250 (set (make-local-variable 'diff-new-file) new)
004856d1b311 (diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents: 5541
diff changeset
251 (set (make-local-variable 'diff-old-temp-file) old-alt)
004856d1b311 (diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents: 5541
diff changeset
252 (set (make-local-variable 'diff-new-temp-file) new-alt)
004856d1b311 (diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents: 5541
diff changeset
253 (set (make-local-variable 'compilation-finish-function)
004856d1b311 (diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents: 5541
diff changeset
254 (function (lambda (buff msg)
004856d1b311 (diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents: 5541
diff changeset
255 (if diff-old-temp-file
004856d1b311 (diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents: 5541
diff changeset
256 (delete-file diff-old-temp-file))
004856d1b311 (diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents: 5541
diff changeset
257 (if diff-new-temp-file
004856d1b311 (diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents: 5541
diff changeset
258 (delete-file diff-new-temp-file)))))
16984
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
259 ;; When async processes aren't available, the compilation finish
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
260 ;; function doesn't get chance to run. Invoke it by hand.
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
261 (or (fboundp 'start-process)
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
262 (funcall compilation-finish-function nil nil))
1134
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
263 buf))))
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 349
diff changeset
264
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
265 ;;;###autoload
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
266 (defun diff-backup (file &optional switches)
881
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
267 "Diff this file with its backup file or vice versa.
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
268 Uses the latest backup, if there are several numerical backups.
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
269 If this file is a backup, diff it with its original.
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
270 The backup file is the first file given to `diff'."
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
271 (interactive (list (read-file-name "Diff (file with backup): ")
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
272 (if current-prefix-arg
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
273 (read-string "Diff switches: "
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
274 (if (stringp diff-switches)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
275 diff-switches
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
276 (mapconcat 'identity
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
277 diff-switches " ")))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
278 nil)))
881
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
279 (let (bak ori)
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
280 (if (backup-file-name-p file)
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
281 (setq bak file
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
282 ori (file-name-sans-versions file))
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
283 (setq bak (or (diff-latest-backup-file file)
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
284 (error "No backup found for %s" file))
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
285 ori file))
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
286 (diff bak ori switches)))
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 349
diff changeset
287
881
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
288 (defun diff-latest-backup-file (fn) ; actually belongs into files.el
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
289 "Return the latest existing backup of FILE, or nil."
7028
6915bf781a38 Pass operation to Ffind_file_name_handler.
Karl Heuer <kwzh@gnu.org>
parents: 6321
diff changeset
290 (let ((handler (find-file-name-handler fn 'diff-latest-backup-file)))
6147
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
291 (if handler
6321
8c667dc4566e (diff-latest-backup-file): Call file name handler properly.
Richard M. Stallman <rms@gnu.org>
parents: 6147
diff changeset
292 (funcall handler 'diff-latest-backup-file fn)
6147
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
293 ;; First try simple backup, then the highest numbered of the
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
294 ;; numbered backups.
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
295 ;; Ignore the value of version-control because we look for existing
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
296 ;; backups, which maybe were made earlier or by another user with
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
297 ;; a different value of version-control.
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
298 (setq fn (file-chase-links (expand-file-name fn)))
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
299 (or
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
300 (let ((bak (make-backup-file-name fn)))
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
301 (if (file-exists-p bak) bak))
8195
a4f0f421752e (diff-latest-backup-file): Cope with backups stored
Richard M. Stallman <rms@gnu.org>
parents: 7028
diff changeset
302 ;; We use BACKUPNAME to cope with backups stored in a different dir.
a4f0f421752e (diff-latest-backup-file): Cope with backups stored
Richard M. Stallman <rms@gnu.org>
parents: 7028
diff changeset
303 (let* ((backupname (car (find-backup-file-name fn)))
a4f0f421752e (diff-latest-backup-file): Cope with backups stored
Richard M. Stallman <rms@gnu.org>
parents: 7028
diff changeset
304 (dir (file-name-directory backupname))
a4f0f421752e (diff-latest-backup-file): Cope with backups stored
Richard M. Stallman <rms@gnu.org>
parents: 7028
diff changeset
305 (base-versions (concat (file-name-sans-versions
a4f0f421752e (diff-latest-backup-file): Cope with backups stored
Richard M. Stallman <rms@gnu.org>
parents: 7028
diff changeset
306 (file-name-nondirectory backupname))
a4f0f421752e (diff-latest-backup-file): Cope with backups stored
Richard M. Stallman <rms@gnu.org>
parents: 7028
diff changeset
307 ".~"))
17732
442b07348a34 (diff-latest-backup-file):
Richard M. Stallman <rms@gnu.org>
parents: 16984
diff changeset
308 ;; This is a fluid var for backup-extract-version.
442b07348a34 (diff-latest-backup-file):
Richard M. Stallman <rms@gnu.org>
parents: 16984
diff changeset
309 (backup-extract-version-start (length base-versions)))
6147
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
310 (concat dir
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
311 (car (sort
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
312 (file-name-all-completions base-versions dir)
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
313 (function
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
314 (lambda (fn1 fn2)
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
315 (> (backup-extract-version fn1)
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
316 (backup-extract-version fn2))))))))))))
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 349
diff changeset
317
2541
09e58f572f19 (diff-parse-differences): Small robustification --- don't lose if we
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
318 (provide 'diff)
09e58f572f19 (diff-parse-differences): Small robustification --- don't lose if we
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
319
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 474
diff changeset
320 ;;; diff.el ends here