annotate contrib/mercurial.el @ 13306:146bad852ede stable

bookmarks: always write undo file Always write the undo file. Otherwise, rollback will not work for the initial bookmark as undo.bookmarks doesn't exists. In this case undo.bookmarks needs already be empty.
author David Soria Parra <dsp@php.net>
date Thu, 27 Jan 2011 02:55:11 +0100
parents bc69ba99e34b
children 7de7630053cb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1 ;;; mercurial.el --- Emacs support for the Mercurial distributed SCM
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
2
2997
48baf9fb1921 mercurial.el: get rid of unportable, unperformant use of replace-regexp.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2877
diff changeset
3 ;; Copyright (C) 2005, 2006 Bryan O'Sullivan
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
4
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
5 ;; Author: Bryan O'Sullivan <bos@serpentine.com>
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
6
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
7 ;; mercurial.el is free software; you can redistribute it and/or
10268
2fa95306d40c mercurial.el: add forgotten version number
Martin Geisler <mg@lazybytes.net>
parents: 10263
diff changeset
8 ;; modify it under the terms of the GNU General Public License version
2fa95306d40c mercurial.el: add forgotten version number
Martin Geisler <mg@lazybytes.net>
parents: 10263
diff changeset
9 ;; 2 or any later version.
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
10
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
11 ;; mercurial.el is distributed in the hope that it will be useful, but
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
12 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
13 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
14 ;; General Public License for more details.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
15
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
16 ;; You should have received a copy of the GNU General Public License
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
17 ;; along with mercurial.el, GNU Emacs, or XEmacs; see the file COPYING
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
18 ;; (`C-h C-l'). If not, write to the Free Software Foundation, Inc.,
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
19 ;; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
20
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
21 ;;; Commentary:
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
22
1004
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
23 ;; mercurial.el builds upon Emacs's VC mode to provide flexible
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
24 ;; integration with the Mercurial distributed SCM tool.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
25
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
26 ;; To get going as quickly as possible, load mercurial.el into Emacs and
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
27 ;; type `C-c h h'; this runs hg-help-overview, which prints a helpful
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
28 ;; usage overview.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
29
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
30 ;; Much of the inspiration for mercurial.el comes from Rajesh
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
31 ;; Vaidheeswarran's excellent p4.el, which does an admirably thorough
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
32 ;; job for the commercial Perforce SCM product. In fact, substantial
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
33 ;; chunks of code are adapted from p4.el.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
34
1004
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
35 ;; This code has been developed under XEmacs 21.5, and may not work as
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
36 ;; well under GNU Emacs (albeit tested under 21.4). Patches to
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
37 ;; enhance the portability of this code, fix bugs, and add features
6390
67784cb38d58 mercurial.el: note new Emacs VC mode support
Bryan O'Sullivan <bos@serpentine.com>
parents: 5467
diff changeset
38 ;; are most welcome.
67784cb38d58 mercurial.el: note new Emacs VC mode support
Bryan O'Sullivan <bos@serpentine.com>
parents: 5467
diff changeset
39
67784cb38d58 mercurial.el: note new Emacs VC mode support
Bryan O'Sullivan <bos@serpentine.com>
parents: 5467
diff changeset
40 ;; As of version 22.3, GNU Emacs's VC mode has direct support for
67784cb38d58 mercurial.el: note new Emacs VC mode support
Bryan O'Sullivan <bos@serpentine.com>
parents: 5467
diff changeset
41 ;; Mercurial, so this package may not prove as useful there.
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
42
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
43 ;; Please send problem reports and suggestions to bos@serpentine.com.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
44
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
45
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
46 ;;; Code:
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
47
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
48 (eval-when-compile (require 'cl))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
49 (require 'diff-mode)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
50 (require 'easymenu)
1024
5b257e419816 Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents: 1011
diff changeset
51 (require 'executable)
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
52 (require 'vc)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
53
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
54 (defmacro hg-feature-cond (&rest clauses)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
55 "Test CLAUSES for feature at compile time.
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
56 Each clause is (FEATURE BODY...)."
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
57 (dolist (x clauses)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
58 (let ((feature (car x))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
59 (body (cdr x)))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
60 (when (or (eq feature t)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
61 (featurep feature))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
62 (return (cons 'progn body))))))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
63
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
64
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
65 ;;; XEmacs has view-less, while GNU Emacs has view. Joy.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
66
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
67 (hg-feature-cond
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
68 (xemacs (require 'view-less))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
69 (t (require 'view)))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
70
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
71
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
72 ;;; Variables accessible through the custom system.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
73
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
74 (defgroup mercurial nil
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
75 "Mercurial distributed SCM."
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
76 :group 'tools)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
77
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
78 (defcustom hg-binary
1011
d06420c90d8b Emacs: search for hg in path before looking in funny places.
bos@serpentine.internal.keyresearch.com
parents: 1004
diff changeset
79 (or (executable-find "hg")
d06420c90d8b Emacs: search for hg in path before looking in funny places.
bos@serpentine.internal.keyresearch.com
parents: 1004
diff changeset
80 (dolist (path '("~/bin/hg" "/usr/bin/hg" "/usr/local/bin/hg"))
d06420c90d8b Emacs: search for hg in path before looking in funny places.
bos@serpentine.internal.keyresearch.com
parents: 1004
diff changeset
81 (when (file-executable-p path)
d06420c90d8b Emacs: search for hg in path before looking in funny places.
bos@serpentine.internal.keyresearch.com
parents: 1004
diff changeset
82 (return path))))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
83 "The path to Mercurial's hg executable."
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
84 :type '(file :must-match t)
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
85 :group 'mercurial)
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
86
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
87 (defcustom hg-mode-hook nil
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
88 "Hook run when a buffer enters hg-mode."
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
89 :type 'sexp
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
90 :group 'mercurial)
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
91
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
92 (defcustom hg-commit-mode-hook nil
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
93 "Hook run when a buffer is created to prepare a commit."
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
94 :type 'sexp
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
95 :group 'mercurial)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
96
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
97 (defcustom hg-pre-commit-hook nil
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
98 "Hook run before a commit is performed.
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
99 If you want to prevent the commit from proceeding, raise an error."
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
100 :type 'sexp
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
101 :group 'mercurial)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
102
1029
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
103 (defcustom hg-log-mode-hook nil
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
104 "Hook run after a buffer is filled with log information."
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
105 :type 'sexp
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
106 :group 'mercurial)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
107
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
108 (defcustom hg-global-prefix "\C-ch"
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
109 "The global prefix for Mercurial keymap bindings."
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
110 :type 'sexp
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
111 :group 'mercurial)
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
112
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
113 (defcustom hg-commit-allow-empty-message nil
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
114 "Whether to allow changes to be committed with empty descriptions."
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
115 :type 'boolean
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
116 :group 'mercurial)
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
117
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
118 (defcustom hg-commit-allow-empty-file-list nil
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
119 "Whether to allow changes to be committed without any modified files."
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
120 :type 'boolean
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
121 :group 'mercurial)
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
122
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
123 (defcustom hg-rev-completion-limit 100
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
124 "The maximum number of revisions that hg-read-rev will offer to complete.
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
125 This affects memory usage and performance when prompting for revisions
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
126 in a repository with a lot of history."
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
127 :type 'integer
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
128 :group 'mercurial)
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
129
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
130 (defcustom hg-log-limit 50
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
131 "The maximum number of revisions that hg-log will display."
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
132 :type 'integer
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
133 :group 'mercurial)
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
134
995
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
135 (defcustom hg-update-modeline t
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
136 "Whether to update the modeline with the status of a file after every save.
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
137 Set this to nil on platforms with poor process management, such as Windows."
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
138 :type 'boolean
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
139 :group 'mercurial)
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
140
1029
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
141 (defcustom hg-incoming-repository "default"
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
142 "The repository from which changes are pulled from by default.
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
143 This should be a symbolic repository name, since it is used for all
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
144 repository-related commands."
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
145 :type 'string
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
146 :group 'mercurial)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
147
12796
bc69ba99e34b mercurial.el: fix hg-outgoing path when 'default-push' is not defined
Azhagu Selvan SP <tamizhgeek@gmail.com>
parents: 10268
diff changeset
148 (defcustom hg-outgoing-repository ""
1029
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
149 "The repository to which changes are pushed to by default.
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
150 This should be a symbolic repository name, since it is used for all
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
151 repository-related commands."
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
152 :type 'string
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
153 :group 'mercurial)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
154
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
155
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
156 ;;; Other variables.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
157
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
158 (defvar hg-mode nil
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
159 "Is this file managed by Mercurial?")
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
160 (make-variable-buffer-local 'hg-mode)
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
161 (put 'hg-mode 'permanent-local t)
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
162
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
163 (defvar hg-status nil)
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
164 (make-variable-buffer-local 'hg-status)
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
165 (put 'hg-status 'permanent-local t)
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
166
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
167 (defvar hg-prev-buffer nil)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
168 (make-variable-buffer-local 'hg-prev-buffer)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
169 (put 'hg-prev-buffer 'permanent-local t)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
170
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
171 (defvar hg-root nil)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
172 (make-variable-buffer-local 'hg-root)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
173 (put 'hg-root 'permanent-local t)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
174
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
175 (defvar hg-view-mode nil)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
176 (make-variable-buffer-local 'hg-view-mode)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
177 (put 'hg-view-mode 'permanent-local t)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
178
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
179 (defvar hg-view-file-name nil)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
180 (make-variable-buffer-local 'hg-view-file-name)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
181 (put 'hg-view-file-name 'permanent-local t)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
182
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
183 (defvar hg-output-buffer-name "*Hg*"
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
184 "The name to use for Mercurial output buffers.")
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
185
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
186 (defvar hg-file-history nil)
1029
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
187 (defvar hg-repo-history nil)
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
188 (defvar hg-rev-history nil)
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
189 (defvar hg-repo-completion-table nil) ; shut up warnings
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
190
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
191
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
192 ;;; Random constants.
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
193
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
194 (defconst hg-commit-message-start
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
195 "--- Enter your commit message. Type `C-c C-c' to commit. ---\n")
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
196
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
197 (defconst hg-commit-message-end
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
198 "--- Files in bold will be committed. Click to toggle selection. ---\n")
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
199
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
200 (defconst hg-state-alist
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
201 '((?M . modified)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
202 (?A . added)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
203 (?R . removed)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
204 (?! . deleted)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
205 (?C . normal)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
206 (?I . ignored)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
207 (?? . nil)))
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
208
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
209 ;;; hg-mode keymap.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
210
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
211 (defvar hg-prefix-map
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
212 (let ((map (make-sparse-keymap)))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
213 (hg-feature-cond (xemacs (set-keymap-name map 'hg-prefix-map))) ; XEmacs
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
214 (set-keymap-parent map vc-prefix-map)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
215 (define-key map "=" 'hg-diff)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
216 (define-key map "c" 'hg-undo)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
217 (define-key map "g" 'hg-annotate)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
218 (define-key map "i" 'hg-add)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
219 (define-key map "l" 'hg-log)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
220 (define-key map "n" 'hg-commit-start)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
221 ;; (define-key map "r" 'hg-update)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
222 (define-key map "u" 'hg-revert-buffer)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
223 (define-key map "~" 'hg-version-other-window)
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
224 map)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
225 "This keymap overrides some default vc-mode bindings.")
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
226
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
227 (defvar hg-mode-map
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
228 (let ((map (make-sparse-keymap)))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
229 (define-key map "\C-xv" hg-prefix-map)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
230 map))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
231
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
232 (add-minor-mode 'hg-mode 'hg-mode hg-mode-map)
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
233
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
234
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
235 ;;; Global keymap.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
236
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
237 (defvar hg-global-map
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
238 (let ((map (make-sparse-keymap)))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
239 (define-key map "," 'hg-incoming)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
240 (define-key map "." 'hg-outgoing)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
241 (define-key map "<" 'hg-pull)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
242 (define-key map "=" 'hg-diff-repo)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
243 (define-key map ">" 'hg-push)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
244 (define-key map "?" 'hg-help-overview)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
245 (define-key map "A" 'hg-addremove)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
246 (define-key map "U" 'hg-revert)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
247 (define-key map "a" 'hg-add)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
248 (define-key map "c" 'hg-commit-start)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
249 (define-key map "f" 'hg-forget)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
250 (define-key map "h" 'hg-help-overview)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
251 (define-key map "i" 'hg-init)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
252 (define-key map "l" 'hg-log-repo)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
253 (define-key map "r" 'hg-root)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
254 (define-key map "s" 'hg-status)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
255 (define-key map "u" 'hg-update)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
256 map))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
257
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
258 (global-set-key hg-global-prefix hg-global-map)
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
259
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
260 ;;; View mode keymap.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
261
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
262 (defvar hg-view-mode-map
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
263 (let ((map (make-sparse-keymap)))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
264 (hg-feature-cond (xemacs (set-keymap-name map 'hg-view-mode-map))) ; XEmacs
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
265 (define-key map (hg-feature-cond (xemacs [button2])
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
266 (t [mouse-2]))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
267 'hg-buffer-mouse-clicked)
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
268 map))
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
269
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
270 (add-minor-mode 'hg-view-mode "" hg-view-mode-map)
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
271
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
272
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
273 ;;; Commit mode keymaps.
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
274
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
275 (defvar hg-commit-mode-map
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
276 (let ((map (make-sparse-keymap)))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
277 (define-key map "\C-c\C-c" 'hg-commit-finish)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
278 (define-key map "\C-c\C-k" 'hg-commit-kill)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
279 (define-key map "\C-xv=" 'hg-diff-repo)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
280 map))
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
281
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
282 (defvar hg-commit-mode-file-map
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
283 (let ((map (make-sparse-keymap)))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
284 (define-key map (hg-feature-cond (xemacs [button2])
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
285 (t [mouse-2]))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
286 'hg-commit-mouse-clicked)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
287 (define-key map " " 'hg-commit-toggle-file)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
288 (define-key map "\r" 'hg-commit-toggle-file)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
289 map))
1308
2073e5a71008 Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1246
diff changeset
290
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
291
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
292 ;;; Convenience functions.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
293
995
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
294 (defsubst hg-binary ()
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
295 (if hg-binary
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
296 hg-binary
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
297 (error "No `hg' executable found!")))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
298
995
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
299 (defsubst hg-replace-in-string (str regexp newtext &optional literal)
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
300 "Replace all matches in STR for REGEXP with NEWTEXT string.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
301 Return the new string. Optional LITERAL non-nil means do a literal
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
302 replacement.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
303
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
304 This function bridges yet another pointless impedance gap between
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
305 XEmacs and GNU Emacs."
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
306 (hg-feature-cond
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
307 (xemacs (replace-in-string str regexp newtext literal))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
308 (t (replace-regexp-in-string regexp newtext str nil literal))))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
309
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
310 (defsubst hg-strip (str)
1178
a7abffa4b19f Adjust hg-strip and hg-chomp regexps.
jdc@uwo.ca
parents: 1175
diff changeset
311 "Strip leading and trailing blank lines from a string."
a7abffa4b19f Adjust hg-strip and hg-chomp regexps.
jdc@uwo.ca
parents: 1175
diff changeset
312 (hg-replace-in-string (hg-replace-in-string str "[\r\n][ \t\r\n]*\\'" "")
a7abffa4b19f Adjust hg-strip and hg-chomp regexps.
jdc@uwo.ca
parents: 1175
diff changeset
313 "\\`[ \t\r\n]*[\r\n]" ""))
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
314
995
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
315 (defsubst hg-chomp (str)
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
316 "Strip trailing newlines from a string."
2999
e75fdc37100c mercurial.el: fix hg-chomp.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2998
diff changeset
317 (hg-replace-in-string str "[\r\n]+\\'" ""))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
318
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
319 (defun hg-run-command (command &rest args)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
320 "Run the shell command COMMAND, returning (EXIT-CODE . COMMAND-OUTPUT).
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
321 The list ARGS contains a list of arguments to pass to the command."
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
322 (let* (exit-code
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
323 (output
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
324 (with-output-to-string
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
325 (with-current-buffer
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
326 standard-output
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
327 (setq exit-code
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
328 (apply 'call-process command nil t nil args))))))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
329 (cons exit-code output)))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
330
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
331 (defun hg-run (command &rest args)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
332 "Run the Mercurial command COMMAND, returning (EXIT-CODE . COMMAND-OUTPUT)."
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
333 (apply 'hg-run-command (hg-binary) command args))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
334
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
335 (defun hg-run0 (command &rest args)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
336 "Run the Mercurial command COMMAND, returning its output.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
337 If the command does not exit with a zero status code, raise an error."
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
338 (let ((res (apply 'hg-run-command (hg-binary) command args)))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
339 (if (not (eq (car res) 0))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
340 (error "Mercurial command failed %s - exit code %s"
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
341 (cons command args)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
342 (car res))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
343 (cdr res))))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
344
4412
189a8ca52bfc mercurial.el: move defmacro of hg-do-across-repo before use
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4411
diff changeset
345 (defmacro hg-do-across-repo (path &rest body)
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
346 (let ((root-name (make-symbol "root-"))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
347 (buf-name (make-symbol "buf-")))
4412
189a8ca52bfc mercurial.el: move defmacro of hg-do-across-repo before use
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4411
diff changeset
348 `(let ((,root-name (hg-root ,path)))
189a8ca52bfc mercurial.el: move defmacro of hg-do-across-repo before use
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4411
diff changeset
349 (save-excursion
189a8ca52bfc mercurial.el: move defmacro of hg-do-across-repo before use
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4411
diff changeset
350 (dolist (,buf-name (buffer-list))
189a8ca52bfc mercurial.el: move defmacro of hg-do-across-repo before use
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4411
diff changeset
351 (set-buffer ,buf-name)
189a8ca52bfc mercurial.el: move defmacro of hg-do-across-repo before use
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4411
diff changeset
352 (when (and hg-status (equal (hg-root buffer-file-name) ,root-name))
189a8ca52bfc mercurial.el: move defmacro of hg-do-across-repo before use
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4411
diff changeset
353 ,@body))))))
189a8ca52bfc mercurial.el: move defmacro of hg-do-across-repo before use
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4411
diff changeset
354
189a8ca52bfc mercurial.el: move defmacro of hg-do-across-repo before use
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4411
diff changeset
355 (put 'hg-do-across-repo 'lisp-indent-function 1)
189a8ca52bfc mercurial.el: move defmacro of hg-do-across-repo before use
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4411
diff changeset
356
1024
5b257e419816 Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents: 1011
diff changeset
357 (defun hg-sync-buffers (path)
5b257e419816 Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents: 1011
diff changeset
358 "Sync buffers visiting PATH with their on-disk copies.
5b257e419816 Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents: 1011
diff changeset
359 If PATH is not being visited, but is under the repository root, sync
5b257e419816 Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents: 1011
diff changeset
360 all buffers visiting files in the repository."
5b257e419816 Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents: 1011
diff changeset
361 (let ((buf (find-buffer-visiting path)))
5b257e419816 Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents: 1011
diff changeset
362 (if buf
5b257e419816 Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents: 1011
diff changeset
363 (with-current-buffer buf
5b257e419816 Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents: 1011
diff changeset
364 (vc-buffer-sync))
5b257e419816 Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents: 1011
diff changeset
365 (hg-do-across-repo path
5b257e419816 Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents: 1011
diff changeset
366 (vc-buffer-sync)))))
1308
2073e5a71008 Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1246
diff changeset
367
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
368 (defun hg-buffer-commands (pnt)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
369 "Use the properties of a character to do something sensible."
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
370 (interactive "d")
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
371 (let ((rev (get-char-property pnt 'rev))
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
372 (file (get-char-property pnt 'file)))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
373 (cond
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
374 (file
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
375 (find-file-other-window file))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
376 (rev
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
377 (hg-diff hg-view-file-name rev rev))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
378 ((message "I don't know how to do that yet")))))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
379
1004
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
380 (defsubst hg-event-point (event)
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
381 "Return the character position of the mouse event EVENT."
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
382 (hg-feature-cond (xemacs (event-point event))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
383 (t (posn-point (event-start event)))))
1004
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
384
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
385 (defsubst hg-event-window (event)
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
386 "Return the window over which mouse event EVENT occurred."
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
387 (hg-feature-cond (xemacs (event-window event))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
388 (t (posn-window (event-start event)))))
1004
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
389
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
390 (defun hg-buffer-mouse-clicked (event)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
391 "Translate the mouse clicks in a HG log buffer to character events.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
392 These are then handed off to `hg-buffer-commands'.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
393
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
394 Handle frickin' frackin' gratuitous event-related incompatibilities."
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
395 (interactive "e")
1004
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
396 (select-window (hg-event-window event))
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
397 (hg-buffer-commands (hg-event-point event)))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
398
995
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
399 (defsubst hg-abbrev-file-name (file)
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
400 "Portable wrapper around abbreviate-file-name."
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
401 (hg-feature-cond (xemacs (abbreviate-file-name file t))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
402 (t (abbreviate-file-name file))))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
403
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
404 (defun hg-read-file-name (&optional prompt default)
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
405 "Read a file or directory name, or a pattern, to use with a command."
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
406 (save-excursion
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
407 (while hg-prev-buffer
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
408 (set-buffer hg-prev-buffer))
2668
7a32b7e6c563 Emacs: apply "expand-filename" on "default-directory".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2667
diff changeset
409 (let ((path (or default
7a32b7e6c563 Emacs: apply "expand-filename" on "default-directory".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2667
diff changeset
410 (buffer-file-name)
7a32b7e6c563 Emacs: apply "expand-filename" on "default-directory".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2667
diff changeset
411 (expand-file-name default-directory))))
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
412 (if (or (not path) current-prefix-arg)
2315
c4a2d8502cc0 Emacs: adapt read-file-name invocation for (non-X)Emacs 21.4.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
413 (expand-file-name
c4a2d8502cc0 Emacs: adapt read-file-name invocation for (non-X)Emacs 21.4.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
414 (eval (list* 'read-file-name
c4a2d8502cc0 Emacs: adapt read-file-name invocation for (non-X)Emacs 21.4.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
415 (format "File, directory or pattern%s: "
c4a2d8502cc0 Emacs: adapt read-file-name invocation for (non-X)Emacs 21.4.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
416 (or prompt ""))
c4a2d8502cc0 Emacs: adapt read-file-name invocation for (non-X)Emacs 21.4.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
417 (and path (file-name-directory path))
c4a2d8502cc0 Emacs: adapt read-file-name invocation for (non-X)Emacs 21.4.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
418 nil nil
c4a2d8502cc0 Emacs: adapt read-file-name invocation for (non-X)Emacs 21.4.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
419 (and path (file-name-nondirectory path))
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
420 (hg-feature-cond
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
421 (xemacs (cons (quote 'hg-file-history) nil))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
422 (t nil)))))
2315
c4a2d8502cc0 Emacs: adapt read-file-name invocation for (non-X)Emacs 21.4.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
423 path))))
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
424
2316
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
425 (defun hg-read-number (&optional prompt default)
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
426 "Read a integer value."
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
427 (save-excursion
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
428 (if (or (not default) current-prefix-arg)
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
429 (string-to-number
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
430 (eval (list* 'read-string
5081
ea7b982b6c08 Remove trailing spaces
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4694
diff changeset
431 (or prompt "")
2316
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
432 (if default (cons (format "%d" default) nil) nil))))
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
433 default)))
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
434
1029
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
435 (defun hg-read-config ()
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
436 "Return an alist of (key . value) pairs of Mercurial config data.
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
437 Each key is of the form (section . name)."
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
438 (let (items)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
439 (dolist (line (split-string (hg-chomp (hg-run0 "debugconfig")) "\n") items)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
440 (string-match "^\\([^=]*\\)=\\(.*\\)" line)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
441 (let* ((left (substring line (match-beginning 1) (match-end 1)))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
442 (right (substring line (match-beginning 2) (match-end 2)))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
443 (key (split-string left "\\."))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
444 (value (hg-replace-in-string right "\\\\n" "\n" t)))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
445 (setq items (cons (cons (cons (car key) (cadr key)) value) items))))))
1308
2073e5a71008 Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1246
diff changeset
446
1029
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
447 (defun hg-config-section (section config)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
448 "Return an alist of (name . value) pairs for SECTION of CONFIG."
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
449 (let (items)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
450 (dolist (item config items)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
451 (when (equal (caar item) section)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
452 (setq items (cons (cons (cdar item) (cdr item)) items))))))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
453
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
454 (defun hg-string-starts-with (sub str)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
455 "Indicate whether string STR starts with the substring or character SUB."
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
456 (if (not (stringp sub))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
457 (and (> (length str) 0) (equal (elt str 0) sub))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
458 (let ((sub-len (length sub)))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
459 (and (<= sub-len (length str))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
460 (string= sub (substring str 0 sub-len))))))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
461
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
462 (defun hg-complete-repo (string predicate all)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
463 "Attempt to complete a repository name.
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
464 We complete on either symbolic names from Mercurial's config or real
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
465 directory names from the file system. We do not penalise URLs."
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
466 (or (if all
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
467 (all-completions string hg-repo-completion-table predicate)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
468 (try-completion string hg-repo-completion-table predicate))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
469 (let* ((str (expand-file-name string))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
470 (dir (file-name-directory str))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
471 (file (file-name-nondirectory str)))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
472 (if all
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
473 (let (completions)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
474 (dolist (name (delete "./" (file-name-all-completions file dir))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
475 completions)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
476 (let ((path (concat dir name)))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
477 (when (file-directory-p path)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
478 (setq completions (cons name completions))))))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
479 (let ((comp (file-name-completion file dir)))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
480 (if comp
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
481 (hg-abbrev-file-name (concat dir comp))))))))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
482
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
483 (defun hg-read-repo-name (&optional prompt initial-contents default)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
484 "Read the location of a repository."
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
485 (save-excursion
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
486 (while hg-prev-buffer
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
487 (set-buffer hg-prev-buffer))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
488 (let (hg-repo-completion-table)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
489 (if current-prefix-arg
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
490 (progn
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
491 (dolist (path (hg-config-section "paths" (hg-read-config)))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
492 (setq hg-repo-completion-table
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
493 (cons (cons (car path) t) hg-repo-completion-table))
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
494 (unless (hg-string-starts-with (hg-feature-cond
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
495 (xemacs directory-sep-char)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
496 (t ?/))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
497 (cdr path))
1029
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
498 (setq hg-repo-completion-table
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
499 (cons (cons (cdr path) t) hg-repo-completion-table))))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
500 (completing-read (format "Repository%s: " (or prompt ""))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
501 'hg-complete-repo
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
502 nil
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
503 nil
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
504 initial-contents
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
505 'hg-repo-history
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
506 default))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
507 default))))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
508
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
509 (defun hg-read-rev (&optional prompt default)
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
510 "Read a revision or tag, offering completions."
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
511 (save-excursion
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
512 (while hg-prev-buffer
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
513 (set-buffer hg-prev-buffer))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
514 (let ((rev (or default "tip")))
1029
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
515 (if current-prefix-arg
1175
7e909ceeb36a Emacs: fix invocations of "hg log" to match current behaviour of log.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1029
diff changeset
516 (let ((revs (split-string
7e909ceeb36a Emacs: fix invocations of "hg log" to match current behaviour of log.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1029
diff changeset
517 (hg-chomp
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
518 (hg-run0 "-q" "log" "-l"
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
519 (format "%d" hg-rev-completion-limit)))
1175
7e909ceeb36a Emacs: fix invocations of "hg log" to match current behaviour of log.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1029
diff changeset
520 "[\n:]")))
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
521 (dolist (line (split-string (hg-chomp (hg-run0 "tags")) "\n"))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
522 (setq revs (cons (car (split-string line "\\s-")) revs)))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
523 (completing-read (format "Revision%s (%s): "
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
524 (or prompt "")
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
525 (or default "tip"))
5465
9873cbb134b2 mercurial.el, mq.el: remove runtime dependencies on CL package
NIIMI Satoshi <sa2c@sa2c.net>
parents: 5142
diff changeset
526 (mapcar (lambda (x) (cons x x)) revs)
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
527 nil
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
528 nil
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
529 nil
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
530 'hg-rev-history
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
531 (or default "tip")))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
532 rev))))
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
533
3002
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
534 (defun hg-parents-for-mode-line (root)
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
535 "Format the parents of the working directory for the mode line."
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
536 (let ((parents (split-string (hg-chomp
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
537 (hg-run0 "--cwd" root "parents" "--template"
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
538 "{rev}\n")) "\n")))
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
539 (mapconcat 'identity parents "+")))
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
540
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
541 (defun hg-buffers-visiting-repo (&optional path)
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
542 "Return a list of buffers visiting the repository containing PATH."
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
543 (let ((root-name (hg-root (or path (buffer-file-name))))
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
544 bufs)
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
545 (save-excursion
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
546 (dolist (buf (buffer-list) bufs)
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
547 (set-buffer buf)
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
548 (let ((name (buffer-file-name)))
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
549 (when (and hg-status name (equal (hg-root name) root-name))
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
550 (setq bufs (cons buf bufs))))))))
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
551
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
552 (defun hg-update-mode-lines (path)
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
553 "Update the mode lines of all buffers visiting the same repository as PATH."
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
554 (let* ((root (hg-root path))
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
555 (parents (hg-parents-for-mode-line root)))
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
556 (save-excursion
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
557 (dolist (info (hg-path-status
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
558 root
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
559 (mapcar
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
560 (function
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
561 (lambda (buf)
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
562 (substring (buffer-file-name buf) (length root))))
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
563 (hg-buffers-visiting-repo root))))
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
564 (let* ((name (car info))
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
565 (status (cdr info))
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
566 (buf (find-buffer-visiting (concat root name))))
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
567 (when buf
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
568 (set-buffer buf)
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
569 (hg-mode-line-internal status parents)))))))
5081
ea7b982b6c08 Remove trailing spaces
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4694
diff changeset
570
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
571
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
572 ;;; View mode bits.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
573
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
574 (defun hg-exit-view-mode (buf)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
575 "Exit from hg-view-mode.
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
576 We delete the current window if entering hg-view-mode split the
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
577 current frame."
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
578 (when (and (eq buf (current-buffer))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
579 (> (length (window-list)) 1))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
580 (delete-window))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
581 (when (buffer-live-p buf)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
582 (kill-buffer buf)))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
583
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
584 (defun hg-view-mode (prev-buffer &optional file-name)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
585 (goto-char (point-min))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
586 (set-buffer-modified-p nil)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
587 (toggle-read-only t)
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
588 (hg-feature-cond (xemacs (view-minor-mode prev-buffer 'hg-exit-view-mode))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
589 (t (view-mode-enter nil 'hg-exit-view-mode)))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
590 (setq hg-view-mode t)
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
591 (setq truncate-lines t)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
592 (when file-name
5081
ea7b982b6c08 Remove trailing spaces
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4694
diff changeset
593 (setq hg-view-file-name
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
594 (hg-abbrev-file-name file-name))))
1308
2073e5a71008 Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1246
diff changeset
595
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
596 (defun hg-file-status (file)
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
597 "Return status of FILE, or nil if FILE does not exist or is unmanaged."
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
598 (let* ((s (hg-run "status" file))
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
599 (exit (car s))
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
600 (output (cdr s)))
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
601 (if (= exit 0)
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
602 (let ((state (and (>= (length output) 2)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
603 (= (aref output 1) ? )
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
604 (assq (aref output 0) hg-state-alist))))
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
605 (if state
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
606 (cdr state)
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
607 'normal)))))
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
608
3002
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
609 (defun hg-path-status (root paths)
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
610 "Return status of PATHS in repo ROOT as an alist.
3001
a7c4c7537999 mercurial.el: add hg-status.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3000
diff changeset
611 Each entry is a pair (FILE-NAME . STATUS)."
3002
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
612 (let ((s (apply 'hg-run "--cwd" root "status" "-marduc" paths))
3005
18c661e9abd9 mercurial.el: deal with more vagaries of "hg status".
Bryan O'Sullivan <bos@serpentine.com>
parents: 3003
diff changeset
613 result)
18c661e9abd9 mercurial.el: deal with more vagaries of "hg status".
Bryan O'Sullivan <bos@serpentine.com>
parents: 3003
diff changeset
614 (dolist (entry (split-string (hg-chomp (cdr s)) "\n") (nreverse result))
18c661e9abd9 mercurial.el: deal with more vagaries of "hg status".
Bryan O'Sullivan <bos@serpentine.com>
parents: 3003
diff changeset
615 (let (state name)
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
616 (cond ((= (aref entry 1) ? )
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
617 (setq state (assq (aref entry 0) hg-state-alist)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
618 name (substring entry 2)))
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
619 ((string-match "\\(.*\\): " entry)
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
620 (setq name (match-string 1 entry))))
3005
18c661e9abd9 mercurial.el: deal with more vagaries of "hg status".
Bryan O'Sullivan <bos@serpentine.com>
parents: 3003
diff changeset
621 (setq result (cons (cons name state) result))))))
3001
a7c4c7537999 mercurial.el: add hg-status.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3000
diff changeset
622
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
623 (defmacro hg-view-output (args &rest body)
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
624 "Execute BODY in a clean buffer, then quickly display that buffer.
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
625 If the buffer contains one line, its contents are displayed in the
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
626 minibuffer. Otherwise, the buffer is displayed in view-mode.
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
627 ARGS is of the form (BUFFER-NAME &optional FILE), where BUFFER-NAME is
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
628 the name of the buffer to create, and FILE is the name of the file
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
629 being viewed."
4433
ba22e867cb23 mercurial.el: fix error on hg-read-rev() with small tip, and cleanups
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4413
diff changeset
630 (let ((prev-buf (make-symbol "prev-buf-"))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
631 (v-b-name (car args))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
632 (v-m-rest (cdr args)))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
633 `(let ((view-buf-name ,v-b-name)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
634 (,prev-buf (current-buffer)))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
635 (get-buffer-create view-buf-name)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
636 (kill-buffer view-buf-name)
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
637 (get-buffer-create view-buf-name)
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
638 (set-buffer view-buf-name)
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
639 (save-excursion
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
640 ,@body)
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
641 (case (count-lines (point-min) (point-max))
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
642 ((0)
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
643 (kill-buffer view-buf-name)
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
644 (message "(No output)"))
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
645 ((1)
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
646 (let ((msg (hg-chomp (buffer-substring (point-min) (point-max)))))
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
647 (kill-buffer view-buf-name)
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
648 (message "%s" msg)))
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
649 (t
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
650 (pop-to-buffer view-buf-name)
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
651 (setq hg-prev-buffer ,prev-buf)
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
652 (hg-view-mode ,prev-buf ,@v-m-rest))))))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
653
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
654 (put 'hg-view-output 'lisp-indent-function 1)
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
655
3005
18c661e9abd9 mercurial.el: deal with more vagaries of "hg status".
Bryan O'Sullivan <bos@serpentine.com>
parents: 3003
diff changeset
656 ;;; Context save and restore across revert and other operations.
995
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
657
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
658 (defun hg-position-context (pos)
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
659 "Return information to help find the given position again."
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
660 (let* ((end (min (point-max) (+ pos 98))))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
661 (list pos
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
662 (buffer-substring (max (point-min) (- pos 2)) end)
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
663 (- end pos))))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
664
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
665 (defun hg-buffer-context ()
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
666 "Return information to help restore a user's editing context.
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
667 This is useful across reverts and merges, where a context is likely
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
668 to have moved a little, but not really changed."
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
669 (let ((point-context (hg-position-context (point)))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
670 (mark-context (let ((mark (mark-marker)))
5467
521284cdbcb4 mercurial.el: mark-marker() returns non-nil with no active mark on GNU Emacs
NIIMI Satoshi <sa2c@sa2c.net>
parents: 5465
diff changeset
671 (and mark
521284cdbcb4 mercurial.el: mark-marker() returns non-nil with no active mark on GNU Emacs
NIIMI Satoshi <sa2c@sa2c.net>
parents: 5465
diff changeset
672 ;; make sure active mark
521284cdbcb4 mercurial.el: mark-marker() returns non-nil with no active mark on GNU Emacs
NIIMI Satoshi <sa2c@sa2c.net>
parents: 5465
diff changeset
673 (marker-buffer mark)
521284cdbcb4 mercurial.el: mark-marker() returns non-nil with no active mark on GNU Emacs
NIIMI Satoshi <sa2c@sa2c.net>
parents: 5465
diff changeset
674 (marker-position mark)
521284cdbcb4 mercurial.el: mark-marker() returns non-nil with no active mark on GNU Emacs
NIIMI Satoshi <sa2c@sa2c.net>
parents: 5465
diff changeset
675 (hg-position-context mark)))))
995
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
676 (list point-context mark-context)))
1308
2073e5a71008 Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1246
diff changeset
677
995
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
678 (defun hg-find-context (ctx)
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
679 "Attempt to find a context in the given buffer.
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
680 Always returns a valid, hopefully sane, position."
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
681 (let ((pos (nth 0 ctx))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
682 (str (nth 1 ctx))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
683 (fixup (nth 2 ctx)))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
684 (save-excursion
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
685 (goto-char (max (point-min) (- pos 15000)))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
686 (if (and (not (equal str ""))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
687 (search-forward str nil t))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
688 (- (point) fixup)
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
689 (max pos (point-min))))))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
690
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
691 (defun hg-restore-context (ctx)
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
692 "Attempt to restore the user's editing context."
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
693 (let ((point-context (nth 0 ctx))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
694 (mark-context (nth 1 ctx)))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
695 (goto-char (hg-find-context point-context))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
696 (when mark-context
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
697 (set-mark (hg-find-context mark-context)))))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
698
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
699
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
700 ;;; Hooks.
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
701
3002
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
702 (defun hg-mode-line-internal (status parents)
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
703 (setq hg-status status
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
704 hg-mode (and status (concat " Hg:"
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
705 parents
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
706 (cdr (assq status
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
707 '((normal . "")
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
708 (removed . "r")
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
709 (added . "a")
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
710 (deleted . "!")
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
711 (modified . "m"))))))))
5081
ea7b982b6c08 Remove trailing spaces
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4694
diff changeset
712
995
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
713 (defun hg-mode-line (&optional force)
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
714 "Update the modeline with the current status of a file.
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
715 An update occurs if optional argument FORCE is non-nil,
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
716 hg-update-modeline is non-nil, or we have not yet checked the state of
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
717 the file."
3002
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
718 (let ((root (hg-root)))
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
719 (when (and root (or force hg-update-modeline (not hg-mode)))
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
720 (let ((status (hg-file-status buffer-file-name))
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
721 (parents (hg-parents-for-mode-line root)))
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
722 (hg-mode-line-internal status parents)
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
723 status))))
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
724
1371
68e84563c540 emacs minor mode optional argument
Robin Farine <robin.farine@terminus.org>
parents: 1308
diff changeset
725 (defun hg-mode (&optional toggle)
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
726 "Minor mode for Mercurial distributed SCM integration.
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
727
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
728 The Mercurial mode user interface is based on that of VC mode, so if
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
729 you're already familiar with VC, the same keybindings and functions
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
730 will generally work.
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
731
2517
0086056322da mercurial.el: inhibit backups for files managed by mercurial
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2457
diff changeset
732 Below is a list of many common SCM tasks. In the list, `G/L\'
4411
681b681f7f09 Unconfuse font-lock
Brendan Cully <brendan@kublai.com>
parents: 3005
diff changeset
733 indicates whether a key binding is global (G) to a repository or
681b681f7f09 Unconfuse font-lock
Brendan Cully <brendan@kublai.com>
parents: 3005
diff changeset
734 local (L) to a file. Many commands take a prefix argument.
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
735
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
736 SCM Task G/L Key Binding Command Name
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
737 -------- --- ----------- ------------
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
738 Help overview (what you are reading) G C-c h h hg-help-overview
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
739
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
740 Tell Mercurial to manage a file G C-c h a hg-add
1179
8acf62f579d8 Fix mercurial.el help.
jdc@uwo.ca
parents: 1178
diff changeset
741 Commit changes to current file only L C-x v n hg-commit-start
995
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
742 Undo changes to file since commit L C-x v u hg-revert-buffer
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
743
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
744 Diff file vs last checkin L C-x v = hg-diff
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
745
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
746 View file change history L C-x v l hg-log
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
747 View annotated file L C-x v a hg-annotate
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
748
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
749 Diff repo vs last checkin G C-c h = hg-diff-repo
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
750 View status of files in repo G C-c h s hg-status
1179
8acf62f579d8 Fix mercurial.el help.
jdc@uwo.ca
parents: 1178
diff changeset
751 Commit all changes G C-c h c hg-commit-start
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
752
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
753 Undo all changes since last commit G C-c h U hg-revert
1179
8acf62f579d8 Fix mercurial.el help.
jdc@uwo.ca
parents: 1178
diff changeset
754 View repo change history G C-c h l hg-log-repo
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
755
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
756 See changes that can be pulled G C-c h , hg-incoming
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
757 Pull changes G C-c h < hg-pull
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
758 Update working directory after pull G C-c h u hg-update
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
759 See changes that can be pushed G C-c h . hg-outgoing
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
760 Push changes G C-c h > hg-push"
2517
0086056322da mercurial.el: inhibit backups for files managed by mercurial
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2457
diff changeset
761 (unless vc-make-backup-files
0086056322da mercurial.el: inhibit backups for files managed by mercurial
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2457
diff changeset
762 (set (make-local-variable 'backup-inhibited) t))
2518
d78ae783499d mercurial.el: fix misleading indent of code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2517
diff changeset
763 (run-hooks 'hg-mode-hook))
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
764
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
765 (defun hg-find-file-hook ()
4413
b008deae9910 mercurial.el: don't raise an error from find-file-hook
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4412
diff changeset
766 (ignore-errors
b008deae9910 mercurial.el: don't raise an error from find-file-hook
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4412
diff changeset
767 (when (hg-mode-line)
b008deae9910 mercurial.el: don't raise an error from find-file-hook
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4412
diff changeset
768 (hg-mode))))
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
769
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
770 (add-hook 'find-file-hooks 'hg-find-file-hook)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
771
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
772 (defun hg-after-save-hook ()
4694
6bf58c9400e2 mercurial.el: ignore errors on hg-after-save-hook()
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4693
diff changeset
773 (ignore-errors
6bf58c9400e2 mercurial.el: ignore errors on hg-after-save-hook()
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4693
diff changeset
774 (let ((old-status hg-status))
6bf58c9400e2 mercurial.el: ignore errors on hg-after-save-hook()
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4693
diff changeset
775 (hg-mode-line)
6bf58c9400e2 mercurial.el: ignore errors on hg-after-save-hook()
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4693
diff changeset
776 (if (and (not old-status) hg-status)
6bf58c9400e2 mercurial.el: ignore errors on hg-after-save-hook()
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4693
diff changeset
777 (hg-mode)))))
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
778
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
779 (add-hook 'after-save-hook 'hg-after-save-hook)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
780
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
781
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
782 ;;; User interface functions.
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
783
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
784 (defun hg-help-overview ()
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
785 "This is an overview of the Mercurial SCM mode for Emacs.
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
786
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 8370
diff changeset
787 You can find the source code, license (GPLv2+), and credits for this
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
788 code by typing `M-x find-library mercurial RET'."
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
789 (interactive)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
790 (hg-view-output ("Mercurial Help Overview")
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
791 (insert (documentation 'hg-help-overview))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
792 (let ((pos (point)))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
793 (insert (documentation 'hg-mode))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
794 (goto-char pos)
2452
d1a7c8a5b835 Emacs: use delete-region instead of kill-* functions.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
795 (end-of-line 1)
2457
8e1004c61796 merge emacs changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2456 2454
diff changeset
796 (delete-region pos (point)))
2737
a5c43944e1ee avoid calling (cd ...) with `nil' as a directory name
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2668
diff changeset
797 (let ((hg-root-dir (hg-root)))
a5c43944e1ee avoid calling (cd ...) with `nil' as a directory name
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2668
diff changeset
798 (if (not hg-root-dir)
a5c43944e1ee avoid calling (cd ...) with `nil' as a directory name
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2668
diff changeset
799 (error "error: %s: directory is not part of a Mercurial repository."
a5c43944e1ee avoid calling (cd ...) with `nil' as a directory name
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2668
diff changeset
800 default-directory)
2877
0ffca0cb9f4b Use cached hg-root-dir instead of rediscovering
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2737
diff changeset
801 (cd hg-root-dir)))))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
802
2997
48baf9fb1921 mercurial.el: get rid of unportable, unperformant use of replace-regexp.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2877
diff changeset
803 (defun hg-fix-paths ()
48baf9fb1921 mercurial.el: get rid of unportable, unperformant use of replace-regexp.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2877
diff changeset
804 "Fix paths reported by some Mercurial commands."
48baf9fb1921 mercurial.el: get rid of unportable, unperformant use of replace-regexp.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2877
diff changeset
805 (save-excursion
48baf9fb1921 mercurial.el: get rid of unportable, unperformant use of replace-regexp.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2877
diff changeset
806 (goto-char (point-min))
48baf9fb1921 mercurial.el: get rid of unportable, unperformant use of replace-regexp.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2877
diff changeset
807 (while (re-search-forward " \\.\\.." nil t)
48baf9fb1921 mercurial.el: get rid of unportable, unperformant use of replace-regexp.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2877
diff changeset
808 (replace-match " " nil nil))))
48baf9fb1921 mercurial.el: get rid of unportable, unperformant use of replace-regexp.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2877
diff changeset
809
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
810 (defun hg-add (path)
996
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
811 "Add PATH to the Mercurial repository on the next commit.
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
812 With a prefix argument, prompt for the path to add."
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
813 (interactive (list (hg-read-file-name " to add")))
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
814 (let ((buf (current-buffer))
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
815 (update (equal buffer-file-name path)))
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
816 (hg-view-output (hg-output-buffer-name)
2454
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
817 (apply 'call-process (hg-binary) nil t nil (list "add" path))
2997
48baf9fb1921 mercurial.el: get rid of unportable, unperformant use of replace-regexp.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2877
diff changeset
818 (hg-fix-paths)
2998
e1762867a734 mercurial.el: fix calls to goto-char.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2997
diff changeset
819 (goto-char (point-min))
2454
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
820 (cd (hg-root path)))
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
821 (when update
2517
0086056322da mercurial.el: inhibit backups for files managed by mercurial
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2457
diff changeset
822 (unless vc-make-backup-files
0086056322da mercurial.el: inhibit backups for files managed by mercurial
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2457
diff changeset
823 (set (make-local-variable 'backup-inhibited) t))
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
824 (with-current-buffer buf
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
825 (hg-mode-line)))))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
826
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
827 (defun hg-addremove ()
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
828 (interactive)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
829 (error "not implemented"))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
830
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
831 (defun hg-annotate ()
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
832 (interactive)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
833 (error "not implemented"))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
834
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
835 (defun hg-commit-toggle-file (pos)
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
836 "Toggle whether or not the file at POS will be committed."
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
837 (interactive "d")
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
838 (save-excursion
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
839 (goto-char pos)
8370
45ed015b524e allow toggling when the cursor is on the correct line instead of just the filename text in hg-commit-toggle-file
Jonathan Kotta <jpkotta@packetdigital.com>
parents: 6390
diff changeset
840 (let (face
1004
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
841 (inhibit-read-only t)
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
842 bol)
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
843 (beginning-of-line)
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
844 (setq bol (+ (point) 4))
8370
45ed015b524e allow toggling when the cursor is on the correct line instead of just the filename text in hg-commit-toggle-file
Jonathan Kotta <jpkotta@packetdigital.com>
parents: 6390
diff changeset
845 (setq face (get-text-property bol 'face))
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
846 (end-of-line)
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
847 (if (eq face 'bold)
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
848 (progn
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
849 (remove-text-properties bol (point) '(face nil))
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
850 (message "%s will not be committed"
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
851 (buffer-substring bol (point))))
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
852 (add-text-properties bol (point) '(face bold))
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
853 (message "%s will be committed"
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
854 (buffer-substring bol (point)))))))
1308
2073e5a71008 Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1246
diff changeset
855
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
856 (defun hg-commit-mouse-clicked (event)
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
857 "Toggle whether or not the file at POS will be committed."
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
858 (interactive "@e")
1004
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
859 (hg-commit-toggle-file (hg-event-point event)))
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
860
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
861 (defun hg-commit-kill ()
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
862 "Kill the commit currently being prepared."
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
863 (interactive)
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
864 (when (or (not (buffer-modified-p)) (y-or-n-p "Really kill this commit? "))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
865 (let ((buf hg-prev-buffer))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
866 (kill-buffer nil)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
867 (switch-to-buffer buf))))
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
868
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
869 (defun hg-commit-finish ()
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
870 "Finish preparing a commit, and perform the actual commit.
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
871 The hook hg-pre-commit-hook is run before anything else is done. If
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
872 the commit message is empty and hg-commit-allow-empty-message is nil,
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
873 an error is raised. If the list of files to commit is empty and
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
874 hg-commit-allow-empty-file-list is nil, an error is raised."
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
875 (interactive)
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
876 (let ((root hg-root))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
877 (save-excursion
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
878 (run-hooks 'hg-pre-commit-hook)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
879 (goto-char (point-min))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
880 (search-forward hg-commit-message-start)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
881 (let (message files)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
882 (let ((start (point)))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
883 (goto-char (point-max))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
884 (search-backward hg-commit-message-end)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
885 (setq message (hg-strip (buffer-substring start (point)))))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
886 (when (and (= (length message) 0)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
887 (not hg-commit-allow-empty-message))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
888 (error "Cannot proceed - commit message is empty"))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
889 (forward-line 1)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
890 (beginning-of-line)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
891 (while (< (point) (point-max))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
892 (let ((pos (+ (point) 4)))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
893 (end-of-line)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
894 (when (eq (get-text-property pos 'face) 'bold)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
895 (end-of-line)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
896 (setq files (cons (buffer-substring pos (point)) files))))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
897 (forward-line 1))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
898 (when (and (= (length files) 0)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
899 (not hg-commit-allow-empty-file-list))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
900 (error "Cannot proceed - no files to commit"))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
901 (setq message (concat message "\n"))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
902 (apply 'hg-run0 "--cwd" hg-root "commit" "-m" message files))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
903 (let ((buf hg-prev-buffer))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
904 (kill-buffer nil)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
905 (switch-to-buffer buf))
3002
65efeb7b2c56 mercurial.el: speed up mode line updates.
Bryan O'Sullivan <bos@serpentine.com>
parents: 3001
diff changeset
906 (hg-update-mode-lines root))))
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
907
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
908 (defun hg-commit-mode ()
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
909 "Mode for describing a commit of changes to a Mercurial repository.
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
910 This involves two actions: describing the changes with a commit
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
911 message, and choosing the files to commit.
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
912
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
913 To describe the commit, simply type some text in the designated area.
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
914
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
915 By default, all modified, added and removed files are selected for
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
916 committing. Files that will be committed are displayed in bold face\;
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
917 those that will not are displayed in normal face.
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
918
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
919 To toggle whether a file will be committed, move the cursor over a
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
920 particular file and hit space or return. Alternatively, middle click
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
921 on the file.
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
922
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
923 Key bindings
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
924 ------------
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
925 \\[hg-commit-finish] proceed with commit
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
926 \\[hg-commit-kill] kill commit
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
927
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
928 \\[hg-diff-repo] view diff of pending changes"
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
929 (interactive)
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
930 (use-local-map hg-commit-mode-map)
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
931 (set-syntax-table text-mode-syntax-table)
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
932 (setq local-abbrev-table text-mode-abbrev-table
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
933 major-mode 'hg-commit-mode
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
934 mode-name "Hg-Commit")
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
935 (set-buffer-modified-p nil)
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
936 (setq buffer-undo-list nil)
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
937 (run-hooks 'text-mode-hook 'hg-commit-mode-hook))
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
938
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
939 (defun hg-commit-start ()
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
940 "Prepare a commit of changes to the repository containing the current file."
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
941 (interactive)
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
942 (while hg-prev-buffer
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
943 (set-buffer hg-prev-buffer))
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
944 (let ((root (hg-root))
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
945 (prev-buffer (current-buffer))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
946 modified-files)
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
947 (unless root
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
948 (error "Cannot commit outside a repository!"))
1024
5b257e419816 Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents: 1011
diff changeset
949 (hg-sync-buffers root)
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
950 (setq modified-files (hg-chomp (hg-run0 "--cwd" root "status" "-arm")))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
951 (when (and (= (length modified-files) 0)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
952 (not hg-commit-allow-empty-file-list))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
953 (error "No pending changes to commit"))
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
954 (let* ((buf-name (format "*Mercurial: Commit %s*" root)))
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
955 (pop-to-buffer (get-buffer-create buf-name))
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
956 (when (= (point-min) (point-max))
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
957 (set (make-local-variable 'hg-root) root)
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
958 (setq hg-prev-buffer prev-buffer)
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
959 (insert "\n")
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
960 (let ((bol (point)))
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
961 (insert hg-commit-message-end)
1004
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
962 (add-text-properties bol (point) '(face bold-italic)))
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
963 (let ((file-area (point)))
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
964 (insert modified-files)
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
965 (goto-char file-area)
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
966 (while (< (point) (point-max))
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
967 (let ((bol (point)))
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
968 (forward-char 1)
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
969 (insert " ")
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
970 (end-of-line)
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
971 (add-text-properties (+ bol 4) (point)
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
972 '(face bold mouse-face highlight)))
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
973 (forward-line 1))
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
974 (goto-char file-area)
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
975 (add-text-properties (point) (point-max)
1004
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
976 `(keymap ,hg-commit-mode-file-map))
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
977 (goto-char (point-min))
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
978 (insert hg-commit-message-start)
1004
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
979 (add-text-properties (point-min) (point) '(face bold-italic))
999
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
980 (insert "\n\n")
bb391518bc28 Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents: 996
diff changeset
981 (forward-line -1)
1004
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
982 (save-excursion
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
983 (goto-char (point-max))
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
984 (search-backward hg-commit-message-end)
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
985 (add-text-properties (match-beginning 0) (point-max)
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
986 '(read-only t))
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
987 (goto-char (point-min))
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
988 (search-forward hg-commit-message-start)
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
989 (add-text-properties (match-beginning 0) (match-end 0)
ad6fcceaf59b Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents: 1003
diff changeset
990 '(read-only t)))
2454
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
991 (hg-commit-mode)
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
992 (cd root))))))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
993
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
994 (defun hg-diff (path &optional rev1 rev2)
996
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
995 "Show the differences between REV1 and REV2 of PATH.
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
996 When called interactively, the default behaviour is to treat REV1 as
2455
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
997 the \"parent\" revision, REV2 as the current edited version of the file, and
996
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
998 PATH as the file edited in the current buffer.
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
999 With a prefix argument, prompt for all of these."
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
1000 (interactive (list (hg-read-file-name " to diff")
2455
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1001 (let ((rev1 (hg-read-rev " to start with" 'parent)))
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1002 (and (not (eq rev1 'parent)) rev1))
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
1003 (let ((rev2 (hg-read-rev " to end with" 'working-dir)))
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
1004 (and (not (eq rev2 'working-dir)) rev2))))
1024
5b257e419816 Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents: 1011
diff changeset
1005 (hg-sync-buffers path)
995
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1006 (let ((a-path (hg-abbrev-file-name path))
2455
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1007 ;; none revision is specified explicitly
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1008 (none (and (not rev1) (not rev2)))
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1009 ;; only one revision is specified explicitly
5081
ea7b982b6c08 Remove trailing spaces
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4694
diff changeset
1010 (one (or (and (or (equal rev1 rev2) (not rev2)) rev1)
2455
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1011 (and (not rev1) rev2)))
995
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1012 diff)
1027
cb31576ed3e4 Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1026
diff changeset
1013 (hg-view-output ((cond
2455
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1014 (none
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1015 (format "Mercurial: Diff against parent of %s" a-path))
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1016 (one
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1017 (format "Mercurial: Diff of rev %s of %s" one a-path))
1027
cb31576ed3e4 Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1026
diff changeset
1018 (t
cb31576ed3e4 Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1026
diff changeset
1019 (format "Mercurial: Diff from rev %s to %s of %s"
2455
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1020 rev1 rev2 a-path))))
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1021 (cond
5081
ea7b982b6c08 Remove trailing spaces
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4694
diff changeset
1022 (none
2455
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1023 (call-process (hg-binary) nil t nil "diff" path))
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1024 (one
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1025 (call-process (hg-binary) nil t nil "diff" "-r" one path))
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1026 (t
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1027 (call-process (hg-binary) nil t nil "diff" "-r" rev1 "-r" rev2 path)))
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
1028 (diff-mode)
995
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1029 (setq diff (not (= (point-min) (point-max))))
2454
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1030 (font-lock-fontify-buffer)
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1031 (cd (hg-root path)))
995
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1032 diff))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1033
2455
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1034 (defun hg-diff-repo (path &optional rev1 rev2)
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1035 "Show the differences between REV1 and REV2 of repository containing PATH.
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1036 When called interactively, the default behaviour is to treat REV1 as
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1037 the \"parent\" revision, REV2 as the current edited version of the file, and
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1038 PATH as the `hg-root' of the current buffer.
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1039 With a prefix argument, prompt for all of these."
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1040 (interactive (list (hg-read-file-name " to diff")
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1041 (let ((rev1 (hg-read-rev " to start with" 'parent)))
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1042 (and (not (eq rev1 'parent)) rev1))
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1043 (let ((rev2 (hg-read-rev " to end with" 'working-dir)))
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1044 (and (not (eq rev2 'working-dir)) rev2))))
ff83112332f9 Emacs: follow the revision usage policy of "hg diff" command.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1045 (hg-diff (hg-root path) rev1 rev2))
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
1046
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
1047 (defun hg-forget (path)
996
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1048 "Lose track of PATH, which has been added, but not yet committed.
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1049 This will prevent the file from being incorporated into the Mercurial
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1050 repository on the next commit.
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1051 With a prefix argument, prompt for the path to forget."
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
1052 (interactive (list (hg-read-file-name " to forget")))
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
1053 (let ((buf (current-buffer))
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
1054 (update (equal buffer-file-name path)))
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
1055 (hg-view-output (hg-output-buffer-name)
2454
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1056 (apply 'call-process (hg-binary) nil t nil (list "forget" path))
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1057 ;; "hg forget" shows pathes relative NOT TO ROOT BUT TO REPOSITORY
2997
48baf9fb1921 mercurial.el: get rid of unportable, unperformant use of replace-regexp.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2877
diff changeset
1058 (hg-fix-paths)
2998
e1762867a734 mercurial.el: fix calls to goto-char.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2997
diff changeset
1059 (goto-char (point-min))
2454
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1060 (cd (hg-root path)))
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
1061 (when update
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
1062 (with-current-buffer buf
2667
92ba858ed640 Emacs: apply kill-local-variable instead of make-local-variable to FORGET
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2518
diff changeset
1063 (when (local-variable-p 'backup-inhibited)
92ba858ed640 Emacs: apply kill-local-variable instead of make-local-variable to FORGET
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2518
diff changeset
1064 (kill-local-variable 'backup-inhibited))
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
1065 (hg-mode-line)))))
1308
2073e5a71008 Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1246
diff changeset
1066
1029
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1067 (defun hg-incoming (&optional repo)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1068 "Display changesets present in REPO that are not present locally."
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1069 (interactive (list (hg-read-repo-name " where changes would come from")))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1070 (hg-view-output ((format "Mercurial: Incoming from %s to %s"
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1071 (hg-abbrev-file-name (hg-root))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1072 (hg-abbrev-file-name
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1073 (or repo hg-incoming-repository))))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1074 (call-process (hg-binary) nil t nil "incoming"
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1075 (or repo hg-incoming-repository))
2454
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1076 (hg-log-mode)
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1077 (cd (hg-root))))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1078
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1079 (defun hg-init ()
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1080 (interactive)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1081 (error "not implemented"))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1082
1029
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1083 (defun hg-log-mode ()
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1084 "Mode for viewing a Mercurial change log."
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1085 (goto-char (point-min))
2452
d1a7c8a5b835 Emacs: use delete-region instead of kill-* functions.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1086 (when (looking-at "^searching for changes.*$")
d1a7c8a5b835 Emacs: use delete-region instead of kill-* functions.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1087 (delete-region (match-beginning 0) (match-end 0)))
1029
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1088 (run-hooks 'hg-log-mode-hook))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1089
2316
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1090 (defun hg-log (path &optional rev1 rev2 log-limit)
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1091 "Display the revision history of PATH.
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1092 History is displayed between REV1 and REV2.
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1093 Number of displayed changesets is limited to LOG-LIMIT.
4693
3f484688c702 mercurial.el: change default log range to tip:0
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4433
diff changeset
1094 REV1 defaults to the tip, while REV2 defaults to 0.
2316
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1095 LOG-LIMIT defaults to `hg-log-limit'.
1027
cb31576ed3e4 Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1026
diff changeset
1096 With a prefix argument, prompt for each parameter."
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
1097 (interactive (list (hg-read-file-name " to log")
2316
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1098 (hg-read-rev " to start with"
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1099 "tip")
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1100 (hg-read-rev " to end with"
4693
3f484688c702 mercurial.el: change default log range to tip:0
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4433
diff changeset
1101 "0")
2316
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1102 (hg-read-number "Output limited to: "
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1103 hg-log-limit)))
1027
cb31576ed3e4 Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1026
diff changeset
1104 (let ((a-path (hg-abbrev-file-name path))
4693
3f484688c702 mercurial.el: change default log range to tip:0
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4433
diff changeset
1105 (r1 (or rev1 "tip"))
3f484688c702 mercurial.el: change default log range to tip:0
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4433
diff changeset
1106 (r2 (or rev2 "0"))
2316
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1107 (limit (format "%d" (or log-limit hg-log-limit))))
1027
cb31576ed3e4 Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1026
diff changeset
1108 (hg-view-output ((if (equal r1 r2)
2316
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1109 (format "Mercurial: Log of rev %s of %s" rev1 a-path)
5081
ea7b982b6c08 Remove trailing spaces
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4694
diff changeset
1110 (format
2316
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1111 "Mercurial: at most %s log(s) from rev %s to %s of %s"
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1112 limit r1 r2 a-path)))
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1113 (eval (list* 'call-process (hg-binary) nil t nil
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1114 "log"
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1115 "-r" (format "%s:%s" r1 r2)
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1116 "-l" limit
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1117 (if (> (length path) (length (hg-root path)))
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1118 (cons path nil)
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1119 nil)))
2454
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1120 (hg-log-mode)
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1121 (cd (hg-root path)))))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1122
2316
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1123 (defun hg-log-repo (path &optional rev1 rev2 log-limit)
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
1124 "Display the revision history of the repository containing PATH.
2316
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1125 History is displayed between REV1 and REV2.
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1126 Number of displayed changesets is limited to LOG-LIMIT,
4693
3f484688c702 mercurial.el: change default log range to tip:0
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4433
diff changeset
1127 REV1 defaults to the tip, while REV2 defaults to 0.
2316
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1128 LOG-LIMIT defaults to `hg-log-limit'.
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1129 With a prefix argument, prompt for each parameter."
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
1130 (interactive (list (hg-read-file-name " to log")
2316
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1131 (hg-read-rev " to start with"
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1132 "tip")
5081
ea7b982b6c08 Remove trailing spaces
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4694
diff changeset
1133 (hg-read-rev " to end with"
4693
3f484688c702 mercurial.el: change default log range to tip:0
NIIMI Satoshi <sa2c@sa2c.net>
parents: 4433
diff changeset
1134 "0")
2316
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1135 (hg-read-number "Output limited to: "
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1136 hg-log-limit)))
3d58376a7103 Emacs: separate limitations of revision range and shown changesets.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 1371
diff changeset
1137 (hg-log (hg-root path) rev1 rev2 log-limit))
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
1138
1029
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1139 (defun hg-outgoing (&optional repo)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1140 "Display changesets present locally that are not present in REPO."
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1141 (interactive (list (hg-read-repo-name " where changes would go to" nil
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1142 hg-outgoing-repository)))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1143 (hg-view-output ((format "Mercurial: Outgoing from %s to %s"
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1144 (hg-abbrev-file-name (hg-root))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1145 (hg-abbrev-file-name
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1146 (or repo hg-outgoing-repository))))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1147 (call-process (hg-binary) nil t nil "outgoing"
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1148 (or repo hg-outgoing-repository))
2454
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1149 (hg-log-mode)
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1150 (cd (hg-root))))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1151
1246
ae96c85fb0af mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1179
diff changeset
1152 (defun hg-pull (&optional repo)
ae96c85fb0af mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1179
diff changeset
1153 "Pull changes from repository REPO.
ae96c85fb0af mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1179
diff changeset
1154 This does not update the working directory."
ae96c85fb0af mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1179
diff changeset
1155 (interactive (list (hg-read-repo-name " to pull from")))
ae96c85fb0af mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1179
diff changeset
1156 (hg-view-output ((format "Mercurial: Pull to %s from %s"
ae96c85fb0af mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1179
diff changeset
1157 (hg-abbrev-file-name (hg-root))
ae96c85fb0af mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1179
diff changeset
1158 (hg-abbrev-file-name
ae96c85fb0af mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1179
diff changeset
1159 (or repo hg-incoming-repository))))
ae96c85fb0af mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1179
diff changeset
1160 (call-process (hg-binary) nil t nil "pull"
2454
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1161 (or repo hg-incoming-repository))
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1162 (cd (hg-root))))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1163
1029
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1164 (defun hg-push (&optional repo)
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1165 "Push changes to repository REPO."
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1166 (interactive (list (hg-read-repo-name " to push to")))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1167 (hg-view-output ((format "Mercurial: Push from %s to %s"
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1168 (hg-abbrev-file-name (hg-root))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1169 (hg-abbrev-file-name
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1170 (or repo hg-outgoing-repository))))
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1171 (call-process (hg-binary) nil t nil "push"
2454
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1172 (or repo hg-outgoing-repository))
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1173 (cd (hg-root))))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1174
995
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1175 (defun hg-revert-buffer-internal ()
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1176 (let ((ctx (hg-buffer-context)))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1177 (message "Reverting %s..." buffer-file-name)
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1178 (hg-run0 "revert" buffer-file-name)
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1179 (revert-buffer t t t)
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1180 (hg-restore-context ctx)
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1181 (hg-mode-line)
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1182 (message "Reverting %s...done" buffer-file-name)))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1183
995
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1184 (defun hg-revert-buffer ()
996
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1185 "Revert current buffer's file back to the latest committed version.
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1186 If the file has not changed, nothing happens. Otherwise, this
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1187 displays a diff and asks for confirmation before reverting."
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1188 (interactive)
995
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1189 (let ((vc-suppress-confirm nil)
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1190 (obuf (current-buffer))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1191 diff)
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1192 (vc-buffer-sync)
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1193 (unwind-protect
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1194 (setq diff (hg-diff buffer-file-name))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1195 (when diff
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1196 (unless (yes-or-no-p "Discard changes? ")
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1197 (error "Revert cancelled")))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1198 (when diff
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1199 (let ((buf (current-buffer)))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1200 (delete-window (selected-window))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1201 (kill-buffer buf))))
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1202 (set-buffer obuf)
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1203 (when diff
1e4b009b379e Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents: 958
diff changeset
1204 (hg-revert-buffer-internal))))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1205
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1206 (defun hg-root (&optional path)
996
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1207 "Return the root of the repository that contains the given path.
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1208 If the path is outside a repository, return nil.
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1209 When called interactively, the root is printed. A prefix argument
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1210 prompts for a path to check."
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
1211 (interactive (list (hg-read-file-name)))
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
1212 (if (or path (not hg-root))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
1213 (let ((root (do ((prev nil dir)
2453
b5902db74ba3 Emacs: use `default-directory' if `buffer-file-name' is null.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2452
diff changeset
1214 (dir (file-name-directory
b5902db74ba3 Emacs: use `default-directory' if `buffer-file-name' is null.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2452
diff changeset
1215 (or
b5902db74ba3 Emacs: use `default-directory' if `buffer-file-name' is null.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2452
diff changeset
1216 path
b5902db74ba3 Emacs: use `default-directory' if `buffer-file-name' is null.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2452
diff changeset
1217 buffer-file-name
b5902db74ba3 Emacs: use `default-directory' if `buffer-file-name' is null.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2452
diff changeset
1218 (expand-file-name default-directory)))
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
1219 (file-name-directory (directory-file-name dir))))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
1220 ((equal prev dir))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
1221 (when (file-directory-p (concat dir ".hg"))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
1222 (return dir)))))
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
1223 (when (interactive-p)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
1224 (if root
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
1225 (message "The root of this repository is `%s'." root)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
1226 (message "The path `%s' is not in a Mercurial repository."
1029
b5f0ccad8917 Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1027
diff changeset
1227 (hg-abbrev-file-name path))))
1003
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
1228 root)
6dfc9cc71f42 Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents: 1001
diff changeset
1229 hg-root))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1230
3003
78fe7e2c2e1e mercurial.el: add hg-cwd
Bryan O'Sullivan <bos@serpentine.com>
parents: 3002
diff changeset
1231 (defun hg-cwd (&optional path)
78fe7e2c2e1e mercurial.el: add hg-cwd
Bryan O'Sullivan <bos@serpentine.com>
parents: 3002
diff changeset
1232 "Return the current directory of PATH within the repository."
78fe7e2c2e1e mercurial.el: add hg-cwd
Bryan O'Sullivan <bos@serpentine.com>
parents: 3002
diff changeset
1233 (do ((stack nil (cons (file-name-nondirectory
78fe7e2c2e1e mercurial.el: add hg-cwd
Bryan O'Sullivan <bos@serpentine.com>
parents: 3002
diff changeset
1234 (directory-file-name dir))
78fe7e2c2e1e mercurial.el: add hg-cwd
Bryan O'Sullivan <bos@serpentine.com>
parents: 3002
diff changeset
1235 stack))
78fe7e2c2e1e mercurial.el: add hg-cwd
Bryan O'Sullivan <bos@serpentine.com>
parents: 3002
diff changeset
1236 (prev nil dir)
78fe7e2c2e1e mercurial.el: add hg-cwd
Bryan O'Sullivan <bos@serpentine.com>
parents: 3002
diff changeset
1237 (dir (file-name-directory (or path buffer-file-name
78fe7e2c2e1e mercurial.el: add hg-cwd
Bryan O'Sullivan <bos@serpentine.com>
parents: 3002
diff changeset
1238 (expand-file-name default-directory)))
78fe7e2c2e1e mercurial.el: add hg-cwd
Bryan O'Sullivan <bos@serpentine.com>
parents: 3002
diff changeset
1239 (file-name-directory (directory-file-name dir))))
78fe7e2c2e1e mercurial.el: add hg-cwd
Bryan O'Sullivan <bos@serpentine.com>
parents: 3002
diff changeset
1240 ((equal prev dir))
78fe7e2c2e1e mercurial.el: add hg-cwd
Bryan O'Sullivan <bos@serpentine.com>
parents: 3002
diff changeset
1241 (when (file-directory-p (concat dir ".hg"))
78fe7e2c2e1e mercurial.el: add hg-cwd
Bryan O'Sullivan <bos@serpentine.com>
parents: 3002
diff changeset
1242 (let ((cwd (mapconcat 'identity stack "/")))
78fe7e2c2e1e mercurial.el: add hg-cwd
Bryan O'Sullivan <bos@serpentine.com>
parents: 3002
diff changeset
1243 (unless (equal cwd "")
78fe7e2c2e1e mercurial.el: add hg-cwd
Bryan O'Sullivan <bos@serpentine.com>
parents: 3002
diff changeset
1244 (return (file-name-as-directory cwd)))))))
78fe7e2c2e1e mercurial.el: add hg-cwd
Bryan O'Sullivan <bos@serpentine.com>
parents: 3002
diff changeset
1245
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
1246 (defun hg-status (path)
996
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1247 "Print revision control status of a file or directory.
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1248 With prefix argument, prompt for the path to give status for.
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1249 Names are displayed relative to the repository root."
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
1250 (interactive (list (hg-read-file-name " for status" (hg-root))))
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
1251 (let ((root (hg-root)))
996
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1252 (hg-view-output ((format "Mercurial: Status of %s in %s"
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1253 (let ((name (substring (expand-file-name path)
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1254 (length root))))
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1255 (if (> (length name) 0)
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1256 name
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1257 "*"))
5ed566574486 Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents: 995
diff changeset
1258 (hg-abbrev-file-name root)))
947
4cabedfab66e In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents: 945
diff changeset
1259 (apply 'call-process (hg-binary) nil t nil
2454
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1260 (list "--cwd" root "status" path))
74518478d2bf Emacs: change directory of output buffer to the root of the repository.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2317
diff changeset
1261 (cd (hg-root path)))))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1262
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1263 (defun hg-undo ()
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1264 (interactive)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1265 (error "not implemented"))
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1266
1246
ae96c85fb0af mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1179
diff changeset
1267 (defun hg-update ()
ae96c85fb0af mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1179
diff changeset
1268 (interactive)
ae96c85fb0af mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1179
diff changeset
1269 (error "not implemented"))
ae96c85fb0af mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1179
diff changeset
1270
4875
97dbf330069a Re: mercurial.el and hg-version-other-window
jon.christopher@Rigaku.com
parents: 4694
diff changeset
1271 (defun hg-version-other-window (rev)
97dbf330069a Re: mercurial.el and hg-version-other-window
jon.christopher@Rigaku.com
parents: 4694
diff changeset
1272 "Visit version REV of the current file in another window.
97dbf330069a Re: mercurial.el and hg-version-other-window
jon.christopher@Rigaku.com
parents: 4694
diff changeset
1273 If the current file is named `F', the version is named `F.~REV~'.
97dbf330069a Re: mercurial.el and hg-version-other-window
jon.christopher@Rigaku.com
parents: 4694
diff changeset
1274 If `F.~REV~' already exists, use it instead of checking it out again."
97dbf330069a Re: mercurial.el and hg-version-other-window
jon.christopher@Rigaku.com
parents: 4694
diff changeset
1275 (interactive "sVersion to visit (default is workfile version): ")
97dbf330069a Re: mercurial.el and hg-version-other-window
jon.christopher@Rigaku.com
parents: 4694
diff changeset
1276 (let* ((file buffer-file-name)
97dbf330069a Re: mercurial.el and hg-version-other-window
jon.christopher@Rigaku.com
parents: 4694
diff changeset
1277 (version (if (string-equal rev "")
97dbf330069a Re: mercurial.el and hg-version-other-window
jon.christopher@Rigaku.com
parents: 4694
diff changeset
1278 "tip"
97dbf330069a Re: mercurial.el and hg-version-other-window
jon.christopher@Rigaku.com
parents: 4694
diff changeset
1279 rev))
97dbf330069a Re: mercurial.el and hg-version-other-window
jon.christopher@Rigaku.com
parents: 4694
diff changeset
1280 (automatic-backup (vc-version-backup-file-name file version))
97dbf330069a Re: mercurial.el and hg-version-other-window
jon.christopher@Rigaku.com
parents: 4694
diff changeset
1281 (manual-backup (vc-version-backup-file-name file version 'manual)))
97dbf330069a Re: mercurial.el and hg-version-other-window
jon.christopher@Rigaku.com
parents: 4694
diff changeset
1282 (unless (file-exists-p manual-backup)
97dbf330069a Re: mercurial.el and hg-version-other-window
jon.christopher@Rigaku.com
parents: 4694
diff changeset
1283 (if (file-exists-p automatic-backup)
97dbf330069a Re: mercurial.el and hg-version-other-window
jon.christopher@Rigaku.com
parents: 4694
diff changeset
1284 (rename-file automatic-backup manual-backup nil)
97dbf330069a Re: mercurial.el and hg-version-other-window
jon.christopher@Rigaku.com
parents: 4694
diff changeset
1285 (hg-run0 "-q" "cat" "-r" version "-o" manual-backup file)))
97dbf330069a Re: mercurial.el and hg-version-other-window
jon.christopher@Rigaku.com
parents: 4694
diff changeset
1286 (find-file-other-window manual-backup)))
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1287
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1288
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1289 (provide 'mercurial)
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1290
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1291
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1292 ;;; Local Variables:
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1293 ;;; prompt-to-byte-compile: nil
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1294 ;;; end: