Show More
@@ -102,6 +102,33 b' class bundlespec:' | |||
|
102 | 102 | _bundlespecv1compengines = {b'gzip', b'bzip2', b'none'} |
|
103 | 103 | |
|
104 | 104 | |
|
105 | def _parseparams(s): | |
|
106 | """parse bundlespec parameter section | |
|
107 | ||
|
108 | input: "comp-version;params" string | |
|
109 | ||
|
110 | return: (spec; {param_key: param_value}) | |
|
111 | """ | |
|
112 | if b';' not in s: | |
|
113 | return s, {} | |
|
114 | ||
|
115 | params = {} | |
|
116 | version, paramstr = s.split(b';', 1) | |
|
117 | ||
|
118 | err = _(b'invalid bundle specification: missing "=" in parameter: %s') | |
|
119 | for p in paramstr.split(b';'): | |
|
120 | if b'=' not in p: | |
|
121 | msg = err % p | |
|
122 | raise error.InvalidBundleSpecification(msg) | |
|
123 | ||
|
124 | key, value = p.split(b'=', 1) | |
|
125 | key = urlreq.unquote(key) | |
|
126 | value = urlreq.unquote(value) | |
|
127 | params[key] = value | |
|
128 | ||
|
129 | return version, params | |
|
130 | ||
|
131 | ||
|
105 | 132 | def parsebundlespec(repo, spec, strict=True): |
|
106 | 133 | """Parse a bundle string specification into parts. |
|
107 | 134 | |
@@ -135,31 +162,6 b' def parsebundlespec(repo, spec, strict=T' | |||
|
135 | 162 | Note: this function will likely eventually return a more complex data |
|
136 | 163 | structure, including bundle2 part information. |
|
137 | 164 | """ |
|
138 | ||
|
139 | def parseparams(s): | |
|
140 | if b';' not in s: | |
|
141 | return s, {} | |
|
142 | ||
|
143 | params = {} | |
|
144 | version, paramstr = s.split(b';', 1) | |
|
145 | ||
|
146 | for p in paramstr.split(b';'): | |
|
147 | if b'=' not in p: | |
|
148 | raise error.InvalidBundleSpecification( | |
|
149 | _( | |
|
150 | b'invalid bundle specification: ' | |
|
151 | b'missing "=" in parameter: %s' | |
|
152 | ) | |
|
153 | % p | |
|
154 | ) | |
|
155 | ||
|
156 | key, value = p.split(b'=', 1) | |
|
157 | key = urlreq.unquote(key) | |
|
158 | value = urlreq.unquote(value) | |
|
159 | params[key] = value | |
|
160 | ||
|
161 | return version, params | |
|
162 | ||
|
163 | 165 | if strict and b'-' not in spec: |
|
164 | 166 | raise error.InvalidBundleSpecification( |
|
165 | 167 | _( |
@@ -177,7 +179,7 b' def parsebundlespec(repo, spec, strict=T' | |||
|
177 | 179 | _(b'%s compression is not supported') % compression |
|
178 | 180 | ) |
|
179 | 181 | |
|
180 | version, params = parseparams(version) | |
|
182 | version, params = _parseparams(version) | |
|
181 | 183 | |
|
182 | 184 | if version not in _bundlespeccontentopts: |
|
183 | 185 | raise error.UnsupportedBundleSpecification( |
@@ -188,7 +190,7 b' def parsebundlespec(repo, spec, strict=T' | |||
|
188 | 190 | # case some defaults are assumed (but only when not in strict mode). |
|
189 | 191 | assert not strict |
|
190 | 192 | |
|
191 | spec, params = parseparams(spec) | |
|
193 | spec, params = _parseparams(spec) | |
|
192 | 194 | |
|
193 | 195 | if spec in util.compengines.supportedbundlenames: |
|
194 | 196 | compression = spec |
General Comments 0
You need to be logged in to leave comments.
Login now