Mercurial > hg
annotate mercurial/commands.py @ 1241:3b4f05ff3130
Add support for cloning with hardlinks on windows.
In order to use hardlinks, the win32file module is needed, and this is
present in ActivePython. If it isn't present, or hardlinks are not supported
on the underlying filesystem, a regular copy is used.
When using hardlinks the biggest benefit is probably the saving in space,
but cloning can be much quicker. For example cloning the Xen tree
(non trivial) without an update goes from about 95s to 15s.
Unix-like platforms should be unaffected, although should be more tolerant on
filesystems that don't support hard links.
(tweaked by mpm to deal with new copyfiles function)
--- hg.orig/mercurial/commands.py 2005-09-13 19:32:53.000000000 -0500
+++ hg/mercurial/commands.py 2005-09-14 12:11:34.000000000 -0500
@@ -620,10 +620,6 @@ def clone(ui, source, dest=None, **opts)
if other.dev() != -1:
abspath = os.path.abspath(source)
- copyfile = (os.stat(dest).st_dev == other.dev()
- and getattr(os, 'link', None) or shutil.copy2)
- if copyfile is not shutil.copy2:
- ui.note("cloning by hardlink\n")
# we use a lock here because if we race with commit, we can
# end up with extra data in the cloned revlogs that's not
@@ -638,7 +634,7 @@ def clone(ui, source, dest=None, **opts)
for f in files.split():
src = os.path.join(source, ".hg", f)
dst = os.path.join(dest, ".hg", f)
- util.copyfiles(src, dst, copyfile)
+ util.copyfiles(src, dst)
repo = hg.repository(ui, dest)
Index: hg/mercurial/util.py
===================================================================
--- hg.orig/mercurial/util.py 2005-09-08 00:15:25.000000000 -0500
+++ hg/mercurial/util.py 2005-09-14 12:16:49.000000000 -0500
@@ -12,7 +12,7 @@ platform-specific details from the core.
import os, errno
from demandload import *
-demandload(globals(), "re cStringIO")
+demandload(globals(), "re cStringIO shutil")
def binary(s):
"""return true if a string is binary data using diff's heuristic"""
@@ -217,17 +217,28 @@ def rename(src, dst):
os.unlink(dst)
os.rename(src, dst)
-def copyfiles(src, dst, copyfile):
- """Copy a directory tree, files are copied using 'copyfile'."""
+def copyfiles(src, dst, hardlink=None):
+ """Copy a directory tree using hardlinks if possible"""
+
+ if hardlink is None:
+ hardlink = (os.stat(src).st_dev ==
+ os.stat(os.path.dirname(dst)).st_dev)
if os.path.isdir(src):
os.mkdir(dst)
for name in os.listdir(src):
srcname = os.path.join(src, name)
dstname = os.path.join(dst, name)
- copyfiles(srcname, dstname, copyfile)
+ copyfiles(srcname, dstname, hardlink)
else:
- copyfile(src, dst)
+ if hardlink:
+ try:
+ os_link(src, dst)
+ except:
+ hardlink = False
+ shutil.copy2(src, dst)
+ else:
+ shutil.copy2(src, dst)
def opener(base):
"""
@@ -244,13 +255,13 @@ def opener(base):
if mode[0] != "r":
try:
- s = os.stat(f)
+ nlink = nlinks(f)
except OSError:
d = os.path.dirname(f)
if not os.path.isdir(d):
os.makedirs(d)
else:
- if s.st_nlink > 1:
+ if nlink > 1:
file(f + ".tmp", "wb").write(file(f, "rb").read())
rename(f+".tmp", f)
@@ -266,10 +277,41 @@ def _makelock_file(info, pathname):
def _readlock_file(pathname):
return file(pathname).read()
+def nlinks(pathname):
+ """Return number of hardlinks for the given file."""
+ return os.stat(pathname).st_nlink
+
+if hasattr(os, 'link'):
+ os_link = os.link
+else:
+ def os_link(src, dst):
+ raise OSError(0, "Hardlinks not supported")
+
# Platform specific variants
if os.name == 'nt':
nulldev = 'NUL:'
+ try: # ActivePython can create hard links using win32file module
+ import win32file
+
+ def os_link(src, dst): # NB will only succeed on NTFS
+ win32file.CreateHardLink(dst, src)
+
+ def nlinks(pathname):
+ """Return number of hardlinks for the given file."""
+ try:
+ fh = win32file.CreateFile(pathname,
+ win32file.GENERIC_READ, win32file.FILE_SHARE_READ,
+ None, win32file.OPEN_EXISTING, 0, None)
+ res = win32file.GetFileInformationByHandle(fh)
+ fh.Close()
+ return res[7]
+ except:
+ return os.stat(pathname).st_nlink
+
+ except ImportError:
+ pass
+
def is_exec(f, last):
return last
author | Stephen Darnell |
---|---|
date | Wed, 14 Sep 2005 12:22:20 -0500 |
parents | 6a4f181497c9 |
children | 4a6efec8b698 7a70dafbf4b9 |
rev | line source |
---|---|
249 | 1 # commands.py - command processing for mercurial |
2 # | |
3 # Copyright 2005 Matt Mackall <mpm@selenic.com> | |
4 # | |
5 # This software may be used and distributed according to the terms | |
6 # of the GNU General Public License, incorporated herein by reference. | |
7 | |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
8 from demandload import demandload |
1092 | 9 from node import * |
1225 | 10 demandload(globals(), "os re sys signal shutil imp urllib pdb") |
1093
1f1661c58283
commands: use revlog directly for debug commands
mpm@selenic.com
parents:
1092
diff
changeset
|
11 demandload(globals(), "fancyopts ui hg util lock revlog") |
627 | 12 demandload(globals(), "fnmatch hgweb mdiff random signal time traceback") |
1218
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
13 demandload(globals(), "errno socket version struct atexit sets bz2") |
209 | 14 |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
15 class UnknownCommand(Exception): |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
16 """Exception raised if command is not in the command table.""" |
209 | 17 |
245 | 18 def filterfiles(filters, files): |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
19 l = [x for x in files if x in filters] |
213 | 20 |
245 | 21 for t in filters: |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
22 if t and t[-1] != "/": |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
23 t += "/" |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
24 l += [x for x in files if x.startswith(t)] |
213 | 25 return l |
26 | |
209 | 27 def relpath(repo, args): |
628
8d7f6e68828a
Use repo.getcwd() in a few obvious places.
Bryan O'Sullivan <bos@serpentine.com>
parents:
627
diff
changeset
|
28 cwd = repo.getcwd() |
8d7f6e68828a
Use repo.getcwd() in a few obvious places.
Bryan O'Sullivan <bos@serpentine.com>
parents:
627
diff
changeset
|
29 if cwd: |
886
509de8ab6f31
Fix walk path handling on Windows
Bryan O'Sullivan <bos@serpentine.com>
parents:
884
diff
changeset
|
30 return [util.normpath(os.path.join(cwd, x)) for x in args] |
209 | 31 return args |
245 | 32 |
1062 | 33 def matchpats(repo, cwd, pats=[], opts={}, head=''): |
1081
8b7d63489db3
Change canonpath to not know about repo objects
mpm@selenic.com
parents:
1071
diff
changeset
|
34 return util.matcher(repo.root, cwd, pats or ['.'], opts.get('include'), |
742 | 35 opts.get('exclude'), head) |
724
1c0c413cccdd
Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
723
diff
changeset
|
36 |
1062 | 37 def makewalk(repo, pats, opts, head=''): |
724
1c0c413cccdd
Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
723
diff
changeset
|
38 cwd = repo.getcwd() |
1031
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
39 files, matchfn, anypats = matchpats(repo, cwd, pats, opts, head) |
942
7eb8cbcca7c4
Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents:
940
diff
changeset
|
40 exact = dict(zip(files, files)) |
837
a95c9b3fc3bf
Fix performance of hg diff.
Bryan O'Sullivan <bos@serpentine.com>
parents:
823
diff
changeset
|
41 def walk(): |
1062 | 42 for src, fn in repo.walk(files=files, match=matchfn): |
942
7eb8cbcca7c4
Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents:
940
diff
changeset
|
43 yield src, fn, util.pathto(cwd, fn), fn in exact |
837
a95c9b3fc3bf
Fix performance of hg diff.
Bryan O'Sullivan <bos@serpentine.com>
parents:
823
diff
changeset
|
44 return files, matchfn, walk() |
a95c9b3fc3bf
Fix performance of hg diff.
Bryan O'Sullivan <bos@serpentine.com>
parents:
823
diff
changeset
|
45 |
1062 | 46 def walk(repo, pats, opts, head=''): |
837
a95c9b3fc3bf
Fix performance of hg diff.
Bryan O'Sullivan <bos@serpentine.com>
parents:
823
diff
changeset
|
47 files, matchfn, results = makewalk(repo, pats, opts, head) |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
48 for r in results: |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
49 yield r |
724
1c0c413cccdd
Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
723
diff
changeset
|
50 |
1057 | 51 def walkchangerevs(ui, repo, cwd, pats, opts): |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
52 '''Iterate over files and the revs they changed in. |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
53 |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
54 Callers most commonly need to iterate backwards over the history |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
55 it is interested in. Doing so has awful (quadratic-looking) |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
56 performance, so we use iterators in a "windowed" way. |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
57 |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
58 We walk a window of revisions in the desired order. Within the |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
59 window, we first walk forwards to gather data, then in the desired |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
60 order (usually backwards) to display it. |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
61 |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
62 This function returns an (iterator, getchange) pair. The |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
63 getchange function returns the changelog entry for a numeric |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
64 revision. The iterator yields 3-tuples. They will be of one of |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
65 the following forms: |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
66 |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
67 "window", incrementing, lastrev: stepping through a window, |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
68 positive if walking forwards through revs, last rev in the |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
69 sequence iterated over - use to reset state for the current window |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
70 |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
71 "add", rev, fns: out-of-order traversal of the given file names |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
72 fns, which changed during revision rev - use to gather data for |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
73 possible display |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
74 |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
75 "iter", rev, None: in-order traversal of the revs earlier iterated |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
76 over with "add" - use to display data''' |
1057 | 77 cwd = repo.getcwd() |
78 if not pats and cwd: | |
79 opts['include'] = [os.path.join(cwd, i) for i in opts['include']] | |
80 opts['exclude'] = [os.path.join(cwd, x) for x in opts['exclude']] | |
81 files, matchfn, anypats = matchpats(repo, (pats and cwd) or '', | |
82 pats, opts) | |
83 revs = map(int, revrange(ui, repo, opts['rev'] or ['tip:0'])) | |
84 wanted = {} | |
85 slowpath = anypats | |
86 window = 300 | |
87 fncache = {} | |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
88 |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
89 chcache = {} |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
90 def getchange(rev): |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
91 ch = chcache.get(rev) |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
92 if ch is None: |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
93 chcache[rev] = ch = repo.changelog.read(repo.lookup(str(rev))) |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
94 return ch |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
95 |
1057 | 96 if not slowpath and not files: |
97 # No files, no patterns. Display all revs. | |
98 wanted = dict(zip(revs, revs)) | |
99 if not slowpath: | |
100 # Only files, no patterns. Check the history of each file. | |
101 def filerevgen(filelog): | |
102 for i in xrange(filelog.count() - 1, -1, -window): | |
103 revs = [] | |
104 for j in xrange(max(0, i - window), i + 1): | |
105 revs.append(filelog.linkrev(filelog.node(j))) | |
106 revs.reverse() | |
107 for rev in revs: | |
108 yield rev | |
109 | |
110 minrev, maxrev = min(revs), max(revs) | |
111 for file in files: | |
112 filelog = repo.file(file) | |
113 # A zero count may be a directory or deleted file, so | |
114 # try to find matching entries on the slow path. | |
115 if filelog.count() == 0: | |
116 slowpath = True | |
117 break | |
118 for rev in filerevgen(filelog): | |
119 if rev <= maxrev: | |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
120 if rev < minrev: |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
121 break |
1057 | 122 fncache.setdefault(rev, []) |
123 fncache[rev].append(file) | |
124 wanted[rev] = 1 | |
125 if slowpath: | |
126 # The slow path checks files modified in every changeset. | |
127 def changerevgen(): | |
128 for i in xrange(repo.changelog.count() - 1, -1, -window): | |
129 for j in xrange(max(0, i - window), i + 1): | |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
130 yield j, getchange(j)[3] |
1057 | 131 |
132 for rev, changefiles in changerevgen(): | |
133 matches = filter(matchfn, changefiles) | |
134 if matches: | |
135 fncache[rev] = matches | |
136 wanted[rev] = 1 | |
137 | |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
138 def iterate(): |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
139 for i in xrange(0, len(revs), window): |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
140 yield 'window', revs[0] < revs[-1], revs[-1] |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
141 nrevs = [rev for rev in revs[i:min(i+window, len(revs))] |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
142 if rev in wanted] |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
143 srevs = list(nrevs) |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
144 srevs.sort() |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
145 for rev in srevs: |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
146 fns = fncache.get(rev) or filter(matchfn, getchange(rev)[3]) |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
147 yield 'add', rev, fns |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
148 for rev in nrevs: |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
149 yield 'iter', rev, None |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
150 return iterate(), getchange |
1057 | 151 |
580 | 152 revrangesep = ':' |
153 | |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
154 def revrange(ui, repo, revs, revlog=None): |
1066
ea878688221e
Shortened commands.revrange() a little bit, added docstring.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1065
diff
changeset
|
155 """Yield revision as strings from a list of revision specifications.""" |
580 | 156 if revlog is None: |
157 revlog = repo.changelog | |
158 revcount = revlog.count() | |
159 def fix(val, defval): | |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
160 if not val: |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
161 return defval |
580 | 162 try: |
163 num = int(val) | |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
164 if str(num) != val: |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
165 raise ValueError |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
166 if num < 0: |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
167 num += revcount |
580 | 168 if not (0 <= num < revcount): |
169 raise ValueError | |
170 except ValueError: | |
171 try: | |
172 num = repo.changelog.rev(repo.lookup(val)) | |
173 except KeyError: | |
174 try: | |
175 num = revlog.rev(revlog.lookup(val)) | |
176 except KeyError: | |
870
a82eae840447
Teach walk code about absolute paths.
Bryan O'Sullivan <bos@serpentine.com>
parents:
868
diff
changeset
|
177 raise util.Abort('invalid revision identifier %s', val) |
580 | 178 return num |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
179 seen = {} |
580 | 180 for spec in revs: |
181 if spec.find(revrangesep) >= 0: | |
182 start, end = spec.split(revrangesep, 1) | |
183 start = fix(start, 0) | |
184 end = fix(end, revcount - 1) | |
1066
ea878688221e
Shortened commands.revrange() a little bit, added docstring.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1065
diff
changeset
|
185 step = start > end and -1 or 1 |
ea878688221e
Shortened commands.revrange() a little bit, added docstring.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1065
diff
changeset
|
186 for rev in xrange(start, end+step, step): |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
187 if rev in seen: continue |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
188 seen[rev] = 1 |
580 | 189 yield str(rev) |
190 else: | |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
191 rev = fix(spec, None) |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
192 if rev in seen: continue |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
193 seen[rev] = 1 |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
194 yield str(rev) |
580 | 195 |
739
36edb39e8e8c
Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents:
738
diff
changeset
|
196 def make_filename(repo, r, pat, node=None, |
36edb39e8e8c
Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents:
738
diff
changeset
|
197 total=None, seqno=None, revwidth=None): |
632 | 198 node_expander = { |
1092 | 199 'H': lambda: hex(node), |
632 | 200 'R': lambda: str(r.rev(node)), |
1092 | 201 'h': lambda: short(node), |
632 | 202 } |
203 expander = { | |
204 '%': lambda: '%', | |
205 'b': lambda: os.path.basename(repo.root), | |
206 } | |
207 | |
727
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
208 try: |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
209 if node: |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
210 expander.update(node_expander) |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
211 if node and revwidth is not None: |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
212 expander['r'] = lambda: str(r.rev(node)).zfill(revwidth) |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
213 if total is not None: |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
214 expander['N'] = lambda: str(total) |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
215 if seqno is not None: |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
216 expander['n'] = lambda: str(seqno) |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
217 if total is not None and seqno is not None: |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
218 expander['n'] = lambda:str(seqno).zfill(len(str(total))) |
632 | 219 |
727
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
220 newname = [] |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
221 patlen = len(pat) |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
222 i = 0 |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
223 while i < patlen: |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
224 c = pat[i] |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
225 if c == '%': |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
226 i += 1 |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
227 c = pat[i] |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
228 c = expander[c]() |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
229 newname.append(c) |
632 | 230 i += 1 |
739
36edb39e8e8c
Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents:
738
diff
changeset
|
231 return ''.join(newname) |
727
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
232 except KeyError, inst: |
870
a82eae840447
Teach walk code about absolute paths.
Bryan O'Sullivan <bos@serpentine.com>
parents:
868
diff
changeset
|
233 raise util.Abort("invalid format spec '%%%s' in output file name", |
727
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
234 inst.args[0]) |
632 | 235 |
739
36edb39e8e8c
Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents:
738
diff
changeset
|
236 def make_file(repo, r, pat, node=None, |
36edb39e8e8c
Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents:
738
diff
changeset
|
237 total=None, seqno=None, revwidth=None, mode='wb'): |
36edb39e8e8c
Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents:
738
diff
changeset
|
238 if not pat or pat == '-': |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
239 return 'w' in mode and sys.stdout or sys.stdin |
739
36edb39e8e8c
Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents:
738
diff
changeset
|
240 if hasattr(pat, 'write') and 'w' in mode: |
36edb39e8e8c
Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents:
738
diff
changeset
|
241 return pat |
36edb39e8e8c
Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents:
738
diff
changeset
|
242 if hasattr(pat, 'read') and 'r' in mode: |
36edb39e8e8c
Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents:
738
diff
changeset
|
243 return pat |
36edb39e8e8c
Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents:
738
diff
changeset
|
244 return open(make_filename(repo, r, pat, node, total, seqno, revwidth), |
36edb39e8e8c
Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents:
738
diff
changeset
|
245 mode) |
36edb39e8e8c
Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents:
738
diff
changeset
|
246 |
1014 | 247 def dodiff(fp, ui, repo, node1, node2, files=None, match=util.always, |
1015
22571b8d35d3
Add automatic binary file detection to diff and export
mpm@selenic.com
parents:
1014
diff
changeset
|
248 changes=None, text=False): |
245 | 249 def date(c): |
250 return time.asctime(time.gmtime(float(c[2].split(' ')[0]))) | |
251 | |
904
969647d5100a
Add optional parameter for changed/added/del/unknown files to commands.dodiff
mason@suse.com
parents:
899
diff
changeset
|
252 if not changes: |
1062 | 253 (c, a, d, u) = repo.changes(node1, node2, files, match=match) |
904
969647d5100a
Add optional parameter for changed/added/del/unknown files to commands.dodiff
mason@suse.com
parents:
899
diff
changeset
|
254 else: |
969647d5100a
Add optional parameter for changed/added/del/unknown files to commands.dodiff
mason@suse.com
parents:
899
diff
changeset
|
255 (c, a, d, u) = changes |
537 | 256 if files: |
257 c, a, d = map(lambda x: filterfiles(files, x), (c, a, d)) | |
258 | |
259 if not c and not a and not d: | |
260 return | |
261 | |
245 | 262 if node2: |
263 change = repo.changelog.read(node2) | |
264 mmap2 = repo.manifest.read(change[0]) | |
265 date2 = date(change) | |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
266 def read(f): |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
267 return repo.file(f).read(mmap2[f]) |
245 | 268 else: |
269 date2 = time.asctime() | |
270 if not node1: | |
271 node1 = repo.dirstate.parents()[0] | |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
272 def read(f): |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
273 return repo.wfile(f).read() |
245 | 274 |
396
8f8bb77d560e
Show revisions in diffs like CVS, based on a patch from Goffredo Baroncelli.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
395
diff
changeset
|
275 if ui.quiet: |
8f8bb77d560e
Show revisions in diffs like CVS, based on a patch from Goffredo Baroncelli.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
395
diff
changeset
|
276 r = None |
8f8bb77d560e
Show revisions in diffs like CVS, based on a patch from Goffredo Baroncelli.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
395
diff
changeset
|
277 else: |
1092 | 278 hexfunc = ui.verbose and hex or short |
396
8f8bb77d560e
Show revisions in diffs like CVS, based on a patch from Goffredo Baroncelli.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
395
diff
changeset
|
279 r = [hexfunc(node) for node in [node1, node2] if node] |
8f8bb77d560e
Show revisions in diffs like CVS, based on a patch from Goffredo Baroncelli.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
395
diff
changeset
|
280 |
245 | 281 change = repo.changelog.read(node1) |
282 mmap = repo.manifest.read(change[0]) | |
283 date1 = date(change) | |
284 | |
285 for f in c: | |
275 | 286 to = None |
287 if f in mmap: | |
288 to = repo.file(f).read(mmap[f]) | |
245 | 289 tn = read(f) |
1015
22571b8d35d3
Add automatic binary file detection to diff and export
mpm@selenic.com
parents:
1014
diff
changeset
|
290 fp.write(mdiff.unidiff(to, date1, tn, date2, f, r, text=text)) |
245 | 291 for f in a: |
264
4c1d7072d5cd
Attempt to make diff deal with null sources properly
mpm@selenic.com
parents:
262
diff
changeset
|
292 to = None |
245 | 293 tn = read(f) |
1015
22571b8d35d3
Add automatic binary file detection to diff and export
mpm@selenic.com
parents:
1014
diff
changeset
|
294 fp.write(mdiff.unidiff(to, date1, tn, date2, f, r, text=text)) |
245 | 295 for f in d: |
296 to = repo.file(f).read(mmap[f]) | |
264
4c1d7072d5cd
Attempt to make diff deal with null sources properly
mpm@selenic.com
parents:
262
diff
changeset
|
297 tn = None |
1015
22571b8d35d3
Add automatic binary file detection to diff and export
mpm@selenic.com
parents:
1014
diff
changeset
|
298 fp.write(mdiff.unidiff(to, date1, tn, date2, f, r, text=text)) |
329
67c19ad374a9
Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
320
diff
changeset
|
299 |
1147 | 300 def trimuser(ui, name, rev, revcache): |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
301 """trim the name of the user who committed a change""" |
1147 | 302 user = revcache.get(rev) |
303 if user is None: | |
304 user = revcache[rev] = ui.shortuser(name) | |
305 return user | |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
306 |
1031
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
307 def show_changeset(ui, repo, rev=0, changenode=None, brinfo=None): |
329
67c19ad374a9
Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
320
diff
changeset
|
308 """show a single changeset or file revision""" |
1031
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
309 log = repo.changelog |
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
310 if changenode is None: |
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
311 changenode = log.node(rev) |
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
312 elif not rev: |
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
313 rev = log.rev(changenode) |
329
67c19ad374a9
Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
320
diff
changeset
|
314 |
67c19ad374a9
Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
320
diff
changeset
|
315 if ui.quiet: |
1092 | 316 ui.write("%d:%s\n" % (rev, short(changenode))) |
329
67c19ad374a9
Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
320
diff
changeset
|
317 return |
67c19ad374a9
Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
320
diff
changeset
|
318 |
1031
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
319 changes = log.read(changenode) |
329
67c19ad374a9
Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
320
diff
changeset
|
320 |
967
1f3710636b45
[PATCH] Print timezone offset when outputting dates
Samuel Tardieu <sam@rfc1149.net>
parents:
966
diff
changeset
|
321 t, tz = changes[2].split(' ') |
973
a51991ebf229
Deal with non-integer date offsets generated by some tools
mpm@selenic.com
parents:
967
diff
changeset
|
322 # a conversion tool was sticking non-integer offsets into repos |
a51991ebf229
Deal with non-integer date offsets generated by some tools
mpm@selenic.com
parents:
967
diff
changeset
|
323 try: |
a51991ebf229
Deal with non-integer date offsets generated by some tools
mpm@selenic.com
parents:
967
diff
changeset
|
324 tz = int(tz) |
a51991ebf229
Deal with non-integer date offsets generated by some tools
mpm@selenic.com
parents:
967
diff
changeset
|
325 except ValueError: |
a51991ebf229
Deal with non-integer date offsets generated by some tools
mpm@selenic.com
parents:
967
diff
changeset
|
326 tz = 0 |
967
1f3710636b45
[PATCH] Print timezone offset when outputting dates
Samuel Tardieu <sam@rfc1149.net>
parents:
966
diff
changeset
|
327 date = time.asctime(time.localtime(float(t))) + " %+05d" % (int(tz)/-36) |
1f3710636b45
[PATCH] Print timezone offset when outputting dates
Samuel Tardieu <sam@rfc1149.net>
parents:
966
diff
changeset
|
328 |
1092 | 329 parents = [(log.rev(p), ui.verbose and hex(p) or short(p)) |
1031
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
330 for p in log.parents(changenode) |
1092 | 331 if ui.debugflag or p != nullid] |
329
67c19ad374a9
Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
320
diff
changeset
|
332 if not ui.debugflag and len(parents) == 1 and parents[0][0] == rev-1: |
67c19ad374a9
Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
320
diff
changeset
|
333 parents = [] |
67c19ad374a9
Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
320
diff
changeset
|
334 |
778 | 335 if ui.verbose: |
1092 | 336 ui.write("changeset: %d:%s\n" % (rev, hex(changenode))) |
778 | 337 else: |
1092 | 338 ui.write("changeset: %d:%s\n" % (rev, short(changenode))) |
778 | 339 |
687 | 340 for tag in repo.nodetags(changenode): |
341 ui.status("tag: %s\n" % tag) | |
342 for parent in parents: | |
343 ui.write("parent: %d:%s\n" % parent) | |
778 | 344 |
898 | 345 if brinfo and changenode in brinfo: |
346 br = brinfo[changenode] | |
347 ui.write("branch: %s\n" % " ".join(br)) | |
348 | |
778 | 349 ui.debug("manifest: %d:%s\n" % (repo.manifest.rev(changes[0]), |
1092 | 350 hex(changes[0]))) |
329
67c19ad374a9
Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
320
diff
changeset
|
351 ui.status("user: %s\n" % changes[1]) |
967
1f3710636b45
[PATCH] Print timezone offset when outputting dates
Samuel Tardieu <sam@rfc1149.net>
parents:
966
diff
changeset
|
352 ui.status("date: %s\n" % date) |
778 | 353 |
493
30752b14f759
Make show_changeset show added/deleted files only in debug mode.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
490
diff
changeset
|
354 if ui.debugflag: |
1031
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
355 files = repo.changes(log.parents(changenode)[0], changenode) |
490
df9b77f67998
Make show_changeset show added and deleted files in verbose mode.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
485
diff
changeset
|
356 for key, value in zip(["files:", "files+:", "files-:"], files): |
df9b77f67998
Make show_changeset show added and deleted files in verbose mode.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
485
diff
changeset
|
357 if value: |
df9b77f67998
Make show_changeset show added and deleted files in verbose mode.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
485
diff
changeset
|
358 ui.note("%-12s %s\n" % (key, " ".join(value))) |
493
30752b14f759
Make show_changeset show added/deleted files only in debug mode.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
490
diff
changeset
|
359 else: |
30752b14f759
Make show_changeset show added/deleted files only in debug mode.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
490
diff
changeset
|
360 ui.note("files: %s\n" % " ".join(changes[3])) |
778 | 361 |
347
a0b2758edee7
Cleaned up show_changeset()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
330
diff
changeset
|
362 description = changes[4].strip() |
329
67c19ad374a9
Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
320
diff
changeset
|
363 if description: |
330 | 364 if ui.verbose: |
365 ui.status("description:\n") | |
347
a0b2758edee7
Cleaned up show_changeset()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
330
diff
changeset
|
366 ui.status(description) |
546
c8ae964109c1
Add an empty line after description in verbose mode of show_changeset.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
542
diff
changeset
|
367 ui.status("\n\n") |
330 | 368 else: |
347
a0b2758edee7
Cleaned up show_changeset()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
330
diff
changeset
|
369 ui.status("summary: %s\n" % description.splitlines()[0]) |
329
67c19ad374a9
Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
320
diff
changeset
|
370 ui.status("\n") |
67c19ad374a9
Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
320
diff
changeset
|
371 |
470
0ab093b473c5
Fix up version module name and command conflict
mpm@selenic.com
parents:
468
diff
changeset
|
372 def show_version(ui): |
423
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
396
diff
changeset
|
373 """output version and copyright information""" |
849
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
374 ui.write("Mercurial Distributed SCM (version %s)\n" |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
375 % version.get_version()) |
423
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
396
diff
changeset
|
376 ui.status( |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
396
diff
changeset
|
377 "\nCopyright (C) 2005 Matt Mackall <mpm@selenic.com>\n" |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
396
diff
changeset
|
378 "This is free software; see the source for copying conditions. " |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
396
diff
changeset
|
379 "There is NO\nwarranty; " |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
396
diff
changeset
|
380 "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
396
diff
changeset
|
381 ) |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
396
diff
changeset
|
382 |
1049
160a68cd393f
Allow --help and --version being used together.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1048
diff
changeset
|
383 def help_(ui, cmd=None, with_version=False): |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
384 """show help for a given command or all commands""" |
1052
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
385 option_lists = [] |
846
a30f7ee30914
When hg is invoked without parameters, the short list help is displayed.
kreijack@inwind.REMOVEME.it
parents:
845
diff
changeset
|
386 if cmd and cmd != 'shortlist': |
1049
160a68cd393f
Allow --help and --version being used together.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1048
diff
changeset
|
387 if with_version: |
160a68cd393f
Allow --help and --version being used together.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1048
diff
changeset
|
388 show_version(ui) |
160a68cd393f
Allow --help and --version being used together.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1048
diff
changeset
|
389 ui.write('\n') |
849
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
390 key, i = find(cmd) |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
391 # synopsis |
848
221628fe9b62
Always show short help when an unknown command is given.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
846
diff
changeset
|
392 ui.write("%s\n\n" % i[2]) |
293 | 393 |
849
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
394 # description |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
395 doc = i[0].__doc__ |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
396 if ui.quiet: |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
397 doc = doc.splitlines(0)[0] |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
398 ui.write("%s\n" % doc.rstrip()) |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
399 |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
400 if not ui.quiet: |
1052
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
401 # aliases |
849
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
402 aliases = ', '.join(key.split('|')[1:]) |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
403 if aliases: |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
404 ui.write("\naliases: %s\n" % aliases) |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
405 |
1052
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
406 # options |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
407 if i[1]: |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
408 option_lists.append(("options", i[1])) |
293 | 409 |
255 | 410 else: |
849
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
411 # program name |
1049
160a68cd393f
Allow --help and --version being used together.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1048
diff
changeset
|
412 if ui.verbose or with_version: |
470
0ab093b473c5
Fix up version module name and command conflict
mpm@selenic.com
parents:
468
diff
changeset
|
413 show_version(ui) |
849
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
414 else: |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
415 ui.status("Mercurial Distributed SCM\n") |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
416 ui.status('\n') |
843
859e7ea530bd
'hg help -v' shows global options
kreijack@inwind.REMOVEME.it
parents:
842
diff
changeset
|
417 |
849
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
418 # list of commands |
846
a30f7ee30914
When hg is invoked without parameters, the short list help is displayed.
kreijack@inwind.REMOVEME.it
parents:
845
diff
changeset
|
419 if cmd == "shortlist": |
849
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
420 ui.status('basic commands (use "hg help" ' |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
421 'for the full list or option "-v" for details):\n\n') |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
422 elif ui.verbose: |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
423 ui.status('list of commands:\n\n') |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
424 else: |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
425 ui.status('list of commands (use "hg help -v" ' |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
426 'to show aliases and global options):\n\n') |
209 | 427 |
255 | 428 h = {} |
844
5a717cfa7406
'hg help -v' mentions the alias of the commands
kreijack@inwind.REMOVEME.it
parents:
843
diff
changeset
|
429 cmds = {} |
479
7293cb91bf2a
Cleaned up command alias handling in help.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
477
diff
changeset
|
430 for c, e in table.items(): |
7293cb91bf2a
Cleaned up command alias handling in help.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
477
diff
changeset
|
431 f = c.split("|")[0] |
846
a30f7ee30914
When hg is invoked without parameters, the short list help is displayed.
kreijack@inwind.REMOVEME.it
parents:
845
diff
changeset
|
432 if cmd == "shortlist" and not f.startswith("^"): |
479
7293cb91bf2a
Cleaned up command alias handling in help.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
477
diff
changeset
|
433 continue |
849
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
434 f = f.lstrip("^") |
593 | 435 if not ui.debugflag and f.startswith("debug"): |
436 continue | |
255 | 437 d = "" |
470
0ab093b473c5
Fix up version module name and command conflict
mpm@selenic.com
parents:
468
diff
changeset
|
438 if e[0].__doc__: |
0ab093b473c5
Fix up version module name and command conflict
mpm@selenic.com
parents:
468
diff
changeset
|
439 d = e[0].__doc__.splitlines(0)[0].rstrip() |
0ab093b473c5
Fix up version module name and command conflict
mpm@selenic.com
parents:
468
diff
changeset
|
440 h[f] = d |
844
5a717cfa7406
'hg help -v' mentions the alias of the commands
kreijack@inwind.REMOVEME.it
parents:
843
diff
changeset
|
441 cmds[f]=c.lstrip("^") |
255 | 442 |
443 fns = h.keys() | |
444 fns.sort() | |
445 m = max(map(len, fns)) | |
446 for f in fns: | |
844
5a717cfa7406
'hg help -v' mentions the alias of the commands
kreijack@inwind.REMOVEME.it
parents:
843
diff
changeset
|
447 if ui.verbose: |
5a717cfa7406
'hg help -v' mentions the alias of the commands
kreijack@inwind.REMOVEME.it
parents:
843
diff
changeset
|
448 commands = cmds[f].replace("|",", ") |
5a717cfa7406
'hg help -v' mentions the alias of the commands
kreijack@inwind.REMOVEME.it
parents:
843
diff
changeset
|
449 ui.write(" %s:\n %s\n"%(commands,h[f])) |
5a717cfa7406
'hg help -v' mentions the alias of the commands
kreijack@inwind.REMOVEME.it
parents:
843
diff
changeset
|
450 else: |
5a717cfa7406
'hg help -v' mentions the alias of the commands
kreijack@inwind.REMOVEME.it
parents:
843
diff
changeset
|
451 ui.write(' %-*s %s\n' % (m, f, h[f])) |
255 | 452 |
849
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
453 # global options |
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
454 if ui.verbose: |
1052
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
455 option_lists.append(("global options", globalopts)) |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
456 |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
457 # list all option lists |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
458 opt_output = [] |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
459 for title, options in option_lists: |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
460 opt_output.append(("\n%s:\n" % title, None)) |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
461 for shortopt, longopt, default, desc in options: |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
462 opt_output.append(("%2s%s" % (shortopt and "-%s" % shortopt, |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
463 longopt and " --%s" % longopt), |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
464 "%s%s" % (desc, |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
465 default and " (default: %s)" % default |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
466 or ""))) |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
467 |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
468 if opt_output: |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
469 opts_len = max([len(line[0]) for line in opt_output if line[1]]) |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
470 for first, second in opt_output: |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
471 if second: |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
472 ui.write(" %-*s %s\n" % (opts_len, first, second)) |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
473 else: |
d8279ca39dc7
Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1051
diff
changeset
|
474 ui.write("%s\n" % first) |
849
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
475 |
255 | 476 # Commands start here, listed alphabetically |
209 | 477 |
724
1c0c413cccdd
Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
723
diff
changeset
|
478 def add(ui, repo, *pats, **opts): |
245 | 479 '''add the specified files on the next commit''' |
724
1c0c413cccdd
Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
723
diff
changeset
|
480 names = [] |
942
7eb8cbcca7c4
Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents:
940
diff
changeset
|
481 for src, abs, rel, exact in walk(repo, pats, opts): |
7eb8cbcca7c4
Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents:
940
diff
changeset
|
482 if exact: |
724
1c0c413cccdd
Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
723
diff
changeset
|
483 names.append(abs) |
1c0c413cccdd
Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
723
diff
changeset
|
484 elif repo.dirstate.state(abs) == '?': |
1c0c413cccdd
Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
723
diff
changeset
|
485 ui.status('adding %s\n' % rel) |
1c0c413cccdd
Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
723
diff
changeset
|
486 names.append(abs) |
1c0c413cccdd
Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
723
diff
changeset
|
487 repo.add(names) |
213 | 488 |
766
b444a7e053f1
Get addremove to use new walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
764
diff
changeset
|
489 def addremove(ui, repo, *pats, **opts): |
255 | 490 """add all new files, delete all missing files""" |
809
d0fb9efa2b2d
Fix performance regression in addremove command.
Bryan O'Sullivan <bos@serpentine.com>
parents:
783
diff
changeset
|
491 add, remove = [], [] |
942
7eb8cbcca7c4
Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents:
940
diff
changeset
|
492 for src, abs, rel, exact in walk(repo, pats, opts): |
880
409a9a7b0da2
addremove was not correctly finding removed files when given
mason@suse.com
parents:
879
diff
changeset
|
493 if src == 'f' and repo.dirstate.state(abs) == '?': |
409a9a7b0da2
addremove was not correctly finding removed files when given
mason@suse.com
parents:
879
diff
changeset
|
494 add.append(abs) |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
495 if not exact: |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
496 ui.status('adding ', rel, '\n') |
880
409a9a7b0da2
addremove was not correctly finding removed files when given
mason@suse.com
parents:
879
diff
changeset
|
497 if repo.dirstate.state(abs) != 'r' and not os.path.exists(rel): |
809
d0fb9efa2b2d
Fix performance regression in addremove command.
Bryan O'Sullivan <bos@serpentine.com>
parents:
783
diff
changeset
|
498 remove.append(abs) |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
499 if not exact: |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
500 ui.status('removing ', rel, '\n') |
809
d0fb9efa2b2d
Fix performance regression in addremove command.
Bryan O'Sullivan <bos@serpentine.com>
parents:
783
diff
changeset
|
501 repo.add(add) |
d0fb9efa2b2d
Fix performance regression in addremove command.
Bryan O'Sullivan <bos@serpentine.com>
parents:
783
diff
changeset
|
502 repo.remove(remove) |
219
8ff4532376a4
hg checkout: refuse to checkout if there are outstanding changes
mpm@selenic.com
parents:
214
diff
changeset
|
503 |
733
1966c553f652
Convert annotate over to walk interface.
Bryan O'Sullivan <bos@serpentine.com>
parents:
732
diff
changeset
|
504 def annotate(ui, repo, *pats, **opts): |
255 | 505 """show changeset information per file line""" |
209 | 506 def getnode(rev): |
1092 | 507 return short(repo.changelog.node(rev)) |
209 | 508 |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
509 ucache = {} |
209 | 510 def getname(rev): |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
511 cl = repo.changelog.read(repo.changelog.node(rev)) |
1147 | 512 return trimuser(ui, cl[1], rev, ucache) |
500
ebc4714a7632
[PATCH] Clean up destination directory if a clone fails.
mpm@selenic.com
parents:
499
diff
changeset
|
513 |
744 | 514 if not pats: |
870
a82eae840447
Teach walk code about absolute paths.
Bryan O'Sullivan <bos@serpentine.com>
parents:
868
diff
changeset
|
515 raise util.Abort('at least one file name or pattern required') |
744 | 516 |
209 | 517 opmap = [['user', getname], ['number', str], ['changeset', getnode]] |
714
29fcd195e056
Some cleanups in commands.annotate().
Thomas Arendsen Hein <thomas@intevation.de>
parents:
712
diff
changeset
|
518 if not opts['user'] and not opts['changeset']: |
29fcd195e056
Some cleanups in commands.annotate().
Thomas Arendsen Hein <thomas@intevation.de>
parents:
712
diff
changeset
|
519 opts['number'] = 1 |
209 | 520 |
715
938dd667ca21
Make annotate use option --rev instead od --revision like other commands.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
714
diff
changeset
|
521 if opts['rev']: |
938dd667ca21
Make annotate use option --rev instead od --revision like other commands.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
714
diff
changeset
|
522 node = repo.changelog.lookup(opts['rev']) |
714
29fcd195e056
Some cleanups in commands.annotate().
Thomas Arendsen Hein <thomas@intevation.de>
parents:
712
diff
changeset
|
523 else: |
29fcd195e056
Some cleanups in commands.annotate().
Thomas Arendsen Hein <thomas@intevation.de>
parents:
712
diff
changeset
|
524 node = repo.dirstate.parents()[0] |
209 | 525 change = repo.changelog.read(node) |
526 mmap = repo.manifest.read(change[0]) | |
1016 | 527 |
942
7eb8cbcca7c4
Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents:
940
diff
changeset
|
528 for src, abs, rel, exact in walk(repo, pats, opts): |
771 | 529 if abs not in mmap: |
530 ui.warn("warning: %s is not in the repository!\n" % rel) | |
531 continue | |
532 | |
1016 | 533 f = repo.file(abs) |
534 if not opts['text'] and util.binary(f.read(mmap[abs])): | |
535 ui.write("%s: binary file\n" % rel) | |
536 continue | |
537 | |
538 lines = f.annotate(mmap[abs]) | |
209 | 539 pieces = [] |
540 | |
541 for o, f in opmap: | |
714
29fcd195e056
Some cleanups in commands.annotate().
Thomas Arendsen Hein <thomas@intevation.de>
parents:
712
diff
changeset
|
542 if opts[o]: |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
543 l = [f(n) for n, dummy in lines] |
771 | 544 if l: |
545 m = max(map(len, l)) | |
546 pieces.append(["%*s" % (m, x) for x in l]) | |
209 | 547 |
771 | 548 if pieces: |
549 for p, l in zip(zip(*pieces), lines): | |
550 ui.write("%s: %s" % (" ".join(p), l[1])) | |
209 | 551 |
1218
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
552 def bundle(ui, repo, fname, dest="default-push", **opts): |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
553 """create a changegroup file""" |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
554 f = open(fname, "wb") |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
555 dest = ui.expandpath(dest) |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
556 other = hg.repository(ui, dest) |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
557 o = repo.findoutgoing(other) |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
558 cg = repo.changegroup(o) |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
559 |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
560 try: |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
561 f.write("HG10") |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
562 z = bz2.BZ2Compressor(9) |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
563 while 1: |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
564 chunk = cg.read(4096) |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
565 if not chunk: |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
566 break |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
567 f.write(z.compress(chunk)) |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
568 f.write(z.flush()) |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
569 except: |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
570 os.unlink(fname) |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
571 |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
572 def cat(ui, repo, file1, rev=None, **opts): |
255 | 573 """output the latest or given revision of a file""" |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
574 r = repo.file(relpath(repo, [file1])[0]) |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
575 if rev: |
918 | 576 try: |
577 # assume all revision numbers are for changesets | |
578 n = repo.lookup(rev) | |
579 change = repo.changelog.read(n) | |
580 m = repo.manifest.read(change[0]) | |
581 n = m[relpath(repo, [file1])[0]] | |
582 except hg.RepoError, KeyError: | |
583 n = r.lookup(rev) | |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
584 else: |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
585 n = r.tip() |
729
626aa658e2a9
Turn make_filename into make_file, which returns a file handle.
Bryan O'Sullivan <bos@serpentine.com>
parents:
727
diff
changeset
|
586 fp = make_file(repo, r, opts['output'], node=n) |
632 | 587 fp.write(r.read(n)) |
248 | 588 |
698
df78d8ccac4c
Use python function instead of external 'cp' command when cloning repos.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
697
diff
changeset
|
589 def clone(ui, source, dest=None, **opts): |
485 | 590 """make a copy of an existing repository""" |
591 if dest is None: | |
528 | 592 dest = os.path.basename(os.path.normpath(source)) |
532
2e9698a5c92c
clone: abort on pre-existing destination directory
mpm@selenic.com
parents:
528
diff
changeset
|
593 |
2e9698a5c92c
clone: abort on pre-existing destination directory
mpm@selenic.com
parents:
528
diff
changeset
|
594 if os.path.exists(dest): |
1233 | 595 raise util.Abort("destination '%s' already exists", dest) |
523
003df62ae39f
[PATCH] Force "hg clone" to always create a new directory
mpm@selenic.com
parents:
522
diff
changeset
|
596 |
891
a9b843b114f9
Fix clone when target directory is relative.
Bryan O'Sullivan <bos@serpentine.com>
parents:
886
diff
changeset
|
597 dest = os.path.realpath(dest) |
a9b843b114f9
Fix clone when target directory is relative.
Bryan O'Sullivan <bos@serpentine.com>
parents:
886
diff
changeset
|
598 |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
599 class Dircleanup: |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
600 def __init__(self, dir_): |
625 | 601 self.rmtree = shutil.rmtree |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
602 self.dir_ = dir_ |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
603 os.mkdir(dir_) |
535
fba26990604a
Deal with failed clone/transaction interaction
mpm@selenic.com
parents:
534
diff
changeset
|
604 def close(self): |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
605 self.dir_ = None |
535
fba26990604a
Deal with failed clone/transaction interaction
mpm@selenic.com
parents:
534
diff
changeset
|
606 def __del__(self): |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
607 if self.dir_: |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
608 self.rmtree(self.dir_, True) |
485 | 609 |
963
84355e3e4493
Add -e and --remotecmd for clone and pull too
mpm@selenic.com
parents:
961
diff
changeset
|
610 if opts['ssh']: |
84355e3e4493
Add -e and --remotecmd for clone and pull too
mpm@selenic.com
parents:
961
diff
changeset
|
611 ui.setconfig("ui", "ssh", opts['ssh']) |
84355e3e4493
Add -e and --remotecmd for clone and pull too
mpm@selenic.com
parents:
961
diff
changeset
|
612 if opts['remotecmd']: |
84355e3e4493
Add -e and --remotecmd for clone and pull too
mpm@selenic.com
parents:
961
diff
changeset
|
613 ui.setconfig("ui", "remotecmd", opts['remotecmd']) |
84355e3e4493
Add -e and --remotecmd for clone and pull too
mpm@selenic.com
parents:
961
diff
changeset
|
614 |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
615 d = Dircleanup(dest) |
1221
89f899caecb5
clone: directory names take precedence over symbolic names
TK Soh <teekaysoh@yahoo.com>
parents:
1220
diff
changeset
|
616 if not os.path.exists(source): |
89f899caecb5
clone: directory names take precedence over symbolic names
TK Soh <teekaysoh@yahoo.com>
parents:
1220
diff
changeset
|
617 source = ui.expandpath(source) |
562
be6233a2bfdd
hg clone: only use the absolute path for .hg/hgrc
mpm@selenic.com
parents:
561
diff
changeset
|
618 abspath = source |
634
da5378d39269
Add a repo method to report repo device
Matt Mackall <mpm@selenic.com>
parents:
632
diff
changeset
|
619 other = hg.repository(ui, source) |
485 | 620 |
675
49de76abc4da
hg clone stored path fix
Mikael Berthe <mikael@lilotux.net>
parents:
674
diff
changeset
|
621 if other.dev() != -1: |
49de76abc4da
hg clone stored path fix
Mikael Berthe <mikael@lilotux.net>
parents:
674
diff
changeset
|
622 abspath = os.path.abspath(source) |
1208 | 623 |
1209 | 624 # we use a lock here because if we race with commit, we can |
625 # end up with extra data in the cloned revlogs that's not | |
626 # pointed to by changesets, thus causing verify to fail | |
627 l1 = lock.lock(os.path.join(source, ".hg", "lock")) | |
917 | 628 |
1209 | 629 # and here to avoid premature writing to the target |
1208 | 630 os.mkdir(os.path.join(dest, ".hg")) |
1209 | 631 l2 = lock.lock(os.path.join(dest, ".hg", "lock")) |
1114
58371c4c2c8f
Remove the lock file copied during clone (was the source lock file)
Stephen Darnell
parents:
1113
diff
changeset
|
632 |
1208 | 633 files = "data 00manifest.d 00manifest.i 00changelog.d 00changelog.i" |
634 for f in files.split(): | |
635 src = os.path.join(source, ".hg", f) | |
636 dst = os.path.join(dest, ".hg", f) | |
1241
3b4f05ff3130
Add support for cloning with hardlinks on windows.
Stephen Darnell
parents:
1238
diff
changeset
|
637 util.copyfiles(src, dst) |
535
fba26990604a
Deal with failed clone/transaction interaction
mpm@selenic.com
parents:
534
diff
changeset
|
638 |
fba26990604a
Deal with failed clone/transaction interaction
mpm@selenic.com
parents:
534
diff
changeset
|
639 repo = hg.repository(ui, dest) |
485 | 640 |
535
fba26990604a
Deal with failed clone/transaction interaction
mpm@selenic.com
parents:
534
diff
changeset
|
641 else: |
fba26990604a
Deal with failed clone/transaction interaction
mpm@selenic.com
parents:
534
diff
changeset
|
642 repo = hg.repository(ui, dest, create=1) |
625 | 643 repo.pull(other) |
503
c6a2e41c8c60
Fix troubles with clone and exception handling
mpm@selenic.com
parents:
500
diff
changeset
|
644 |
1206 | 645 f = repo.opener("hgrc", "w") |
646 f.write("[paths]\n") | |
647 f.write("default = %s\n" % abspath) | |
515 | 648 |
535
fba26990604a
Deal with failed clone/transaction interaction
mpm@selenic.com
parents:
534
diff
changeset
|
649 if not opts['noupdate']: |
fba26990604a
Deal with failed clone/transaction interaction
mpm@selenic.com
parents:
534
diff
changeset
|
650 update(ui, repo) |
fba26990604a
Deal with failed clone/transaction interaction
mpm@selenic.com
parents:
534
diff
changeset
|
651 |
fba26990604a
Deal with failed clone/transaction interaction
mpm@selenic.com
parents:
534
diff
changeset
|
652 d.close() |
515 | 653 |
813
80fd2958235a
Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
812
diff
changeset
|
654 def commit(ui, repo, *pats, **opts): |
245 | 655 """commit the specified files or all outstanding changes""" |
763
84f9ac74cc30
Added deprecation warnings if -t or --text is used for commits.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
762
diff
changeset
|
656 if opts['text']: |
84f9ac74cc30
Added deprecation warnings if -t or --text is used for commits.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
762
diff
changeset
|
657 ui.warn("Warning: -t and --text is deprecated," |
84f9ac74cc30
Added deprecation warnings if -t or --text is used for commits.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
762
diff
changeset
|
658 " please use -m or --message instead.\n") |
762
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
659 message = opts['message'] or opts['text'] |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
660 logfile = opts['logfile'] |
762
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
661 if not message and logfile: |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
662 try: |
899
aa5b726e9619
Add '-' support to the commit logfile option to read message from stdin.
mark.williamson@cl.cam.ac.uk
parents:
898
diff
changeset
|
663 if logfile == '-': |
aa5b726e9619
Add '-' support to the commit logfile option to read message from stdin.
mark.williamson@cl.cam.ac.uk
parents:
898
diff
changeset
|
664 message = sys.stdin.read() |
aa5b726e9619
Add '-' support to the commit logfile option to read message from stdin.
mark.williamson@cl.cam.ac.uk
parents:
898
diff
changeset
|
665 else: |
aa5b726e9619
Add '-' support to the commit logfile option to read message from stdin.
mark.williamson@cl.cam.ac.uk
parents:
898
diff
changeset
|
666 message = open(logfile).read() |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
667 except IOError, why: |
762
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
668 ui.warn("Can't read commit message %s: %s\n" % (logfile, why)) |
289 | 669 |
354 | 670 if opts['addremove']: |
813
80fd2958235a
Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
812
diff
changeset
|
671 addremove(ui, repo, *pats, **opts) |
80fd2958235a
Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
812
diff
changeset
|
672 cwd = repo.getcwd() |
80fd2958235a
Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
812
diff
changeset
|
673 if not pats and cwd: |
80fd2958235a
Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
812
diff
changeset
|
674 opts['include'] = [os.path.join(cwd, i) for i in opts['include']] |
80fd2958235a
Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
812
diff
changeset
|
675 opts['exclude'] = [os.path.join(cwd, x) for x in opts['exclude']] |
1031
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
676 fns, match, anypats = matchpats(repo, (pats and repo.getcwd()) or '', |
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
677 pats, opts) |
813
80fd2958235a
Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
812
diff
changeset
|
678 if pats: |
1062 | 679 c, a, d, u = repo.changes(files=fns, match=match) |
813
80fd2958235a
Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
812
diff
changeset
|
680 files = c + a + [fn for fn in d if repo.dirstate.state(fn) == 'r'] |
80fd2958235a
Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
812
diff
changeset
|
681 else: |
80fd2958235a
Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
812
diff
changeset
|
682 files = [] |
1202
71111d796e40
Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1194
diff
changeset
|
683 try: |
71111d796e40
Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1194
diff
changeset
|
684 repo.commit(files, message, opts['user'], opts['date'], match) |
71111d796e40
Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1194
diff
changeset
|
685 except ValueError, inst: |
71111d796e40
Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1194
diff
changeset
|
686 raise util.Abort(str(inst)) |
245 | 687 |
363 | 688 def copy(ui, repo, source, dest): |
689 """mark a file as copied or renamed for the next commit""" | |
690 return repo.copy(*relpath(repo, (source, dest))) | |
691 | |
596 | 692 def debugcheckstate(ui, repo): |
693 """validate the correctness of the current dirstate""" | |
460 | 694 parent1, parent2 = repo.dirstate.parents() |
555 | 695 repo.dirstate.read() |
696 dc = repo.dirstate.map | |
460 | 697 keys = dc.keys() |
698 keys.sort() | |
699 m1n = repo.changelog.read(parent1)[0] | |
700 m2n = repo.changelog.read(parent2)[0] | |
701 m1 = repo.manifest.read(m1n) | |
702 m2 = repo.manifest.read(m2n) | |
703 errors = 0 | |
704 for f in dc: | |
705 state = repo.dirstate.state(f) | |
706 if state in "nr" and f not in m1: | |
582 | 707 ui.warn("%s in state %s, but not in manifest1\n" % (f, state)) |
460 | 708 errors += 1 |
709 if state in "a" and f in m1: | |
582 | 710 ui.warn("%s in state %s, but also in manifest1\n" % (f, state)) |
460 | 711 errors += 1 |
712 if state in "m" and f not in m1 and f not in m2: | |
582 | 713 ui.warn("%s in state %s, but not in either manifest\n" % |
714 (f, state)) | |
460 | 715 errors += 1 |
716 for f in m1: | |
717 state = repo.dirstate.state(f) | |
718 if state not in "nrm": | |
582 | 719 ui.warn("%s in manifest1, but listed as state %s" % (f, state)) |
460 | 720 errors += 1 |
721 if errors: | |
870
a82eae840447
Teach walk code about absolute paths.
Bryan O'Sullivan <bos@serpentine.com>
parents:
868
diff
changeset
|
722 raise util.Abort(".hg/dirstate inconsistent with current parent's manifest") |
460 | 723 |
1028
25e7ea0f2cff
Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents:
989
diff
changeset
|
724 def debugconfig(ui): |
1053
1539ca091d86
Added missing doc strings for two new debug commmands.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1052
diff
changeset
|
725 """show combined config settings from all hgrc files""" |
1028
25e7ea0f2cff
Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents:
989
diff
changeset
|
726 try: |
25e7ea0f2cff
Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents:
989
diff
changeset
|
727 repo = hg.repository(ui) |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
728 except hg.RepoError: |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
729 pass |
1028
25e7ea0f2cff
Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents:
989
diff
changeset
|
730 for section, name, value in ui.walkconfig(): |
25e7ea0f2cff
Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents:
989
diff
changeset
|
731 ui.write('%s.%s=%s\n' % (section, name, value)) |
25e7ea0f2cff
Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents:
989
diff
changeset
|
732 |
596 | 733 def debugstate(ui, repo): |
734 """show the contents of the current dirstate""" | |
555 | 735 repo.dirstate.read() |
736 dc = repo.dirstate.map | |
460 | 737 keys = dc.keys() |
738 keys.sort() | |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
739 for file_ in keys: |
791
040655ea0cc4
Show all dirstate info for 'hg debugstate'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
770
diff
changeset
|
740 ui.write("%c %3o %10d %s %s\n" |
040655ea0cc4
Show all dirstate info for 'hg debugstate'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
770
diff
changeset
|
741 % (dc[file_][0], dc[file_][1] & 0777, dc[file_][2], |
040655ea0cc4
Show all dirstate info for 'hg debugstate'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
770
diff
changeset
|
742 time.strftime("%x %X", |
040655ea0cc4
Show all dirstate info for 'hg debugstate'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
770
diff
changeset
|
743 time.localtime(dc[file_][3])), file_)) |
1116 | 744 for f in repo.dirstate.copies: |
1126
624a3a4fa232
Changed printing of copies in hg debugstate to: "copy: source -> dest"
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1116
diff
changeset
|
745 ui.write("copy: %s -> %s\n" % (repo.dirstate.copies[f], f)) |
460 | 746 |
1039
4296754ba7b4
Add debugdata for dumping revlog revision data
mpm@selenic.com
parents:
1037
diff
changeset
|
747 def debugdata(ui, file_, rev): |
4296754ba7b4
Add debugdata for dumping revlog revision data
mpm@selenic.com
parents:
1037
diff
changeset
|
748 """dump the contents of an data file revision""" |
1093
1f1661c58283
commands: use revlog directly for debug commands
mpm@selenic.com
parents:
1092
diff
changeset
|
749 r = revlog.revlog(file, file_[:-2] + ".i", file_) |
1039
4296754ba7b4
Add debugdata for dumping revlog revision data
mpm@selenic.com
parents:
1037
diff
changeset
|
750 ui.write(r.revision(r.lookup(rev))) |
4296754ba7b4
Add debugdata for dumping revlog revision data
mpm@selenic.com
parents:
1037
diff
changeset
|
751 |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
752 def debugindex(ui, file_): |
596 | 753 """dump the contents of an index file""" |
1093
1f1661c58283
commands: use revlog directly for debug commands
mpm@selenic.com
parents:
1092
diff
changeset
|
754 r = revlog.revlog(file, file_, "") |
582 | 755 ui.write(" rev offset length base linkrev" + |
989 | 756 " nodeid p1 p2\n") |
248 | 757 for i in range(r.count()): |
758 e = r.index[i] | |
989 | 759 ui.write("% 6d % 9d % 7d % 6d % 7d %s %s %s\n" % ( |
582 | 760 i, e[0], e[1], e[2], e[3], |
1092 | 761 short(e[6]), short(e[4]), short(e[5]))) |
248 | 762 |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
763 def debugindexdot(ui, file_): |
596 | 764 """dump an index DAG as a .dot file""" |
1093
1f1661c58283
commands: use revlog directly for debug commands
mpm@selenic.com
parents:
1092
diff
changeset
|
765 r = revlog.revlog(file, file_, "") |
582 | 766 ui.write("digraph G {\n") |
248 | 767 for i in range(r.count()): |
768 e = r.index[i] | |
582 | 769 ui.write("\t%d -> %d\n" % (r.rev(e[4]), i)) |
1092 | 770 if e[5] != nullid: |
582 | 771 ui.write("\t%d -> %d\n" % (r.rev(e[5]), i)) |
772 ui.write("}\n") | |
248 | 773 |
1116 | 774 def debugrename(ui, repo, file, rev=None): |
1194
c165cbf56bb1
Add doc string for debugrename.
bos@serpentine.internal.keyresearch.com
parents:
1193
diff
changeset
|
775 """dump rename information""" |
1116 | 776 r = repo.file(relpath(repo, [file])[0]) |
777 if rev: | |
778 try: | |
779 # assume all revision numbers are for changesets | |
780 n = repo.lookup(rev) | |
781 change = repo.changelog.read(n) | |
782 m = repo.manifest.read(change[0]) | |
783 n = m[relpath(repo, [file])[0]] | |
784 except hg.RepoError, KeyError: | |
785 n = r.lookup(rev) | |
786 else: | |
787 n = r.tip() | |
788 m = r.renamed(n) | |
789 if m: | |
790 ui.write("renamed from %s:%s\n" % (m[0], hex(m[1]))) | |
791 else: | |
792 ui.write("not renamed\n") | |
793 | |
820
89985a1b3427
Clean up walk and changes code to use normalised names properly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
815
diff
changeset
|
794 def debugwalk(ui, repo, *pats, **opts): |
1053
1539ca091d86
Added missing doc strings for two new debug commmands.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1052
diff
changeset
|
795 """show how files match on given patterns""" |
820
89985a1b3427
Clean up walk and changes code to use normalised names properly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
815
diff
changeset
|
796 items = list(walk(repo, pats, opts)) |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
797 if not items: |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
798 return |
1058
402279974aea
Use ui.write instead of print in debugwalk.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1057
diff
changeset
|
799 fmt = '%%s %%-%ds %%-%ds %%s\n' % ( |
942
7eb8cbcca7c4
Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents:
940
diff
changeset
|
800 max([len(abs) for (src, abs, rel, exact) in items]), |
7eb8cbcca7c4
Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents:
940
diff
changeset
|
801 max([len(rel) for (src, abs, rel, exact) in items])) |
7eb8cbcca7c4
Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents:
940
diff
changeset
|
802 for src, abs, rel, exact in items: |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
803 ui.write(fmt % (src, abs, rel, exact and 'exact' or '')) |
820
89985a1b3427
Clean up walk and changes code to use normalised names properly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
815
diff
changeset
|
804 |
732
ba0b6d17a6de
Convert diff command over to using walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
731
diff
changeset
|
805 def diff(ui, repo, *pats, **opts): |
255 | 806 """diff working directory (or selected files)""" |
1015
22571b8d35d3
Add automatic binary file detection to diff and export
mpm@selenic.com
parents:
1014
diff
changeset
|
807 node1, node2 = None, None |
22571b8d35d3
Add automatic binary file detection to diff and export
mpm@selenic.com
parents:
1014
diff
changeset
|
808 revs = [repo.lookup(x) for x in opts['rev']] |
396
8f8bb77d560e
Show revisions in diffs like CVS, based on a patch from Goffredo Baroncelli.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
395
diff
changeset
|
809 |
1014 | 810 if len(revs) > 0: |
811 node1 = revs[0] | |
812 if len(revs) > 1: | |
813 node2 = revs[1] | |
245 | 814 if len(revs) > 2: |
870
a82eae840447
Teach walk code about absolute paths.
Bryan O'Sullivan <bos@serpentine.com>
parents:
868
diff
changeset
|
815 raise util.Abort("too many revisions to diff") |
245 | 816 |
732
ba0b6d17a6de
Convert diff command over to using walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
731
diff
changeset
|
817 files = [] |
879 | 818 match = util.always |
819 if pats: | |
820 roots, match, results = makewalk(repo, pats, opts) | |
942
7eb8cbcca7c4
Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents:
940
diff
changeset
|
821 for src, abs, rel, exact in results: |
879 | 822 files.append(abs) |
1014 | 823 |
1015
22571b8d35d3
Add automatic binary file detection to diff and export
mpm@selenic.com
parents:
1014
diff
changeset
|
824 dodiff(sys.stdout, ui, repo, node1, node2, files, match=match, |
22571b8d35d3
Add automatic binary file detection to diff and export
mpm@selenic.com
parents:
1014
diff
changeset
|
825 text=opts['text']) |
245 | 826 |
580 | 827 def doexport(ui, repo, changeset, seqno, total, revwidth, opts): |
246
96cde50a746f
Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents:
245
diff
changeset
|
828 node = repo.lookup(changeset) |
96cde50a746f
Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents:
245
diff
changeset
|
829 prev, other = repo.changelog.parents(node) |
96cde50a746f
Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents:
245
diff
changeset
|
830 change = repo.changelog.read(node) |
580 | 831 |
729
626aa658e2a9
Turn make_filename into make_file, which returns a file handle.
Bryan O'Sullivan <bos@serpentine.com>
parents:
727
diff
changeset
|
832 fp = make_file(repo, repo.changelog, opts['output'], |
626aa658e2a9
Turn make_filename into make_file, which returns a file handle.
Bryan O'Sullivan <bos@serpentine.com>
parents:
727
diff
changeset
|
833 node=node, total=total, seqno=seqno, |
626aa658e2a9
Turn make_filename into make_file, which returns a file handle.
Bryan O'Sullivan <bos@serpentine.com>
parents:
727
diff
changeset
|
834 revwidth=revwidth) |
626aa658e2a9
Turn make_filename into make_file, which returns a file handle.
Bryan O'Sullivan <bos@serpentine.com>
parents:
727
diff
changeset
|
835 if fp != sys.stdout: |
755
87e2b094ab86
Show filenames for hg export in verbose mode on a separate lines.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
750
diff
changeset
|
836 ui.note("%s\n" % fp.name) |
580 | 837 |
582 | 838 fp.write("# HG changeset patch\n") |
839 fp.write("# User %s\n" % change[1]) | |
1092 | 840 fp.write("# Node ID %s\n" % hex(node)) |
841 fp.write("# Parent %s\n" % hex(prev)) | |
842 if other != nullid: | |
843 fp.write("# Parent %s\n" % hex(other)) | |
582 | 844 fp.write(change[4].rstrip()) |
845 fp.write("\n\n") | |
580 | 846 |
1015
22571b8d35d3
Add automatic binary file detection to diff and export
mpm@selenic.com
parents:
1014
diff
changeset
|
847 dodiff(fp, ui, repo, prev, node, text=opts['text']) |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
848 if fp != sys.stdout: |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
849 fp.close() |
396
8f8bb77d560e
Show revisions in diffs like CVS, based on a patch from Goffredo Baroncelli.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
395
diff
changeset
|
850 |
580 | 851 def export(ui, repo, *changesets, **opts): |
852 """dump the header and diffs for one or more changesets""" | |
610
4c02464cb9f0
check export options for changeset before running
shaleh@speakeasy.net
parents:
609
diff
changeset
|
853 if not changesets: |
870
a82eae840447
Teach walk code about absolute paths.
Bryan O'Sullivan <bos@serpentine.com>
parents:
868
diff
changeset
|
854 raise util.Abort("export requires at least one changeset") |
580 | 855 seqno = 0 |
856 revs = list(revrange(ui, repo, changesets)) | |
857 total = len(revs) | |
1067
fae1204603dc
Fixed zero-padded filenames with %r if there is a longer number in the middle.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1066
diff
changeset
|
858 revwidth = max(map(len, revs)) |
755
87e2b094ab86
Show filenames for hg export in verbose mode on a separate lines.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
750
diff
changeset
|
859 ui.note(len(revs) > 1 and "Exporting patches:\n" or "Exporting patch:\n") |
580 | 860 for cset in revs: |
861 seqno += 1 | |
862 doexport(ui, repo, cset, seqno, total, revwidth, opts) | |
246
96cde50a746f
Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents:
245
diff
changeset
|
863 |
810
790a0ff306f2
Move commands.forget over to using new walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
809
diff
changeset
|
864 def forget(ui, repo, *pats, **opts): |
245 | 865 """don't add the specified files on the next commit""" |
810
790a0ff306f2
Move commands.forget over to using new walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
809
diff
changeset
|
866 forget = [] |
942
7eb8cbcca7c4
Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents:
940
diff
changeset
|
867 for src, abs, rel, exact in walk(repo, pats, opts): |
810
790a0ff306f2
Move commands.forget over to using new walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
809
diff
changeset
|
868 if repo.dirstate.state(abs) == 'a': |
790a0ff306f2
Move commands.forget over to using new walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
809
diff
changeset
|
869 forget.append(abs) |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
870 if not exact: |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
871 ui.status('forgetting ', rel, '\n') |
810
790a0ff306f2
Move commands.forget over to using new walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
809
diff
changeset
|
872 repo.forget(forget) |
245 | 873 |
1108
7a75d8fbbdaf
Remove some options from 'hg grep':
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1106
diff
changeset
|
874 def grep(ui, repo, pattern, *pats, **opts): |
1060 | 875 """search for a pattern in specified files and revisions""" |
1057 | 876 reflags = 0 |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
877 if opts['ignore_case']: |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
878 reflags |= re.I |
1057 | 879 regexp = re.compile(pattern, reflags) |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
880 sep, eol = ':', '\n' |
1108
7a75d8fbbdaf
Remove some options from 'hg grep':
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1106
diff
changeset
|
881 if opts['print0']: |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
882 sep = eol = '\0' |
1057 | 883 |
884 fcache = {} | |
885 def getfile(fn): | |
886 if fn not in fcache: | |
887 fcache[fn] = repo.file(fn) | |
888 return fcache[fn] | |
889 | |
890 def matchlines(body): | |
1059
4eab07ef66e2
grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents:
1058
diff
changeset
|
891 begin = 0 |
4eab07ef66e2
grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents:
1058
diff
changeset
|
892 linenum = 0 |
4eab07ef66e2
grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents:
1058
diff
changeset
|
893 while True: |
4eab07ef66e2
grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents:
1058
diff
changeset
|
894 match = regexp.search(body, begin) |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
895 if not match: |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
896 break |
1059
4eab07ef66e2
grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents:
1058
diff
changeset
|
897 mstart, mend = match.span() |
4eab07ef66e2
grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents:
1058
diff
changeset
|
898 linenum += body.count('\n', begin, mstart) + 1 |
4eab07ef66e2
grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents:
1058
diff
changeset
|
899 lstart = body.rfind('\n', begin, mstart) + 1 or begin |
4eab07ef66e2
grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents:
1058
diff
changeset
|
900 lend = body.find('\n', mend) |
4eab07ef66e2
grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents:
1058
diff
changeset
|
901 yield linenum, mstart - lstart, mend - lstart, body[lstart:lend] |
4eab07ef66e2
grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents:
1058
diff
changeset
|
902 begin = lend + 1 |
1057 | 903 |
904 class linestate: | |
905 def __init__(self, line, linenum, colstart, colend): | |
906 self.line = line | |
907 self.linenum = linenum | |
908 self.colstart = colstart | |
909 self.colend = colend | |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
910 def __eq__(self, other): |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
911 return self.line == other.line |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
912 def __hash__(self): |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
913 return hash(self.line) |
1057 | 914 |
915 matches = {} | |
916 def grepbody(fn, rev, body): | |
917 matches[rev].setdefault(fn, {}) | |
918 m = matches[rev][fn] | |
919 for lnum, cstart, cend, line in matchlines(body): | |
920 s = linestate(line, lnum, cstart, cend) | |
921 m[s] = s | |
922 | |
923 prev = {} | |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
924 ucache = {} |
1057 | 925 def display(fn, rev, states, prevstates): |
1061 | 926 diff = list(sets.Set(states).symmetric_difference(sets.Set(prevstates))) |
1057 | 927 diff.sort(lambda x, y: cmp(x.linenum, y.linenum)) |
1145
bd917e1a26dd
grep: change default to printing first matching rev.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1116
diff
changeset
|
928 counts = {'-': 0, '+': 0} |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
929 filerevmatches = {} |
1057 | 930 for l in diff: |
1212 | 931 if incrementing or not opts['all']: |
1057 | 932 change = ((l in prevstates) and '-') or '+' |
933 r = rev | |
934 else: | |
935 change = ((l in states) and '-') or '+' | |
936 r = prev[fn] | |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
937 cols = [fn, str(rev)] |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
938 if opts['line_number']: cols.append(str(l.linenum)) |
1212 | 939 if opts['all']: cols.append(change) |
1147 | 940 if opts['user']: cols.append(trimuser(ui, getchange(rev)[1], rev, |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
941 ucache)) |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
942 if opts['files_with_matches']: |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
943 c = (fn, rev) |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
944 if c in filerevmatches: continue |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
945 filerevmatches[c] = 1 |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
946 else: |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
947 cols.append(l.line) |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
948 ui.write(sep.join(cols), eol) |
1145
bd917e1a26dd
grep: change default to printing first matching rev.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1116
diff
changeset
|
949 counts[change] += 1 |
bd917e1a26dd
grep: change default to printing first matching rev.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1116
diff
changeset
|
950 return counts['+'], counts['-'] |
1057 | 951 |
952 fstate = {} | |
1145
bd917e1a26dd
grep: change default to printing first matching rev.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1116
diff
changeset
|
953 skip = {} |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
954 changeiter, getchange = walkchangerevs(ui, repo, repo.getcwd(), pats, opts) |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
955 count = 0 |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
956 for st, rev, fns in changeiter: |
1057 | 957 if st == 'window': |
958 incrementing = rev | |
959 matches.clear() | |
960 elif st == 'add': | |
961 change = repo.changelog.read(repo.lookup(str(rev))) | |
962 mf = repo.manifest.read(change[0]) | |
963 matches[rev] = {} | |
964 for fn in fns: | |
1145
bd917e1a26dd
grep: change default to printing first matching rev.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1116
diff
changeset
|
965 if fn in skip: continue |
1057 | 966 fstate.setdefault(fn, {}) |
967 try: | |
968 grepbody(fn, rev, getfile(fn).read(mf[fn])) | |
969 except KeyError: | |
970 pass | |
971 elif st == 'iter': | |
972 states = matches[rev].items() | |
973 states.sort() | |
974 for fn, m in states: | |
1145
bd917e1a26dd
grep: change default to printing first matching rev.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1116
diff
changeset
|
975 if fn in skip: continue |
1212 | 976 if incrementing or not opts['all'] or fstate[fn]: |
1145
bd917e1a26dd
grep: change default to printing first matching rev.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1116
diff
changeset
|
977 pos, neg = display(fn, rev, m, fstate[fn]) |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
978 count += pos + neg |
1212 | 979 if pos and not opts['all']: |
1145
bd917e1a26dd
grep: change default to printing first matching rev.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1116
diff
changeset
|
980 skip[fn] = True |
1057 | 981 fstate[fn] = m |
982 prev[fn] = rev | |
983 | |
984 if not incrementing: | |
985 fstate = fstate.items() | |
986 fstate.sort() | |
987 for fn, state in fstate: | |
1145
bd917e1a26dd
grep: change default to printing first matching rev.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1116
diff
changeset
|
988 if fn in skip: continue |
1057 | 989 display(fn, rev, {}, state) |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
990 return (count == 0 and 1) or 0 |
1057 | 991 |
898 | 992 def heads(ui, repo, **opts): |
329
67c19ad374a9
Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
320
diff
changeset
|
993 """show current repository heads""" |
898 | 994 heads = repo.changelog.heads() |
995 br = None | |
996 if opts['branches']: | |
997 br = repo.branchlookup(heads) | |
221 | 998 for n in repo.changelog.heads(): |
898 | 999 show_changeset(ui, repo, changenode=n, brinfo=br) |
221 | 1000 |
339
a76fc9c4b67b
added hg identify|id (based on a patch from Andrew Thompson)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
338
diff
changeset
|
1001 def identify(ui, repo): |
a76fc9c4b67b
added hg identify|id (based on a patch from Andrew Thompson)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
338
diff
changeset
|
1002 """print information about the working copy""" |
1092 | 1003 parents = [p for p in repo.dirstate.parents() if p != nullid] |
340
97a897d32dfc
Handle the case where the current working copy is not based on a checkout.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
339
diff
changeset
|
1004 if not parents: |
343 | 1005 ui.write("unknown\n") |
340
97a897d32dfc
Handle the case where the current working copy is not based on a checkout.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
339
diff
changeset
|
1006 return |
97a897d32dfc
Handle the case where the current working copy is not based on a checkout.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
339
diff
changeset
|
1007 |
1092 | 1008 hexfunc = ui.verbose and hex or short |
723 | 1009 (c, a, d, u) = repo.changes() |
386
494c8e3f47f3
Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
371
diff
changeset
|
1010 output = ["%s%s" % ('+'.join([hexfunc(parent) for parent in parents]), |
494c8e3f47f3
Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
371
diff
changeset
|
1011 (c or a or d) and "+" or "")] |
494c8e3f47f3
Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
371
diff
changeset
|
1012 |
339
a76fc9c4b67b
added hg identify|id (based on a patch from Andrew Thompson)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
338
diff
changeset
|
1013 if not ui.quiet: |
386
494c8e3f47f3
Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
371
diff
changeset
|
1014 # multiple tags for a single parent separated by '/' |
494c8e3f47f3
Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
371
diff
changeset
|
1015 parenttags = ['/'.join(tags) |
494c8e3f47f3
Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
371
diff
changeset
|
1016 for tags in map(repo.nodetags, parents) if tags] |
494c8e3f47f3
Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
371
diff
changeset
|
1017 # tags for multiple parents separated by ' + ' |
758
c5db9581bfa6
There was an extra space after 'hg id' when there are no tags.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
757
diff
changeset
|
1018 if parenttags: |
c5db9581bfa6
There was an extra space after 'hg id' when there are no tags.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
757
diff
changeset
|
1019 output.append(' + '.join(parenttags)) |
339
a76fc9c4b67b
added hg identify|id (based on a patch from Andrew Thompson)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
338
diff
changeset
|
1020 |
386
494c8e3f47f3
Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
371
diff
changeset
|
1021 ui.write("%s\n" % ' '.join(output)) |
339
a76fc9c4b67b
added hg identify|id (based on a patch from Andrew Thompson)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
338
diff
changeset
|
1022 |
437 | 1023 def import_(ui, repo, patch1, *patches, **opts): |
1024 """import an ordered set of patches""" | |
1025 patches = (patch1,) + patches | |
500
ebc4714a7632
[PATCH] Clean up destination directory if a clone fails.
mpm@selenic.com
parents:
499
diff
changeset
|
1026 |
966
022bcc738389
hg import: abort with uncommitted changes, override with --force
mpm@selenic.com
parents:
965
diff
changeset
|
1027 if not opts['force']: |
022bcc738389
hg import: abort with uncommitted changes, override with --force
mpm@selenic.com
parents:
965
diff
changeset
|
1028 (c, a, d, u) = repo.changes() |
022bcc738389
hg import: abort with uncommitted changes, override with --force
mpm@selenic.com
parents:
965
diff
changeset
|
1029 if c or a or d: |
1227
e3ea354d99b2
Replace sequences of {ui.warn, return 1} with raise of util.Abort.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1225
diff
changeset
|
1030 raise util.Abort("outstanding uncommitted changes") |
966
022bcc738389
hg import: abort with uncommitted changes, override with --force
mpm@selenic.com
parents:
965
diff
changeset
|
1031 |
437 | 1032 d = opts["base"] |
1033 strip = opts["strip"] | |
1034 | |
1193
04d1ca8ae9ec
Fortify the recognition of a diff header.
bos@serpentine.internal.keyresearch.com
parents:
1192
diff
changeset
|
1035 mailre = re.compile(r'(?:From |[\w-]+:)') |
04d1ca8ae9ec
Fortify the recognition of a diff header.
bos@serpentine.internal.keyresearch.com
parents:
1192
diff
changeset
|
1036 diffre = re.compile(r'(?:diff -|--- .*\s+\w+ \w+ +\d+ \d+:\d+:\d+ \d+)') |
1190
737f9b90c571
Make import command reject patches that resemble email messages.
bos@serpentine.internal.keyresearch.com
parents:
1189
diff
changeset
|
1037 |
437 | 1038 for patch in patches: |
1039 ui.status("applying %s\n" % patch) | |
1040 pf = os.path.join(d, patch) | |
1041 | |
762
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1042 message = [] |
701
80ed193efff7
On importing the result of 'hg export', parse while reading and drop headers.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
700
diff
changeset
|
1043 user = None |
80ed193efff7
On importing the result of 'hg export', parse while reading and drop headers.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
700
diff
changeset
|
1044 hgpatch = False |
80ed193efff7
On importing the result of 'hg export', parse while reading and drop headers.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
700
diff
changeset
|
1045 for line in file(pf): |
80ed193efff7
On importing the result of 'hg export', parse while reading and drop headers.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
700
diff
changeset
|
1046 line = line.rstrip() |
1220 | 1047 if (not message and not hgpatch and |
1048 mailre.match(line) and not opts['force']): | |
1190
737f9b90c571
Make import command reject patches that resemble email messages.
bos@serpentine.internal.keyresearch.com
parents:
1189
diff
changeset
|
1049 if len(line) > 35: line = line[:32] + '...' |
737f9b90c571
Make import command reject patches that resemble email messages.
bos@serpentine.internal.keyresearch.com
parents:
1189
diff
changeset
|
1050 raise util.Abort('first line looks like a ' |
737f9b90c571
Make import command reject patches that resemble email messages.
bos@serpentine.internal.keyresearch.com
parents:
1189
diff
changeset
|
1051 'mail header: ' + line) |
1193
04d1ca8ae9ec
Fortify the recognition of a diff header.
bos@serpentine.internal.keyresearch.com
parents:
1192
diff
changeset
|
1052 if diffre.match(line): |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1053 break |
701
80ed193efff7
On importing the result of 'hg export', parse while reading and drop headers.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
700
diff
changeset
|
1054 elif hgpatch: |
80ed193efff7
On importing the result of 'hg export', parse while reading and drop headers.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
700
diff
changeset
|
1055 # parse values when importing the result of an hg export |
80ed193efff7
On importing the result of 'hg export', parse while reading and drop headers.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
700
diff
changeset
|
1056 if line.startswith("# User "): |
80ed193efff7
On importing the result of 'hg export', parse while reading and drop headers.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
700
diff
changeset
|
1057 user = line[7:] |
80ed193efff7
On importing the result of 'hg export', parse while reading and drop headers.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
700
diff
changeset
|
1058 ui.debug('User: %s\n' % user) |
80ed193efff7
On importing the result of 'hg export', parse while reading and drop headers.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
700
diff
changeset
|
1059 elif not line.startswith("# ") and line: |
762
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1060 message.append(line) |
701
80ed193efff7
On importing the result of 'hg export', parse while reading and drop headers.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
700
diff
changeset
|
1061 hgpatch = False |
80ed193efff7
On importing the result of 'hg export', parse while reading and drop headers.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
700
diff
changeset
|
1062 elif line == '# HG changeset patch': |
607
94744f6fe0e7
[PATCH] Parse and use header data from an hg export'ed changeset
mpm@selenic.com
parents:
605
diff
changeset
|
1063 hgpatch = True |
852
1df0983eb589
Allow HG patch to appear late in the input stream
Samuel Tardieu <sam@rfc1149.net>
parents:
849
diff
changeset
|
1064 message = [] # We may have collected garbage |
701
80ed193efff7
On importing the result of 'hg export', parse while reading and drop headers.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
700
diff
changeset
|
1065 else: |
762
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1066 message.append(line) |
607
94744f6fe0e7
[PATCH] Parse and use header data from an hg export'ed changeset
mpm@selenic.com
parents:
605
diff
changeset
|
1067 |
762
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1068 # make sure message isn't empty |
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1069 if not message: |
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1070 message = "imported patch %s\n" % patch |
701
80ed193efff7
On importing the result of 'hg export', parse while reading and drop headers.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
700
diff
changeset
|
1071 else: |
762
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1072 message = "%s\n" % '\n'.join(message) |
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1073 ui.debug('message:\n%s\n' % message) |
437 | 1074 |
826
16700cdd9055
Allow import from files with spaces
Kyle Moffett <mrmacman_g4@mac.com>
parents:
825
diff
changeset
|
1075 f = os.popen("patch -p%d < '%s'" % (strip, pf)) |
437 | 1076 files = [] |
1077 for l in f.read().splitlines(): | |
1078 l.rstrip('\r\n'); | |
481
2705d20f77c9
hg import checking for quiet mode didn't work. Fixed using the ui module.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
480
diff
changeset
|
1079 ui.status("%s\n" % l) |
674
6513ba7d858a
Make consistent use of str.startswith() in conditionals.
chad.netzer@gmail.com
parents:
668
diff
changeset
|
1080 if l.startswith('patching file '): |
443 | 1081 pf = l[14:] |
1082 if pf not in files: | |
1083 files.append(pf) | |
1084 patcherr = f.close() | |
1085 if patcherr: | |
870
a82eae840447
Teach walk code about absolute paths.
Bryan O'Sullivan <bos@serpentine.com>
parents:
868
diff
changeset
|
1086 raise util.Abort("patch failed") |
437 | 1087 |
1088 if len(files) > 0: | |
1089 addremove(ui, repo, *files) | |
762
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1090 repo.commit(files, message, user) |
437 | 1091 |
1192
6e165de907c5
Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents:
1191
diff
changeset
|
1092 def incoming(ui, repo, source="default", **opts): |
928
6f2c3bcbfaaf
hg incoming/outgoing: fix tests and update man page
mpm@selenic.com
parents:
927
diff
changeset
|
1093 """show new changesets found in source""" |
927
5a830d7bea52
Add hg incoming command for local repositories
mpm@selenic.com
parents:
924
diff
changeset
|
1094 source = ui.expandpath(source) |
5a830d7bea52
Add hg incoming command for local repositories
mpm@selenic.com
parents:
924
diff
changeset
|
1095 other = hg.repository(ui, source) |
5a830d7bea52
Add hg incoming command for local repositories
mpm@selenic.com
parents:
924
diff
changeset
|
1096 if not other.local(): |
1227
e3ea354d99b2
Replace sequences of {ui.warn, return 1} with raise of util.Abort.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1225
diff
changeset
|
1097 raise util.Abort("incoming doesn't work for remote repositories yet") |
927
5a830d7bea52
Add hg incoming command for local repositories
mpm@selenic.com
parents:
924
diff
changeset
|
1098 o = repo.findincoming(other) |
931 | 1099 if not o: |
1100 return | |
927
5a830d7bea52
Add hg incoming command for local repositories
mpm@selenic.com
parents:
924
diff
changeset
|
1101 o = other.newer(o) |
5a830d7bea52
Add hg incoming command for local repositories
mpm@selenic.com
parents:
924
diff
changeset
|
1102 o.reverse() |
5a830d7bea52
Add hg incoming command for local repositories
mpm@selenic.com
parents:
924
diff
changeset
|
1103 for n in o: |
5a830d7bea52
Add hg incoming command for local repositories
mpm@selenic.com
parents:
924
diff
changeset
|
1104 show_changeset(ui, other, changenode=n) |
1192
6e165de907c5
Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents:
1191
diff
changeset
|
1105 if opts['patch']: |
6e165de907c5
Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents:
1191
diff
changeset
|
1106 prev = other.changelog.parents(n)[0] |
6e165de907c5
Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents:
1191
diff
changeset
|
1107 dodiff(ui, ui, other, prev, n) |
6e165de907c5
Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents:
1191
diff
changeset
|
1108 ui.write("\n") |
927
5a830d7bea52
Add hg incoming command for local repositories
mpm@selenic.com
parents:
924
diff
changeset
|
1109 |
907
652507dc9fce
Modify init command to take an optional directory to set up.
Bryan O'Sullivan <bos@serpentine.com>
parents:
906
diff
changeset
|
1110 def init(ui, dest="."): |
652507dc9fce
Modify init command to take an optional directory to set up.
Bryan O'Sullivan <bos@serpentine.com>
parents:
906
diff
changeset
|
1111 """create a new repository in the given directory""" |
652507dc9fce
Modify init command to take an optional directory to set up.
Bryan O'Sullivan <bos@serpentine.com>
parents:
906
diff
changeset
|
1112 if not os.path.exists(dest): |
652507dc9fce
Modify init command to take an optional directory to set up.
Bryan O'Sullivan <bos@serpentine.com>
parents:
906
diff
changeset
|
1113 os.mkdir(dest) |
652507dc9fce
Modify init command to take an optional directory to set up.
Bryan O'Sullivan <bos@serpentine.com>
parents:
906
diff
changeset
|
1114 hg.repository(ui, dest, create=1) |
338 | 1115 |
627 | 1116 def locate(ui, repo, *pats, **opts): |
1117 """locate files matching specific patterns""" | |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
1118 end = opts['print0'] and '\0' or '\n' |
742 | 1119 |
942
7eb8cbcca7c4
Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents:
940
diff
changeset
|
1120 for src, abs, rel, exact in walk(repo, pats, opts, '(?:.*/|)'): |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
1121 if repo.dirstate.state(abs) == '?': |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
1122 continue |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1123 if opts['fullpath']: |
724
1c0c413cccdd
Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
723
diff
changeset
|
1124 ui.write(os.path.join(repo.root, abs), end) |
1c0c413cccdd
Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
723
diff
changeset
|
1125 else: |
1c0c413cccdd
Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
723
diff
changeset
|
1126 ui.write(rel, end) |
627 | 1127 |
1031
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
1128 def log(ui, repo, *pats, **opts): |
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
1129 """show revision history of entire repository or files""" |
1057 | 1130 class dui: |
1131 # Implement and delegate some ui protocol. Save hunks of | |
1132 # output for later display in the desired order. | |
1133 def __init__(self, ui): | |
1134 self.ui = ui | |
1135 self.hunk = {} | |
1136 def bump(self, rev): | |
1137 self.rev = rev | |
1138 self.hunk[rev] = [] | |
1139 def note(self, *args): | |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
1140 if self.verbose: |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
1141 self.write(*args) |
1057 | 1142 def status(self, *args): |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
1143 if not self.quiet: |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
1144 self.write(*args) |
1057 | 1145 def write(self, *args): |
1146 self.hunk[self.rev].append(args) | |
1147 def __getattr__(self, key): | |
1148 return getattr(self.ui, key) | |
1037
c0a1abf562eb
Fix a small corner of log behaviour.
bos@serpentine.internal.keyresearch.com
parents:
1034
diff
changeset
|
1149 cwd = repo.getcwd() |
c0a1abf562eb
Fix a small corner of log behaviour.
bos@serpentine.internal.keyresearch.com
parents:
1034
diff
changeset
|
1150 if not pats and cwd: |
c0a1abf562eb
Fix a small corner of log behaviour.
bos@serpentine.internal.keyresearch.com
parents:
1034
diff
changeset
|
1151 opts['include'] = [os.path.join(cwd, i) for i in opts['include']] |
c0a1abf562eb
Fix a small corner of log behaviour.
bos@serpentine.internal.keyresearch.com
parents:
1034
diff
changeset
|
1152 opts['exclude'] = [os.path.join(cwd, x) for x in opts['exclude']] |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
1153 changeiter, getchange = walkchangerevs(ui, repo, (pats and cwd) or '', |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
1154 pats, opts) |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
1155 for st, rev, fns in changeiter: |
1057 | 1156 if st == 'window': |
1031
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
1157 du = dui(ui) |
1057 | 1158 elif st == 'add': |
1159 du.bump(rev) | |
1238
6a4f181497c9
Add log -b to show the branch a specific revision lives in
mason@suse.com
parents:
1233
diff
changeset
|
1160 br = None |
6a4f181497c9
Add log -b to show the branch a specific revision lives in
mason@suse.com
parents:
1233
diff
changeset
|
1161 if opts['branch']: |
6a4f181497c9
Add log -b to show the branch a specific revision lives in
mason@suse.com
parents:
1233
diff
changeset
|
1162 br = repo.branchlookup([repo.changelog.node(rev)]) |
6a4f181497c9
Add log -b to show the branch a specific revision lives in
mason@suse.com
parents:
1233
diff
changeset
|
1163 show_changeset(du, repo, rev, brinfo=br) |
1057 | 1164 if opts['patch']: |
1165 changenode = repo.changelog.node(rev) | |
1166 prev, other = repo.changelog.parents(changenode) | |
1167 dodiff(du, du, repo, prev, changenode, fns) | |
1168 du.write("\n\n") | |
1169 elif st == 'iter': | |
1170 for args in du.hunk[rev]: | |
1171 ui.write(*args) | |
255 | 1172 |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1173 def manifest(ui, repo, rev=None): |
255 | 1174 """output the latest or given revision of the project manifest""" |
1175 if rev: | |
689 | 1176 try: |
1177 # assume all revision numbers are for changesets | |
1178 n = repo.lookup(rev) | |
1179 change = repo.changelog.read(n) | |
1180 n = change[0] | |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1181 except hg.RepoError: |
689 | 1182 n = repo.manifest.lookup(rev) |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1183 else: |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1184 n = repo.manifest.tip() |
255 | 1185 m = repo.manifest.read(n) |
276 | 1186 mf = repo.manifest.readflags(n) |
255 | 1187 files = m.keys() |
1188 files.sort() | |
1189 | |
1190 for f in files: | |
1092 | 1191 ui.write("%40s %3s %s\n" % (hex(m[f]), mf[f] and "755" or "644", f)) |
255 | 1192 |
1192
6e165de907c5
Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents:
1191
diff
changeset
|
1193 def outgoing(ui, repo, dest="default-push", **opts): |
920 | 1194 """show changesets not found in destination""" |
1195 dest = ui.expandpath(dest) | |
1196 other = hg.repository(ui, dest) | |
1197 o = repo.findoutgoing(other) | |
1198 o = repo.newer(o) | |
1199 o.reverse() | |
1200 for n in o: | |
1201 show_changeset(ui, repo, changenode=n) | |
1192
6e165de907c5
Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents:
1191
diff
changeset
|
1202 if opts['patch']: |
6e165de907c5
Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents:
1191
diff
changeset
|
1203 prev = repo.changelog.parents(n)[0] |
6e165de907c5
Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents:
1191
diff
changeset
|
1204 dodiff(ui, ui, repo, prev, n) |
6e165de907c5
Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents:
1191
diff
changeset
|
1205 ui.write("\n") |
920 | 1206 |
706
5107a7b6b14a
Make "hg parents REV" work (again?)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
705
diff
changeset
|
1207 def parents(ui, repo, rev=None): |
5107a7b6b14a
Make "hg parents REV" work (again?)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
705
diff
changeset
|
1208 """show the parents of the working dir or revision""" |
5107a7b6b14a
Make "hg parents REV" work (again?)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
705
diff
changeset
|
1209 if rev: |
5107a7b6b14a
Make "hg parents REV" work (again?)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
705
diff
changeset
|
1210 p = repo.changelog.parents(repo.lookup(rev)) |
255 | 1211 else: |
1212 p = repo.dirstate.parents() | |
1213 | |
1214 for n in p: | |
1092 | 1215 if n != nullid: |
329
67c19ad374a9
Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
320
diff
changeset
|
1216 show_changeset(ui, repo, changenode=n) |
255 | 1217 |
1062 | 1218 def paths(ui, search=None): |
924
ab681ea2857e
updated help text and added manpage section for hg paths
TK Soh <teekaysoh@yahoo.com>
parents:
921
diff
changeset
|
1219 """show definition of symbolic path names""" |
915 | 1220 try: |
1221 repo = hg.repository(ui=ui) | |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
1222 except hg.RepoError: |
915 | 1223 pass |
1224 | |
779 | 1225 if search: |
1226 for name, path in ui.configitems("paths"): | |
1227 if name == search: | |
1228 ui.write("%s\n" % path) | |
1229 return | |
1230 ui.warn("not found!\n") | |
1231 return 1 | |
1232 else: | |
1233 for name, path in ui.configitems("paths"): | |
1234 ui.write("%s = %s\n" % (name, path)) | |
1235 | |
404 | 1236 def pull(ui, repo, source="default", **opts): |
246
96cde50a746f
Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents:
245
diff
changeset
|
1237 """pull changes from the specified source""" |
506 | 1238 source = ui.expandpath(source) |
404 | 1239 ui.status('pulling from %s\n' % (source)) |
500
ebc4714a7632
[PATCH] Clean up destination directory if a clone fails.
mpm@selenic.com
parents:
499
diff
changeset
|
1240 |
963
84355e3e4493
Add -e and --remotecmd for clone and pull too
mpm@selenic.com
parents:
961
diff
changeset
|
1241 if opts['ssh']: |
84355e3e4493
Add -e and --remotecmd for clone and pull too
mpm@selenic.com
parents:
961
diff
changeset
|
1242 ui.setconfig("ui", "ssh", opts['ssh']) |
84355e3e4493
Add -e and --remotecmd for clone and pull too
mpm@selenic.com
parents:
961
diff
changeset
|
1243 if opts['remotecmd']: |
84355e3e4493
Add -e and --remotecmd for clone and pull too
mpm@selenic.com
parents:
961
diff
changeset
|
1244 ui.setconfig("ui", "remotecmd", opts['remotecmd']) |
84355e3e4493
Add -e and --remotecmd for clone and pull too
mpm@selenic.com
parents:
961
diff
changeset
|
1245 |
246
96cde50a746f
Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents:
245
diff
changeset
|
1246 other = hg.repository(ui, source) |
625 | 1247 r = repo.pull(other) |
1248 if not r: | |
404 | 1249 if opts['update']: |
1250 return update(ui, repo) | |
580 | 1251 else: |
404 | 1252 ui.status("(run 'hg update' to get a working copy)\n") |
1253 | |
1254 return r | |
246
96cde50a746f
Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents:
245
diff
changeset
|
1255 |
961 | 1256 def push(ui, repo, dest="default-push", force=False, ssh=None, remotecmd=None): |
319 | 1257 """push changes to the specified destination""" |
506 | 1258 dest = ui.expandpath(dest) |
640
b48b91d3fb4a
Switch push over to the new scheme
Matt Mackall <mpm@selenic.com>
parents:
639
diff
changeset
|
1259 ui.status('pushing to %s\n' % (dest)) |
319 | 1260 |
961 | 1261 if ssh: |
1262 ui.setconfig("ui", "ssh", ssh) | |
1263 if remotecmd: | |
1264 ui.setconfig("ui", "remotecmd", remotecmd) | |
1265 | |
640
b48b91d3fb4a
Switch push over to the new scheme
Matt Mackall <mpm@selenic.com>
parents:
639
diff
changeset
|
1266 other = hg.repository(ui, dest) |
818 | 1267 r = repo.push(other, force) |
640
b48b91d3fb4a
Switch push over to the new scheme
Matt Mackall <mpm@selenic.com>
parents:
639
diff
changeset
|
1268 return r |
319 | 1269 |
403 | 1270 def rawcommit(ui, repo, *flist, **rc): |
246
96cde50a746f
Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents:
245
diff
changeset
|
1271 "raw commit interface" |
763
84f9ac74cc30
Added deprecation warnings if -t or --text is used for commits.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
762
diff
changeset
|
1272 if rc['text']: |
84f9ac74cc30
Added deprecation warnings if -t or --text is used for commits.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
762
diff
changeset
|
1273 ui.warn("Warning: -t and --text is deprecated," |
84f9ac74cc30
Added deprecation warnings if -t or --text is used for commits.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
762
diff
changeset
|
1274 " please use -m or --message instead.\n") |
762
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1275 message = rc['message'] or rc['text'] |
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1276 if not message and rc['logfile']: |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1277 try: |
762
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1278 message = open(rc['logfile']).read() |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1279 except IOError: |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1280 pass |
762
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1281 if not message and not rc['logfile']: |
1227
e3ea354d99b2
Replace sequences of {ui.warn, return 1} with raise of util.Abort.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1225
diff
changeset
|
1282 raise util.Abort("missing commit message") |
246
96cde50a746f
Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents:
245
diff
changeset
|
1283 |
403 | 1284 files = relpath(repo, list(flist)) |
246
96cde50a746f
Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents:
245
diff
changeset
|
1285 if rc['files']: |
96cde50a746f
Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents:
245
diff
changeset
|
1286 files += open(rc['files']).read().splitlines() |
452
a1e91c24dab5
rawcommit: do lookup of parents at the appropriate layer
mpm@selenic.com
parents:
443
diff
changeset
|
1287 |
a1e91c24dab5
rawcommit: do lookup of parents at the appropriate layer
mpm@selenic.com
parents:
443
diff
changeset
|
1288 rc['parent'] = map(repo.lookup, rc['parent']) |
500
ebc4714a7632
[PATCH] Clean up destination directory if a clone fails.
mpm@selenic.com
parents:
499
diff
changeset
|
1289 |
1202
71111d796e40
Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1194
diff
changeset
|
1290 try: |
71111d796e40
Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1194
diff
changeset
|
1291 repo.rawcommit(files, message, rc['user'], rc['date'], *rc['parent']) |
71111d796e40
Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1194
diff
changeset
|
1292 except ValueError, inst: |
71111d796e40
Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1194
diff
changeset
|
1293 raise util.Abort(str(inst)) |
500
ebc4714a7632
[PATCH] Clean up destination directory if a clone fails.
mpm@selenic.com
parents:
499
diff
changeset
|
1294 |
245 | 1295 def recover(ui, repo): |
255 | 1296 """roll back an interrupted transaction""" |
245 | 1297 repo.recover() |
1298 | |
1188
b3ceb2d470fc
Fix up remove command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1187
diff
changeset
|
1299 def remove(ui, repo, pat, *pats, **opts): |
245 | 1300 """remove the specified files on the next commit""" |
1188
b3ceb2d470fc
Fix up remove command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1187
diff
changeset
|
1301 names = [] |
1189
4cbcc54695b2
Make removal check more complete and informative.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1188
diff
changeset
|
1302 def okaytoremove(abs, rel, exact): |
4cbcc54695b2
Make removal check more complete and informative.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1188
diff
changeset
|
1303 c, a, d, u = repo.changes(files = [abs]) |
4cbcc54695b2
Make removal check more complete and informative.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1188
diff
changeset
|
1304 reason = None |
4cbcc54695b2
Make removal check more complete and informative.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1188
diff
changeset
|
1305 if c: reason = 'is modified' |
4cbcc54695b2
Make removal check more complete and informative.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1188
diff
changeset
|
1306 elif a: reason = 'has been marked for add' |
4cbcc54695b2
Make removal check more complete and informative.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1188
diff
changeset
|
1307 elif u: reason = 'not managed' |
4cbcc54695b2
Make removal check more complete and informative.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1188
diff
changeset
|
1308 if reason and exact: |
4cbcc54695b2
Make removal check more complete and informative.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1188
diff
changeset
|
1309 ui.warn('not removing %s: file %s\n' % (rel, reason)) |
4cbcc54695b2
Make removal check more complete and informative.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1188
diff
changeset
|
1310 else: |
4cbcc54695b2
Make removal check more complete and informative.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1188
diff
changeset
|
1311 return True |
1188
b3ceb2d470fc
Fix up remove command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1187
diff
changeset
|
1312 for src, abs, rel, exact in walk(repo, (pat,) + pats, opts): |
1189
4cbcc54695b2
Make removal check more complete and informative.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1188
diff
changeset
|
1313 if okaytoremove(abs, rel, exact): |
4cbcc54695b2
Make removal check more complete and informative.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1188
diff
changeset
|
1314 if not exact: ui.status('removing %s\n' % rel) |
1188
b3ceb2d470fc
Fix up remove command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1187
diff
changeset
|
1315 names.append(abs) |
b3ceb2d470fc
Fix up remove command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1187
diff
changeset
|
1316 repo.remove(names) |
245 | 1317 |
588 | 1318 def revert(ui, repo, *names, **opts): |
1319 """revert modified files or dirs back to their unmodified states""" | |
590
38d106db75bc
hg revert should revert to parent, not to tip
mpm@selenic.com
parents:
588
diff
changeset
|
1320 node = opts['rev'] and repo.lookup(opts['rev']) or \ |
38d106db75bc
hg revert should revert to parent, not to tip
mpm@selenic.com
parents:
588
diff
changeset
|
1321 repo.dirstate.parents()[0] |
588 | 1322 root = os.path.realpath(repo.root) |
590
38d106db75bc
hg revert should revert to parent, not to tip
mpm@selenic.com
parents:
588
diff
changeset
|
1323 |
588 | 1324 def trimpath(p): |
1325 p = os.path.realpath(p) | |
1326 if p.startswith(root): | |
1327 rest = p[len(root):] | |
1328 if not rest: | |
1329 return rest | |
1330 if p.startswith(os.sep): | |
1331 return rest[1:] | |
1332 return p | |
590
38d106db75bc
hg revert should revert to parent, not to tip
mpm@selenic.com
parents:
588
diff
changeset
|
1333 |
588 | 1334 relnames = map(trimpath, names or [os.getcwd()]) |
1335 chosen = {} | |
590
38d106db75bc
hg revert should revert to parent, not to tip
mpm@selenic.com
parents:
588
diff
changeset
|
1336 |
588 | 1337 def choose(name): |
1338 def body(name): | |
1339 for r in relnames: | |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1340 if not name.startswith(r): |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1341 continue |
588 | 1342 rest = name[len(r):] |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1343 if not rest: |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1344 return r, True |
588 | 1345 depth = rest.count(os.sep) |
1346 if not r: | |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1347 if depth == 0 or not opts['nonrecursive']: |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1348 return r, True |
588 | 1349 elif rest[0] == os.sep: |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1350 if depth == 1 or not opts['nonrecursive']: |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1351 return r, True |
588 | 1352 return None, False |
1353 relname, ret = body(name) | |
1354 if ret: | |
1355 chosen[relname] = 1 | |
1356 return ret | |
1357 | |
1358 r = repo.update(node, False, True, choose, False) | |
1359 for n in relnames: | |
1360 if n not in chosen: | |
1361 ui.warn('error: no matches for %s\n' % n) | |
1362 r = 1 | |
1363 sys.stdout.flush() | |
1364 return r | |
1365 | |
468 | 1366 def root(ui, repo): |
1367 """print the root (top) of the current working dir""" | |
1368 ui.write(repo.root + "\n") | |
1369 | |
245 | 1370 def serve(ui, repo, **opts): |
255 | 1371 """export the repository via HTTP""" |
624
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1372 |
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1373 if opts["stdio"]: |
635
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1374 fin, fout = sys.stdin, sys.stdout |
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1375 sys.stdout = sys.stderr |
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1376 |
624
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1377 def getarg(): |
635
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1378 argline = fin.readline()[:-1] |
624
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1379 arg, l = argline.split() |
635
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1380 val = fin.read(int(l)) |
624
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1381 return arg, val |
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1382 def respond(v): |
635
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1383 fout.write("%d\n" % len(v)) |
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1384 fout.write(v) |
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1385 fout.flush() |
624
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1386 |
638
35f7adfefa69
Add a scheme for handling remote locking
Matt Mackall <mpm@selenic.com>
parents:
635
diff
changeset
|
1387 lock = None |
35f7adfefa69
Add a scheme for handling remote locking
Matt Mackall <mpm@selenic.com>
parents:
635
diff
changeset
|
1388 |
624
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1389 while 1: |
635
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1390 cmd = fin.readline()[:-1] |
624
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1391 if cmd == '': |
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1392 return |
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1393 if cmd == "heads": |
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1394 h = repo.heads() |
1092 | 1395 respond(" ".join(map(hex, h)) + "\n") |
638
35f7adfefa69
Add a scheme for handling remote locking
Matt Mackall <mpm@selenic.com>
parents:
635
diff
changeset
|
1396 if cmd == "lock": |
35f7adfefa69
Add a scheme for handling remote locking
Matt Mackall <mpm@selenic.com>
parents:
635
diff
changeset
|
1397 lock = repo.lock() |
35f7adfefa69
Add a scheme for handling remote locking
Matt Mackall <mpm@selenic.com>
parents:
635
diff
changeset
|
1398 respond("") |
35f7adfefa69
Add a scheme for handling remote locking
Matt Mackall <mpm@selenic.com>
parents:
635
diff
changeset
|
1399 if cmd == "unlock": |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1400 if lock: |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1401 lock.release() |
638
35f7adfefa69
Add a scheme for handling remote locking
Matt Mackall <mpm@selenic.com>
parents:
635
diff
changeset
|
1402 lock = None |
35f7adfefa69
Add a scheme for handling remote locking
Matt Mackall <mpm@selenic.com>
parents:
635
diff
changeset
|
1403 respond("") |
624
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1404 elif cmd == "branches": |
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1405 arg, nodes = getarg() |
1092 | 1406 nodes = map(bin, nodes.split(" ")) |
624
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1407 r = [] |
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1408 for b in repo.branches(nodes): |
1092 | 1409 r.append(" ".join(map(hex, b)) + "\n") |
624
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1410 respond("".join(r)) |
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1411 elif cmd == "between": |
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1412 arg, pairs = getarg() |
1092 | 1413 pairs = [map(bin, p.split("-")) for p in pairs.split(" ")] |
624
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1414 r = [] |
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1415 for b in repo.between(pairs): |
1092 | 1416 r.append(" ".join(map(hex, b)) + "\n") |
624
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1417 respond("".join(r)) |
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1418 elif cmd == "changegroup": |
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1419 nodes = [] |
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1420 arg, roots = getarg() |
1092 | 1421 nodes = map(bin, roots.split(" ")) |
624
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1422 |
635
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1423 cg = repo.changegroup(nodes) |
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1424 while 1: |
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1425 d = cg.read(4096) |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1426 if not d: |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1427 break |
635
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1428 fout.write(d) |
624
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1429 |
667
31a9aa890016
A number of minor fixes to problems that pychecker found.
mark.williamson@cl.cam.ac.uk
parents:
654
diff
changeset
|
1430 fout.flush() |
624
876333a295ff
Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents:
618
diff
changeset
|
1431 |
639
31cebba881a0
Add addchangegroup to the ssh protocol
Matt Mackall <mpm@selenic.com>
parents:
638
diff
changeset
|
1432 elif cmd == "addchangegroup": |
31cebba881a0
Add addchangegroup to the ssh protocol
Matt Mackall <mpm@selenic.com>
parents:
638
diff
changeset
|
1433 if not lock: |
31cebba881a0
Add addchangegroup to the ssh protocol
Matt Mackall <mpm@selenic.com>
parents:
638
diff
changeset
|
1434 respond("not locked") |
31cebba881a0
Add addchangegroup to the ssh protocol
Matt Mackall <mpm@selenic.com>
parents:
638
diff
changeset
|
1435 continue |
31cebba881a0
Add addchangegroup to the ssh protocol
Matt Mackall <mpm@selenic.com>
parents:
638
diff
changeset
|
1436 respond("") |
31cebba881a0
Add addchangegroup to the ssh protocol
Matt Mackall <mpm@selenic.com>
parents:
638
diff
changeset
|
1437 |
31cebba881a0
Add addchangegroup to the ssh protocol
Matt Mackall <mpm@selenic.com>
parents:
638
diff
changeset
|
1438 r = repo.addchangegroup(fin) |
31cebba881a0
Add addchangegroup to the ssh protocol
Matt Mackall <mpm@selenic.com>
parents:
638
diff
changeset
|
1439 respond("") |
31cebba881a0
Add addchangegroup to the ssh protocol
Matt Mackall <mpm@selenic.com>
parents:
638
diff
changeset
|
1440 |
987 | 1441 optlist = "name templates style address port ipv6 accesslog errorlog" |
1442 for o in optlist.split(): | |
1443 if opts[o]: | |
1444 ui.setconfig("web", o, opts[o]) | |
1445 | |
1177
862f53c1d0f9
hg serve: print a more useful error message if server can't start.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1147
diff
changeset
|
1446 try: |
862f53c1d0f9
hg serve: print a more useful error message if server can't start.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1147
diff
changeset
|
1447 httpd = hgweb.create_server(repo) |
862f53c1d0f9
hg serve: print a more useful error message if server can't start.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1147
diff
changeset
|
1448 except socket.error, inst: |
862f53c1d0f9
hg serve: print a more useful error message if server can't start.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1147
diff
changeset
|
1449 raise util.Abort('cannot start server: ' + inst.args[1]) |
987 | 1450 |
603
bc5d058e65e9
[PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents:
596
diff
changeset
|
1451 if ui.verbose: |
bc5d058e65e9
[PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents:
596
diff
changeset
|
1452 addr, port = httpd.socket.getsockname() |
bc5d058e65e9
[PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents:
596
diff
changeset
|
1453 if addr == '0.0.0.0': |
bc5d058e65e9
[PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents:
596
diff
changeset
|
1454 addr = socket.gethostname() |
bc5d058e65e9
[PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents:
596
diff
changeset
|
1455 else: |
bc5d058e65e9
[PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents:
596
diff
changeset
|
1456 try: |
bc5d058e65e9
[PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents:
596
diff
changeset
|
1457 addr = socket.gethostbyaddr(addr)[0] |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1458 except socket.error: |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1459 pass |
603
bc5d058e65e9
[PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents:
596
diff
changeset
|
1460 if port != 80: |
605
8e82fd763be2
[PATCH] Get "hg serve" to optionally log accesses and errors to files
mpm@selenic.com
parents:
604
diff
changeset
|
1461 ui.status('listening at http://%s:%d/\n' % (addr, port)) |
603
bc5d058e65e9
[PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents:
596
diff
changeset
|
1462 else: |
605
8e82fd763be2
[PATCH] Get "hg serve" to optionally log accesses and errors to files
mpm@selenic.com
parents:
604
diff
changeset
|
1463 ui.status('listening at http://%s/\n' % addr) |
603
bc5d058e65e9
[PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents:
596
diff
changeset
|
1464 httpd.serve_forever() |
500
ebc4714a7632
[PATCH] Clean up destination directory if a clone fails.
mpm@selenic.com
parents:
499
diff
changeset
|
1465 |
731
91ca3afab8e8
Add name matching to status command.
Bryan O'Sullivan <bos@serpentine.com>
parents:
729
diff
changeset
|
1466 def status(ui, repo, *pats, **opts): |
213 | 1467 '''show changed files in the working directory |
1468 | |
746 | 1469 M = modified |
245 | 1470 A = added |
1471 R = removed | |
842
8fb488773063
Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
841
diff
changeset
|
1472 ? = not tracked |
8fb488773063
Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
841
diff
changeset
|
1473 ''' |
312 | 1474 |
820
89985a1b3427
Clean up walk and changes code to use normalised names properly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
815
diff
changeset
|
1475 cwd = repo.getcwd() |
1031
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
1476 files, matchfn, anypats = matchpats(repo, cwd, pats, opts) |
884
087771ebe2e6
Fix walk code for files that do not exist anywhere, and unhandled types.
Bryan O'Sullivan <bos@serpentine.com>
parents:
883
diff
changeset
|
1477 (c, a, d, u) = [[util.pathto(cwd, x) for x in n] |
823
f0446f6963d2
Use list comprehension in hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
820
diff
changeset
|
1478 for n in repo.changes(files=files, match=matchfn)] |
213 | 1479 |
842
8fb488773063
Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
841
diff
changeset
|
1480 changetypes = [('modified', 'M', c), |
8fb488773063
Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
841
diff
changeset
|
1481 ('added', 'A', a), |
8fb488773063
Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
841
diff
changeset
|
1482 ('removed', 'R', d), |
8fb488773063
Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
841
diff
changeset
|
1483 ('unknown', '?', u)] |
8fb488773063
Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
841
diff
changeset
|
1484 |
1085
6f94688b81b6
status: added option -p and -0 to assist xargs
TK Soh <teekaysoh@yahoo.com>
parents:
1081
diff
changeset
|
1485 end = opts['print0'] and '\0' or '\n' |
1106
95a044b73bd5
Whitespace cleanup.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1105
diff
changeset
|
1486 |
842
8fb488773063
Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
841
diff
changeset
|
1487 for opt, char, changes in ([ct for ct in changetypes if opts[ct[0]]] |
8fb488773063
Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
841
diff
changeset
|
1488 or changetypes): |
1105
a906b018eaef
Replaced hg status -p/--strip with -n/--no-status to not confuse with patch.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1085
diff
changeset
|
1489 if opts['no_status']: |
1085
6f94688b81b6
status: added option -p and -0 to assist xargs
TK Soh <teekaysoh@yahoo.com>
parents:
1081
diff
changeset
|
1490 format = "%%s%s" % end |
6f94688b81b6
status: added option -p and -0 to assist xargs
TK Soh <teekaysoh@yahoo.com>
parents:
1081
diff
changeset
|
1491 else: |
6f94688b81b6
status: added option -p and -0 to assist xargs
TK Soh <teekaysoh@yahoo.com>
parents:
1081
diff
changeset
|
1492 format = "%s %%s%s" % (char, end); |
1106
95a044b73bd5
Whitespace cleanup.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1105
diff
changeset
|
1493 |
842
8fb488773063
Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
841
diff
changeset
|
1494 for f in changes: |
1085
6f94688b81b6
status: added option -p and -0 to assist xargs
TK Soh <teekaysoh@yahoo.com>
parents:
1081
diff
changeset
|
1495 ui.write(format % f) |
213 | 1496 |
700
d01b93efecd6
Removed extra spaces for default parameters according to PEP8.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
699
diff
changeset
|
1497 def tag(ui, repo, name, rev=None, **opts): |
401
af4848f83e68
From: Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
mpm@selenic.com
parents:
396
diff
changeset
|
1498 """add a tag for the current tip or a given revision""" |
763
84f9ac74cc30
Added deprecation warnings if -t or --text is used for commits.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
762
diff
changeset
|
1499 if opts['text']: |
84f9ac74cc30
Added deprecation warnings if -t or --text is used for commits.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
762
diff
changeset
|
1500 ui.warn("Warning: -t and --text is deprecated," |
84f9ac74cc30
Added deprecation warnings if -t or --text is used for commits.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
762
diff
changeset
|
1501 " please use -m or --message instead.\n") |
401
af4848f83e68
From: Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
mpm@selenic.com
parents:
396
diff
changeset
|
1502 if name == "tip": |
1227
e3ea354d99b2
Replace sequences of {ui.warn, return 1} with raise of util.Abort.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1225
diff
changeset
|
1503 raise util.Abort("the name 'tip' is reserved") |
609
2acf1f5df2e6
[PATCH] hg tag: local tag support in file .hg/localtags
Matt Mackall <mpm@selenic.com>
parents:
607
diff
changeset
|
1504 if rev: |
1092 | 1505 r = hex(repo.lookup(rev)) |
609
2acf1f5df2e6
[PATCH] hg tag: local tag support in file .hg/localtags
Matt Mackall <mpm@selenic.com>
parents:
607
diff
changeset
|
1506 else: |
1092 | 1507 r = hex(repo.changelog.tip()) |
609
2acf1f5df2e6
[PATCH] hg tag: local tag support in file .hg/localtags
Matt Mackall <mpm@selenic.com>
parents:
607
diff
changeset
|
1508 |
580 | 1509 if name.find(revrangesep) >= 0: |
1227
e3ea354d99b2
Replace sequences of {ui.warn, return 1} with raise of util.Abort.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1225
diff
changeset
|
1510 raise util.Abort("'%s' cannot be used in a tag name" % revrangesep) |
401
af4848f83e68
From: Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
mpm@selenic.com
parents:
396
diff
changeset
|
1511 |
609
2acf1f5df2e6
[PATCH] hg tag: local tag support in file .hg/localtags
Matt Mackall <mpm@selenic.com>
parents:
607
diff
changeset
|
1512 if opts['local']: |
2acf1f5df2e6
[PATCH] hg tag: local tag support in file .hg/localtags
Matt Mackall <mpm@selenic.com>
parents:
607
diff
changeset
|
1513 repo.opener("localtags", "a").write("%s %s\n" % (r, name)) |
2acf1f5df2e6
[PATCH] hg tag: local tag support in file .hg/localtags
Matt Mackall <mpm@selenic.com>
parents:
607
diff
changeset
|
1514 return |
2acf1f5df2e6
[PATCH] hg tag: local tag support in file .hg/localtags
Matt Mackall <mpm@selenic.com>
parents:
607
diff
changeset
|
1515 |
723 | 1516 (c, a, d, u) = repo.changes() |
401
af4848f83e68
From: Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
mpm@selenic.com
parents:
396
diff
changeset
|
1517 for x in (c, a, d, u): |
580 | 1518 if ".hgtags" in x: |
1227
e3ea354d99b2
Replace sequences of {ui.warn, return 1} with raise of util.Abort.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1225
diff
changeset
|
1519 raise util.Abort("working copy of .hgtags is changed " |
e3ea354d99b2
Replace sequences of {ui.warn, return 1} with raise of util.Abort.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1225
diff
changeset
|
1520 "(please commit .hgtags manually)") |
401
af4848f83e68
From: Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
mpm@selenic.com
parents:
396
diff
changeset
|
1521 |
617 | 1522 repo.wfile(".hgtags", "ab").write("%s %s\n" % (r, name)) |
710
ca9353f43345
Use dirstate to check if .hgtags needs to be added.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
709
diff
changeset
|
1523 if repo.dirstate.state(".hgtags") == '?': |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1524 repo.add([".hgtags"]) |
401
af4848f83e68
From: Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
mpm@selenic.com
parents:
396
diff
changeset
|
1525 |
762
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1526 message = (opts['message'] or opts['text'] or |
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1527 "Added tag %s for changeset %s" % (name, r)) |
1202
71111d796e40
Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1194
diff
changeset
|
1528 try: |
71111d796e40
Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1194
diff
changeset
|
1529 repo.commit([".hgtags"], message, opts['user'], opts['date']) |
71111d796e40
Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1194
diff
changeset
|
1530 except ValueError, inst: |
71111d796e40
Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1194
diff
changeset
|
1531 raise util.Abort(str(inst)) |
401
af4848f83e68
From: Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
mpm@selenic.com
parents:
396
diff
changeset
|
1532 |
248 | 1533 def tags(ui, repo): |
255 | 1534 """list repository tags""" |
477
520540fd6b64
Handle errors in .hgtags or hgrc [tags] section more gracefully.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
470
diff
changeset
|
1535 |
343 | 1536 l = repo.tagslist() |
1537 l.reverse() | |
477
520540fd6b64
Handle errors in .hgtags or hgrc [tags] section more gracefully.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
470
diff
changeset
|
1538 for t, n in l: |
248 | 1539 try: |
1092 | 1540 r = "%5d:%s" % (repo.changelog.rev(n), hex(n)) |
248 | 1541 except KeyError: |
477
520540fd6b64
Handle errors in .hgtags or hgrc [tags] section more gracefully.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
470
diff
changeset
|
1542 r = " ?:?" |
520540fd6b64
Handle errors in .hgtags or hgrc [tags] section more gracefully.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
470
diff
changeset
|
1543 ui.write("%-30s %s\n" % (t, r)) |
248 | 1544 |
245 | 1545 def tip(ui, repo): |
255 | 1546 """show the tip revision""" |
245 | 1547 n = repo.changelog.tip() |
329
67c19ad374a9
Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
320
diff
changeset
|
1548 show_changeset(ui, repo, changenode=n) |
245 | 1549 |
1218
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1550 def unbundle(ui, repo, fname): |
1222 | 1551 """apply a changegroup file""" |
1218
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1552 f = urllib.urlopen(fname) |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1553 |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1554 if f.read(4) != "HG10": |
1227
e3ea354d99b2
Replace sequences of {ui.warn, return 1} with raise of util.Abort.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1225
diff
changeset
|
1555 raise util.Abort("%s: not a Mercurial bundle file" % fname) |
1218
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1556 |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1557 class bzread: |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1558 def __init__(self, f): |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1559 self.zd = bz2.BZ2Decompressor() |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1560 self.f = f |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1561 self.buf = "" |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1562 def read(self, l): |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1563 while l > len(self.buf): |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1564 r = self.f.read(4096) |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1565 if r: |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1566 self.buf += self.zd.decompress(r) |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1567 else: |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1568 break |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1569 d, self.buf = self.buf[:l], self.buf[l:] |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1570 return d |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1571 |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1572 repo.addchangegroup(bzread(f)) |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1573 |
212
48398a5353e3
commands: better argument processing, per-command help
mpm@selenic.com
parents:
211
diff
changeset
|
1574 def undo(ui, repo): |
596 | 1575 """undo the last commit or pull |
1576 | |
1577 Roll back the last pull or commit transaction on the | |
1578 repository, restoring the project to its earlier state. | |
1579 | |
1580 This command should be used with care. There is only one level of | |
1581 undo and there is no redo. | |
1582 | |
1583 This command is not intended for use on public repositories. Once | |
1584 a change is visible for pull by other users, undoing it locally is | |
1585 ineffective. | |
1586 """ | |
210 | 1587 repo.undo() |
1588 | |
898 | 1589 def update(ui, repo, node=None, merge=False, clean=False, branch=None): |
254 | 1590 '''update or merge working directory |
1591 | |
1592 If there are no outstanding changes in the working directory and | |
1593 there is a linear relationship between the current version and the | |
1594 requested version, the result is the requested version. | |
1595 | |
1596 Otherwise the result is a merge between the contents of the | |
1597 current working directory and the requested version. Files that | |
1598 changed between either parent are marked as changed for the next | |
1599 commit and a commit must be performed before any further updates | |
1600 are allowed. | |
1601 ''' | |
898 | 1602 if branch: |
1603 br = repo.branchlookup(branch=branch) | |
1604 found = [] | |
1605 for x in br: | |
1606 if branch in br[x]: | |
1607 found.append(x) | |
1608 if len(found) > 1: | |
1609 ui.warn("Found multiple heads for %s\n" % branch) | |
1610 for x in found: | |
1611 show_changeset(ui, repo, changenode=x, brinfo=br) | |
1612 return 1 | |
1613 if len(found) == 1: | |
1614 node = found[0] | |
1092 | 1615 ui.warn("Using head %s for branch %s\n" % (short(node), branch)) |
898 | 1616 else: |
1617 ui.warn("branch %s not found\n" % (branch)) | |
1618 return 1 | |
1619 else: | |
1620 node = node and repo.lookup(node) or repo.changelog.tip() | |
275 | 1621 return repo.update(node, allow=merge, force=clean) |
254 | 1622 |
247 | 1623 def verify(ui, repo): |
1624 """verify the integrity of the repository""" | |
1625 return repo.verify() | |
1626 | |
255 | 1627 # Command options and aliases are listed here, alphabetically |
1628 | |
209 | 1629 table = { |
841
03cc2ba291d1
Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
840
diff
changeset
|
1630 "^add": |
03cc2ba291d1
Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
840
diff
changeset
|
1631 (add, |
03cc2ba291d1
Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
840
diff
changeset
|
1632 [('I', 'include', [], 'include path in search'), |
03cc2ba291d1
Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
840
diff
changeset
|
1633 ('X', 'exclude', [], 'exclude path from search')], |
913 | 1634 "hg add [OPTION]... [FILE]..."), |
841
03cc2ba291d1
Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
840
diff
changeset
|
1635 "addremove": |
03cc2ba291d1
Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
840
diff
changeset
|
1636 (addremove, |
03cc2ba291d1
Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
840
diff
changeset
|
1637 [('I', 'include', [], 'include path in search'), |
03cc2ba291d1
Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
840
diff
changeset
|
1638 ('X', 'exclude', [], 'exclude path from search')], |
03cc2ba291d1
Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
840
diff
changeset
|
1639 "hg addremove [OPTION]... [FILE]..."), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1640 "^annotate": |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1641 (annotate, |
757
7000825ef3ba
Updated help strings and test-help:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
755
diff
changeset
|
1642 [('r', 'rev', '', 'revision'), |
1016 | 1643 ('a', 'text', None, 'treat all files as text'), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1644 ('u', 'user', None, 'show user'), |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1645 ('n', 'number', None, 'show revision number'), |
757
7000825ef3ba
Updated help strings and test-help:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
755
diff
changeset
|
1646 ('c', 'changeset', None, 'show changeset'), |
7000825ef3ba
Updated help strings and test-help:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
755
diff
changeset
|
1647 ('I', 'include', [], 'include path in search'), |
7000825ef3ba
Updated help strings and test-help:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
755
diff
changeset
|
1648 ('X', 'exclude', [], 'exclude path from search')], |
913 | 1649 'hg annotate [OPTION]... FILE...'), |
1218
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1650 "bundle": |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1651 (bundle, |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1652 [], |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1653 'hg bundle FILE DEST'), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1654 "cat": |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1655 (cat, |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1656 [('o', 'output', "", 'output to file')], |
707
116b2d3f4554
Changed command synopsises to match style of common UNIX tools.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
706
diff
changeset
|
1657 'hg cat [-o OUTFILE] FILE [REV]'), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1658 "^clone": |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1659 (clone, |
963
84355e3e4493
Add -e and --remotecmd for clone and pull too
mpm@selenic.com
parents:
961
diff
changeset
|
1660 [('U', 'noupdate', None, 'skip update after cloning'), |
84355e3e4493
Add -e and --remotecmd for clone and pull too
mpm@selenic.com
parents:
961
diff
changeset
|
1661 ('e', 'ssh', "", 'ssh command'), |
84355e3e4493
Add -e and --remotecmd for clone and pull too
mpm@selenic.com
parents:
961
diff
changeset
|
1662 ('', 'remotecmd', "", 'remote hg command')], |
1054
5139ee9bfc38
Fixed some synopsises in command help.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1053
diff
changeset
|
1663 'hg clone [OPTION]... SOURCE [DEST]'), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1664 "^commit|ci": |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1665 (commit, |
707
116b2d3f4554
Changed command synopsises to match style of common UNIX tools.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
706
diff
changeset
|
1666 [('A', 'addremove', None, 'run add/remove during commit'), |
813
80fd2958235a
Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
812
diff
changeset
|
1667 ('I', 'include', [], 'include path in search'), |
80fd2958235a
Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
812
diff
changeset
|
1668 ('X', 'exclude', [], 'exclude path from search'), |
761
0fb498458905
Change all references to -t --text commit message to -m and --message.
Andrew Thompson <andrewkt@aktzero.com>
parents:
758
diff
changeset
|
1669 ('m', 'message', "", 'commit message'), |
757
7000825ef3ba
Updated help strings and test-help:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
755
diff
changeset
|
1670 ('t', 'text', "", 'commit message (deprecated: use -m)'), |
762
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1671 ('l', 'logfile', "", 'commit message file'), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1672 ('d', 'date', "", 'date code'), |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1673 ('u', 'user', "", 'user')], |
707
116b2d3f4554
Changed command synopsises to match style of common UNIX tools.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
706
diff
changeset
|
1674 'hg commit [OPTION]... [FILE]...'), |
116b2d3f4554
Changed command synopsises to match style of common UNIX tools.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
706
diff
changeset
|
1675 "copy": (copy, [], 'hg copy SOURCE DEST'), |
596 | 1676 "debugcheckstate": (debugcheckstate, [], 'debugcheckstate'), |
1028
25e7ea0f2cff
Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents:
989
diff
changeset
|
1677 "debugconfig": (debugconfig, [], 'debugconfig'), |
596 | 1678 "debugstate": (debugstate, [], 'debugstate'), |
1039
4296754ba7b4
Add debugdata for dumping revlog revision data
mpm@selenic.com
parents:
1037
diff
changeset
|
1679 "debugdata": (debugdata, [], 'debugdata FILE REV'), |
707
116b2d3f4554
Changed command synopsises to match style of common UNIX tools.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
706
diff
changeset
|
1680 "debugindex": (debugindex, [], 'debugindex FILE'), |
116b2d3f4554
Changed command synopsises to match style of common UNIX tools.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
706
diff
changeset
|
1681 "debugindexdot": (debugindexdot, [], 'debugindexdot FILE'), |
1116 | 1682 "debugrename": (debugrename, [], 'debugrename FILE [REV]'), |
841
03cc2ba291d1
Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
840
diff
changeset
|
1683 "debugwalk": |
03cc2ba291d1
Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
840
diff
changeset
|
1684 (debugwalk, |
03cc2ba291d1
Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
840
diff
changeset
|
1685 [('I', 'include', [], 'include path in search'), |
03cc2ba291d1
Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
840
diff
changeset
|
1686 ('X', 'exclude', [], 'exclude path from search')], |
913 | 1687 'debugwalk [OPTION]... [FILE]...'), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1688 "^diff": |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1689 (diff, |
757
7000825ef3ba
Updated help strings and test-help:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
755
diff
changeset
|
1690 [('r', 'rev', [], 'revision'), |
1015
22571b8d35d3
Add automatic binary file detection to diff and export
mpm@selenic.com
parents:
1014
diff
changeset
|
1691 ('a', 'text', None, 'treat all files as text'), |
757
7000825ef3ba
Updated help strings and test-help:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
755
diff
changeset
|
1692 ('I', 'include', [], 'include path in search'), |
7000825ef3ba
Updated help strings and test-help:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
755
diff
changeset
|
1693 ('X', 'exclude', [], 'exclude path from search')], |
1054
5139ee9bfc38
Fixed some synopsises in command help.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1053
diff
changeset
|
1694 'hg diff [-a] [-I] [-X] [-r REV1 [-r REV2]] [FILE]...'), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1695 "^export": |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1696 (export, |
1015
22571b8d35d3
Add automatic binary file detection to diff and export
mpm@selenic.com
parents:
1014
diff
changeset
|
1697 [('o', 'output', "", 'output to file'), |
22571b8d35d3
Add automatic binary file detection to diff and export
mpm@selenic.com
parents:
1014
diff
changeset
|
1698 ('a', 'text', None, 'treat all files as text')], |
1054
5139ee9bfc38
Fixed some synopsises in command help.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1053
diff
changeset
|
1699 "hg export [-a] [-o OUTFILE] REV..."), |
841
03cc2ba291d1
Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
840
diff
changeset
|
1700 "forget": |
03cc2ba291d1
Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
840
diff
changeset
|
1701 (forget, |
03cc2ba291d1
Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
840
diff
changeset
|
1702 [('I', 'include', [], 'include path in search'), |
03cc2ba291d1
Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
840
diff
changeset
|
1703 ('X', 'exclude', [], 'exclude path from search')], |
913 | 1704 "hg forget [OPTION]... FILE..."), |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
1705 "grep": |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
1706 (grep, |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
1707 [('0', 'print0', None, 'end fields with NUL'), |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
1708 ('I', 'include', [], 'include path in search'), |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
1709 ('X', 'exclude', [], 'include path in search'), |
1212 | 1710 ('', 'all', None, 'print all revisions with matches'), |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
1711 ('i', 'ignore-case', None, 'ignore case when matching'), |
1146
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
1712 ('l', 'files-with-matches', None, 'print names of files and revs with matches'), |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
1713 ('n', 'line-number', None, 'print line numbers'), |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
1714 ('r', 'rev', [], 'search in revision rev'), |
9061f79c6c6f
grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents:
1145
diff
changeset
|
1715 ('u', 'user', None, 'print user who made change')], |
1108
7a75d8fbbdaf
Remove some options from 'hg grep':
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1106
diff
changeset
|
1716 "hg grep [OPTION]... PATTERN [FILE]..."), |
905
65763ff9fa53
Update online help of hg heads for new --branches option.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
904
diff
changeset
|
1717 "heads": |
65763ff9fa53
Update online help of hg heads for new --branches option.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
904
diff
changeset
|
1718 (heads, |
65763ff9fa53
Update online help of hg heads for new --branches option.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
904
diff
changeset
|
1719 [('b', 'branches', None, 'find branch info')], |
1054
5139ee9bfc38
Fixed some synopsises in command help.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1053
diff
changeset
|
1720 'hg heads [-b]'), |
707
116b2d3f4554
Changed command synopsises to match style of common UNIX tools.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
706
diff
changeset
|
1721 "help": (help_, [], 'hg help [COMMAND]'), |
339
a76fc9c4b67b
added hg identify|id (based on a patch from Andrew Thompson)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
338
diff
changeset
|
1722 "identify|id": (identify, [], 'hg identify'), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1723 "import|patch": |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1724 (import_, |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1725 [('p', 'strip', 1, 'path strip'), |
966
022bcc738389
hg import: abort with uncommitted changes, override with --force
mpm@selenic.com
parents:
965
diff
changeset
|
1726 ('f', 'force', None, 'skip check for outstanding changes'), |
1211 | 1727 ('b', 'base', "", 'base path')], |
1054
5139ee9bfc38
Fixed some synopsises in command help.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1053
diff
changeset
|
1728 "hg import [-f] [-p NUM] [-b BASE] PATCH..."), |
1192
6e165de907c5
Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents:
1191
diff
changeset
|
1729 "incoming|in": (incoming, |
6e165de907c5
Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents:
1191
diff
changeset
|
1730 [('p', 'patch', None, 'show patch')], |
6e165de907c5
Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents:
1191
diff
changeset
|
1731 'hg incoming [-p] [SOURCE]'), |
907
652507dc9fce
Modify init command to take an optional directory to set up.
Bryan O'Sullivan <bos@serpentine.com>
parents:
906
diff
changeset
|
1732 "^init": (init, [], 'hg init [DEST]'), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1733 "locate": |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1734 (locate, |
757
7000825ef3ba
Updated help strings and test-help:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
755
diff
changeset
|
1735 [('r', 'rev', '', 'revision'), |
1113 | 1736 ('0', 'print0', None, 'end filenames with NUL'), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1737 ('f', 'fullpath', None, 'print complete paths'), |
724
1c0c413cccdd
Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
723
diff
changeset
|
1738 ('I', 'include', [], 'include path in search'), |
1c0c413cccdd
Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
723
diff
changeset
|
1739 ('X', 'exclude', [], 'exclude path from search')], |
913 | 1740 'hg locate [OPTION]... [PATTERN]...'), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1741 "^log|history": |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1742 (log, |
1031
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
1743 [('I', 'include', [], 'include path in search'), |
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
1744 ('X', 'exclude', [], 'exclude path from search'), |
1238
6a4f181497c9
Add log -b to show the branch a specific revision lives in
mason@suse.com
parents:
1233
diff
changeset
|
1745 ('b', 'branch', None, 'show branches'), |
1031
503aaf19a040
Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1030
diff
changeset
|
1746 ('r', 'rev', [], 'revision'), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1747 ('p', 'patch', None, 'show patch')], |
1054
5139ee9bfc38
Fixed some synopsises in command help.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1053
diff
changeset
|
1748 'hg log [-I] [-X] [-r REV]... [-p] [FILE]'), |
707
116b2d3f4554
Changed command synopsises to match style of common UNIX tools.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
706
diff
changeset
|
1749 "manifest": (manifest, [], 'hg manifest [REV]'), |
1192
6e165de907c5
Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents:
1191
diff
changeset
|
1750 "outgoing|out": (outgoing, |
6e165de907c5
Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents:
1191
diff
changeset
|
1751 [('p', 'patch', None, 'show patch')], |
6e165de907c5
Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents:
1191
diff
changeset
|
1752 'hg outgoing [-p] [DEST]'), |
707
116b2d3f4554
Changed command synopsises to match style of common UNIX tools.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
706
diff
changeset
|
1753 "parents": (parents, [], 'hg parents [REV]'), |
924
ab681ea2857e
updated help text and added manpage section for hg paths
TK Soh <teekaysoh@yahoo.com>
parents:
921
diff
changeset
|
1754 "paths": (paths, [], 'hg paths [NAME]'), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1755 "^pull": |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1756 (pull, |
963
84355e3e4493
Add -e and --remotecmd for clone and pull too
mpm@selenic.com
parents:
961
diff
changeset
|
1757 [('u', 'update', None, 'update working directory'), |
84355e3e4493
Add -e and --remotecmd for clone and pull too
mpm@selenic.com
parents:
961
diff
changeset
|
1758 ('e', 'ssh', "", 'ssh command'), |
84355e3e4493
Add -e and --remotecmd for clone and pull too
mpm@selenic.com
parents:
961
diff
changeset
|
1759 ('', 'remotecmd', "", 'remote hg command')], |
1054
5139ee9bfc38
Fixed some synopsises in command help.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1053
diff
changeset
|
1760 'hg pull [-u] [-e FILE] [--remotecmd FILE] [SOURCE]'), |
818 | 1761 "^push": |
1762 (push, | |
961 | 1763 [('f', 'force', None, 'force push'), |
1764 ('e', 'ssh', "", 'ssh command'), | |
1765 ('', 'remotecmd', "", 'remote hg command')], | |
1054
5139ee9bfc38
Fixed some synopsises in command help.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1053
diff
changeset
|
1766 'hg push [-f] [-e FILE] [--remotecmd FILE] [DEST]'), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1767 "rawcommit": |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1768 (rawcommit, |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1769 [('p', 'parent', [], 'parent'), |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1770 ('d', 'date', "", 'date code'), |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1771 ('u', 'user', "", 'user'), |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1772 ('F', 'files', "", 'file list'), |
762
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1773 ('m', 'message', "", 'commit message'), |
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1774 ('t', 'text', "", 'commit message (deprecated: use -m)'), |
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1775 ('l', 'logfile', "", 'commit message file')], |
707
116b2d3f4554
Changed command synopsises to match style of common UNIX tools.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
706
diff
changeset
|
1776 'hg rawcommit [OPTION]... [FILE]...'), |
245 | 1777 "recover": (recover, [], "hg recover"), |
1188
b3ceb2d470fc
Fix up remove command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1187
diff
changeset
|
1778 "^remove|rm": (remove, |
b3ceb2d470fc
Fix up remove command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1187
diff
changeset
|
1779 [('I', 'include', [], 'include path in search'), |
b3ceb2d470fc
Fix up remove command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1187
diff
changeset
|
1780 ('X', 'exclude', [], 'exclude path from search')], |
b3ceb2d470fc
Fix up remove command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1187
diff
changeset
|
1781 "hg remove [OPTION]... FILE..."), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1782 "^revert": |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1783 (revert, |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1784 [("n", "nonrecursive", None, "don't recurse into subdirs"), |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1785 ("r", "rev", "", "revision")], |
757
7000825ef3ba
Updated help strings and test-help:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
755
diff
changeset
|
1786 "hg revert [-n] [-r REV] [NAME]..."), |
468 | 1787 "root": (root, [], "hg root"), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1788 "^serve": |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1789 (serve, |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1790 [('A', 'accesslog', '', 'access log file'), |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1791 ('E', 'errorlog', '', 'error log file'), |
938 | 1792 ('p', 'port', 0, 'listen port'), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1793 ('a', 'address', '', 'interface address'), |
938 | 1794 ('n', 'name', "", 'repository name'), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1795 ('', 'stdio', None, 'for remote clients'), |
987 | 1796 ('t', 'templates', "", 'template directory'), |
1797 ('', 'style', "", 'template style'), | |
825
0108c602feb9
Add an option to hg serve to serve file using IPv6
Samuel Tardieu <sam@rfc1149.net>
parents:
824
diff
changeset
|
1798 ('6', 'ipv6', None, 'use IPv6 in addition to IPv4')], |
707
116b2d3f4554
Changed command synopsises to match style of common UNIX tools.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
706
diff
changeset
|
1799 "hg serve [OPTION]..."), |
840
141744605b51
hg status: added options to select files by status.
tksoh@users.sourceforge.net
parents:
839
diff
changeset
|
1800 "^status": |
141744605b51
hg status: added options to select files by status.
tksoh@users.sourceforge.net
parents:
839
diff
changeset
|
1801 (status, |
141744605b51
hg status: added options to select files by status.
tksoh@users.sourceforge.net
parents:
839
diff
changeset
|
1802 [('m', 'modified', None, 'show only modified files'), |
141744605b51
hg status: added options to select files by status.
tksoh@users.sourceforge.net
parents:
839
diff
changeset
|
1803 ('a', 'added', None, 'show only added files'), |
141744605b51
hg status: added options to select files by status.
tksoh@users.sourceforge.net
parents:
839
diff
changeset
|
1804 ('r', 'removed', None, 'show only removed files'), |
141744605b51
hg status: added options to select files by status.
tksoh@users.sourceforge.net
parents:
839
diff
changeset
|
1805 ('u', 'unknown', None, 'show only unknown (not tracked) files'), |
1105
a906b018eaef
Replaced hg status -p/--strip with -n/--no-status to not confuse with patch.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1085
diff
changeset
|
1806 ('n', 'no-status', None, 'hide status prefix'), |
1113 | 1807 ('0', 'print0', None, 'end filenames with NUL'), |
840
141744605b51
hg status: added options to select files by status.
tksoh@users.sourceforge.net
parents:
839
diff
changeset
|
1808 ('I', 'include', [], 'include path in search'), |
141744605b51
hg status: added options to select files by status.
tksoh@users.sourceforge.net
parents:
839
diff
changeset
|
1809 ('X', 'exclude', [], 'exclude path from search')], |
913 | 1810 "hg status [OPTION]... [FILE]..."), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1811 "tag": |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1812 (tag, |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1813 [('l', 'local', None, 'make the tag local'), |
762
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1814 ('m', 'message', "", 'commit message'), |
312b4a10d862
Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
761
diff
changeset
|
1815 ('t', 'text', "", 'commit message (deprecated: use -m)'), |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1816 ('d', 'date', "", 'date code'), |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1817 ('u', 'user', "", 'user')], |
707
116b2d3f4554
Changed command synopsises to match style of common UNIX tools.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
706
diff
changeset
|
1818 'hg tag [OPTION]... NAME [REV]'), |
248 | 1819 "tags": (tags, [], 'hg tags'), |
245 | 1820 "tip": (tip, [], 'hg tip'), |
1218
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1821 "unbundle": |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1822 (unbundle, |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1823 [], |
cde6818e082a
Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents:
1215
diff
changeset
|
1824 'hg unbundle FILE'), |
210 | 1825 "undo": (undo, [], 'hg undo'), |
593 | 1826 "^update|up|checkout|co": |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1827 (update, |
898 | 1828 [('b', 'branch', "", 'checkout the head of a specific branch'), |
1829 ('m', 'merge', None, 'allow merging of conflicts'), | |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1830 ('C', 'clean', None, 'overwrite locally modified files')], |
906
c711930cf15d
Update synopsis for 'hg update', too.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
905
diff
changeset
|
1831 'hg update [-b TAG] [-m] [-C] [REV]'), |
247 | 1832 "verify": (verify, [], 'hg verify'), |
470
0ab093b473c5
Fix up version module name and command conflict
mpm@selenic.com
parents:
468
diff
changeset
|
1833 "version": (show_version, [], 'hg version'), |
1046
772507daaa17
Sort global options by topic: directories, ui, timing, other
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1044
diff
changeset
|
1834 } |
209 | 1835 |
1046
772507daaa17
Sort global options by topic: directories, ui, timing, other
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1044
diff
changeset
|
1836 globalopts = [ |
772507daaa17
Sort global options by topic: directories, ui, timing, other
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1044
diff
changeset
|
1837 ('R', 'repository', "", 'repository root directory'), |
772507daaa17
Sort global options by topic: directories, ui, timing, other
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1044
diff
changeset
|
1838 ('', 'cwd', '', 'change working directory'), |
772507daaa17
Sort global options by topic: directories, ui, timing, other
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1044
diff
changeset
|
1839 ('y', 'noninteractive', None, 'run non-interactively'), |
772507daaa17
Sort global options by topic: directories, ui, timing, other
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1044
diff
changeset
|
1840 ('q', 'quiet', None, 'quiet mode'), |
772507daaa17
Sort global options by topic: directories, ui, timing, other
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1044
diff
changeset
|
1841 ('v', 'verbose', None, 'verbose mode'), |
772507daaa17
Sort global options by topic: directories, ui, timing, other
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1044
diff
changeset
|
1842 ('', 'debug', None, 'debug mode'), |
1225 | 1843 ('', 'debugger', None, 'start debugger'), |
1046
772507daaa17
Sort global options by topic: directories, ui, timing, other
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1044
diff
changeset
|
1844 ('', 'traceback', None, 'print traceback on exception'), |
772507daaa17
Sort global options by topic: directories, ui, timing, other
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1044
diff
changeset
|
1845 ('', 'time', None, 'time how long the command takes'), |
772507daaa17
Sort global options by topic: directories, ui, timing, other
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1044
diff
changeset
|
1846 ('', 'profile', None, 'profile'), |
772507daaa17
Sort global options by topic: directories, ui, timing, other
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1044
diff
changeset
|
1847 ('', 'version', None, 'output version information and exit'), |
1048
7fbb440b2e63
Added options -h/--help.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1047
diff
changeset
|
1848 ('h', 'help', None, 'display help and exit'), |
1046
772507daaa17
Sort global options by topic: directories, ui, timing, other
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1044
diff
changeset
|
1849 ] |
596 | 1850 |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
1851 norepo = ("clone init version help debugconfig debugdata" |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
1852 " debugindex debugindexdot paths") |
209 | 1853 |
212
48398a5353e3
commands: better argument processing, per-command help
mpm@selenic.com
parents:
211
diff
changeset
|
1854 def find(cmd): |
48398a5353e3
commands: better argument processing, per-command help
mpm@selenic.com
parents:
211
diff
changeset
|
1855 for e in table.keys(): |
335 | 1856 if re.match("(%s)$" % e, cmd): |
849
8933ef744325
Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
848
diff
changeset
|
1857 return e, table[e] |
212
48398a5353e3
commands: better argument processing, per-command help
mpm@selenic.com
parents:
211
diff
changeset
|
1858 |
48398a5353e3
commands: better argument processing, per-command help
mpm@selenic.com
parents:
211
diff
changeset
|
1859 raise UnknownCommand(cmd) |
48398a5353e3
commands: better argument processing, per-command help
mpm@selenic.com
parents:
211
diff
changeset
|
1860 |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1861 class SignalInterrupt(Exception): |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1862 """Exception raised on SIGTERM and SIGHUP.""" |
214 | 1863 |
1864 def catchterm(*args): | |
1865 raise SignalInterrupt | |
1866 | |
249 | 1867 def run(): |
1868 sys.exit(dispatch(sys.argv[1:])) | |
1869 | |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1870 class ParseError(Exception): |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1871 """Exception raised on errors in parsing the command line.""" |
592 | 1872 |
596 | 1873 def parse(args): |
209 | 1874 options = {} |
596 | 1875 cmdoptions = {} |
209 | 1876 |
592 | 1877 try: |
596 | 1878 args = fancyopts.fancyopts(args, globalopts, options) |
592 | 1879 except fancyopts.getopt.GetoptError, inst: |
618
4051b78c53c7
Handle unrecognised options correctly.
Bryan O'Sullivan <bos@serpentine.com>
parents:
617
diff
changeset
|
1880 raise ParseError(None, inst) |
209 | 1881 |
1047
a0538ea1ac50
Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1046
diff
changeset
|
1882 if args: |
a0538ea1ac50
Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1046
diff
changeset
|
1883 cmd, args = args[0], args[1:] |
a0538ea1ac50
Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1046
diff
changeset
|
1884 i = find(cmd)[1] |
a0538ea1ac50
Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1046
diff
changeset
|
1885 c = list(i[1]) |
209 | 1886 else: |
1047
a0538ea1ac50
Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1046
diff
changeset
|
1887 cmd = None |
a0538ea1ac50
Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1046
diff
changeset
|
1888 c = [] |
209 | 1889 |
592 | 1890 # combine global options into local |
596 | 1891 for o in globalopts: |
592 | 1892 c.append((o[0], o[1], options[o[1]], o[3])) |
214 | 1893 |
293 | 1894 try: |
596 | 1895 args = fancyopts.fancyopts(args, c, cmdoptions) |
293 | 1896 except fancyopts.getopt.GetoptError, inst: |
596 | 1897 raise ParseError(cmd, inst) |
209 | 1898 |
592 | 1899 # separate global options back out |
596 | 1900 for o in globalopts: |
592 | 1901 n = o[1] |
1902 options[n] = cmdoptions[n] | |
1903 del cmdoptions[n] | |
1904 | |
1047
a0538ea1ac50
Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1046
diff
changeset
|
1905 return (cmd, cmd and i[0] or None, args, options, cmdoptions) |
596 | 1906 |
1907 def dispatch(args): | |
1908 signal.signal(signal.SIGTERM, catchterm) | |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1909 try: |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1910 signal.signal(signal.SIGHUP, catchterm) |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1911 except AttributeError: |
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1912 pass |
596 | 1913 |
1071 | 1914 u = ui.ui() |
1915 external = [] | |
1916 for x in u.extensions(): | |
1917 if x[1]: | |
1918 mod = imp.load_source(x[0], x[1]) | |
1919 else: | |
1920 def importh(name): | |
1921 mod = __import__(name) | |
1922 components = name.split('.') | |
1923 for comp in components[1:]: | |
1924 mod = getattr(mod, comp) | |
1925 return mod | |
1926 mod = importh(x[0]) | |
1927 external.append(mod) | |
1928 for x in external: | |
1929 for t in x.cmdtable: | |
1930 if t in table: | |
1931 u.warn("module %s override %s\n" % (x.__name__, t)) | |
1932 table.update(x.cmdtable) | |
1933 | |
596 | 1934 try: |
1935 cmd, func, args, options, cmdoptions = parse(args) | |
1936 except ParseError, inst: | |
1937 if inst.args[0]: | |
1938 u.warn("hg %s: %s\n" % (inst.args[0], inst.args[1])) | |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1939 help_(u, inst.args[0]) |
596 | 1940 else: |
1941 u.warn("hg: %s\n" % inst.args[1]) | |
848
221628fe9b62
Always show short help when an unknown command is given.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
846
diff
changeset
|
1942 help_(u, 'shortlist') |
596 | 1943 sys.exit(-1) |
1944 except UnknownCommand, inst: | |
1945 u.warn("hg: unknown command '%s'\n" % inst.args[0]) | |
848
221628fe9b62
Always show short help when an unknown command is given.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
846
diff
changeset
|
1946 help_(u, 'shortlist') |
596 | 1947 sys.exit(1) |
1948 | |
783
4b06fc1c0f26
Add a --time command line option to time hg commands
Stephen Darnell
parents:
779
diff
changeset
|
1949 if options["time"]: |
4b06fc1c0f26
Add a --time command line option to time hg commands
Stephen Darnell
parents:
779
diff
changeset
|
1950 def get_times(): |
4b06fc1c0f26
Add a --time command line option to time hg commands
Stephen Darnell
parents:
779
diff
changeset
|
1951 t = os.times() |
4b06fc1c0f26
Add a --time command line option to time hg commands
Stephen Darnell
parents:
779
diff
changeset
|
1952 if t[4] == 0.0: # Windows leaves this as zero, so use time.clock() |
4b06fc1c0f26
Add a --time command line option to time hg commands
Stephen Darnell
parents:
779
diff
changeset
|
1953 t = (t[0], t[1], t[2], t[3], time.clock()) |
4b06fc1c0f26
Add a --time command line option to time hg commands
Stephen Darnell
parents:
779
diff
changeset
|
1954 return t |
4b06fc1c0f26
Add a --time command line option to time hg commands
Stephen Darnell
parents:
779
diff
changeset
|
1955 s = get_times() |
4b06fc1c0f26
Add a --time command line option to time hg commands
Stephen Darnell
parents:
779
diff
changeset
|
1956 def print_time(): |
4b06fc1c0f26
Add a --time command line option to time hg commands
Stephen Darnell
parents:
779
diff
changeset
|
1957 t = get_times() |
4b06fc1c0f26
Add a --time command line option to time hg commands
Stephen Darnell
parents:
779
diff
changeset
|
1958 u.warn("Time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n" % |
4b06fc1c0f26
Add a --time command line option to time hg commands
Stephen Darnell
parents:
779
diff
changeset
|
1959 (t[4]-s[4], t[0]-s[0], t[2]-s[2], t[1]-s[1], t[3]-s[3])) |
4b06fc1c0f26
Add a --time command line option to time hg commands
Stephen Darnell
parents:
779
diff
changeset
|
1960 atexit.register(print_time) |
4b06fc1c0f26
Add a --time command line option to time hg commands
Stephen Darnell
parents:
779
diff
changeset
|
1961 |
1071 | 1962 u.updateopts(options["verbose"], options["debug"], options["quiet"], |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
1963 not options["noninteractive"]) |
592 | 1964 |
1225 | 1965 # enter the debugger before command execution |
1966 if options['debugger']: | |
1967 pdb.set_trace() | |
1968 | |
499 | 1969 try: |
527 | 1970 try: |
1048
7fbb440b2e63
Added options -h/--help.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1047
diff
changeset
|
1971 if options['help']: |
1049
160a68cd393f
Allow --help and --version being used together.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1048
diff
changeset
|
1972 help_(u, cmd, options['version']) |
1048
7fbb440b2e63
Added options -h/--help.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1047
diff
changeset
|
1973 sys.exit(0) |
7fbb440b2e63
Added options -h/--help.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1047
diff
changeset
|
1974 elif options['version']: |
1047
a0538ea1ac50
Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1046
diff
changeset
|
1975 show_version(u) |
a0538ea1ac50
Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1046
diff
changeset
|
1976 sys.exit(0) |
a0538ea1ac50
Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1046
diff
changeset
|
1977 elif not cmd: |
a0538ea1ac50
Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1046
diff
changeset
|
1978 help_(u, 'shortlist') |
a0538ea1ac50
Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1046
diff
changeset
|
1979 sys.exit(0) |
a0538ea1ac50
Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1046
diff
changeset
|
1980 |
1050
9c09094de48c
Moved --cwd handling to a place where ui and exception handling already exists.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1049
diff
changeset
|
1981 if options['cwd']: |
9c09094de48c
Moved --cwd handling to a place where ui and exception handling already exists.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1049
diff
changeset
|
1982 try: |
9c09094de48c
Moved --cwd handling to a place where ui and exception handling already exists.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1049
diff
changeset
|
1983 os.chdir(options['cwd']) |
9c09094de48c
Moved --cwd handling to a place where ui and exception handling already exists.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1049
diff
changeset
|
1984 except OSError, inst: |
1227
e3ea354d99b2
Replace sequences of {ui.warn, return 1} with raise of util.Abort.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1225
diff
changeset
|
1985 raise util.Abort('%s: %s' % |
e3ea354d99b2
Replace sequences of {ui.warn, return 1} with raise of util.Abort.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1225
diff
changeset
|
1986 (options['cwd'], inst.strerror)) |
1050
9c09094de48c
Moved --cwd handling to a place where ui and exception handling already exists.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1049
diff
changeset
|
1987 |
527 | 1988 if cmd not in norepo.split(): |
1989 path = options["repository"] or "" | |
1990 repo = hg.repository(ui=u, path=path) | |
1071 | 1991 for x in external: |
1992 x.reposetup(u, repo) | |
596 | 1993 d = lambda: func(u, repo, *args, **cmdoptions) |
527 | 1994 else: |
596 | 1995 d = lambda: func(u, *args, **cmdoptions) |
209 | 1996 |
527 | 1997 if options['profile']: |
1998 import hotshot, hotshot.stats | |
1999 prof = hotshot.Profile("hg.prof") | |
2000 r = prof.runcall(d) | |
2001 prof.close() | |
2002 stats = hotshot.stats.load("hg.prof") | |
2003 stats.strip_dirs() | |
2004 stats.sort_stats('time', 'calls') | |
2005 stats.print_stats(40) | |
2006 return r | |
2007 else: | |
2008 return d() | |
2009 except: | |
1225 | 2010 # enter the debugger when we hit an exception |
2011 if options['debugger']: | |
2012 pdb.post_mortem(sys.exc_info()[2]) | |
527 | 2013 if options['traceback']: |
2014 traceback.print_exc() | |
2015 raise | |
499 | 2016 except hg.RepoError, inst: |
2017 u.warn("abort: ", inst, "!\n") | |
1214 | 2018 except revlog.RevlogError, inst: |
2019 u.warn("abort: ", inst, "!\n") | |
214 | 2020 except SignalInterrupt: |
2021 u.warn("killed!\n") | |
209 | 2022 except KeyboardInterrupt: |
832
b65773f7db41
Handle broken pipe on pressing Ctrl-C with e.g. 'hg log|grep something'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
818
diff
changeset
|
2023 try: |
b65773f7db41
Handle broken pipe on pressing Ctrl-C with e.g. 'hg log|grep something'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
818
diff
changeset
|
2024 u.warn("interrupted!\n") |
b65773f7db41
Handle broken pipe on pressing Ctrl-C with e.g. 'hg log|grep something'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
818
diff
changeset
|
2025 except IOError, inst: |
b65773f7db41
Handle broken pipe on pressing Ctrl-C with e.g. 'hg log|grep something'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
818
diff
changeset
|
2026 if inst.errno == errno.EPIPE: |
b65773f7db41
Handle broken pipe on pressing Ctrl-C with e.g. 'hg log|grep something'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
818
diff
changeset
|
2027 if u.debugflag: |
b65773f7db41
Handle broken pipe on pressing Ctrl-C with e.g. 'hg log|grep something'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
818
diff
changeset
|
2028 u.warn("\nbroken pipe\n") |
b65773f7db41
Handle broken pipe on pressing Ctrl-C with e.g. 'hg log|grep something'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
818
diff
changeset
|
2029 else: |
b65773f7db41
Handle broken pipe on pressing Ctrl-C with e.g. 'hg log|grep something'.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
818
diff
changeset
|
2030 raise |
250 | 2031 except IOError, inst: |
395 | 2032 if hasattr(inst, "code"): |
2033 u.warn("abort: %s\n" % inst) | |
2034 elif hasattr(inst, "reason"): | |
773 | 2035 u.warn("abort: error: %s\n" % inst.reason[1]) |
395 | 2036 elif hasattr(inst, "args") and inst[0] == errno.EPIPE: |
1065
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
2037 if u.debugflag: |
6e94c0365d98
Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1062
diff
changeset
|
2038 u.warn("broken pipe\n") |
250 | 2039 else: |
2040 raise | |
549 | 2041 except OSError, inst: |
2042 if hasattr(inst, "filename"): | |
2043 u.warn("abort: %s: %s\n" % (inst.strerror, inst.filename)) | |
2044 else: | |
2045 u.warn("abort: %s\n" % inst.strerror) | |
870
a82eae840447
Teach walk code about absolute paths.
Bryan O'Sullivan <bos@serpentine.com>
parents:
868
diff
changeset
|
2046 except util.Abort, inst: |
727
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
2047 u.warn('abort: ', inst.args[0] % inst.args[1:], '\n') |
acee766fcb79
Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents:
726
diff
changeset
|
2048 sys.exit(1) |
212
48398a5353e3
commands: better argument processing, per-command help
mpm@selenic.com
parents:
211
diff
changeset
|
2049 except TypeError, inst: |
48398a5353e3
commands: better argument processing, per-command help
mpm@selenic.com
parents:
211
diff
changeset
|
2050 # was this an argument error? |
48398a5353e3
commands: better argument processing, per-command help
mpm@selenic.com
parents:
211
diff
changeset
|
2051 tb = traceback.extract_tb(sys.exc_info()[2]) |
48398a5353e3
commands: better argument processing, per-command help
mpm@selenic.com
parents:
211
diff
changeset
|
2052 if len(tb) > 2: # no |
48398a5353e3
commands: better argument processing, per-command help
mpm@selenic.com
parents:
211
diff
changeset
|
2053 raise |
293 | 2054 u.debug(inst, "\n") |
596 | 2055 u.warn("%s: invalid arguments\n" % cmd) |
697
cb1be2327220
Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
696
diff
changeset
|
2056 help_(u, cmd) |
848
221628fe9b62
Always show short help when an unknown command is given.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
846
diff
changeset
|
2057 except UnknownCommand, inst: |
221628fe9b62
Always show short help when an unknown command is given.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
846
diff
changeset
|
2058 u.warn("hg: unknown command '%s'\n" % inst.args[0]) |
221628fe9b62
Always show short help when an unknown command is given.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
846
diff
changeset
|
2059 help_(u, 'shortlist') |
1215
8b4435aae40a
Add reporting instructions to unknown exception backtraces
mpm@selenic.com
parents:
1214
diff
changeset
|
2060 except SystemExit: |
1229 | 2061 # don't catch this in the catch-all below |
1215
8b4435aae40a
Add reporting instructions to unknown exception backtraces
mpm@selenic.com
parents:
1214
diff
changeset
|
2062 raise |
8b4435aae40a
Add reporting instructions to unknown exception backtraces
mpm@selenic.com
parents:
1214
diff
changeset
|
2063 except: |
8b4435aae40a
Add reporting instructions to unknown exception backtraces
mpm@selenic.com
parents:
1214
diff
changeset
|
2064 u.warn("** unknown exception encountered, details follow\n") |
8b4435aae40a
Add reporting instructions to unknown exception backtraces
mpm@selenic.com
parents:
1214
diff
changeset
|
2065 u.warn("** report bug details to mercurial@selenic.com\n") |
8b4435aae40a
Add reporting instructions to unknown exception backtraces
mpm@selenic.com
parents:
1214
diff
changeset
|
2066 raise |
293 | 2067 |
503
c6a2e41c8c60
Fix troubles with clone and exception handling
mpm@selenic.com
parents:
500
diff
changeset
|
2068 sys.exit(-1) |