Mercurial > public > mercurial-scm > hg
annotate mercurial/bundlerepo.py @ 51417:ac1c75188440
phases: invalidate the phases set less often on retract boundary
We already have the information to update the phase set, so we do so directly
instead of invalidating the cache.
This show a sizeable speedup in our `perf::unbundle` benchmark on the
many-draft mozilla-try repository.
### data-env-vars.name = mozilla-try-2023-03-22-zstd-sparse-revlog
# benchmark.name = hg.perf.perf-unbundle
# bin-env-vars.hg.flavor = no-rust
# bin-env-vars.hg.py-re2-module = default
# benchmark.variants.issue6528 = disabled
# benchmark.variants.revs = last-10
before: 2.055259 seconds
after: 1.887064 seconds (-8.18%)
# benchmark.variants.revs = last-100
before: 2.409239 seconds
after: 2.222429 seconds (-7.75%)
# benchmark.variants.revs = last-1000
before: 3.945648 seconds
after: 3.762480 seconds (-4.64%)
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 21 Feb 2024 13:05:29 +0100 |
parents | 04111ef08fb0 |
children | 493034cc3265 |
rev | line source |
---|---|
8226
8b2cd04a6e97
put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
1 # bundlerepo.py - repository class for viewing uncompressed bundles |
8b2cd04a6e97
put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
2 # |
8b2cd04a6e97
put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
3 # Copyright 2006, 2007 Benoit Boissinot <bboissin@gmail.com> |
8b2cd04a6e97
put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
4 # |
8b2cd04a6e97
put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents:
8225
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. |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
7 |
8227
0a9542703300
turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents:
8226
diff
changeset
|
8 """Repository class for viewing uncompressed bundles. |
0a9542703300
turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents:
8226
diff
changeset
|
9 |
0a9542703300
turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents:
8226
diff
changeset
|
10 This provides a read-only repository interface to bundles as if they |
0a9542703300
turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents:
8226
diff
changeset
|
11 were part of the actual repository. |
0a9542703300
turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents:
8226
diff
changeset
|
12 """ |
0a9542703300
turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents:
8226
diff
changeset
|
13 |
25920
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
14 |
51009
3470a39fb66b
revlog: adapt the `reading` check for `bundlerepo`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50925
diff
changeset
|
15 import contextlib |
25920
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
16 import os |
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
17 import shutil |
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
18 |
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
19 from .i18n import _ |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
20 from .node import ( |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
21 hex, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
22 nullrev, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
23 ) |
25920
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
24 |
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
25 from . import ( |
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
26 bundle2, |
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
27 changegroup, |
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
28 changelog, |
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
29 cmdutil, |
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
30 discovery, |
39818
24e493ec2229
py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
39763
diff
changeset
|
31 encoding, |
25920
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
32 error, |
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
33 exchange, |
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
34 filelog, |
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
35 localrepo, |
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
36 manifest, |
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
37 mdiff, |
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
38 pathutil, |
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
39 phases, |
30519
20a42325fdef
py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30375
diff
changeset
|
40 pycompat, |
25920
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
41 revlog, |
47394
ac60a1366a49
revlog: move `offset_type` to `revlogutils`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47256
diff
changeset
|
42 revlogutils, |
25920
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
43 util, |
31240
5f68e7341ada
vfs: use 'vfs' module directly in 'mercurial.bundlerepo'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30924
diff
changeset
|
44 vfs as vfsmod, |
25920
5aaf51c14fea
bundlerepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25830
diff
changeset
|
45 ) |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46780
diff
changeset
|
46 from .utils import ( |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46780
diff
changeset
|
47 urlutil, |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46780
diff
changeset
|
48 ) |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
49 |
47072
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
50 from .revlogutils import ( |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
51 constants as revlog_constants, |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
52 ) |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
53 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
54 |
1946
9fee186f7f0d
bundlerepo: remove relative import, fix a comment
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1942
diff
changeset
|
55 class bundlerevlog(revlog.revlog): |
47150
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47148
diff
changeset
|
56 def __init__(self, opener, target, radix, cgunpacker, linkmapper): |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
57 # How it works: |
18410
de7dac2a58e8
bundlerepo: fix outdated comment
Mads Kiilerich <madski@unity3d.com>
parents:
18216
diff
changeset
|
58 # To retrieve a revision, we need to know the offset of the revision in |
de7dac2a58e8
bundlerepo: fix outdated comment
Mads Kiilerich <madski@unity3d.com>
parents:
18216
diff
changeset
|
59 # the bundle (an unbundle object). We store this offset in the index |
18643
cc28a84db8c9
bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents:
18568
diff
changeset
|
60 # (start). The base of the delta is stored in the base field. |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
61 # |
18410
de7dac2a58e8
bundlerepo: fix outdated comment
Mads Kiilerich <madski@unity3d.com>
parents:
18216
diff
changeset
|
62 # To differentiate a rev in the bundle from a rev in the revlog, we |
18643
cc28a84db8c9
bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents:
18568
diff
changeset
|
63 # check revision against repotiprev. |
31240
5f68e7341ada
vfs: use 'vfs' module directly in 'mercurial.bundlerepo'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30924
diff
changeset
|
64 opener = vfsmod.readonlyvfs(opener) |
47150
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47148
diff
changeset
|
65 revlog.revlog.__init__(self, opener, target=target, radix=radix) |
35076
90609be10891
bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35075
diff
changeset
|
66 self.bundle = cgunpacker |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6647
diff
changeset
|
67 n = len(self) |
18643
cc28a84db8c9
bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents:
18568
diff
changeset
|
68 self.repotiprev = n - 1 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
69 self.bundlerevs = set() # used by 'bundle()' revset expression |
35076
90609be10891
bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35075
diff
changeset
|
70 for deltadata in cgunpacker.deltaiter(): |
46711
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46113
diff
changeset
|
71 node, p1, p2, cs, deltabase, delta, flags, sidedata = deltadata |
14142
cb91ea6af733
bundlerepo: port to new bundle API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
14076
diff
changeset
|
72 |
cb91ea6af733
bundlerepo: port to new bundle API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
14076
diff
changeset
|
73 size = len(delta) |
35076
90609be10891
bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35075
diff
changeset
|
74 start = cgunpacker.tell() - size |
14142
cb91ea6af733
bundlerepo: port to new bundle API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
14076
diff
changeset
|
75 |
43542
5f347567589b
index: use `index.has_node` in `bundlerepo.bundlerevlog`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43533
diff
changeset
|
76 if self.index.has_node(node): |
14142
cb91ea6af733
bundlerepo: port to new bundle API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
14076
diff
changeset
|
77 # this can happen if two branches make the same change |
43564
698e11f7be6a
index: use `index.rev` in `bundlerepo.bundlerevlog`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43542
diff
changeset
|
78 self.bundlerevs.add(self.index.rev(node)) |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
79 continue |
45814
88d5abec8f61
bundlerepo: don't insert index tuples with full nodes as linkrev
Joerg Sonnenberger <joerg@bec.de>
parents:
43564
diff
changeset
|
80 if cs == node: |
88d5abec8f61
bundlerepo: don't insert index tuples with full nodes as linkrev
Joerg Sonnenberger <joerg@bec.de>
parents:
43564
diff
changeset
|
81 linkrev = nullrev |
88d5abec8f61
bundlerepo: don't insert index tuples with full nodes as linkrev
Joerg Sonnenberger <joerg@bec.de>
parents:
43564
diff
changeset
|
82 else: |
88d5abec8f61
bundlerepo: don't insert index tuples with full nodes as linkrev
Joerg Sonnenberger <joerg@bec.de>
parents:
43564
diff
changeset
|
83 linkrev = linkmapper(cs) |
14142
cb91ea6af733
bundlerepo: port to new bundle API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
14076
diff
changeset
|
84 |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
85 for p in (p1, p2): |
43542
5f347567589b
index: use `index.has_node` in `bundlerepo.bundlerevlog`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43533
diff
changeset
|
86 if not self.index.has_node(p): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
87 raise error.LookupError( |
47155
96ee8ca99f5a
revlog: use revlog.display_id in LookupError
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47150
diff
changeset
|
88 p, self.display_id, _(b"unknown parent") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
89 ) |
18416
87f370c5fef5
bundlerepo: store validated deltabase rev in basemap instead of node
Mads Kiilerich <madski@unity3d.com>
parents:
18415
diff
changeset
|
90 |
43542
5f347567589b
index: use `index.has_node` in `bundlerepo.bundlerevlog`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43533
diff
changeset
|
91 if not self.index.has_node(deltabase): |
49975
562f7da122b5
bundlerepo: raise `error.LookupError` instead of `LookupError`
Matt Harbison <matt_harbison@yahoo.com>
parents:
49972
diff
changeset
|
92 raise error.LookupError( |
47155
96ee8ca99f5a
revlog: use revlog.display_id in LookupError
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47150
diff
changeset
|
93 deltabase, self.display_id, _(b'unknown delta base') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
94 ) |
18416
87f370c5fef5
bundlerepo: store validated deltabase rev in basemap instead of node
Mads Kiilerich <madski@unity3d.com>
parents:
18415
diff
changeset
|
95 |
87f370c5fef5
bundlerepo: store validated deltabase rev in basemap instead of node
Mads Kiilerich <madski@unity3d.com>
parents:
18415
diff
changeset
|
96 baserev = self.rev(deltabase) |
47143
47ffc754989a
revlog: always "append" full size tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
97 # start, size, full unc. size, base (unused), link, p1, p2, node, sidedata_offset (unused), sidedata_size (unused) |
47398
53289d02037a
revlog: use the `entry` function in bundlerepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47394
diff
changeset
|
98 e = revlogutils.entry( |
53289d02037a
revlog: use the `entry` function in bundlerepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47394
diff
changeset
|
99 flags=flags, |
53289d02037a
revlog: use the `entry` function in bundlerepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47394
diff
changeset
|
100 data_offset=start, |
53289d02037a
revlog: use the `entry` function in bundlerepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47394
diff
changeset
|
101 data_compressed_length=size, |
53289d02037a
revlog: use the `entry` function in bundlerepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47394
diff
changeset
|
102 data_delta_base=baserev, |
53289d02037a
revlog: use the `entry` function in bundlerepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47394
diff
changeset
|
103 link_rev=linkrev, |
53289d02037a
revlog: use the `entry` function in bundlerepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47394
diff
changeset
|
104 parent_rev_1=self.rev(p1), |
53289d02037a
revlog: use the `entry` function in bundlerepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47394
diff
changeset
|
105 parent_rev_2=self.rev(p2), |
53289d02037a
revlog: use the `entry` function in bundlerepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47394
diff
changeset
|
106 node_id=node, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
107 ) |
38850
6104b203bec8
index: replace insert(-1, e) method by append(e) method
Martin von Zweigbergk <martinvonz@google.com>
parents:
38165
diff
changeset
|
108 self.index.append(e) |
18411
8b0f0dd56cec
bundlerepo: improve performance for bundle() revset expression
Mads Kiilerich <madski@unity3d.com>
parents:
18410
diff
changeset
|
109 self.bundlerevs.add(n) |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
110 n += 1 |
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
111 |
51009
3470a39fb66b
revlog: adapt the `reading` check for `bundlerepo`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50925
diff
changeset
|
112 @contextlib.contextmanager |
3470a39fb66b
revlog: adapt the `reading` check for `bundlerepo`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50925
diff
changeset
|
113 def reading(self): |
3470a39fb66b
revlog: adapt the `reading` check for `bundlerepo`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50925
diff
changeset
|
114 if self.repotiprev < 0: |
3470a39fb66b
revlog: adapt the `reading` check for `bundlerepo`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50925
diff
changeset
|
115 yield |
3470a39fb66b
revlog: adapt the `reading` check for `bundlerepo`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50925
diff
changeset
|
116 else: |
3470a39fb66b
revlog: adapt the `reading` check for `bundlerepo`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50925
diff
changeset
|
117 with super().reading() as x: |
3470a39fb66b
revlog: adapt the `reading` check for `bundlerepo`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50925
diff
changeset
|
118 yield x |
3470a39fb66b
revlog: adapt the `reading` check for `bundlerepo`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50925
diff
changeset
|
119 |
51023
8520db304f01
revlog: drop more file description passing between private function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51009
diff
changeset
|
120 def _chunk(self, rev): |
18643
cc28a84db8c9
bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents:
18568
diff
changeset
|
121 # Warning: in case of bundle, the diff is against what we stored as |
cc28a84db8c9
bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents:
18568
diff
changeset
|
122 # delta base, not against rev - 1 |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
123 # XXX: could use some caching |
18643
cc28a84db8c9
bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents:
18568
diff
changeset
|
124 if rev <= self.repotiprev: |
9676
48bf28d3c8dd
bundlerepo: keep the bundlerevlog interface in sync with revlog
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9650
diff
changeset
|
125 return revlog.revlog._chunk(self, rev) |
12332
680fe77ab5b8
bundlerepo: use bundle objects everywhere
Matt Mackall <mpm@selenic.com>
parents:
12331
diff
changeset
|
126 self.bundle.seek(self.start(rev)) |
680fe77ab5b8
bundlerepo: use bundle objects everywhere
Matt Mackall <mpm@selenic.com>
parents:
12331
diff
changeset
|
127 return self.bundle.read(self.length(rev)) |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
128 |
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
129 def revdiff(self, rev1, rev2): |
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
130 """return or calculate a delta between two revisions""" |
18643
cc28a84db8c9
bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents:
18568
diff
changeset
|
131 if rev1 > self.repotiprev and rev2 > self.repotiprev: |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
132 # hot path for bundle |
18643
cc28a84db8c9
bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents:
18568
diff
changeset
|
133 revb = self.index[rev2][3] |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
134 if revb == rev1: |
9676
48bf28d3c8dd
bundlerepo: keep the bundlerevlog interface in sync with revlog
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9650
diff
changeset
|
135 return self._chunk(rev2) |
18643
cc28a84db8c9
bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents:
18568
diff
changeset
|
136 elif rev1 <= self.repotiprev and rev2 <= self.repotiprev: |
4028
540d1059c802
bundlerepo: it was meant to be revdiff() instead of chunk()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3791
diff
changeset
|
137 return revlog.revlog.revdiff(self, rev1, rev2) |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
138 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
139 return mdiff.textdiff(self.rawdata(rev1), self.rawdata(rev2)) |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
140 |
51023
8520db304f01
revlog: drop more file description passing between private function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51009
diff
changeset
|
141 def _rawtext(self, node, rev): |
42821
c070ca6ed86d
bundlerepo: simplify code to take advantage of `_rawtext`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42770
diff
changeset
|
142 if rev is None: |
16375
d7d64b89a65c
revlog: allow retrieving contents by revision number
Matt Mackall <mpm@selenic.com>
parents:
16195
diff
changeset
|
143 rev = self.rev(node) |
42821
c070ca6ed86d
bundlerepo: simplify code to take advantage of `_rawtext`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42770
diff
changeset
|
144 validated = False |
31836
4598e8f43e20
bundlerepo: fix raw handling in revision()
Jun Wu <quark@fb.com>
parents:
31835
diff
changeset
|
145 rawtext = None |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
146 chain = [] |
18415
95b8629fd2de
bundlerepo: use rev instead of node for iteration in revision()
Mads Kiilerich <madski@unity3d.com>
parents:
18414
diff
changeset
|
147 iterrev = rev |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
148 # reconstruct the revision if it is from a changegroup |
18643
cc28a84db8c9
bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents:
18568
diff
changeset
|
149 while iterrev > self.repotiprev: |
51093
8ec2de9c6770
revlog: move the_revisioncache on the inner object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51044
diff
changeset
|
150 if ( |
8ec2de9c6770
revlog: move the_revisioncache on the inner object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51044
diff
changeset
|
151 self._inner._revisioncache |
8ec2de9c6770
revlog: move the_revisioncache on the inner object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51044
diff
changeset
|
152 and self._inner._revisioncache[1] == iterrev |
8ec2de9c6770
revlog: move the_revisioncache on the inner object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51044
diff
changeset
|
153 ): |
8ec2de9c6770
revlog: move the_revisioncache on the inner object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51044
diff
changeset
|
154 rawtext = self._inner._revisioncache[2] |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
155 break |
18415
95b8629fd2de
bundlerepo: use rev instead of node for iteration in revision()
Mads Kiilerich <madski@unity3d.com>
parents:
18414
diff
changeset
|
156 chain.append(iterrev) |
18643
cc28a84db8c9
bundlerepo: replace basemap with the base field in the index
Mads Kiilerich <mads@kiilerich.com>
parents:
18568
diff
changeset
|
157 iterrev = self.index[iterrev][3] |
42821
c070ca6ed86d
bundlerepo: simplify code to take advantage of `_rawtext`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42770
diff
changeset
|
158 if iterrev == nullrev: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
159 rawtext = b'' |
42821
c070ca6ed86d
bundlerepo: simplify code to take advantage of `_rawtext`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42770
diff
changeset
|
160 elif rawtext is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
161 r = super(bundlerevlog, self)._rawtext( |
51023
8520db304f01
revlog: drop more file description passing between private function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51009
diff
changeset
|
162 self.node(iterrev), |
8520db304f01
revlog: drop more file description passing between private function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51009
diff
changeset
|
163 iterrev, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
164 ) |
42821
c070ca6ed86d
bundlerepo: simplify code to take advantage of `_rawtext`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42770
diff
changeset
|
165 __, rawtext, validated = r |
c070ca6ed86d
bundlerepo: simplify code to take advantage of `_rawtext`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42770
diff
changeset
|
166 if chain: |
c070ca6ed86d
bundlerepo: simplify code to take advantage of `_rawtext`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42770
diff
changeset
|
167 validated = False |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
168 while chain: |
9676
48bf28d3c8dd
bundlerepo: keep the bundlerevlog interface in sync with revlog
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9650
diff
changeset
|
169 delta = self._chunk(chain.pop()) |
31836
4598e8f43e20
bundlerepo: fix raw handling in revision()
Jun Wu <quark@fb.com>
parents:
31835
diff
changeset
|
170 rawtext = mdiff.patches(rawtext, [delta]) |
42821
c070ca6ed86d
bundlerepo: simplify code to take advantage of `_rawtext`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42770
diff
changeset
|
171 return rev, rawtext, validated |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
172 |
35047
32d079f37207
bundlerepo: make methods agree with base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35011
diff
changeset
|
173 def addrevision(self, *args, **kwargs): |
32d079f37207
bundlerepo: make methods agree with base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35011
diff
changeset
|
174 raise NotImplementedError |
32d079f37207
bundlerepo: make methods agree with base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35011
diff
changeset
|
175 |
32d079f37207
bundlerepo: make methods agree with base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35011
diff
changeset
|
176 def addgroup(self, *args, **kwargs): |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
177 raise NotImplementedError |
35047
32d079f37207
bundlerepo: make methods agree with base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35011
diff
changeset
|
178 |
32d079f37207
bundlerepo: make methods agree with base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35011
diff
changeset
|
179 def strip(self, *args, **kwargs): |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
180 raise NotImplementedError |
35047
32d079f37207
bundlerepo: make methods agree with base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35011
diff
changeset
|
181 |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
182 def checksize(self): |
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
183 raise NotImplementedError |
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
184 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
185 |
1946
9fee186f7f0d
bundlerepo: remove relative import, fix a comment
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1942
diff
changeset
|
186 class bundlechangelog(bundlerevlog, changelog.changelog): |
35076
90609be10891
bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35075
diff
changeset
|
187 def __init__(self, opener, cgunpacker): |
1946
9fee186f7f0d
bundlerepo: remove relative import, fix a comment
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1942
diff
changeset
|
188 changelog.changelog.__init__(self, opener) |
14142
cb91ea6af733
bundlerepo: port to new bundle API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
14076
diff
changeset
|
189 linkmapper = lambda x: x |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
190 bundlerevlog.__init__( |
47072
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
191 self, |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
192 opener, |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
193 (revlog_constants.KIND_CHANGELOG, None), |
47150
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47148
diff
changeset
|
194 self.radix, |
47072
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
195 cgunpacker, |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
196 linkmapper, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
197 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
198 |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
199 |
30373
31de088945cd
manifest: add bundlemanifestlog support
Durham Goode <durham@fb.com>
parents:
30218
diff
changeset
|
200 class bundlemanifest(bundlerevlog, manifest.manifestrevlog): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
201 def __init__( |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46711
diff
changeset
|
202 self, |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46711
diff
changeset
|
203 nodeconstants, |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46711
diff
changeset
|
204 opener, |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46711
diff
changeset
|
205 cgunpacker, |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46711
diff
changeset
|
206 linkmapper, |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46711
diff
changeset
|
207 dirlogstarts=None, |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46711
diff
changeset
|
208 dir=b'', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
209 ): |
51025
f70ce1aedbcb
manifestrevlog: flag some inconsistency in bundle/union repo inheritance
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51023
diff
changeset
|
210 # XXX manifestrevlog is not actually a revlog , so mixing it with |
f70ce1aedbcb
manifestrevlog: flag some inconsistency in bundle/union repo inheritance
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51023
diff
changeset
|
211 # bundlerevlog is not a good idea. |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46711
diff
changeset
|
212 manifest.manifestrevlog.__init__(self, nodeconstants, opener, tree=dir) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
213 bundlerevlog.__init__( |
47072
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
214 self, |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
215 opener, |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
216 (revlog_constants.KIND_MANIFESTLOG, dir), |
47150
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47148
diff
changeset
|
217 self._revlog.radix, |
47072
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
218 cgunpacker, |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
219 linkmapper, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
220 ) |
29715
55d341877316
bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents:
29713
diff
changeset
|
221 if dirlogstarts is None: |
55d341877316
bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents:
29713
diff
changeset
|
222 dirlogstarts = {} |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
223 if self.bundle.version == b"03": |
29715
55d341877316
bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents:
29713
diff
changeset
|
224 dirlogstarts = _getfilestarts(self.bundle) |
55d341877316
bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents:
29713
diff
changeset
|
225 self._dirlogstarts = dirlogstarts |
55d341877316
bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents:
29713
diff
changeset
|
226 self._linkmapper = linkmapper |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
227 |
29715
55d341877316
bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents:
29713
diff
changeset
|
228 def dirlog(self, d): |
55d341877316
bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents:
29713
diff
changeset
|
229 if d in self._dirlogstarts: |
55d341877316
bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents:
29713
diff
changeset
|
230 self.bundle.seek(self._dirlogstarts[d]) |
55d341877316
bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents:
29713
diff
changeset
|
231 return bundlemanifest( |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46711
diff
changeset
|
232 self.nodeconstants, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
233 self.opener, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
234 self.bundle, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
235 self._linkmapper, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
236 self._dirlogstarts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
237 dir=d, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
238 ) |
29715
55d341877316
bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents:
29713
diff
changeset
|
239 return super(bundlemanifest, self).dirlog(d) |
55d341877316
bundlerepo: add support for treemanifests in cg3 bundles
Augie Fackler <augie@google.com>
parents:
29713
diff
changeset
|
240 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
241 |
37497
1541e1a8e87d
filelog: wrap revlog instead of inheriting it (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37331
diff
changeset
|
242 class bundlefilelog(filelog.filelog): |
35076
90609be10891
bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35075
diff
changeset
|
243 def __init__(self, opener, path, cgunpacker, linkmapper): |
1946
9fee186f7f0d
bundlerepo: remove relative import, fix a comment
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1942
diff
changeset
|
244 filelog.filelog.__init__(self, opener, path) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
245 self._revlog = bundlerevlog( |
47072
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
246 opener, |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
247 # XXX should use the unencoded path |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
248 target=(revlog_constants.KIND_FILELOG, path), |
47150
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47148
diff
changeset
|
249 radix=self._revlog.radix, |
47072
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
250 cgunpacker=cgunpacker, |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
251 linkmapper=linkmapper, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
252 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
253 |
14287
7c231754a621
filelog: add file function to open other filelogs
Sune Foldager <cryo@cyanite.org>
parents:
14190
diff
changeset
|
254 |
17193
1d710fe5ee0e
peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents:
17191
diff
changeset
|
255 class bundlepeer(localrepo.localpeer): |
1d710fe5ee0e
peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents:
17191
diff
changeset
|
256 def canpush(self): |
1d710fe5ee0e
peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents:
17191
diff
changeset
|
257 return False |
1d710fe5ee0e
peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents:
17191
diff
changeset
|
258 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
259 |
23631
b8260abfeb7d
bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents:
22182
diff
changeset
|
260 class bundlephasecache(phases.phasecache): |
b8260abfeb7d
bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents:
22182
diff
changeset
|
261 def __init__(self, *args, **kwargs): |
b8260abfeb7d
bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents:
22182
diff
changeset
|
262 super(bundlephasecache, self).__init__(*args, **kwargs) |
50925
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50437
diff
changeset
|
263 if hasattr(self, 'opener'): |
31240
5f68e7341ada
vfs: use 'vfs' module directly in 'mercurial.bundlerepo'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30924
diff
changeset
|
264 self.opener = vfsmod.readonlyvfs(self.opener) |
23631
b8260abfeb7d
bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents:
22182
diff
changeset
|
265 |
b8260abfeb7d
bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents:
22182
diff
changeset
|
266 def write(self): |
b8260abfeb7d
bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents:
22182
diff
changeset
|
267 raise NotImplementedError |
b8260abfeb7d
bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents:
22182
diff
changeset
|
268 |
b8260abfeb7d
bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents:
22182
diff
changeset
|
269 def _write(self, fp): |
b8260abfeb7d
bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents:
22182
diff
changeset
|
270 raise NotImplementedError |
b8260abfeb7d
bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents:
22182
diff
changeset
|
271 |
51417
ac1c75188440
phases: invalidate the phases set less often on retract boundary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51401
diff
changeset
|
272 def _updateroots(self, repo, phase, newroots, tr, invalidate=True): |
51400
68289ed170c7
phases: mark `phasecache.phaseroots` private
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51093
diff
changeset
|
273 self._phaseroots[phase] = newroots |
51417
ac1c75188440
phases: invalidate the phases set less often on retract boundary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51401
diff
changeset
|
274 if invalidate: |
ac1c75188440
phases: invalidate the phases set less often on retract boundary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51401
diff
changeset
|
275 self.invalidate() |
23631
b8260abfeb7d
bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents:
22182
diff
changeset
|
276 self.dirty = True |
b8260abfeb7d
bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents:
22182
diff
changeset
|
277 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
278 |
35076
90609be10891
bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35075
diff
changeset
|
279 def _getfilestarts(cgunpacker): |
35077
cd4cd7b94ff1
bundlerepo: rename "bundlefilespos" variable and attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35076
diff
changeset
|
280 filespos = {} |
35076
90609be10891
bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35075
diff
changeset
|
281 for chunkdata in iter(cgunpacker.filelogheader, {}): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
282 fname = chunkdata[b'filename'] |
35077
cd4cd7b94ff1
bundlerepo: rename "bundlefilespos" variable and attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35076
diff
changeset
|
283 filespos[fname] = cgunpacker.tell() |
35076
90609be10891
bundlerepo: rename "bundle" arguments to "cgunpacker"
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35075
diff
changeset
|
284 for chunk in iter(lambda: cgunpacker.deltachunk(None), {}): |
29712
9e88077f972c
bundlerepo: introduce method to find file starts and use it
Augie Fackler <augie@google.com>
parents:
29711
diff
changeset
|
285 pass |
35077
cd4cd7b94ff1
bundlerepo: rename "bundlefilespos" variable and attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35076
diff
changeset
|
286 return filespos |
29712
9e88077f972c
bundlerepo: introduce method to find file starts and use it
Augie Fackler <augie@google.com>
parents:
29711
diff
changeset
|
287 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
288 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
289 class bundlerepository: |
35050
d2458ba810c5
bundlerepo: add docstring for bundlerepository class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35049
diff
changeset
|
290 """A repository instance that is a union of a local repo and a bundle. |
d2458ba810c5
bundlerepo: add docstring for bundlerepository class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35049
diff
changeset
|
291 |
d2458ba810c5
bundlerepo: add docstring for bundlerepository class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35049
diff
changeset
|
292 Instances represent a read-only repository composed of a local repository |
d2458ba810c5
bundlerepo: add docstring for bundlerepository class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35049
diff
changeset
|
293 with the contents of a bundle file applied. The repository instance is |
d2458ba810c5
bundlerepo: add docstring for bundlerepository class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35049
diff
changeset
|
294 conceptually similar to the state of a repository after an |
d2458ba810c5
bundlerepo: add docstring for bundlerepository class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35049
diff
changeset
|
295 ``hg unbundle`` operation. However, the contents of the bundle are never |
d2458ba810c5
bundlerepo: add docstring for bundlerepository class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35049
diff
changeset
|
296 applied to the actual base repository. |
39604
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
297 |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
298 Instances constructed directly are not usable as repository objects. |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
299 Use instance() or makebundlerepository() to create instances. |
35050
d2458ba810c5
bundlerepo: add docstring for bundlerepository class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35049
diff
changeset
|
300 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
301 |
39604
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
302 def __init__(self, bundlepath, url, tempparent): |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
303 self._tempparent = tempparent |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
304 self._url = url |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
305 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
306 self.ui.setconfig(b'phases', b'publish', False, b'bundlerepo') |
2673
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2273
diff
changeset
|
307 |
50198
a6a8946d5173
bundlerepo: move most attribute declaration earlier in __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50197
diff
changeset
|
308 # dict with the mapping 'filename' -> position in the changegroup. |
a6a8946d5173
bundlerepo: move most attribute declaration earlier in __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50197
diff
changeset
|
309 self._cgfilespos = {} |
a6a8946d5173
bundlerepo: move most attribute declaration earlier in __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50197
diff
changeset
|
310 self._bundlefile = None |
a6a8946d5173
bundlerepo: move most attribute declaration earlier in __init__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50197
diff
changeset
|
311 self._cgunpacker = None |
2273
f116ddea537f
add support for compressed bundle repositories
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2257
diff
changeset
|
312 self.tempfile = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
313 f = util.posixfile(bundlepath, b"rb") |
39604
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
314 bundle = exchange.readbundle(self.ui, f, bundlepath) |
12044
bcc7139521b7
bundlerepo: remove duplication of bundle decompressors
Matt Mackall <mpm@selenic.com>
parents:
11154
diff
changeset
|
315 |
35053
495fcff10124
bundlerepo: assign bundle attributes in bundle type blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35052
diff
changeset
|
316 if isinstance(bundle, bundle2.unbundle20): |
495fcff10124
bundlerepo: assign bundle attributes in bundle type blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35052
diff
changeset
|
317 self._bundlefile = bundle |
495fcff10124
bundlerepo: assign bundle attributes in bundle type blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35052
diff
changeset
|
318 |
35115
2b72bc88043f
bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35077
diff
changeset
|
319 cgpart = None |
35116
da91e7309daf
bundle2: don't use seekable bundle2 parts by default (issue5691)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35115
diff
changeset
|
320 for part in bundle.iterparts(seekable=True): |
50200
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
321 if part.type == b'phase-heads': |
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
322 self._handle_bundle2_phase_part(bundle, part) |
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
323 elif part.type == b'changegroup': |
35115
2b72bc88043f
bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35077
diff
changeset
|
324 if cgpart: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
325 raise NotImplementedError( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43115
diff
changeset
|
326 b"can't process multiple changegroups" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
327 ) |
35115
2b72bc88043f
bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35077
diff
changeset
|
328 cgpart = part |
50196
2a7e8471782c
bundlerepo: expliclty handing cg part from bundle2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49975
diff
changeset
|
329 self._handle_bundle2_cg_part(bundle, part) |
24073
ff5caa8dfd99
bundlerepo: basic bundle2 support
Eric Sumner <ericsumner@fb.com>
parents:
24072
diff
changeset
|
330 |
35115
2b72bc88043f
bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35077
diff
changeset
|
331 if not cgpart: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
332 raise error.Abort(_(b"No changegroups found")) |
35115
2b72bc88043f
bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35077
diff
changeset
|
333 |
2b72bc88043f
bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35077
diff
changeset
|
334 # This is required to placate a later consumer, which expects |
2b72bc88043f
bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35077
diff
changeset
|
335 # the payload offset to be at the beginning of the changegroup. |
2b72bc88043f
bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35077
diff
changeset
|
336 # We need to do this after the iterparts() generator advances |
2b72bc88043f
bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35077
diff
changeset
|
337 # because iterparts() will seek to end of payload after the |
2b72bc88043f
bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35077
diff
changeset
|
338 # generator returns control to iterparts(). |
2b72bc88043f
bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35077
diff
changeset
|
339 cgpart.seek(0, os.SEEK_SET) |
2b72bc88043f
bundle2: only seek to beginning of part in bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35077
diff
changeset
|
340 |
35053
495fcff10124
bundlerepo: assign bundle attributes in bundle type blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35052
diff
changeset
|
341 elif isinstance(bundle, changegroup.cg1unpacker): |
50197
c493cb859158
bundlerepo: move the handling of bundl1 in its own method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50196
diff
changeset
|
342 self._handle_bundle1(bundle, bundlepath) |
35051
4f04c9207a76
bundlerepo: don't assume there are only two bundle classes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35050
diff
changeset
|
343 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
344 raise error.Abort( |
50201
149f09ffef46
bundlerepo: fix string interpolation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50200
diff
changeset
|
345 _(b'bundle type %r cannot be read') % type(bundle) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
346 ) |
26801
73bf76bf6f14
bundlerepo: uncompress changegroup in bundle1 case only
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26800
diff
changeset
|
347 |
50199
21f876895dfe
bundlerepo: handle changegroup induced phase movement in the associated method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50198
diff
changeset
|
348 def _handle_bundle1(self, bundle, bundlepath): |
21f876895dfe
bundlerepo: handle changegroup induced phase movement in the associated method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50198
diff
changeset
|
349 if bundle.compressed(): |
21f876895dfe
bundlerepo: handle changegroup induced phase movement in the associated method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50198
diff
changeset
|
350 f = self._writetempbundle(bundle.read, b'.hg10un', header=b'HG10UN') |
21f876895dfe
bundlerepo: handle changegroup induced phase movement in the associated method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50198
diff
changeset
|
351 bundle = exchange.readbundle(self.ui, f, bundlepath, self.vfs) |
21f876895dfe
bundlerepo: handle changegroup induced phase movement in the associated method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50198
diff
changeset
|
352 |
21f876895dfe
bundlerepo: handle changegroup induced phase movement in the associated method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50198
diff
changeset
|
353 self._bundlefile = bundle |
21f876895dfe
bundlerepo: handle changegroup induced phase movement in the associated method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50198
diff
changeset
|
354 self._cgunpacker = bundle |
21f876895dfe
bundlerepo: handle changegroup induced phase movement in the associated method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50198
diff
changeset
|
355 |
23632
e7fcf58acd71
bundlerepo: retract phase boundary
Eric Sumner <ericsumner@fb.com>
parents:
23631
diff
changeset
|
356 self.firstnewrev = self.changelog.repotiprev + 1 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
357 phases.retractboundary( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
358 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
359 None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
360 phases.draft, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
361 [ctx.node() for ctx in self[self.firstnewrev :]], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
362 ) |
23632
e7fcf58acd71
bundlerepo: retract phase boundary
Eric Sumner <ericsumner@fb.com>
parents:
23631
diff
changeset
|
363 |
50196
2a7e8471782c
bundlerepo: expliclty handing cg part from bundle2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49975
diff
changeset
|
364 def _handle_bundle2_cg_part(self, bundle, part): |
2a7e8471782c
bundlerepo: expliclty handing cg part from bundle2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49975
diff
changeset
|
365 assert part.type == b'changegroup' |
35075
3eeb0a3eeaed
bundlerepo: use early return
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35054
diff
changeset
|
366 cgstream = part |
50200
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
367 targetphase = part.params.get(b'targetphase') |
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
368 try: |
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
369 targetphase = int(targetphase) |
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
370 except TypeError: |
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
371 pass |
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
372 if targetphase is None: |
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
373 targetphase = phases.draft |
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
374 if targetphase not in phases.allphases: |
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
375 m = _(b'unsupported targetphase: %d') |
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
376 m %= targetphase |
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
377 raise error.Abort(m) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
378 version = part.params.get(b'version', b'01') |
35075
3eeb0a3eeaed
bundlerepo: use early return
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35054
diff
changeset
|
379 legalcgvers = changegroup.supportedincomingversions(self) |
3eeb0a3eeaed
bundlerepo: use early return
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35054
diff
changeset
|
380 if version not in legalcgvers: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
381 msg = _(b'Unsupported changegroup version: %s') |
35075
3eeb0a3eeaed
bundlerepo: use early return
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35054
diff
changeset
|
382 raise error.Abort(msg % version) |
3eeb0a3eeaed
bundlerepo: use early return
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35054
diff
changeset
|
383 if bundle.compressed(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
384 cgstream = self._writetempbundle(part.read, b'.cg%sun' % version) |
35075
3eeb0a3eeaed
bundlerepo: use early return
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35054
diff
changeset
|
385 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
386 self._cgunpacker = changegroup.getunbundler(version, cgstream, b'UN') |
33889
f672d060a931
bundlerepo: move bundle2 part handling out to a function
Durham Goode <durham@fb.com>
parents:
33888
diff
changeset
|
387 |
50199
21f876895dfe
bundlerepo: handle changegroup induced phase movement in the associated method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50198
diff
changeset
|
388 self.firstnewrev = self.changelog.repotiprev + 1 |
21f876895dfe
bundlerepo: handle changegroup induced phase movement in the associated method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50198
diff
changeset
|
389 phases.retractboundary( |
21f876895dfe
bundlerepo: handle changegroup induced phase movement in the associated method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50198
diff
changeset
|
390 self, |
21f876895dfe
bundlerepo: handle changegroup induced phase movement in the associated method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50198
diff
changeset
|
391 None, |
50200
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
392 targetphase, |
50199
21f876895dfe
bundlerepo: handle changegroup induced phase movement in the associated method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50198
diff
changeset
|
393 [ctx.node() for ctx in self[self.firstnewrev :]], |
21f876895dfe
bundlerepo: handle changegroup induced phase movement in the associated method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50198
diff
changeset
|
394 ) |
21f876895dfe
bundlerepo: handle changegroup induced phase movement in the associated method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50198
diff
changeset
|
395 |
50200
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
396 def _handle_bundle2_phase_part(self, bundle, part): |
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
397 assert part.type == b'phase-heads' |
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
398 |
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
399 unfi = self.unfiltered() |
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
400 headsbyphase = phases.binarydecode(part) |
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
401 phases.updatephases(unfi, lambda: None, headsbyphase) |
197204dba8a2
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50199
diff
changeset
|
402 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
403 def _writetempbundle(self, readfn, suffix, header=b''): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45814
diff
changeset
|
404 """Write a temporary file to disk""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
405 fdtemp, temp = self.vfs.mkstemp(prefix=b"hg-bundle-", suffix=suffix) |
33887
702a26fec3e2
bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents:
33182
diff
changeset
|
406 self.tempfile = temp |
702a26fec3e2
bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents:
33182
diff
changeset
|
407 |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
408 with os.fdopen(fdtemp, 'wb') as fptemp: |
33887
702a26fec3e2
bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents:
33182
diff
changeset
|
409 fptemp.write(header) |
702a26fec3e2
bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents:
33182
diff
changeset
|
410 while True: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
411 chunk = readfn(2 ** 18) |
33887
702a26fec3e2
bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents:
33182
diff
changeset
|
412 if not chunk: |
702a26fec3e2
bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents:
33182
diff
changeset
|
413 break |
702a26fec3e2
bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents:
33182
diff
changeset
|
414 fptemp.write(chunk) |
702a26fec3e2
bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents:
33182
diff
changeset
|
415 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
416 return self.vfs.open(self.tempfile, mode=b"rb") |
33887
702a26fec3e2
bundlerepo: move temp bundle creation to a separate function
Durham Goode <durham@fb.com>
parents:
33182
diff
changeset
|
417 |
18014
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17913
diff
changeset
|
418 @localrepo.unfilteredpropertycache |
23631
b8260abfeb7d
bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents:
22182
diff
changeset
|
419 def _phasecache(self): |
b8260abfeb7d
bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents:
22182
diff
changeset
|
420 return bundlephasecache(self, self._phasedefaults) |
b8260abfeb7d
bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents:
22182
diff
changeset
|
421 |
b8260abfeb7d
bundlerepo: implement safe phasecache
Eric Sumner <ericsumner@fb.com>
parents:
22182
diff
changeset
|
422 @localrepo.unfilteredpropertycache |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8227
diff
changeset
|
423 def changelog(self): |
14144
3c3c53d8343a
unbundler: separate delta and header parsing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
14142
diff
changeset
|
424 # consume the header if it exists |
35054
3f393e4593f2
bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35053
diff
changeset
|
425 self._cgunpacker.changelogheader() |
3f393e4593f2
bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35053
diff
changeset
|
426 c = bundlechangelog(self.svfs, self._cgunpacker) |
3f393e4593f2
bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35053
diff
changeset
|
427 self.manstart = self._cgunpacker.tell() |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8227
diff
changeset
|
428 return c |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8227
diff
changeset
|
429 |
42510
3472a3f9d785
localrepo: introduce a `_refreshchangelog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41038
diff
changeset
|
430 def _refreshchangelog(self): |
3472a3f9d785
localrepo: introduce a `_refreshchangelog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41038
diff
changeset
|
431 # changelog for bundle repo are not filecache, this method is not |
3472a3f9d785
localrepo: introduce a `_refreshchangelog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41038
diff
changeset
|
432 # applicable. |
3472a3f9d785
localrepo: introduce a `_refreshchangelog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41038
diff
changeset
|
433 pass |
3472a3f9d785
localrepo: introduce a `_refreshchangelog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41038
diff
changeset
|
434 |
39763
5ccd791344f3
localrepo: pass root manifest into manifestlog.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39604
diff
changeset
|
435 @localrepo.unfilteredpropertycache |
5ccd791344f3
localrepo: pass root manifest into manifestlog.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39604
diff
changeset
|
436 def manifestlog(self): |
35054
3f393e4593f2
bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35053
diff
changeset
|
437 self._cgunpacker.seek(self.manstart) |
14144
3c3c53d8343a
unbundler: separate delta and header parsing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
14142
diff
changeset
|
438 # consume the header if it exists |
35054
3f393e4593f2
bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35053
diff
changeset
|
439 self._cgunpacker.manifestheader() |
28221
7a8c44844f57
bundlerepo: properly handle hidden linkrev in manifestlog (issue4945)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28186
diff
changeset
|
440 linkmapper = self.unfiltered().changelog.rev |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46711
diff
changeset
|
441 rootstore = bundlemanifest( |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46711
diff
changeset
|
442 self.nodeconstants, self.svfs, self._cgunpacker, linkmapper |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46711
diff
changeset
|
443 ) |
35054
3f393e4593f2
bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35053
diff
changeset
|
444 self.filestart = self._cgunpacker.tell() |
39763
5ccd791344f3
localrepo: pass root manifest into manifestlog.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39604
diff
changeset
|
445 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
446 return manifest.manifestlog( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
447 self.svfs, self, rootstore, self.narrowmatch() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
448 ) |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8227
diff
changeset
|
449 |
35011
a2dfc723b6b5
bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents:
34293
diff
changeset
|
450 def _consumemanifest(self): |
a2dfc723b6b5
bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents:
34293
diff
changeset
|
451 """Consumes the manifest portion of the bundle, setting filestart so the |
a2dfc723b6b5
bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents:
34293
diff
changeset
|
452 file portion can be read.""" |
35054
3f393e4593f2
bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35053
diff
changeset
|
453 self._cgunpacker.seek(self.manstart) |
3f393e4593f2
bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35053
diff
changeset
|
454 self._cgunpacker.manifestheader() |
3f393e4593f2
bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35053
diff
changeset
|
455 for delta in self._cgunpacker.deltaiter(): |
35011
a2dfc723b6b5
bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents:
34293
diff
changeset
|
456 pass |
35054
3f393e4593f2
bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35053
diff
changeset
|
457 self.filestart = self._cgunpacker.tell() |
35011
a2dfc723b6b5
bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents:
34293
diff
changeset
|
458 |
18014
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17913
diff
changeset
|
459 @localrepo.unfilteredpropertycache |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8227
diff
changeset
|
460 def manstart(self): |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8227
diff
changeset
|
461 self.changelog |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8227
diff
changeset
|
462 return self.manstart |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8227
diff
changeset
|
463 |
18014
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17913
diff
changeset
|
464 @localrepo.unfilteredpropertycache |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8227
diff
changeset
|
465 def filestart(self): |
30375
11b8b740d54a
manifest: remove last uses of repo.manifest
Durham Goode <durham@fb.com>
parents:
30373
diff
changeset
|
466 self.manifestlog |
35011
a2dfc723b6b5
bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents:
34293
diff
changeset
|
467 |
a2dfc723b6b5
bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents:
34293
diff
changeset
|
468 # If filestart was not set by self.manifestlog, that means the |
a2dfc723b6b5
bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents:
34293
diff
changeset
|
469 # manifestlog implementation did not consume the manifests from the |
a2dfc723b6b5
bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents:
34293
diff
changeset
|
470 # changegroup (ex: it might be consuming trees from a separate bundle2 |
a2dfc723b6b5
bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents:
34293
diff
changeset
|
471 # part instead). So we need to manually consume it. |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
472 if 'filestart' not in self.__dict__: |
35011
a2dfc723b6b5
bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents:
34293
diff
changeset
|
473 self._consumemanifest() |
a2dfc723b6b5
bundle: allow bundlerepo to support alternative manifest implementations
Durham Goode <durham@fb.com>
parents:
34293
diff
changeset
|
474 |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8227
diff
changeset
|
475 return self.filestart |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
476 |
2673
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2273
diff
changeset
|
477 def url(self): |
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2273
diff
changeset
|
478 return self._url |
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2273
diff
changeset
|
479 |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
480 def file(self, f): |
35077
cd4cd7b94ff1
bundlerepo: rename "bundlefilespos" variable and attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35076
diff
changeset
|
481 if not self._cgfilespos: |
35054
3f393e4593f2
bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35053
diff
changeset
|
482 self._cgunpacker.seek(self.filestart) |
35077
cd4cd7b94ff1
bundlerepo: rename "bundlefilespos" variable and attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35076
diff
changeset
|
483 self._cgfilespos = _getfilestarts(self._cgunpacker) |
5262 | 484 |
35077
cd4cd7b94ff1
bundlerepo: rename "bundlefilespos" variable and attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35076
diff
changeset
|
485 if f in self._cgfilespos: |
cd4cd7b94ff1
bundlerepo: rename "bundlefilespos" variable and attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35076
diff
changeset
|
486 self._cgunpacker.seek(self._cgfilespos[f]) |
28186
5ab6f0fde75f
bundlerepo: properly handle hidden linkrev in filelog (issue4945)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27953
diff
changeset
|
487 linkmapper = self.unfiltered().changelog.rev |
35054
3f393e4593f2
bundlerepo: rename _bundle to _cgunpacker
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35053
diff
changeset
|
488 return bundlefilelog(self.svfs, f, self._cgunpacker, linkmapper) |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
489 else: |
37331
c68262401c8c
bundlerepo: use super() when calling file()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36835
diff
changeset
|
490 return super(bundlerepository, self).file(f) |
1942
9da45de3118d
add bundlerepo.py: a read-only repo that can use uncompressed bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
491 |
12347
6277a9469dff
bundlerepo: restore close() method
Matt Mackall <mpm@selenic.com>
parents:
12335
diff
changeset
|
492 def close(self): |
6277a9469dff
bundlerepo: restore close() method
Matt Mackall <mpm@selenic.com>
parents:
12335
diff
changeset
|
493 """Close assigned bundle file immediately.""" |
35052
df2a676a2e9e
bundlerepo: make bundle and bundlefile attributes private
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35051
diff
changeset
|
494 self._bundlefile.close() |
12962
ff083040a555
bundlerepository: get rid of temporary bundle files (issue2478)
Klaus Koch <kuk42@gmx.net>
parents:
12961
diff
changeset
|
495 if self.tempfile is not None: |
20981
4fdd1172d37e
bundlerepo: treat temporarily extracted bundle file via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20790
diff
changeset
|
496 self.vfs.unlink(self.tempfile) |
6314
9a1c59283ad3
Add ability to directly clone from all-history bundles
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
6312
diff
changeset
|
497 if self._tempparent: |
9a1c59283ad3
Add ability to directly clone from all-history bundles
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
6312
diff
changeset
|
498 shutil.rmtree(self._tempparent, True) |
2740
386f04d6ecb3
clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2673
diff
changeset
|
499 |
6315 | 500 def cancopy(self): |
501 return False | |
502 | |
50437
3a2df812e1c7
pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents:
50201
diff
changeset
|
503 def peer(self, path=None, remotehidden=False): |
3a2df812e1c7
pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents:
50201
diff
changeset
|
504 return bundlepeer(self, path=path, remotehidden=remotehidden) |
17193
1d710fe5ee0e
peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents:
17191
diff
changeset
|
505 |
7435
5e13df32fb74
bundlerepo doesn't really have a dirstate, throw AttributeError if requested
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6953
diff
changeset
|
506 def getcwd(self): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
507 return encoding.getcwd() # always outside the repo |
7435
5e13df32fb74
bundlerepo doesn't really have a dirstate, throw AttributeError if requested
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6953
diff
changeset
|
508 |
28714
dac81729fea4
bundle: warn when update to revision existing only in a bundle (issue5004)
liscju <piotr.listkiewicz@gmail.com>
parents:
28666
diff
changeset
|
509 # Check if parents exist in localrepo before setting |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46907
diff
changeset
|
510 def setparents(self, p1, p2=None): |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46907
diff
changeset
|
511 if p2 is None: |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46907
diff
changeset
|
512 p2 = self.nullid |
28714
dac81729fea4
bundle: warn when update to revision existing only in a bundle (issue5004)
liscju <piotr.listkiewicz@gmail.com>
parents:
28666
diff
changeset
|
513 p1rev = self.changelog.rev(p1) |
dac81729fea4
bundle: warn when update to revision existing only in a bundle (issue5004)
liscju <piotr.listkiewicz@gmail.com>
parents:
28666
diff
changeset
|
514 p2rev = self.changelog.rev(p2) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
515 msg = _(b"setting parent to node %s that only exists in the bundle\n") |
28714
dac81729fea4
bundle: warn when update to revision existing only in a bundle (issue5004)
liscju <piotr.listkiewicz@gmail.com>
parents:
28666
diff
changeset
|
516 if self.changelog.repotiprev < p1rev: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
517 self.ui.warn(msg % hex(p1)) |
28714
dac81729fea4
bundle: warn when update to revision existing only in a bundle (issue5004)
liscju <piotr.listkiewicz@gmail.com>
parents:
28666
diff
changeset
|
518 if self.changelog.repotiprev < p2rev: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
519 self.ui.warn(msg % hex(p2)) |
28714
dac81729fea4
bundle: warn when update to revision existing only in a bundle (issue5004)
liscju <piotr.listkiewicz@gmail.com>
parents:
28666
diff
changeset
|
520 return super(bundlerepository, self).setparents(p1, p2) |
15597
bc0778f5619a
bundlerepo: don't write branch cache to disk
Sune Foldager <cryo@cyanite.org>
parents:
15091
diff
changeset
|
521 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
522 |
39549
089fc0db0954
hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39243
diff
changeset
|
523 def instance(ui, path, create, intents=None, createopts=None): |
2740
386f04d6ecb3
clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2673
diff
changeset
|
524 if create: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
525 raise error.Abort(_(b'cannot create new bundle repository')) |
25830
5418dd5be8ac
bundlerepo: mark internal-only config variable
Matt Mackall <mpm@selenic.com>
parents:
24921
diff
changeset
|
526 # internal config: bundle.mainreporoot |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
527 parentpath = ui.config(b"bundle", b"mainreporoot") |
16042
4b7aa1c899dc
bundlerepo: try to find containing repo on creation (issue1812)
Matt Mackall <mpm@selenic.com>
parents:
15597
diff
changeset
|
528 if not parentpath: |
4b7aa1c899dc
bundlerepo: try to find containing repo on creation (issue1812)
Matt Mackall <mpm@selenic.com>
parents:
15597
diff
changeset
|
529 # try to find the correct path to the working directory repo |
39818
24e493ec2229
py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
39763
diff
changeset
|
530 parentpath = cmdutil.findrepo(encoding.getcwd()) |
16042
4b7aa1c899dc
bundlerepo: try to find containing repo on creation (issue1812)
Matt Mackall <mpm@selenic.com>
parents:
15597
diff
changeset
|
531 if parentpath is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
532 parentpath = b'' |
5664
da72b4d24797
Fix income/pull with bundle and -R (issue 820).
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
5558
diff
changeset
|
533 if parentpath: |
da72b4d24797
Fix income/pull with bundle and -R (issue 820).
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
5558
diff
changeset
|
534 # Try to make the full path relative so we get a nice, short URL. |
da72b4d24797
Fix income/pull with bundle and -R (issue 820).
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
5558
diff
changeset
|
535 # In particular, we don't want temp dir names in test outputs. |
39818
24e493ec2229
py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
39763
diff
changeset
|
536 cwd = encoding.getcwd() |
5664
da72b4d24797
Fix income/pull with bundle and -R (issue 820).
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
5558
diff
changeset
|
537 if parentpath == cwd: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
538 parentpath = b'' |
5664
da72b4d24797
Fix income/pull with bundle and -R (issue 820).
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
5558
diff
changeset
|
539 else: |
24834
6e31e1274080
bundlerepo: use pathutil.normasprefix to ensure os.sep at the end of cwd
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24686
diff
changeset
|
540 cwd = pathutil.normasprefix(cwd) |
5664
da72b4d24797
Fix income/pull with bundle and -R (issue 820).
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
5558
diff
changeset
|
541 if parentpath.startswith(cwd): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
542 parentpath = parentpath[len(cwd) :] |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46780
diff
changeset
|
543 u = urlutil.url(path) |
13826
e574207e3bcd
url: refactor util.drop_scheme() and hg.localpath() into url.localpath()
Brodie Rao <brodie@bitheap.org>
parents:
13742
diff
changeset
|
544 path = u.localpath() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
545 if u.scheme == b'bundle': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
546 s = path.split(b"+", 1) |
2740
386f04d6ecb3
clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2673
diff
changeset
|
547 if len(s) == 1: |
5664
da72b4d24797
Fix income/pull with bundle and -R (issue 820).
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
5558
diff
changeset
|
548 repopath, bundlename = parentpath, s[0] |
2740
386f04d6ecb3
clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2673
diff
changeset
|
549 else: |
386f04d6ecb3
clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2673
diff
changeset
|
550 repopath, bundlename = s |
386f04d6ecb3
clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2673
diff
changeset
|
551 else: |
5664
da72b4d24797
Fix income/pull with bundle and -R (issue 820).
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
5558
diff
changeset
|
552 repopath, bundlename = parentpath, path |
39603
a8d2faeca49e
bundlerepo: factor out code for instantiating a bundle repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39602
diff
changeset
|
553 |
a8d2faeca49e
bundlerepo: factor out code for instantiating a bundle repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39602
diff
changeset
|
554 return makebundlerepository(ui, repopath, bundlename) |
a8d2faeca49e
bundlerepo: factor out code for instantiating a bundle repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39602
diff
changeset
|
555 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
556 |
39603
a8d2faeca49e
bundlerepo: factor out code for instantiating a bundle repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39602
diff
changeset
|
557 def makebundlerepository(ui, repopath, bundlepath): |
a8d2faeca49e
bundlerepo: factor out code for instantiating a bundle repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39602
diff
changeset
|
558 """Make a bundle repository object based on repo and bundle paths.""" |
39604
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
559 if repopath: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
560 url = b'bundle:%s+%s' % (util.expandpath(repopath), bundlepath) |
39604
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
561 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
562 url = b'bundle:%s' % bundlepath |
39604
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
563 |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
564 # Because we can't make any guarantees about the type of the base |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
565 # repository, we can't have a static class representing the bundle |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
566 # repository. We also can't make any guarantees about how to even |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
567 # call the base repository's constructor! |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
568 # |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
569 # So, our strategy is to go through ``localrepo.instance()`` to construct |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
570 # a repo instance. Then, we dynamically create a new type derived from |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
571 # both it and our ``bundlerepository`` class which overrides some |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
572 # functionality. We then change the type of the constructed repository |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
573 # to this new type and initialize the bundle-specific bits of it. |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
574 |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
575 try: |
39944
75b53b809e87
bundlerepo: remove a variable alias
Martin von Zweigbergk <martinvonz@google.com>
parents:
39818
diff
changeset
|
576 repo = localrepo.instance(ui, repopath, create=False) |
39604
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
577 tempparent = None |
49969
84680c003d44
bundlerepo: enforce the requirements declared by the underlying repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
48946
diff
changeset
|
578 except error.RequirementError: |
84680c003d44
bundlerepo: enforce the requirements declared by the underlying repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
48946
diff
changeset
|
579 raise # no fallback if the backing repo is unsupported |
39604
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
580 except error.RepoError: |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
581 tempparent = pycompat.mkdtemp() |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
582 try: |
39944
75b53b809e87
bundlerepo: remove a variable alias
Martin von Zweigbergk <martinvonz@google.com>
parents:
39818
diff
changeset
|
583 repo = localrepo.instance(ui, tempparent, create=True) |
39604
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
584 except Exception: |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
585 shutil.rmtree(tempparent) |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
586 raise |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
587 |
39944
75b53b809e87
bundlerepo: remove a variable alias
Martin von Zweigbergk <martinvonz@google.com>
parents:
39818
diff
changeset
|
588 class derivedbundlerepository(bundlerepository, repo.__class__): |
39604
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
589 pass |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
590 |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
591 repo.__class__ = derivedbundlerepository |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
592 bundlerepository.__init__(repo, bundlepath, url, tempparent) |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
593 |
335ae4d0a552
bundlerepo: dynamically create repository type from base repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39603
diff
changeset
|
594 return repo |
12734
5dfd1c49dcc5
bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12347
diff
changeset
|
595 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
596 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
597 class bundletransactionmanager: |
23633
96c3cbec006f
incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents:
23632
diff
changeset
|
598 def transaction(self): |
96c3cbec006f
incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents:
23632
diff
changeset
|
599 return None |
96c3cbec006f
incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents:
23632
diff
changeset
|
600 |
96c3cbec006f
incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents:
23632
diff
changeset
|
601 def close(self): |
96c3cbec006f
incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents:
23632
diff
changeset
|
602 raise NotImplementedError |
96c3cbec006f
incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents:
23632
diff
changeset
|
603 |
96c3cbec006f
incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents:
23632
diff
changeset
|
604 def release(self): |
96c3cbec006f
incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents:
23632
diff
changeset
|
605 raise NotImplementedError |
96c3cbec006f
incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents:
23632
diff
changeset
|
606 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
607 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
608 def getremotechanges( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
609 ui, repo, peer, onlyheads=None, bundlename=None, force=False |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
610 ): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45814
diff
changeset
|
611 """obtains a bundle of changes incoming from peer |
14161
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14158
diff
changeset
|
612 |
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14158
diff
changeset
|
613 "onlyheads" restricts the returned changes to those reachable from the |
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14158
diff
changeset
|
614 specified heads. |
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14158
diff
changeset
|
615 "bundlename", if given, stores the bundle to this file path permanently; |
14190
8aab5a82685f
bundlerepo: fix closing and docstring of getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14161
diff
changeset
|
616 otherwise it's stored to a temp file and gets deleted again when you call |
8aab5a82685f
bundlerepo: fix closing and docstring of getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14161
diff
changeset
|
617 the returned "cleanupfn". |
14161
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14158
diff
changeset
|
618 "force" indicates whether to proceed on unrelated repos. |
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14158
diff
changeset
|
619 |
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14158
diff
changeset
|
620 Returns a tuple (local, csets, cleanupfn): |
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14158
diff
changeset
|
621 |
16683 | 622 "local" is a local repo from which to obtain the actual incoming |
623 changesets; it is a bundlerepo for the obtained bundle when the | |
37642
d959277ff1b5
bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37635
diff
changeset
|
624 original "peer" is remote. |
14161
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14158
diff
changeset
|
625 "csets" lists the incoming changeset node ids. |
16683 | 626 "cleanupfn" must be called without arguments when you're done processing |
37642
d959277ff1b5
bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37635
diff
changeset
|
627 the changes; it closes both the original "peer" and the one returned |
16683 | 628 here. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45814
diff
changeset
|
629 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
630 tmp = discovery.findcommonincoming(repo, peer, heads=onlyheads, force=force) |
12734
5dfd1c49dcc5
bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12347
diff
changeset
|
631 common, incoming, rheads = tmp |
5dfd1c49dcc5
bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12347
diff
changeset
|
632 if not incoming: |
5dfd1c49dcc5
bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12347
diff
changeset
|
633 try: |
15091
106f89299da6
bundlerepo: add argument check before unlink
Sune Foldager <cryo@cyanite.org>
parents:
14494
diff
changeset
|
634 if bundlename: |
21694
c08a22bfa16e
bundlerepo: backout dbf292f65b09
Matt Mackall <mpm@selenic.com>
parents:
21562
diff
changeset
|
635 os.unlink(bundlename) |
14004
97ed99d1f419
eliminate various naked except clauses
Idan Kamara <idankk86@gmail.com>
parents:
13826
diff
changeset
|
636 except OSError: |
12734
5dfd1c49dcc5
bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12347
diff
changeset
|
637 pass |
37642
d959277ff1b5
bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37635
diff
changeset
|
638 return repo, [], peer.close |
12734
5dfd1c49dcc5
bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12347
diff
changeset
|
639 |
22182
510cafe72004
incoming: don't request heads that already are common
Mads Kiilerich <madski@unity3d.com>
parents:
21694
diff
changeset
|
640 commonset = set(common) |
510cafe72004
incoming: don't request heads that already are common
Mads Kiilerich <madski@unity3d.com>
parents:
21694
diff
changeset
|
641 rheads = [x for x in rheads if x not in commonset] |
510cafe72004
incoming: don't request heads that already are common
Mads Kiilerich <madski@unity3d.com>
parents:
21694
diff
changeset
|
642 |
12734
5dfd1c49dcc5
bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12347
diff
changeset
|
643 bundle = None |
14161
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14158
diff
changeset
|
644 bundlerepo = None |
37642
d959277ff1b5
bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37635
diff
changeset
|
645 localrepo = peer.local() |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
16686
diff
changeset
|
646 if bundlename or not localrepo: |
37642
d959277ff1b5
bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37635
diff
changeset
|
647 # create a bundle (uncompressed if peer repo is not local) |
12734
5dfd1c49dcc5
bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12347
diff
changeset
|
648 |
29684
ff5d5751fc1b
bundlerepo: also read the 'devel.legacy.exchange' config
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29389
diff
changeset
|
649 # developer config: devel.legacy.exchange |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
650 legexc = ui.configlist(b'devel', b'legacy.exchange') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
651 forcebundle1 = b'bundle2' not in legexc and b'bundle1' in legexc |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
652 canbundle2 = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
653 not forcebundle1 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
654 and peer.capable(b'getbundle') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
655 and peer.capable(b'bundle2') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
656 ) |
26544
1e8e0b01faba
incoming: request a bundle2 when possible (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26543
diff
changeset
|
657 if canbundle2: |
37643
1aa4d646d0de
bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37642
diff
changeset
|
658 with peer.commandexecutor() as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
659 b2 = e.callcommand( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
660 b'getbundle', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
661 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
662 b'source': b'incoming', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
663 b'common': common, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
664 b'heads': rheads, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
665 b'bundlecaps': exchange.caps20to10( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
666 repo, role=b'client' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
667 ), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
668 b'cg': True, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
669 }, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
670 ).result() |
37643
1aa4d646d0de
bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37642
diff
changeset
|
671 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
672 fname = bundle = changegroup.writechunks( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
673 ui, b2._forwardchunks(), bundlename |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
674 ) |
26544
1e8e0b01faba
incoming: request a bundle2 when possible (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26543
diff
changeset
|
675 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
676 if peer.capable(b'getbundle'): |
37643
1aa4d646d0de
bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37642
diff
changeset
|
677 with peer.commandexecutor() as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
678 cg = e.callcommand( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
679 b'getbundle', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
680 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
681 b'source': b'incoming', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
682 b'common': common, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
683 b'heads': rheads, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
684 }, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
685 ).result() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
686 elif onlyheads is None and not peer.capable(b'changegroupsubset'): |
26543
a018cbabdb51
bundlerepo: indent some code to prepare next patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26399
diff
changeset
|
687 # compat with older servers when pulling all remote heads |
37635
cc8c06835097
wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37497
diff
changeset
|
688 |
37642
d959277ff1b5
bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37635
diff
changeset
|
689 with peer.commandexecutor() as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
690 cg = e.callcommand( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
691 b'changegroup', |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45814
diff
changeset
|
692 { |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45814
diff
changeset
|
693 b'nodes': incoming, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45814
diff
changeset
|
694 b'source': b'incoming', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45814
diff
changeset
|
695 }, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
696 ).result() |
37635
cc8c06835097
wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37497
diff
changeset
|
697 |
26543
a018cbabdb51
bundlerepo: indent some code to prepare next patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26399
diff
changeset
|
698 rheads = None |
a018cbabdb51
bundlerepo: indent some code to prepare next patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26399
diff
changeset
|
699 else: |
37642
d959277ff1b5
bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37635
diff
changeset
|
700 with peer.commandexecutor() as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
701 cg = e.callcommand( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
702 b'changegroupsubset', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
703 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
704 b'bases': incoming, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
705 b'heads': rheads, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
706 b'source': b'incoming', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
707 }, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
708 ).result() |
37635
cc8c06835097
wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37497
diff
changeset
|
709 |
26543
a018cbabdb51
bundlerepo: indent some code to prepare next patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26399
diff
changeset
|
710 if localrepo: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
711 bundletype = b"HG10BZ" |
26543
a018cbabdb51
bundlerepo: indent some code to prepare next patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26399
diff
changeset
|
712 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
713 bundletype = b"HG10UN" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
714 fname = bundle = bundle2.writebundle(ui, cg, bundlename, bundletype) |
12734
5dfd1c49dcc5
bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12347
diff
changeset
|
715 # keep written bundle? |
5dfd1c49dcc5
bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12347
diff
changeset
|
716 if bundlename: |
5dfd1c49dcc5
bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12347
diff
changeset
|
717 bundle = None |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
16686
diff
changeset
|
718 if not localrepo: |
12734
5dfd1c49dcc5
bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12347
diff
changeset
|
719 # use the created uncompressed bundlerepo |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
720 localrepo = bundlerepo = makebundlerepository( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
721 repo.baseui, repo.root, fname |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
722 ) |
39603
a8d2faeca49e
bundlerepo: factor out code for instantiating a bundle repository
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39602
diff
changeset
|
723 |
37642
d959277ff1b5
bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37635
diff
changeset
|
724 # this repo contains local and peer now, so filter out local again |
14161
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14158
diff
changeset
|
725 common = repo.heads() |
18568
cd403d6d96ef
incoming: fix incoming when a local head is remotely filtered (issue3805)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18418
diff
changeset
|
726 if localrepo: |
cd403d6d96ef
incoming: fix incoming when a local head is remotely filtered (issue3805)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18418
diff
changeset
|
727 # Part of common may be remotely filtered |
cd403d6d96ef
incoming: fix incoming when a local head is remotely filtered (issue3805)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18418
diff
changeset
|
728 # So use an unfiltered version |
cd403d6d96ef
incoming: fix incoming when a local head is remotely filtered (issue3805)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18418
diff
changeset
|
729 # The discovery process probably need cleanup to avoid that |
cd403d6d96ef
incoming: fix incoming when a local head is remotely filtered (issue3805)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18418
diff
changeset
|
730 localrepo = localrepo.unfiltered() |
14161
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14158
diff
changeset
|
731 |
14412
9ac479758d3b
bundlerepo: make getremotechanges support filtering of incoming
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14287
diff
changeset
|
732 csets = localrepo.changelog.findmissing(common, rheads) |
12734
5dfd1c49dcc5
bundlerepo: unify common code into a new getremotechanges
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12347
diff
changeset
|
733 |
23633
96c3cbec006f
incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents:
23632
diff
changeset
|
734 if bundlerepo: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
735 reponodes = [ctx.node() for ctx in bundlerepo[bundlerepo.firstnewrev :]] |
37643
1aa4d646d0de
bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37642
diff
changeset
|
736 |
1aa4d646d0de
bundlerepo: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37642
diff
changeset
|
737 with peer.commandexecutor() as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
738 remotephases = e.callcommand( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45814
diff
changeset
|
739 b'listkeys', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45814
diff
changeset
|
740 { |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45814
diff
changeset
|
741 b'namespace': b'phases', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45814
diff
changeset
|
742 }, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
743 ).result() |
23633
96c3cbec006f
incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents:
23632
diff
changeset
|
744 |
48241
7d1e60244561
path: keep the path instance in the `pulloperation`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47398
diff
changeset
|
745 pullop = exchange.pulloperation( |
7d1e60244561
path: keep the path instance in the `pulloperation`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47398
diff
changeset
|
746 bundlerepo, peer, path=None, heads=reponodes |
7d1e60244561
path: keep the path instance in the `pulloperation`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47398
diff
changeset
|
747 ) |
23633
96c3cbec006f
incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents:
23632
diff
changeset
|
748 pullop.trmanager = bundletransactionmanager() |
96c3cbec006f
incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents:
23632
diff
changeset
|
749 exchange._pullapplyphases(pullop, remotephases) |
96c3cbec006f
incoming: handle phases the same as pull
Eric Sumner <ericsumner@fb.com>
parents:
23632
diff
changeset
|
750 |
14161
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14158
diff
changeset
|
751 def cleanup(): |
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14158
diff
changeset
|
752 if bundlerepo: |
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14158
diff
changeset
|
753 bundlerepo.close() |
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14158
diff
changeset
|
754 if bundle: |
21694
c08a22bfa16e
bundlerepo: backout dbf292f65b09
Matt Mackall <mpm@selenic.com>
parents:
21562
diff
changeset
|
755 os.unlink(bundle) |
37642
d959277ff1b5
bundlerepo: rename "other" to "peer"
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37635
diff
changeset
|
756 peer.close() |
14161
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14158
diff
changeset
|
757 |
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14158
diff
changeset
|
758 return (localrepo, csets, cleanup) |