Mercurial > emacs
annotate lisp/vc-arch.el @ 98182:19ec1646fe6c
The Rmail/mbox merge has been abandoned in favor of a restart using
the current rmail.el file. A comprehensive list of changes will be
supplied when pmail.el is morphed back into rmail.el
The current status is that pmail.el supports basic Rmail navigation
(no summary support) and shows the current message in a special
buffer using buffer-swap-text. No decoding is done yet. That is the
next step.
author | Paul Reilly <pmr@pajato.com> |
---|---|
date | Mon, 15 Sep 2008 20:56:53 +0000 |
parents | 7df3d9a17631 |
children | 58d0fa1979cb |
rev | line source |
---|---|
54396 | 1 ;;; vc-arch.el --- VC backend for the Arch version-control system |
2 | |
79721 | 3 ;; Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
54396 | 4 |
5 ;; Author: FSF (see vc.el for full credits) | |
6 ;; Maintainer: Stefan Monnier <monnier@gnu.org> | |
7 | |
8 ;; This file is part of GNU Emacs. | |
9 | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94563
diff
changeset
|
10 ;; GNU Emacs is free software: you can redistribute it and/or modify |
54396 | 11 ;; 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
|
12 ;; 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
|
13 ;; (at your option) any later version. |
54396 | 14 |
15 ;; GNU Emacs is distributed in the hope that it will be useful, | |
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 ;; GNU General Public License for more details. | |
19 | |
20 ;; 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
|
21 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
54396 | 22 |
23 ;;; Commentary: | |
24 | |
25 ;; The home page of the Arch version control system is at | |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
26 ;; |
54396 | 27 ;; http://www.gnuarch.org/ |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
28 ;; |
54396 | 29 ;; This is derived from vc-mcvs.el as follows: |
30 ;; - cp vc-mcvs.el vc-arch.el and then M-% mcvs RET arch RET | |
31 ;; | |
32 ;; Then of course started the hacking. | |
33 ;; | |
34 ;; What has been partly tested: | |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
35 ;; - Open a file. |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
36 ;; - C-x v = without any prefix arg. |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
37 ;; - C-x v v to commit a change to a single file. |
54396 | 38 |
39 ;; Bugs: | |
40 | |
54415
504aef04e493
(vc-arch-workfile-version, vc-arch-mode-line-rewrite):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54409
diff
changeset
|
41 ;; - *VC-log*'s initial content lacks the `Summary:' lines. |
54396 | 42 ;; - All files under the tree are considered as "under Arch's control" |
43 ;; without regards to =tagging-method and such. | |
44 ;; - Files are always considered as `edited'. | |
54415
504aef04e493
(vc-arch-workfile-version, vc-arch-mode-line-rewrite):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54409
diff
changeset
|
45 ;; - C-x v l does not work. |
54396 | 46 ;; - C-x v i does not work. |
54415
504aef04e493
(vc-arch-workfile-version, vc-arch-mode-line-rewrite):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54409
diff
changeset
|
47 ;; - C-x v ~ does not work. |
504aef04e493
(vc-arch-workfile-version, vc-arch-mode-line-rewrite):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54409
diff
changeset
|
48 ;; - C-x v u does not work. |
504aef04e493
(vc-arch-workfile-version, vc-arch-mode-line-rewrite):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54409
diff
changeset
|
49 ;; - C-x v s does not work. |
504aef04e493
(vc-arch-workfile-version, vc-arch-mode-line-rewrite):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54409
diff
changeset
|
50 ;; - C-x v r does not work. |
94542
16651da1e3ed
Fix some comments to remove references to vc-dired.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
94521
diff
changeset
|
51 ;; - VC directory listings do not work. |
54396 | 52 ;; - And more... |
53 | |
54 ;;; Code: | |
55 | |
54532
87ca639a4eca
Require CL for `case'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54531
diff
changeset
|
56 (eval-when-compile (require 'vc) (require 'cl)) |
54396 | 57 |
94563
a0bb8ca25a33
Clean up vc*-revision-granularity and vc*-checkout-model.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
94542
diff
changeset
|
58 ;;; Properties of the backend |
a0bb8ca25a33
Clean up vc*-revision-granularity and vc*-checkout-model.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
94542
diff
changeset
|
59 |
a0bb8ca25a33
Clean up vc*-revision-granularity and vc*-checkout-model.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
94542
diff
changeset
|
60 (defun vc-arch-revision-granularity () 'repository) |
a0bb8ca25a33
Clean up vc*-revision-granularity and vc*-checkout-model.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
94542
diff
changeset
|
61 (defun vc-arch-checkout-model (files) 'implicit) |
a0bb8ca25a33
Clean up vc*-revision-granularity and vc*-checkout-model.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
94542
diff
changeset
|
62 |
54396 | 63 ;;; |
64 ;;; Customization options | |
65 ;;; | |
66 | |
67 (defvar vc-arch-command | |
81379
fa58a242b75e
(vc-arch-command): Remove bzr. It's a different program.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81326
diff
changeset
|
68 (let ((candidates '("tla" "baz"))) |
54396 | 69 (while (and candidates (not (executable-find (car candidates)))) |
70 (setq candidates (cdr candidates))) | |
71 (or (car candidates) "tla"))) | |
72 | |
73 ;; Clear up the cache to force vc-call to check again and discover | |
74 ;; new functions when we reload this file. | |
75 (put 'Arch 'vc-functions nil) | |
76 | |
77 ;;;###autoload (defun vc-arch-registered (file) | |
57094
7883de80034e
(vc-arch-root, vc-arch-registered): Use vc-find-root.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57026
diff
changeset
|
78 ;;;###autoload (if (vc-find-root file "{arch}/=tagging-method") |
7883de80034e
(vc-arch-root, vc-arch-registered): Use vc-find-root.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57026
diff
changeset
|
79 ;;;###autoload (progn |
7883de80034e
(vc-arch-root, vc-arch-registered): Use vc-find-root.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57026
diff
changeset
|
80 ;;;###autoload (load "vc-arch") |
7883de80034e
(vc-arch-root, vc-arch-registered): Use vc-find-root.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57026
diff
changeset
|
81 ;;;###autoload (vc-arch-registered file)))) |
54396 | 82 |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
83 (defun vc-arch-add-tagline () |
54396 | 84 "Add an `arch-tag' to the end of the current file." |
85 (interactive) | |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
86 (comment-normalize-vars) |
54396 | 87 (goto-char (point-max)) |
88 (forward-comment -1) | |
81620
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
89 (skip-chars-forward " \t\n") |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
90 (cond |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
91 ((not (bolp)) (insert "\n\n")) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
92 ((not (eq ?\n (char-before (1- (point))))) (insert "\n"))) |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
93 (let ((beg (point)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
94 (idfile (and buffer-file-name |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
95 (expand-file-name |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
96 (concat ".arch-ids/" |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
97 (file-name-nondirectory buffer-file-name) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
98 ".id") |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
99 (file-name-directory buffer-file-name))))) |
54396 | 100 (insert "arch-tag: ") |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
101 (if (and idfile (file-exists-p idfile)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
102 ;; If the file is unreadable, we do want to get an error here. |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
103 (progn |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
104 (insert-file-contents idfile) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
105 (forward-line 1) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
106 (delete-file idfile)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
107 (condition-case nil |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
108 (call-process "uuidgen" nil t) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
109 (file-error (insert (format "%s <%s> %s" |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
110 (current-time-string) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
111 user-mail-address |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
112 (+ (nth 2 (current-time)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
113 (buffer-size))))))) |
54396 | 114 (comment-region beg (point)))) |
115 | |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
116 (defconst vc-arch-tagline-re "^\\W*arch-tag:[ \t]*\\(.*[^ \t\n]\\)") |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
117 |
76769
3693d2ee35b8
(vc-with-current-file-buffer): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75469
diff
changeset
|
118 (defmacro vc-with-current-file-buffer (file &rest body) |
3693d2ee35b8
(vc-with-current-file-buffer): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75469
diff
changeset
|
119 (declare (indent 2) (debug t)) |
3693d2ee35b8
(vc-with-current-file-buffer): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75469
diff
changeset
|
120 `(let ((-kill-buf- nil) |
3693d2ee35b8
(vc-with-current-file-buffer): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75469
diff
changeset
|
121 (-file- ,file)) |
3693d2ee35b8
(vc-with-current-file-buffer): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75469
diff
changeset
|
122 (with-current-buffer (or (find-buffer-visiting -file-) |
3693d2ee35b8
(vc-with-current-file-buffer): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75469
diff
changeset
|
123 (setq -kill-buf- (generate-new-buffer " temp"))) |
3693d2ee35b8
(vc-with-current-file-buffer): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75469
diff
changeset
|
124 ;; Avoid find-file-literally since it can do many undesirable extra |
3693d2ee35b8
(vc-with-current-file-buffer): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75469
diff
changeset
|
125 ;; things (among which, call us back into an infinite loop). |
3693d2ee35b8
(vc-with-current-file-buffer): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75469
diff
changeset
|
126 (if -kill-buf- (insert-file-contents -file-)) |
3693d2ee35b8
(vc-with-current-file-buffer): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75469
diff
changeset
|
127 (unwind-protect |
3693d2ee35b8
(vc-with-current-file-buffer): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75469
diff
changeset
|
128 (progn ,@body) |
3693d2ee35b8
(vc-with-current-file-buffer): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75469
diff
changeset
|
129 (if (buffer-live-p -kill-buf-) (kill-buffer -kill-buf-)))))) |
3693d2ee35b8
(vc-with-current-file-buffer): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75469
diff
changeset
|
130 |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
131 (defun vc-arch-file-source-p (file) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
132 "Can return nil, `maybe' or a non-nil value. |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
133 Only the value `maybe' can be trusted :-(." |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
134 ;; FIXME: Check the tag and name of parent dirs. |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
135 (unless (string-match "\\`[,+]" (file-name-nondirectory file)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
136 (or (string-match "\\`{arch}/" |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
137 (file-relative-name file (vc-arch-root file))) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
138 (file-exists-p |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
139 ;; Check the presence of an ID file. |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
140 (expand-file-name |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
141 (concat ".arch-ids/" (file-name-nondirectory file) ".id") |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
142 (file-name-directory file))) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
143 ;; Check the presence of a tagline. |
76769
3693d2ee35b8
(vc-with-current-file-buffer): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
75469
diff
changeset
|
144 (vc-with-current-file-buffer file |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
145 (save-excursion |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
146 (goto-char (point-max)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
147 (or (re-search-backward vc-arch-tagline-re (- (point) 1000) t) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
148 (progn |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
149 (goto-char (point-min)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
150 (re-search-forward vc-arch-tagline-re (+ (point) 1000) t))))) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
151 ;; FIXME: check =tagging-method to see whether untagged files might |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
152 ;; be source or not. |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
153 (with-current-buffer |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
154 (find-file-noselect (expand-file-name "{arch}/=tagging-method" |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
155 (vc-arch-root file))) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
156 (let ((untagged-source t)) ;Default is `names'. |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
157 (save-excursion |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
158 (goto-char (point-min)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
159 (if (re-search-forward "^[ \t]*\\(\\(tagline\\|implicit\\|names\\)\\|explicit\\)" nil t) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
160 (setq untagged-source (match-end 2))) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
161 (if (re-search-forward "^[ \t]*untagged-source[ \t]+\\(\\(source\\)\\|precious\\|backup\\|junk\\|unrecognized\\)" nil t) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
162 (setq untagged-source (match-end 2)))) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
163 (if untagged-source 'maybe)))))) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
164 |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
165 (defun vc-arch-file-id (file) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
166 ;; Don't include the kind of ID this is because it seems to be too messy. |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
167 (let ((idfile (expand-file-name |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
168 (concat ".arch-ids/" (file-name-nondirectory file) ".id") |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
169 (file-name-directory file)))) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
170 (if (file-exists-p idfile) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
171 (with-temp-buffer |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
172 (insert-file-contents idfile) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
173 (looking-at ".*[^ \n\t]") |
75469
d2adef0ec2f0
(vc-arch-file-id): Move with-current-buffer inside the if.
Richard M. Stallman <rms@gnu.org>
parents:
75347
diff
changeset
|
174 (match-string 0)) |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
175 (with-current-buffer (find-file-noselect file) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
176 (save-excursion |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
177 (goto-char (point-max)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
178 (if (or (re-search-backward vc-arch-tagline-re (- (point) 1000) t) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
179 (progn |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
180 (goto-char (point-min)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
181 (re-search-forward vc-arch-tagline-re (+ (point) 1000) t))) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
182 (match-string 1) |
75469
d2adef0ec2f0
(vc-arch-file-id): Move with-current-buffer inside the if.
Richard M. Stallman <rms@gnu.org>
parents:
75347
diff
changeset
|
183 (concat "./" (file-relative-name file (vc-arch-root file))))))))) |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
184 |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
185 (defun vc-arch-tagging-method (file) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
186 (with-current-buffer |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
187 (find-file-noselect |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
188 (expand-file-name "{arch}/=tagging-method" (vc-arch-root file))) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
189 (save-excursion |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
190 (goto-char (point-min)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
191 (if (re-search-forward |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
192 "^[ \t]*\\(tagline\\|implicit\\|names\\|explicit\\)" nil t) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
193 (intern (match-string 1)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
194 'names)))) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
195 |
54396 | 196 (defun vc-arch-root (file) |
197 "Return the root directory of a Arch project, if any." | |
198 (or (vc-file-getprop file 'arch-root) | |
87574
21fcd219fd6e
* mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
86002
diff
changeset
|
199 ;; Check the =tagging-method, in case someone naively manually |
21fcd219fd6e
* mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
86002
diff
changeset
|
200 ;; creates a {arch} directory somewhere. |
21fcd219fd6e
* mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
86002
diff
changeset
|
201 (let ((root (vc-find-root file "{arch}/=tagging-method"))) |
21fcd219fd6e
* mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
86002
diff
changeset
|
202 (when root |
21fcd219fd6e
* mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
86002
diff
changeset
|
203 (vc-file-setprop |
21fcd219fd6e
* mouse.el (mouse-popup-menubar): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
86002
diff
changeset
|
204 file 'arch-root root))))) |
54396 | 205 |
81960
5a8f965c55ba
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
81804
diff
changeset
|
206 (defun vc-arch-register (files &optional rev comment) |
54806
e16241d08bbc
(vc-arch-root): Be a bit more careful.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54532
diff
changeset
|
207 (if rev (error "Explicit initial revision not supported for Arch")) |
81960
5a8f965c55ba
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
81804
diff
changeset
|
208 (dolist (file files) |
5a8f965c55ba
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
81804
diff
changeset
|
209 (let ((tagmet (vc-arch-tagging-method file))) |
5a8f965c55ba
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
81804
diff
changeset
|
210 (if (and (memq tagmet '(tagline implicit)) comment-start) |
5a8f965c55ba
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
81804
diff
changeset
|
211 (with-current-buffer (find-file-noselect file) |
5a8f965c55ba
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
81804
diff
changeset
|
212 (if (buffer-modified-p) |
5a8f965c55ba
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
81804
diff
changeset
|
213 (error "Save %s first" (buffer-name))) |
5a8f965c55ba
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
81804
diff
changeset
|
214 (vc-arch-add-tagline) |
5a8f965c55ba
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
81804
diff
changeset
|
215 (save-buffer))))) |
5a8f965c55ba
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
81804
diff
changeset
|
216 (vc-arch-command nil 0 files "add")) |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
217 |
54396 | 218 (defun vc-arch-registered (file) |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
219 ;; Don't seriously check whether it's source or not. Checking would |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
220 ;; require running TLA, so it's better to not do it, so it also works if |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
221 ;; TLA is not installed. |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
222 (and (vc-arch-root file) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
223 (vc-arch-file-source-p file))) |
54396 | 224 |
225 (defun vc-arch-default-version (file) | |
226 (or (vc-file-getprop (vc-arch-root file) 'arch-default-version) | |
227 (let* ((root (vc-arch-root file)) | |
228 (f (expand-file-name "{arch}/++default-version" root))) | |
229 (if (file-readable-p f) | |
230 (vc-file-setprop | |
231 root 'arch-default-version | |
232 (with-temp-buffer | |
233 (insert-file-contents f) | |
234 ;; Strip the terminating newline. | |
235 (buffer-substring (point-min) (1- (point-max))))))))) | |
236 | |
54409
a9f1e9611612
(vc-arch-workfile-unchanged-p): Define to avoid dup-diff.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54396
diff
changeset
|
237 (defun vc-arch-workfile-unchanged-p (file) |
a9f1e9611612
(vc-arch-workfile-unchanged-p): Define to avoid dup-diff.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54396
diff
changeset
|
238 "Check if FILE is unchanged by diffing against the master version. |
a9f1e9611612
(vc-arch-workfile-unchanged-p): Define to avoid dup-diff.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54396
diff
changeset
|
239 Return non-nil if FILE is unchanged." |
a9f1e9611612
(vc-arch-workfile-unchanged-p): Define to avoid dup-diff.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54396
diff
changeset
|
240 nil) |
a9f1e9611612
(vc-arch-workfile-unchanged-p): Define to avoid dup-diff.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54396
diff
changeset
|
241 |
54396 | 242 (defun vc-arch-state (file) |
243 ;; There's no checkout operation and merging is not done from VC | |
244 ;; so the only operation that's state dependent that VC supports is commit | |
245 ;; which is only activated if the file is `edited'. | |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
246 (let* ((root (vc-arch-root file)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
247 (ver (vc-arch-default-version file)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
248 (pat (concat "\\`" (subst-char-in-string ?/ ?% ver))) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
249 (dir (expand-file-name ",,inode-sigs/" |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
250 (expand-file-name "{arch}" root))) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
251 (sigfile nil)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
252 (dolist (f (if (file-directory-p dir) (directory-files dir t pat))) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
253 (if (or (not sigfile) (file-newer-than-file-p f sigfile)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
254 (setq sigfile f))) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
255 (if (not sigfile) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
256 'edited ;We know nothing. |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
257 (let ((id (vc-arch-file-id file))) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
258 (setq id (replace-regexp-in-string "[ \t]" "_" id)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
259 (with-current-buffer (find-file-noselect sigfile) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
260 (goto-char (point-min)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
261 (while (and (search-forward id nil 'move) |
57026
992d9837a265
(vc-arch-state): Fix parsing for `names' method.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56954
diff
changeset
|
262 (save-excursion |
992d9837a265
(vc-arch-state): Fix parsing for `names' method.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56954
diff
changeset
|
263 (goto-char (- (match-beginning 0) 2)) |
992d9837a265
(vc-arch-state): Fix parsing for `names' method.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56954
diff
changeset
|
264 ;; For `names', the lines start with `?./foo/bar'. |
992d9837a265
(vc-arch-state): Fix parsing for `names' method.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56954
diff
changeset
|
265 ;; For others there's 2 chars before the ./foo/bar. |
992d9837a265
(vc-arch-state): Fix parsing for `names' method.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56954
diff
changeset
|
266 (or (not (or (bolp) (looking-at "\n?"))) |
992d9837a265
(vc-arch-state): Fix parsing for `names' method.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56954
diff
changeset
|
267 ;; Ignore E_ entries used for foo.id files. |
992d9837a265
(vc-arch-state): Fix parsing for `names' method.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56954
diff
changeset
|
268 (looking-at "E_"))))) |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
269 (if (eobp) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
270 ;; ID not found. |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
271 (if (equal (file-name-nondirectory sigfile) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
272 (subst-char-in-string |
85139
8ba0e30716a5
Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
84374
diff
changeset
|
273 ?/ ?% (vc-arch-working-revision file))) |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
274 'added |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
275 ;; Might be `added' or `up-to-date' as well. |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
276 ;; FIXME: Check in the patch logs to find out. |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
277 'edited) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
278 ;; Found the ID, let's check the inode. |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
279 (if (not (re-search-forward |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
280 "\t.*mtime=\\([0-9]+\\):size=\\([0-9]+\\)" |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
281 (line-end-position) t)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
282 ;; Buh? Unexpected format. |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
283 'edited |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
284 (let ((ats (file-attributes file))) |
55873
304d478aa594
(vc-arch-state): Don't assume the file exists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55814
diff
changeset
|
285 (if (and (eq (nth 7 ats) (string-to-number (match-string 2))) |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
286 (equal (format-time-string "%s" (nth 5 ats)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
287 (match-string 1))) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
288 'up-to-date |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
289 'edited))))))))) |
54806
e16241d08bbc
(vc-arch-root): Be a bit more careful.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54532
diff
changeset
|
290 |
85139
8ba0e30716a5
Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
84374
diff
changeset
|
291 (defun vc-arch-working-revision (file) |
54396 | 292 (let* ((root (expand-file-name "{arch}" (vc-arch-root file))) |
293 (defbranch (vc-arch-default-version file))) | |
59313
ad91f130fbdf
(vc-arch-workfile-version): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59312
diff
changeset
|
294 (when (and defbranch (string-match "\\`\\(.+@[^/\n]+\\)/\\(\\(\\(.*?\\)\\(?:--.*\\)?\\)--.*\\)\\'" defbranch)) |
54396 | 295 (let* ((archive (match-string 1 defbranch)) |
296 (category (match-string 4 defbranch)) | |
297 (branch (match-string 3 defbranch)) | |
298 (version (match-string 2 defbranch)) | |
54415
504aef04e493
(vc-arch-workfile-version, vc-arch-mode-line-rewrite):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54409
diff
changeset
|
299 (sealed nil) (rev-nb 0) |
54396 | 300 (rev nil) |
301 logdir tmp) | |
302 (setq logdir (expand-file-name category root)) | |
303 (setq logdir (expand-file-name branch logdir)) | |
304 (setq logdir (expand-file-name version logdir)) | |
305 (setq logdir (expand-file-name archive logdir)) | |
306 (setq logdir (expand-file-name "patch-log" logdir)) | |
57566
d50f313f6fdd
(vc-arch-workfile-version): Don't burp if the patch-log directory is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57094
diff
changeset
|
307 (dolist (file (if (file-directory-p logdir) (directory-files logdir))) |
d50f313f6fdd
(vc-arch-workfile-version): Don't burp if the patch-log directory is missing.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
57094
diff
changeset
|
308 ;; Revision names go: base-0, patch-N, version-0, versionfix-M. |
54415
504aef04e493
(vc-arch-workfile-version, vc-arch-mode-line-rewrite):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54409
diff
changeset
|
309 (when (and (eq (aref file 0) ?v) (not sealed)) |
504aef04e493
(vc-arch-workfile-version, vc-arch-mode-line-rewrite):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54409
diff
changeset
|
310 (setq sealed t rev-nb 0)) |
54396 | 311 (if (and (string-match "-\\([0-9]+\\)\\'" file) |
312 (setq tmp (string-to-number (match-string 1 file))) | |
54415
504aef04e493
(vc-arch-workfile-version, vc-arch-mode-line-rewrite):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54409
diff
changeset
|
313 (or (not sealed) (eq (aref file 0) ?v)) |
54396 | 314 (>= tmp rev-nb)) |
315 (setq rev-nb tmp rev file))) | |
56954
242cddb00aef
(vc-arch-workfile-version): Handle the special case before the first commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56283
diff
changeset
|
316 ;; Use "none-000" if the tree hasn't yet been committed on the |
242cddb00aef
(vc-arch-workfile-version): Handle the special case before the first commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56283
diff
changeset
|
317 ;; default branch. We'll then get "Arch:000[branch]" on the mode-line. |
242cddb00aef
(vc-arch-workfile-version): Handle the special case before the first commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56283
diff
changeset
|
318 (concat defbranch "--" (or rev "none-000")))))) |
54396 | 319 |
320 | |
321 (defcustom vc-arch-mode-line-rewrite | |
54415
504aef04e493
(vc-arch-workfile-version, vc-arch-mode-line-rewrite):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54409
diff
changeset
|
322 '(("\\`.*--\\(.*--.*\\)--\\(v?\\).*-\\([0-9]+\\)\\'" . "\\2\\3[\\1]")) |
54396 | 323 "Rewrite rules to shorten Arch's revision names on the mode-line." |
56283
9d529d2aac14
(vc-arch-mode-line-rewrite): Add :group 'vc.
Kim F. Storm <storm@cua.dk>
parents:
55873
diff
changeset
|
324 :type '(repeat (cons regexp string)) |
9d529d2aac14
(vc-arch-mode-line-rewrite): Add :group 'vc.
Kim F. Storm <storm@cua.dk>
parents:
55873
diff
changeset
|
325 :group 'vc) |
54396 | 326 |
327 (defun vc-arch-mode-line-string (file) | |
328 "Return string for placement in modeline by `vc-mode-line' for FILE." | |
85139
8ba0e30716a5
Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
84374
diff
changeset
|
329 (let ((rev (vc-working-revision file))) |
54396 | 330 (dolist (rule vc-arch-mode-line-rewrite) |
331 (if (string-match (car rule) rev) | |
332 (setq rev (replace-match (cdr rule) t nil rev)))) | |
333 (format "Arch%c%s" | |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
334 (case (vc-state file) |
94521
2a61c5f918a5
Change 'needs-patch to 'needs-update.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
87903
diff
changeset
|
335 ((up-to-date needs-update) ?-) |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
336 (added ?@) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
337 (t ?:)) |
54396 | 338 rev))) |
339 | |
340 (defun vc-arch-diff3-rej-p (rej) | |
54531
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
341 (let ((attrs (file-attributes rej))) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
342 (and attrs (< (nth 7 attrs) 60) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
343 (with-temp-buffer |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
344 (insert-file-contents rej) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
345 (goto-char (point-min)) |
2ae29225b85c
(vc-arch-diff): Handle the special case where `newvers' is equivalent to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54415
diff
changeset
|
346 (looking-at "Conflicts occured, diff3 conflict markers left in file\\."))))) |
54396 | 347 |
348 (defun vc-arch-delete-rej-if-obsolete () | |
54806
e16241d08bbc
(vc-arch-root): Be a bit more careful.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54532
diff
changeset
|
349 "For use in `after-save-hook'." |
e16241d08bbc
(vc-arch-root): Be a bit more careful.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54532
diff
changeset
|
350 (save-excursion |
e16241d08bbc
(vc-arch-root): Be a bit more careful.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54532
diff
changeset
|
351 (let ((rej (concat buffer-file-name ".rej"))) |
e16241d08bbc
(vc-arch-root): Be a bit more careful.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54532
diff
changeset
|
352 (when (and buffer-file-name (vc-arch-diff3-rej-p rej)) |
79848
316ed7573095
* vc-arch.el (vc-arch-delete-rej-if-obsolete): Remove the
Dan Nicolaescu <dann@ics.uci.edu>
parents:
79721
diff
changeset
|
353 (unless (re-search-forward "^<<<<<<< " nil t) |
316ed7573095
* vc-arch.el (vc-arch-delete-rej-if-obsolete): Remove the
Dan Nicolaescu <dann@ics.uci.edu>
parents:
79721
diff
changeset
|
354 ;; The .rej file is obsolete. |
316ed7573095
* vc-arch.el (vc-arch-delete-rej-if-obsolete): Remove the
Dan Nicolaescu <dann@ics.uci.edu>
parents:
79721
diff
changeset
|
355 (condition-case nil (delete-file rej) (error nil)) |
316ed7573095
* vc-arch.el (vc-arch-delete-rej-if-obsolete): Remove the
Dan Nicolaescu <dann@ics.uci.edu>
parents:
79721
diff
changeset
|
356 ;; Remove the hook so that it is not called multiple times. |
316ed7573095
* vc-arch.el (vc-arch-delete-rej-if-obsolete): Remove the
Dan Nicolaescu <dann@ics.uci.edu>
parents:
79721
diff
changeset
|
357 (remove-hook 'after-save-hook 'vc-arch-delete-rej-if-obsolete t)))))) |
54396 | 358 |
359 (defun vc-arch-find-file-hook () | |
360 (let ((rej (concat buffer-file-name ".rej"))) | |
361 (when (and buffer-file-name (file-exists-p rej)) | |
362 (if (vc-arch-diff3-rej-p rej) | |
363 (save-excursion | |
364 (goto-char (point-min)) | |
54806
e16241d08bbc
(vc-arch-root): Be a bit more careful.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54532
diff
changeset
|
365 (if (not (re-search-forward "^<<<<<<< " nil t)) |
54396 | 366 ;; The .rej file is obsolete. |
367 (condition-case nil (delete-file rej) (error nil)) | |
368 (smerge-mode 1) | |
54806
e16241d08bbc
(vc-arch-root): Be a bit more careful.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54532
diff
changeset
|
369 (add-hook 'after-save-hook |
54396 | 370 'vc-arch-delete-rej-if-obsolete nil t) |
371 (message "There are unresolved conflicts in this file"))) | |
372 (message "There are unresolved conflicts in %s" | |
373 (file-name-nondirectory rej)))))) | |
374 | |
81960
5a8f965c55ba
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
81804
diff
changeset
|
375 (defun vc-arch-checkin (files rev comment) |
63423
8269aa11cce4
(vc-arch-checkin, vc-arch-diff): Follow error conventions.
Juanma Barranquero <lekktu@gmail.com>
parents:
59444
diff
changeset
|
376 (if rev (error "Committing to a specific revision is unsupported")) |
81960
5a8f965c55ba
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
81804
diff
changeset
|
377 ;; FIXME: This implementation probably only works for singleton filesets |
84374
1224dec49333
(vc-arch-checkin): Fix typo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82502
diff
changeset
|
378 (let ((summary (file-relative-name (car files) (vc-arch-root (car files))))) |
54415
504aef04e493
(vc-arch-workfile-version, vc-arch-mode-line-rewrite):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54409
diff
changeset
|
379 ;; Extract a summary from the comment. |
504aef04e493
(vc-arch-workfile-version, vc-arch-mode-line-rewrite):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54409
diff
changeset
|
380 (when (or (string-match "\\`Summary:[ \t]*\\(.*[^ \t\n]\\)\\([ \t]*\n\\)*" comment) |
504aef04e493
(vc-arch-workfile-version, vc-arch-mode-line-rewrite):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54409
diff
changeset
|
381 (string-match "\\`[ \t]*\\(.*[^ \t\n]\\)[ \t]*\\(\n?\\'\\|\n\\([ \t]*\n\\)+\\)" comment)) |
504aef04e493
(vc-arch-workfile-version, vc-arch-mode-line-rewrite):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54409
diff
changeset
|
382 (setq summary (match-string 1 comment)) |
504aef04e493
(vc-arch-workfile-version, vc-arch-mode-line-rewrite):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54409
diff
changeset
|
383 (setq comment (substring comment (match-end 0)))) |
81960
5a8f965c55ba
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
81804
diff
changeset
|
384 (vc-arch-command nil 0 files "commit" "-s" summary "-L" comment "--" |
54415
504aef04e493
(vc-arch-workfile-version, vc-arch-mode-line-rewrite):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54409
diff
changeset
|
385 (vc-switches 'Arch 'checkin)))) |
54396 | 386 |
81960
5a8f965c55ba
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
81804
diff
changeset
|
387 (defun vc-arch-diff (files &optional oldvers newvers buffer) |
5a8f965c55ba
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
81804
diff
changeset
|
388 "Get a difference report using Arch between two versions of FILES." |
82000
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
389 ;; FIXME: This implementation only works for singleton filesets. To make |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
390 ;; it work for more cases, we have to either call `file-diffs' manually on |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
391 ;; each and every `file' in the fileset, or use `changes --diffs' (and |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
392 ;; variants) and maybe filter the output with `filterdiff' to only include |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
393 ;; the files in which we're interested. |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
394 (let ((file (car files))) |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
395 (if (and newvers |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
396 (vc-up-to-date-p file) |
85139
8ba0e30716a5
Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
84374
diff
changeset
|
397 (equal newvers (vc-working-revision file))) |
82000
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
398 ;; Newvers is the base revision and the current file is unchanged, |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
399 ;; so we can diff with the current file. |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
400 (setq newvers nil)) |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
401 (if newvers |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
402 (error "Diffing specific revisions not implemented") |
86002
613df1ba1584
* vc.el (vc-diff-internal): Make the *vc-diff* buffer read only.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85457
diff
changeset
|
403 (let* ((async (not vc-disable-async-diff)) |
82000
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
404 ;; Run the command from the root dir. |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
405 (default-directory (vc-arch-root file)) |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
406 (status |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
407 (vc-arch-command |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
408 (or buffer "*vc-diff*") |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
409 (if async 'async 1) |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
410 nil "file-diffs" |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
411 ;; Arch does not support the typical flags. |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
412 ;; (vc-switches 'Arch 'diff) |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
413 (file-relative-name file) |
85139
8ba0e30716a5
Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
84374
diff
changeset
|
414 (if (equal oldvers (vc-working-revision file)) |
82000
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
415 nil |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
416 oldvers)))) |
066eaef90bfb
(vc-arch-diff): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81960
diff
changeset
|
417 (if async 1 status))))) ; async diff, pessimistic assumption. |
54396 | 418 |
419 (defun vc-arch-delete-file (file) | |
420 (vc-arch-command nil 0 file "rm")) | |
421 | |
422 (defun vc-arch-rename-file (old new) | |
423 (vc-arch-command nil 0 new "mv" (file-relative-name old))) | |
424 | |
54806
e16241d08bbc
(vc-arch-root): Be a bit more careful.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54532
diff
changeset
|
425 (defalias 'vc-arch-responsible-p 'vc-arch-root) |
e16241d08bbc
(vc-arch-root): Be a bit more careful.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54532
diff
changeset
|
426 |
54396 | 427 (defun vc-arch-command (buffer okstatus file &rest flags) |
428 "A wrapper around `vc-do-command' for use in vc-arch.el." | |
94847
5e64dca662f0
Remove assumption about what nil means as a first arument to vc-do-command.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
94678
diff
changeset
|
429 (apply 'vc-do-command (or buffer "*vc*") okstatus vc-arch-command file flags)) |
54396 | 430 |
85139
8ba0e30716a5
Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
84374
diff
changeset
|
431 (defun vc-arch-init-revision () nil) |
54806
e16241d08bbc
(vc-arch-root): Be a bit more careful.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
54532
diff
changeset
|
432 |
78359
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
433 ;;; Completion of versions and revisions. |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
434 |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
435 (defun vc-arch--version-completion-table (root string) |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
436 (delq nil |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
437 (mapcar |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
438 (lambda (d) |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
439 (when (string-match "/\\([^/]+\\)/\\([^/]+\\)\\'" d) |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
440 (concat (match-string 2 d) "/" (match-string 1 d)))) |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
441 (let ((default-directory root)) |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
442 (file-expand-wildcards |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
443 (concat "*/*/" |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
444 (if (string-match "/" string) |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
445 (concat (substring string (match-end 0)) |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
446 "*/" (substring string 0 (match-beginning 0))) |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
447 (concat "*/" string)) |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
448 "*")))))) |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
449 |
85457
e58eb1e72d23
(vc-arch-revision-completion-table): Make it work when the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85139
diff
changeset
|
450 (defun vc-arch-revision-completion-table (files) |
e58eb1e72d23
(vc-arch-revision-completion-table): Make it work when the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85139
diff
changeset
|
451 (lexical-let ((files files)) |
78359
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
452 (lambda (string pred action) |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
453 ;; FIXME: complete revision patches as well. |
85457
e58eb1e72d23
(vc-arch-revision-completion-table): Make it work when the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85139
diff
changeset
|
454 (let* ((root (expand-file-name "{arch}" (vc-arch-root (car files)))) |
78359
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
455 (table (vc-arch--version-completion-table root string))) |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
456 (complete-with-action action table string pred))))) |
2dd5d799a16d
* vc-git.el: (vc-directory-exclusion-list, vc-handled-backends):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
457 |
81620
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
458 ;;; Trimming revision libraries. |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
459 |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
460 ;; This code is not directly related to VC and there are many variants of |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
461 ;; this functionality available as scripts, but I like this version better, |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
462 ;; so maybe others will like it too. |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
463 |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
464 (defun vc-arch-trim-find-least-useful-rev (revs) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
465 (let* ((first (pop revs)) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
466 (second (pop revs)) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
467 (third (pop revs)) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
468 ;; We try to give more importance to recent revisions. The idea is |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
469 ;; that it's OK if checking out a revision 1000-patch-old is ten |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
470 ;; times slower than checking out a revision 100-patch-old. But at |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
471 ;; the same time a 2-patch-old rev isn't really ten times more |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
472 ;; important than a 20-patch-old, so we use an arbitrary constant |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
473 ;; "100" to reduce this effect for recent revisions. Making this |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
474 ;; constant a float has the side effect of causing the subsequent |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
475 ;; computations to be done as floats as well. |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
476 (max (+ 100.0 (car (or (car (last revs)) third)))) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
477 (cost (lambda () (/ (- (car third) (car first)) (- max (car second))))) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
478 (minrev second) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
479 (mincost (funcall cost))) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
480 (while revs |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
481 (setq first second) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
482 (setq second third) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
483 (setq third (pop revs)) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
484 (when (< (funcall cost) mincost) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
485 (setq minrev second) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
486 (setq mincost (funcall cost)))) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
487 minrev)) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
488 |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
489 (defun vc-arch-trim-make-sentinel (revs) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
490 (if (null revs) (lambda (proc msg) (message "VC-Arch trimming ... done")) |
96899
7df3d9a17631
(vc-arch-trim-make-sentinel): Use a closure.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94847
diff
changeset
|
491 (lexical-let ((revs revs)) |
7df3d9a17631
(vc-arch-trim-make-sentinel): Use a closure.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94847
diff
changeset
|
492 (lambda (proc msg) |
7df3d9a17631
(vc-arch-trim-make-sentinel): Use a closure.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94847
diff
changeset
|
493 (message "VC-Arch trimming %s..." (file-name-nondirectory (car revs))) |
7df3d9a17631
(vc-arch-trim-make-sentinel): Use a closure.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94847
diff
changeset
|
494 (rename-file (car revs) (concat (car revs) "*rm*")) |
81620
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
495 (setq proc (start-process "vc-arch-trim" nil |
96899
7df3d9a17631
(vc-arch-trim-make-sentinel): Use a closure.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94847
diff
changeset
|
496 "rm" "-rf" (concat (car revs) "*rm*"))) |
7df3d9a17631
(vc-arch-trim-make-sentinel): Use a closure.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94847
diff
changeset
|
497 (set-process-sentinel proc (vc-arch-trim-make-sentinel (cdr revs))))))) |
81620
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
498 |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
499 (defun vc-arch-trim-one-revlib (dir) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
500 "Delete half of the revisions in the revision library." |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
501 (interactive "Ddirectory: ") |
96899
7df3d9a17631
(vc-arch-trim-make-sentinel): Use a closure.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94847
diff
changeset
|
502 (let ((garbage (directory-files dir 'full "\\`,," 'nosort))) |
7df3d9a17631
(vc-arch-trim-make-sentinel): Use a closure.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94847
diff
changeset
|
503 (when garbage |
7df3d9a17631
(vc-arch-trim-make-sentinel): Use a closure.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94847
diff
changeset
|
504 (funcall (vc-arch-trim-make-sentinel garbage) nil nil))) |
81620
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
505 (let ((revs |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
506 (sort (delq nil |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
507 (mapcar |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
508 (lambda (f) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
509 (when (string-match "-\\([0-9]+\\)\\'" f) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
510 (cons (string-to-number (match-string 1 f)) f))) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
511 (directory-files dir nil nil 'nosort))) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
512 'car-less-than-car)) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
513 (subdirs nil)) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
514 (when (cddr revs) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
515 (dotimes (i (/ (length revs) 2)) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
516 (let ((minrev (vc-arch-trim-find-least-useful-rev revs))) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
517 (setq revs (delq minrev revs)) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
518 (push minrev subdirs))) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
519 (funcall (vc-arch-trim-make-sentinel |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
520 (mapcar (lambda (x) (expand-file-name (cdr x) dir)) subdirs)) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
521 nil nil)))) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
522 |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
523 (defun vc-arch-trim-revlib () |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
524 "Delete half of the revisions in the revision library." |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
525 (interactive) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
526 (let ((rl-dir (with-output-to-string |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
527 (call-process vc-arch-command nil standard-output nil |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
528 "my-revision-library")))) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
529 (while (string-match "\\(.*\\)\n" rl-dir) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
530 (let ((dir (match-string 1 rl-dir))) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
531 (setq rl-dir |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
532 (if (and (file-directory-p dir) (file-writable-p dir)) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
533 dir |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
534 (substring rl-dir (match-end 0)))))) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
535 (unless (file-writable-p rl-dir) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
536 (error "No writable revlib directory found")) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
537 (message "Revlib at %s" rl-dir) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
538 (let* ((archives (directory-files rl-dir 'full "[^.]\\|...")) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
539 (categories |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
540 (apply 'append |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
541 (mapcar (lambda (dir) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
542 (when (file-directory-p dir) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
543 (directory-files dir 'full "[^.]\\|..."))) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
544 archives))) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
545 (branches |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
546 (apply 'append |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
547 (mapcar (lambda (dir) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
548 (when (file-directory-p dir) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
549 (directory-files dir 'full "[^.]\\|..."))) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
550 categories))) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
551 (versions |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
552 (apply 'append |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
553 (mapcar (lambda (dir) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
554 (when (file-directory-p dir) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
555 (directory-files dir 'full "--.*--"))) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
556 branches)))) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
557 (mapc 'vc-arch-trim-one-revlib versions)) |
205f0e2270e9
(vc-arch-add-tagline): Do a slightly cleaner job.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81379
diff
changeset
|
558 )) |
82502
2a2056106d16
(vc-arch-extra-menu-map): New var and fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
82140
diff
changeset
|
559 |
78822
1926a08e8926
* vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78359
diff
changeset
|
560 (defvar vc-arch-extra-menu-map |
1926a08e8926
* vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78359
diff
changeset
|
561 (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:
78359
diff
changeset
|
562 (define-key map [add-tagline] |
1926a08e8926
* vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78359
diff
changeset
|
563 '(menu-item "Add tagline" vc-arch-add-tagline)) |
1926a08e8926
* vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78359
diff
changeset
|
564 map)) |
1926a08e8926
* vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78359
diff
changeset
|
565 |
1926a08e8926
* vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78359
diff
changeset
|
566 (defun vc-arch-extra-menu () vc-arch-extra-menu-map) |
1926a08e8926
* vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78359
diff
changeset
|
567 |
1926a08e8926
* vc-arch.el (vc-arch-extra-menu-map): New var and fun.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78359
diff
changeset
|
568 |
74940
f0d812b53a76
(vc-arch-find-version): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
569 ;;; Less obvious implementations. |
f0d812b53a76
(vc-arch-find-version): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
570 |
85139
8ba0e30716a5
Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
84374
diff
changeset
|
571 (defun vc-arch-find-revision (file rev buffer) |
74940
f0d812b53a76
(vc-arch-find-version): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
572 (let ((out (make-temp-file "vc-out"))) |
f0d812b53a76
(vc-arch-find-version): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
573 (unwind-protect |
f0d812b53a76
(vc-arch-find-version): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
574 (progn |
f0d812b53a76
(vc-arch-find-version): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
575 (with-temp-buffer |
f0d812b53a76
(vc-arch-find-version): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
576 (vc-arch-command (current-buffer) 1 nil "file-diffs" file rev) |
f0d812b53a76
(vc-arch-find-version): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
577 (call-process-region (point-min) (point-max) |
f0d812b53a76
(vc-arch-find-version): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
578 "patch" nil nil nil "-R" "-o" out file)) |
f0d812b53a76
(vc-arch-find-version): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
579 (with-current-buffer buffer |
f0d812b53a76
(vc-arch-find-version): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
580 (insert-file-contents out))) |
f0d812b53a76
(vc-arch-find-version): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
581 (delete-file out)))) |
f0d812b53a76
(vc-arch-find-version): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
582 |
54396 | 583 (provide 'vc-arch) |
584 | |
56954
242cddb00aef
(vc-arch-workfile-version): Handle the special case before the first commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56283
diff
changeset
|
585 ;; arch-tag: a35c7c1c-5237-429d-88ef-3d718fd2e704 |
54396 | 586 ;;; vc-arch.el ends here |