[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/vc.el [lexbind]
From: |
Miles Bader |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/vc.el [lexbind] |
Date: |
Tue, 14 Oct 2003 19:52:35 -0400 |
Index: emacs/lisp/vc.el
diff -c emacs/lisp/vc.el:1.331.2.1 emacs/lisp/vc.el:1.331.2.2
*** emacs/lisp/vc.el:1.331.2.1 Fri Apr 4 01:20:11 2003
--- emacs/lisp/vc.el Tue Oct 14 19:51:27 2003
***************
*** 1,12 ****
;;; vc.el --- drive a version-control system from within Emacs
! ;; Copyright (C) 1992,93,94,95,96,97,98,2000,2001 Free Software Foundation,
Inc.
;; Author: FSF (see below for full credits)
;; Maintainer: Andre Spiegel <address@hidden>
;; Keywords: tools
! ;; $Id: vc.el,v 1.331.2.1 2003/04/04 06:20:11 miles Exp $
;; This file is part of GNU Emacs.
--- 1,13 ----
;;; vc.el --- drive a version-control system from within Emacs
! ;; Copyright (C) 1992,93,94,95,96,97,98,2000,01,2003
! ;; Free Software Foundation, Inc.
;; Author: FSF (see below for full credits)
;; Maintainer: Andre Spiegel <address@hidden>
;; Keywords: tools
! ;; $Id: vc.el,v 1.331.2.2 2003/10/14 23:51:27 miles Exp $
;; This file is part of GNU Emacs.
***************
*** 61,67 ****
;; to be installed somewhere on Emacs's path for executables.
;;
;; If your site uses the ChangeLog convention supported by Emacs, the
! ;; function vc-comment-to-change-log should prove a useful checkin hook.
;;
;; The vc code maintains some internal state in order to reduce expensive
;; version-control operations to a minimum. Some names are only computed
--- 62,70 ----
;; to be installed somewhere on Emacs's path for executables.
;;
;; If your site uses the ChangeLog convention supported by Emacs, the
! ;; function log-edit-comment-to-change-log could prove a useful checkin hook,
! ;; although you might prefer to use C-c C-a (i.e. log-edit-insert-changelog)
! ;; from the commit buffer instead or to set `log-edit-setup-invert'.
;;
;; The vc code maintains some internal state in order to reduce expensive
;; version-control operations to a minimum. Some names are only computed
***************
*** 305,311 ****
;; is nil, use the current workfile version (as found in the
;; repository) as the older version; if REV2 is nil, use the current
;; workfile contents as the newer version. This function should
! ;; pass the value of (vc-diff-switches-list BACKEND) to the backend
;; command. It should return a status of either 0 (no differences
;; found), or 1 (either non-empty diff or the diff is run
;; asynchronously).
--- 308,314 ----
;; is nil, use the current workfile version (as found in the
;; repository) as the older version; if REV2 is nil, use the current
;; workfile contents as the newer version. This function should
! ;; pass the value of (vc-switches BACKEND 'diff) to the backend
;; command. It should return a status of either 0 (no differences
;; found), or 1 (either non-empty diff or the diff is run
;; asynchronously).
***************
*** 379,384 ****
--- 382,395 ----
;; `revert' operations itself, without calling the backend system. The
;; default implementation always returns nil.
;;
+ ;; - repository-hostname (dirname)
+ ;;
+ ;; Return the hostname that the backend will have to contact
+ ;; in order to operate on a file in DIRNAME. If the return value
+ ;; is nil, it is means that the repository is local.
+ ;; This function is used in `vc-stay-local-p' which backends can use
+ ;; for their convenience.
+ ;;
;; - previous-version (file rev)
;;
;; Return the version number that precedes REV for FILE.
***************
*** 396,406 ****
;; version control state in such a way that the headers would give
;; wrong information.
;;
;; - rename-file (old new)
;;
;; Rename file OLD to NEW, both in the working area and in the
! ;; repository. If this function is not provided, the command
! ;; `vc-rename-file' will signal an error.
;;; Code:
--- 407,424 ----
;; version control state in such a way that the headers would give
;; wrong information.
;;
+ ;; - delete-file (file)
+ ;;
+ ;; Delete FILE and mark it as deleted in the repository. If this
+ ;; function is not provided, the command `vc-delete-file' will
+ ;; signal an error.
+ ;;
;; - rename-file (old new)
;;
;; Rename file OLD to NEW, both in the working area and in the
! ;; repository. If this function is not provided, the renaming
! ;; will be done by (vc-delete-file old) and (vc-register new).
! ;;
;;; Code:
***************
*** 502,515 ****
:group 'vc
:version "20.3")
! (defcustom vc-directory-exclusion-list '("SCCS" "RCS" "CVS")
"*List of directory names to be ignored when walking directory trees."
:type '(repeat string)
:group 'vc)
- (defconst vc-maximum-comment-ring-size 32
- "Maximum number of saved comments in the comment ring.")
-
(defcustom vc-diff-switches nil
"*A string or list of strings specifying switches for diff under VC.
When running diff under a given BACKEND, VC concatenates the values of
--- 520,530 ----
:group 'vc
:version "20.3")
! (defcustom vc-directory-exclusion-list '("SCCS" "RCS" "CVS" "MCVS" ".svn")
"*List of directory names to be ignored when walking directory trees."
:type '(repeat string)
:group 'vc)
(defcustom vc-diff-switches nil
"*A string or list of strings specifying switches for diff under VC.
When running diff under a given BACKEND, VC concatenates the values of
***************
*** 545,553 ****
;;;###autoload
(defcustom vc-checkin-hook nil
"*Normal hook (list of functions) run after a checkin is done.
! See `run-hooks'."
:type 'hook
! :options '(vc-comment-to-change-log)
:group 'vc)
;;;###autoload
--- 560,568 ----
;;;###autoload
(defcustom vc-checkin-hook nil
"*Normal hook (list of functions) run after a checkin is done.
! See also `log-edit-done-hook'."
:type 'hook
! :options '(log-edit-comment-to-change-log)
:group 'vc)
;;;###autoload
***************
*** 655,676 ****
"21.1")
- ;; The main keymap
-
- ;; Initialization code, to be done just once at load-time
- (defvar vc-log-mode-map
- (let ((map (make-sparse-keymap)))
- (set-keymap-parent map text-mode-map)
- (define-key map "\M-n" 'vc-next-comment)
- (define-key map "\M-p" 'vc-previous-comment)
- (define-key map "\M-r" 'vc-comment-search-reverse)
- (define-key map "\M-s" 'vc-comment-search-forward)
- (define-key map "\C-c\C-c" 'vc-finish-logentry)
- map))
- ;; Compatibility with old name. Should we bother ?
- (defvar vc-log-entry-mode vc-log-mode-map)
-
-
;; Variables the user doesn't need to know about.
(defvar vc-log-operation nil)
(defvar vc-log-after-operation-hook nil)
--- 670,675 ----
***************
*** 691,700 ****
(defvar vc-dired-mode nil)
(make-variable-buffer-local 'vc-dired-mode)
- (defvar vc-comment-ring (make-ring vc-maximum-comment-ring-size))
- (defvar vc-comment-ring-index nil)
- (defvar vc-last-comment-match "")
-
;; functions that operate on RCS revision numbers. This code should
;; also be moved into the backends. It stays for now, however, since
;; it is used in code below.
--- 690,695 ----
***************
*** 739,756 ****
;; File property caching
(defun vc-clear-context ()
! "Clear all cached file properties and the comment ring."
(interactive)
! (fillarray vc-file-prop-obarray 0)
! ;; Note: there is potential for minor lossage here if there is an open
! ;; log buffer with a nonzero local value of vc-comment-ring-index.
! (setq vc-comment-ring (make-ring vc-maximum-comment-ring-size)))
(defmacro with-vc-properties (file form settings)
"Execute FORM, then maybe set per-file properties for FILE.
SETTINGS is an association list of property/value pairs. After
executing FORM, set those properties from SETTINGS that have not yet
been updated to their corresponding values."
`(let ((vc-touched-properties (list t)))
,form
(mapcar (lambda (setting)
--- 734,749 ----
;; File property caching
(defun vc-clear-context ()
! "Clear all cached file properties."
(interactive)
! (fillarray vc-file-prop-obarray 0))
(defmacro with-vc-properties (file form settings)
"Execute FORM, then maybe set per-file properties for FILE.
SETTINGS is an association list of property/value pairs. After
executing FORM, set those properties from SETTINGS that have not yet
been updated to their corresponding values."
+ (declare (debug t))
`(let ((vc-touched-properties (list t)))
,form
(mapcar (lambda (setting)
***************
*** 775,780 ****
--- 768,774 ----
FILE is passed through `expand-file-name'; BODY executed within
`save-excursion'. If FILE is not under version control, or locked by
somebody else, signal error."
+ (declare (debug t) (indent 2))
(let ((filevar (make-symbol "file")))
`(let ((,filevar (expand-file-name ,file)))
(or (vc-backend ,filevar)
***************
*** 788,801 ****
,@body)
(vc-checkin ,filevar nil ,comment))))
- (put 'with-vc-file 'lisp-indent-function 2)
-
;;;###autoload
(defmacro edit-vc-file (file comment &rest body)
"Edit FILE under version control, executing body.
Checkin with COMMENT after executing BODY.
This macro uses `with-vc-file', passing args to it.
However, before executing BODY, find FILE, and after BODY, save buffer."
(let ((filevar (make-symbol "file")))
`(let ((,filevar (expand-file-name ,file)))
(with-vc-file
--- 782,794 ----
,@body)
(vc-checkin ,filevar nil ,comment))))
;;;###autoload
(defmacro edit-vc-file (file comment &rest body)
"Edit FILE under version control, executing body.
Checkin with COMMENT after executing BODY.
This macro uses `with-vc-file', passing args to it.
However, before executing BODY, find FILE, and after BODY, save buffer."
+ (declare (debug t) (indent 2))
(let ((filevar (make-symbol "file")))
`(let ((,filevar (expand-file-name ,file)))
(with-vc-file
***************
*** 804,821 ****
,@body
(save-buffer)))))
- (put 'edit-vc-file 'lisp-indent-function 2)
-
(defun vc-ensure-vc-buffer ()
"Make sure that the current buffer visits a version-controlled file."
(if vc-dired-mode
(set-buffer (find-file-noselect (dired-get-filename)))
(while vc-parent-buffer
(pop-to-buffer vc-parent-buffer))
! (if (not (buffer-file-name))
(error "Buffer %s is not associated with a file" (buffer-name))
! (if (not (vc-backend (buffer-file-name)))
! (error "File %s is not under version control" (buffer-file-name))))))
(defun vc-process-filter (p s)
"An alternative output filter for async process P.
--- 797,812 ----
,@body
(save-buffer)))))
(defun vc-ensure-vc-buffer ()
"Make sure that the current buffer visits a version-controlled file."
(if vc-dired-mode
(set-buffer (find-file-noselect (dired-get-filename)))
(while vc-parent-buffer
(pop-to-buffer vc-parent-buffer))
! (if (not buffer-file-name)
(error "Buffer %s is not associated with a file" (buffer-name))
! (if (not (vc-backend buffer-file-name))
! (error "File %s is not under version control" buffer-file-name)))))
(defun vc-process-filter (p s)
"An alternative output filter for async process P.
***************
*** 874,879 ****
--- 865,871 ----
Each function is called inside the buffer in which the command was run
and is passed 3 arguments: the COMMAND, the FILE and the FLAGS.")
+ (defvar w32-quote-process-args)
;;;###autoload
(defun vc-do-command (buffer okstatus command file &rest flags)
"Execute a VC command, notifying user and checking for errors.
***************
*** 895,904 ****
(string= (buffer-name) buffer))
(eq buffer (current-buffer)))
(vc-setup-buffer buffer))
! (let ((squeezed nil)
(inhibit-read-only t)
(status 0))
- (setq squeezed (delq nil (copy-sequence flags)))
(when file
;; FIXME: file-relative-name can return a bogus result because
;; it doesn't look at the actual file-system to see if symlinks
--- 887,895 ----
(string= (buffer-name) buffer))
(eq buffer (current-buffer)))
(vc-setup-buffer buffer))
! (let ((squeezed (remq nil flags))
(inhibit-read-only t)
(status 0))
(when file
;; FIXME: file-relative-name can return a bogus result because
;; it doesn't look at the actual file-system to see if symlinks
***************
*** 986,1012 ****
(mark-active nil)
;; We may want to reparse the compilation buffer after revert
(reparse (and (boundp 'compilation-error-list) ;compile loaded
! (let ((curbuf (current-buffer)))
! ;; Construct a list; each elt is nil or a buffer
! ;; iff that buffer is a compilation output buffer
! ;; that contains markers into the current buffer.
! (save-excursion
! (mapcar (lambda (buffer)
! (set-buffer buffer)
! (let ((errors (or
! compilation-old-error-list
! compilation-error-list))
! (buffer-error-marked-p nil))
! (while (and (consp errors)
! (not buffer-error-marked-p))
! (and (markerp (cdr (car errors)))
! (eq buffer
! (marker-buffer
! (cdr (car errors))))
! (setq buffer-error-marked-p t))
! (setq errors (cdr errors)))
! (if buffer-error-marked-p buffer)))
! (buffer-list)))))))
(list point-context mark-context reparse)))
(defun vc-restore-buffer-context (context)
--- 977,1002 ----
(mark-active nil)
;; We may want to reparse the compilation buffer after revert
(reparse (and (boundp 'compilation-error-list) ;compile loaded
! ;; Construct a list; each elt is nil or a buffer
! ;; iff that buffer is a compilation output buffer
! ;; that contains markers into the current buffer.
! (save-current-buffer
! (mapcar (lambda (buffer)
! (set-buffer buffer)
! (let ((errors (or
! compilation-old-error-list
! compilation-error-list))
! (buffer-error-marked-p nil))
! (while (and (consp errors)
! (not buffer-error-marked-p))
! (and (markerp (cdr (car errors)))
! (eq buffer
! (marker-buffer
! (cdr (car errors))))
! (setq buffer-error-marked-p t))
! (setq errors (cdr errors)))
! (if buffer-error-marked-p buffer)))
! (buffer-list))))))
(list point-context mark-context reparse)))
(defun vc-restore-buffer-context (context)
***************
*** 1103,1109 ****
(find-file-noselect file nil find-file-literally))
(if (not (verify-visited-file-modtime (current-buffer)))
(if (yes-or-no-p "Replace file on disk with buffer contents? ")
! (write-file (buffer-file-name))
(error "Aborted"))
;; Now, check if we have unsaved changes.
(vc-buffer-sync t)
--- 1093,1099 ----
(find-file-noselect file nil find-file-literally))
(if (not (verify-visited-file-modtime (current-buffer)))
(if (yes-or-no-p "Replace file on disk with buffer contents? ")
! (write-file buffer-file-name)
(error "Aborted"))
;; Now, check if we have unsaved changes.
(vc-buffer-sync t)
***************
*** 1219,1225 ****
;; Must clear any headers here because they wouldn't
;; show that the file is locked now.
(vc-clear-headers file)
! (write-file (buffer-file-name))
(vc-mode-line file))
(if (not (yes-or-no-p
"Revert to checked-in version, instead? "))
--- 1209,1215 ----
;; Must clear any headers here because they wouldn't
;; show that the file is locked now.
(vc-clear-headers file)
! (write-file buffer-file-name)
(vc-mode-line file))
(if (not (yes-or-no-p
"Revert to checked-in version, instead? "))
***************
*** 1232,1239 ****
(defun vc-next-action-dired (file rev comment)
"Call `vc-next-action-on-file' on all the marked files.
Ignores FILE and REV, but passes on COMMENT."
! (let ((dired-buffer (current-buffer))
! (dired-dir default-directory))
(dired-map-over-marks
(let ((file (dired-get-filename)))
(message "Processing %s..." file)
--- 1222,1228 ----
(defun vc-next-action-dired (file rev comment)
"Call `vc-next-action-on-file' on all the marked files.
Ignores FILE and REV, but passes on COMMENT."
! (let ((dired-buffer (current-buffer)))
(dired-map-over-marks
(let ((file (dired-get-filename)))
(message "Processing %s..." file)
***************
*** 1574,1633 ****
(message "Checking in %s...done" file))
'vc-checkin-hook))
- (defun vc-comment-to-change-log (&optional whoami file-name)
- "Enter last VC comment into the change log for the current file.
- WHOAMI (interactive prefix) non-nil means prompt for user name
- and site. FILE-NAME is the name of the change log; if nil, use
- `change-log-default-name'.
-
- This may be useful as a `vc-checkin-hook' to update change logs
- automatically."
- (interactive (if current-prefix-arg
- (list current-prefix-arg
- (prompt-for-change-log-name))))
- ;; Make sure the defvar for add-log-current-defun-function has been executed
- ;; before binding it.
- (require 'add-log)
- (let (;; Extract the comment first so we get any error before doing
anything.
- (comment (ring-ref vc-comment-ring 0))
- ;; Don't let add-change-log-entry insert a defun name.
- (add-log-current-defun-function 'ignore)
- end)
- ;; Call add-log to do half the work.
- (add-change-log-entry whoami file-name t t)
- ;; Insert the VC comment, leaving point before it.
- (setq end (save-excursion (insert comment) (point-marker)))
- (if (looking-at "\\s *\\s(")
- ;; It starts with an open-paren, as in "(foo): Frobbed."
- ;; So remove the ": " add-log inserted.
- (delete-char -2))
- ;; Canonicalize the white space between the file name and comment.
- (just-one-space)
- ;; Indent rest of the text the same way add-log indented the first line.
- (let ((indentation (current-indentation)))
- (save-excursion
- (while (< (point) end)
- (forward-line 1)
- (indent-to indentation))
- (setq end (point))))
- ;; Fill the inserted text, preserving open-parens at bol.
- (let ((paragraph-separate (concat paragraph-separate "\\|\\s *\\s("))
- (paragraph-start (concat paragraph-start "\\|\\s *\\s(")))
- (beginning-of-line)
- (fill-region (point) end))
- ;; Canonicalize the white space at the end of the entry so it is
- ;; separated from the next entry by a single blank line.
- (skip-syntax-forward " " end)
- (delete-char (- (skip-syntax-backward " ")))
- (or (eobp) (looking-at "\n\n")
- (insert "\n"))))
-
(defun vc-finish-logentry (&optional nocomment)
"Complete the operation implied by the current log entry.
Use the contents of the current buffer as a check-in or registration
comment. If the optional arg NOCOMMENT is non-nil, then don't check
! the buffer contents as a comment, and don't add it to
! `vc-comment-ring'."
(interactive)
;; Check and record the comment, if any.
(unless nocomment
--- 1563,1573 ----
(message "Checking in %s...done" file))
'vc-checkin-hook))
(defun vc-finish-logentry (&optional nocomment)
"Complete the operation implied by the current log entry.
Use the contents of the current buffer as a check-in or registration
comment. If the optional arg NOCOMMENT is non-nil, then don't check
! the buffer contents as a comment."
(interactive)
;; Check and record the comment, if any.
(unless nocomment
***************
*** 1635,1647 ****
(vc-call-backend (or (and vc-log-file (vc-backend vc-log-file))
(vc-responsible-backend default-directory))
'logentry-check)
! (run-hooks 'vc-logentry-check-hook)
! ;; Record the comment in the comment ring
! (let ((comment (buffer-string)))
! (unless (and (ring-p vc-comment-ring)
! (not (ring-empty-p vc-comment-ring))
! (equal comment (ring-ref vc-comment-ring 0)))
! (ring-insert vc-comment-ring comment))))
;; Sync parent buffer in case the user modified it while editing the
comment.
;; But not if it is a vc-dired buffer.
(with-current-buffer vc-parent-buffer
--- 1575,1581 ----
(vc-call-backend (or (and vc-log-file (vc-backend vc-log-file))
(vc-responsible-backend default-directory))
'logentry-check)
! (run-hooks 'vc-logentry-check-hook))
;; Sync parent buffer in case the user modified it while editing the
comment.
;; But not if it is a vc-dired buffer.
(with-current-buffer vc-parent-buffer
***************
*** 1680,1741 ****
;; Code for access to the comment ring
- (defun vc-new-comment-index (stride len)
- "Return the comment index STRIDE elements from the current one.
- LEN is the length of `vc-comment-ring'."
- (mod (cond
- (vc-comment-ring-index (+ vc-comment-ring-index stride))
- ;; Initialize the index on the first use of this command
- ;; so that the first M-p gets index 0, and the first M-n gets
- ;; index -1.
- ((> stride 0) (1- stride))
- (t stride))
- len))
-
- (defun vc-previous-comment (arg)
- "Cycle backwards through comment history.
- With a numeric prefix ARG, go back ARG comments."
- (interactive "*p")
- (let ((len (ring-length vc-comment-ring)))
- (if (<= len 0)
- (progn (message "Empty comment ring") (ding))
- (erase-buffer)
- (setq vc-comment-ring-index (vc-new-comment-index arg len))
- (message "Comment %d" (1+ vc-comment-ring-index))
- (insert (ring-ref vc-comment-ring vc-comment-ring-index)))))
-
- (defun vc-next-comment (arg)
- "Cycle forwards through comment history.
- With a numeric prefix ARG, go forward ARG comments."
- (interactive "*p")
- (vc-previous-comment (- arg)))
-
- (defun vc-comment-search-reverse (str &optional stride)
- "Search backwards through comment history for substring match of STR.
- If the optional argument STRIDE is present, that is a step-width to use
- when going through the comment ring."
- ;; Why substring rather than regexp ? -sm
- (interactive
- (list (read-string "Comment substring: " nil nil vc-last-comment-match)))
- (unless stride (setq stride 1))
- (if (string= str "")
- (setq str vc-last-comment-match)
- (setq vc-last-comment-match str))
- (let* ((str (regexp-quote str))
- (len (ring-length vc-comment-ring))
- (n (vc-new-comment-index stride len)))
- (while (progn (when (or (>= n len) (< n 0)) (error "Not found"))
- (not (string-match str (ring-ref vc-comment-ring n))))
- (setq n (+ n stride)))
- (setq vc-comment-ring-index n)
- (vc-previous-comment 0)))
-
- (defun vc-comment-search-forward (str)
- "Search forwards through comment history for a substring match of STR."
- (interactive
- (list (read-string "Comment substring: " nil nil vc-last-comment-match)))
- (vc-comment-search-reverse str -1))
-
;; Additional entry points for examining version histories
;;;###autoload
--- 1614,1619 ----
***************
*** 1855,1883 ****
(coding-system-for-read (vc-coding-system-for-diff file)))
(if (and file-rel1 file-rel2)
(apply 'vc-do-command "*vc-diff*" 1 "diff" nil
! (append (if (listp diff-switches)
! diff-switches
! (list diff-switches))
! (if (listp vc-diff-switches)
! vc-diff-switches
! (list vc-diff-switches))
! (list (file-relative-name file-rel1)
! (file-relative-name file-rel2))))
(vc-call diff file rel1 rel2))))
! (defmacro vc-diff-switches-list (backend)
! "Return the list of switches to use for executing diff under BACKEND."
! `(append
! (if (listp diff-switches) diff-switches (list diff-switches))
! (if (listp vc-diff-switches) vc-diff-switches (list vc-diff-switches))
! (let* ((backend-switches-symbol
! (intern (concat "vc-" (downcase (symbol-name ,backend))
! "-diff-switches")))
! (backend-switches
! (if (boundp backend-switches-symbol)
! (eval backend-switches-symbol)
! nil)))
! (if (listp backend-switches) backend-switches (list
backend-switches)))))
(defun vc-default-diff-tree (backend dir rel1 rel2)
"List differences for all registered files at and below DIR.
--- 1733,1764 ----
(coding-system-for-read (vc-coding-system-for-diff file)))
(if (and file-rel1 file-rel2)
(apply 'vc-do-command "*vc-diff*" 1 "diff" nil
! (append (vc-switches nil 'diff)
! (list (file-relative-name file-rel1)
! (file-relative-name file-rel2))))
(vc-call diff file rel1 rel2))))
!
! (defun vc-switches (backend op)
! (let ((switches
! (or (if backend
! (let ((sym (vc-make-backend-sym
! backend (intern (concat (symbol-name op)
! "-switches")))))
! (if (boundp sym) (symbol-value sym))))
! (let ((sym (intern (format "vc-%s-switches" (symbol-name op)))))
! (if (boundp sym) (symbol-value sym)))
! (cond
! ((eq op 'diff) diff-switches)))))
! (if (stringp switches) (list switches)
! ;; If not a list, return nil.
! ;; This is so we can set vc-diff-switches to t to override
! ;; any switches in diff-switches.
! (if (listp switches) switches))))
!
! ;; Old def for compatibility with Emacs-21.[123].
! (defmacro vc-diff-switches-list (backend) `(vc-switches ',backend 'diff))
! (make-obsolete 'vc-diff-switches-list 'vc-switches "21.4")
(defun vc-default-diff-tree (backend dir rel1 rel2)
"List differences for all registered files at and below DIR.
***************
*** 1981,1987 ****
(let* ((delims (cdr (assq major-mode vc-comment-alist)))
(comment-start-vc (or (car delims) comment-start "#"))
(comment-end-vc (or (car (cdr delims)) comment-end ""))
! (hdsym (vc-make-backend-sym (vc-backend (buffer-file-name))
'header))
(hdstrings (and (boundp hdsym) (symbol-value hdsym))))
(mapcar (lambda (s)
--- 1862,1868 ----
(let* ((delims (cdr (assq major-mode vc-comment-alist)))
(comment-start-vc (or (car delims) comment-start "#"))
(comment-end-vc (or (car (cdr delims)) comment-end ""))
! (hdsym (vc-make-backend-sym (vc-backend buffer-file-name)
'header))
(hdstrings (and (boundp hdsym) (symbol-value hdsym))))
(mapcar (lambda (s)
***************
*** 2192,2198 ****
"Reformat the listing according to version control.
Called by dired after any portion of a vc-dired buffer has been read in."
(message "Getting version information... ")
! (let (subdir filename (buffer-read-only nil) cvs-dir)
(goto-char (point-min))
(while (not (eobp))
(cond
--- 2073,2079 ----
"Reformat the listing according to version control.
Called by dired after any portion of a vc-dired buffer has been read in."
(message "Getting version information... ")
! (let (subdir filename (buffer-read-only nil))
(goto-char (point-min))
(while (not (eobp))
(cond
***************
*** 2251,2273 ****
(defun vc-dired-purge ()
"Remove empty subdirs."
! (let (subdir)
! (goto-char (point-min))
! (while (setq subdir (dired-get-subdir))
! (forward-line 2)
! (if (dired-get-filename nil t)
! (if (not (dired-next-subdir 1 t))
! (goto-char (point-max)))
! (forward-line -2)
! (if (not (string= (dired-current-directory) default-directory))
! (dired-do-kill-lines t "")
! ;; We cannot remove the top level directory.
! ;; Just make it look a little nicer.
! (forward-line 1)
! (kill-line)
! (if (not (dired-next-subdir 1 t))
! (goto-char (point-max))))))
! (goto-char (point-min))))
(defun vc-dired-buffers-for-dir (dir)
"Return a list of all vc-dired buffers that currently display DIR."
--- 2132,2153 ----
(defun vc-dired-purge ()
"Remove empty subdirs."
! (goto-char (point-min))
! (while (dired-get-subdir)
! (forward-line 2)
! (if (dired-get-filename nil t)
! (if (not (dired-next-subdir 1 t))
! (goto-char (point-max)))
! (forward-line -2)
! (if (not (string= (dired-current-directory) default-directory))
! (dired-do-kill-lines t "")
! ;; We cannot remove the top level directory.
! ;; Just make it look a little nicer.
! (forward-line 1)
! (kill-line)
! (if (not (dired-next-subdir 1 t))
! (goto-char (point-max))))))
! (goto-char (point-min)))
(defun vc-dired-buffers-for-dir (dir)
"Return a list of all vc-dired buffers that currently display DIR."
***************
*** 2388,2397 ****
(vc-file-tree-walk
dir
(lambda (f) (and
! (vc-up-to-date-p f)
! (vc-error-occurred
! (vc-call checkout f nil "")
! (if update (vc-resynch-buffer f t t)))))))
(let ((result (vc-snapshot-precondition dir)))
(if (stringp result)
(error "File %s is locked" result)
--- 2268,2277 ----
(vc-file-tree-walk
dir
(lambda (f) (and
! (vc-up-to-date-p f)
! (vc-error-occurred
! (vc-call checkout f nil "")
! (if update (vc-resynch-buffer f t t)))))))
(let ((result (vc-snapshot-precondition dir)))
(if (stringp result)
(error "File %s is locked" result)
***************
*** 2399,2406 ****
(vc-file-tree-walk
dir
(lambda (f) (vc-error-occurred
! (vc-call checkout f nil name)
! (if update (vc-resynch-buffer f t t)))))))))
;; Miscellaneous other entry points
--- 2279,2286 ----
(vc-file-tree-walk
dir
(lambda (f) (vc-error-occurred
! (vc-call checkout f nil name)
! (if update (vc-resynch-buffer f t t)))))))))
;; Miscellaneous other entry points
***************
*** 2431,2437 ****
(set-buffer-modified-p nil)))))
(defun vc-default-show-log-entry (backend rev)
! (log-view-goto-rev rev))
(defun vc-default-comment-history (backend file)
"Return a string with all log entries stored in BACKEND for FILE."
--- 2311,2318 ----
(set-buffer-modified-p nil)))))
(defun vc-default-show-log-entry (backend rev)
! (with-no-warnings
! (log-view-goto-rev rev)))
(defun vc-default-comment-history (backend file)
"Return a string with all log entries stored in BACKEND for FILE."
***************
*** 2563,2572 ****
A prefix argument NOREVERT means do not revert the buffer afterwards."
(interactive "P")
(vc-ensure-vc-buffer)
! (let* ((file (buffer-file-name))
(backend (vc-backend file))
! (target (vc-workfile-version file))
! (config (current-window-configuration)) done)
(cond
((not (vc-find-backend-function backend 'cancel-version))
(error "Sorry, canceling versions is not supported under %s" backend))
--- 2444,2452 ----
A prefix argument NOREVERT means do not revert the buffer afterwards."
(interactive "P")
(vc-ensure-vc-buffer)
! (let* ((file buffer-file-name)
(backend (vc-backend file))
! (target (vc-workfile-version file)))
(cond
((not (vc-find-backend-function backend 'cancel-version))
(error "Sorry, canceling versions is not supported under %s" backend))
***************
*** 2681,2687 ****
;; here and not in vc-revert-file because we don't want to
;; delete that copy -- it is still useful for OLD-BACKEND.
(if unmodified-file
! (copy-file unmodified-file file 'ok-if-already-exists)
(if (y-or-n-p "Get base version from master? ")
(vc-revert-file file))))
(vc-call-backend new-backend 'receive-file file rev))
--- 2561,2568 ----
;; here and not in vc-revert-file because we don't want to
;; delete that copy -- it is still useful for OLD-BACKEND.
(if unmodified-file
! (copy-file unmodified-file file
! 'ok-if-already-exists 'keep-date)
(if (y-or-n-p "Get base version from master? ")
(vc-revert-file file))))
(vc-call-backend new-backend 'receive-file file rev))
***************
*** 2726,2766 ****
oldmaster
(catch 'found
;; If possible, keep the master file in the same directory.
! (mapcar (lambda (f)
! (if (and f (string= (file-name-directory (expand-file-name f))
! dir))
! (throw 'found f)))
! masters)
;; If not, just use the first possible place.
! (mapcar (lambda (f)
! (and f
! (or (not (setq dir (file-name-directory f)))
! (file-directory-p dir))
! (throw 'found f)))
! masters)
(error "New file lacks a version control directory")))))
;;;###autoload
(defun vc-rename-file (old new)
"Rename file OLD to NEW, and rename its master file likewise."
(interactive "fVC rename file: \nFRename to: ")
! (let ((oldbuf (get-file-buffer old))
! (backend (vc-backend old)))
! (unless (or (null backend) (vc-find-backend-function backend
'rename-file))
! (error "Renaming files under %s is not supported in VC" backend))
(if (and oldbuf (buffer-modified-p oldbuf))
(error "Please save files before moving them"))
(if (get-file-buffer new)
(error "Already editing new file name"))
(if (file-exists-p new)
(error "New file already exists"))
! (when backend
! (if (and backend (not (vc-up-to-date-p old)))
! (error "Please check in files before moving them"))
! (vc-call-backend backend 'rename-file old new))
;; Move the actual file (unless the backend did it already)
! (if (or (not backend) (file-exists-p old))
! (rename-file old new))
;; ?? Renaming a file might change its contents due to keyword expansion.
;; We should really check out a new copy if the old copy was precisely
equal
;; to some checked in version. However, testing for this is tricky....
--- 2607,2672 ----
oldmaster
(catch 'found
;; If possible, keep the master file in the same directory.
! (dolist (f masters)
! (if (and f (string= (file-name-directory (expand-file-name f)) dir))
! (throw 'found f)))
;; If not, just use the first possible place.
! (dolist (f masters)
! (and f (or (not (setq dir (file-name-directory f)))
! (file-directory-p dir))
! (throw 'found f)))
(error "New file lacks a version control directory")))))
+ (defun vc-delete-file (file)
+ "Delete file and mark it as such in the version control system."
+ (interactive "fVC delete file: ")
+ (let ((buf (get-file-buffer file))
+ (backend (vc-backend file)))
+ (unless backend
+ (error "File %s is not under version control"
+ (file-name-nondirectory file)))
+ (unless (vc-find-backend-function backend 'delete-file)
+ (error "Deleting files under %s is not supported in VC" backend))
+ (if (and buf (buffer-modified-p buf))
+ (error "Please save files before deleting them"))
+ (unless (y-or-n-p (format "Really want to delete %s ? "
+ (file-name-nondirectory file)))
+ (error "Abort!"))
+ (unless (or (file-directory-p file) (null make-backup-files))
+ (with-current-buffer (or buf (find-file-noselect file))
+ (let ((backup-inhibited nil))
+ (backup-buffer))))
+ (vc-call delete-file file)
+ ;; If the backend hasn't deleted the file itself, let's do it for him.
+ (if (file-exists-p file) (delete-file file))))
+
+ (defun vc-default-rename-file (backend old new)
+ (condition-case nil
+ (add-name-to-file old new)
+ (error (rename-file old new)))
+ (vc-delete-file old)
+ (with-current-buffer (find-file-noselect new)
+ (vc-register)))
+
;;;###autoload
(defun vc-rename-file (old new)
"Rename file OLD to NEW, and rename its master file likewise."
(interactive "fVC rename file: \nFRename to: ")
! (let ((oldbuf (get-file-buffer old)))
(if (and oldbuf (buffer-modified-p oldbuf))
(error "Please save files before moving them"))
(if (get-file-buffer new)
(error "Already editing new file name"))
(if (file-exists-p new)
(error "New file already exists"))
! (let ((state (vc-state old)))
! (unless (memq state '(up-to-date edited))
! (error "Please %s files before moving them"
! (if (stringp state) "check in" "update"))))
! (vc-call rename-file old new)
! (vc-file-clearprops old)
;; Move the actual file (unless the backend did it already)
! (if (file-exists-p old) (rename-file old new))
;; ?? Renaming a file might change its contents due to keyword expansion.
;; We should really check out a new copy if the old copy was precisely
equal
;; to some checked in version. However, testing for this is tricky....
***************
*** 3045,3051 ****
(vc-ensure-vc-buffer)
(let* ((temp-buffer-name (concat "*Annotate " (buffer-name) "*"))
(temp-buffer-show-function 'vc-annotate-display-select)
! (rev (vc-workfile-version (buffer-file-name)))
(vc-annotate-version
(if prefix (read-string
(format "Annotate from version: (default %s) " rev)
--- 2951,2957 ----
(vc-ensure-vc-buffer)
(let* ((temp-buffer-name (concat "*Annotate " (buffer-name) "*"))
(temp-buffer-show-function 'vc-annotate-display-select)
! (rev (vc-workfile-version buffer-file-name))
(vc-annotate-version
(if prefix (read-string
(format "Annotate from version: (default %s) " rev)
***************
*** 3056,3069 ****
(float (string-to-number
(read-string "Annotate span days: (default 20) "
nil nil "20")))))
! (setq vc-annotate-backend (vc-backend (buffer-file-name)))
(message "Annotating...")
(if (not (vc-find-backend-function vc-annotate-backend 'annotate-command))
(error "Sorry, annotating is not implemented for %s"
vc-annotate-backend))
(with-output-to-temp-buffer temp-buffer-name
(vc-call-backend vc-annotate-backend 'annotate-command
! (file-name-nondirectory (buffer-file-name))
(get-buffer temp-buffer-name)
vc-annotate-version))
;; Don't use the temp-buffer-name until the buffer is created
--- 2962,2975 ----
(float (string-to-number
(read-string "Annotate span days: (default 20) "
nil nil "20")))))
! (setq vc-annotate-backend (vc-backend buffer-file-name))
(message "Annotating...")
(if (not (vc-find-backend-function vc-annotate-backend 'annotate-command))
(error "Sorry, annotating is not implemented for %s"
vc-annotate-backend))
(with-output-to-temp-buffer temp-buffer-name
(vc-call-backend vc-annotate-backend 'annotate-command
! buffer-file-name
(get-buffer temp-buffer-name)
vc-annotate-version))
;; Don't use the temp-buffer-name until the buffer is created
***************
*** 3123,3128 ****
--- 3029,3036 ----
"Return the current time, encoded as fractional days."
(vc-annotate-convert-time (current-time)))
+ (defvar vc-annotate-offset nil)
+
(defun vc-annotate-display (&optional color-map offset)
"Highlight `vc-annotate' output in the current buffer.
COLOR-MAP, if present, overrides `vc-annotate-color-map'.
***************
*** 3131,3139 ****
(set (make-local-variable 'vc-annotate-color-map) color-map))
(set (make-local-variable 'vc-annotate-offset) offset)
(font-lock-mode 1))
- (make-obsolete 'vc-annotate-display 'vc-annotate-display-select "21.4")
-
- (defvar vc-annotate-offset nil)
(defun vc-annotate-lines (limit)
(let (difference)
--- 3039,3044 ----
***************
*** 3151,3158 ****
(set-face-background tmp-face
vc-annotate-background))
tmp-face))) ; Return the face
! (point (point))
! overlay)
(forward-line 1)
(put-text-property point (point) 'face face)))
;; Pretend to font-lock there were no matches.
--- 3056,3062 ----
(set-face-background tmp-face
vc-annotate-background))
tmp-face))) ; Return the face
! (point (point)))
(forward-line 1)
(put-text-property point (point) 'face face)))
;; Pretend to font-lock there were no matches.
***************
*** 3563,3566 ****
--- 3467,3471 ----
;;
;; Thus, there is no explicit recovery code.
+ ;;; arch-tag: ca82c1de-3091-4e26-af92-460abc6213a6
;;; vc.el ends here
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] Changes to emacs/lisp/vc.el [lexbind],
Miles Bader <=