annotate contrib/mercurial.el @ 2323:c58a403aa830

setup.py: install packagescan before any mercurial modules is imported Further the installation of packagescan over demandload is moved to the packagescan module. I added as well few more comments in the packagescan module to avoid the wrong use of package scan in the future. Reason: mercurial.packagescan acts as fake mercurial.demandload during a py2exe run. Unfortunatly the import of mercurial.version in setup.py is done before mercurial.packagescan is installed. This results in few imports without mercurial.packagescan in charge and therefore not all dependend modules are detected when running mercurial.packagescan.getmodules later e.g. winerror is missed.
author Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
date Fri, 19 May 2006 08:54:28 -0700
parents 68e84563c540
children c4a2d8502cc0 3d58376a7103
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
944
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1 ;;; mercurial.el --- Emacs support for the Mercurial distributed SCM
41ca6bf19735 Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
2
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
d845a1f174bb Make mercurial.el load with GNU emacs
mpm@selenic.com
parents: 955
diff changeset
194 (if (functionp 'set-keymap-name)
d845a1f174bb Make mercurial.el load with GNU emacs
mpm@selenic.com
parents: 955
diff changeset
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
d845a1f174bb Make mercurial.el load with GNU emacs
mpm@selenic.com
parents: 955
diff changeset
243 (if (functionp 'set-keymap-name)
d845a1f174bb Make mercurial.el load with GNU emacs
mpm@selenic.com
parents: 955
diff changeset
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
a7abffa4b19f Adjust hg-strip and hg-chomp regexps.
jdc@uwo.ca
parents: 1175
diff changeset
286 "Strip leading and trailing blank lines from a string."
a7abffa4b19f Adjust hg-strip and hg-chomp regexps.
jdc@uwo.ca
parents: 1175
diff changeset
287 (hg-replace-in-string (hg-replace-in-string str "[\r\n][ \t\r\n]*\\'" "")
a7abffa4b19f Adjust hg-strip and hg-chomp regexps.
jdc@uwo.ca
parents: 1175
diff changeset
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
a7abffa4b19f Adjust hg-strip and hg-chomp regexps.
jdc@uwo.ca
parents: 1175
diff changeset
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
8acf62f579d8 Fix mercurial.el help.
jdc@uwo.ca
parents: 1178
diff changeset
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
8acf62f579d8 Fix mercurial.el help.
jdc@uwo.ca
parents: 1178
diff changeset
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
8acf62f579d8 Fix mercurial.el help.
jdc@uwo.ca
parents: 1178
diff changeset
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
307ca8ca234f Remove -C alias for --cwd
mpm@selenic.com
parents: 948
diff changeset
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: