author | Mitchell Plamann <mplamann@janestreet.com> |
Mon, 05 Oct 2020 13:23:16 -0400 | |
changeset 45736 | 2c6b054e22d0 |
parent 44676 | 1756f75873bf |
child 45942 | 89a2afe31e82 |
permissions | -rw-r--r-- |
267 | 1 |
# Minimal support for git commands on an hg repository |
2 |
# |
|
2859 | 3 |
# Copyright 2005, 2006 Chris Mason <mason@suse.com> |
267 | 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 | 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 | 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 |
commands, |
9b12517a7081
py3: make hgext/hgk.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
25793
diff
changeset
|
49 |
obsolete, |
9b12517a7081
py3: make hgext/hgk.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
25793
diff
changeset
|
50 |
patch, |
34998
fc0e6d298cd4
py3: handle keyword arguments in hgext/hgk.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34499
diff
changeset
|
51 |
pycompat, |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
31409
diff
changeset
|
52 |
registrar, |
29125
9b12517a7081
py3: make hgext/hgk.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
25793
diff
changeset
|
53 |
scmutil, |
9b12517a7081
py3: make hgext/hgk.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
25793
diff
changeset
|
54 |
) |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
55 |
|
21250
8d354d58147c
hgk: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
18816
diff
changeset
|
56 |
cmdtable = {} |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
31409
diff
changeset
|
57 |
command = registrar.command(cmdtable) |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29397
diff
changeset
|
58 |
# 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
|
59 |
# 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
|
60 |
# 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
|
61 |
# leave the attribute unspecified. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
62 |
testedwith = b'ships-with-hg-core' |
16743
38caf405d010
hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents:
16683
diff
changeset
|
63 |
|
34499
b8f74c4d188f
configitems: register the 'hgk.path' config
Boris Feld <boris.feld@octobus.net>
parents:
33839
diff
changeset
|
64 |
configtable = {} |
b8f74c4d188f
configitems: register the 'hgk.path' config
Boris Feld <boris.feld@octobus.net>
parents:
33839
diff
changeset
|
65 |
configitem = registrar.configitem(configtable) |
b8f74c4d188f
configitems: register the 'hgk.path' config
Boris Feld <boris.feld@octobus.net>
parents:
33839
diff
changeset
|
66 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
67 |
configitem( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
68 |
b'hgk', b'path', default=b'hgk', |
34499
b8f74c4d188f
configitems: register the 'hgk.path' config
Boris Feld <boris.feld@octobus.net>
parents:
33839
diff
changeset
|
69 |
) |
b8f74c4d188f
configitems: register the 'hgk.path' config
Boris Feld <boris.feld@octobus.net>
parents:
33839
diff
changeset
|
70 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
71 |
|
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
72 |
@command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
73 |
b'debug-diff-tree', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
74 |
[ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
75 |
(b'p', b'patch', None, _(b'generate patch')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
76 |
(b'r', b'recursive', None, _(b'recursive')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
77 |
(b'P', b'pretty', None, _(b'pretty')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
78 |
(b's', b'stdin', None, _(b'stdin')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
79 |
(b'C', b'copy', None, _(b'detect copies')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
80 |
(b'S', b'search', b"", _(b'search')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
81 |
], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
82 |
b'[OPTION]... NODE1 NODE2 [FILE]...', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
83 |
inferrepo=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
84 |
) |
3063
aa1cee5b8afb
hgk.py: add an optional file list to debug-diff-tree
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3059
diff
changeset
|
85 |
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
|
86 |
"""diff trees from two commits""" |
34998
fc0e6d298cd4
py3: handle keyword arguments in hgext/hgk.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34499
diff
changeset
|
87 |
|
31409
dddc4812aa7a
hgk: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31203
diff
changeset
|
88 |
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
|
89 |
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
|
90 |
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
|
91 |
files = [] |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6666
diff
changeset
|
92 |
mmap = repo[node1].manifest() |
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6666
diff
changeset
|
93 |
mmap2 = repo[node2].manifest() |
14671
35c2cc322ba8
scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents:
14322
diff
changeset
|
94 |
m = scmutil.match(repo[node1], files) |
43639
52a73fb498a4
hgk: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
95 |
st = repo.status(node1, node2, m) |
6217
fe8dbbe9520d
Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents:
6212
diff
changeset
|
96 |
empty = short(nullid) |
267 | 97 |
|
43639
52a73fb498a4
hgk: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
98 |
for f in st.modified: |
334 | 99 |
# TODO get file permissions |
43080
86e4daa2d54c
cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
100 |
ui.writenoi18n( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
101 |
b":100664 100664 %s %s M\t%s\t%s\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
102 |
% (short(mmap[f]), short(mmap2[f]), f, f) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
103 |
) |
43639
52a73fb498a4
hgk: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
104 |
for f in st.added: |
43080
86e4daa2d54c
cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
105 |
ui.writenoi18n( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
106 |
b":000000 100664 %s %s N\t%s\t%s\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
107 |
% (empty, short(mmap2[f]), f, f) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
108 |
) |
43639
52a73fb498a4
hgk: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
109 |
for f in st.removed: |
43080
86e4daa2d54c
cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
110 |
ui.writenoi18n( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
111 |
b":100664 000000 %s %s D\t%s\t%s\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
112 |
% (short(mmap[f]), empty, f, f) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
113 |
) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
114 |
|
267 | 115 |
## |
116 |
||
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
117 |
while True: |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43105
diff
changeset
|
118 |
if opts['stdin']: |
36790
cb0afaf112e8
hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
36490
diff
changeset
|
119 |
line = ui.fin.readline() |
cb0afaf112e8
hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
36490
diff
changeset
|
120 |
if not line: |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
121 |
break |
36790
cb0afaf112e8
hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
36490
diff
changeset
|
122 |
line = line.rstrip(pycompat.oslinesep).split(b' ') |
cb0afaf112e8
hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
36490
diff
changeset
|
123 |
node1 = line[0] |
cb0afaf112e8
hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
36490
diff
changeset
|
124 |
if len(line) > 1: |
cb0afaf112e8
hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
36490
diff
changeset
|
125 |
node2 = line[1] |
cb0afaf112e8
hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
36490
diff
changeset
|
126 |
else: |
cb0afaf112e8
hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
36490
diff
changeset
|
127 |
node2 = None |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
128 |
node1 = repo.lookup(node1) |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
129 |
if node2: |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
130 |
node2 = repo.lookup(node2) |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
131 |
else: |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
132 |
node2 = node1 |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
133 |
node1 = repo.changelog.parents(node1)[0] |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43105
diff
changeset
|
134 |
if opts['patch']: |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43105
diff
changeset
|
135 |
if opts['pretty']: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
136 |
catcommit(ui, repo, node2, b"") |
14671
35c2cc322ba8
scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents:
14322
diff
changeset
|
137 |
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
|
138 |
diffopts = patch.difffeatureopts(ui) |
5fb1fc2e1281
hgk: don't honor whitespace and format-changing diffopts
Siddharth Agarwal <sid0@fb.com>
parents:
23270
diff
changeset
|
139 |
diffopts.git = True |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
140 |
chunks = patch.diff(repo, node1, node2, match=m, opts=diffopts) |
7308
b6f5490effbf
patch: turn patch.diff() into a generator
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7000
diff
changeset
|
141 |
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
|
142 |
ui.write(chunk) |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
143 |
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
|
144 |
__difftree(repo, node1, node2, files=files) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43105
diff
changeset
|
145 |
if not opts['stdin']: |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
146 |
break |
267 | 147 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
148 |
|
5878
d39af2eabb8c
transform a bunch of print statements to appropriate ui calls
Matt Mackall <mpm@selenic.com>
parents:
5859
diff
changeset
|
149 |
def catcommit(ui, repo, n, prefix, ctx=None): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
150 |
nlprefix = b'\n' + prefix |
3979
e0d13267f7a4
hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3978
diff
changeset
|
151 |
if ctx is None: |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6666
diff
changeset
|
152 |
ctx = repo[n] |
16683 | 153 |
# use ctx.node() instead ?? |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
154 |
ui.write((b"tree %s\n" % short(ctx.changeset()[0]))) |
6768 | 155 |
for p in ctx.parents(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
156 |
ui.write((b"parent %s\n" % p)) |
6768 | 157 |
|
3979
e0d13267f7a4
hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3978
diff
changeset
|
158 |
date = ctx.date() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
159 |
description = ctx.description().replace(b"\0", b"") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
160 |
ui.write((b"author %s %d %d\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
|
161 |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
162 |
if b'committer' in ctx.extra(): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
163 |
ui.write((b"committer %s\n" % ctx.extra()[b'committer'])) |
24604
ce8dd4fd2d5d
hgk: display committer name when set by hg-git
Andrew Shadura <andrew@shadura.me>
parents:
24517
diff
changeset
|
164 |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
165 |
ui.write((b"revision %d\n" % ctx.rev())) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
166 |
ui.write((b"branch %s\n" % ctx.branch())) |
24513
b5a0b2374eb6
hgk: display obsolete changesets in darkgrey
Andrew Shadura <andrew@shadura.me>
parents:
24512
diff
changeset
|
167 |
if obsolete.isenabled(repo, obsolete.createmarkersopt): |
b5a0b2374eb6
hgk: display obsolete changesets in darkgrey
Andrew Shadura <andrew@shadura.me>
parents:
24512
diff
changeset
|
168 |
if ctx.obsolete(): |
43080
86e4daa2d54c
cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
169 |
ui.writenoi18n(b"obsolete\n") |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
170 |
ui.write((b"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
|
171 |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
172 |
if prefix != b"": |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
173 |
ui.write( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
174 |
b"%s%s\n" % (prefix, description.replace(b'\n', nlprefix).strip()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
175 |
) |
267 | 176 |
else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
177 |
ui.write(description + b"\n") |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
178 |
if prefix: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
179 |
ui.write(b'\0') |
267 | 180 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
181 |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
182 |
@command(b'debug-merge-base', [], _(b'REV REV')) |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
183 |
def base(ui, repo, node1, node2): |
7598 | 184 |
"""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
|
185 |
node1 = repo.lookup(node1) |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
186 |
node2 = repo.lookup(node2) |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
187 |
n = repo.changelog.ancestor(node1, node2) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
188 |
ui.write(short(n) + b"\n") |
267 | 189 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
190 |
|
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
191 |
@command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
192 |
b'debug-cat-file', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
193 |
[(b's', b'stdin', None, _(b'stdin'))], |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
194 |
_(b'[OPTION]... TYPE FILE'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
195 |
inferrepo=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
196 |
) |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
197 |
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
|
198 |
"""cat a specific revision""" |
267 | 199 |
# in stdin mode, every line except the commit is prefixed with two |
200 |
# spaces. This way the our caller can find the commit without magic |
|
201 |
# strings |
|
202 |
# |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
203 |
prefix = b"" |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43105
diff
changeset
|
204 |
if opts['stdin']: |
36790
cb0afaf112e8
hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
36490
diff
changeset
|
205 |
line = ui.fin.readline() |
cb0afaf112e8
hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
36490
diff
changeset
|
206 |
if not line: |
334 | 207 |
return |
36790
cb0afaf112e8
hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
36490
diff
changeset
|
208 |
(type, r) = line.rstrip(pycompat.oslinesep).split(b' ') |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
209 |
prefix = b" " |
267 | 210 |
else: |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
211 |
if not type or not r: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
212 |
ui.warn(_(b"cat-file: type or revision not supplied\n")) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
213 |
commands.help_(ui, b'cat-file') |
267 | 214 |
|
215 |
while r: |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
216 |
if type != b"commit": |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
217 |
ui.warn(_(b"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
|
218 |
return 1 |
720
095dd8c757e0
Change hgit revision lookup to use repo.lookup
mason@suse.com
parents:
719
diff
changeset
|
219 |
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
|
220 |
catcommit(ui, repo, n, prefix) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43105
diff
changeset
|
221 |
if opts['stdin']: |
36790
cb0afaf112e8
hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
36490
diff
changeset
|
222 |
line = ui.fin.readline() |
cb0afaf112e8
hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
36490
diff
changeset
|
223 |
if not line: |
334 | 224 |
break |
36790
cb0afaf112e8
hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
36490
diff
changeset
|
225 |
(type, r) = line.rstrip(pycompat.oslinesep).split(b' ') |
334 | 226 |
else: |
227 |
break |
|
267 | 228 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
229 |
|
267 | 230 |
# git rev-tree is a confusing thing. You can supply a number of |
231 |
# commit sha1s on the command line, and it walks the commit history |
|
232 |
# telling you which commits are reachable from the supplied ones via |
|
233 |
# a bitmask based on arg position. |
|
234 |
# you can specify a commit to stop at by starting the sha1 with ^ |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
235 |
def revtree(ui, args, repo, full=b"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
|
236 |
def chlogwalk(): |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
237 |
count = len(repo) |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
238 |
i = count |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
239 |
l = [0] * 100 |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
240 |
chunk = 100 |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
241 |
while True: |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
242 |
if chunk > i: |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
243 |
chunk = i |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
244 |
i = 0 |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
245 |
else: |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
246 |
i -= chunk |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
247 |
|
38783
e7aa113b14f7
global: use pycompat.xrange()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36790
diff
changeset
|
248 |
for x in pycompat.xrange(chunk): |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
249 |
if i + x >= count: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
250 |
l[chunk - x :] = [0] * (chunk - x) |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
251 |
break |
13031
3da456d0c885
code style: prefer 'is' and 'is not' tests with singletons
Martin Geisler <mg@aragost.com>
parents:
12083
diff
changeset
|
252 |
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
|
253 |
if (i + x) in repo: |
271a1ddad1fb
hgk: don't break on repositories with obsolete changesets
Andrew Shadura <andrew@shadura.me>
parents:
21783
diff
changeset
|
254 |
l[x] = repo[i + x] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
255 |
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
|
256 |
else: |
22580
271a1ddad1fb
hgk: don't break on repositories with obsolete changesets
Andrew Shadura <andrew@shadura.me>
parents:
21783
diff
changeset
|
257 |
if (i + x) in repo: |
271a1ddad1fb
hgk: don't break on repositories with obsolete changesets
Andrew Shadura <andrew@shadura.me>
parents:
21783
diff
changeset
|
258 |
l[x] = 1 |
38783
e7aa113b14f7
global: use pycompat.xrange()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36790
diff
changeset
|
259 |
for x in pycompat.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
|
260 |
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
|
261 |
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
|
262 |
if i == 0: |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
263 |
break |
1308
2073e5a71008
Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1278
diff
changeset
|
264 |
|
267 | 265 |
# calculate and return the reachability bitmask for sha |
266 |
def is_reachable(ar, reachable, sha): |
|
334 | 267 |
if len(ar) == 0: |
268 |
return 1 |
|
269 |
mask = 0 |
|
38783
e7aa113b14f7
global: use pycompat.xrange()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36790
diff
changeset
|
270 |
for i in pycompat.xrange(len(ar)): |
334 | 271 |
if sha in reachable[i]: |
272 |
mask |= 1 << i |
|
267 | 273 |
|
334 | 274 |
return mask |
267 | 275 |
|
276 |
reachable = [] |
|
277 |
stop_sha1 = [] |
|
278 |
want_sha1 = [] |
|
356 | 279 |
count = 0 |
267 | 280 |
|
281 |
# figure out which commits they are asking for and which ones they |
|
282 |
# 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
|
283 |
for i, arg in enumerate(args): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
284 |
if arg.startswith(b'^'): |
8632
9e055cfdd620
replace "i in range(len(xs))" with "i, x in enumerate(xs)"
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
285 |
s = repo.lookup(arg[1:]) |
720
095dd8c757e0
Change hgit revision lookup to use repo.lookup
mason@suse.com
parents:
719
diff
changeset
|
286 |
stop_sha1.append(s) |
334 | 287 |
want_sha1.append(s) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
288 |
elif arg != b'HEAD': |
8632
9e055cfdd620
replace "i in range(len(xs))" with "i, x in enumerate(xs)"
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
289 |
want_sha1.append(repo.lookup(arg)) |
356 | 290 |
|
267 | 291 |
# 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
|
292 |
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
|
293 |
reachable.append(set()) |
4612cded5176
fix coding style (reported by pylint)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
294 |
visit = [n] |
8459
1e63816ce8a2
hgk: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8228
diff
changeset
|
295 |
reachable[i].add(n) |
334 | 296 |
while visit: |
297 |
n = visit.pop(0) |
|
298 |
if n in stop_sha1: |
|
1243
9d10f89b75a5
Fix hgit revtree bug with stop revision handling
root@coffee.suse.com
parents:
1239
diff
changeset
|
299 |
continue |
334 | 300 |
for p in repo.changelog.parents(n): |
301 |
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
|
302 |
reachable[i].add(p) |
334 | 303 |
visit.append(p) |
304 |
if p in stop_sha1: |
|
1243
9d10f89b75a5
Fix hgit revtree bug with stop revision handling
root@coffee.suse.com
parents:
1239
diff
changeset
|
305 |
continue |
356 | 306 |
|
267 | 307 |
# walk the repository looking for commits that are in our |
308 |
# reachability graph |
|
3979
e0d13267f7a4
hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3978
diff
changeset
|
309 |
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
|
310 |
if i not in repo: |
271a1ddad1fb
hgk: don't break on repositories with obsolete changesets
Andrew Shadura <andrew@shadura.me>
parents:
21783
diff
changeset
|
311 |
continue |
334 | 312 |
n = repo.changelog.node(i) |
313 |
mask = is_reachable(want_sha1, reachable, n) |
|
314 |
if mask: |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
315 |
parentstr = b"" |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
316 |
if parents: |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
317 |
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
|
318 |
if pp[0] != nullid: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
319 |
parentstr += b" " + short(pp[0]) |
6217
fe8dbbe9520d
Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents:
6212
diff
changeset
|
320 |
if pp[1] != nullid: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
321 |
parentstr += b" " + short(pp[1]) |
356 | 322 |
if not full: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
323 |
ui.write(b"%s%s\n" % (short(n), parentstr)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
324 |
elif full == b"commit": |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
325 |
ui.write(b"%s%s\n" % (short(n), parentstr)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
326 |
catcommit(ui, repo, n, b' ', ctx) |
356 | 327 |
else: |
328 |
(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
|
329 |
(h, h1, h2) = map(short, (n, p1, p2)) |
356 | 330 |
(i1, i2) = map(repo.changelog.rev, (p1, p2)) |
267 | 331 |
|
3979
e0d13267f7a4
hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3978
diff
changeset
|
332 |
date = ctx.date()[0] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
333 |
ui.write(b"%s %s:%s" % (date, h, mask)) |
356 | 334 |
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
|
335 |
if i1 != nullrev and mask > 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
336 |
ui.write(b"%s:%s " % (h1, mask)), |
356 | 337 |
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
|
338 |
if i2 != nullrev and mask > 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
339 |
ui.write(b"%s:%s " % (h2, mask)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
340 |
ui.write(b"\n") |
356 | 341 |
if maxnr and count >= maxnr: |
342 |
break |
|
343 |
count += 1 |
|
267 | 344 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
345 |
|
267 | 346 |
# git rev-list tries to order things by date, and has the ability to stop |
347 |
# at a given commit without walking the whole repo. TODO add the stop |
|
348 |
# parameter |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
349 |
@command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
350 |
b'debug-rev-list', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
351 |
[ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
352 |
(b'H', b'header', None, _(b'header')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
353 |
(b't', b'topo-order', None, _(b'topo-order')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
354 |
(b'p', b'parents', None, _(b'parents')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
355 |
(b'n', b'max-count', 0, _(b'max-count')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
356 |
], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
357 |
b'[OPTION]... REV...', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
358 |
) |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
359 |
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
|
360 |
"""print revisions""" |
44676
1756f75873bf
hgk: remove a "b" used on a kwargs expansion, the keys are strs
Kyle Lippincott <spectral@google.com>
parents:
43787
diff
changeset
|
361 |
if opts['header']: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
362 |
full = b"commit" |
356 | 363 |
else: |
364 |
full = None |
|
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
365 |
copy = [x for x in revs] |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43105
diff
changeset
|
366 |
revtree(ui, copy, repo, full, opts['max_count'], opts[r'parents']) |
267 | 367 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
368 |
|
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
369 |
@command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
370 |
b'view', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
371 |
[(b'l', b'limit', b'', _(b'limit number of changes displayed'), _(b'NUM'))], |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
372 |
_(b'[-l LIMIT] [REVRANGE]'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
373 |
helpcategory=command.CATEGORY_CHANGE_NAVIGATION, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
374 |
) |
3093
edefbb3a3b08
hgk: add --limit, and revranges
Brendan Cully <brendan@kublai.com>
parents:
3092
diff
changeset
|
375 |
def view(ui, repo, *etc, **opts): |
43787
be8552f25cab
cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents:
43639
diff
changeset
|
376 |
"""start interactive history viewer""" |
34998
fc0e6d298cd4
py3: handle keyword arguments in hgext/hgk.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34499
diff
changeset
|
377 |
opts = pycompat.byteskwargs(opts) |
1278 | 378 |
os.chdir(repo.root) |
43105
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43080
diff
changeset
|
379 |
optstr = b' '.join( |
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43080
diff
changeset
|
380 |
[b'--%s %s' % (k, v) for k, v in pycompat.iteritems(opts) if v] |
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43080
diff
changeset
|
381 |
) |
24512
e5c5ddc3b172
hgk: pass --hidden switch to hg subprocesses when needed
Andrew Shadura <andrew@shadura.me>
parents:
24511
diff
changeset
|
382 |
if repo.filtername is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
383 |
optstr += b'--hidden' |
24512
e5c5ddc3b172
hgk: pass --hidden switch to hg subprocesses when needed
Andrew Shadura <andrew@shadura.me>
parents:
24511
diff
changeset
|
384 |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
385 |
cmd = ui.config(b"hgk", b"path") + b" %s %s" % (optstr, b" ".join(etc)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
386 |
ui.debug(b"running %s\n" % cmd) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
387 |
ui.system(cmd, blockedtag=b'hgk_view') |