Mercurial > hg > mercurial-crew-with-dirclash
annotate contrib/mq.el @ 4230:c93562fb12cc
Fix handling of paths when run outside the repo.
The main problem was that dirstate.getcwd() returned just "",
which was interpreted as "we're at the repo root". It now returns
an absolute path.
The util.pathto function was also changed to deal with the "cwd is
an absolute path" case.
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Fri, 16 Mar 2007 00:22:58 -0300 |
parents | b7fe334ff4fb |
children | 7b0d0acea6d6 |
rev | line source |
---|---|
2993
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1 ;;; mq.el --- Emacs support for Mercurial Queues |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
2 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
3 ;; Copyright (C) 2006 Bryan O'Sullivan |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
4 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
5 ;; Author: Bryan O'Sullivan <bos@serpentine.com> |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
6 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
7 ;; mq.el is free software; you can redistribute it and/or modify it |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
8 ;; under the terms of version 2 of the GNU General Public License as |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
9 ;; published by the Free Software Foundation. |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
10 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
11 ;; mq.el is distributed in the hope that it will be useful, but |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
12 ;; WITHOUT ANY WARRANTY; without even the implied warranty of |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
13 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
14 ;; General Public License for more details. |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
15 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
16 ;; You should have received a copy of the GNU General Public License |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
17 ;; along with mq.el, GNU Emacs, or XEmacs; see the file COPYING (`C-h |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
18 ;; C-l'). If not, write to the Free Software Foundation, Inc., 59 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
19 ;; Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
20 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
21 (require 'mercurial) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
22 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
23 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
24 (defcustom mq-mode-hook nil |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
25 "Hook run when a buffer enters mq-mode." |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
26 :type 'sexp |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
27 :group 'mercurial) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
28 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
29 (defcustom mq-global-prefix "\C-cq" |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
30 "The global prefix for Mercurial Queues keymap bindings." |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
31 :type 'sexp |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
32 :group 'mercurial) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
33 |
2995
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
34 (defcustom mq-edit-mode-hook nil |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
35 "Hook run after a buffer is populated to edit a patch description." |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
36 :type 'sexp |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
37 :group 'mercurial) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
38 |
2993
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
39 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
40 ;;; Internal variables. |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
41 |
3370
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
42 (defvar mq-mode nil |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
43 "Is this file managed by MQ?") |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
44 (make-variable-buffer-local 'mq-mode) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
45 (put 'mq-mode 'permanent-local t) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
46 |
2993
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
47 (defvar mq-patch-history nil) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
48 |
3370
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
49 (defvar mq-top-patch '(nil)) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
50 |
2995
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
51 (defvar mq-prev-buffer nil) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
52 (make-variable-buffer-local 'mq-prev-buffer) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
53 (put 'mq-prev-buffer 'permanent-local t) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
54 |
2993
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
55 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
56 ;;; Global keymap. |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
57 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
58 (defvar mq-global-map (make-sparse-keymap)) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
59 (fset 'mq-global-map mq-global-map) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
60 (global-set-key mq-global-prefix 'mq-global-map) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
61 (define-key mq-global-map "." 'mq-push) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
62 (define-key mq-global-map ">" 'mq-push-all) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
63 (define-key mq-global-map "," 'mq-pop) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
64 (define-key mq-global-map "<" 'mq-pop-all) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
65 (define-key mq-global-map "r" 'mq-refresh) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
66 (define-key mq-global-map "e" 'mq-refresh-edit) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
67 (define-key mq-global-map "n" 'mq-next) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
68 (define-key mq-global-map "p" 'mq-previous) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
69 (define-key mq-global-map "t" 'mq-top) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
70 |
3370
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
71 (add-minor-mode 'mq-mode 'mq-mode) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
72 |
2993
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
73 |
2995
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
74 ;;; Refresh edit mode keymap. |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
75 |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
76 (defvar mq-edit-mode-map (make-sparse-keymap)) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
77 (define-key mq-edit-mode-map "\C-c\C-c" 'mq-edit-finish) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
78 (define-key mq-edit-mode-map "\C-c\C-k" 'mq-edit-kill) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
79 |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
80 |
2993
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
81 ;;; Helper functions. |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
82 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
83 (defun mq-read-patch-name (&optional source prompt) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
84 "Read a patch name to use with a command. |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
85 May return nil, meaning \"use the default\"." |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
86 (let ((patches (split-string |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
87 (hg-chomp (hg-run0 (or source "qseries"))) "\n"))) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
88 (when current-prefix-arg |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
89 (completing-read (format "Patch%s: " (or prompt "")) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
90 (map 'list 'cons patches patches) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
91 nil |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
92 nil |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
93 nil |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
94 'mq-patch-history)))) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
95 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
96 (defun mq-refresh-buffers (root) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
97 (save-excursion |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
98 (dolist (buf (hg-buffers-visiting-repo root)) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
99 (when (not (verify-visited-file-modtime buf)) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
100 (set-buffer buf) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
101 (let ((ctx (hg-buffer-context))) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
102 (message "Refreshing %s..." (buffer-name)) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
103 (revert-buffer t t t) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
104 (hg-restore-context ctx) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
105 (message "Refreshing %s...done" (buffer-name)))))) |
3370
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
106 (hg-update-mode-lines root) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
107 (mq-update-mode-lines root)) |
2993
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
108 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
109 (defun mq-last-line () |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
110 (goto-char (point-max)) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
111 (beginning-of-line) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
112 (when (looking-at "^$") |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
113 (forward-line -1)) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
114 (let ((bol (point))) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
115 (end-of-line) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
116 (let ((line (buffer-substring bol (point)))) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
117 (when (> (length line) 0) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
118 line)))) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
119 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
120 (defun mq-push (&optional patch) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
121 "Push patches until PATCH is reached. |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
122 If PATCH is nil, push at most one patch." |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
123 (interactive (list (mq-read-patch-name "qunapplied" " to push"))) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
124 (let ((root (hg-root)) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
125 (prev-buf (current-buffer)) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
126 last-line ok) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
127 (unless root |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
128 (error "Cannot push outside a repository!")) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
129 (hg-sync-buffers root) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
130 (let ((buf-name (format "MQ: Push %s" (or patch "next patch")))) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
131 (kill-buffer (get-buffer-create buf-name)) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
132 (split-window-vertically) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
133 (other-window 1) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
134 (switch-to-buffer (get-buffer-create buf-name)) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
135 (cd root) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
136 (message "Pushing...") |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
137 (setq ok (= 0 (apply 'call-process (hg-binary) nil t t "qpush" |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
138 (if patch (list patch)))) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
139 last-line (mq-last-line)) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
140 (let ((lines (count-lines (point-min) (point-max)))) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
141 (if (and (equal lines 2) (string-match "Now at:" last-line)) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
142 (progn |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
143 (kill-buffer (current-buffer)) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
144 (delete-window)) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
145 (hg-view-mode prev-buf)))) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
146 (mq-refresh-buffers root) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
147 (sit-for 0) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
148 (when last-line |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
149 (if ok |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
150 (message "Pushing... %s" last-line) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
151 (error "Pushing... %s" last-line))))) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
152 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
153 (defun mq-push-all () |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
154 "Push patches until all are applied." |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
155 (interactive) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
156 (mq-push "-a")) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
157 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
158 (defun mq-pop (&optional patch) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
159 "Pop patches until PATCH is reached. |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
160 If PATCH is nil, pop at most one patch." |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
161 (interactive (list (mq-read-patch-name "qapplied" " to pop to"))) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
162 (let ((root (hg-root)) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
163 last-line ok) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
164 (unless root |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
165 (error "Cannot pop outside a repository!")) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
166 (hg-sync-buffers root) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
167 (set-buffer (generate-new-buffer "qpop")) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
168 (cd root) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
169 (message "Popping...") |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
170 (setq ok (= 0 (apply 'call-process (hg-binary) nil t t "qpop" |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
171 (if patch (list patch)))) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
172 last-line (mq-last-line)) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
173 (kill-buffer (current-buffer)) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
174 (mq-refresh-buffers root) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
175 (sit-for 0) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
176 (when last-line |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
177 (if ok |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
178 (message "Popping... %s" last-line) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
179 (error "Popping... %s" last-line))))) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
180 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
181 (defun mq-pop-all () |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
182 "Push patches until none are applied." |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
183 (interactive) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
184 (mq-pop "-a")) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
185 |
2995
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
186 (defun mq-refresh-internal (root &rest args) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
187 (hg-sync-buffers root) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
188 (let ((patch (mq-patch-info "qtop"))) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
189 (message "Refreshing %s..." patch) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
190 (let ((ret (apply 'hg-run "qrefresh" args))) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
191 (if (equal (car ret) 0) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
192 (message "Refreshing %s... done." patch) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
193 (error "Refreshing %s... %s" patch (hg-chomp (cdr ret))))))) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
194 |
2993
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
195 (defun mq-refresh () |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
196 "Refresh the topmost applied patch." |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
197 (interactive) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
198 (let ((root (hg-root))) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
199 (unless root |
2995
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
200 (error "Cannot refresh outside of a repository!")) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
201 (mq-refresh-internal root))) |
2993
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
202 |
2995
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
203 (defun mq-patch-info (cmd &optional msg) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
204 (let* ((ret (hg-run cmd)) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
205 (info (hg-chomp (cdr ret)))) |
2993
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
206 (if (equal (car ret) 0) |
2995
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
207 (if msg |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
208 (message "%s patch: %s" msg info) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
209 info) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
210 (error "%s" info)))) |
2993
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
211 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
212 (defun mq-top () |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
213 "Print the name of the topmost applied patch." |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
214 (interactive) |
2995
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
215 (mq-patch-info "qtop" "Top")) |
2993
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
216 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
217 (defun mq-next () |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
218 "Print the name of the next patch to be pushed." |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
219 (interactive) |
2995
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
220 (mq-patch-info "qnext" "Next")) |
2993
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
221 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
222 (defun mq-previous () |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
223 "Print the name of the first patch below the topmost applied patch. |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
224 This would become the active patch if popped to." |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
225 (interactive) |
2995
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
226 (mq-patch-info "qprev" "Previous")) |
2993
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
227 |
2995
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
228 (defun mq-edit-finish () |
2996
06696f9c30c0
mq.el: Add comment to mq-edit-finish.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2995
diff
changeset
|
229 "Finish editing the description of this patch, and refresh the patch." |
2995
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
230 (interactive) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
231 (unless (equal (mq-patch-info "qtop") mq-top) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
232 (error "Topmost patch has changed!")) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
233 (hg-sync-buffers hg-root) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
234 (mq-refresh-internal hg-root "-m" (buffer-substring (point-min) (point-max))) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
235 (let ((buf mq-prev-buffer)) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
236 (kill-buffer nil) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
237 (switch-to-buffer buf))) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
238 |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
239 (defun mq-edit-kill () |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
240 "Kill the edit currently being prepared." |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
241 (interactive) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
242 (when (or (not (buffer-modified-p)) (y-or-n-p "Really kill this edit? ")) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
243 (let ((buf mq-prev-buffer)) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
244 (kill-buffer nil) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
245 (switch-to-buffer buf)))) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
246 |
3370
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
247 (defun mq-get-top (root) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
248 (let ((entry (assoc root mq-top-patch))) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
249 (if entry |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
250 (cdr entry)))) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
251 |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
252 (defun mq-set-top (root patch) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
253 (let ((entry (assoc root mq-top-patch))) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
254 (if entry |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
255 (if patch |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
256 (setcdr entry patch) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
257 (setq mq-top-patch (delq entry mq-top-patch))) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
258 (setq mq-top-patch (cons (cons root patch) mq-top-patch))))) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
259 |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
260 (defun mq-update-mode-lines (root) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
261 (let ((cwd default-directory)) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
262 (cd root) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
263 (condition-case nil |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
264 (mq-set-top root (mq-patch-info "qtop")) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
265 (error (mq-set-top root nil))) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
266 (cd cwd)) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
267 (let ((patch (mq-get-top root))) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
268 (save-excursion |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
269 (dolist (buf (hg-buffers-visiting-repo root)) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
270 (set-buffer buf) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
271 (if mq-mode |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
272 (setq mq-mode (or (and patch (concat " MQ:" patch)) " MQ"))))))) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
273 |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
274 (defun mq-mode (&optional arg) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
275 "Minor mode for Mercurial repositories with an MQ patch queue" |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
276 (interactive "i") |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
277 (cond ((hg-root) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
278 (setq mq-mode (if (null arg) (not mq-mode) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
279 arg)) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
280 (mq-update-mode-lines (hg-root)))) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
281 (run-hooks 'mq-mode-hook)) |
b7fe334ff4fb
mq.el: add mode-line hook
Brendan Cully <brendan@kublai.com>
parents:
2996
diff
changeset
|
282 |
2995
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
283 (defun mq-edit-mode () |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
284 "Mode for editing the description of a patch. |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
285 |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
286 Key bindings |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
287 ------------ |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
288 \\[mq-edit-finish] use this description |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
289 \\[mq-edit-kill] abandon this description" |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
290 (interactive) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
291 (use-local-map mq-edit-mode-map) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
292 (set-syntax-table text-mode-syntax-table) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
293 (setq local-abbrev-table text-mode-abbrev-table |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
294 major-mode 'mq-edit-mode |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
295 mode-name "MQ-Edit") |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
296 (set-buffer-modified-p nil) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
297 (setq buffer-undo-list nil) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
298 (run-hooks 'text-mode-hook 'mq-edit-mode-hook)) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
299 |
2993
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
300 (defun mq-refresh-edit () |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
301 "Refresh the topmost applied patch, editing the patch description." |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
302 (interactive) |
2995
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
303 (while mq-prev-buffer |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
304 (set-buffer mq-prev-buffer)) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
305 (let ((root (hg-root)) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
306 (prev-buffer (current-buffer)) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
307 (patch (mq-patch-info "qtop"))) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
308 (hg-sync-buffers root) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
309 (let ((buf-name (format "*MQ: Edit description of %s*" patch))) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
310 (switch-to-buffer (get-buffer-create buf-name)) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
311 (when (= (point-min) (point-max)) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
312 (set (make-local-variable 'hg-root) root) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
313 (set (make-local-variable 'mq-top) patch) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
314 (setq mq-prev-buffer prev-buffer) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
315 (insert (hg-run0 "qheader")) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
316 (goto-char (point-min))) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
317 (mq-edit-mode) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
318 (cd root))) |
e2bad806ccc3
mq.el: add ability to edit a patch.
Bryan O'Sullivan <bos@serpentine.com>
parents:
2993
diff
changeset
|
319 (message "Type `C-c C-c' to finish editing and refresh the patch.")) |
2993
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
320 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
321 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
322 (provide 'mq) |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
323 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
324 |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
325 ;;; Local Variables: |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
326 ;;; prompt-to-byte-compile: nil |
425413d9ef59
Emacs: add mq.el, early support for Mercurial Queues.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
327 ;;; end: |