annotate hgext/hgk.py @ 32207:176ed32dc159 stable

win32mbcs: wrap underlying pycompat.bytestr to use checkwinfilename safely win32mbcs wraps some functions, to prevent them from unintentionally treating backslash (0x5c), which is used as the second or later byte of multi bytes characters by problematic encodings, as a path component delimiter on Windows platform. This wrapping assumes that wrapped functions can safely accept unicode string arguments. Unfortunately, d1937bdcee8c broke this assumption by introducing pycompat.bytestr() into util.checkwinfilename() for py3 support. After that, wrapped checkwinfilename() always fails for non-ASCII filename at pycompat.bytestr() invocation. This patch wraps underlying pycompat.bytestr() function to use util.checkwinfilename() safely. To avoid similar regression in the future, another patch series will add smoke testing on default branch.
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Fri, 12 May 2017 21:46:14 +0900
parents dddc4812aa7a
children 46ba2cdda476
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
1 # Minimal support for git commands on an hg repository
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
2 #
2859
345bac2bc4ec update copyrights.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2744
diff changeset
3 # Copyright 2005, 2006 Chris Mason <mason@suse.com>
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
4 #
8225
46293a0c7e9f updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents: 7992
diff changeset
5 # This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 9467
diff changeset
6 # GNU General Public License version 2 or any later version.
8228
eee2319c5895 add blank line after copyright notices and after header
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
7
8894
868670dbc237 extensions: improve the consistency of synopses
Cédric Duval <cedricduval@free.fr>
parents: 8866
diff changeset
8 '''browse the repository in a graphical way
6666
53465a7464e2 convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6616
diff changeset
9
9261
1a9a650004b6 hgk: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9209
diff changeset
10 The hgk extension allows browsing the history of a repository in a
1a9a650004b6 hgk: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9209
diff changeset
11 graphical way. It requires Tcl/Tk version 8.4 or later. (Tcl/Tk is not
1a9a650004b6 hgk: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9209
diff changeset
12 distributed with Mercurial.)
6666
53465a7464e2 convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6616
diff changeset
13
9261
1a9a650004b6 hgk: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9209
diff changeset
14 hgk consists of two parts: a Tcl script that does the displaying and
1a9a650004b6 hgk: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9209
diff changeset
15 querying of information, and an extension to Mercurial named hgk.py,
1a9a650004b6 hgk: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9209
diff changeset
16 which provides hooks for hgk to get information. hgk can be found in
1a9a650004b6 hgk: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9209
diff changeset
17 the contrib directory, and the extension is shipped in the hgext
1a9a650004b6 hgk: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9209
diff changeset
18 repository, and needs to be enabled.
6666
53465a7464e2 convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6616
diff changeset
19
11193
687c7d395f20 Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents: 10394
diff changeset
20 The :hg:`view` command will launch the hgk Tcl script. For this command
9261
1a9a650004b6 hgk: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9209
diff changeset
21 to work, hgk must be in your search path. Alternately, you can specify
12083
ebfc46929f3e help: refer to user configuration file more consistently
Brodie Rao <brodie@bitheap.org>
parents: 11321
diff changeset
22 the path to hgk in your configuration file::
6666
53465a7464e2 convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6616
diff changeset
23
53465a7464e2 convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6616
diff changeset
24 [hgk]
25793
084957666642 hgk: tweak doc format for path option
Matt Mackall <mpm@selenic.com>
parents: 25186
diff changeset
25 path = /location/of/hgk
6666
53465a7464e2 convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6616
diff changeset
26
9261
1a9a650004b6 hgk: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9209
diff changeset
27 hgk can make use of the extdiff extension to visualize revisions.
1a9a650004b6 hgk: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9209
diff changeset
28 Assuming you had already configured extdiff vdiff command, just add::
6666
53465a7464e2 convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6616
diff changeset
29
53465a7464e2 convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6616
diff changeset
30 [hgk]
53465a7464e2 convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6616
diff changeset
31 vdiff=vdiff
53465a7464e2 convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6616
diff changeset
32
9261
1a9a650004b6 hgk: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9209
diff changeset
33 Revisions context menu will now display additional entries to fire
1a9a650004b6 hgk: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9209
diff changeset
34 vdiff on hovered and selected revisions.
9063
0772889d8a65 hgk: wrapped docstrings at 78 characters
Martin Geisler <mg@lazybytes.net>
parents: 8946
diff changeset
35 '''
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
36
29125
9b12517a7081 py3: make hgext/hgk.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 25793
diff changeset
37 from __future__ import absolute_import
9b12517a7081 py3: make hgext/hgk.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 25793
diff changeset
38
5878
d39af2eabb8c transform a bunch of print statements to appropriate ui calls
Matt Mackall <mpm@selenic.com>
parents: 5859
diff changeset
39 import os
29205
a0939666b836 py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents: 29125
diff changeset
40
a0939666b836 py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents: 29125
diff changeset
41 from mercurial.i18n import _
a0939666b836 py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents: 29125
diff changeset
42 from mercurial.node import (
a0939666b836 py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents: 29125
diff changeset
43 nullid,
a0939666b836 py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents: 29125
diff changeset
44 nullrev,
a0939666b836 py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents: 29125
diff changeset
45 short,
a0939666b836 py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents: 29125
diff changeset
46 )
29125
9b12517a7081 py3: make hgext/hgk.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 25793
diff changeset
47 from mercurial import (
9b12517a7081 py3: make hgext/hgk.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 25793
diff changeset
48 cmdutil,
9b12517a7081 py3: make hgext/hgk.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 25793
diff changeset
49 commands,
9b12517a7081 py3: make hgext/hgk.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 25793
diff changeset
50 obsolete,
9b12517a7081 py3: make hgext/hgk.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 25793
diff changeset
51 patch,
9b12517a7081 py3: make hgext/hgk.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 25793
diff changeset
52 scmutil,
9b12517a7081 py3: make hgext/hgk.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 25793
diff changeset
53 )
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
54
21250
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
55 cmdtable = {}
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
56 command = cmdutil.command(cmdtable)
29841
d5883fd055c6 extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents: 29397
diff changeset
57 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
25186
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 24604
diff changeset
58 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 24604
diff changeset
59 # be specifying the version(s) of Mercurial they are tested with, or
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 24604
diff changeset
60 # leave the attribute unspecified.
29841
d5883fd055c6 extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents: 29397
diff changeset
61 testedwith = 'ships-with-hg-core'
16743
38caf405d010 hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents: 16683
diff changeset
62
21250
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
63 @command('debug-diff-tree',
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
64 [('p', 'patch', None, _('generate patch')),
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
65 ('r', 'recursive', None, _('recursive')),
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
66 ('P', 'pretty', None, _('pretty')),
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
67 ('s', 'stdin', None, _('stdin')),
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
68 ('C', 'copy', None, _('detect copies')),
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
69 ('S', 'search', "", _('search'))],
24511
0ecc1e42ff3f hgk: remove repetitious (and wrong) command syntax descriptions
Andrew Shadura <andrew@shadura.me>
parents: 23451
diff changeset
70 ('[OPTION]... NODE1 NODE2 [FILE]...'),
21783
82bf4d89e068 hgk: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21250
diff changeset
71 inferrepo=True)
3063
aa1cee5b8afb hgk.py: add an optional file list to debug-diff-tree
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3059
diff changeset
72 def difftree(ui, repo, node1=None, node2=None, *files, **opts):
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
73 """diff trees from two commits"""
31409
dddc4812aa7a hgk: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31203
diff changeset
74 def __difftree(repo, node1, node2, files=None):
3978
ee5663cb4406 hgk: remove unused code, node2 is always set
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3963
diff changeset
75 assert node2 is not None
31409
dddc4812aa7a hgk: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31203
diff changeset
76 if files is None:
dddc4812aa7a hgk: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31203
diff changeset
77 files = []
6747
f6c00b17387c use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents: 6666
diff changeset
78 mmap = repo[node1].manifest()
f6c00b17387c use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents: 6666
diff changeset
79 mmap2 = repo[node2].manifest()
14671
35c2cc322ba8 scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents: 14322
diff changeset
80 m = scmutil.match(repo[node1], files)
6760
4faaa0535ea7 status: clean up all users for unknown files
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
81 modified, added, removed = repo.status(node1, node2, m)[:3]
6217
fe8dbbe9520d Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents: 6212
diff changeset
82 empty = short(nullid)
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
83
1618
ff339dd21976 Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1614
diff changeset
84 for f in modified:
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
85 # TODO get file permissions
29397
844f72885fb9 check-code: detect "missing _() in ui message" more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29205
diff changeset
86 ui.write((":100664 100664 %s %s M\t%s\t%s\n") %
6217
fe8dbbe9520d Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents: 6212
diff changeset
87 (short(mmap[f]), short(mmap2[f]), f, f))
1618
ff339dd21976 Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1614
diff changeset
88 for f in added:
29397
844f72885fb9 check-code: detect "missing _() in ui message" more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29205
diff changeset
89 ui.write((":000000 100664 %s %s N\t%s\t%s\n") %
6217
fe8dbbe9520d Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents: 6212
diff changeset
90 (empty, short(mmap2[f]), f, f))
1618
ff339dd21976 Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1614
diff changeset
91 for f in removed:
29397
844f72885fb9 check-code: detect "missing _() in ui message" more exactly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29205
diff changeset
92 ui.write((":100664 000000 %s %s D\t%s\t%s\n") %
6217
fe8dbbe9520d Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents: 6212
diff changeset
93 (short(mmap[f]), empty, f, f))
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
94 ##
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
95
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
96 while True:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
97 if opts['stdin']:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
98 try:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
99 line = raw_input().split(' ')
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
100 node1 = line[0]
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
101 if len(line) > 1:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
102 node2 = line[1]
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
103 else:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
104 node2 = None
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
105 except EOFError:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
106 break
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
107 node1 = repo.lookup(node1)
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
108 if node2:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
109 node2 = repo.lookup(node2)
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
110 else:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
111 node2 = node1
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
112 node1 = repo.changelog.parents(node1)[0]
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
113 if opts['patch']:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
114 if opts['pretty']:
5878
d39af2eabb8c transform a bunch of print statements to appropriate ui calls
Matt Mackall <mpm@selenic.com>
parents: 5859
diff changeset
115 catcommit(ui, repo, node2, "")
14671
35c2cc322ba8 scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents: 14322
diff changeset
116 m = scmutil.match(repo[node1], files)
23451
5fb1fc2e1281 hgk: don't honor whitespace and format-changing diffopts
Siddharth Agarwal <sid0@fb.com>
parents: 23270
diff changeset
117 diffopts = patch.difffeatureopts(ui)
5fb1fc2e1281 hgk: don't honor whitespace and format-changing diffopts
Siddharth Agarwal <sid0@fb.com>
parents: 23270
diff changeset
118 diffopts.git = True
7308
b6f5490effbf patch: turn patch.diff() into a generator
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7000
diff changeset
119 chunks = patch.diff(repo, node1, node2, match=m,
23451
5fb1fc2e1281 hgk: don't honor whitespace and format-changing diffopts
Siddharth Agarwal <sid0@fb.com>
parents: 23270
diff changeset
120 opts=diffopts)
7308
b6f5490effbf patch: turn patch.diff() into a generator
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7000
diff changeset
121 for chunk in chunks:
8615
94ca38e63576 use ui instead of repo.ui when the former is in scope
Martin Geisler <mg@lazybytes.net>
parents: 8459
diff changeset
122 ui.write(chunk)
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
123 else:
3063
aa1cee5b8afb hgk.py: add an optional file list to debug-diff-tree
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3059
diff changeset
124 __difftree(repo, node1, node2, files=files)
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
125 if not opts['stdin']:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
126 break
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
127
5878
d39af2eabb8c transform a bunch of print statements to appropriate ui calls
Matt Mackall <mpm@selenic.com>
parents: 5859
diff changeset
128 def catcommit(ui, repo, n, prefix, ctx=None):
10394
4612cded5176 fix coding style (reported by pylint)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10282
diff changeset
129 nlprefix = '\n' + prefix
3979
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
130 if ctx is None:
6747
f6c00b17387c use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents: 6666
diff changeset
131 ctx = repo[n]
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 14671
diff changeset
132 # use ctx.node() instead ??
17956
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17773
diff changeset
133 ui.write(("tree %s\n" % short(ctx.changeset()[0])))
6768
e3bb005373b1 hgk: fix parent breakage
Matt Mackall <mpm@selenic.com>
parents: 6760
diff changeset
134 for p in ctx.parents():
17956
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17773
diff changeset
135 ui.write(("parent %s\n" % p))
6768
e3bb005373b1 hgk: fix parent breakage
Matt Mackall <mpm@selenic.com>
parents: 6760
diff changeset
136
3979
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
137 date = ctx.date()
4039
cc08d2543593 hgk: remove embedded nulls in descriptions
Matt Mackall <mpm@selenic.com>
parents: 3981
diff changeset
138 description = ctx.description().replace("\0", "")
24604
ce8dd4fd2d5d hgk: display committer name when set by hg-git
Andrew Shadura <andrew@shadura.me>
parents: 24517
diff changeset
139 ui.write(("author %s %s %s\n" % (ctx.user(), int(date[0]), date[1])))
1308
2073e5a71008 Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1278
diff changeset
140
24604
ce8dd4fd2d5d hgk: display committer name when set by hg-git
Andrew Shadura <andrew@shadura.me>
parents: 24517
diff changeset
141 if 'committer' in ctx.extra():
ce8dd4fd2d5d hgk: display committer name when set by hg-git
Andrew Shadura <andrew@shadura.me>
parents: 24517
diff changeset
142 ui.write(("committer %s\n" % ctx.extra()['committer']))
ce8dd4fd2d5d hgk: display committer name when set by hg-git
Andrew Shadura <andrew@shadura.me>
parents: 24517
diff changeset
143
17956
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17773
diff changeset
144 ui.write(("revision %d\n" % ctx.rev()))
18807
cf72fd8b3072 hgk: add support for phases
Andrew Shadura <bugzilla@tut.by>
parents: 17959
diff changeset
145 ui.write(("branch %s\n" % ctx.branch()))
24513
b5a0b2374eb6 hgk: display obsolete changesets in darkgrey
Andrew Shadura <andrew@shadura.me>
parents: 24512
diff changeset
146 if obsolete.isenabled(repo, obsolete.createmarkersopt):
b5a0b2374eb6 hgk: display obsolete changesets in darkgrey
Andrew Shadura <andrew@shadura.me>
parents: 24512
diff changeset
147 if ctx.obsolete():
b5a0b2374eb6 hgk: display obsolete changesets in darkgrey
Andrew Shadura <andrew@shadura.me>
parents: 24512
diff changeset
148 ui.write(("obsolete\n"))
18807
cf72fd8b3072 hgk: add support for phases
Andrew Shadura <bugzilla@tut.by>
parents: 17959
diff changeset
149 ui.write(("phase %s\n\n" % ctx.phasestr()))
5878
d39af2eabb8c transform a bunch of print statements to appropriate ui calls
Matt Mackall <mpm@selenic.com>
parents: 5859
diff changeset
150
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
151 if prefix != "":
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 14671
diff changeset
152 ui.write("%s%s\n" % (prefix,
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 14671
diff changeset
153 description.replace('\n', nlprefix).strip()))
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
154 else:
5878
d39af2eabb8c transform a bunch of print statements to appropriate ui calls
Matt Mackall <mpm@selenic.com>
parents: 5859
diff changeset
155 ui.write(description + "\n")
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
156 if prefix:
5878
d39af2eabb8c transform a bunch of print statements to appropriate ui calls
Matt Mackall <mpm@selenic.com>
parents: 5859
diff changeset
157 ui.write('\0')
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
158
24511
0ecc1e42ff3f hgk: remove repetitious (and wrong) command syntax descriptions
Andrew Shadura <andrew@shadura.me>
parents: 23451
diff changeset
159 @command('debug-merge-base', [], _('REV REV'))
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
160 def base(ui, repo, node1, node2):
7598
26adfaccdf73 lowercase help output
Martin Geisler <mg@daimi.au.dk>
parents: 7308
diff changeset
161 """output common ancestor information"""
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
162 node1 = repo.lookup(node1)
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
163 node2 = repo.lookup(node2)
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
164 n = repo.changelog.ancestor(node1, node2)
6217
fe8dbbe9520d Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents: 6212
diff changeset
165 ui.write(short(n) + "\n")
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
166
21250
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
167 @command('debug-cat-file',
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
168 [('s', 'stdin', None, _('stdin'))],
24511
0ecc1e42ff3f hgk: remove repetitious (and wrong) command syntax descriptions
Andrew Shadura <andrew@shadura.me>
parents: 23451
diff changeset
169 _('[OPTION]... TYPE FILE'),
21783
82bf4d89e068 hgk: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21250
diff changeset
170 inferrepo=True)
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
171 def catfile(ui, repo, type=None, r=None, **opts):
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
172 """cat a specific revision"""
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
173 # in stdin mode, every line except the commit is prefixed with two
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
174 # spaces. This way the our caller can find the commit without magic
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
175 # strings
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
176 #
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
177 prefix = ""
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
178 if opts['stdin']:
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
179 try:
10394
4612cded5176 fix coding style (reported by pylint)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10282
diff changeset
180 (type, r) = raw_input().split(' ')
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
181 prefix = " "
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
182 except EOFError:
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
183 return
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
184
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
185 else:
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
186 if not type or not r:
6958
e01ed40a31a2 i18n: mark strings for translation in hgk extension
Martin Geisler <mg@daimi.au.dk>
parents: 6812
diff changeset
187 ui.warn(_("cat-file: type or revision not supplied\n"))
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
188 commands.help_(ui, 'cat-file')
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
189
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
190 while r:
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
191 if type != "commit":
6958
e01ed40a31a2 i18n: mark strings for translation in hgk extension
Martin Geisler <mg@daimi.au.dk>
parents: 6812
diff changeset
192 ui.warn(_("aborting hg cat-file only understands commits\n"))
10394
4612cded5176 fix coding style (reported by pylint)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10282
diff changeset
193 return 1
720
095dd8c757e0 Change hgit revision lookup to use repo.lookup
mason@suse.com
parents: 719
diff changeset
194 n = repo.lookup(r)
5878
d39af2eabb8c transform a bunch of print statements to appropriate ui calls
Matt Mackall <mpm@selenic.com>
parents: 5859
diff changeset
195 catcommit(ui, repo, n, prefix)
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
196 if opts['stdin']:
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
197 try:
10394
4612cded5176 fix coding style (reported by pylint)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10282
diff changeset
198 (type, r) = raw_input().split(' ')
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
199 except EOFError:
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
200 break
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
201 else:
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
202 break
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
203
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
204 # git rev-tree is a confusing thing. You can supply a number of
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
205 # commit sha1s on the command line, and it walks the commit history
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
206 # telling you which commits are reachable from the supplied ones via
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
207 # a bitmask based on arg position.
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
208 # you can specify a commit to stop at by starting the sha1 with ^
5878
d39af2eabb8c transform a bunch of print statements to appropriate ui calls
Matt Mackall <mpm@selenic.com>
parents: 5859
diff changeset
209 def revtree(ui, args, repo, full="tree", maxnr=0, parents=False):
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
210 def chlogwalk():
6750
fb42030d79d6 add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents: 6747
diff changeset
211 count = len(repo)
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
212 i = count
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
213 l = [0] * 100
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
214 chunk = 100
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
215 while True:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
216 if chunk > i:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
217 chunk = i
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
218 i = 0
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
219 else:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
220 i -= chunk
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
221
8624
2b3dec0ef3ae replace xrange(0, n) with xrange(n)
Martin Geisler <mg@lazybytes.net>
parents: 8615
diff changeset
222 for x in xrange(chunk):
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
223 if i + x >= count:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
224 l[chunk - x:] = [0] * (chunk - x)
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
225 break
13031
3da456d0c885 code style: prefer 'is' and 'is not' tests with singletons
Martin Geisler <mg@aragost.com>
parents: 12083
diff changeset
226 if full is not None:
22580
271a1ddad1fb hgk: don't break on repositories with obsolete changesets
Andrew Shadura <andrew@shadura.me>
parents: 21783
diff changeset
227 if (i + x) in repo:
271a1ddad1fb hgk: don't break on repositories with obsolete changesets
Andrew Shadura <andrew@shadura.me>
parents: 21783
diff changeset
228 l[x] = repo[i + x]
271a1ddad1fb hgk: don't break on repositories with obsolete changesets
Andrew Shadura <andrew@shadura.me>
parents: 21783
diff changeset
229 l[x].changeset() # force reading
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
230 else:
22580
271a1ddad1fb hgk: don't break on repositories with obsolete changesets
Andrew Shadura <andrew@shadura.me>
parents: 21783
diff changeset
231 if (i + x) in repo:
271a1ddad1fb hgk: don't break on repositories with obsolete changesets
Andrew Shadura <andrew@shadura.me>
parents: 21783
diff changeset
232 l[x] = 1
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10263
diff changeset
233 for x in xrange(chunk - 1, -1, -1):
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
234 if l[x] != 0:
13031
3da456d0c885 code style: prefer 'is' and 'is not' tests with singletons
Martin Geisler <mg@aragost.com>
parents: 12083
diff changeset
235 yield (i + x, full is not None and l[x] or None)
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
236 if i == 0:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
237 break
1308
2073e5a71008 Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1278
diff changeset
238
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
239 # calculate and return the reachability bitmask for sha
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
240 def is_reachable(ar, reachable, sha):
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
241 if len(ar) == 0:
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
242 return 1
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
243 mask = 0
3473
0e68608bd11d use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3180
diff changeset
244 for i in xrange(len(ar)):
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
245 if sha in reachable[i]:
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
246 mask |= 1 << i
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
247
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
248 return mask
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
249
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
250 reachable = []
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
251 stop_sha1 = []
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
252 want_sha1 = []
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
253 count = 0
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
254
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
255 # figure out which commits they are asking for and which ones they
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
256 # want us to stop on
8632
9e055cfdd620 replace "i in range(len(xs))" with "i, x in enumerate(xs)"
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
257 for i, arg in enumerate(args):
9e055cfdd620 replace "i in range(len(xs))" with "i, x in enumerate(xs)"
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
258 if arg.startswith('^'):
9e055cfdd620 replace "i in range(len(xs))" with "i, x in enumerate(xs)"
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
259 s = repo.lookup(arg[1:])
720
095dd8c757e0 Change hgit revision lookup to use repo.lookup
mason@suse.com
parents: 719
diff changeset
260 stop_sha1.append(s)
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
261 want_sha1.append(s)
8632
9e055cfdd620 replace "i in range(len(xs))" with "i, x in enumerate(xs)"
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
262 elif arg != 'HEAD':
9e055cfdd620 replace "i in range(len(xs))" with "i, x in enumerate(xs)"
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
263 want_sha1.append(repo.lookup(arg))
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
264
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
265 # calculate the graph for the supplied commits
8632
9e055cfdd620 replace "i in range(len(xs))" with "i, x in enumerate(xs)"
Martin Geisler <mg@lazybytes.net>
parents: 8624
diff changeset
266 for i, n in enumerate(want_sha1):
10394
4612cded5176 fix coding style (reported by pylint)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10282
diff changeset
267 reachable.append(set())
4612cded5176 fix coding style (reported by pylint)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10282
diff changeset
268 visit = [n]
8459
1e63816ce8a2 hgk: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8228
diff changeset
269 reachable[i].add(n)
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
270 while visit:
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
271 n = visit.pop(0)
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
272 if n in stop_sha1:
1243
9d10f89b75a5 Fix hgit revtree bug with stop revision handling
root@coffee.suse.com
parents: 1239
diff changeset
273 continue
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
274 for p in repo.changelog.parents(n):
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
275 if p not in reachable[i]:
8459
1e63816ce8a2 hgk: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8228
diff changeset
276 reachable[i].add(p)
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
277 visit.append(p)
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
278 if p in stop_sha1:
1243
9d10f89b75a5 Fix hgit revtree bug with stop revision handling
root@coffee.suse.com
parents: 1239
diff changeset
279 continue
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
280
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
281 # walk the repository looking for commits that are in our
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
282 # reachability graph
3979
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
283 for i, ctx in chlogwalk():
22580
271a1ddad1fb hgk: don't break on repositories with obsolete changesets
Andrew Shadura <andrew@shadura.me>
parents: 21783
diff changeset
284 if i not in repo:
271a1ddad1fb hgk: don't break on repositories with obsolete changesets
Andrew Shadura <andrew@shadura.me>
parents: 21783
diff changeset
285 continue
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
286 n = repo.changelog.node(i)
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
287 mask = is_reachable(want_sha1, reachable, n)
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
288 if mask:
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
289 parentstr = ""
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
290 if parents:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
291 pp = repo.changelog.parents(n)
6217
fe8dbbe9520d Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents: 6212
diff changeset
292 if pp[0] != nullid:
fe8dbbe9520d Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents: 6212
diff changeset
293 parentstr += " " + short(pp[0])
fe8dbbe9520d Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents: 6212
diff changeset
294 if pp[1] != nullid:
fe8dbbe9520d Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents: 6212
diff changeset
295 parentstr += " " + short(pp[1])
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
296 if not full:
6217
fe8dbbe9520d Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents: 6212
diff changeset
297 ui.write("%s%s\n" % (short(n), parentstr))
3064
fe5c92529d1c hgk.py: fix warnings from pychecker
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3063
diff changeset
298 elif full == "commit":
6217
fe8dbbe9520d Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents: 6212
diff changeset
299 ui.write("%s%s\n" % (short(n), parentstr))
5878
d39af2eabb8c transform a bunch of print statements to appropriate ui calls
Matt Mackall <mpm@selenic.com>
parents: 5859
diff changeset
300 catcommit(ui, repo, n, ' ', ctx)
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
301 else:
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
302 (p1, p2) = repo.changelog.parents(n)
6217
fe8dbbe9520d Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents: 6212
diff changeset
303 (h, h1, h2) = map(short, (n, p1, p2))
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
304 (i1, i2) = map(repo.changelog.rev, (p1, p2))
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
305
3979
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
306 date = ctx.date()[0]
5878
d39af2eabb8c transform a bunch of print statements to appropriate ui calls
Matt Mackall <mpm@selenic.com>
parents: 5859
diff changeset
307 ui.write("%s %s:%s" % (date, h, mask))
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
308 mask = is_reachable(want_sha1, reachable, p1)
6217
fe8dbbe9520d Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents: 6212
diff changeset
309 if i1 != nullrev and mask > 0:
5878
d39af2eabb8c transform a bunch of print statements to appropriate ui calls
Matt Mackall <mpm@selenic.com>
parents: 5859
diff changeset
310 ui.write("%s:%s " % (h1, mask)),
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
311 mask = is_reachable(want_sha1, reachable, p2)
6217
fe8dbbe9520d Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents: 6212
diff changeset
312 if i2 != nullrev and mask > 0:
5878
d39af2eabb8c transform a bunch of print statements to appropriate ui calls
Matt Mackall <mpm@selenic.com>
parents: 5859
diff changeset
313 ui.write("%s:%s " % (h2, mask))
d39af2eabb8c transform a bunch of print statements to appropriate ui calls
Matt Mackall <mpm@selenic.com>
parents: 5859
diff changeset
314 ui.write("\n")
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
315 if maxnr and count >= maxnr:
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
316 break
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
317 count += 1
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
318
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
319 # git rev-list tries to order things by date, and has the ability to stop
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
320 # at a given commit without walking the whole repo. TODO add the stop
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
321 # parameter
21250
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
322 @command('debug-rev-list',
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
323 [('H', 'header', None, _('header')),
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
324 ('t', 'topo-order', None, _('topo-order')),
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
325 ('p', 'parents', None, _('parents')),
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
326 ('n', 'max-count', 0, _('max-count'))],
24511
0ecc1e42ff3f hgk: remove repetitious (and wrong) command syntax descriptions
Andrew Shadura <andrew@shadura.me>
parents: 23451
diff changeset
327 ('[OPTION]... REV...'))
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
328 def revlist(ui, repo, *revs, **opts):
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
329 """print revisions"""
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
330 if opts['header']:
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
331 full = "commit"
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
332 else:
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
333 full = None
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
334 copy = [x for x in revs]
5878
d39af2eabb8c transform a bunch of print statements to appropriate ui calls
Matt Mackall <mpm@selenic.com>
parents: 5859
diff changeset
335 revtree(ui, copy, repo, full, opts['max_count'], opts['parents'])
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
336
21250
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
337 @command('view',
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
338 [('l', 'limit', '',
8d354d58147c hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 18816
diff changeset
339 _('limit number of changes displayed'), _('NUM'))],
24511
0ecc1e42ff3f hgk: remove repetitious (and wrong) command syntax descriptions
Andrew Shadura <andrew@shadura.me>
parents: 23451
diff changeset
340 _('[-l LIMIT] [REVRANGE]'))
3093
edefbb3a3b08 hgk: add --limit, and revranges
Brendan Cully <brendan@kublai.com>
parents: 3092
diff changeset
341 def view(ui, repo, *etc, **opts):
1278
6a0d373d3126 hgit -> hgk.py
mpm@selenic.com
parents: 1243
diff changeset
342 "start interactive history viewer"
6a0d373d3126 hgit -> hgk.py
mpm@selenic.com
parents: 1243
diff changeset
343 os.chdir(repo.root)
3180
eb0906ebba81 hgk: fix mixup of --limit and REVRANGE in hgk call
TK Soh <teekaysoh@yahoo.com>
parents: 3093
diff changeset
344 optstr = ' '.join(['--%s %s' % (k, v) for k, v in opts.iteritems() if v])
24512
e5c5ddc3b172 hgk: pass --hidden switch to hg subprocesses when needed
Andrew Shadura <andrew@shadura.me>
parents: 24511
diff changeset
345 if repo.filtername is None:
e5c5ddc3b172 hgk: pass --hidden switch to hg subprocesses when needed
Andrew Shadura <andrew@shadura.me>
parents: 24511
diff changeset
346 optstr += '--hidden'
e5c5ddc3b172 hgk: pass --hidden switch to hg subprocesses when needed
Andrew Shadura <andrew@shadura.me>
parents: 24511
diff changeset
347
3180
eb0906ebba81 hgk: fix mixup of --limit and REVRANGE in hgk call
TK Soh <teekaysoh@yahoo.com>
parents: 3093
diff changeset
348 cmd = ui.config("hgk", "path", "hgk") + " %s %s" % (optstr, " ".join(etc))
9467
4c041f1ee1b4 do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents: 9261
diff changeset
349 ui.debug("running %s\n" % cmd)
31203
a8e4322f64c1 hgk: set a blocked tag when the user invokes view
Simon Farnsworth <simonfar@fb.com>
parents: 29841
diff changeset
350 ui.system(cmd, blockedtag='hgk_view')