Mercurial > hg > mercurial-crew-with-dirclash
annotate contrib/mercurial.el @ 1806:a2c69737e65e
Automatic nesting into running transactions in the same repository.
This associates a transaction handle with a given repository object, and
any additional calls to start new transactions reuse that transaction.
For the 2700 patch import run, this brings the system time down from
1m20s to 50s, mostly by skipping backups of the dirstate file.
(note, this patch does not change hg import to use the nested transaction,
mq is the only user right now)
author | mason@suse.com |
---|---|
date | Tue, 28 Feb 2006 12:24:54 -0600 |
parents | 68e84563c540 |
children | c4a2d8502cc0 3d58376a7103 |
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 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
3 ;; Copyright (C) 2005 Bryan O'Sullivan |
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 |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
8 ;; modify it under the terms of version 2 of the GNU General Public |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
9 ;; License as published by the Free Software Foundation. |
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 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
38 ;; are most welcome. You can clone a Mercurial repository for this |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
39 ;; package from http://www.serpentine.com/hg/hg-emacs |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
40 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
41 ;; 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
|
42 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
43 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
44 ;;; Code: |
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 (require 'advice) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
47 (require 'cl) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
48 (require 'diff-mode) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
49 (require 'easymenu) |
1024
5b257e419816
Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents:
1011
diff
changeset
|
50 (require 'executable) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
51 (require 'vc) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
52 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
53 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
54 ;;; 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
|
55 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
56 (condition-case nil |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
57 (require 'view-less) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
58 (error nil)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
59 (condition-case nil |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
60 (require 'view) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
61 (error nil)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
62 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
63 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
64 ;;; Variables accessible through the custom system. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
65 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
66 (defgroup mercurial nil |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
67 "Mercurial distributed SCM." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
68 :group 'tools) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
69 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
70 (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
|
71 (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
|
72 (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
|
73 (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
|
74 (return path)))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
75 "The path to Mercurial's hg executable." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
76 :type '(file :must-match t) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
77 :group 'mercurial) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
78 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
79 (defcustom hg-mode-hook nil |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
80 "Hook run when a buffer enters hg-mode." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
81 :type 'sexp |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
82 :group 'mercurial) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
83 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
84 (defcustom hg-commit-mode-hook nil |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
85 "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
|
86 :type 'sexp |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
87 :group 'mercurial) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
88 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
89 (defcustom hg-pre-commit-hook nil |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
90 "Hook run before a commit is performed. |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
91 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
|
92 :type 'sexp |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
93 :group 'mercurial) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
94 |
1029
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
95 (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
|
96 "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
|
97 :type 'sexp |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
98 :group 'mercurial) |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
99 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
100 (defcustom hg-global-prefix "\C-ch" |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
101 "The global prefix for Mercurial keymap bindings." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
102 :type 'sexp |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
103 :group 'mercurial) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
104 |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
105 (defcustom hg-commit-allow-empty-message nil |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
106 "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
|
107 :type 'boolean |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
108 :group 'mercurial) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
109 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
110 (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
|
111 "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
|
112 :type 'boolean |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
113 :group 'mercurial) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
114 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
115 (defcustom hg-rev-completion-limit 100 |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
116 "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
|
117 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
|
118 in a repository with a lot of history." |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
119 :type 'integer |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
120 :group 'mercurial) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
121 |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
122 (defcustom hg-log-limit 50 |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
123 "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
|
124 :type 'integer |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
125 :group 'mercurial) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
126 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
127 (defcustom hg-update-modeline t |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
128 "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
|
129 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
|
130 :type 'boolean |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
131 :group 'mercurial) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
132 |
1029
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
133 (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
|
134 "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
|
135 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
|
136 repository-related commands." |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
137 :type 'string |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
138 :group 'mercurial) |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
139 |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
140 (defcustom hg-outgoing-repository "default-push" |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
141 "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
|
142 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
|
143 repository-related commands." |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
144 :type 'string |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
145 :group 'mercurial) |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
146 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
147 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
148 ;;; Other variables. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
149 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
150 (defconst hg-running-xemacs (string-match "XEmacs" emacs-version) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
151 "Is mercurial.el running under XEmacs?") |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
152 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
153 (defvar hg-mode nil |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
154 "Is this file managed by Mercurial?") |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
155 (make-variable-buffer-local 'hg-mode) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
156 (put 'hg-mode 'permanent-local t) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
157 |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
158 (defvar hg-status nil) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
159 (make-variable-buffer-local 'hg-status) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
160 (put 'hg-status 'permanent-local t) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
161 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
162 (defvar hg-prev-buffer nil) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
163 (make-variable-buffer-local 'hg-prev-buffer) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
164 (put 'hg-prev-buffer 'permanent-local t) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
165 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
166 (defvar hg-root nil) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
167 (make-variable-buffer-local 'hg-root) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
168 (put 'hg-root 'permanent-local t) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
169 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
170 (defvar hg-output-buffer-name "*Hg*" |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
171 "The name to use for Mercurial output buffers.") |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
172 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
173 (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
|
174 (defvar hg-repo-history nil) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
175 (defvar hg-rev-history nil) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
176 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
177 |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
178 ;;; Random constants. |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
179 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
180 (defconst hg-commit-message-start |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
181 "--- 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
|
182 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
183 (defconst hg-commit-message-end |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
184 "--- 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
|
185 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
186 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
187 ;;; hg-mode keymap. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
188 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
189 (defvar hg-mode-map (make-sparse-keymap)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
190 (define-key hg-mode-map "\C-xv" 'hg-prefix-map) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
191 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
192 (defvar hg-prefix-map |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
193 (let ((map (copy-keymap vc-prefix-map))) |
958 | 194 (if (functionp 'set-keymap-name) |
195 (set-keymap-name map 'hg-prefix-map)); XEmacs | |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
196 map) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
197 "This keymap overrides some default vc-mode bindings.") |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
198 (fset 'hg-prefix-map hg-prefix-map) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
199 (define-key hg-prefix-map "=" 'hg-diff) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
200 (define-key hg-prefix-map "c" 'hg-undo) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
201 (define-key hg-prefix-map "g" 'hg-annotate) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
202 (define-key hg-prefix-map "l" 'hg-log) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
203 (define-key hg-prefix-map "n" 'hg-commit-start) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
204 ;; (define-key hg-prefix-map "r" 'hg-update) |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
205 (define-key hg-prefix-map "u" 'hg-revert-buffer) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
206 (define-key hg-prefix-map "~" 'hg-version-other-window) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
207 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
208 (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
|
209 |
944
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 ;;; Global keymap. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
212 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
213 (global-set-key "\C-xvi" 'hg-add) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
214 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
215 (defvar hg-global-map (make-sparse-keymap)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
216 (fset 'hg-global-map hg-global-map) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
217 (global-set-key hg-global-prefix 'hg-global-map) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
218 (define-key hg-global-map "," 'hg-incoming) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
219 (define-key hg-global-map "." 'hg-outgoing) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
220 (define-key hg-global-map "<" 'hg-pull) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
221 (define-key hg-global-map "=" 'hg-diff-repo) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
222 (define-key hg-global-map ">" 'hg-push) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
223 (define-key hg-global-map "?" 'hg-help-overview) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
224 (define-key hg-global-map "A" 'hg-addremove) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
225 (define-key hg-global-map "U" 'hg-revert) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
226 (define-key hg-global-map "a" 'hg-add) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
227 (define-key hg-global-map "c" 'hg-commit-start) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
228 (define-key hg-global-map "f" 'hg-forget) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
229 (define-key hg-global-map "h" 'hg-help-overview) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
230 (define-key hg-global-map "i" 'hg-init) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
231 (define-key hg-global-map "l" 'hg-log-repo) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
232 (define-key hg-global-map "r" 'hg-root) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
233 (define-key hg-global-map "s" 'hg-status) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
234 (define-key hg-global-map "u" 'hg-update) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
235 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
236 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
237 ;;; View mode keymap. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
238 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
239 (defvar hg-view-mode-map |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
240 (let ((map (copy-keymap (if (boundp 'view-minor-mode-map) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
241 view-minor-mode-map |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
242 view-mode-map)))) |
958 | 243 (if (functionp 'set-keymap-name) |
244 (set-keymap-name map 'hg-view-mode-map)); XEmacs | |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
245 map)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
246 (fset 'hg-view-mode-map hg-view-mode-map) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
247 (define-key hg-view-mode-map |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
248 (if hg-running-xemacs [button2] [mouse-2]) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
249 'hg-buffer-mouse-clicked) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
250 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
251 |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
252 ;;; Commit mode keymaps. |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
253 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
254 (defvar hg-commit-mode-map (make-sparse-keymap)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
255 (define-key hg-commit-mode-map "\C-c\C-c" 'hg-commit-finish) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
256 (define-key hg-commit-mode-map "\C-c\C-k" 'hg-commit-kill) |
1029
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
257 (define-key hg-commit-mode-map "\C-xv=" 'hg-diff-repo) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
258 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
259 (defvar hg-commit-mode-file-map (make-sparse-keymap)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
260 (define-key hg-commit-mode-file-map |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
261 (if hg-running-xemacs [button2] [mouse-2]) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
262 'hg-commit-mouse-clicked) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
263 (define-key hg-commit-mode-file-map " " 'hg-commit-toggle-file) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
264 (define-key hg-commit-mode-file-map "\r" 'hg-commit-toggle-file) |
1308
2073e5a71008
Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1246
diff
changeset
|
265 |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
266 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
267 ;;; Convenience functions. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
268 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
269 (defsubst hg-binary () |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
270 (if hg-binary |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
271 hg-binary |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
272 (error "No `hg' executable found!"))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
273 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
274 (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
|
275 "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
|
276 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
|
277 replacement. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
278 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
279 This function bridges yet another pointless impedance gap between |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
280 XEmacs and GNU Emacs." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
281 (if (fboundp 'replace-in-string) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
282 (replace-in-string str regexp newtext literal) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
283 (replace-regexp-in-string regexp newtext str nil literal))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
284 |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
285 (defsubst hg-strip (str) |
1178 | 286 "Strip leading and trailing blank lines from a string." |
287 (hg-replace-in-string (hg-replace-in-string str "[\r\n][ \t\r\n]*\\'" "") | |
288 "\\`[ \t\r\n]*[\r\n]" "")) | |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
289 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
290 (defsubst hg-chomp (str) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
291 "Strip trailing newlines from a string." |
1178 | 292 (hg-replace-in-string str "[\r\n]+\'" "")) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
293 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
294 (defun hg-run-command (command &rest args) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
295 "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
|
296 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
|
297 (let* (exit-code |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
298 (output |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
299 (with-output-to-string |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
300 (with-current-buffer |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
301 standard-output |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
302 (setq exit-code |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
303 (apply 'call-process command nil t nil args)))))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
304 (cons exit-code output))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
305 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
306 (defun hg-run (command &rest args) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
307 "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
|
308 (apply 'hg-run-command (hg-binary) command args)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
309 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
310 (defun hg-run0 (command &rest args) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
311 "Run the Mercurial command COMMAND, returning its output. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
312 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
|
313 (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
|
314 (if (not (eq (car res) 0)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
315 (error "Mercurial command failed %s - exit code %s" |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
316 (cons command args) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
317 (car res)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
318 (cdr res)))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
319 |
1024
5b257e419816
Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents:
1011
diff
changeset
|
320 (defun hg-sync-buffers (path) |
5b257e419816
Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents:
1011
diff
changeset
|
321 "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
|
322 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
|
323 all buffers visiting files in the repository." |
5b257e419816
Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents:
1011
diff
changeset
|
324 (let ((buf (find-buffer-visiting path))) |
5b257e419816
Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents:
1011
diff
changeset
|
325 (if buf |
5b257e419816
Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents:
1011
diff
changeset
|
326 (with-current-buffer buf |
5b257e419816
Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents:
1011
diff
changeset
|
327 (vc-buffer-sync)) |
5b257e419816
Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents:
1011
diff
changeset
|
328 (hg-do-across-repo path |
5b257e419816
Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents:
1011
diff
changeset
|
329 (vc-buffer-sync))))) |
1308
2073e5a71008
Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1246
diff
changeset
|
330 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
331 (defun hg-buffer-commands (pnt) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
332 "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
|
333 (interactive "d") |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
334 (let ((rev (get-char-property pnt 'rev)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
335 (file (get-char-property pnt 'file)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
336 (date (get-char-property pnt 'date)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
337 (user (get-char-property pnt 'user)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
338 (host (get-char-property pnt 'host)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
339 (prev-buf (current-buffer))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
340 (cond |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
341 (file |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
342 (find-file-other-window file)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
343 (rev |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
344 (hg-diff hg-view-file-name rev rev prev-buf)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
345 ((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
|
346 |
1004
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
347 (defsubst hg-event-point (event) |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
348 "Return the character position of the mouse event EVENT." |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
349 (if hg-running-xemacs |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
350 (event-point event) |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
351 (posn-point (event-start event)))) |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
352 |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
353 (defsubst hg-event-window (event) |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
354 "Return the window over which mouse event EVENT occurred." |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
355 (if hg-running-xemacs |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
356 (event-window event) |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
357 (posn-window (event-start event)))) |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
358 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
359 (defun hg-buffer-mouse-clicked (event) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
360 "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
|
361 These are then handed off to `hg-buffer-commands'. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
362 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
363 Handle frickin' frackin' gratuitous event-related incompatibilities." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
364 (interactive "e") |
1004
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
365 (select-window (hg-event-window event)) |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
366 (hg-buffer-commands (hg-event-point event))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
367 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
368 (unless (fboundp 'view-minor-mode) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
369 (defun view-minor-mode (prev-buffer exit-func) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
370 (view-mode))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
371 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
372 (defsubst hg-abbrev-file-name (file) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
373 "Portable wrapper around abbreviate-file-name." |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
374 (if hg-running-xemacs |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
375 (abbreviate-file-name file t) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
376 (abbreviate-file-name file))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
377 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
378 (defun hg-read-file-name (&optional prompt default) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
379 "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
|
380 (save-excursion |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
381 (while hg-prev-buffer |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
382 (set-buffer hg-prev-buffer)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
383 (let ((path (or default (buffer-file-name)))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
384 (if (or (not path) current-prefix-arg) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
385 (expand-file-name |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
386 (read-file-name (format "File, directory or pattern%s: " |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
387 (or prompt "")) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
388 (and path (file-name-directory path)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
389 nil nil |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
390 (and path (file-name-nondirectory path)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
391 'hg-file-history)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
392 path)))) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
393 |
1029
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
394 (defun hg-read-config () |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
395 "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
|
396 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
|
397 (let (items) |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
398 (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
|
399 (string-match "^\\([^=]*\\)=\\(.*\\)" line) |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
400 (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
|
401 (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
|
402 (key (split-string left "\\.")) |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
403 (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
|
404 (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
|
405 |
1029
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
406 (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
|
407 "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
|
408 (let (items) |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
409 (dolist (item config items) |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
410 (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
|
411 (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
|
412 |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
413 (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
|
414 "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
|
415 (if (not (stringp sub)) |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
416 (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
|
417 (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
|
418 (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
|
419 (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
|
420 |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
421 (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
|
422 "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
|
423 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
|
424 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
|
425 (or (if all |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
426 (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
|
427 (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
|
428 (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
|
429 (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
|
430 (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
|
431 (if all |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
432 (let (completions) |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
433 (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
|
434 completions) |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
435 (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
|
436 (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
|
437 (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
|
438 (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
|
439 (if comp |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
440 (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
|
441 |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
442 (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
|
443 "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
|
444 (save-excursion |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
445 (while hg-prev-buffer |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
446 (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
|
447 (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
|
448 (if current-prefix-arg |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
449 (progn |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
450 (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
|
451 (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
|
452 (cons (cons (car 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
|
453 (unless (hg-string-starts-with directory-sep-char (cdr path)) |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
454 (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
|
455 (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
|
456 (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
|
457 'hg-complete-repo |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
458 nil |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
459 nil |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
460 initial-contents |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
461 'hg-repo-history |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
462 default)) |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
463 default)))) |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
464 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
465 (defun hg-read-rev (&optional prompt default) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
466 "Read a revision or tag, offering completions." |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
467 (save-excursion |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
468 (while hg-prev-buffer |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
469 (set-buffer hg-prev-buffer)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
470 (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
|
471 (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
|
472 (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
|
473 (hg-chomp |
7e909ceeb36a
Emacs: fix invocations of "hg log" to match current behaviour of log.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1029
diff
changeset
|
474 (hg-run0 "-q" "log" "-r" |
7e909ceeb36a
Emacs: fix invocations of "hg log" to match current behaviour of log.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1029
diff
changeset
|
475 (format "-%d:tip" hg-rev-completion-limit))) |
7e909ceeb36a
Emacs: fix invocations of "hg log" to match current behaviour of log.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1029
diff
changeset
|
476 "[\n:]"))) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
477 (dolist (line (split-string (hg-chomp (hg-run0 "tags")) "\n")) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
478 (setq revs (cons (car (split-string line "\\s-")) revs))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
479 (completing-read (format "Revision%s (%s): " |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
480 (or prompt "") |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
481 (or default "tip")) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
482 (map 'list 'cons revs revs) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
483 nil |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
484 nil |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
485 nil |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
486 'hg-rev-history |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
487 (or default "tip"))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
488 rev)))) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
489 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
490 (defmacro hg-do-across-repo (path &rest body) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
491 (let ((root-name (gensym "root-")) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
492 (buf-name (gensym "buf-"))) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
493 `(let ((,root-name (hg-root ,path))) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
494 (save-excursion |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
495 (dolist (,buf-name (buffer-list)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
496 (set-buffer ,buf-name) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
497 (when (and hg-status (equal (hg-root buffer-file-name) ,root-name)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
498 ,@body)))))) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
499 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
500 (put 'hg-do-across-repo 'lisp-indent-function 1) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
501 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
502 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
503 ;;; View mode bits. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
504 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
505 (defun hg-exit-view-mode (buf) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
506 "Exit from hg-view-mode. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
507 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
|
508 current frame." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
509 (when (and (eq buf (current-buffer)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
510 (> (length (window-list)) 1)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
511 (delete-window)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
512 (when (buffer-live-p buf) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
513 (kill-buffer buf))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
514 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
515 (defun hg-view-mode (prev-buffer &optional file-name) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
516 (goto-char (point-min)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
517 (set-buffer-modified-p nil) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
518 (toggle-read-only t) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
519 (view-minor-mode prev-buffer 'hg-exit-view-mode) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
520 (use-local-map hg-view-mode-map) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
521 (setq truncate-lines t) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
522 (when file-name |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
523 (set (make-local-variable 'hg-view-file-name) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
524 (hg-abbrev-file-name file-name)))) |
1308
2073e5a71008
Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1246
diff
changeset
|
525 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
526 (defun hg-file-status (file) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
527 "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
|
528 (let* ((s (hg-run "status" file)) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
529 (exit (car s)) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
530 (output (cdr s))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
531 (if (= exit 0) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
532 (let ((state (assoc (substring output 0 (min (length output) 2)) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
533 '(("M " . modified) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
534 ("A " . added) |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
535 ("R " . removed) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
536 ("? " . nil))))) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
537 (if state |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
538 (cdr state) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
539 'normal))))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
540 |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
541 (defun hg-tip () |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
542 (split-string (hg-chomp (hg-run0 "-q" "tip")) ":")) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
543 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
544 (defmacro hg-view-output (args &rest body) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
545 "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
|
546 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
|
547 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
|
548 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
|
549 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
|
550 being viewed." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
551 (let ((prev-buf (gensym "prev-buf-")) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
552 (v-b-name (car args)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
553 (v-m-rest (cdr args))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
554 `(let ((view-buf-name ,v-b-name) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
555 (,prev-buf (current-buffer))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
556 (get-buffer-create view-buf-name) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
557 (kill-buffer view-buf-name) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
558 (get-buffer-create view-buf-name) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
559 (set-buffer view-buf-name) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
560 (save-excursion |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
561 ,@body) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
562 (case (count-lines (point-min) (point-max)) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
563 ((0) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
564 (kill-buffer view-buf-name) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
565 (message "(No output)")) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
566 ((1) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
567 (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
|
568 (kill-buffer view-buf-name) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
569 (message "%s" msg))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
570 (t |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
571 (pop-to-buffer view-buf-name) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
572 (setq hg-prev-buffer ,prev-buf) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
573 (hg-view-mode ,prev-buf ,@v-m-rest)))))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
574 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
575 (put 'hg-view-output 'lisp-indent-function 1) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
576 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
577 ;;; Context save and restore across revert. |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
578 |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
579 (defun hg-position-context (pos) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
580 "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
|
581 (let* ((end (min (point-max) (+ pos 98)))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
582 (list pos |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
583 (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
|
584 (- end pos)))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
585 |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
586 (defun hg-buffer-context () |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
587 "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
|
588 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
|
589 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
|
590 (let ((point-context (hg-position-context (point))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
591 (mark-context (let ((mark (mark-marker))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
592 (and mark (hg-position-context mark))))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
593 (list point-context mark-context))) |
1308
2073e5a71008
Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1246
diff
changeset
|
594 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
595 (defun hg-find-context (ctx) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
596 "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
|
597 Always returns a valid, hopefully sane, position." |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
598 (let ((pos (nth 0 ctx)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
599 (str (nth 1 ctx)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
600 (fixup (nth 2 ctx))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
601 (save-excursion |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
602 (goto-char (max (point-min) (- pos 15000))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
603 (if (and (not (equal str "")) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
604 (search-forward str nil t)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
605 (- (point) fixup) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
606 (max pos (point-min)))))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
607 |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
608 (defun hg-restore-context (ctx) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
609 "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
|
610 (let ((point-context (nth 0 ctx)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
611 (mark-context (nth 1 ctx))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
612 (goto-char (hg-find-context point-context)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
613 (when mark-context |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
614 (set-mark (hg-find-context mark-context))))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
615 |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
616 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
617 ;;; Hooks. |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
618 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
619 (defun hg-mode-line (&optional force) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
620 "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
|
621 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
|
622 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
|
623 the file." |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
624 (when (and (hg-root) (or force hg-update-modeline (not hg-mode))) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
625 (let ((status (hg-file-status buffer-file-name))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
626 (setq hg-status status |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
627 hg-mode (and status (concat " Hg:" |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
628 (car (hg-tip)) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
629 (cdr (assq status |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
630 '((normal . "") |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
631 (removed . "r") |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
632 (added . "a") |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
633 (modified . "m"))))))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
634 status))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
635 |
1371
68e84563c540
emacs minor mode optional argument
Robin Farine <robin.farine@terminus.org>
parents:
1308
diff
changeset
|
636 (defun hg-mode (&optional toggle) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
637 "Minor mode for Mercurial distributed SCM integration. |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
638 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
639 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
|
640 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
|
641 will generally work. |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
642 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
643 Below is a list of many common SCM tasks. In the list, `G/L' |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
644 indicates whether a key binding is global (G) to a repository or local |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
645 (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
|
646 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
647 SCM Task G/L Key Binding Command Name |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
648 -------- --- ----------- ------------ |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
649 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
|
650 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
651 Tell Mercurial to manage a file G C-c h a hg-add |
1179 | 652 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
|
653 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
|
654 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
655 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
|
656 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
657 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
|
658 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
|
659 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
660 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
|
661 View status of files in repo G C-c h s hg-status |
1179 | 662 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
|
663 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
664 Undo all changes since last commit G C-c h U hg-revert |
1179 | 665 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
|
666 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
667 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
|
668 Pull changes G C-c h < hg-pull |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
669 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
|
670 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
|
671 Push changes G C-c h > hg-push" |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
672 (run-hooks 'hg-mode-hook)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
673 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
674 (defun hg-find-file-hook () |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
675 (when (hg-mode-line) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
676 (hg-mode))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
677 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
678 (add-hook 'find-file-hooks 'hg-find-file-hook) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
679 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
680 (defun hg-after-save-hook () |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
681 (let ((old-status hg-status)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
682 (hg-mode-line) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
683 (if (and (not old-status) hg-status) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
684 (hg-mode)))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
685 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
686 (add-hook 'after-save-hook 'hg-after-save-hook) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
687 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
688 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
689 ;;; User interface functions. |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
690 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
691 (defun hg-help-overview () |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
692 "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
|
693 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
694 You can find the source code, license (GPL v2), and credits for this |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
695 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
|
696 (interactive) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
697 (hg-view-output ("Mercurial Help Overview") |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
698 (insert (documentation 'hg-help-overview)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
699 (let ((pos (point))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
700 (insert (documentation 'hg-mode)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
701 (goto-char pos) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
702 (kill-line)))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
703 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
704 (defun hg-add (path) |
996
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
705 "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
|
706 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
|
707 (interactive (list (hg-read-file-name " to add"))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
708 (let ((buf (current-buffer)) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
709 (update (equal buffer-file-name path))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
710 (hg-view-output (hg-output-buffer-name) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
711 (apply 'call-process (hg-binary) nil t nil (list "add" path))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
712 (when update |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
713 (with-current-buffer buf |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
714 (hg-mode-line))))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
715 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
716 (defun hg-addremove () |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
717 (interactive) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
718 (error "not implemented")) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
719 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
720 (defun hg-annotate () |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
721 (interactive) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
722 (error "not implemented")) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
723 |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
724 (defun hg-commit-toggle-file (pos) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
725 "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
|
726 (interactive "d") |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
727 (save-excursion |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
728 (goto-char pos) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
729 (let ((face (get-text-property pos 'face)) |
1004
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
730 (inhibit-read-only t) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
731 bol) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
732 (beginning-of-line) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
733 (setq bol (+ (point) 4)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
734 (end-of-line) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
735 (if (eq face 'bold) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
736 (progn |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
737 (remove-text-properties bol (point) '(face nil)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
738 (message "%s will not be committed" |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
739 (buffer-substring bol (point)))) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
740 (add-text-properties bol (point) '(face bold)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
741 (message "%s will be committed" |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
742 (buffer-substring bol (point))))))) |
1308
2073e5a71008
Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1246
diff
changeset
|
743 |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
744 (defun hg-commit-mouse-clicked (event) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
745 "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
|
746 (interactive "@e") |
1004
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
747 (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
|
748 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
749 (defun hg-commit-kill () |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
750 "Kill the commit currently being prepared." |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
751 (interactive) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
752 (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
|
753 (let ((buf hg-prev-buffer)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
754 (kill-buffer nil) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
755 (switch-to-buffer buf)))) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
756 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
757 (defun hg-commit-finish () |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
758 "Finish preparing a commit, and perform the actual commit. |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
759 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
|
760 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
|
761 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
|
762 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
|
763 (interactive) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
764 (let ((root hg-root)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
765 (save-excursion |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
766 (run-hooks 'hg-pre-commit-hook) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
767 (goto-char (point-min)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
768 (search-forward hg-commit-message-start) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
769 (let (message files) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
770 (let ((start (point))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
771 (goto-char (point-max)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
772 (search-backward hg-commit-message-end) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
773 (setq message (hg-strip (buffer-substring start (point))))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
774 (when (and (= (length message) 0) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
775 (not hg-commit-allow-empty-message)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
776 (error "Cannot proceed - commit message is empty")) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
777 (forward-line 1) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
778 (beginning-of-line) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
779 (while (< (point) (point-max)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
780 (let ((pos (+ (point) 4))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
781 (end-of-line) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
782 (when (eq (get-text-property pos 'face) 'bold) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
783 (end-of-line) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
784 (setq files (cons (buffer-substring pos (point)) files)))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
785 (forward-line 1)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
786 (when (and (= (length files) 0) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
787 (not hg-commit-allow-empty-file-list)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
788 (error "Cannot proceed - no files to commit")) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
789 (setq message (concat message "\n")) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
790 (apply 'hg-run0 "--cwd" hg-root "commit" "-m" message files)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
791 (let ((buf hg-prev-buffer)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
792 (kill-buffer nil) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
793 (switch-to-buffer buf)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
794 (hg-do-across-repo root |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
795 (hg-mode-line))))) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
796 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
797 (defun hg-commit-mode () |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
798 "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
|
799 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
|
800 message, and choosing the files to commit. |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
801 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
802 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
|
803 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
804 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
|
805 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
|
806 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
|
807 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
808 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
|
809 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
|
810 on the file. |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
811 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
812 Key bindings |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
813 ------------ |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
814 \\[hg-commit-finish] proceed with commit |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
815 \\[hg-commit-kill] kill commit |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
816 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
817 \\[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
|
818 (interactive) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
819 (use-local-map hg-commit-mode-map) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
820 (set-syntax-table text-mode-syntax-table) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
821 (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
|
822 major-mode 'hg-commit-mode |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
823 mode-name "Hg-Commit") |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
824 (set-buffer-modified-p nil) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
825 (setq buffer-undo-list nil) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
826 (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
|
827 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
828 (defun hg-commit-start () |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
829 "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
|
830 (interactive) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
831 (while hg-prev-buffer |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
832 (set-buffer hg-prev-buffer)) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
833 (let ((root (hg-root)) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
834 (prev-buffer (current-buffer)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
835 modified-files) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
836 (unless root |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
837 (error "Cannot commit outside a repository!")) |
1024
5b257e419816
Sync buffers prior to doing a diff.
bos@serpentine.internal.keyresearch.com
parents:
1011
diff
changeset
|
838 (hg-sync-buffers root) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
839 (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
|
840 (when (and (= (length modified-files) 0) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
841 (not hg-commit-allow-empty-file-list)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
842 (error "No pending changes to commit")) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
843 (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
|
844 (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
|
845 (when (= (point-min) (point-max)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
846 (set (make-local-variable 'hg-root) root) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
847 (setq hg-prev-buffer prev-buffer) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
848 (insert "\n") |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
849 (let ((bol (point))) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
850 (insert hg-commit-message-end) |
1004
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
851 (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
|
852 (let ((file-area (point))) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
853 (insert modified-files) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
854 (goto-char file-area) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
855 (while (< (point) (point-max)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
856 (let ((bol (point))) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
857 (forward-char 1) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
858 (insert " ") |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
859 (end-of-line) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
860 (add-text-properties (+ bol 4) (point) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
861 '(face bold mouse-face highlight))) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
862 (forward-line 1)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
863 (goto-char file-area) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
864 (add-text-properties (point) (point-max) |
1004
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
865 `(keymap ,hg-commit-mode-file-map)) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
866 (goto-char (point-min)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
867 (insert hg-commit-message-start) |
1004
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
868 (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
|
869 (insert "\n\n") |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
870 (forward-line -1) |
1004
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
871 (save-excursion |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
872 (goto-char (point-max)) |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
873 (search-backward hg-commit-message-end) |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
874 (add-text-properties (match-beginning 0) (point-max) |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
875 '(read-only t)) |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
876 (goto-char (point-min)) |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
877 (search-forward hg-commit-message-start) |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
878 (add-text-properties (match-beginning 0) (match-end 0) |
ad6fcceaf59b
Emacs: improved GNU Emacs support.
bos@serpentine.internal.keyresearch.com
parents:
1003
diff
changeset
|
879 '(read-only t))) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
880 (hg-commit-mode)))))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
881 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
882 (defun hg-diff (path &optional rev1 rev2) |
996
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
883 "Show the differences between REV1 and REV2 of PATH. |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
884 When called interactively, the default behaviour is to treat REV1 as |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
885 the tip revision, REV2 as the current edited version of the file, and |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
886 PATH as the file edited in the current buffer. |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
887 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
|
888 (interactive (list (hg-read-file-name " to diff") |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
889 (hg-read-rev " to start with") |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
890 (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
|
891 (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
|
892 (hg-sync-buffers path) |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
893 (let ((a-path (hg-abbrev-file-name 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
|
894 (r1 (or rev1 "tip")) |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
895 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
|
896 (hg-view-output ((cond |
cb31576ed3e4
Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1026
diff
changeset
|
897 ((and (equal r1 "tip") (not rev2)) |
cb31576ed3e4
Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1026
diff
changeset
|
898 (format "Mercurial: Diff against tip of %s" a-path)) |
cb31576ed3e4
Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1026
diff
changeset
|
899 ((equal r1 rev2) |
cb31576ed3e4
Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1026
diff
changeset
|
900 (format "Mercurial: Diff of rev %s of %s" r1 a-path)) |
cb31576ed3e4
Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1026
diff
changeset
|
901 (t |
cb31576ed3e4
Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1026
diff
changeset
|
902 (format "Mercurial: Diff from rev %s to %s of %s" |
cb31576ed3e4
Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1026
diff
changeset
|
903 r1 (or rev2 "Current") a-path)))) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
904 (if rev2 |
1027
cb31576ed3e4
Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1026
diff
changeset
|
905 (call-process (hg-binary) nil t nil "diff" "-r" r1 "-r" rev2 path) |
cb31576ed3e4
Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1026
diff
changeset
|
906 (call-process (hg-binary) nil t nil "diff" "-r" r1 path)) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
907 (diff-mode) |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
908 (setq diff (not (= (point-min) (point-max)))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
909 (font-lock-fontify-buffer)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
910 diff)) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
911 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
912 (defun hg-diff-repo () |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
913 "Show the differences between the working copy and the tip revision." |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
914 (interactive) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
915 (hg-diff (hg-root))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
916 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
917 (defun hg-forget (path) |
996
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
918 "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
|
919 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
|
920 repository on the next commit. |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
921 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
|
922 (interactive (list (hg-read-file-name " to forget"))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
923 (let ((buf (current-buffer)) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
924 (update (equal buffer-file-name path))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
925 (hg-view-output (hg-output-buffer-name) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
926 (apply 'call-process (hg-binary) nil t nil (list "forget" path))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
927 (when update |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
928 (with-current-buffer buf |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
929 (hg-mode-line))))) |
1308
2073e5a71008
Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1246
diff
changeset
|
930 |
1029
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
931 (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
|
932 "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
|
933 (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
|
934 (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
|
935 (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
|
936 (hg-abbrev-file-name |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
937 (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
|
938 (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
|
939 (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
|
940 (hg-log-mode))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
941 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
942 (defun hg-init () |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
943 (interactive) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
944 (error "not implemented")) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
945 |
1029
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
946 (defun hg-log-mode () |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
947 "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
|
948 (goto-char (point-min)) |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
949 (when (looking-at "^searching for changes") |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
950 (kill-entire-line)) |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
951 (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
|
952 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
953 (defun hg-log (path &optional rev1 rev2) |
996
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
954 "Display the revision history of PATH, between REV1 and REV2. |
1027
cb31576ed3e4
Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1026
diff
changeset
|
955 REV1 defaults to hg-log-limit changes from the tip revision, while |
cb31576ed3e4
Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1026
diff
changeset
|
956 REV2 defaults to the tip. |
cb31576ed3e4
Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1026
diff
changeset
|
957 With a prefix argument, prompt for each parameter." |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
958 (interactive (list (hg-read-file-name " to log") |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
959 (hg-read-rev " to start with" "-1") |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
960 (hg-read-rev " to end with" (format "-%d" 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
|
961 (let ((a-path (hg-abbrev-file-name path)) |
cb31576ed3e4
Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1026
diff
changeset
|
962 (r1 (or rev1 (format "-%d" hg-log-limit))) |
cb31576ed3e4
Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1026
diff
changeset
|
963 (r2 (or rev2 rev1 "-1"))) |
cb31576ed3e4
Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1026
diff
changeset
|
964 (hg-view-output ((if (equal r1 r2) |
cb31576ed3e4
Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1026
diff
changeset
|
965 (format "Mercurial: Log of rev %s of %s" rev1 a-path) |
cb31576ed3e4
Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1026
diff
changeset
|
966 (format "Mercurial: Log from rev %s to %s of %s" |
cb31576ed3e4
Emacs: fix up hg-log and hg-diff to operate more uniformly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1026
diff
changeset
|
967 r1 r2 a-path))) |
1175
7e909ceeb36a
Emacs: fix invocations of "hg log" to match current behaviour of log.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1029
diff
changeset
|
968 (let ((revs (format "%s:%s" r1 r2))) |
7e909ceeb36a
Emacs: fix invocations of "hg log" to match current behaviour of log.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1029
diff
changeset
|
969 (if (> (length path) (length (hg-root path))) |
7e909ceeb36a
Emacs: fix invocations of "hg log" to match current behaviour of log.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1029
diff
changeset
|
970 (call-process (hg-binary) nil t nil "log" "-r" revs path) |
7e909ceeb36a
Emacs: fix invocations of "hg log" to match current behaviour of log.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1029
diff
changeset
|
971 (call-process (hg-binary) nil t nil "log" "-r" revs))) |
1029
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
972 (hg-log-mode)))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
973 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
974 (defun hg-log-repo (path &optional rev1 rev2) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
975 "Display the revision history of the repository containing PATH. |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
976 History is displayed between REV1, which defaults to the tip, and |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
977 REV2, which defaults to the initial revision. |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
978 Variable hg-log-limit controls the number of log entries displayed." |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
979 (interactive (list (hg-read-file-name " to log") |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
980 (hg-read-rev " to start with" "tip") |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
981 (hg-read-rev " to end with" (format "-%d" hg-log-limit)))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
982 (hg-log (hg-root path) rev1 rev2)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
983 |
1029
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
984 (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
|
985 "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
|
986 (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
|
987 hg-outgoing-repository))) |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
988 (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
|
989 (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
|
990 (hg-abbrev-file-name |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
991 (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
|
992 (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
|
993 (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
|
994 (hg-log-mode))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
995 |
1246
ae96c85fb0af
mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1179
diff
changeset
|
996 (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
|
997 "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
|
998 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
|
999 (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
|
1000 (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
|
1001 (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
|
1002 (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
|
1003 (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
|
1004 (call-process (hg-binary) nil t nil "pull" |
ae96c85fb0af
mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1179
diff
changeset
|
1005 (or repo hg-incoming-repository)))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1006 |
1029
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
1007 (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
|
1008 "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
|
1009 (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
|
1010 (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
|
1011 (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
|
1012 (hg-abbrev-file-name |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
1013 (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
|
1014 (call-process (hg-binary) nil t nil "push" |
b5f0ccad8917
Emacs: implement hg-incoming, hg-outgoing and hg-push.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1027
diff
changeset
|
1015 (or repo hg-outgoing-repository)))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1016 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1017 (defun hg-revert-buffer-internal () |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1018 (let ((ctx (hg-buffer-context))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1019 (message "Reverting %s..." buffer-file-name) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1020 (hg-run0 "revert" buffer-file-name) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1021 (revert-buffer t t t) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1022 (hg-restore-context ctx) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1023 (hg-mode-line) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1024 (message "Reverting %s...done" buffer-file-name))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1025 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1026 (defun hg-revert-buffer () |
996
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
1027 "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
|
1028 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
|
1029 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
|
1030 (interactive) |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1031 (let ((vc-suppress-confirm nil) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1032 (obuf (current-buffer)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1033 diff) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1034 (vc-buffer-sync) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1035 (unwind-protect |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1036 (setq diff (hg-diff buffer-file-name)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1037 (when diff |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1038 (unless (yes-or-no-p "Discard changes? ") |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1039 (error "Revert cancelled"))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1040 (when diff |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1041 (let ((buf (current-buffer))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1042 (delete-window (selected-window)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1043 (kill-buffer buf)))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1044 (set-buffer obuf) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1045 (when diff |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
1046 (hg-revert-buffer-internal)))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1047 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1048 (defun hg-root (&optional path) |
996
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
1049 "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
|
1050 If the path is outside a repository, return nil. |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
1051 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
|
1052 prompts for a path to check." |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
1053 (interactive (list (hg-read-file-name))) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
1054 (if (or path (not hg-root)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
1055 (let ((root (do ((prev nil dir) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
1056 (dir (file-name-directory (or path buffer-file-name "")) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
1057 (file-name-directory (directory-file-name dir)))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
1058 ((equal prev dir)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
1059 (when (file-directory-p (concat dir ".hg")) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
1060 (return dir))))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
1061 (when (interactive-p) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
1062 (if root |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
1063 (message "The root of this repository is `%s'." root) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
1064 (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
|
1065 (hg-abbrev-file-name path)))) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
1066 root) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
1067 hg-root)) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1068 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
1069 (defun hg-status (path) |
996
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
1070 "Print revision control status of a file or directory. |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
1071 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
|
1072 Names are displayed relative to the repository root." |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
1073 (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
|
1074 (let ((root (hg-root))) |
996
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
1075 (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
|
1076 (let ((name (substring (expand-file-name path) |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
1077 (length root)))) |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
1078 (if (> (length name) 0) |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
1079 name |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
1080 "*")) |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
1081 (hg-abbrev-file-name root))) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
1082 (apply 'call-process (hg-binary) nil t nil |
955 | 1083 (list "--cwd" root "status" path))))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1084 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1085 (defun hg-undo () |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1086 (interactive) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1087 (error "not implemented")) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1088 |
1246
ae96c85fb0af
mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1179
diff
changeset
|
1089 (defun hg-update () |
ae96c85fb0af
mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1179
diff
changeset
|
1090 (interactive) |
ae96c85fb0af
mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1179
diff
changeset
|
1091 (error "not implemented")) |
ae96c85fb0af
mercurial.el: implement hg-pull, and stub in hg-update.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1179
diff
changeset
|
1092 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1093 (defun hg-version-other-window () |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1094 (interactive) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1095 (error "not implemented")) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1096 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1097 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1098 (provide 'mercurial) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1099 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1100 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1101 ;;; Local Variables: |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1102 ;;; prompt-to-byte-compile: nil |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1103 ;;; end: |