Mercurial > public > mercurial-scm > hg
annotate mercurial/bundlecaches.py @ 51860:1c5810ce737e
typing: add `from __future__ import annotations` to remaining source files
Most of these look newer than when the original imports referenced in the
previous commit were dropped, so these weren't covered by the backout. These
were found with:
hg files mercurial hgext hgext3rd -I '**.py' -X '**/thirdparty' \
| xargs grep -L 'from __future__ import annotations'
All of the `__init__.py` files that finds are empty, so those were ignored and
the rest manually edited.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Thu, 12 Sep 2024 16:27:58 -0400 |
parents | 278af66e6595 |
children | aa7f4a45d8fa |
rev | line source |
---|---|
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
1 # bundlecaches.py - utility to deal with pre-computed bundle for servers |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
2 # |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
3 # This software may be used and distributed according to the terms of the |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
4 # GNU General Public License version 2 or any later version. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
5 |
51860
1c5810ce737e
typing: add `from __future__ import annotations` to remaining source files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51725
diff
changeset
|
6 from __future__ import annotations |
1c5810ce737e
typing: add `from __future__ import annotations` to remaining source files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51725
diff
changeset
|
7 |
49325
bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49322
diff
changeset
|
8 import collections |
51725
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51668
diff
changeset
|
9 import typing |
49325
bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49322
diff
changeset
|
10 |
49648
9be765b82a90
typing: minor tweaks to allow updating to pytype 2022.11.18
Matt Harbison <matt_harbison@yahoo.com>
parents:
49332
diff
changeset
|
11 from typing import ( |
51571
9b51a4fb0f96
bundlespec: type the _bundlespeccontentopts dictionary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51570
diff
changeset
|
12 Dict, |
9b51a4fb0f96
bundlespec: type the _bundlespeccontentopts dictionary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51570
diff
changeset
|
13 Union, |
49648
9be765b82a90
typing: minor tweaks to allow updating to pytype 2022.11.18
Matt Harbison <matt_harbison@yahoo.com>
parents:
49332
diff
changeset
|
14 cast, |
9be765b82a90
typing: minor tweaks to allow updating to pytype 2022.11.18
Matt Harbison <matt_harbison@yahoo.com>
parents:
49332
diff
changeset
|
15 ) |
9be765b82a90
typing: minor tweaks to allow updating to pytype 2022.11.18
Matt Harbison <matt_harbison@yahoo.com>
parents:
49332
diff
changeset
|
16 |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
17 from .i18n import _ |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
18 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
19 from .thirdparty import attr |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
20 |
51725
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51668
diff
changeset
|
21 # Force pytype to use the non-vendored package |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51668
diff
changeset
|
22 if typing.TYPE_CHECKING: |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51668
diff
changeset
|
23 # noinspection PyPackageRequirements |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51668
diff
changeset
|
24 import attr |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51668
diff
changeset
|
25 |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
26 from . import ( |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
27 error, |
46627
f4c325bf80fc
requirements: also add a generaldelta constant
Rapha?l Gom?s <rgomes@octobus.net>
parents:
45785
diff
changeset
|
28 requirements as requirementsmod, |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
29 sslutil, |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
30 util, |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
31 ) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
32 from .utils import stringutil |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
33 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
34 urlreq = util.urlreq |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
35 |
50683
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
36 BUNDLE_CACHE_DIR = b'bundle-cache' |
45785
80f32ec8653a
clonebundle: move the manifest filename to a constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45784
diff
changeset
|
37 CB_MANIFEST_FILE = b'clonebundles.manifest' |
50683
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
38 CLONEBUNDLESCHEME = b"peer-bundle-cache://" |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
39 |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
40 |
51668
138ab7c6a6ff
typing: add some trivial type hints to `mercurial/bundlecaches.py`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51597
diff
changeset
|
41 def get_manifest(repo) -> bytes: |
50683
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
42 """get the bundle manifest to be served to a client from a server""" |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
43 raw_text = repo.vfs.tryread(CB_MANIFEST_FILE) |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
44 entries = [e.split(b' ', 1) for e in raw_text.splitlines()] |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
45 |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
46 new_lines = [] |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
47 for e in entries: |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
48 url = alter_bundle_url(repo, e[0]) |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
49 if len(e) == 1: |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
50 line = url + b'\n' |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
51 else: |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
52 line = b"%s %s\n" % (url, e[1]) |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
53 new_lines.append(line) |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
54 return b''.join(new_lines) |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
55 |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
56 |
51668
138ab7c6a6ff
typing: add some trivial type hints to `mercurial/bundlecaches.py`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51597
diff
changeset
|
57 def alter_bundle_url(repo, url: bytes) -> bytes: |
50683
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
58 """a function that exist to help extension and hosting to alter the url |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
59 |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
60 This will typically be used to inject authentication information in the url |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
61 of cached bundles.""" |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
62 return url |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
63 |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
64 |
50539
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
65 SUPPORTED_CLONEBUNDLE_SCHEMES = [ |
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
66 b"http://", |
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
67 b"https://", |
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
68 b"largefile://", |
50683
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
69 CLONEBUNDLESCHEME, |
50539
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
70 ] |
45785
80f32ec8653a
clonebundle: move the manifest filename to a constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45784
diff
changeset
|
71 |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
72 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
73 @attr.s |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48601
diff
changeset
|
74 class bundlespec: |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
75 compression = attr.ib() |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
76 wirecompression = attr.ib() |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
77 version = attr.ib() |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
78 wireversion = attr.ib() |
49325
bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49322
diff
changeset
|
79 # parameters explicitly overwritten by the config or the specification |
bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49322
diff
changeset
|
80 _explicit_params = attr.ib() |
bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49322
diff
changeset
|
81 # default parameter for the version |
bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49322
diff
changeset
|
82 # |
bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49322
diff
changeset
|
83 # Keeping it separated is useful to check what was actually overwritten. |
bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49322
diff
changeset
|
84 _default_opts = attr.ib() |
bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49322
diff
changeset
|
85 |
bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49322
diff
changeset
|
86 @property |
bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49322
diff
changeset
|
87 def params(self): |
bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49322
diff
changeset
|
88 return collections.ChainMap(self._explicit_params, self._default_opts) |
bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49322
diff
changeset
|
89 |
bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49322
diff
changeset
|
90 @property |
bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49322
diff
changeset
|
91 def contentopts(self): |
bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49322
diff
changeset
|
92 # kept for Backward Compatibility concerns. |
bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49322
diff
changeset
|
93 return self.params |
bf66f7a1e3f8
bundlespec: merge the contentopts and params dictionnary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49322
diff
changeset
|
94 |
49326
3840d16595cf
bundlespec: add a `overwrite` parameter to set_param
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49325
diff
changeset
|
95 def set_param(self, key, value, overwrite=True): |
3840d16595cf
bundlespec: add a `overwrite` parameter to set_param
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49325
diff
changeset
|
96 """Set a bundle parameter value. |
3840d16595cf
bundlespec: add a `overwrite` parameter to set_param
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49325
diff
changeset
|
97 |
3840d16595cf
bundlespec: add a `overwrite` parameter to set_param
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49325
diff
changeset
|
98 Will only overwrite if overwrite is true""" |
3840d16595cf
bundlespec: add a `overwrite` parameter to set_param
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49325
diff
changeset
|
99 if overwrite or key not in self._explicit_params: |
3840d16595cf
bundlespec: add a `overwrite` parameter to set_param
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49325
diff
changeset
|
100 self._explicit_params[key] = value |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
101 |
50709
0913a49e020c
bundle-spec: add an official method to format a spec into a string
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50683
diff
changeset
|
102 def as_spec(self): |
0913a49e020c
bundle-spec: add an official method to format a spec into a string
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50683
diff
changeset
|
103 parts = [b"%s-%s" % (self.compression, self.version)] |
0913a49e020c
bundle-spec: add an official method to format a spec into a string
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50683
diff
changeset
|
104 for param in sorted(self._explicit_params.items()): |
0913a49e020c
bundle-spec: add an official method to format a spec into a string
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50683
diff
changeset
|
105 parts.append(b'%s=%s' % param) |
0913a49e020c
bundle-spec: add an official method to format a spec into a string
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50683
diff
changeset
|
106 return b';'.join(parts) |
0913a49e020c
bundle-spec: add an official method to format a spec into a string
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50683
diff
changeset
|
107 |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
108 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
109 # Maps bundle version human names to changegroup versions. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
110 _bundlespeccgversions = { |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
111 b'v1': b'01', |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
112 b'v2': b'02', |
50683
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
113 b'v3': b'03', |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
114 b'packed1': b's1', |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
115 b'bundle2': b'02', # legacy |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
116 } |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
117 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
118 # Maps bundle version with content opts to choose which part to bundle |
51571
9b51a4fb0f96
bundlespec: type the _bundlespeccontentopts dictionary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51570
diff
changeset
|
119 _bundlespeccontentopts: Dict[bytes, Dict[bytes, Union[bool, bytes]]] = { |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
120 b'v1': { |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
121 b'changegroup': True, |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
122 b'cg.version': b'01', |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
123 b'obsolescence': False, |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
124 b'phases': False, |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
125 b'tagsfnodescache': False, |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
126 b'revbranchcache': False, |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
127 }, |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
128 b'v2': { |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
129 b'changegroup': True, |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
130 b'cg.version': b'02', |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
131 b'obsolescence': False, |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
132 b'phases': False, |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
133 b'tagsfnodescache': True, |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
134 b'revbranchcache': True, |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
135 }, |
50683
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
136 b'v3': { |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
137 b'changegroup': True, |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
138 b'cg.version': b'03', |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
139 b'obsolescence': False, |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
140 b'phases': True, |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
141 b'tagsfnodescache': True, |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
142 b'revbranchcache': True, |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
143 }, |
49322
d587f09cad98
bundlespec: make the `stream` case less special
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49321
diff
changeset
|
144 b'streamv2': { |
d587f09cad98
bundlespec: make the `stream` case less special
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49321
diff
changeset
|
145 b'changegroup': False, |
d587f09cad98
bundlespec: make the `stream` case less special
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49321
diff
changeset
|
146 b'cg.version': b'02', |
d587f09cad98
bundlespec: make the `stream` case less special
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49321
diff
changeset
|
147 b'obsolescence': False, |
d587f09cad98
bundlespec: make the `stream` case less special
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49321
diff
changeset
|
148 b'phases': False, |
51570
4a9d0898bf16
bundlespec: fix the "streamv2" and "streamv3-exp" variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51555
diff
changeset
|
149 b"stream": b"v2", |
49322
d587f09cad98
bundlespec: make the `stream` case less special
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49321
diff
changeset
|
150 b'tagsfnodescache': False, |
d587f09cad98
bundlespec: make the `stream` case less special
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49321
diff
changeset
|
151 b'revbranchcache': False, |
d587f09cad98
bundlespec: make the `stream` case less special
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49321
diff
changeset
|
152 }, |
50683
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
153 b'streamv3-exp': { |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
154 b'changegroup': False, |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
155 b'cg.version': b'03', |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
156 b'obsolescence': False, |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
157 b'phases': False, |
51570
4a9d0898bf16
bundlespec: fix the "streamv2" and "streamv3-exp" variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51555
diff
changeset
|
158 b"stream": b"v3-exp", |
50683
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
159 b'tagsfnodescache': False, |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
160 b'revbranchcache': False, |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
161 }, |
49321
c12c843f0db7
bundlespec: phase out the `_bundlespeccgversions` mapping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
162 b'packed1': { |
c12c843f0db7
bundlespec: phase out the `_bundlespeccgversions` mapping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
163 b'cg.version': b's1', |
c12c843f0db7
bundlespec: phase out the `_bundlespeccgversions` mapping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
164 }, |
c12c843f0db7
bundlespec: phase out the `_bundlespeccgversions` mapping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
165 b'bundle2': { # legacy |
c12c843f0db7
bundlespec: phase out the `_bundlespeccgversions` mapping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
166 b'cg.version': b'02', |
c12c843f0db7
bundlespec: phase out the `_bundlespeccgversions` mapping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
167 }, |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
168 } |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
169 _bundlespeccontentopts[b'bundle2'] = _bundlespeccontentopts[b'v2'] |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
170 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
171 # Compression engines allowed in version 1. THIS SHOULD NEVER CHANGE. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
172 _bundlespecv1compengines = {b'gzip', b'bzip2', b'none'} |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
173 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
174 |
49331
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
175 def param_bool(key, value): |
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
176 """make a boolean out of a parameter value""" |
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
177 b = stringutil.parsebool(value) |
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
178 if b is None: |
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
179 msg = _(b"parameter %s should be a boolean ('%s')") |
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
180 msg %= (key, value) |
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
181 raise error.InvalidBundleSpecification(msg) |
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
182 return b |
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
183 |
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
184 |
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
185 # mapping of known parameter name need their value processed |
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
186 bundle_spec_param_processing = { |
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
187 b"obsolescence": param_bool, |
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
188 b"obsolescence-mandatory": param_bool, |
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
189 b"phases": param_bool, |
51559
eac84af0c8cc
bundle-spec: properly parse boolean configuration as boolean
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50709
diff
changeset
|
190 b"changegroup": param_bool, |
eac84af0c8cc
bundle-spec: properly parse boolean configuration as boolean
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50709
diff
changeset
|
191 b"tagsfnodescache": param_bool, |
eac84af0c8cc
bundle-spec: properly parse boolean configuration as boolean
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50709
diff
changeset
|
192 b"revbranchcache": param_bool, |
49331
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
193 } |
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
194 |
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
195 |
49330
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
196 def _parseparams(s): |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
197 """parse bundlespec parameter section |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
198 |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
199 input: "comp-version;params" string |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
200 |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
201 return: (spec; {param_key: param_value}) |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
202 """ |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
203 if b';' not in s: |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
204 return s, {} |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
205 |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
206 params = {} |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
207 version, paramstr = s.split(b';', 1) |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
208 |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
209 err = _(b'invalid bundle specification: missing "=" in parameter: %s') |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
210 for p in paramstr.split(b';'): |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
211 if b'=' not in p: |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
212 msg = err % p |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
213 raise error.InvalidBundleSpecification(msg) |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
214 |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
215 key, value = p.split(b'=', 1) |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
216 key = urlreq.unquote(key) |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
217 value = urlreq.unquote(value) |
49331
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
218 process = bundle_spec_param_processing.get(key) |
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
219 if process is not None: |
1b04d5213d0f
bundlespec: add processing of some parameter value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49330
diff
changeset
|
220 value = process(key, value) |
49330
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
221 params[key] = value |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
222 |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
223 return version, params |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
224 |
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
225 |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
226 def parsebundlespec(repo, spec, strict=True): |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
227 """Parse a bundle string specification into parts. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
228 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
229 Bundle specifications denote a well-defined bundle/exchange format. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
230 The content of a given specification should not change over time in |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
231 order to ensure that bundles produced by a newer version of Mercurial are |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
232 readable from an older version. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
233 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
234 The string currently has the form: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
235 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
236 <compression>-<type>[;<parameter0>[;<parameter1>]] |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
237 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
238 Where <compression> is one of the supported compression formats |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
239 and <type> is (currently) a version string. A ";" can follow the type and |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
240 all text afterwards is interpreted as URI encoded, ";" delimited key=value |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
241 pairs. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
242 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
243 If ``strict`` is True (the default) <compression> is required. Otherwise, |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
244 it is optional. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
245 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
246 Returns a bundlespec object of (compression, version, parameters). |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
247 Compression will be ``None`` if not in strict mode and a compression isn't |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
248 defined. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
249 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
250 An ``InvalidBundleSpecification`` is raised when the specification is |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
251 not syntactically well formed. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
252 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
253 An ``UnsupportedBundleSpecification`` is raised when the compression or |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
254 bundle type/version is not recognized. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
255 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
256 Note: this function will likely eventually return a more complex data |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
257 structure, including bundle2 part information. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
258 """ |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
259 if strict and b'-' not in spec: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
260 raise error.InvalidBundleSpecification( |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
261 _( |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
262 b'invalid bundle specification; ' |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
263 b'must be prefixed with compression: %s' |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
264 ) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
265 % spec |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
266 ) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
267 |
49332
d89bfc075289
bundlespec: do not check for `-` in the params portion of the bundlespec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49331
diff
changeset
|
268 pre_args = spec.split(b';', 1)[0] |
d89bfc075289
bundlespec: do not check for `-` in the params portion of the bundlespec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49331
diff
changeset
|
269 if b'-' in pre_args: |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
270 compression, version = spec.split(b'-', 1) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
271 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
272 if compression not in util.compengines.supportedbundlenames: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
273 raise error.UnsupportedBundleSpecification( |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
274 _(b'%s compression is not supported') % compression |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
275 ) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
276 |
49330
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
277 version, params = _parseparams(version) |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
278 |
49321
c12c843f0db7
bundlespec: phase out the `_bundlespeccgversions` mapping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
279 if version not in _bundlespeccontentopts: |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
280 raise error.UnsupportedBundleSpecification( |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
281 _(b'%s is not a recognized bundle version') % version |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
282 ) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
283 else: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
284 # Value could be just the compression or just the version, in which |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
285 # case some defaults are assumed (but only when not in strict mode). |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
286 assert not strict |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
287 |
49330
5d17dd74177d
bundlespec: extract the parseparams closure
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49326
diff
changeset
|
288 spec, params = _parseparams(spec) |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
289 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
290 if spec in util.compengines.supportedbundlenames: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
291 compression = spec |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
292 version = b'v1' |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
293 # Generaldelta repos require v2. |
46627
f4c325bf80fc
requirements: also add a generaldelta constant
Rapha?l Gom?s <rgomes@octobus.net>
parents:
45785
diff
changeset
|
294 if requirementsmod.GENERALDELTA_REQUIREMENT in repo.requirements: |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
295 version = b'v2' |
47342
dc3800569157
revlogv2: make sure bundling pick a compatible bundle format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46627
diff
changeset
|
296 elif requirementsmod.REVLOGV2_REQUIREMENT in repo.requirements: |
dc3800569157
revlogv2: make sure bundling pick a compatible bundle format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46627
diff
changeset
|
297 version = b'v2' |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
298 # Modern compression engines require v2. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
299 if compression not in _bundlespecv1compengines: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
300 version = b'v2' |
49321
c12c843f0db7
bundlespec: phase out the `_bundlespeccgversions` mapping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
301 elif spec in _bundlespeccontentopts: |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
302 if spec == b'packed1': |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
303 compression = b'none' |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
304 else: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
305 compression = b'bzip2' |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
306 version = spec |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
307 else: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
308 raise error.UnsupportedBundleSpecification( |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
309 _(b'%s is not a recognized bundle specification') % spec |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
310 ) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
311 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
312 # Bundle version 1 only supports a known set of compression engines. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
313 if version == b'v1' and compression not in _bundlespecv1compengines: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
314 raise error.UnsupportedBundleSpecification( |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
315 _(b'compression engine %s is not supported on v1 bundles') |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
316 % compression |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
317 ) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
318 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
319 # The specification for packed1 can optionally declare the data formats |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
320 # required to apply it. If we see this metadata, compare against what the |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
321 # repo supports and error if the bundle isn't compatible. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
322 if version == b'packed1' and b'requirements' in params: |
49648
9be765b82a90
typing: minor tweaks to allow updating to pytype 2022.11.18
Matt Harbison <matt_harbison@yahoo.com>
parents:
49332
diff
changeset
|
323 requirements = set(cast(bytes, params[b'requirements']).split(b',')) |
48601
baddab229b86
stream-clone: add a explicit set list requirements relevant to stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47342
diff
changeset
|
324 missingreqs = requirements - requirementsmod.STREAM_FIXED_REQUIREMENTS |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
325 if missingreqs: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
326 raise error.UnsupportedBundleSpecification( |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
327 _(b'missing support for repository features: %s') |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
328 % b', '.join(sorted(missingreqs)) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
329 ) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
330 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
331 # Compute contentopts based on the version |
50683
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
332 if b"stream" in params: |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
333 # This case is fishy as this mostly derails the version selection |
49322
d587f09cad98
bundlespec: make the `stream` case less special
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49321
diff
changeset
|
334 # mechanism. `stream` bundles are quite specific and used differently |
d587f09cad98
bundlespec: make the `stream` case less special
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49321
diff
changeset
|
335 # as "normal" bundles. |
d587f09cad98
bundlespec: make the `stream` case less special
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49321
diff
changeset
|
336 # |
d587f09cad98
bundlespec: make the `stream` case less special
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49321
diff
changeset
|
337 # (we should probably define a cleaner way to do this and raise a |
50683
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
338 # warning when the old way is encountered) |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
339 if params[b"stream"] == b"v2": |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
340 version = b"streamv2" |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
341 if params[b"stream"] == b"v3-exp": |
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
342 version = b"streamv3-exp" |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
343 contentopts = _bundlespeccontentopts.get(version, {}).copy() |
50683
a41eeb877d07
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50539
diff
changeset
|
344 if version == b"streamv2" or version == b"streamv3-exp": |
49322
d587f09cad98
bundlespec: make the `stream` case less special
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49321
diff
changeset
|
345 # streamv2 have been reported as "v2" for a while. |
d587f09cad98
bundlespec: make the `stream` case less special
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49321
diff
changeset
|
346 version = b"v2" |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
347 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
348 engine = util.compengines.forbundlename(compression) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
349 compression, wirecompression = engine.bundletype() |
49321
c12c843f0db7
bundlespec: phase out the `_bundlespeccgversions` mapping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
350 wireversion = _bundlespeccontentopts[version][b'cg.version'] |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
351 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
352 return bundlespec( |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
353 compression, wirecompression, version, wireversion, params, contentopts |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
354 ) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
355 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
356 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
357 def parseclonebundlesmanifest(repo, s): |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
358 """Parses the raw text of a clone bundles manifest. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
359 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
360 Returns a list of dicts. The dicts have a ``URL`` key corresponding |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
361 to the URL and other keys are the attributes for the entry. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
362 """ |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
363 m = [] |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
364 for line in s.splitlines(): |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
365 fields = line.split() |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
366 if not fields: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
367 continue |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
368 attrs = {b'URL': fields[0]} |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
369 for rawattr in fields[1:]: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
370 key, value = rawattr.split(b'=', 1) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
371 key = util.urlreq.unquote(key) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
372 value = util.urlreq.unquote(value) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
373 attrs[key] = value |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
374 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
375 # Parse BUNDLESPEC into components. This makes client-side |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
376 # preferences easier to specify since you can prefer a single |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
377 # component of the BUNDLESPEC. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
378 if key == b'BUNDLESPEC': |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
379 try: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
380 bundlespec = parsebundlespec(repo, value) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
381 attrs[b'COMPRESSION'] = bundlespec.compression |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
382 attrs[b'VERSION'] = bundlespec.version |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
383 except error.InvalidBundleSpecification: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
384 pass |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
385 except error.UnsupportedBundleSpecification: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
386 pass |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
387 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
388 m.append(attrs) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
389 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
390 return m |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
391 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
392 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
393 def isstreamclonespec(bundlespec): |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
394 # Stream clone v1 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
395 if bundlespec.wirecompression == b'UN' and bundlespec.wireversion == b's1': |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
396 return True |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
397 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
398 # Stream clone v2 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
399 if ( |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
400 bundlespec.wirecompression == b'UN' |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
401 and bundlespec.wireversion == b'02' |
51555
c4aab3661f25
bundlespec: rationalize the way we specify stream bundle version
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50709
diff
changeset
|
402 and bundlespec.contentopts.get(b'stream', None) in (b"v2", b"v3-exp") |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
403 ): |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
404 return True |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
405 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
406 return False |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
407 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
408 |
50539
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
409 def filterclonebundleentries( |
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
410 repo, entries, streamclonerequested=False, pullbundles=False |
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
411 ): |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
412 """Remove incompatible clone bundle manifest entries. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
413 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
414 Accepts a list of entries parsed with ``parseclonebundlesmanifest`` |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
415 and returns a new list consisting of only the entries that this client |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
416 should be able to apply. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
417 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
418 There is no guarantee we'll be able to apply all returned entries because |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
419 the metadata we use to filter on may be missing or wrong. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
420 """ |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
421 newentries = [] |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
422 for entry in entries: |
50539
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
423 url = entry.get(b'URL') |
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
424 if not pullbundles and not any( |
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
425 [url.startswith(scheme) for scheme in SUPPORTED_CLONEBUNDLE_SCHEMES] |
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
426 ): |
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
427 repo.ui.debug( |
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
428 b'filtering %s because not a supported clonebundle scheme\n' |
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
429 % url |
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
430 ) |
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
431 continue |
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
432 |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
433 spec = entry.get(b'BUNDLESPEC') |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
434 if spec: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
435 try: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
436 bundlespec = parsebundlespec(repo, spec, strict=True) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
437 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
438 # If a stream clone was requested, filter out non-streamclone |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
439 # entries. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
440 if streamclonerequested and not isstreamclonespec(bundlespec): |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
441 repo.ui.debug( |
50539
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
442 b'filtering %s because not a stream clone\n' % url |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
443 ) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
444 continue |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
445 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
446 except error.InvalidBundleSpecification as e: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
447 repo.ui.debug(stringutil.forcebytestr(e) + b'\n') |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
448 continue |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
449 except error.UnsupportedBundleSpecification as e: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
450 repo.ui.debug( |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
451 b'filtering %s because unsupported bundle ' |
50539
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
452 b'spec: %s\n' % (url, stringutil.forcebytestr(e)) |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
453 ) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
454 continue |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
455 # If we don't have a spec and requested a stream clone, we don't know |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
456 # what the entry is so don't attempt to apply it. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
457 elif streamclonerequested: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
458 repo.ui.debug( |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
459 b'filtering %s because cannot determine if a stream ' |
50539
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
460 b'clone bundle\n' % url |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
461 ) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
462 continue |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
463 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
464 if b'REQUIRESNI' in entry and not sslutil.hassni: |
50539
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
465 repo.ui.debug(b'filtering %s because SNI not supported\n' % url) |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
466 continue |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
467 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
468 if b'REQUIREDRAM' in entry: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
469 try: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
470 requiredram = util.sizetoint(entry[b'REQUIREDRAM']) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
471 except error.ParseError: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
472 repo.ui.debug( |
50539
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
473 b'filtering %s due to a bad REQUIREDRAM attribute\n' % url |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
474 ) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
475 continue |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
476 actualram = repo.ui.estimatememory() |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
477 if actualram is not None and actualram * 0.66 < requiredram: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
478 repo.ui.debug( |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
479 b'filtering %s as it needs more than 2/3 of system memory\n' |
50539
7b723217d368
clonebundles: filter out invalid schemes instead of failing on them
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
49648
diff
changeset
|
480 % url |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
481 ) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
482 continue |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
483 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
484 newentries.append(entry) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
485 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
486 return newentries |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
487 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
488 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48601
diff
changeset
|
489 class clonebundleentry: |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
490 """Represents an item in a clone bundles manifest. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
491 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
492 This rich class is needed to support sorting since sorted() in Python 3 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
493 doesn't support ``cmp`` and our comparison is complex enough that ``key=`` |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
494 won't work. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
495 """ |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
496 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
497 def __init__(self, value, prefers): |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
498 self.value = value |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
499 self.prefers = prefers |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
500 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
501 def _cmp(self, other): |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
502 for prefkey, prefvalue in self.prefers: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
503 avalue = self.value.get(prefkey) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
504 bvalue = other.value.get(prefkey) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
505 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
506 # Special case for b missing attribute and a matches exactly. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
507 if avalue is not None and bvalue is None and avalue == prefvalue: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
508 return -1 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
509 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
510 # Special case for a missing attribute and b matches exactly. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
511 if bvalue is not None and avalue is None and bvalue == prefvalue: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
512 return 1 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
513 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
514 # We can't compare unless attribute present on both. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
515 if avalue is None or bvalue is None: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
516 continue |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
517 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
518 # Same values should fall back to next attribute. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
519 if avalue == bvalue: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
520 continue |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
521 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
522 # Exact matches come first. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
523 if avalue == prefvalue: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
524 return -1 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
525 if bvalue == prefvalue: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
526 return 1 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
527 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
528 # Fall back to next attribute. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
529 continue |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
530 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
531 # If we got here we couldn't sort by attributes and prefers. Fall |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
532 # back to index order. |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
533 return 0 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
534 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
535 def __lt__(self, other): |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
536 return self._cmp(other) < 0 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
537 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
538 def __gt__(self, other): |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
539 return self._cmp(other) > 0 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
540 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
541 def __eq__(self, other): |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
542 return self._cmp(other) == 0 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
543 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
544 def __le__(self, other): |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
545 return self._cmp(other) <= 0 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
546 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
547 def __ge__(self, other): |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
548 return self._cmp(other) >= 0 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
549 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
550 def __ne__(self, other): |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
551 return self._cmp(other) != 0 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
552 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
553 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
554 def sortclonebundleentries(ui, entries): |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
555 prefers = ui.configlist(b'ui', b'clonebundleprefers') |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
556 if not prefers: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
557 return list(entries) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
558 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
559 def _split(p): |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
560 if b'=' not in p: |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
561 hint = _(b"each comma separated item should be key=value pairs") |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
562 raise error.Abort( |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
563 _(b"invalid ui.clonebundleprefers item: %s") % p, hint=hint |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
564 ) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
565 return p.split(b'=', 1) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
566 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
567 prefers = [_split(p) for p in prefers] |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
568 |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
569 items = sorted(clonebundleentry(v, prefers) for v in entries) |
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
570 return [i.value for i in items] |