annotate lisp/vc-hooks.el @ 94692:891cb8f8888f

More decoupling of vc-dispatcher.el from vc.el.
author Eric S. Raymond <esr@snark.thyrsus.com>
date Tue, 06 May 2008 16:00:54 +0000
parents ee5932bf781d
children 7e7ef774315b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2232
4f9d60f7de9d Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2227
diff changeset
1 ;;; vc-hooks.el --- resident support for version-control
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2
74442
b2e5081b9320 Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 73351
diff changeset
3 ;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
79721
73661ddc7ac7 Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78822
diff changeset
4 ;; 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
5
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
6 ;; Author: FSF (see vc.el for full credits)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
7 ;; Maintainer: Andre Spiegel <spiegel@gnu.org>
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
8
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
10
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94563
diff changeset
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94563
diff changeset
13 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94563
diff changeset
14 ;; (at your option) any later version.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
15
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
19 ;; GNU General Public License for more details.
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
20
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94563
diff changeset
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
23
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
24 ;;; Commentary:
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
25
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
26 ;; This is the always-loaded portion of VC. It takes care of
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
27 ;; VC-related activities that are done when you visit a file, so that
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
28 ;; vc.el itself is loaded only when you use a VC command. See the
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
29 ;; commentary of vc.el.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
30
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
31 ;;; Code:
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
32
33856
6f1ab7313eb7 Require 'cl during compilation.
André Spiegel <spiegel@gnu.org>
parents: 33634
diff changeset
33 (eval-when-compile
6f1ab7313eb7 Require 'cl during compilation.
André Spiegel <spiegel@gnu.org>
parents: 33634
diff changeset
34 (require 'cl))
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31382
diff changeset
35
11604
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
36 ;; Customization Variables (the rest is in vc.el)
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
37
49620
c1b2182d8ca1 (vc-ignore-vc-files, vc-master-templates, vc-header-alist): Add obsolescence
Juanma Barranquero <lekktu@gmail.com>
parents: 47918
diff changeset
38 (defvar vc-ignore-vc-files nil)
52300
2672198e6a12 (vc-ignore-vc-files, vc-master-templates): Better explain obsolescence, and
André Spiegel <spiegel@gnu.org>
parents: 52055
diff changeset
39 (make-obsolete-variable 'vc-ignore-vc-files
94150
d03fe9cb1cf4 (vc-ignore-vc-files, vc-master-templates, vc-header-alist):
Juanma Barranquero <lekktu@gmail.com>
parents: 94106
diff changeset
40 "set `vc-handled-backends' to nil to disable VC."
d03fe9cb1cf4 (vc-ignore-vc-files, vc-master-templates, vc-header-alist):
Juanma Barranquero <lekktu@gmail.com>
parents: 94106
diff changeset
41 "21.1")
52300
2672198e6a12 (vc-ignore-vc-files, vc-master-templates): Better explain obsolescence, and
André Spiegel <spiegel@gnu.org>
parents: 52055
diff changeset
42
49620
c1b2182d8ca1 (vc-ignore-vc-files, vc-master-templates, vc-header-alist): Add obsolescence
Juanma Barranquero <lekktu@gmail.com>
parents: 47918
diff changeset
43 (defvar vc-master-templates ())
55099
a856350e29d5 (vc-default-workfile-unchanged-p): Fix code that handles
Juanma Barranquero <lekktu@gmail.com>
parents: 54912
diff changeset
44 (make-obsolete-variable 'vc-master-templates
a856350e29d5 (vc-default-workfile-unchanged-p): Fix code that handles
Juanma Barranquero <lekktu@gmail.com>
parents: 54912
diff changeset
45 "to define master templates for a given BACKEND, use
52300
2672198e6a12 (vc-ignore-vc-files, vc-master-templates): Better explain obsolescence, and
André Spiegel <spiegel@gnu.org>
parents: 52055
diff changeset
46 vc-BACKEND-master-templates. To enable or disable VC for a given
94150
d03fe9cb1cf4 (vc-ignore-vc-files, vc-master-templates, vc-header-alist):
Juanma Barranquero <lekktu@gmail.com>
parents: 94106
diff changeset
47 BACKEND, use `vc-handled-backends'."
d03fe9cb1cf4 (vc-ignore-vc-files, vc-master-templates, vc-header-alist):
Juanma Barranquero <lekktu@gmail.com>
parents: 94106
diff changeset
48 "21.1")
52300
2672198e6a12 (vc-ignore-vc-files, vc-master-templates): Better explain obsolescence, and
André Spiegel <spiegel@gnu.org>
parents: 52055
diff changeset
49
49620
c1b2182d8ca1 (vc-ignore-vc-files, vc-master-templates, vc-header-alist): Add obsolescence
Juanma Barranquero <lekktu@gmail.com>
parents: 47918
diff changeset
50 (defvar vc-header-alist ())
94150
d03fe9cb1cf4 (vc-ignore-vc-files, vc-master-templates, vc-header-alist):
Juanma Barranquero <lekktu@gmail.com>
parents: 94106
diff changeset
51 (make-obsolete-variable 'vc-header-alist 'vc-BACKEND-header "21.1")
11604
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
52
77591
ec47afd2d1db (vc-ignore-dir-regexp): Add /.../ for the DFS filesystem.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
53 (defcustom vc-ignore-dir-regexp
ec47afd2d1db (vc-ignore-dir-regexp): Add /.../ for the DFS filesystem.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
54 ;; Stop SMB, automounter, AFS, and DFS host lookups.
ec47afd2d1db (vc-ignore-dir-regexp): Add /.../ for the DFS filesystem.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75347
diff changeset
55 "\\`\\(?:[\\/][\\/]\\|/\\(?:net\\|afs\\|\\.\\\.\\.\\)/\\)\\'"
73351
29547db9ad61 (vc-ignore-dir-regexp): Make it into a defcustom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68651
diff changeset
56 "Regexp matching directory names that are not under VC's control.
57079
6f014cde9d81 (vc-ignore-dir-regexp): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55099
diff changeset
57 The default regexp prevents fruitless and time-consuming attempts
6f014cde9d81 (vc-ignore-dir-regexp): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55099
diff changeset
58 to determine the VC status in directories in which filenames are
73351
29547db9ad61 (vc-ignore-dir-regexp): Make it into a defcustom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68651
diff changeset
59 interpreted as hostnames."
29547db9ad61 (vc-ignore-dir-regexp): Make it into a defcustom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68651
diff changeset
60 :type 'regexp
29547db9ad61 (vc-ignore-dir-regexp): Make it into a defcustom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68651
diff changeset
61 :group 'vc)
57079
6f014cde9d81 (vc-ignore-dir-regexp): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55099
diff changeset
62
78792
76d9105e1528 (vc-handled-backends): Add Mtn.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78791
diff changeset
63 (defcustom vc-handled-backends '(RCS CVS SVN SCCS Bzr Git Hg Mtn Arch MCVS)
78791
60dfb3143910 Add vc-mtn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78520
diff changeset
64 ;; RCS, CVS, SVN and SCCS come first because they are per-dir
60dfb3143910 Add vc-mtn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78520
diff changeset
65 ;; rather than per-tree. RCS comes first because of the multibackend
60dfb3143910 Add vc-mtn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78520
diff changeset
66 ;; support intended to use RCS for local commits (with a remote CVS server).
60dfb3143910 Add vc-mtn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78520
diff changeset
67 "List of version control backends for which VC will be used.
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
68 Entries in this list will be tried in order to determine whether a
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
69 file is under that sort of version control.
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
70 Removing an entry from the list prevents VC from being activated
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
71 when visiting a file managed by that backend.
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
72 An empty list disables VC altogether."
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
73 :type '(repeat symbol)
81902
184879170b16 (vc-handled-backends): Move BZR later in the list.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 81835
diff changeset
74 :version "23.1"
20413
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
75 :group 'vc)
13378
96ff45331eb4 (vc-utc-string): Use timezone of TIMEVAL for the correction, not the
André Spiegel <spiegel@gnu.org>
parents: 13034
diff changeset
76
87523
fe5c2c0f8dcf * progmodes/grep.el (grep-find-ignored-directories): Initialize
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87477
diff changeset
77 ;; Note: we don't actually have a darcs back end yet.
91584
c72722ab4a01 (vc-prefix-map): Bind `vc-status' to "?".
Sam Steingold <sds@gnu.org>
parents: 87649
diff changeset
78 (defcustom vc-directory-exclusion-list '("SCCS" "RCS" "CVS" "MCVS"
c72722ab4a01 (vc-prefix-map): Bind `vc-status' to "?".
Sam Steingold <sds@gnu.org>
parents: 87649
diff changeset
79 ".svn" ".git" ".hg" ".bzr"
87523
fe5c2c0f8dcf * progmodes/grep.el (grep-find-ignored-directories): Initialize
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87477
diff changeset
80 "_MTN" "_darcs" "{arch}")
87446
168445c0b213 * vc-hooks.el, vc.el: Move vc-directory-exclusion-list from vc.el
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87445
diff changeset
81 "List of directory names to be ignored when walking directory trees."
168445c0b213 * vc-hooks.el, vc.el: Move vc-directory-exclusion-list from vc.el
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87445
diff changeset
82 :type '(repeat string)
20413
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
83 :group 'vc)
13378
96ff45331eb4 (vc-utc-string): Use timezone of TIMEVAL for the correction, not the
André Spiegel <spiegel@gnu.org>
parents: 13034
diff changeset
84
94190
fad57210c7d2 * lisp/vc-sccs.el (vc-sccs-do-command): New fun. Use the "sccs" command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94150
diff changeset
85 (defcustom vc-path nil
81835
a4222c1c9c2d Remove spurious * in docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81834
diff changeset
86 "List of extra directories to search for version control commands."
20413
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
87 :type '(repeat directory)
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
88 :group 'vc)
11604
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
89
20413
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
90 (defcustom vc-make-backup-files nil
81835
a4222c1c9c2d Remove spurious * in docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81834
diff changeset
91 "If non-nil, backups of registered files are made as with other files.
20413
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
92 If nil (the default), files covered by version control don't get backups."
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
93 :type 'boolean
51480
3da903950521 (vc-make-backup-files): Add :group backup.
Dave Love <fx@gnu.org>
parents: 51370
diff changeset
94 :group 'vc
3da903950521 (vc-make-backup-files): Add :group backup.
Dave Love <fx@gnu.org>
parents: 51370
diff changeset
95 :group 'backup)
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
96
20413
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
97 (defcustom vc-follow-symlinks 'ask
81835
a4222c1c9c2d Remove spurious * in docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81834
diff changeset
98 "What to do if visiting a symbolic link to a file under version control.
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
99 Editing such a file through the link bypasses the version control system,
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
100 which is dangerous and probably not what you want.
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
101
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
102 If this variable is t, VC follows the link and visits the real file,
14142
c9cb9dbb2d40 (vc-follow-symlinks): New variable.
André Spiegel <spiegel@gnu.org>
parents: 14040
diff changeset
103 telling you about it in the echo area. If it is `ask', VC asks for
c9cb9dbb2d40 (vc-follow-symlinks): New variable.
André Spiegel <spiegel@gnu.org>
parents: 14040
diff changeset
104 confirmation whether it should follow the link. If nil, the link is
20413
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
105 visited and a warning displayed."
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
106 :type '(choice (const :tag "Ask for confirmation" ask)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
107 (const :tag "Visit link and warn" nil)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
108 (const :tag "Follow link" t))
20413
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
109 :group 'vc)
14142
c9cb9dbb2d40 (vc-follow-symlinks): New variable.
André Spiegel <spiegel@gnu.org>
parents: 14040
diff changeset
110
20413
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
111 (defcustom vc-display-status t
81835
a4222c1c9c2d Remove spurious * in docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81834
diff changeset
112 "If non-nil, display revision number and lock status in modeline.
20413
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
113 Otherwise, not displayed."
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
114 :type 'boolean
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
115 :group 'vc)
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
116
3900
c6f3d2af0df7 (vc-rcs-status): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 3459
diff changeset
117
20413
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
118 (defcustom vc-consult-headers t
81835
a4222c1c9c2d Remove spurious * in docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81834
diff changeset
119 "If non-nil, identify work files by searching for version headers."
20413
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
120 :type 'boolean
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
121 :group 'vc)
11604
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
122
20413
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
123 (defcustom vc-keep-workfiles t
81835
a4222c1c9c2d Remove spurious * in docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81834
diff changeset
124 "If non-nil, don't delete working files after registering changes.
11604
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
125 If the back-end is CVS, workfiles are always kept, regardless of the
20413
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
126 value of this flag."
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
127 :type 'boolean
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
128 :group 'vc)
11604
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
129
20413
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
130 (defcustom vc-mistrust-permissions nil
81835
a4222c1c9c2d Remove spurious * in docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81834
diff changeset
131 "If non-nil, don't assume permissions/ownership track version-control status.
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
132 If nil, do rely on the permissions.
20413
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
133 See also variable `vc-consult-headers'."
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
134 :type 'boolean
7d1e9fc47f9d Customized.
Karl Heuer <kwzh@gnu.org>
parents: 20008
diff changeset
135 :group 'vc)
12914
22f47b2375c1 (vc-fetch-master-properties): RCS case: get locking mode.
André Spiegel <spiegel@gnu.org>
parents: 12884
diff changeset
136
22f47b2375c1 (vc-fetch-master-properties): RCS case: get locking mode.
André Spiegel <spiegel@gnu.org>
parents: 12884
diff changeset
137 (defun vc-mistrust-permissions (file)
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
138 "Internal access function to variable `vc-mistrust-permissions' for FILE."
12914
22f47b2375c1 (vc-fetch-master-properties): RCS case: get locking mode.
André Spiegel <spiegel@gnu.org>
parents: 12884
diff changeset
139 (or (eq vc-mistrust-permissions 't)
22f47b2375c1 (vc-fetch-master-properties): RCS case: get locking mode.
André Spiegel <spiegel@gnu.org>
parents: 12884
diff changeset
140 (and vc-mistrust-permissions
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
141 (funcall vc-mistrust-permissions
12914
22f47b2375c1 (vc-fetch-master-properties): RCS case: get locking mode.
André Spiegel <spiegel@gnu.org>
parents: 12884
diff changeset
142 (vc-backend-subdirectory-name file)))))
22f47b2375c1 (vc-fetch-master-properties): RCS case: get locking mode.
André Spiegel <spiegel@gnu.org>
parents: 12884
diff changeset
143
51761
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
144 (defcustom vc-stay-local t
81835
a4222c1c9c2d Remove spurious * in docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81834
diff changeset
145 "Non-nil means use local operations when possible for remote repositories.
51761
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
146 This avoids slow queries over the network and instead uses heuristics
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
147 and past information to determine the current status of a file.
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
148
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
149 The value can also be a regular expression or list of regular
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
150 expressions to match against the host name of a repository; then VC
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
151 only stays local for hosts that match it. Alternatively, the value
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
152 can be a list of regular expressions where the first element is the
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
153 symbol `except'; then VC always stays local except for hosts matched
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
154 by these regular expressions."
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
155 :type '(choice (const :tag "Always stay local" t)
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
156 (const :tag "Don't stay local" nil)
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
157 (list :format "\nExamine hostname and %v" :tag "Examine hostname ..."
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
158 (set :format "%v" :inline t (const :format "%t" :tag "don't" except))
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
159 (regexp :format " stay local,\n%t: %v" :tag "if it matches")
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
160 (repeat :format "%v%i\n" :inline t (regexp :tag "or"))))
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59978
diff changeset
161 :version "22.1"
51761
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
162 :group 'vc)
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
163
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
164 (defun vc-stay-local-p (file)
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
165 "Return non-nil if VC should stay local when handling FILE.
82058
b9e06163e85b (vc-stay-local-p): Fix bug: Avoid remove-if-not.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 82027
diff changeset
166 This uses the `repository-hostname' backend operation.
b9e06163e85b (vc-stay-local-p): Fix bug: Avoid remove-if-not.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 82027
diff changeset
167 If FILE is a list of files, return non-nil if any of them
b9e06163e85b (vc-stay-local-p): Fix bug: Avoid remove-if-not.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 82027
diff changeset
168 individually should stay local."
81958
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
169 (if (listp file)
82058
b9e06163e85b (vc-stay-local-p): Fix bug: Avoid remove-if-not.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 82027
diff changeset
170 (delq nil (mapcar 'vc-stay-local-p file))
81958
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
171 (let* ((backend (vc-backend file))
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
172 (sym (vc-make-backend-sym backend 'stay-local))
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
173 (stay-local (if (boundp sym) (symbol-value sym) t)))
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
174 (if (eq stay-local t) (setq stay-local vc-stay-local))
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
175 (if (symbolp stay-local) stay-local
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
176 (let ((dirname (if (file-directory-p file)
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
177 (directory-file-name file)
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
178 (file-name-directory file))))
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
179 (eq 'yes
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
180 (or (vc-file-getprop dirname 'vc-stay-local-p)
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
181 (vc-file-setprop
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
182 dirname 'vc-stay-local-p
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
183 (let ((hostname (vc-call-backend
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
184 backend 'repository-hostname dirname)))
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
185 (if (not hostname)
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
186 'no
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
187 (let ((default t))
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
188 (if (eq (car-safe stay-local) 'except)
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
189 (setq default nil stay-local (cdr stay-local)))
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
190 (when (consp stay-local)
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
191 (setq stay-local
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
192 (mapconcat 'identity stay-local "\\|")))
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
193 (if (if (string-match stay-local hostname)
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
194 default (not default))
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
195 'yes 'no))))))))))))
51761
856170cb64e9 (vc-stay-local, vc-stay-local-p): Move from vc.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51480
diff changeset
196
46723
2d147caabf88 Don't add to minor-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents: 46542
diff changeset
197 ;;; This is handled specially now.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
198 ;; Tell Emacs about this new kind of minor mode
46723
2d147caabf88 Don't add to minor-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents: 46542
diff changeset
199 ;; (add-to-list 'minor-mode-alist '(vc-mode vc-mode))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
200
2491
5f3061858f47 vc-mode: name change.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2232
diff changeset
201 (make-variable-buffer-local 'vc-mode)
2620
d26f75fd9f5e (vc-mode-line): Don't alter key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 2491
diff changeset
202 (put 'vc-mode 'permanent-local t)
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
203
38373
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
204 (defun vc-mode (&optional arg)
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
205 ;; Dummy function for C-h m
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
206 "Version Control minor mode.
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
207 This minor mode is automatically activated whenever you visit a file under
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
208 control of one of the revision control systems in `vc-handled-backends'.
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
209 VC commands are globally reachable under the prefix `\\[vc-prefix-map]':
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
210 \\{vc-prefix-map}")
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
211
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31382
diff changeset
212 (defmacro vc-error-occurred (&rest body)
40851
19448ae09fc0 (vc-error-occured): Backquotified.
André Spiegel <spiegel@gnu.org>
parents: 39417
diff changeset
213 `(condition-case nil (progn ,@body nil) (error t)))
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31382
diff changeset
214
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
215 ;; We need a notion of per-file properties because the version
11598
540868154dc9 (vc-buffer-backend): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10176
diff changeset
216 ;; control state of a file is expensive to derive --- we compute
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
217 ;; them when the file is initially found, keep them up to date
11598
540868154dc9 (vc-buffer-backend): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10176
diff changeset
218 ;; during any subsequent VC operations, and forget them when
540868154dc9 (vc-buffer-backend): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10176
diff changeset
219 ;; the buffer is killed.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
220
40851
19448ae09fc0 (vc-error-occured): Backquotified.
André Spiegel <spiegel@gnu.org>
parents: 39417
diff changeset
221 (defvar vc-file-prop-obarray (make-vector 17 0)
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
222 "Obarray for per-file properties.")
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
223
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31382
diff changeset
224 (defvar vc-touched-properties nil)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31382
diff changeset
225
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
226 (defun vc-file-setprop (file property value)
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
227 "Set per-file VC PROPERTY for FILE to VALUE."
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31382
diff changeset
228 (if (and vc-touched-properties
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31382
diff changeset
229 (not (memq property vc-touched-properties)))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31382
diff changeset
230 (setq vc-touched-properties (append (list property)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31382
diff changeset
231 vc-touched-properties)))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
232 (put (intern file vc-file-prop-obarray) property value))
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
233
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
234 (defun vc-file-getprop (file property)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31382
diff changeset
235 "Get per-file VC PROPERTY for FILE."
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
236 (get (intern file vc-file-prop-obarray) property))
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
237
11604
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
238 (defun vc-file-clearprops (file)
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
239 "Clear all VC properties of FILE."
11604
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
240 (setplist (intern file vc-file-prop-obarray) nil))
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
241
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
242
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
243 ;; We keep properties on each symbol naming a backend as follows:
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
244 ;; * `vc-functions': an alist mapping vc-FUNCTION to vc-BACKEND-FUNCTION.
11604
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
245
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
246 (defun vc-make-backend-sym (backend sym)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
247 "Return BACKEND-specific version of VC symbol SYM."
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
248 (intern (concat "vc-" (downcase (symbol-name backend))
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
249 "-" (symbol-name sym))))
11604
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
250
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
251 (defun vc-find-backend-function (backend fun)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
252 "Return BACKEND-specific implementation of FUN.
47918
022aa2332f91 (vc-insert-file): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 47244
diff changeset
253 If there is no such implementation, return the default implementation;
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
254 if that doesn't exist either, return nil."
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
255 (let ((f (vc-make-backend-sym backend fun)))
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
256 (if (fboundp f) f
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
257 ;; Load vc-BACKEND.el if needed.
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
258 (require (intern (concat "vc-" (downcase (symbol-name backend)))))
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
259 (if (fboundp f) f
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
260 (let ((def (vc-make-backend-sym 'default fun)))
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
261 (if (fboundp def) (cons def backend) nil))))))
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
262
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
263 (defun vc-call-backend (backend function-name &rest args)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
264 "Call for BACKEND the implementation of FUNCTION-NAME with the given ARGS.
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
265 Calls
11604
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
266
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
267 (apply 'vc-BACKEND-FUN ARGS)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
268
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
269 if vc-BACKEND-FUN exists (after trying to find it in vc-BACKEND.el)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
270 and else calls
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
271
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
272 (apply 'vc-default-FUN BACKEND ARGS)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
273
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
274 It is usually called via the `vc-call' macro."
51370
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
275 (let ((f (assoc function-name (get backend 'vc-functions))))
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
276 (if f (setq f (cdr f))
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
277 (setq f (vc-find-backend-function backend function-name))
51370
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
278 (push (cons function-name f) (get backend 'vc-functions)))
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
279 (cond
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
280 ((null f)
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
281 (error "Sorry, %s is not implemented for %s" function-name backend))
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
282 ((consp f) (apply (car f) (cdr f) args))
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
283 (t (apply f args)))))
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
284
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
285 (defmacro vc-call (fun file &rest args)
82293
96cb0797d6c7 (vc-call): Add doc string.
Jason Rumney <jasonr@gnu.org>
parents: 82245
diff changeset
286 "A convenience macro for calling VC backend functions.
96cb0797d6c7 (vc-call): Add doc string.
Jason Rumney <jasonr@gnu.org>
parents: 82245
diff changeset
287 Functions called by this macro must accept FILE as the first argument.
94548
089a9212abc0 (vc-call, vc-state): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 94543
diff changeset
288 ARGS specifies any additional arguments. FUN should be unquoted.
089a9212abc0 (vc-call, vc-state): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 94543
diff changeset
289 BEWARE!! FILE is evaluated twice!!"
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
290 `(vc-call-backend (vc-backend ,file) ',fun ,file ,@args))
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
291
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
292 (defsubst vc-parse-buffer (pattern i)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
293 "Find PATTERN in the current buffer and return its Ith submatch."
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
294 (goto-char (point-min))
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
295 (if (re-search-forward pattern nil t)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
296 (match-string i)))
11598
540868154dc9 (vc-buffer-backend): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10176
diff changeset
297
12251
f2519a110e5f The RCS status is now found by reading the
Richard M. Stallman <rms@gnu.org>
parents: 12102
diff changeset
298 (defun vc-insert-file (file &optional limit blocksize)
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
299 "Insert the contents of FILE into the current buffer.
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
300
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
301 Optional argument LIMIT is a regexp. If present, the file is inserted
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
302 in chunks of size BLOCKSIZE (default 8 kByte), until the first
47918
022aa2332f91 (vc-insert-file): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 47244
diff changeset
303 occurrence of LIMIT is found. Anything from the start of that occurrence
46542
f8e6993503cf (vc-insert-file): When called with a LIMIT regexp,
André Spiegel <spiegel@gnu.org>
parents: 46453
diff changeset
304 to the end of the buffer is then deleted. The function returns
f8e6993503cf (vc-insert-file): When called with a LIMIT regexp,
André Spiegel <spiegel@gnu.org>
parents: 46453
diff changeset
305 non-nil if FILE exists and its contents were successfully inserted."
12367
f268f652055e (vc-insert-file): Erase the current buffer before inserting the file.
Richard M. Stallman <rms@gnu.org>
parents: 12359
diff changeset
306 (erase-buffer)
33206
7feabfeb41cc (vc-insert-file): Rewritten. Don't bother about auto-save-mode.
André Spiegel <spiegel@gnu.org>
parents: 32953
diff changeset
307 (when (file-exists-p file)
7feabfeb41cc (vc-insert-file): Rewritten. Don't bother about auto-save-mode.
André Spiegel <spiegel@gnu.org>
parents: 32953
diff changeset
308 (if (not limit)
7feabfeb41cc (vc-insert-file): Rewritten. Don't bother about auto-save-mode.
André Spiegel <spiegel@gnu.org>
parents: 32953
diff changeset
309 (insert-file-contents file)
94207
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
310 (unless blocksize (setq blocksize 8192))
33247
23d61d30fcd0 (vc-insert-file): Don't assume byte==char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33206
diff changeset
311 (let ((filepos 0))
23d61d30fcd0 (vc-insert-file): Don't assume byte==char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33206
diff changeset
312 (while
23d61d30fcd0 (vc-insert-file): Don't assume byte==char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33206
diff changeset
313 (and (< 0 (cadr (insert-file-contents
23d61d30fcd0 (vc-insert-file): Don't assume byte==char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33206
diff changeset
314 file nil filepos (incf filepos blocksize))))
23d61d30fcd0 (vc-insert-file): Don't assume byte==char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33206
diff changeset
315 (progn (beginning-of-line)
46542
f8e6993503cf (vc-insert-file): When called with a LIMIT regexp,
André Spiegel <spiegel@gnu.org>
parents: 46453
diff changeset
316 (let ((pos (re-search-forward limit nil 'move)))
94207
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
317 (when pos (delete-region (match-beginning 0)
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
318 (point-max)))
46542
f8e6993503cf (vc-insert-file): When called with a LIMIT regexp,
André Spiegel <spiegel@gnu.org>
parents: 46453
diff changeset
319 (not pos)))))))
33206
7feabfeb41cc (vc-insert-file): Rewritten. Don't bother about auto-save-mode.
André Spiegel <spiegel@gnu.org>
parents: 32953
diff changeset
320 (set-buffer-modified-p nil)
7feabfeb41cc (vc-insert-file): Rewritten. Don't bother about auto-save-mode.
André Spiegel <spiegel@gnu.org>
parents: 32953
diff changeset
321 t))
12251
f2519a110e5f The RCS status is now found by reading the
Richard M. Stallman <rms@gnu.org>
parents: 12102
diff changeset
322
91956
7bc22dad5f9a Make sure all backends support vc-BACKEND-root.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91954
diff changeset
323 (defun vc-find-root (file witness &optional invert)
57079
6f014cde9d81 (vc-ignore-dir-regexp): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55099
diff changeset
324 "Find the root of a checked out project.
6f014cde9d81 (vc-ignore-dir-regexp): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55099
diff changeset
325 The function walks up the directory tree from FILE looking for WITNESS.
91956
7bc22dad5f9a Make sure all backends support vc-BACKEND-root.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91954
diff changeset
326 If WITNESS if not found, return nil, otherwise return the root.
7bc22dad5f9a Make sure all backends support vc-BACKEND-root.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91954
diff changeset
327 Optional arg INVERT non-nil reverses the sense of the check;
7bc22dad5f9a Make sure all backends support vc-BACKEND-root.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91954
diff changeset
328 the root is the last directory for which WITNESS *is* found."
73351
29547db9ad61 (vc-ignore-dir-regexp): Make it into a defcustom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68651
diff changeset
329 ;; Represent /home/luser/foo as ~/foo so that we don't try to look for
29547db9ad61 (vc-ignore-dir-regexp): Make it into a defcustom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68651
diff changeset
330 ;; witnesses in /home or in /.
29547db9ad61 (vc-ignore-dir-regexp): Make it into a defcustom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68651
diff changeset
331 (setq file (abbreviate-file-name file))
77729
a2d726c7e2d1 Sync change from trunk at request of rms in FOR-RELEASE:
Glenn Morris <rgm@gnu.org>
parents: 77591
diff changeset
332 (let ((root nil)
91956
7bc22dad5f9a Make sure all backends support vc-BACKEND-root.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91954
diff changeset
333 (prev-file file)
80132
bbd6defe1e72 (vc-find-root): Remove initial loop because it's not
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80131
diff changeset
334 ;; `user' is not initialized outside the loop because
bbd6defe1e72 (vc-find-root): Remove initial loop because it's not
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80131
diff changeset
335 ;; `file' may not exist, so we may have to walk up part of the
bbd6defe1e72 (vc-find-root): Remove initial loop because it's not
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80131
diff changeset
336 ;; hierarchy before we find the "initial UID".
92148
f991f10f15ec Merge from emacs--rel--22
Miles Bader <miles@gnu.org>
parents: 91956 80132
diff changeset
337 (user nil)
91956
7bc22dad5f9a Make sure all backends support vc-BACKEND-root.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91954
diff changeset
338 try)
57079
6f014cde9d81 (vc-ignore-dir-regexp): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55099
diff changeset
339 (while (not (or root
78196
2e0600da7d6a (vc-find-root): Walk up the tree to find an existing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 77805
diff changeset
340 (null file)
2e0600da7d6a (vc-find-root): Walk up the tree to find an existing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 77805
diff changeset
341 ;; As a heuristic, we stop looking up the hierarchy of
2e0600da7d6a (vc-find-root): Walk up the tree to find an existing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 77805
diff changeset
342 ;; directories as soon as we find a directory belonging
2e0600da7d6a (vc-find-root): Walk up the tree to find an existing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 77805
diff changeset
343 ;; to another user. This should save us from looking in
2e0600da7d6a (vc-find-root): Walk up the tree to find an existing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 77805
diff changeset
344 ;; things like /net and /afs. This assumes that all the
2e0600da7d6a (vc-find-root): Walk up the tree to find an existing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 77805
diff changeset
345 ;; files inside a project belong to the same user.
80132
bbd6defe1e72 (vc-find-root): Remove initial loop because it's not
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80131
diff changeset
346 (let ((prev-user user))
bbd6defe1e72 (vc-find-root): Remove initial loop because it's not
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80131
diff changeset
347 (setq user (nth 2 (file-attributes file)))
bbd6defe1e72 (vc-find-root): Remove initial loop because it's not
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80131
diff changeset
348 (and prev-user (not (equal user prev-user))))
78196
2e0600da7d6a (vc-find-root): Walk up the tree to find an existing
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 77805
diff changeset
349 (string-match vc-ignore-dir-regexp file)))
91956
7bc22dad5f9a Make sure all backends support vc-BACKEND-root.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91954
diff changeset
350 (setq try (file-exists-p (expand-file-name witness file)))
7bc22dad5f9a Make sure all backends support vc-BACKEND-root.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91954
diff changeset
351 (cond ((and invert (not try)) (setq root prev-file))
7bc22dad5f9a Make sure all backends support vc-BACKEND-root.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91954
diff changeset
352 ((and (not invert) try) (setq root file))
7bc22dad5f9a Make sure all backends support vc-BACKEND-root.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91954
diff changeset
353 ((equal file (setq prev-file file
7bc22dad5f9a Make sure all backends support vc-BACKEND-root.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91954
diff changeset
354 file (file-name-directory
7bc22dad5f9a Make sure all backends support vc-BACKEND-root.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91954
diff changeset
355 (directory-file-name file))))
7bc22dad5f9a Make sure all backends support vc-BACKEND-root.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91954
diff changeset
356 (setq file nil))))
7bc22dad5f9a Make sure all backends support vc-BACKEND-root.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91954
diff changeset
357 ;; Handle the case where ~/WITNESS exists and the original FILE is "~".
7bc22dad5f9a Make sure all backends support vc-BACKEND-root.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91954
diff changeset
358 ;; (This occurs, for example, when placing dotfiles under RCS.)
7bc22dad5f9a Make sure all backends support vc-BACKEND-root.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91954
diff changeset
359 (when (and (not root) invert prev-file)
7bc22dad5f9a Make sure all backends support vc-BACKEND-root.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91954
diff changeset
360 (setq root prev-file))
57079
6f014cde9d81 (vc-ignore-dir-regexp): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55099
diff changeset
361 root))
6f014cde9d81 (vc-ignore-dir-regexp): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55099
diff changeset
362
38373
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
363 ;; Access functions to file properties
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
364 ;; (Properties should be _set_ using vc-file-setprop, but
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
365 ;; _retrieved_ only through these functions, which decide
94548
089a9212abc0 (vc-call, vc-state): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 94543
diff changeset
366 ;; if the property is already known or not. A property should
38373
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
367 ;; only be retrieved by vc-file-getprop if there is no
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
368 ;; access function.)
11598
540868154dc9 (vc-buffer-backend): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10176
diff changeset
369
38373
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
370 ;; properties indicating the backend being used for FILE
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
371
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
372 (defun vc-registered (file)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
373 "Return non-nil if FILE is registered in a version control system.
11604
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
374
32070
d1ab0499dc86 (vc-registered): If FILE used to be registered under a certain
André Spiegel <spiegel@gnu.org>
parents: 31808
diff changeset
375 This function performs the check each time it is called. To rely
d1ab0499dc86 (vc-registered): If FILE used to be registered under a certain
André Spiegel <spiegel@gnu.org>
parents: 31808
diff changeset
376 on the result of a previous call, use `vc-backend' instead. If the
d1ab0499dc86 (vc-registered): If FILE used to be registered under a certain
André Spiegel <spiegel@gnu.org>
parents: 31808
diff changeset
377 file was previously registered under a certain backend, then that
d1ab0499dc86 (vc-registered): If FILE used to be registered under a certain
André Spiegel <spiegel@gnu.org>
parents: 31808
diff changeset
378 backend is tried first."
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
379 (let (handler)
57079
6f014cde9d81 (vc-ignore-dir-regexp): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55099
diff changeset
380 (cond
85157
93de0ca0707d Robustify a bit against filenames with no directory component.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85139
diff changeset
381 ((and (file-name-directory file) (string-match vc-ignore-dir-regexp (file-name-directory file)))
93de0ca0707d Robustify a bit against filenames with no directory component.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85139
diff changeset
382 nil)
57079
6f014cde9d81 (vc-ignore-dir-regexp): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55099
diff changeset
383 ((and (boundp 'file-name-handler-alist)
6f014cde9d81 (vc-ignore-dir-regexp): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55099
diff changeset
384 (setq handler (find-file-name-handler file 'vc-registered)))
6f014cde9d81 (vc-ignore-dir-regexp): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55099
diff changeset
385 ;; handler should set vc-backend and return t if registered
6f014cde9d81 (vc-ignore-dir-regexp): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55099
diff changeset
386 (funcall handler 'vc-registered file))
6f014cde9d81 (vc-ignore-dir-regexp): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55099
diff changeset
387 (t
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
388 ;; There is no file name handler.
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
389 ;; Try vc-BACKEND-registered for each handled BACKEND.
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
390 (catch 'found
32070
d1ab0499dc86 (vc-registered): If FILE used to be registered under a certain
André Spiegel <spiegel@gnu.org>
parents: 31808
diff changeset
391 (let ((backend (vc-file-getprop file 'vc-backend)))
82849
ea5864b698fd * vc-hooks.el (vc-registered): Use mapc instead of mapcar.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 82771
diff changeset
392 (mapc
32070
d1ab0499dc86 (vc-registered): If FILE used to be registered under a certain
André Spiegel <spiegel@gnu.org>
parents: 31808
diff changeset
393 (lambda (b)
d1ab0499dc86 (vc-registered): If FILE used to be registered under a certain
André Spiegel <spiegel@gnu.org>
parents: 31808
diff changeset
394 (and (vc-call-backend b 'registered file)
d1ab0499dc86 (vc-registered): If FILE used to be registered under a certain
André Spiegel <spiegel@gnu.org>
parents: 31808
diff changeset
395 (vc-file-setprop file 'vc-backend b)
d1ab0499dc86 (vc-registered): If FILE used to be registered under a certain
André Spiegel <spiegel@gnu.org>
parents: 31808
diff changeset
396 (throw 'found t)))
47918
022aa2332f91 (vc-insert-file): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 47244
diff changeset
397 (if (or (not backend) (eq backend 'none))
32070
d1ab0499dc86 (vc-registered): If FILE used to be registered under a certain
André Spiegel <spiegel@gnu.org>
parents: 31808
diff changeset
398 vc-handled-backends
d1ab0499dc86 (vc-registered): If FILE used to be registered under a certain
André Spiegel <spiegel@gnu.org>
parents: 31808
diff changeset
399 (cons backend vc-handled-backends))))
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
400 ;; File is not registered.
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
401 (vc-file-setprop file 'vc-backend 'none)
57079
6f014cde9d81 (vc-ignore-dir-regexp): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55099
diff changeset
402 nil)))))
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
403
81958
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
404 (defun vc-backend (file-or-list)
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
405 "Return the version control type of FILE-OR-LIST, nil if it's not registered.
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
406 If the argument is a list, the files must all have the same back end."
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
407 ;; `file' can be nil in several places (typically due to the use of
50879
9cd7a1a60ba0 Consistently use buffer-file-name variable rather than function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49620
diff changeset
408 ;; code like (vc-backend buffer-file-name)).
81958
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
409 (cond ((stringp file-or-list)
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
410 (let ((property (vc-file-getprop file-or-list 'vc-backend)))
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
411 ;; Note that internally, Emacs remembers unregistered
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
412 ;; files by setting the property to `none'.
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
413 (cond ((eq property 'none) nil)
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
414 (property)
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
415 ;; vc-registered sets the vc-backend property
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
416 (t (if (vc-registered file-or-list)
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
417 (vc-file-getprop file-or-list 'vc-backend)
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
418 nil)))))
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
419 ((and file-or-list (listp file-or-list))
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
420 (vc-backend (car file-or-list)))
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
421 (t
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
422 nil)))
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
423
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
424
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
425 (defun vc-backend-subdirectory-name (file)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
426 "Return where the master and lock FILEs for the current directory are kept."
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
427 (symbol-name (vc-backend file)))
11604
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
428
12251
f2519a110e5f The RCS status is now found by reading the
Richard M. Stallman <rms@gnu.org>
parents: 12102
diff changeset
429 (defun vc-name (file)
31564
00efca34e7d0 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31405
diff changeset
430 "Return the master name of FILE.
00efca34e7d0 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31405
diff changeset
431 If the file is not registered, or the master name is not known, return nil."
00efca34e7d0 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31405
diff changeset
432 ;; TODO: This should ultimately become obsolete, at least up here
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
433 ;; in vc-hooks.
12251
f2519a110e5f The RCS status is now found by reading the
Richard M. Stallman <rms@gnu.org>
parents: 12102
diff changeset
434 (or (vc-file-getprop file 'vc-name)
31808
25632a490236 (vc-name): Force correct computation of the value in case it is missing.
André Spiegel <spiegel@gnu.org>
parents: 31564
diff changeset
435 ;; force computation of the property by calling
25632a490236 (vc-name): Force correct computation of the value in case it is missing.
André Spiegel <spiegel@gnu.org>
parents: 31564
diff changeset
436 ;; vc-BACKEND-registered explicitly
25632a490236 (vc-name): Force correct computation of the value in case it is missing.
André Spiegel <spiegel@gnu.org>
parents: 31564
diff changeset
437 (if (and (vc-backend file)
25632a490236 (vc-name): Force correct computation of the value in case it is missing.
André Spiegel <spiegel@gnu.org>
parents: 31564
diff changeset
438 (vc-call-backend (vc-backend file) 'registered file))
21356
c714817643a9 (vc-parse-cvs-status): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21232
diff changeset
439 (vc-file-getprop file 'vc-name))))
11604
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
440
94481
ad6c174910db Make `checkout-model' apply to filesets.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94207
diff changeset
441 (defun vc-checkout-model (backend files)
ad6c174910db Make `checkout-model' apply to filesets.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94207
diff changeset
442 "Indicate how FILES are checked out.
11604
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
443
94481
ad6c174910db Make `checkout-model' apply to filesets.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94207
diff changeset
444 If FILES are not registered, this function always returns nil.
42021
ddb97861a688 (vc-checkout-model, vc-state, vc-workfile-version): Return nil if
André Spiegel <spiegel@gnu.org>
parents: 41956
diff changeset
445 For registered files, the possible values are:
12884
f47248851f26 (vc-fetch-master-properties): Recognize cvs status "Unresolved Conflict".
André Spiegel <spiegel@gnu.org>
parents: 12874
diff changeset
446
94481
ad6c174910db Make `checkout-model' apply to filesets.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94207
diff changeset
447 'implicit FILES are always writeable, and checked out `implicitly'
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
448 when the user saves the first changes to the file.
11604
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
449
94481
ad6c174910db Make `checkout-model' apply to filesets.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94207
diff changeset
450 'locking FILES are read-only if up-to-date; user must type
46453
8a775aba60aa Don't bind vc-toggle-read-only to C-x C-q.
André Spiegel <spiegel@gnu.org>
parents: 43587
diff changeset
451 \\[vc-next-action] before editing. Strict locking
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
452 is assumed.
12251
f2519a110e5f The RCS status is now found by reading the
Richard M. Stallman <rms@gnu.org>
parents: 12102
diff changeset
453
94481
ad6c174910db Make `checkout-model' apply to filesets.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94207
diff changeset
454 'announce FILES are read-only if up-to-date; user must type
46453
8a775aba60aa Don't bind vc-toggle-read-only to C-x C-q.
André Spiegel <spiegel@gnu.org>
parents: 43587
diff changeset
455 \\[vc-next-action] before editing. But other users
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
456 may be editing at the same time."
94481
ad6c174910db Make `checkout-model' apply to filesets.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94207
diff changeset
457 (vc-call-backend backend 'checkout-model files))
12925
77c9a594fe55 (vc-simple-command): New function.
André Spiegel <spiegel@gnu.org>
parents: 12914
diff changeset
458
68383
4e64c3323161 (vc-user-login-name): Rewritten to handle access via Tramp.
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
459 (defun vc-user-login-name (file)
4e64c3323161 (vc-user-login-name): Rewritten to handle access via Tramp.
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
460 "Return the name under which the user accesses the given FILE."
4e64c3323161 (vc-user-login-name): Rewritten to handle access via Tramp.
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
461 (or (and (eq (string-match tramp-file-name-regexp file) 0)
4e64c3323161 (vc-user-login-name): Rewritten to handle access via Tramp.
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
462 ;; tramp case: execute "whoami" via tramp
4e64c3323161 (vc-user-login-name): Rewritten to handle access via Tramp.
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
463 (let ((default-directory (file-name-directory file)))
4e64c3323161 (vc-user-login-name): Rewritten to handle access via Tramp.
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
464 (with-temp-buffer
4e64c3323161 (vc-user-login-name): Rewritten to handle access via Tramp.
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
465 (if (not (zerop (process-file "whoami" nil t)))
4e64c3323161 (vc-user-login-name): Rewritten to handle access via Tramp.
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
466 ;; fall through if "whoami" didn't work
4e64c3323161 (vc-user-login-name): Rewritten to handle access via Tramp.
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
467 nil
4e64c3323161 (vc-user-login-name): Rewritten to handle access via Tramp.
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
468 ;; remove trailing newline
4e64c3323161 (vc-user-login-name): Rewritten to handle access via Tramp.
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
469 (delete-region (1- (point-max)) (point-max))
4e64c3323161 (vc-user-login-name): Rewritten to handle access via Tramp.
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
470 (buffer-string)))))
4e64c3323161 (vc-user-login-name): Rewritten to handle access via Tramp.
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
471 ;; normal case
4e64c3323161 (vc-user-login-name): Rewritten to handle access via Tramp.
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
472 (user-login-name)
4e64c3323161 (vc-user-login-name): Rewritten to handle access via Tramp.
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
473 ;; if user-login-name is nil, return the UID as a string
4e64c3323161 (vc-user-login-name): Rewritten to handle access via Tramp.
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
474 (number-to-string (user-uid))))
12925
77c9a594fe55 (vc-simple-command): New function.
André Spiegel <spiegel@gnu.org>
parents: 12914
diff changeset
475
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
476 (defun vc-state (file)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
477 "Return the version control state of FILE.
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
478
42021
ddb97861a688 (vc-checkout-model, vc-state, vc-workfile-version): Return nil if
André Spiegel <spiegel@gnu.org>
parents: 41956
diff changeset
479 If FILE is not registered, this function always returns nil.
ddb97861a688 (vc-checkout-model, vc-state, vc-workfile-version): Return nil if
André Spiegel <spiegel@gnu.org>
parents: 41956
diff changeset
480 For registered files, the value returned is one of:
12251
f2519a110e5f The RCS status is now found by reading the
Richard M. Stallman <rms@gnu.org>
parents: 12102
diff changeset
481
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
482 'up-to-date The working file is unmodified with respect to the
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
483 latest version on the current branch, and not locked.
12925
77c9a594fe55 (vc-simple-command): New function.
André Spiegel <spiegel@gnu.org>
parents: 12914
diff changeset
484
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
485 'edited The working file has been edited by the user. If
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
486 locking is used for the file, this state means that
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
487 the current version is locked by the calling user.
12925
77c9a594fe55 (vc-simple-command): New function.
André Spiegel <spiegel@gnu.org>
parents: 12914
diff changeset
488
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
489 USER The current version of the working file is locked by
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
490 some other USER (a string).
47918
022aa2332f91 (vc-insert-file): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 47244
diff changeset
491
94521
2a61c5f918a5 Change 'needs-patch to 'needs-update.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94481
diff changeset
492 'needs-update The file has not been edited by the user, but there is
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
493 a more recent version on the current branch stored
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
494 in the master file.
12251
f2519a110e5f The RCS status is now found by reading the
Richard M. Stallman <rms@gnu.org>
parents: 12102
diff changeset
495
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
496 'needs-merge The file has been edited by the user, and there is also
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
497 a more recent version on the current branch stored in
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
498 the master file. This state can only occur if locking
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
499 is not used for the file.
11604
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
500
87444
e0b3bfbba910 Typo fix.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 86234
diff changeset
501 'unlocked-changes The working version of the file is not locked,
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
502 but the working file has been changed with respect
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
503 to that version. This state can only occur for files
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
504 with locking; it represents an erroneous condition that
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
505 should be resolved by the user (vc-next-action will
87444
e0b3bfbba910 Typo fix.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 86234
diff changeset
506 prompt the user to do it).
e0b3bfbba910 Typo fix.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 86234
diff changeset
507
e0b3bfbba910 Typo fix.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 86234
diff changeset
508 'added Scheduled to go into the repository on the next commit.
87445
214f565ec827 And another typo fix.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87444
diff changeset
509 Often represented by vc-working-revision = \"0\" in VCSes
87450
71fc7b1db920 * vc-hooks.el (vc-state): Document new 'ignored and 'unregistered
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87446
diff changeset
510 with monotonic IDs like Subversion and Mercurial.
71fc7b1db920 * vc-hooks.el (vc-state): Document new 'ignored and 'unregistered
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87446
diff changeset
511
87477
b5060e79eb98 * vc-svn.el (vc-svn-parse-status): Recognize 'added, 'removed,
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87450
diff changeset
512 'removed Scheduled to be deleted from the repository on next commit.
91584
c72722ab4a01 (vc-prefix-map): Bind `vc-status' to "?".
Sam Steingold <sds@gnu.org>
parents: 87649
diff changeset
513
93956
bfc762f0b49c * vc-hooks.el (vc-state): Add new state `conflict'.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93940
diff changeset
514 'conflict The file contains conflicts as the result of a merge.
94150
d03fe9cb1cf4 (vc-ignore-vc-files, vc-master-templates, vc-header-alist):
Juanma Barranquero <lekktu@gmail.com>
parents: 94106
diff changeset
515 For now the conflicts are text conflicts. In the
d03fe9cb1cf4 (vc-ignore-vc-files, vc-master-templates, vc-header-alist):
Juanma Barranquero <lekktu@gmail.com>
parents: 94106
diff changeset
516 future this might be extended to deal with metadata
93956
bfc762f0b49c * vc-hooks.el (vc-state): Add new state `conflict'.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93940
diff changeset
517 conflicts too.
bfc762f0b49c * vc-hooks.el (vc-state): Add new state `conflict'.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93940
diff changeset
518
94150
d03fe9cb1cf4 (vc-ignore-vc-files, vc-master-templates, vc-header-alist):
Juanma Barranquero <lekktu@gmail.com>
parents: 94106
diff changeset
519 'missing The file is not present in the file system, but the VC
93196
6344844cc575 (vc-state): Add documentation for 'missing.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93124
diff changeset
520 system still tracks it.
6344844cc575 (vc-state): Add documentation for 'missing.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93124
diff changeset
521
91584
c72722ab4a01 (vc-prefix-map): Bind `vc-status' to "?".
Sam Steingold <sds@gnu.org>
parents: 87649
diff changeset
522 'ignored The file showed up in a dir-state listing with a flag
87450
71fc7b1db920 * vc-hooks.el (vc-state): Document new 'ignored and 'unregistered
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87446
diff changeset
523 indicating the version-control system is ignoring it,
91584
c72722ab4a01 (vc-prefix-map): Bind `vc-status' to "?".
Sam Steingold <sds@gnu.org>
parents: 87649
diff changeset
524 Note: This property is not set reliably (some VCSes
c72722ab4a01 (vc-prefix-map): Bind `vc-status' to "?".
Sam Steingold <sds@gnu.org>
parents: 87649
diff changeset
525 don't have useful directory-status commands) so assume
87450
71fc7b1db920 * vc-hooks.el (vc-state): Document new 'ignored and 'unregistered
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87446
diff changeset
526 that any file with vc-state nil might be ignorable
91584
c72722ab4a01 (vc-prefix-map): Bind `vc-status' to "?".
Sam Steingold <sds@gnu.org>
parents: 87649
diff changeset
527 without VC knowing it.
87450
71fc7b1db920 * vc-hooks.el (vc-state): Document new 'ignored and 'unregistered
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87446
diff changeset
528
94521
2a61c5f918a5 Change 'needs-patch to 'needs-update.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94481
diff changeset
529 'unregistered The file is not under version control.
87450
71fc7b1db920 * vc-hooks.el (vc-state): Document new 'ignored and 'unregistered
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87446
diff changeset
530
91584
c72722ab4a01 (vc-prefix-map): Bind `vc-status' to "?".
Sam Steingold <sds@gnu.org>
parents: 87649
diff changeset
531 A return of nil from this function means we have no information on the
94548
089a9212abc0 (vc-call, vc-state): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 94543
diff changeset
532 status of this file."
87450
71fc7b1db920 * vc-hooks.el (vc-state): Document new 'ignored and 'unregistered
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87446
diff changeset
533 ;; Note: in Emacs 22 and older, return of nil meant the file was unregistered.
71fc7b1db920 * vc-hooks.el (vc-state): Document new 'ignored and 'unregistered
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87446
diff changeset
534 ;; This is potentially a source of backward-compatibility bugs.
87444
e0b3bfbba910 Typo fix.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 86234
diff changeset
535
50895
8b4ee8a18c21 (vc-default-workfile-unchanged-p): Pass nil
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50880
diff changeset
536 ;; FIXME: New (sub)states needed (?):
8b4ee8a18c21 (vc-default-workfile-unchanged-p): Pass nil
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50880
diff changeset
537 ;; - `conflict' (i.e. `edited' with conflict markers)
8b4ee8a18c21 (vc-default-workfile-unchanged-p): Pass nil
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50880
diff changeset
538 ;; - `removed'
8b4ee8a18c21 (vc-default-workfile-unchanged-p): Pass nil
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50880
diff changeset
539 ;; - `copied' and `moved' (might be handled by `removed' and `added')
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
540 (or (vc-file-getprop file 'vc-state)
94207
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
541 (when (and (> (length file) 0) (vc-backend file))
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
542 (vc-file-setprop file 'vc-state
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
543 (vc-call state-heuristic file)))))
11604
401afae906eb (vc-default-backend, vc-path, vc-consult-headers):
Karl Heuer <kwzh@gnu.org>
parents: 11598
diff changeset
544
58641
6eccfc449b0e (vc-recompute-state): Moved here from vc.el.
André Spiegel <spiegel@gnu.org>
parents: 57532
diff changeset
545 (defun vc-recompute-state (file)
6eccfc449b0e (vc-recompute-state): Moved here from vc.el.
André Spiegel <spiegel@gnu.org>
parents: 57532
diff changeset
546 "Recompute the version control state of FILE, and return it.
6eccfc449b0e (vc-recompute-state): Moved here from vc.el.
André Spiegel <spiegel@gnu.org>
parents: 57532
diff changeset
547 This calls the possibly expensive function vc-BACKEND-state,
6eccfc449b0e (vc-recompute-state): Moved here from vc.el.
André Spiegel <spiegel@gnu.org>
parents: 57532
diff changeset
548 rather than the heuristic."
6eccfc449b0e (vc-recompute-state): Moved here from vc.el.
André Spiegel <spiegel@gnu.org>
parents: 57532
diff changeset
549 (vc-file-setprop file 'vc-state (vc-call state file)))
6eccfc449b0e (vc-recompute-state): Moved here from vc.el.
André Spiegel <spiegel@gnu.org>
parents: 57532
diff changeset
550
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
551 (defsubst vc-up-to-date-p (file)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
552 "Convenience function that checks whether `vc-state' of FILE is `up-to-date'."
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
553 (eq (vc-state file) 'up-to-date))
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
554
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
555 (defun vc-default-state-heuristic (backend file)
94548
089a9212abc0 (vc-call, vc-state): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 94543
diff changeset
556 "Default implementation of vc-BACKEND-state-heuristic.
31564
00efca34e7d0 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31405
diff changeset
557 It simply calls the real state computation function `vc-BACKEND-state'
00efca34e7d0 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31405
diff changeset
558 and does not employ any heuristic at all."
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
559 (vc-call-backend backend 'state file))
12252
e07d55d05864 (vc-fetch-master-properties): For RCS file,
Richard M. Stallman <rms@gnu.org>
parents: 12251
diff changeset
560
47226
31f2c4b2c82f Require vc.el at compile-time.
André Spiegel <spiegel@gnu.org>
parents: 47003
diff changeset
561 (defun vc-workfile-unchanged-p (file)
31f2c4b2c82f Require vc.el at compile-time.
André Spiegel <spiegel@gnu.org>
parents: 47003
diff changeset
562 "Return non-nil if FILE has not changed since the last checkout."
31f2c4b2c82f Require vc.el at compile-time.
André Spiegel <spiegel@gnu.org>
parents: 47003
diff changeset
563 (let ((checkout-time (vc-file-getprop file 'vc-checkout-time))
31f2c4b2c82f Require vc.el at compile-time.
André Spiegel <spiegel@gnu.org>
parents: 47003
diff changeset
564 (lastmod (nth 5 (file-attributes file))))
61203
92bee19cd688 (vc-workfile-unchanged-p): Disable mtime check when we go via Tramp or
André Spiegel <spiegel@gnu.org>
parents: 59996
diff changeset
565 (if (and checkout-time
92bee19cd688 (vc-workfile-unchanged-p): Disable mtime check when we go via Tramp or
André Spiegel <spiegel@gnu.org>
parents: 59996
diff changeset
566 ;; Tramp and Ange-FTP return this when they don't know the time.
92bee19cd688 (vc-workfile-unchanged-p): Disable mtime check when we go via Tramp or
André Spiegel <spiegel@gnu.org>
parents: 59996
diff changeset
567 (not (equal lastmod '(0 0))))
47226
31f2c4b2c82f Require vc.el at compile-time.
André Spiegel <spiegel@gnu.org>
parents: 47003
diff changeset
568 (equal checkout-time lastmod)
31f2c4b2c82f Require vc.el at compile-time.
André Spiegel <spiegel@gnu.org>
parents: 47003
diff changeset
569 (let ((unchanged (vc-call workfile-unchanged-p file)))
31f2c4b2c82f Require vc.el at compile-time.
André Spiegel <spiegel@gnu.org>
parents: 47003
diff changeset
570 (vc-file-setprop file 'vc-checkout-time (if unchanged lastmod 0))
31f2c4b2c82f Require vc.el at compile-time.
André Spiegel <spiegel@gnu.org>
parents: 47003
diff changeset
571 unchanged))))
31f2c4b2c82f Require vc.el at compile-time.
André Spiegel <spiegel@gnu.org>
parents: 47003
diff changeset
572
31f2c4b2c82f Require vc.el at compile-time.
André Spiegel <spiegel@gnu.org>
parents: 47003
diff changeset
573 (defun vc-default-workfile-unchanged-p (backend file)
31f2c4b2c82f Require vc.el at compile-time.
André Spiegel <spiegel@gnu.org>
parents: 47003
diff changeset
574 "Check if FILE is unchanged by diffing against the master version.
31f2c4b2c82f Require vc.el at compile-time.
André Spiegel <spiegel@gnu.org>
parents: 47003
diff changeset
575 Return non-nil if FILE is unchanged."
54783
507f2c946725 (vc-arg-list): Function removed.
André Spiegel <spiegel@gnu.org>
parents: 54613
diff changeset
576 (zerop (condition-case err
54561
225341adbb0d (vc-arg-list): New function, which handles both compiled and
André Spiegel <spiegel@gnu.org>
parents: 54529
diff changeset
577 ;; If the implementation supports it, let the output
225341adbb0d (vc-arg-list): New function, which handles both compiled and
André Spiegel <spiegel@gnu.org>
parents: 54529
diff changeset
578 ;; go to *vc*, not *vc-diff*, since this is an internal call.
81984
5fe5698ac0fb * vc-hooks.el (vc-default-workfile-unchanged-p): Pass a list
Dan Nicolaescu <dann@ics.uci.edu>
parents: 81979
diff changeset
579 (vc-call diff (list file) nil nil "*vc*")
54783
507f2c946725 (vc-arg-list): Function removed.
André Spiegel <spiegel@gnu.org>
parents: 54613
diff changeset
580 (wrong-number-of-arguments
507f2c946725 (vc-arg-list): Function removed.
André Spiegel <spiegel@gnu.org>
parents: 54613
diff changeset
581 ;; If this error came from the above call to vc-BACKEND-diff,
507f2c946725 (vc-arg-list): Function removed.
André Spiegel <spiegel@gnu.org>
parents: 54613
diff changeset
582 ;; try again without the optional buffer argument (for
507f2c946725 (vc-arg-list): Function removed.
André Spiegel <spiegel@gnu.org>
parents: 54613
diff changeset
583 ;; backward compatibility). Otherwise, resignal.
507f2c946725 (vc-arg-list): Function removed.
André Spiegel <spiegel@gnu.org>
parents: 54613
diff changeset
584 (if (or (not (eq (cadr err)
507f2c946725 (vc-arg-list): Function removed.
André Spiegel <spiegel@gnu.org>
parents: 54613
diff changeset
585 (indirect-function
507f2c946725 (vc-arg-list): Function removed.
André Spiegel <spiegel@gnu.org>
parents: 54613
diff changeset
586 (vc-find-backend-function (vc-backend file)
507f2c946725 (vc-arg-list): Function removed.
André Spiegel <spiegel@gnu.org>
parents: 54613
diff changeset
587 'diff))))
55099
a856350e29d5 (vc-default-workfile-unchanged-p): Fix code that handles
Juanma Barranquero <lekktu@gmail.com>
parents: 54912
diff changeset
588 (not (eq (caddr err) 4)))
a856350e29d5 (vc-default-workfile-unchanged-p): Fix code that handles
Juanma Barranquero <lekktu@gmail.com>
parents: 54912
diff changeset
589 (signal (car err) (cdr err))
81984
5fe5698ac0fb * vc-hooks.el (vc-default-workfile-unchanged-p): Pass a list
Dan Nicolaescu <dann@ics.uci.edu>
parents: 81979
diff changeset
590 (vc-call diff (list file)))))))
47226
31f2c4b2c82f Require vc.el at compile-time.
André Spiegel <spiegel@gnu.org>
parents: 47003
diff changeset
591
85139
8ba0e30716a5 Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85114
diff changeset
592 (defun vc-working-revision (file)
81958
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
593 "Return the repository version from which FILE was checked out.
42021
ddb97861a688 (vc-checkout-model, vc-state, vc-workfile-version): Return nil if
André Spiegel <spiegel@gnu.org>
parents: 41956
diff changeset
594 If FILE is not registered, this function always returns nil."
85139
8ba0e30716a5 Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85114
diff changeset
595 (or (vc-file-getprop file 'vc-working-revision)
94207
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
596 (when (vc-backend file)
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
597 (vc-file-setprop file 'vc-working-revision
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
598 (vc-call working-revision file)))))
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
599
85319
14749907af36 (vc-workfile-version): Compatibility alias.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85169
diff changeset
600 ;; Backward compatibility.
14749907af36 (vc-workfile-version): Compatibility alias.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85169
diff changeset
601 (define-obsolete-function-alias
14749907af36 (vc-workfile-version): Compatibility alias.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85169
diff changeset
602 'vc-workfile-version 'vc-working-revision "23.1")
92345
4ffd887822d7 * vc.el (vc-status-crt-marked): New variable.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92148
diff changeset
603 (define-obsolete-function-alias
4ffd887822d7 * vc.el (vc-status-crt-marked): New variable.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92148
diff changeset
604 'vc-previous-version 'vc-previous-revision "23.1")
85319
14749907af36 (vc-workfile-version): Compatibility alias.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85169
diff changeset
605 (defun vc-default-working-revision (backend file)
14749907af36 (vc-workfile-version): Compatibility alias.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85169
diff changeset
606 (message
14749907af36 (vc-workfile-version): Compatibility alias.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85169
diff changeset
607 "`working-revision' not found: using the old `workfile-version' instead")
14749907af36 (vc-workfile-version): Compatibility alias.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85169
diff changeset
608 (vc-call-backend backend 'workfile-version file))
11598
540868154dc9 (vc-buffer-backend): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10176
diff changeset
609
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
610 (defun vc-default-registered (backend file)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
611 "Check if FILE is registered in BACKEND using vc-BACKEND-master-templates."
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
612 (let ((sym (vc-make-backend-sym backend 'master-templates)))
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
613 (unless (get backend 'vc-templates-grabbed)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
614 (put backend 'vc-templates-grabbed t)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
615 (set sym (append (delq nil
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
616 (mapcar
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
617 (lambda (template)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
618 (and (consp template)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
619 (eq (cdr template) backend)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
620 (car template)))
52051
3507a2fac9b5 (vc-default-registered, vc-make-version-backup): Use with-no-warnings.
André Spiegel <spiegel@gnu.org>
parents: 51761
diff changeset
621 (with-no-warnings
3507a2fac9b5 (vc-default-registered, vc-make-version-backup): Use with-no-warnings.
André Spiegel <spiegel@gnu.org>
parents: 51761
diff changeset
622 vc-master-templates)))
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
623 (symbol-value sym))))
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
624 (let ((result (vc-check-master-templates file (symbol-value sym))))
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
625 (if (stringp result)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
626 (vc-file-setprop file 'vc-name result)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
627 nil)))) ; Not registered
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
628
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
629 (defun vc-possible-master (s dirname basename)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
630 (cond
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
631 ((stringp s) (format s dirname basename))
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
632 ((functionp s)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
633 ;; The template is a function to invoke. If the
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
634 ;; function returns non-nil, that means it has found a
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
635 ;; master. For backward compatibility, we also handle
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
636 ;; the case that the function throws a 'found atom
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
637 ;; and a pair (cons MASTER-FILE BACKEND).
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
638 (let ((result (catch 'found (funcall s dirname basename))))
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
639 (if (consp result) (car result) result)))))
21232
b682a769996d (vc-sccs-project-dir, vc-search-sccs-project-dir): New functions.
André Spiegel <spiegel@gnu.org>
parents: 20989
diff changeset
640
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
641 (defun vc-check-master-templates (file templates)
42021
ddb97861a688 (vc-checkout-model, vc-state, vc-workfile-version): Return nil if
André Spiegel <spiegel@gnu.org>
parents: 41956
diff changeset
642 "Return non-nil if there is a master corresponding to FILE.
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
643
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
644 TEMPLATES is a list of strings or functions. If an element is a
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
645 string, it must be a control string as required by `format', with two
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
646 string placeholders, such as \"%sRCS/%s,v\". The directory part of
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
647 FILE is substituted for the first placeholder, the basename of FILE
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
648 for the second. If a file with the resulting name exists, it is taken
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
649 as the master of FILE, and returned.
9248
325cee61ab7f (vc-status): Handle CVS.
Richard M. Stallman <rms@gnu.org>
parents: 8982
diff changeset
650
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
651 If an element of TEMPLATES is a function, it is called with the
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
652 directory part and the basename of FILE as arguments. It should
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
653 return non-nil if it finds a master; that value is then returned by
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
654 this function."
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
655 (let ((dirname (or (file-name-directory file) ""))
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
656 (basename (file-name-nondirectory file)))
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
657 (catch 'found
31564
00efca34e7d0 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31405
diff changeset
658 (mapcar
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
659 (lambda (s)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
660 (let ((trial (vc-possible-master s dirname basename)))
94207
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
661 (when (and trial (file-exists-p trial)
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
662 ;; Make sure the file we found with name
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
663 ;; TRIAL is not the source file itself.
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
664 ;; That can happen with RCS-style names if
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
665 ;; the file name is truncated (e.g. to 14
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
666 ;; chars). See if either directory or
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
667 ;; attributes differ.
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
668 (or (not (string= dirname
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
669 (file-name-directory trial)))
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
670 (not (equal (file-attributes file)
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
671 (file-attributes trial)))))
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
672 (throw 'found trial))))
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
673 templates))))
11598
540868154dc9 (vc-buffer-backend): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10176
diff changeset
674
10176
332014233a2c (vc-toggle-read-only): Accept prefix arg
Richard M. Stallman <rms@gnu.org>
parents: 9869
diff changeset
675 (defun vc-toggle-read-only (&optional verbose)
2620
d26f75fd9f5e (vc-mode-line): Don't alter key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 2491
diff changeset
676 "Change read-only status of current buffer, perhaps via version control.
46453
8a775aba60aa Don't bind vc-toggle-read-only to C-x C-q.
André Spiegel <spiegel@gnu.org>
parents: 43587
diff changeset
677
2620
d26f75fd9f5e (vc-mode-line): Don't alter key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 2491
diff changeset
678 If the buffer is visiting a file registered with version control,
94548
089a9212abc0 (vc-call, vc-state): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 94543
diff changeset
679 throw an error, because this is not a safe or really meaningful operation
089a9212abc0 (vc-call, vc-state): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 94543
diff changeset
680 on any version-control system newer than RCS.
94540
55cb4c49dc98 The day wehen vc-toggle-ready-only was a good idea is long gone.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94521
diff changeset
681
55cb4c49dc98 The day wehen vc-toggle-ready-only was a good idea is long gone.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94521
diff changeset
682 Otherwise, just change the read-only flag of the buffer.
46453
8a775aba60aa Don't bind vc-toggle-read-only to C-x C-q.
André Spiegel <spiegel@gnu.org>
parents: 43587
diff changeset
683
94540
55cb4c49dc98 The day wehen vc-toggle-ready-only was a good idea is long gone.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94521
diff changeset
684 If you bind this function to \\[toggle-read-only], then Emacs
55cb4c49dc98 The day wehen vc-toggle-ready-only was a good idea is long gone.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94521
diff changeset
685 will properly intercept all attempts to toggle the read-only flag
55cb4c49dc98 The day wehen vc-toggle-ready-only was a good idea is long gone.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94521
diff changeset
686 on version-controlled buffer."
10176
332014233a2c (vc-toggle-read-only): Accept prefix arg
Richard M. Stallman <rms@gnu.org>
parents: 9869
diff changeset
687 (interactive "P")
94540
55cb4c49dc98 The day wehen vc-toggle-ready-only was a good idea is long gone.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94521
diff changeset
688 (if (vc-backend buffer-file-name)
55cb4c49dc98 The day wehen vc-toggle-ready-only was a good idea is long gone.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94521
diff changeset
689 (error "Toggling the readability of a version controlled file is likely to wreak havoc.")
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
690 (toggle-read-only)))
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
691
32746
033bb57afe0c (vc-version-backup-file-name): New optional args MANUAL and REGEXP.
André Spiegel <spiegel@gnu.org>
parents: 32188
diff changeset
692 (defun vc-default-make-version-backups-p (backend file)
42021
ddb97861a688 (vc-checkout-model, vc-state, vc-workfile-version): Return nil if
André Spiegel <spiegel@gnu.org>
parents: 41956
diff changeset
693 "Return non-nil if unmodified versions should be backed up locally.
41956
48dc7989392b (vc-default-make-version-backups-p): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 40851
diff changeset
694 The default is to switch off this feature."
32127
1543b0fc904b (vc-before-save, vc-default-make-version-backups,
André Spiegel <spiegel@gnu.org>
parents: 32070
diff changeset
695 nil)
1543b0fc904b (vc-before-save, vc-default-make-version-backups,
André Spiegel <spiegel@gnu.org>
parents: 32070
diff changeset
696
32746
033bb57afe0c (vc-version-backup-file-name): New optional args MANUAL and REGEXP.
André Spiegel <spiegel@gnu.org>
parents: 32188
diff changeset
697 (defun vc-version-backup-file-name (file &optional rev manual regexp)
033bb57afe0c (vc-version-backup-file-name): New optional args MANUAL and REGEXP.
André Spiegel <spiegel@gnu.org>
parents: 32188
diff changeset
698 "Return a backup file name for REV or the current version of FILE.
033bb57afe0c (vc-version-backup-file-name): New optional args MANUAL and REGEXP.
André Spiegel <spiegel@gnu.org>
parents: 32188
diff changeset
699 If MANUAL is non-nil it means that a name for backups created by
033bb57afe0c (vc-version-backup-file-name): New optional args MANUAL and REGEXP.
André Spiegel <spiegel@gnu.org>
parents: 32188
diff changeset
700 the user should be returned; if REGEXP is non-nil that means to return
033bb57afe0c (vc-version-backup-file-name): New optional args MANUAL and REGEXP.
André Spiegel <spiegel@gnu.org>
parents: 32188
diff changeset
701 a regexp for matching all such backup files, regardless of the version."
32949
78fabc2762c4 (vc-version-backup-file-name): Use file.~<rev>~ for manual backups and
André Spiegel <spiegel@gnu.org>
parents: 32746
diff changeset
702 (if regexp
78fabc2762c4 (vc-version-backup-file-name): Use file.~<rev>~ for manual backups and
André Spiegel <spiegel@gnu.org>
parents: 32746
diff changeset
703 (concat (regexp-quote (file-name-nondirectory file))
74939
e58390f88130 (vc-version-backup-file-name): Revision names may be
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 74442
diff changeset
704 "\\.~.+" (unless manual "\\.") "~")
47918
022aa2332f91 (vc-insert-file): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 47244
diff changeset
705 (expand-file-name (concat (file-name-nondirectory file)
74939
e58390f88130 (vc-version-backup-file-name): Revision names may be
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 74442
diff changeset
706 ".~" (subst-char-in-string
85139
8ba0e30716a5 Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85114
diff changeset
707 ?/ ?_ (or rev (vc-working-revision file)))
32949
78fabc2762c4 (vc-version-backup-file-name): Use file.~<rev>~ for manual backups and
André Spiegel <spiegel@gnu.org>
parents: 32746
diff changeset
708 (unless manual ".") "~")
78fabc2762c4 (vc-version-backup-file-name): Use file.~<rev>~ for manual backups and
André Spiegel <spiegel@gnu.org>
parents: 32746
diff changeset
709 (file-name-directory file))))
32746
033bb57afe0c (vc-version-backup-file-name): New optional args MANUAL and REGEXP.
André Spiegel <spiegel@gnu.org>
parents: 32188
diff changeset
710
033bb57afe0c (vc-version-backup-file-name): New optional args MANUAL and REGEXP.
André Spiegel <spiegel@gnu.org>
parents: 32188
diff changeset
711 (defun vc-delete-automatic-version-backups (file)
033bb57afe0c (vc-version-backup-file-name): New optional args MANUAL and REGEXP.
André Spiegel <spiegel@gnu.org>
parents: 32188
diff changeset
712 "Delete all existing automatic version backups for FILE."
39389
6629bc0d69e5 (vc-delete-automatic-version-backups):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38373
diff changeset
713 (condition-case nil
82849
ea5864b698fd * vc-hooks.el (vc-registered): Use mapc instead of mapcar.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 82771
diff changeset
714 (mapc
39389
6629bc0d69e5 (vc-delete-automatic-version-backups):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38373
diff changeset
715 'delete-file
39417
c13780d8dbd2 (vc-delete-automatic-version-backups): Handle the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39389
diff changeset
716 (directory-files (or (file-name-directory file) default-directory) t
39389
6629bc0d69e5 (vc-delete-automatic-version-backups):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38373
diff changeset
717 (vc-version-backup-file-name file nil nil t)))
6629bc0d69e5 (vc-delete-automatic-version-backups):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38373
diff changeset
718 ;; Don't fail when the directory doesn't exist.
6629bc0d69e5 (vc-delete-automatic-version-backups):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38373
diff changeset
719 (file-error nil)))
32746
033bb57afe0c (vc-version-backup-file-name): New optional args MANUAL and REGEXP.
André Spiegel <spiegel@gnu.org>
parents: 32188
diff changeset
720
033bb57afe0c (vc-version-backup-file-name): New optional args MANUAL and REGEXP.
André Spiegel <spiegel@gnu.org>
parents: 32188
diff changeset
721 (defun vc-make-version-backup (file)
033bb57afe0c (vc-version-backup-file-name): New optional args MANUAL and REGEXP.
André Spiegel <spiegel@gnu.org>
parents: 32188
diff changeset
722 "Make a backup copy of FILE, which is assumed in sync with the repository.
033bb57afe0c (vc-version-backup-file-name): New optional args MANUAL and REGEXP.
André Spiegel <spiegel@gnu.org>
parents: 32188
diff changeset
723 Before doing that, check if there are any old backups and get rid of them."
32953
3632d408929e (vc-make-version-backup): Don't do it on MS-DOS without long file
André Spiegel <spiegel@gnu.org>
parents: 32949
diff changeset
724 (unless (and (fboundp 'msdos-long-file-names)
52385
c114a41b1a70 (vc-make-version-backup): Fix the change made on
Eli Zaretskii <eliz@gnu.org>
parents: 52302
diff changeset
725 (not (with-no-warnings (msdos-long-file-names))))
32953
3632d408929e (vc-make-version-backup): Don't do it on MS-DOS without long file
André Spiegel <spiegel@gnu.org>
parents: 32949
diff changeset
726 (vc-delete-automatic-version-backups file)
59978
c3afd6e6c992 (vc-make-version-backup): Ignore file-errors, e.g. directory not
André Spiegel <spiegel@gnu.org>
parents: 58641
diff changeset
727 (condition-case nil
c3afd6e6c992 (vc-make-version-backup): Ignore file-errors, e.g. directory not
André Spiegel <spiegel@gnu.org>
parents: 58641
diff changeset
728 (copy-file file (vc-version-backup-file-name file)
c3afd6e6c992 (vc-make-version-backup): Ignore file-errors, e.g. directory not
André Spiegel <spiegel@gnu.org>
parents: 58641
diff changeset
729 nil 'keep-date)
c3afd6e6c992 (vc-make-version-backup): Ignore file-errors, e.g. directory not
André Spiegel <spiegel@gnu.org>
parents: 58641
diff changeset
730 ;; It's ok if it doesn't work (e.g. directory not writable),
c3afd6e6c992 (vc-make-version-backup): Ignore file-errors, e.g. directory not
André Spiegel <spiegel@gnu.org>
parents: 58641
diff changeset
731 ;; since this is just for efficiency.
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59978
diff changeset
732 (file-error
59978
c3afd6e6c992 (vc-make-version-backup): Ignore file-errors, e.g. directory not
André Spiegel <spiegel@gnu.org>
parents: 58641
diff changeset
733 (message
c3afd6e6c992 (vc-make-version-backup): Ignore file-errors, e.g. directory not
André Spiegel <spiegel@gnu.org>
parents: 58641
diff changeset
734 (concat "Warning: Cannot make version backup; "
c3afd6e6c992 (vc-make-version-backup): Ignore file-errors, e.g. directory not
André Spiegel <spiegel@gnu.org>
parents: 58641
diff changeset
735 "diff/revert therefore not local"))))))
32127
1543b0fc904b (vc-before-save, vc-default-make-version-backups,
André Spiegel <spiegel@gnu.org>
parents: 32070
diff changeset
736
1543b0fc904b (vc-before-save, vc-default-make-version-backups,
André Spiegel <spiegel@gnu.org>
parents: 32070
diff changeset
737 (defun vc-before-save ()
1543b0fc904b (vc-before-save, vc-default-make-version-backups,
André Spiegel <spiegel@gnu.org>
parents: 32070
diff changeset
738 "Function to be called by `basic-save-buffer' (in files.el)."
1543b0fc904b (vc-before-save, vc-default-make-version-backups,
André Spiegel <spiegel@gnu.org>
parents: 32070
diff changeset
739 ;; If the file on disk is still in sync with the repository,
1543b0fc904b (vc-before-save, vc-default-make-version-backups,
André Spiegel <spiegel@gnu.org>
parents: 32070
diff changeset
740 ;; and version backups should be made, copy the file to
1543b0fc904b (vc-before-save, vc-default-make-version-backups,
André Spiegel <spiegel@gnu.org>
parents: 32070
diff changeset
741 ;; another name. This enables local diffs and local reverting.
94481
ad6c174910db Make `checkout-model' apply to filesets.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94207
diff changeset
742 (let ((file buffer-file-name)
ad6c174910db Make `checkout-model' apply to filesets.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94207
diff changeset
743 backend)
93316
709d31efe571 (vc-before-save): Be careful not to prevent saving the file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93239
diff changeset
744 (ignore-errors ;Be careful not to prevent saving the file.
94481
ad6c174910db Make `checkout-model' apply to filesets.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94207
diff changeset
745 (and (setq backend (vc-backend file))
93316
709d31efe571 (vc-before-save): Be careful not to prevent saving the file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93239
diff changeset
746 (vc-up-to-date-p file)
94563
a0bb8ca25a33 Clean up vc*-revision-granularity and vc*-checkout-model.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94548
diff changeset
747 (eq (vc-checkout-model backend (list file)) 'implicit)
93316
709d31efe571 (vc-before-save): Be careful not to prevent saving the file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93239
diff changeset
748 (vc-call make-version-backups-p file)
709d31efe571 (vc-before-save): Be careful not to prevent saving the file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93239
diff changeset
749 (vc-make-version-backup file)))))
32127
1543b0fc904b (vc-before-save, vc-default-make-version-backups,
André Spiegel <spiegel@gnu.org>
parents: 32070
diff changeset
750
94543
135f7ef84766 More preparation for removing dired.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94540
diff changeset
751 (declare-function vc-directory-resynch-file "vc" (file))
86234
860a7a8e779e * progmodes/octave-mod.el (inferior-octave-send-list-and-digest):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85319
diff changeset
752
12914
22f47b2375c1 (vc-fetch-master-properties): RCS case: get locking mode.
André Spiegel <spiegel@gnu.org>
parents: 12884
diff changeset
753 (defun vc-after-save ()
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
754 "Function to be called by `basic-save-buffer' (in files.el)."
31564
00efca34e7d0 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31405
diff changeset
755 ;; If the file in the current buffer is under version control,
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
756 ;; up-to-date, and locking is not used for the file, set
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
757 ;; the state to 'edited and redisplay the mode line.
94481
ad6c174910db Make `checkout-model' apply to filesets.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94207
diff changeset
758 (let* ((file buffer-file-name)
ad6c174910db Make `checkout-model' apply to filesets.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94207
diff changeset
759 (backend (vc-backend file)))
ad6c174910db Make `checkout-model' apply to filesets.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94207
diff changeset
760 (and backend
12967
ee545522ef2a (vc-utc-string): New function.
André Spiegel <spiegel@gnu.org>
parents: 12944
diff changeset
761 (or (and (equal (vc-file-getprop file 'vc-checkout-time)
ee545522ef2a (vc-utc-string): New function.
André Spiegel <spiegel@gnu.org>
parents: 12944
diff changeset
762 (nth 5 (file-attributes file)))
ee545522ef2a (vc-utc-string): New function.
André Spiegel <spiegel@gnu.org>
parents: 12944
diff changeset
763 ;; File has been saved in the same second in which
ee545522ef2a (vc-utc-string): New function.
André Spiegel <spiegel@gnu.org>
parents: 12944
diff changeset
764 ;; it was checked out. Clear the checkout-time
ee545522ef2a (vc-utc-string): New function.
André Spiegel <spiegel@gnu.org>
parents: 12944
diff changeset
765 ;; to avoid confusion.
ee545522ef2a (vc-utc-string): New function.
André Spiegel <spiegel@gnu.org>
parents: 12944
diff changeset
766 (vc-file-setprop file 'vc-checkout-time nil))
ee545522ef2a (vc-utc-string): New function.
André Spiegel <spiegel@gnu.org>
parents: 12944
diff changeset
767 t)
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
768 (vc-up-to-date-p file)
94563
a0bb8ca25a33 Clean up vc*-revision-granularity and vc*-checkout-model.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94548
diff changeset
769 (eq (vc-checkout-model backend (list file)) 'implicit)
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
770 (vc-file-setprop file 'vc-state 'edited)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
771 (vc-mode-line file)
93956
bfc762f0b49c * vc-hooks.el (vc-state): Add new state `conflict'.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93940
diff changeset
772 (when (featurep 'vc)
bfc762f0b49c * vc-hooks.el (vc-state): Add new state `conflict'.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93940
diff changeset
773 ;; If VC is not loaded, then there can't be
bfc762f0b49c * vc-hooks.el (vc-state): Add new state `conflict'.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93940
diff changeset
774 ;; any VC Dired buffer to synchronize.
94543
135f7ef84766 More preparation for removing dired.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94540
diff changeset
775 (vc-directory-resynch-file file)))))
12884
f47248851f26 (vc-fetch-master-properties): Recognize cvs status "Unresolved Conflict".
André Spiegel <spiegel@gnu.org>
parents: 12874
diff changeset
776
78822
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
777 (defvar vc-menu-entry
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
778 '(menu-item "Version Control" vc-menu-map
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
779 :filter vc-menu-map-filter))
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
780
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
781 (when (boundp 'menu-bar-tools-menu)
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
782 ;; We do not need to worry here about the placement of this entry
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
783 ;; because menu-bar.el has already created the proper spot for us
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
784 ;; and this will simply use it.
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
785 (define-key menu-bar-tools-menu [vc] vc-menu-entry))
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
786
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
787 (defconst vc-mode-line-map
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
788 (let ((map (make-sparse-keymap)))
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
789 (define-key map [mode-line down-mouse-1] vc-menu-entry)
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
790 map))
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
791
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
792 (defun vc-mode-line (file)
2491
5f3061858f47 vc-mode: name change.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2232
diff changeset
793 "Set `vc-mode' to display type of version control for FILE.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
794 The value is set in the current buffer, which should be the buffer
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
795 visiting FILE."
32188
a771b5a6fa69 (vc-mode-line): Fix interactive spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32127
diff changeset
796 (interactive (list buffer-file-name))
50879
9cd7a1a60ba0 Consistently use buffer-file-name variable rather than function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49620
diff changeset
797 (let ((backend (vc-backend file)))
9cd7a1a60ba0 Consistently use buffer-file-name variable rather than function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49620
diff changeset
798 (if (not backend)
9cd7a1a60ba0 Consistently use buffer-file-name variable rather than function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49620
diff changeset
799 (setq vc-mode nil)
82070
62454e8b7dd5 (vc-mode-line-map): New const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82058
diff changeset
800 (let* ((ml-string (vc-call mode-line-string file))
62454e8b7dd5 (vc-mode-line-map): New const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82058
diff changeset
801 (ml-echo (get-text-property 0 'help-echo ml-string)))
62454e8b7dd5 (vc-mode-line-map): New const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82058
diff changeset
802 (setq vc-mode
62454e8b7dd5 (vc-mode-line-map): New const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82058
diff changeset
803 (concat
62454e8b7dd5 (vc-mode-line-map): New const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82058
diff changeset
804 " "
62454e8b7dd5 (vc-mode-line-map): New const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82058
diff changeset
805 (if (null vc-display-status)
62454e8b7dd5 (vc-mode-line-map): New const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82058
diff changeset
806 (symbol-name backend)
62454e8b7dd5 (vc-mode-line-map): New const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82058
diff changeset
807 (propertize
62454e8b7dd5 (vc-mode-line-map): New const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82058
diff changeset
808 ml-string
62454e8b7dd5 (vc-mode-line-map): New const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82058
diff changeset
809 'mouse-face 'mode-line-highlight
91584
c72722ab4a01 (vc-prefix-map): Bind `vc-status' to "?".
Sam Steingold <sds@gnu.org>
parents: 87649
diff changeset
810 'help-echo
82070
62454e8b7dd5 (vc-mode-line-map): New const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82058
diff changeset
811 (concat (or ml-echo
62454e8b7dd5 (vc-mode-line-map): New const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82058
diff changeset
812 (format "File under the %s version control system"
62454e8b7dd5 (vc-mode-line-map): New const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82058
diff changeset
813 backend))
62454e8b7dd5 (vc-mode-line-map): New const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82058
diff changeset
814 "\nmouse-1: Version Control menu")
62454e8b7dd5 (vc-mode-line-map): New const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82058
diff changeset
815 'local-map vc-mode-line-map)))))
50879
9cd7a1a60ba0 Consistently use buffer-file-name variable rather than function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49620
diff changeset
816 ;; If the file is locked by some other user, make
9cd7a1a60ba0 Consistently use buffer-file-name variable rather than function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49620
diff changeset
817 ;; the buffer read-only. Like this, even root
9cd7a1a60ba0 Consistently use buffer-file-name variable rather than function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49620
diff changeset
818 ;; cannot modify a file that someone else has locked.
9cd7a1a60ba0 Consistently use buffer-file-name variable rather than function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49620
diff changeset
819 (and (equal file buffer-file-name)
9cd7a1a60ba0 Consistently use buffer-file-name variable rather than function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49620
diff changeset
820 (stringp (vc-state file))
9cd7a1a60ba0 Consistently use buffer-file-name variable rather than function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49620
diff changeset
821 (setq buffer-read-only t))
9cd7a1a60ba0 Consistently use buffer-file-name variable rather than function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49620
diff changeset
822 ;; If the user is root, and the file is not owner-writable,
9cd7a1a60ba0 Consistently use buffer-file-name variable rather than function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49620
diff changeset
823 ;; then pretend that we can't write it
9cd7a1a60ba0 Consistently use buffer-file-name variable rather than function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49620
diff changeset
824 ;; even though we can (because root can write anything).
50895
8b4ee8a18c21 (vc-default-workfile-unchanged-p): Pass nil
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50880
diff changeset
825 ;; This way, even root cannot modify a file that isn't locked.
8b4ee8a18c21 (vc-default-workfile-unchanged-p): Pass nil
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50880
diff changeset
826 (and (equal file buffer-file-name)
8b4ee8a18c21 (vc-default-workfile-unchanged-p): Pass nil
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50880
diff changeset
827 (not buffer-read-only)
50879
9cd7a1a60ba0 Consistently use buffer-file-name variable rather than function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49620
diff changeset
828 (zerop (user-real-uid))
9cd7a1a60ba0 Consistently use buffer-file-name variable rather than function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49620
diff changeset
829 (zerop (logand (file-modes buffer-file-name) 128))
9cd7a1a60ba0 Consistently use buffer-file-name variable rather than function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49620
diff changeset
830 (setq buffer-read-only t)))
9cd7a1a60ba0 Consistently use buffer-file-name variable rather than function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49620
diff changeset
831 (force-mode-line-update)
9cd7a1a60ba0 Consistently use buffer-file-name variable rather than function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49620
diff changeset
832 backend))
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
833
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
834 (defun vc-default-mode-line-string (backend file)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
835 "Return string for placement in modeline by `vc-mode-line' for FILE.
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
836 Format:
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
837
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
838 \"BACKEND-REV\" if the file is up-to-date
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
839 \"BACKEND:REV\" if the file is edited (or locked by the calling user)
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
840 \"BACKEND:LOCKER:REV\" if the file is locked by somebody else
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
841
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
842 This function assumes that the file is registered."
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
843 (setq backend (symbol-name backend))
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
844 (let ((state (vc-state file))
81815
7ac8c70c6834 * vc-hooks.el (vc-default-mode-line-string): Add a mouse face,
Dan Nicolaescu <dann@ics.uci.edu>
parents: 81709
diff changeset
845 (state-echo nil)
85139
8ba0e30716a5 Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85114
diff changeset
846 (rev (vc-working-revision file)))
81815
7ac8c70c6834 * vc-hooks.el (vc-default-mode-line-string): Add a mouse face,
Dan Nicolaescu <dann@ics.uci.edu>
parents: 81709
diff changeset
847 (propertize
7ac8c70c6834 * vc-hooks.el (vc-default-mode-line-string): Add a mouse face,
Dan Nicolaescu <dann@ics.uci.edu>
parents: 81709
diff changeset
848 (cond ((or (eq state 'up-to-date)
94521
2a61c5f918a5 Change 'needs-patch to 'needs-update.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94481
diff changeset
849 (eq state 'needs-update))
81815
7ac8c70c6834 * vc-hooks.el (vc-default-mode-line-string): Add a mouse face,
Dan Nicolaescu <dann@ics.uci.edu>
parents: 81709
diff changeset
850 (setq state-echo "Up to date file")
7ac8c70c6834 * vc-hooks.el (vc-default-mode-line-string): Add a mouse face,
Dan Nicolaescu <dann@ics.uci.edu>
parents: 81709
diff changeset
851 (concat backend "-" rev))
7ac8c70c6834 * vc-hooks.el (vc-default-mode-line-string): Add a mouse face,
Dan Nicolaescu <dann@ics.uci.edu>
parents: 81709
diff changeset
852 ((stringp state)
7ac8c70c6834 * vc-hooks.el (vc-default-mode-line-string): Add a mouse face,
Dan Nicolaescu <dann@ics.uci.edu>
parents: 81709
diff changeset
853 (setq state-echo (concat "File locked by" state))
7ac8c70c6834 * vc-hooks.el (vc-default-mode-line-string): Add a mouse face,
Dan Nicolaescu <dann@ics.uci.edu>
parents: 81709
diff changeset
854 (concat backend ":" state ":" rev))
93124
97c5b398eee4 * vc-hooks.el (vc-default-mode-line-string): Add case for added files.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92345
diff changeset
855 ((eq state 'added)
97c5b398eee4 * vc-hooks.el (vc-default-mode-line-string): Add case for added files.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92345
diff changeset
856 (setq state-echo "Locally added file")
97c5b398eee4 * vc-hooks.el (vc-default-mode-line-string): Add case for added files.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92345
diff changeset
857 (concat backend "@" rev))
93956
bfc762f0b49c * vc-hooks.el (vc-state): Add new state `conflict'.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93940
diff changeset
858 ((eq state 'conflict)
bfc762f0b49c * vc-hooks.el (vc-state): Add new state `conflict'.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93940
diff changeset
859 (setq state-echo "File contains conflicts after the last merge")
bfc762f0b49c * vc-hooks.el (vc-state): Add new state `conflict'.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93940
diff changeset
860 (concat backend "!" rev))
93239
3d37b67e5a01 (vc-default-mode-line-string): Deal with 'removed
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93196
diff changeset
861 ((eq state 'removed)
3d37b67e5a01 (vc-default-mode-line-string): Deal with 'removed
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93196
diff changeset
862 (setq state-echo "File removed from the VC system")
3d37b67e5a01 (vc-default-mode-line-string): Deal with 'removed
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93196
diff changeset
863 (concat backend "!" rev))
3d37b67e5a01 (vc-default-mode-line-string): Deal with 'removed
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93196
diff changeset
864 ((eq state 'missing)
3d37b67e5a01 (vc-default-mode-line-string): Deal with 'removed
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93196
diff changeset
865 (setq state-echo "File tracked by the VC system, but missing from the file system")
93940
64ee685db81b (vc-default-mode-line-string): Use ? for missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93501
diff changeset
866 (concat backend "?" rev))
81815
7ac8c70c6834 * vc-hooks.el (vc-default-mode-line-string): Add a mouse face,
Dan Nicolaescu <dann@ics.uci.edu>
parents: 81709
diff changeset
867 (t
7ac8c70c6834 * vc-hooks.el (vc-default-mode-line-string): Add a mouse face,
Dan Nicolaescu <dann@ics.uci.edu>
parents: 81709
diff changeset
868 ;; Not just for the 'edited state, but also a fallback
7ac8c70c6834 * vc-hooks.el (vc-default-mode-line-string): Add a mouse face,
Dan Nicolaescu <dann@ics.uci.edu>
parents: 81709
diff changeset
869 ;; for all other states. Think about different symbols
94521
2a61c5f918a5 Change 'needs-patch to 'needs-update.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94481
diff changeset
870 ;; for 'needs-update and 'needs-merge.
82027
1350ba0c0448 * vc-cvs.el (vc-cvs-mode-line-string): Add support for tooltips
Dan Nicolaescu <dann@ics.uci.edu>
parents: 81987
diff changeset
871 (setq state-echo "Locally modified file")
81815
7ac8c70c6834 * vc-hooks.el (vc-default-mode-line-string): Add a mouse face,
Dan Nicolaescu <dann@ics.uci.edu>
parents: 81709
diff changeset
872 (concat backend ":" rev)))
82058
b9e06163e85b (vc-stay-local-p): Fix bug: Avoid remove-if-not.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 82027
diff changeset
873 'help-echo (concat state-echo " under the " backend
82027
1350ba0c0448 * vc-cvs.el (vc-cvs-mode-line-string): Add support for tooltips
Dan Nicolaescu <dann@ics.uci.edu>
parents: 81987
diff changeset
874 " version control system"))))
11598
540868154dc9 (vc-buffer-backend): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10176
diff changeset
875
14647
b1a88c3a6912 (vc-follow-link): New function.
André Spiegel <spiegel@gnu.org>
parents: 14622
diff changeset
876 (defun vc-follow-link ()
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
877 "If current buffer visits a symbolic link, visit the real file.
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
878 If the real file is already visited in another buffer, make that buffer
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
879 current, and kill the buffer that visits the link."
15161
ea07411f268e (vc-follow-link, vc-find-file-hook):
Richard M. Stallman <rms@gnu.org>
parents: 14734
diff changeset
880 (let* ((truename (abbreviate-file-name (file-chase-links buffer-file-name)))
14673
8f8a4224147b (vc-follow-link): Simplify by taking advantage
Richard M. Stallman <rms@gnu.org>
parents: 14647
diff changeset
881 (true-buffer (find-buffer-visiting truename))
8f8a4224147b (vc-follow-link): Simplify by taking advantage
Richard M. Stallman <rms@gnu.org>
parents: 14647
diff changeset
882 (this-buffer (current-buffer)))
8f8a4224147b (vc-follow-link): Simplify by taking advantage
Richard M. Stallman <rms@gnu.org>
parents: 14647
diff changeset
883 (if (eq true-buffer this-buffer)
8f8a4224147b (vc-follow-link): Simplify by taking advantage
Richard M. Stallman <rms@gnu.org>
parents: 14647
diff changeset
884 (progn
14674
f585d3bf3a73 (vc-follow-link): Kill buffer before creating new one.
Richard M. Stallman <rms@gnu.org>
parents: 14673
diff changeset
885 (kill-buffer this-buffer)
14673
8f8a4224147b (vc-follow-link): Simplify by taking advantage
Richard M. Stallman <rms@gnu.org>
parents: 14647
diff changeset
886 ;; In principle, we could do something like set-visited-file-name.
8f8a4224147b (vc-follow-link): Simplify by taking advantage
Richard M. Stallman <rms@gnu.org>
parents: 14647
diff changeset
887 ;; However, it can't be exactly the same as set-visited-file-name.
8f8a4224147b (vc-follow-link): Simplify by taking advantage
Richard M. Stallman <rms@gnu.org>
parents: 14647
diff changeset
888 ;; I'm not going to work out the details right now. -- rms.
14674
f585d3bf3a73 (vc-follow-link): Kill buffer before creating new one.
Richard M. Stallman <rms@gnu.org>
parents: 14673
diff changeset
889 (set-buffer (find-file-noselect truename)))
14673
8f8a4224147b (vc-follow-link): Simplify by taking advantage
Richard M. Stallman <rms@gnu.org>
parents: 14647
diff changeset
890 (set-buffer true-buffer)
8f8a4224147b (vc-follow-link): Simplify by taking advantage
Richard M. Stallman <rms@gnu.org>
parents: 14647
diff changeset
891 (kill-buffer this-buffer))))
14647
b1a88c3a6912 (vc-follow-link): New function.
André Spiegel <spiegel@gnu.org>
parents: 14622
diff changeset
892
54397
fcc26abed3ba (vc-handled-backends): Add Arch. Move MCVS down.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
893 (defun vc-default-find-file-hook (backend)
fcc26abed3ba (vc-handled-backends): Add Arch. Move MCVS down.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
894 nil)
fcc26abed3ba (vc-handled-backends): Add Arch. Move MCVS down.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
895
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
896 (defun vc-find-file-hook ()
50880
c4ef9b4c327f (find-file-hook, find-file-not-found-hook): Don't use the old ...-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50879
diff changeset
897 "Function for `find-file-hook' activating VC mode if appropriate."
2218
13be90dfef0c Merge today's change by eric with everybody else's
Paul Eggert <eggert@twinsun.com>
parents: 2213
diff changeset
898 ;; Recompute whether file is version controlled,
13be90dfef0c Merge today's change by eric with everybody else's
Paul Eggert <eggert@twinsun.com>
parents: 2213
diff changeset
899 ;; if user has killed the buffer and revisited.
43449
a6beccc5505e Patch by Jonathan Kamens <jik@kamens.brookline.ma.us>.
André Spiegel <spiegel@gnu.org>
parents: 42021
diff changeset
900 (if vc-mode
a6beccc5505e Patch by Jonathan Kamens <jik@kamens.brookline.ma.us>.
André Spiegel <spiegel@gnu.org>
parents: 42021
diff changeset
901 (setq vc-mode nil))
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
902 (when buffer-file-name
11598
540868154dc9 (vc-buffer-backend): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10176
diff changeset
903 (vc-file-clearprops buffer-file-name)
94692
891cb8f8888f More decoupling of vc-dispatcher.el from vc.el.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94678
diff changeset
904 (add-hook 'mode-line-hook 'vc-mode-line nil t)
11598
540868154dc9 (vc-buffer-backend): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10176
diff changeset
905 (cond
81834
1ec5a70aa56f (vc-find-file-hook): Use with-demoted-errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81815
diff changeset
906 ((with-demoted-errors (vc-backend buffer-file-name))
51370
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
907 ;; Compute the state and put it in the modeline.
11598
540868154dc9 (vc-buffer-backend): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10176
diff changeset
908 (vc-mode-line buffer-file-name)
51370
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
909 (unless vc-make-backup-files
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
910 ;; Use this variable, not make-backup-files,
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
911 ;; because this is for things that depend on the file name.
54397
fcc26abed3ba (vc-handled-backends): Add Arch. Move MCVS down.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
912 (set (make-local-variable 'backup-inhibited) t))
fcc26abed3ba (vc-handled-backends): Add Arch. Move MCVS down.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
913 ;; Let the backend setup any buffer-local things he needs.
fcc26abed3ba (vc-handled-backends): Add Arch. Move MCVS down.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
914 (vc-call-backend (vc-backend buffer-file-name) 'find-file-hook))
57532
53338d8522cb (vc-find-file-hook): Call vc-backend with absolute name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57079
diff changeset
915 ((let ((link-type (and (file-symlink-p buffer-file-name)
53338d8522cb (vc-find-file-hook): Call vc-backend with absolute name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57079
diff changeset
916 (vc-backend (file-chase-links buffer-file-name)))))
51370
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
917 (cond ((not link-type) nil) ;Nothing to do.
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
918 ((eq vc-follow-symlinks nil)
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
919 (message
14142
c9cb9dbb2d40 (vc-follow-symlinks): New variable.
André Spiegel <spiegel@gnu.org>
parents: 14040
diff changeset
920 "Warning: symbolic link to %s-controlled source file" link-type))
51370
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
921 ((or (not (eq vc-follow-symlinks 'ask))
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
922 ;; If we already visited this file by following
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
923 ;; the link, don't ask again if we try to visit
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
924 ;; it again. GUD does that, and repeated questions
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
925 ;; are painful.
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
926 (get-file-buffer
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
927 (abbreviate-file-name
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
928 (file-chase-links buffer-file-name))))
47918
022aa2332f91 (vc-insert-file): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 47244
diff changeset
929
51370
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
930 (vc-follow-link)
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
931 (message "Followed link to %s" buffer-file-name)
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
932 (vc-find-file-hook))
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
933 (t
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
934 (if (yes-or-no-p (format
14142
c9cb9dbb2d40 (vc-follow-symlinks): New variable.
André Spiegel <spiegel@gnu.org>
parents: 14040
diff changeset
935 "Symbolic link to %s-controlled source file; follow link? " link-type))
51370
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
936 (progn (vc-follow-link)
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
937 (message "Followed link to %s" buffer-file-name)
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
938 (vc-find-file-hook))
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
939 (message
14142
c9cb9dbb2d40 (vc-follow-symlinks): New variable.
André Spiegel <spiegel@gnu.org>
parents: 14040
diff changeset
940 "Warning: editing through the link bypasses version control")
51370
a7a449bb9443 (vc-call-backend): Give better error message when backend function is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50895
diff changeset
941 ))))))))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
942
50880
c4ef9b4c327f (find-file-hook, find-file-not-found-hook): Don't use the old ...-hooks.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50879
diff changeset
943 (add-hook 'find-file-hook 'vc-find-file-hook)
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
944
38373
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
945 ;; more hooks, this time for file-not-found
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
946 (defun vc-file-not-found-hook ()
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
947 "When file is not found, try to check it out from version control.
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
948 Returns t if checkout was successful, nil otherwise.
52055
8322fd2e3685 (vc-file-not-found-hook): Brr. Improve last doc fix.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 52053
diff changeset
949 Used in `find-file-not-found-functions'."
22947
f20bf5cd31d9 (vc-file-not-found-hook): Call vc-file-clearprops.
Richard M. Stallman <rms@gnu.org>
parents: 22112
diff changeset
950 ;; When a file does not exist, ignore cached info about it
f20bf5cd31d9 (vc-file-not-found-hook): Call vc-file-clearprops.
Richard M. Stallman <rms@gnu.org>
parents: 22112
diff changeset
951 ;; from a previous visit.
f20bf5cd31d9 (vc-file-not-found-hook): Call vc-file-clearprops.
Richard M. Stallman <rms@gnu.org>
parents: 22112
diff changeset
952 (vc-file-clearprops buffer-file-name)
54529
a7faa61c45b5 (vc-default-find-file-not-found-hook): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54464
diff changeset
953 (let ((backend (vc-backend buffer-file-name)))
94207
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
954 (when backend (vc-call-backend backend 'find-file-not-found-hook))))
54529
a7faa61c45b5 (vc-default-find-file-not-found-hook): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54464
diff changeset
955
a7faa61c45b5 (vc-default-find-file-not-found-hook): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54464
diff changeset
956 (defun vc-default-find-file-not-found-hook (backend)
78520
318e4215e076 (vc-default-find-file-not-found-hook): Do nothing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78404
diff changeset
957 ;; This used to do what vc-rcs-find-file-not-found-hook does, but it only
318e4215e076 (vc-default-find-file-not-found-hook): Do nothing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78404
diff changeset
958 ;; really makes sense for RCS. For other backends, better not do anything.
318e4215e076 (vc-default-find-file-not-found-hook): Do nothing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78404
diff changeset
959 nil)
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
960
52051
3507a2fac9b5 (vc-default-registered, vc-make-version-backup): Use with-no-warnings.
André Spiegel <spiegel@gnu.org>
parents: 51761
diff changeset
961 (add-hook 'find-file-not-found-functions 'vc-file-not-found-hook)
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
962
11598
540868154dc9 (vc-buffer-backend): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10176
diff changeset
963 (defun vc-kill-buffer-hook ()
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
964 "Discard VC info about a file when we kill its buffer."
94207
2aa6d908ffad * vc-hooks.el (vc-insert-file, vc-state, vc-working-revision)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94190
diff changeset
965 (when buffer-file-name (vc-file-clearprops buffer-file-name)))
11598
540868154dc9 (vc-buffer-backend): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10176
diff changeset
966
47003
fe0d9d5309e4 (vc-kill-buffer-hook): Add it to kill-buffer-hook again.
André Spiegel <spiegel@gnu.org>
parents: 46723
diff changeset
967 (add-hook 'kill-buffer-hook 'vc-kill-buffer-hook)
11598
540868154dc9 (vc-buffer-backend): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10176
diff changeset
968
38373
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
969 ;; Now arrange for (autoloaded) bindings of the main package.
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
970 ;; Bindings for this have to go in the global map, as we'll often
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
971 ;; want to call them from random buffers.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
972
38373
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
973 ;; Autoloading works fine, but it prevents shortcuts from appearing
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
974 ;; in the menu because they don't exist yet when the menu is built.
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
975 ;; (autoload 'vc-prefix-map "vc" nil nil 'keymap)
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
976 (defvar vc-prefix-map
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
977 (let ((map (make-sparse-keymap)))
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
978 (define-key map "a" 'vc-update-change-log)
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
979 (define-key map "b" 'vc-switch-backend)
81958
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
980 (define-key map "c" 'vc-rollback)
94106
9294e3bd7d46 Rename vc-status to vc-dir and the vc-status var to vc-ewoc.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93956
diff changeset
981 (define-key map "d" 'vc-dir)
38373
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
982 (define-key map "g" 'vc-annotate)
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
983 (define-key map "h" 'vc-insert-headers)
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
984 (define-key map "i" 'vc-register)
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
985 (define-key map "l" 'vc-print-log)
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
986 (define-key map "m" 'vc-merge)
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
987 (define-key map "r" 'vc-retrieve-snapshot)
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
988 (define-key map "s" 'vc-create-snapshot)
81958
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
989 (define-key map "u" 'vc-revert)
38373
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
990 (define-key map "v" 'vc-next-action)
81958
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
991 (define-key map "+" 'vc-update)
38373
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
992 (define-key map "=" 'vc-diff)
85169
708abc311fa6 Follow through on the VC terminology change (version -> revision).
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85157
diff changeset
993 (define-key map "~" 'vc-revision-other-window)
94106
9294e3bd7d46 Rename vc-status to vc-dir and the vc-status var to vc-ewoc.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93956
diff changeset
994 ;; `vc-dir' is a not-quite-ready replacement for `vc-directory'
9294e3bd7d46 Rename vc-status to vc-dir and the vc-status var to vc-ewoc.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93956
diff changeset
995 ;; (define-key map "?" 'vc-dir)
38373
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
996 map))
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
997 (fset 'vc-prefix-map vc-prefix-map)
31382
cde9770b21e0 Minor doc fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 27262
diff changeset
998 (define-key global-map "\C-xv" 'vc-prefix-map)
8982
2a81d1c79162 (vc-menu-map): Set up menu items.
Richard M. Stallman <rms@gnu.org>
parents: 7568
diff changeset
999
78822
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1000 (defvar vc-menu-map
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1001 (let ((map (make-sparse-keymap "Version Control")))
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1002 ;;(define-key map [show-files]
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1003 ;; '("Show Files under VC" . (vc-directory t)))
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1004 (define-key map [vc-retrieve-snapshot]
91855
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1005 '(menu-item "Retrieve Snapshot" vc-retrieve-snapshot
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1006 :help "Retrieve snapshot"))
78822
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1007 (define-key map [vc-create-snapshot]
91855
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1008 '(menu-item "Create Snapshot" vc-create-snapshot
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1009 :help "Create Snapshot"))
78822
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1010 (define-key map [separator1] '("----"))
91954
97acdba31c63 Kill eol whitespace; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91855
diff changeset
1011 (define-key map [vc-annotate]
91855
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1012 '(menu-item "Annotate" vc-annotate
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1013 :help "Display the edit history of the current file using colors"))
91954
97acdba31c63 Kill eol whitespace; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91855
diff changeset
1014 (define-key map [vc-rename-file]
91855
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1015 '(menu-item "Rename File" vc-rename-file
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1016 :help "Rename file"))
85169
708abc311fa6 Follow through on the VC terminology change (version -> revision).
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85157
diff changeset
1017 (define-key map [vc-revision-other-window]
91855
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1018 '(menu-item "Show Other Version" vc-revision-other-window
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1019 :help "Visit another version of the current file in another window"))
91954
97acdba31c63 Kill eol whitespace; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91855
diff changeset
1020 (define-key map [vc-diff]
91855
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1021 '(menu-item "Compare with Base Version" vc-diff
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1022 :help "Compare file set with the base version"))
78822
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1023 (define-key map [vc-update-change-log]
91855
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1024 '(menu-item "Update ChangeLog" vc-update-change-log
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1025 :help "Find change log file and add entries from recent version control logs"))
91954
97acdba31c63 Kill eol whitespace; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91855
diff changeset
1026 (define-key map [vc-print-log]
91855
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1027 '(menu-item "Show History" vc-print-log
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1028 :help "List the change log of the current file set in a window"))
78822
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1029 (define-key map [separator2] '("----"))
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1030 (define-key map [vc-insert-header]
91855
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1031 '(menu-item "Insert Header" vc-insert-headers
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1032 :help "Insert headers into a file for use with a version control system.
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1033 "))
91954
97acdba31c63 Kill eol whitespace; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91855
diff changeset
1034 (define-key map [undo]
91855
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1035 '(menu-item "Undo Last Check-In" vc-rollback
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1036 :help "Remove the most recent changeset committed to the repository"))
82499
3ecf9562ce0b (vc-menu-entry): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82365
diff changeset
1037 (define-key map [vc-revert]
91855
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1038 '(menu-item "Revert to Base Version" vc-revert
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1039 :help "Revert working copies of the selected file set to their repository contents"))
78822
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1040 (define-key map [vc-update]
91855
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1041 '(menu-item "Update to Latest Version" vc-update
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1042 :help "Update the current fileset's files to their tip revisions"))
91954
97acdba31c63 Kill eol whitespace; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91855
diff changeset
1043 (define-key map [vc-next-action]
91855
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1044 '(menu-item "Check In/Out" vc-next-action
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1045 :help "Do the next logical version control operation on the current fileset"))
91954
97acdba31c63 Kill eol whitespace; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 91855
diff changeset
1046 (define-key map [vc-register]
91855
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1047 '(menu-item "Register" vc-register
0ea367242241 * vc-hooks.el (vc-menu-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91744
diff changeset
1048 :help "Register file set into a version control system"))
94106
9294e3bd7d46 Rename vc-status to vc-dir and the vc-status var to vc-ewoc.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93956
diff changeset
1049 (define-key map [vc-dir]
9294e3bd7d46 Rename vc-status to vc-dir and the vc-status var to vc-ewoc.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93956
diff changeset
1050 '(menu-item "VC Dir" vc-dir
93956
bfc762f0b49c * vc-hooks.el (vc-state): Add new state `conflict'.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93940
diff changeset
1051 :help "Show the VC status of files in a directory"))
78822
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1052 map))
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1053
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1054 (defalias 'vc-menu-map vc-menu-map)
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1055
93501
f6fe1c1d8ba6 (vc-responsible-backend): Declare as function.
Glenn Morris <rgm@gnu.org>
parents: 93381
diff changeset
1056 (declare-function vc-responsible-backend "vc" (file &optional register))
f6fe1c1d8ba6 (vc-responsible-backend): Declare as function.
Glenn Morris <rgm@gnu.org>
parents: 93381
diff changeset
1057
78822
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1058 (defun vc-menu-map-filter (orig-binding)
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1059 (if (and (symbolp orig-binding) (fboundp orig-binding))
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1060 (setq orig-binding (indirect-function orig-binding)))
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1061 (let ((ext-binding
93381
e6a15031fc81 (vc-menu-map-filter): Be more careful when finding
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93316
diff changeset
1062 (when vc-mode
93501
f6fe1c1d8ba6 (vc-responsible-backend): Declare as function.
Glenn Morris <rgm@gnu.org>
parents: 93381
diff changeset
1063 (vc-call-backend
93381
e6a15031fc81 (vc-menu-map-filter): Be more careful when finding
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93316
diff changeset
1064 (if buffer-file-name
e6a15031fc81 (vc-menu-map-filter): Be more careful when finding
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93316
diff changeset
1065 (vc-backend buffer-file-name)
e6a15031fc81 (vc-menu-map-filter): Be more careful when finding
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93316
diff changeset
1066 (vc-responsible-backend default-directory))
e6a15031fc81 (vc-menu-map-filter): Be more careful when finding
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93316
diff changeset
1067 'extra-menu))))
78822
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1068 ;; Give the VC backend a chance to add menu entries
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1069 ;; specific for that backend.
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1070 (if (null ext-binding)
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1071 orig-binding
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1072 (append orig-binding
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1073 '((ext-menu-separator "---"))
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1074 ext-binding))))
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1075
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1076 (defun vc-default-extra-menu (backend)
1926a08e8926 * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 78792
diff changeset
1077 nil)
14622
3d47471d947d Move all the put's for menu-enable props to top level.
Karl Heuer <kwzh@gnu.org>
parents: 14566
diff changeset
1078
38373
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
1079 ;; These are not correct and it's not currently clear how doing it
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
1080 ;; better (with more complicated expressions) might slow things down
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
1081 ;; on older systems.
23255
6b2b3ceeb3cd (vc-menu-map): Change the vc-directory label. Don't
Dave Love <fx@gnu.org>
parents: 22947
diff changeset
1082
38373
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
1083 ;;(put 'vc-rename-file 'menu-enable 'vc-mode)
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
1084 ;;(put 'vc-annotate 'menu-enable '(eq (vc-buffer-backend) 'CVS))
85169
708abc311fa6 Follow through on the VC terminology change (version -> revision).
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85157
diff changeset
1085 ;;(put 'vc-revision-other-window 'menu-enable 'vc-mode)
38373
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
1086 ;;(put 'vc-diff 'menu-enable 'vc-mode)
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
1087 ;;(put 'vc-update-change-log 'menu-enable
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
1088 ;; '(member (vc-buffer-backend) '(RCS CVS)))
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
1089 ;;(put 'vc-print-log 'menu-enable 'vc-mode)
81958
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
1090 ;;(put 'vc-rollback 'menu-enable 'vc-mode)
55e9cc4986ff Generalize stay-local-p to operatre on lists of files.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81902
diff changeset
1091 ;;(put 'vc-revert 'menu-enable 'vc-mode)
38373
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
1092 ;;(put 'vc-insert-headers 'menu-enable 'vc-mode)
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
1093 ;;(put 'vc-next-action 'menu-enable 'vc-mode)
10cf63a2727d (vc-mode): Dummy function for doc purposes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33856
diff changeset
1094 ;;(put 'vc-register 'menu-enable '(and buffer-file-name (not vc-mode)))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1095
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1096 (provide 'vc-hooks)
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1097
57079
6f014cde9d81 (vc-ignore-dir-regexp): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55099
diff changeset
1098 ;; arch-tag: 2e5a6fa7-1d30-48e2-8bd0-e3d335f04f32
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1099 ;;; vc-hooks.el ends here