bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
1 |
;;; brz.el -- version control commands for Breezy.
|
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
2 |
;;; Copyright 2005 Luke Gorrie <luke@member.fsf.org>
|
3 |
;;;
|
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
4 |
;;; brz.el is free software distributed under the terms of the GNU
|
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
5 |
;;; General Public Licence, version 2. For details see the file
|
6 |
;;; COPYING in the GNU Emacs distribution.
|
|
7 |
;;;
|
|
8 |
;;; This is MAJOR copy & paste job from darcs.el
|
|
9 |
||
10 |
(eval-when-compile |
|
11 |
(unless (fboundp 'define-minor-mode) |
|
12 |
(require 'easy-mmode) |
|
13 |
(defalias 'define-minor-mode 'easy-mmode-define-minor-mode)) |
|
14 |
(when (featurep 'xemacs) |
|
15 |
(require 'cl))) |
|
16 |
||
17 |
;;;; Configurables
|
|
18 |
||
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
19 |
(defvar brz-command-prefix "\C-cb" |
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
20 |
;; This default value breaks the Emacs rules and uses a sequence |
21 |
;; reserved for the user's own custom bindings. That's not good but |
|
22 |
;; I can't think of a decent standard one. -luke (14/Mar/2005) |
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
23 |
"Prefix sequence for brz-mode commands.") |
24 |
||
25 |
(defvar brz-command "brz" |
|
26 |
"*Shell command to execute brz.") |
|
27 |
||
28 |
(defvar brz-buffer "*brz-command*" |
|
29 |
"Buffer for user-visible brz command output.") |
|
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
30 |
|
31 |
;;;; Minor-mode
|
|
32 |
||
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
33 |
(define-minor-mode brz-mode |
34 |
"\\{brz-mode-map}" |
|
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
35 |
nil |
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
36 |
" brz" |
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
37 |
;; Coax define-minor-mode into creating a keymap. |
38 |
;; We'll fill it in manually though because define-minor-mode seems |
|
39 |
;; hopeless for changing bindings without restarting Emacs. |
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
40 |
`((,brz-command-prefix . fake))) |
41 |
||
42 |
(defvar brz-mode-commands-map nil |
|
43 |
"Keymap for brz-mode commands. |
|
44 |
This map is bound to a prefix sequence in `brz-mode-map'.") |
|
45 |
||
46 |
(defconst brz-command-keys '(("l" brz-log) |
|
47 |
("d" brz-diff) |
|
48 |
("s" brz-status) |
|
49 |
("c" brz-commit)) |
|
50 |
"Keys to bind in `brz-mode-commands-map'.") |
|
51 |
||
52 |
(defun brz-init-command-keymap () |
|
53 |
"Bind the brz-mode keys. |
|
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
54 |
This command can be called interactively to redefine the keys from
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
55 |
`brz-commands-keys'." |
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
56 |
(interactive) |
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
57 |
(setq brz-mode-commands-map (make-sparse-keymap)) |
58 |
(dolist (spec brz-command-keys) |
|
59 |
(define-key brz-mode-commands-map (car spec) (cadr spec))) |
|
60 |
(define-key brz-mode-map brz-command-prefix brz-mode-commands-map)) |
|
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
61 |
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
62 |
(brz-init-command-keymap) |
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
63 |
|
64 |
||
65 |
;;;; Commands
|
|
66 |
||
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
67 |
(defun brz-log () |
68 |
"Run \"brz log\" in the repository top-level." |
|
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
69 |
(interactive) |
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
70 |
(brz "log")) |
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
71 |
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
72 |
(defun brz-diff () |
73 |
"Run \"brz diff\" in the repository top-level." |
|
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
74 |
(interactive) |
75 |
(save-some-buffers) |
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
76 |
(brz-run-command (brz-command "diff") 'diff-mode)) |
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
77 |
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
78 |
(defun brz-status () |
79 |
"Run \"brz diff\" in the repository top-level." |
|
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
80 |
(interactive) |
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
81 |
(brz "status")) |
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
82 |
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
83 |
(defun brz-commit (message) |
84 |
"Run \"brz diff\" in the repository top-level." |
|
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
85 |
(interactive "sCommit message: ") |
86 |
(save-some-buffers) |
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
87 |
(brz "commit -m %s" (shell-quote-argument message))) |
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
88 |
|
89 |
;;;; Utilities
|
|
90 |
||
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
91 |
(defun brz (format &rest args) |
92 |
(brz-run-command (apply #'brz-command format args))) |
|
93 |
||
94 |
(defun brz-command (format &rest args) |
|
95 |
(concat brz-command " " (apply #'format format args))) |
|
96 |
||
97 |
(defun brz-run-command (command &optional pre-view-hook) |
|
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
98 |
"Run COMMAND at the top-level and view the result in another window. |
99 |
PRE-VIEW-HOOK is an optional function to call before entering
|
|
100 |
view-mode. This is useful to set the major-mode of the result buffer,
|
|
101 |
because if you did it afterwards then it would zap view-mode."
|
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
102 |
(brz-cleanup) |
103 |
(let ((toplevel (brz-toplevel))) |
|
104 |
(with-current-buffer (get-buffer-create brz-buffer) |
|
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
105 |
;; prevent `shell-command' from printing output in a message |
106 |
(let ((max-mini-window-height 0)) |
|
107 |
(let ((default-directory toplevel)) |
|
108 |
(shell-command command t))) |
|
109 |
(goto-char (point-min)) |
|
110 |
(when pre-view-hook |
|
111 |
(funcall pre-view-hook)))) |
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
112 |
(if (zerop (buffer-size (get-buffer brz-buffer))) |
113 |
(message "(brz command finished with no output.)") |
|
114 |
(view-buffer-other-window brz-buffer) |
|
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
115 |
;; Bury the buffer when dismissed. |
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
116 |
(with-current-buffer (get-buffer brz-buffer) |
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
117 |
(setq view-exit-action #'bury-buffer)))) |
118 |
||
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
119 |
(defun brz-current-file () |
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
120 |
(or (buffer-file-name) |
121 |
(error "Don't know what file to use!"))) |
|
122 |
||
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
123 |
(defun brz-cleanup (&optional buffer-name) |
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
124 |
"Cleanup before executing a command. |
125 |
BUFFER-NAME is the command's output buffer."
|
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
126 |
(let ((name (or buffer-name brz-buffer))) |
127 |
(when (get-buffer brz-buffer) |
|
128 |
(kill-buffer brz-buffer)))) |
|
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
129 |
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
130 |
(defun brz-toplevel () |
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
131 |
"Return the top-level directory of the repository." |
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
132 |
(let ((dir (brz-find-repository))) |
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
133 |
(if dir |
134 |
(file-name-directory dir) |
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
135 |
(error "Can't find brz repository top-level.")))) |
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
136 |
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
137 |
(defun brz-find-repository (&optional start-directory) |
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
138 |
"Return the enclosing \".bzr\" directory, or nil if there isn't one." |
139 |
(when (and (buffer-file-name) |
|
140 |
(file-directory-p (file-name-directory (buffer-file-name)))) |
|
141 |
(let ((dir (or start-directory |
|
142 |
default-directory |
|
143 |
(error "No start directory given.")))) |
|
144 |
(or (car (directory-files dir t "^\\.bzr$")) |
|
145 |
(let ((next-dir (file-name-directory (directory-file-name dir)))) |
|
146 |
(unless (equal dir next-dir) |
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
147 |
(brz-find-repository next-dir))))))) |
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
148 |
|
149 |
;;;; Hook setup
|
|
150 |
;;;
|
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
151 |
;;; Automaticaly enter brz-mode when we open a file that's under brz
|
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
152 |
;;; control, i.e. if the .bzr directory can be found.
|
153 |
||
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
154 |
(defun brz-find-file-hook () |
155 |
"Enable brz-mode if the file is inside a brz repository." |
|
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
156 |
;; Note: This function is called for every file that Emacs opens so |
157 |
;; it mustn't make any mistakes. |
|
6622.1.12
by Jelmer Vernooij
s/bzr/brz/ in emacs mode. |
158 |
(when (brz-find-repository) (brz-mode 1))) |
159 |
||
160 |
(add-hook 'find-file-hooks 'brz-find-file-hook) |
|
161 |
||
162 |
(provide 'brz) |
|
1185.1.29
by Robert Collins
merge merge tweaks from aaron, which includes latest .dev |
163 |