X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/81d3d428c6b88e6c99f3fad6b7cc52c12236ff56..b336bfcdf39f1e4d35bff4a7bd01d3b4bca8f516:/lisp/ediff-vers.el diff --git a/lisp/ediff-vers.el b/lisp/ediff-vers.el index 8480984b95..e314afc24b 100644 --- a/lisp/ediff-vers.el +++ b/lisp/ediff-vers.el @@ -1,16 +1,16 @@ ;;; ediff-vers.el --- version control interface to Ediff ;; Copyright (C) 1995, 1996, 1997, 2001, 2002, 2003, 2004, -;; 2005, 2006, 2007 Free Software Foundation, Inc. +;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. ;; Author: Michael Kifer ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 3, or (at your option) -;; any later version. +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -18,9 +18,7 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -28,47 +26,53 @@ ;; Compiler pacifier (defvar rcs-default-co-switches) -(defvar sc-mode) -(defvar cvs-shell) -(defvar cvs-program) -(defvar cvs-cookie-handle) -(defvar ediff-temp-file-prefix) (and noninteractive (eval-when-compile - (let ((load-path (cons (expand-file-name ".") load-path))) - (load "pcl-cvs" 'noerror) - (load "rcs" 'noerror) - ;; On 8+3 MS-DOS filesystems, generic-x.el is loaded - ;; instead of (the missing) generic-sc.el. Since the - ;; version of Emacs which supports MS-DOS doesn't have - ;; generic-sc, we simply avoid loading it. - (or (and (fboundp 'msdos-long-file-names) - (not (msdos-long-file-names))) - (load "generic-sc" 'noerror)) - ;; (load "vc" 'noerror) ; this sometimes causes compiler error - (or (featurep 'ediff-init) - (load "ediff-init.el" nil nil 'nosuffix)) - ))) + (condition-case nil + ;; for compatibility with current stable version of xemacs + (progn + ;;(require 'pcvs nil 'noerror) + ;;(require 'rcs nil 'noerror) + (require 'pcvs) + (require 'rcs)) + (error nil)) + (require 'vc) + (require 'ediff-init) + )) ;; end pacifier (defcustom ediff-keep-tmp-versions nil - "*If t, do not delete temporary previous versions for the files on which + "If t, do not delete temporary previous versions for the files on which comparison or merge operations are being performed." :type 'boolean :group 'ediff-vers ) +(defalias 'ediff-vc-revision-other-window + (if (fboundp 'vc-revision-other-window) + 'vc-revision-other-window + 'vc-version-other-window)) + +(defalias 'ediff-vc-working-revision + (if (fboundp 'vc-working-revision) + 'vc-working-revision + 'vc-workfile-version)) + ;; VC.el support +(eval-when-compile + (require 'vc-hooks)) ;; for vc-call macro + + (defun ediff-vc-latest-version (file) "Return the version level of the latest version of FILE in repository." (if (fboundp 'vc-latest-version) (vc-latest-version file) - (or (vc-file-getprop file 'vc-latest-version) + (or (vc-file-getprop file 'vc-latest-revision) (cond ((vc-backend file) (vc-call state file) - (vc-file-getprop file 'vc-latest-version)) + (vc-file-getprop file 'vc-latest-revision)) (t (error "File %s is not under version control" file)))) )) @@ -84,12 +88,12 @@ comparison or merge operations are being performed." (setq rev1 (ediff-vc-latest-version (buffer-file-name)))) (save-window-excursion (save-excursion - (vc-revision-other-window rev1) + (ediff-vc-revision-other-window rev1) (setq rev1buf (current-buffer) file1 (buffer-file-name))) (save-excursion (or (string= rev2 "") ; use current buffer - (vc-revision-other-window rev2)) + (ediff-vc-revision-other-window rev2)) (setq rev2buf (current-buffer) file2 (buffer-file-name))) (setq startup-hooks @@ -119,8 +123,7 @@ comparison or merge operations are being performed." (fundamental-mode)) (let ((output-buffer (ediff-rcs-get-output-buffer filename buff))) (delete-windows-on output-buffer) - (save-excursion - (set-buffer output-buffer) + (with-current-buffer output-buffer (apply 'call-process "co" nil t nil ;; -q: quiet (no diagnostics) (append switches rcs-default-co-switches @@ -133,10 +136,8 @@ comparison or merge operations are being performed." ;; Optional NAME is name to use instead of `*RCS-output*'. ;; This is a modified version from rcs.el v1.1. I use it here to make ;; Ediff immune to changes in rcs.el - (let* ((default-major-mode 'fundamental-mode) ; no frills! - (buf (get-buffer-create name))) - (save-excursion - (set-buffer buf) + (let ((buf (get-buffer-create name))) + (with-current-buffer buf (setq buffer-read-only nil default-directory (file-name-directory (expand-file-name file))) (erase-buffer)) @@ -157,32 +158,6 @@ comparison or merge operations are being performed." (ediff-buffers rev1buf rev2buf startup-hooks 'ediff-revision) )) - -;; GENERIC-SC.el support - -(defun generic-sc-get-latest-rev () - (cond ((eq sc-mode 'CCASE) - (eval "main/LATEST")) - (t (eval "")))) - -(defun ediff-generic-sc-internal (rev1 rev2 &optional startup-hooks) -;; Run Ediff on versions of the current buffer. -;; If REV2 is "" then compare current buffer with REV1. -;; If the current buffer is named `F', the version is named `F.~REV~'. -;; If `F.~REV~' already exists, it is used instead of being re-created. - (let (rev1buf rev2buf) - (save-excursion - (if (or (not rev1) (string= rev1 "")) - (setq rev1 (generic-sc-get-latest-rev))) - (sc-visit-previous-revision rev1) - (setq rev1buf (current-buffer))) - (save-excursion - (or (string= rev2 "") ; use current buffer - (sc-visit-previous-revision rev2)) - (setq rev2buf (current-buffer))) - (ediff-buffers rev1buf rev2buf startup-hooks 'ediff-revision))) - - ;;; Merge with Version Control (defun ediff-vc-merge-internal (rev1 rev2 ancestor-rev @@ -191,17 +166,17 @@ comparison or merge operations are being performed." (let (buf1 buf2 ancestor-buf) (save-window-excursion (save-excursion - (vc-revision-other-window rev1) + (ediff-vc-revision-other-window rev1) (setq buf1 (current-buffer))) (save-excursion (or (string= rev2 "") - (vc-revision-other-window rev2)) + (ediff-vc-revision-other-window rev2)) (setq buf2 (current-buffer))) (if ancestor-rev (save-excursion (if (string= ancestor-rev "") - (setq ancestor-rev (vc-working-revision buffer-file-name))) - (vc-revision-other-window ancestor-rev) + (setq ancestor-rev (ediff-vc-working-revision buffer-file-name))) + (ediff-vc-revision-other-window ancestor-rev) (setq ancestor-buf (current-buffer)))) (setq startup-hooks (cons @@ -245,76 +220,6 @@ comparison or merge operations are being performed." (ediff-merge-buffers buf1 buf2 startup-hooks 'ediff-merge-revisions merge-buffer-file)))) -(defun ediff-generic-sc-merge-internal (rev1 rev2 ancestor-rev - &optional - startup-hooks merge-buffer-file) - ;; If ANCESTOR-REV non-nil, merge with ancestor - (let (buf1 buf2 ancestor-buf) - (save-excursion - (if (string= rev1 "") - (setq rev1 (generic-sc-get-latest-rev))) - (sc-visit-previous-revision rev1) - (setq buf1 (current-buffer))) - (save-excursion - (or (string= rev2 "") - (sc-visit-previous-revision rev2)) - (setq buf2 (current-buffer))) - (if ancestor-rev - (save-excursion - (or (string= ancestor-rev "") - (sc-visit-previous-revision ancestor-rev)) - (setq ancestor-buf (current-buffer)))) - (if ancestor-rev - (ediff-merge-buffers-with-ancestor - buf1 buf2 ancestor-buf - startup-hooks 'ediff-merge-revisions-with-ancestor merge-buffer-file) - (ediff-merge-buffers - buf1 buf2 startup-hooks 'ediff-merge-revisions merge-buffer-file)))) - - -;; PCL-CVS.el support - -;; MK: Check. This function doesn't seem to be used any more by pcvs or pcl-cvs -(defun cvs-run-ediff-on-file-descriptor (tin) -;; This is a replacement for cvs-emerge-mode -;; Runs after cvs-update. -;; Ediff-merge appropriate revisions of the selected file. - (let* ((fileinfo (tin-cookie cvs-cookie-handle tin)) - (type (cvs-fileinfo->type fileinfo)) - (tmp-file - (cvs-retrieve-revision-to-tmpfile fileinfo)) - (default-directory - (file-name-as-directory (cvs-fileinfo->dir fileinfo))) - ancestor-file) - - (or (memq type '(MERGED CONFLICT MODIFIED)) - (error - "Can only merge `Modified', `Merged' or `Conflict' files")) - - (cond ((memq type '(MERGED CONFLICT)) - (setq ancestor-file - (cvs-retrieve-revision-to-tmpfile - fileinfo - ;; revision - (cvs-fileinfo->base-revision fileinfo))) - (ediff-merge-buffers-with-ancestor - (find-file-noselect tmp-file) - (find-file-noselect (cvs-fileinfo->backup-file fileinfo)) - (find-file-noselect ancestor-file) - nil ; startup-hooks - 'ediff-merge-revisions-with-ancestor)) - ((eq type 'MODIFIED) - (ediff-buffers - (find-file-noselect tmp-file) - (if (featurep 'xemacs) - ;; XEmacs doesn't seem to have cvs-fileinfo->full-name - (find-file-noselect (cvs-fileinfo->full-path fileinfo)) - (find-file-noselect (cvs-fileinfo->full-name fileinfo))) - nil ; startup-hooks - 'ediff-revisions))) - (if (stringp tmp-file) (ediff-delete-version-file tmp-file)) - (if (stringp ancestor-file) (ediff-delete-version-file ancestor-file)))) - ;; delete version file on exit unless ediff-keep-tmp-versions is true (defun ediff-delete-version-file (file) @@ -324,11 +229,11 @@ comparison or merge operations are being performed." (provide 'ediff-vers) -;;; Local Variables: -;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun) -;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1) -;;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body)) -;;; End: +;; Local Variables: +;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun) +;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1) +;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body)) +;; End: -;;; arch-tag: bbb34f0c-2a90-426a-a77a-c75f479ebbbf +;; arch-tag: bbb34f0c-2a90-426a-a77a-c75f479ebbbf ;;; ediff-vers.el ends here