Mercurial > hg
annotate hgext/hgk.py @ 46580:2076df13d00f
copies-rust: refactor the "deletion" case
We rearrange the code to single out the case where information need to be
overwritten on both side of the merge. This open the way to better dealing with
this case.
Differential Revision: https://phab.mercurial-scm.org/D9651
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 16 Dec 2020 10:59:00 +0100 |
parents | 89a2afe31e82 |
children | d55b71393907 |
rev | line source |
---|---|
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( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44676
diff
changeset
|
68 b'hgk', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44676
diff
changeset
|
69 b'path', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44676
diff
changeset
|
70 default=b'hgk', |
34499
b8f74c4d188f
configitems: register the 'hgk.path' config
Boris Feld <boris.feld@octobus.net>
parents:
33839
diff
changeset
|
71 ) |
b8f74c4d188f
configitems: register the 'hgk.path' config
Boris Feld <boris.feld@octobus.net>
parents:
33839
diff
changeset
|
72 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
73 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
74 @command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
75 b'debug-diff-tree', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
76 [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
77 (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
|
78 (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
|
79 (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
|
80 (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
|
81 (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
|
82 (b'S', b'search', b"", _(b'search')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
83 ], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
84 b'[OPTION]... NODE1 NODE2 [FILE]...', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
85 inferrepo=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
86 ) |
3063
aa1cee5b8afb
hgk.py: add an optional file list to debug-diff-tree
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3059
diff
changeset
|
87 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
|
88 """diff trees from two commits""" |
34998
fc0e6d298cd4
py3: handle keyword arguments in hgext/hgk.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34499
diff
changeset
|
89 |
31409
dddc4812aa7a
hgk: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31203
diff
changeset
|
90 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
|
91 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
|
92 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
|
93 files = [] |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6666
diff
changeset
|
94 mmap = repo[node1].manifest() |
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6666
diff
changeset
|
95 mmap2 = repo[node2].manifest() |
14671
35c2cc322ba8
scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents:
14322
diff
changeset
|
96 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
|
97 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
|
98 empty = short(nullid) |
267 | 99 |
43639
52a73fb498a4
hgk: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
100 for f in st.modified: |
334 | 101 # 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
|
102 ui.writenoi18n( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
103 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
|
104 % (short(mmap[f]), short(mmap2[f]), f, f) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
105 ) |
43639
52a73fb498a4
hgk: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
106 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
|
107 ui.writenoi18n( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
108 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
|
109 % (empty, short(mmap2[f]), f, f) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
110 ) |
43639
52a73fb498a4
hgk: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
111 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
|
112 ui.writenoi18n( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
113 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
|
114 % (short(mmap[f]), empty, f, f) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
115 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
116 |
267 | 117 ## |
118 | |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
119 while True: |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43105
diff
changeset
|
120 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
|
121 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
|
122 if not line: |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
123 break |
36790
cb0afaf112e8
hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
36490
diff
changeset
|
124 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
|
125 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
|
126 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
|
127 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
|
128 else: |
cb0afaf112e8
hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
36490
diff
changeset
|
129 node2 = None |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
130 node1 = repo.lookup(node1) |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
131 if node2: |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
132 node2 = repo.lookup(node2) |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
133 else: |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
134 node2 = node1 |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
135 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
|
136 if opts['patch']: |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43105
diff
changeset
|
137 if opts['pretty']: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
138 catcommit(ui, repo, node2, b"") |
14671
35c2cc322ba8
scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents:
14322
diff
changeset
|
139 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
|
140 diffopts = patch.difffeatureopts(ui) |
5fb1fc2e1281
hgk: don't honor whitespace and format-changing diffopts
Siddharth Agarwal <sid0@fb.com>
parents:
23270
diff
changeset
|
141 diffopts.git = True |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
142 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
|
143 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
|
144 ui.write(chunk) |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
145 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
|
146 __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
|
147 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
|
148 break |
267 | 149 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
150 |
5878
d39af2eabb8c
transform a bunch of print statements to appropriate ui calls
Matt Mackall <mpm@selenic.com>
parents:
5859
diff
changeset
|
151 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
|
152 nlprefix = b'\n' + prefix |
3979
e0d13267f7a4
hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3978
diff
changeset
|
153 if ctx is None: |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6666
diff
changeset
|
154 ctx = repo[n] |
16683 | 155 # use ctx.node() instead ?? |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
156 ui.write((b"tree %s\n" % short(ctx.changeset()[0]))) |
6768 | 157 for p in ctx.parents(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
158 ui.write((b"parent %s\n" % p)) |
6768 | 159 |
3979
e0d13267f7a4
hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3978
diff
changeset
|
160 date = ctx.date() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
161 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
|
162 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
|
163 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
164 if b'committer' in ctx.extra(): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
165 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
|
166 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
167 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
|
168 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
|
169 if obsolete.isenabled(repo, obsolete.createmarkersopt): |
b5a0b2374eb6
hgk: display obsolete changesets in darkgrey
Andrew Shadura <andrew@shadura.me>
parents:
24512
diff
changeset
|
170 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
|
171 ui.writenoi18n(b"obsolete\n") |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
172 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
|
173 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
174 if prefix != b"": |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
175 ui.write( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
176 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
|
177 ) |
267 | 178 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
179 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
|
180 if prefix: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
181 ui.write(b'\0') |
267 | 182 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
183 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
184 @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
|
185 def base(ui, repo, node1, node2): |
7598 | 186 """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
|
187 node1 = repo.lookup(node1) |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
188 node2 = repo.lookup(node2) |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
189 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
|
190 ui.write(short(n) + b"\n") |
267 | 191 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
192 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
193 @command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
194 b'debug-cat-file', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
195 [(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
|
196 _(b'[OPTION]... TYPE FILE'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
197 inferrepo=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
198 ) |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
199 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
|
200 """cat a specific revision""" |
267 | 201 # in stdin mode, every line except the commit is prefixed with two |
202 # spaces. This way the our caller can find the commit without magic | |
203 # strings | |
204 # | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
205 prefix = b"" |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43105
diff
changeset
|
206 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
|
207 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
|
208 if not line: |
334 | 209 return |
36790
cb0afaf112e8
hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
36490
diff
changeset
|
210 (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
|
211 prefix = b" " |
267 | 212 else: |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
213 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
|
214 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
|
215 commands.help_(ui, b'cat-file') |
267 | 216 |
217 while r: | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
218 if type != b"commit": |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
219 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
|
220 return 1 |
720
095dd8c757e0
Change hgit revision lookup to use repo.lookup
mason@suse.com
parents:
719
diff
changeset
|
221 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
|
222 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
|
223 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
|
224 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
|
225 if not line: |
334 | 226 break |
36790
cb0afaf112e8
hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org>
parents:
36490
diff
changeset
|
227 (type, r) = line.rstrip(pycompat.oslinesep).split(b' ') |
334 | 228 else: |
229 break | |
267 | 230 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
231 |
267 | 232 # git rev-tree is a confusing thing. You can supply a number of |
233 # commit sha1s on the command line, and it walks the commit history | |
234 # telling you which commits are reachable from the supplied ones via | |
235 # a bitmask based on arg position. | |
236 # 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
|
237 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
|
238 def chlogwalk(): |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
239 count = len(repo) |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
240 i = count |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
241 l = [0] * 100 |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
242 chunk = 100 |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
243 while True: |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
244 if chunk > i: |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
245 chunk = i |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
246 i = 0 |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
247 else: |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
248 i -= chunk |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
249 |
38783
e7aa113b14f7
global: use pycompat.xrange()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36790
diff
changeset
|
250 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
|
251 if i + x >= count: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
252 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
|
253 break |
13031
3da456d0c885
code style: prefer 'is' and 'is not' tests with singletons
Martin Geisler <mg@aragost.com>
parents:
12083
diff
changeset
|
254 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
|
255 if (i + x) in repo: |
271a1ddad1fb
hgk: don't break on repositories with obsolete changesets
Andrew Shadura <andrew@shadura.me>
parents:
21783
diff
changeset
|
256 l[x] = repo[i + x] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
257 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
|
258 else: |
22580
271a1ddad1fb
hgk: don't break on repositories with obsolete changesets
Andrew Shadura <andrew@shadura.me>
parents:
21783
diff
changeset
|
259 if (i + x) in repo: |
271a1ddad1fb
hgk: don't break on repositories with obsolete changesets
Andrew Shadura <andrew@shadura.me>
parents:
21783
diff
changeset
|
260 l[x] = 1 |
38783
e7aa113b14f7
global: use pycompat.xrange()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36790
diff
changeset
|
261 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
|
262 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
|
263 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
|
264 if i == 0: |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
265 break |
1308
2073e5a71008
Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1278
diff
changeset
|
266 |
267 | 267 # calculate and return the reachability bitmask for sha |
268 def is_reachable(ar, reachable, sha): | |
334 | 269 if len(ar) == 0: |
270 return 1 | |
271 mask = 0 | |
38783
e7aa113b14f7
global: use pycompat.xrange()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36790
diff
changeset
|
272 for i in pycompat.xrange(len(ar)): |
334 | 273 if sha in reachable[i]: |
274 mask |= 1 << i | |
267 | 275 |
334 | 276 return mask |
267 | 277 |
278 reachable = [] | |
279 stop_sha1 = [] | |
280 want_sha1 = [] | |
356 | 281 count = 0 |
267 | 282 |
283 # figure out which commits they are asking for and which ones they | |
284 # 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
|
285 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
|
286 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
|
287 s = repo.lookup(arg[1:]) |
720
095dd8c757e0
Change hgit revision lookup to use repo.lookup
mason@suse.com
parents:
719
diff
changeset
|
288 stop_sha1.append(s) |
334 | 289 want_sha1.append(s) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
290 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
|
291 want_sha1.append(repo.lookup(arg)) |
356 | 292 |
267 | 293 # 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
|
294 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
|
295 reachable.append(set()) |
4612cded5176
fix coding style (reported by pylint)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
296 visit = [n] |
8459
1e63816ce8a2
hgk: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8228
diff
changeset
|
297 reachable[i].add(n) |
334 | 298 while visit: |
299 n = visit.pop(0) | |
300 if n in stop_sha1: | |
1243
9d10f89b75a5
Fix hgit revtree bug with stop revision handling
root@coffee.suse.com
parents:
1239
diff
changeset
|
301 continue |
334 | 302 for p in repo.changelog.parents(n): |
303 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
|
304 reachable[i].add(p) |
334 | 305 visit.append(p) |
306 if p in stop_sha1: | |
1243
9d10f89b75a5
Fix hgit revtree bug with stop revision handling
root@coffee.suse.com
parents:
1239
diff
changeset
|
307 continue |
356 | 308 |
267 | 309 # walk the repository looking for commits that are in our |
310 # reachability graph | |
3979
e0d13267f7a4
hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3978
diff
changeset
|
311 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
|
312 if i not in repo: |
271a1ddad1fb
hgk: don't break on repositories with obsolete changesets
Andrew Shadura <andrew@shadura.me>
parents:
21783
diff
changeset
|
313 continue |
334 | 314 n = repo.changelog.node(i) |
315 mask = is_reachable(want_sha1, reachable, n) | |
316 if mask: | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
317 parentstr = b"" |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
318 if parents: |
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
319 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
|
320 if pp[0] != 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[0]) |
6217
fe8dbbe9520d
Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents:
6212
diff
changeset
|
322 if pp[1] != nullid: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
323 parentstr += b" " + short(pp[1]) |
356 | 324 if not full: |
43077
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 elif full == b"commit": |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
327 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
|
328 catcommit(ui, repo, n, b' ', ctx) |
356 | 329 else: |
330 (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
|
331 (h, h1, h2) = map(short, (n, p1, p2)) |
356 | 332 (i1, i2) = map(repo.changelog.rev, (p1, p2)) |
267 | 333 |
3979
e0d13267f7a4
hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3978
diff
changeset
|
334 date = ctx.date()[0] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
335 ui.write(b"%s %s:%s" % (date, h, mask)) |
356 | 336 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
|
337 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
|
338 ui.write(b"%s:%s " % (h1, mask)), |
356 | 339 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
|
340 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
|
341 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
|
342 ui.write(b"\n") |
356 | 343 if maxnr and count >= maxnr: |
344 break | |
345 count += 1 | |
267 | 346 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
347 |
267 | 348 # git rev-list tries to order things by date, and has the ability to stop |
349 # at a given commit without walking the whole repo. TODO add the stop | |
350 # parameter | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
351 @command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
352 b'debug-rev-list', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
353 [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
354 (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
|
355 (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
|
356 (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
|
357 (b'n', b'max-count', 0, _(b'max-count')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
358 ], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
359 b'[OPTION]... REV...', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
360 ) |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
361 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
|
362 """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
|
363 if opts['header']: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
364 full = b"commit" |
356 | 365 else: |
366 full = None | |
1239
29f17e083e84
Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents:
740
diff
changeset
|
367 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
|
368 revtree(ui, copy, repo, full, opts['max_count'], opts[r'parents']) |
267 | 369 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
370 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
371 @command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
372 b'view', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
373 [(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
|
374 _(b'[-l LIMIT] [REVRANGE]'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
375 helpcategory=command.CATEGORY_CHANGE_NAVIGATION, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
376 ) |
3093
edefbb3a3b08
hgk: add --limit, and revranges
Brendan Cully <brendan@kublai.com>
parents:
3092
diff
changeset
|
377 def view(ui, repo, *etc, **opts): |
43787
be8552f25cab
cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents:
43639
diff
changeset
|
378 """start interactive history viewer""" |
34998
fc0e6d298cd4
py3: handle keyword arguments in hgext/hgk.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34499
diff
changeset
|
379 opts = pycompat.byteskwargs(opts) |
1278 | 380 os.chdir(repo.root) |
43105
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43080
diff
changeset
|
381 optstr = b' '.join( |
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43080
diff
changeset
|
382 [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
|
383 ) |
24512
e5c5ddc3b172
hgk: pass --hidden switch to hg subprocesses when needed
Andrew Shadura <andrew@shadura.me>
parents:
24511
diff
changeset
|
384 if repo.filtername is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
385 optstr += b'--hidden' |
24512
e5c5ddc3b172
hgk: pass --hidden switch to hg subprocesses when needed
Andrew Shadura <andrew@shadura.me>
parents:
24511
diff
changeset
|
386 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
387 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
|
388 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
|
389 ui.system(cmd, blockedtag=b'hgk_view') |