author | Martin von Zweigbergk <martinvonz@google.com> |
Mon, 09 Dec 2019 10:44:42 -0800 | |
changeset 5004 | dc43e62ea796 |
parent 4814 | 48b30ff742cb |
permissions | -rw-r--r-- |
4644
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
1 |
############################# |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
2 |
### Tree Hash computation ### |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
3 |
############################# |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
4 |
|
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
5 |
# Status: dropable |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
6 |
# |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
7 |
# This module don't need to be upstreamed and can be dropped if its maintenance |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
8 |
# become a burden |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
9 |
|
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
10 |
import hashlib |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
11 |
|
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
12 |
from mercurial import ( |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
13 |
error, |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
14 |
node, |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
15 |
obsolete, |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
16 |
) |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
17 |
|
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
18 |
from mercurial.i18n import _ |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
19 |
|
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
20 |
from . import ( |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
21 |
compat, |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
22 |
exthelper, |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
23 |
) |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
24 |
|
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
25 |
eh = exthelper.exthelper() |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
26 |
|
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
27 |
# Dash computed from a given changesets using all markers relevant to it and |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
28 |
# the obshash of its parents. This is similar to what happend for changeset |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
29 |
# node where the parent is used in the computation |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
30 |
@eh.command( |
4715
12c8b24757f4
py3: use byte strings for @command registrations
Martin von Zweigbergk <martinvonz@google.com>
parents:
4644
diff
changeset
|
31 |
b'debugobsrelsethashtree', |
12c8b24757f4
py3: use byte strings for @command registrations
Martin von Zweigbergk <martinvonz@google.com>
parents:
4644
diff
changeset
|
32 |
[(b'', b'v0', None, b'hash on marker format "0"'), |
12c8b24757f4
py3: use byte strings for @command registrations
Martin von Zweigbergk <martinvonz@google.com>
parents:
4644
diff
changeset
|
33 |
(b'', b'v1', None, b'hash on marker format "1" (default)')], _(b'')) |
4644
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
34 |
def debugobsrelsethashtree(ui, repo, v0=False, v1=False): |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
35 |
"""display Obsolete markers, Relevant Set, Hash Tree |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
36 |
changeset-node obsrelsethashtree-node |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
37 |
|
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
38 |
It computed form the "obs-hash-tree" value of its parent and markers |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
39 |
relevant to the changeset itself. |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
40 |
|
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
41 |
The obs-hash-tree is no longer used for any user facing logic. However the |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
42 |
debug command stayed as an inspection tool. It does not seem supseful to |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
43 |
upstream the command with the rest of evolve. We can safely drop it.""" |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
44 |
if v0 and v1: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4715
diff
changeset
|
45 |
raise error.Abort(b'cannot only specify one format') |
4644
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
46 |
elif v0: |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
47 |
treefunc = _obsrelsethashtreefm0 |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
48 |
else: |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
49 |
treefunc = _obsrelsethashtreefm1 |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
50 |
|
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
51 |
for chg, obs in treefunc(repo): |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4715
diff
changeset
|
52 |
ui.status(b'%s %s\n' % (node.hex(chg), node.hex(obs))) |
4644
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
53 |
|
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
54 |
def _obsrelsethashtreefm0(repo): |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
55 |
return _obsrelsethashtree(repo, obsolete._fm0encodeonemarker) |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
56 |
|
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
57 |
def _obsrelsethashtreefm1(repo): |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
58 |
return _obsrelsethashtree(repo, obsolete._fm1encodeonemarker) |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
59 |
|
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
60 |
def _obsrelsethashtree(repo, encodeonemarker): |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
61 |
cache = [] |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
62 |
unfi = repo.unfiltered() |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
63 |
markercache = {} |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4715
diff
changeset
|
64 |
compat.progress(repo.ui, _(b"preparing locally"), 0, total=len(unfi), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4715
diff
changeset
|
65 |
unit=_(b"changesets")) |
4644
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
66 |
for i in unfi: |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
67 |
ctx = unfi[i] |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
68 |
entry = 0 |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
69 |
sha = hashlib.sha1() |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
70 |
# add data from p1 |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
71 |
for p in ctx.parents(): |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
72 |
p = p.rev() |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
73 |
if p < 0: |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
74 |
p = node.nullid |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
75 |
else: |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
76 |
p = cache[p][1] |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
77 |
if p != node.nullid: |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
78 |
entry += 1 |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
79 |
sha.update(p) |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
80 |
tmarkers = repo.obsstore.relevantmarkers([ctx.node()]) |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
81 |
if tmarkers: |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
82 |
bmarkers = [] |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
83 |
for m in tmarkers: |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
84 |
if m not in markercache: |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
85 |
markercache[m] = encodeonemarker(m) |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
86 |
bmarkers.append(markercache[m]) |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
87 |
bmarkers.sort() |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
88 |
for m in bmarkers: |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
89 |
entry += 1 |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
90 |
sha.update(m) |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
91 |
if entry: |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
92 |
cache.append((ctx.node(), sha.digest())) |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
93 |
else: |
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
94 |
cache.append((ctx.node(), node.nullid)) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4715
diff
changeset
|
95 |
compat.progress(repo.ui, _(b"preparing locally"), i, total=len(unfi), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4715
diff
changeset
|
96 |
unit=_(b"changesets")) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4715
diff
changeset
|
97 |
compat.progress(repo.ui, _(b"preparing locally"), None) |
4644
b228672b0ff9
obshashtree: move obshashtree in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
98 |
return cache |