/brz/remove-bazaar

To get this branch, use:
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