author | Pierre-Yves David <pierre-yves.david@octobus.net> |
Wed, 10 Feb 2021 22:43:16 +0100 | |
branch | stable |
changeset 46369 | 0760282995cf |
parent 45957 | 89a2afe31e82 |
child 46659 | 7621ab4005bf |
permissions | -rw-r--r-- |
8229
ddf3d6656e7c
config: add copyright and license header
Martin Geisler <mg@lazybytes.net>
parents:
8222
diff
changeset
|
1 |
# config.py - configuration parsing for Mercurial |
ddf3d6656e7c
config: add copyright and license header
Martin Geisler <mg@lazybytes.net>
parents:
8222
diff
changeset
|
2 |
# |
ddf3d6656e7c
config: add copyright and license header
Martin Geisler <mg@lazybytes.net>
parents:
8222
diff
changeset
|
3 |
# Copyright 2009 Matt Mackall <mpm@selenic.com> and others |
ddf3d6656e7c
config: add copyright and license header
Martin Geisler <mg@lazybytes.net>
parents:
8222
diff
changeset
|
4 |
# |
ddf3d6656e7c
config: add copyright and license header
Martin Geisler <mg@lazybytes.net>
parents:
8222
diff
changeset
|
5 |
# This software may be used and distributed according to the terms of the |
10263 | 6 |
# GNU General Public License version 2 or any later version. |
8229
ddf3d6656e7c
config: add copyright and license header
Martin Geisler <mg@lazybytes.net>
parents:
8222
diff
changeset
|
7 |
|
25923
a027a0813b44
config: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
8 |
from __future__ import absolute_import |
a027a0813b44
config: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
9 |
|
a027a0813b44
config: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
10 |
import errno |
a027a0813b44
config: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
11 |
import os |
a027a0813b44
config: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
12 |
|
a027a0813b44
config: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
13 |
from .i18n import _ |
43089
c59eb1560c44
py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
14 |
from .pycompat import getattr |
25923
a027a0813b44
config: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
15 |
from . import ( |
43276
d201a637c971
py3: encode underlying error message during parse error of %include
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43106
diff
changeset
|
16 |
encoding, |
25923
a027a0813b44
config: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
17 |
error, |
31315
c920efa9d34b
config: guard against setconfig specifying unicode values on py3
Augie Fackler <raf@durin42.com>
parents:
31186
diff
changeset
|
18 |
pycompat, |
25923
a027a0813b44
config: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
19 |
util, |
a027a0813b44
config: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
20 |
) |
8144 | 21 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
22 |
|
8186
6a0018cdb2fe
config: add some helper methods
Matt Mackall <mpm@selenic.com>
parents:
8185
diff
changeset
|
23 |
class config(object): |
45278
3f54242781e9
config: remove now-unused support for "includepaths"
Martin von Zweigbergk <martinvonz@google.com>
parents:
45244
diff
changeset
|
24 |
def __init__(self, data=None): |
8144 | 25 |
self._data = {} |
19087
7d82ad4b3727
config: discard "%unset" values defined in the other files read in previously
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17537
diff
changeset
|
26 |
self._unset = [] |
8144 | 27 |
if data: |
28 |
for k in data._data: |
|
29 |
self._data[k] = data[k].copy() |
|
8185
dc10a7a3f1d4
config: split source data out into separate map
Matt Mackall <mpm@selenic.com>
parents:
8184
diff
changeset
|
30 |
self._source = data._source.copy() |
34358
c41444a39de2
config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com>
parents:
34146
diff
changeset
|
31 |
else: |
c41444a39de2
config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com>
parents:
34146
diff
changeset
|
32 |
self._source = util.cowdict() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
33 |
|
8144 | 34 |
def copy(self): |
35 |
return config(self) |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
36 |
|
8144 | 37 |
def __contains__(self, section): |
38 |
return section in self._data |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
39 |
|
27696
e70c97cc9243
config: add hasconfig method and supporting plumbing
Bryan O'Sullivan <bos@serpentine.com>
parents:
25923
diff
changeset
|
40 |
def hasitem(self, section, item): |
e70c97cc9243
config: add hasconfig method and supporting plumbing
Bryan O'Sullivan <bos@serpentine.com>
parents:
25923
diff
changeset
|
41 |
return item in self._data.get(section, {}) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
42 |
|
8186
6a0018cdb2fe
config: add some helper methods
Matt Mackall <mpm@selenic.com>
parents:
8185
diff
changeset
|
43 |
def __getitem__(self, section): |
6a0018cdb2fe
config: add some helper methods
Matt Mackall <mpm@selenic.com>
parents:
8185
diff
changeset
|
44 |
return self._data.get(section, {}) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
45 |
|
8186
6a0018cdb2fe
config: add some helper methods
Matt Mackall <mpm@selenic.com>
parents:
8185
diff
changeset
|
46 |
def __iter__(self): |
6a0018cdb2fe
config: add some helper methods
Matt Mackall <mpm@selenic.com>
parents:
8185
diff
changeset
|
47 |
for d in self.sections(): |
6a0018cdb2fe
config: add some helper methods
Matt Mackall <mpm@selenic.com>
parents:
8185
diff
changeset
|
48 |
yield d |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
49 |
|
8193
94246e90081e
config: add section filter to read
Matt Mackall <mpm@selenic.com>
parents:
8192
diff
changeset
|
50 |
def update(self, src): |
34358
c41444a39de2
config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com>
parents:
34146
diff
changeset
|
51 |
self._source = self._source.preparewrite() |
19087
7d82ad4b3727
config: discard "%unset" values defined in the other files read in previously
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17537
diff
changeset
|
52 |
for s, n in src._unset: |
34358
c41444a39de2
config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com>
parents:
34146
diff
changeset
|
53 |
ds = self._data.get(s, None) |
c41444a39de2
config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com>
parents:
34146
diff
changeset
|
54 |
if ds is not None and n in ds: |
c41444a39de2
config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com>
parents:
34146
diff
changeset
|
55 |
self._data[s] = ds.preparewrite() |
19087
7d82ad4b3727
config: discard "%unset" values defined in the other files read in previously
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17537
diff
changeset
|
56 |
del self._data[s][n] |
7d82ad4b3727
config: discard "%unset" values defined in the other files read in previously
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17537
diff
changeset
|
57 |
del self._source[(s, n)] |
8193
94246e90081e
config: add section filter to read
Matt Mackall <mpm@selenic.com>
parents:
8192
diff
changeset
|
58 |
for s in src: |
34358
c41444a39de2
config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com>
parents:
34146
diff
changeset
|
59 |
ds = self._data.get(s, None) |
c41444a39de2
config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com>
parents:
34146
diff
changeset
|
60 |
if ds: |
c41444a39de2
config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com>
parents:
34146
diff
changeset
|
61 |
self._data[s] = ds.preparewrite() |
c41444a39de2
config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com>
parents:
34146
diff
changeset
|
62 |
else: |
c41444a39de2
config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com>
parents:
34146
diff
changeset
|
63 |
self._data[s] = util.cowsortdict() |
8193
94246e90081e
config: add section filter to read
Matt Mackall <mpm@selenic.com>
parents:
8192
diff
changeset
|
64 |
self._data[s].update(src._data[s]) |
94246e90081e
config: add section filter to read
Matt Mackall <mpm@selenic.com>
parents:
8192
diff
changeset
|
65 |
self._source.update(src._source) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
66 |
|
8144 | 67 |
def get(self, section, item, default=None): |
8185
dc10a7a3f1d4
config: split source data out into separate map
Matt Mackall <mpm@selenic.com>
parents:
8184
diff
changeset
|
68 |
return self._data.get(section, {}).get(item, default) |
15919
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
69 |
|
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
70 |
def backup(self, section, item): |
17527 | 71 |
"""return a tuple allowing restore to reinstall a previous value |
15919
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
72 |
|
17530 | 73 |
The main reason we need it is because it handles the "no data" case. |
15919
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
74 |
""" |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
75 |
try: |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
76 |
value = self._data[section][item] |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
77 |
source = self.source(section, item) |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
78 |
return (section, item, value, source) |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
79 |
except KeyError: |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
80 |
return (section, item) |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
81 |
|
8198
cf9accffd0b3
config: getsource -> source
Matt Mackall <mpm@selenic.com>
parents:
8193
diff
changeset
|
82 |
def source(self, section, item): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
83 |
return self._source.get((section, item), b"") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
84 |
|
8144 | 85 |
def sections(self): |
86 |
return sorted(self._data.keys()) |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
87 |
|
8144 | 88 |
def items(self, section): |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43089
diff
changeset
|
89 |
return list(pycompat.iteritems(self._data.get(section, {}))) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
90 |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
91 |
def set(self, section, item, value, source=b""): |
31315
c920efa9d34b
config: guard against setconfig specifying unicode values on py3
Augie Fackler <raf@durin42.com>
parents:
31186
diff
changeset
|
92 |
if pycompat.ispy3: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
93 |
assert not isinstance( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
94 |
section, str |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
95 |
), b'config section may not be unicode strings on Python 3' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
96 |
assert not isinstance( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
97 |
item, str |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
98 |
), b'config item may not be unicode strings on Python 3' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
99 |
assert not isinstance( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
100 |
value, str |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
101 |
), b'config values may not be unicode strings on Python 3' |
8144 | 102 |
if section not in self: |
34358
c41444a39de2
config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com>
parents:
34146
diff
changeset
|
103 |
self._data[section] = util.cowsortdict() |
c41444a39de2
config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com>
parents:
34146
diff
changeset
|
104 |
else: |
c41444a39de2
config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com>
parents:
34146
diff
changeset
|
105 |
self._data[section] = self._data[section].preparewrite() |
8185
dc10a7a3f1d4
config: split source data out into separate map
Matt Mackall <mpm@selenic.com>
parents:
8184
diff
changeset
|
106 |
self._data[section][item] = value |
20789
d19c9bdbbf35
config: don't set source when no source is specified - don't overwrite with ''
Mads Kiilerich <madski@unity3d.com>
parents:
19087
diff
changeset
|
107 |
if source: |
34358
c41444a39de2
config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com>
parents:
34146
diff
changeset
|
108 |
self._source = self._source.preparewrite() |
20789
d19c9bdbbf35
config: don't set source when no source is specified - don't overwrite with ''
Mads Kiilerich <madski@unity3d.com>
parents:
19087
diff
changeset
|
109 |
self._source[(section, item)] = source |
8144 | 110 |
|
15919
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
111 |
def restore(self, data): |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
112 |
"""restore data returned by self.backup""" |
34358
c41444a39de2
config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com>
parents:
34146
diff
changeset
|
113 |
self._source = self._source.preparewrite() |
15919
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
114 |
if len(data) == 4: |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
115 |
# restore old data |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
116 |
section, item, value, source = data |
34358
c41444a39de2
config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com>
parents:
34146
diff
changeset
|
117 |
self._data[section] = self._data[section].preparewrite() |
15919
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
118 |
self._data[section][item] = value |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
119 |
self._source[(section, item)] = source |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
120 |
else: |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
121 |
# no data before, remove everything |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
122 |
section, item = data |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
123 |
if section in self._data: |
22037
8665c647da6e
config: fix restoreconfig of non existing config
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21910
diff
changeset
|
124 |
self._data[section].pop(item, None) |
15919
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
125 |
self._source.pop((section, item), None) |
69e792cf7851
config: have a way to backup and restore value in config
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
14696
diff
changeset
|
126 |
|
8265
52c5be55af82
config: add parse interface
Matt Mackall <mpm@selenic.com>
parents:
8263
diff
changeset
|
127 |
def parse(self, src, data, sections=None, remap=None, include=None): |
30359
954002426f78
config: mark parser regexes as bytes explicitly
Augie Fackler <augie@google.com>
parents:
27696
diff
changeset
|
128 |
sectionre = util.re.compile(br'\[([^\[]+)\]') |
954002426f78
config: mark parser regexes as bytes explicitly
Augie Fackler <augie@google.com>
parents:
27696
diff
changeset
|
129 |
itemre = util.re.compile(br'([^=\s][^=]*?)\s*=\s*(.*\S|)') |
954002426f78
config: mark parser regexes as bytes explicitly
Augie Fackler <augie@google.com>
parents:
27696
diff
changeset
|
130 |
contre = util.re.compile(br'\s+(\S|\S.*\S)\s*$') |
954002426f78
config: mark parser regexes as bytes explicitly
Augie Fackler <augie@google.com>
parents:
27696
diff
changeset
|
131 |
emptyre = util.re.compile(br'(;|#|\s*$)') |
954002426f78
config: mark parser regexes as bytes explicitly
Augie Fackler <augie@google.com>
parents:
27696
diff
changeset
|
132 |
commentre = util.re.compile(br'(;|#)') |
954002426f78
config: mark parser regexes as bytes explicitly
Augie Fackler <augie@google.com>
parents:
27696
diff
changeset
|
133 |
unsetre = util.re.compile(br'%unset\s+(\S+)') |
954002426f78
config: mark parser regexes as bytes explicitly
Augie Fackler <augie@google.com>
parents:
27696
diff
changeset
|
134 |
includere = util.re.compile(br'%include\s+(\S|\S.*\S)\s*$') |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
135 |
section = b"" |
8144 | 136 |
item = None |
137 |
line = 0 |
|
9339
9be91129c96e
config: improve code readability
Andrey <py4fun@gmail.com>
parents:
9136
diff
changeset
|
138 |
cont = False |
8180 | 139 |
|
34713
e5a2cfc524d4
config: allow remapping the default section
Yuya Nishihara <yuya@tcha.org>
parents:
34455
diff
changeset
|
140 |
if remap: |
e5a2cfc524d4
config: allow remapping the default section
Yuya Nishihara <yuya@tcha.org>
parents:
34455
diff
changeset
|
141 |
section = remap.get(section, section) |
e5a2cfc524d4
config: allow remapping the default section
Yuya Nishihara <yuya@tcha.org>
parents:
34455
diff
changeset
|
142 |
|
9136
31177742f54a
for calls expecting bool args, pass bool instead of int
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8312
diff
changeset
|
143 |
for l in data.splitlines(True): |
8144 | 144 |
line += 1 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
145 |
if line == 1 and l.startswith(b'\xef\xbb\xbf'): |
16348
f350021ee32e
config: discard UTF-8 BOM if found
Matt Mackall <mpm@selenic.com>
parents:
15919
diff
changeset
|
146 |
# Someone set us up the BOM |
f350021ee32e
config: discard UTF-8 BOM if found
Matt Mackall <mpm@selenic.com>
parents:
15919
diff
changeset
|
147 |
l = l[3:] |
8144 | 148 |
if cont: |
14642
fdcdb221a922
config: handle comment lines in continuations (issue2854)
Matt Mackall <mpm@selenic.com>
parents:
14486
diff
changeset
|
149 |
if commentre.match(l): |
fdcdb221a922
config: handle comment lines in continuations (issue2854)
Matt Mackall <mpm@selenic.com>
parents:
14486
diff
changeset
|
150 |
continue |
8144 | 151 |
m = contre.match(l) |
152 |
if m: |
|
8193
94246e90081e
config: add section filter to read
Matt Mackall <mpm@selenic.com>
parents:
8192
diff
changeset
|
153 |
if sections and section not in sections: |
94246e90081e
config: add section filter to read
Matt Mackall <mpm@selenic.com>
parents:
8192
diff
changeset
|
154 |
continue |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
155 |
v = self.get(section, item) + b"\n" + m.group(1) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
156 |
self.set(section, item, v, b"%s:%d" % (src, line)) |
8144 | 157 |
continue |
158 |
item = None |
|
9469
7f0f882af23d
config: abort on indented non-continuation lines (issue1829)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8312
diff
changeset
|
159 |
cont = False |
8183
2858ab754995
config: allow including other config files
Matt Mackall <mpm@selenic.com>
parents:
8180
diff
changeset
|
160 |
m = includere.match(l) |
25095
3182965b3971
config: give it an includepaths option for looking for config files
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22419
diff
changeset
|
161 |
|
3182965b3971
config: give it an includepaths option for looking for config files
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22419
diff
changeset
|
162 |
if m and include: |
3182965b3971
config: give it an includepaths option for looking for config files
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22419
diff
changeset
|
163 |
expanded = util.expandpath(m.group(1)) |
45278
3f54242781e9
config: remove now-unused support for "includepaths"
Martin von Zweigbergk <martinvonz@google.com>
parents:
45244
diff
changeset
|
164 |
try: |
45281
668af67bfd18
config: remove now-unused `abs` argument from `include` callback
Martin von Zweigbergk <martinvonz@google.com>
parents:
45280
diff
changeset
|
165 |
include(expanded, remap=remap, sections=sections) |
45278
3f54242781e9
config: remove now-unused support for "includepaths"
Martin von Zweigbergk <martinvonz@google.com>
parents:
45244
diff
changeset
|
166 |
except IOError as inst: |
3f54242781e9
config: remove now-unused support for "includepaths"
Martin von Zweigbergk <martinvonz@google.com>
parents:
45244
diff
changeset
|
167 |
if inst.errno != errno.ENOENT: |
45909
9dc1351d0b5f
errors: raise ConfigError on failure to parse config file
Martin von Zweigbergk <martinvonz@google.com>
parents:
45800
diff
changeset
|
168 |
raise error.ConfigError( |
45278
3f54242781e9
config: remove now-unused support for "includepaths"
Martin von Zweigbergk <martinvonz@google.com>
parents:
45244
diff
changeset
|
169 |
_(b"cannot include %s (%s)") |
45281
668af67bfd18
config: remove now-unused `abs` argument from `include` callback
Martin von Zweigbergk <martinvonz@google.com>
parents:
45280
diff
changeset
|
170 |
% (expanded, encoding.strtolocal(inst.strerror)), |
45278
3f54242781e9
config: remove now-unused support for "includepaths"
Martin von Zweigbergk <martinvonz@google.com>
parents:
45244
diff
changeset
|
171 |
b"%s:%d" % (src, line), |
3f54242781e9
config: remove now-unused support for "includepaths"
Martin von Zweigbergk <martinvonz@google.com>
parents:
45244
diff
changeset
|
172 |
) |
8183
2858ab754995
config: allow including other config files
Matt Mackall <mpm@selenic.com>
parents:
8180
diff
changeset
|
173 |
continue |
8144 | 174 |
if emptyre.match(l): |
175 |
continue |
|
176 |
m = sectionre.match(l) |
|
177 |
if m: |
|
178 |
section = m.group(1) |
|
8298
9542f4c3fa1b
config: make remap actually work
Matt Mackall <mpm@selenic.com>
parents:
8265
diff
changeset
|
179 |
if remap: |
9542f4c3fa1b
config: make remap actually work
Matt Mackall <mpm@selenic.com>
parents:
8265
diff
changeset
|
180 |
section = remap.get(section, section) |
8144 | 181 |
if section not in self: |
34358
c41444a39de2
config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com>
parents:
34146
diff
changeset
|
182 |
self._data[section] = util.cowsortdict() |
8144 | 183 |
continue |
184 |
m = itemre.match(l) |
|
185 |
if m: |
|
186 |
item = m.group(1) |
|
9339
9be91129c96e
config: improve code readability
Andrey <py4fun@gmail.com>
parents:
9136
diff
changeset
|
187 |
cont = True |
8193
94246e90081e
config: add section filter to read
Matt Mackall <mpm@selenic.com>
parents:
8192
diff
changeset
|
188 |
if sections and section not in sections: |
94246e90081e
config: add section filter to read
Matt Mackall <mpm@selenic.com>
parents:
8192
diff
changeset
|
189 |
continue |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
190 |
self.set(section, item, m.group(2), b"%s:%d" % (src, line)) |
8144 | 191 |
continue |
8184
9189afe1eba3
config: add %unset name support
Matt Mackall <mpm@selenic.com>
parents:
8183
diff
changeset
|
192 |
m = unsetre.match(l) |
9189afe1eba3
config: add %unset name support
Matt Mackall <mpm@selenic.com>
parents:
8183
diff
changeset
|
193 |
if m: |
9189afe1eba3
config: add %unset name support
Matt Mackall <mpm@selenic.com>
parents:
8183
diff
changeset
|
194 |
name = m.group(1) |
8193
94246e90081e
config: add section filter to read
Matt Mackall <mpm@selenic.com>
parents:
8192
diff
changeset
|
195 |
if sections and section not in sections: |
94246e90081e
config: add section filter to read
Matt Mackall <mpm@selenic.com>
parents:
8192
diff
changeset
|
196 |
continue |
13031
3da456d0c885
code style: prefer 'is' and 'is not' tests with singletons
Martin Geisler <mg@aragost.com>
parents:
11292
diff
changeset
|
197 |
if self.get(section, name) is not None: |
34455
0efdfb57b05c
config: add a missing preparewrite() call
Jun Wu <quark@fb.com>
parents:
34358
diff
changeset
|
198 |
self._data[section] = self._data[section].preparewrite() |
8184
9189afe1eba3
config: add %unset name support
Matt Mackall <mpm@selenic.com>
parents:
8183
diff
changeset
|
199 |
del self._data[section][name] |
19087
7d82ad4b3727
config: discard "%unset" values defined in the other files read in previously
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17537
diff
changeset
|
200 |
self._unset.append((section, name)) |
8184
9189afe1eba3
config: add %unset name support
Matt Mackall <mpm@selenic.com>
parents:
8183
diff
changeset
|
201 |
continue |
9189afe1eba3
config: add %unset name support
Matt Mackall <mpm@selenic.com>
parents:
8183
diff
changeset
|
202 |
|
45800
0883413e09bc
config: move message about leading spaces in config to config.py
Martin von Zweigbergk <martinvonz@google.com>
parents:
45281
diff
changeset
|
203 |
message = l.rstrip() |
0883413e09bc
config: move message about leading spaces in config to config.py
Martin von Zweigbergk <martinvonz@google.com>
parents:
45281
diff
changeset
|
204 |
if l.startswith(b' '): |
0883413e09bc
config: move message about leading spaces in config to config.py
Martin von Zweigbergk <martinvonz@google.com>
parents:
45281
diff
changeset
|
205 |
message = b"unexpected leading whitespace: %s" % message |
45909
9dc1351d0b5f
errors: raise ConfigError on failure to parse config file
Martin von Zweigbergk <martinvonz@google.com>
parents:
45800
diff
changeset
|
206 |
raise error.ConfigError(message, (b"%s:%d" % (src, line))) |
8265
52c5be55af82
config: add parse interface
Matt Mackall <mpm@selenic.com>
parents:
8263
diff
changeset
|
207 |
|
52c5be55af82
config: add parse interface
Matt Mackall <mpm@selenic.com>
parents:
8263
diff
changeset
|
208 |
def read(self, path, fp=None, sections=None, remap=None): |
52c5be55af82
config: add parse interface
Matt Mackall <mpm@selenic.com>
parents:
8263
diff
changeset
|
209 |
if not fp: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
210 |
fp = util.posixfile(path, b'rb') |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45909
diff
changeset
|
211 |
assert ( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45909
diff
changeset
|
212 |
getattr(fp, 'mode', 'rb') == 'rb' |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45909
diff
changeset
|
213 |
), b'config files must be opened in binary mode, got fp=%r mode=%r' % ( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45909
diff
changeset
|
214 |
fp, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45909
diff
changeset
|
215 |
fp.mode, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
216 |
) |
45244
f7f142d74df3
config: pass both relative and absolute paths to `include` callback
Martin von Zweigbergk <martinvonz@google.com>
parents:
43554
diff
changeset
|
217 |
|
45280
83ca8d6f3206
config: re-calculate absolute %include path in `include` callback
Martin von Zweigbergk <martinvonz@google.com>
parents:
45278
diff
changeset
|
218 |
dir = os.path.dirname(path) |
83ca8d6f3206
config: re-calculate absolute %include path in `include` callback
Martin von Zweigbergk <martinvonz@google.com>
parents:
45278
diff
changeset
|
219 |
|
45281
668af67bfd18
config: remove now-unused `abs` argument from `include` callback
Martin von Zweigbergk <martinvonz@google.com>
parents:
45280
diff
changeset
|
220 |
def include(rel, remap, sections): |
45280
83ca8d6f3206
config: re-calculate absolute %include path in `include` callback
Martin von Zweigbergk <martinvonz@google.com>
parents:
45278
diff
changeset
|
221 |
abs = os.path.normpath(os.path.join(dir, rel)) |
45244
f7f142d74df3
config: pass both relative and absolute paths to `include` callback
Martin von Zweigbergk <martinvonz@google.com>
parents:
43554
diff
changeset
|
222 |
self.read(abs, remap=remap, sections=sections) |
f7f142d74df3
config: pass both relative and absolute paths to `include` callback
Martin von Zweigbergk <martinvonz@google.com>
parents:
43554
diff
changeset
|
223 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
224 |
self.parse( |
45244
f7f142d74df3
config: pass both relative and absolute paths to `include` callback
Martin von Zweigbergk <martinvonz@google.com>
parents:
43554
diff
changeset
|
225 |
path, fp.read(), sections=sections, remap=remap, include=include |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
226 |
) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
227 |
|
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
228 |
|
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
229 |
def parselist(value): |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
230 |
"""parse a configuration value as a list of comma/space separated strings |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
231 |
|
34146
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
32358
diff
changeset
|
232 |
>>> parselist(b'this,is "a small" ,test') |
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
233 |
['this', 'is', 'a small', 'test'] |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
234 |
""" |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
235 |
|
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
236 |
def _parse_plain(parts, s, offset): |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
237 |
whitespace = False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
238 |
while offset < len(s) and ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
239 |
s[offset : offset + 1].isspace() or s[offset : offset + 1] == b',' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
240 |
): |
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
241 |
whitespace = True |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
242 |
offset += 1 |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
243 |
if offset >= len(s): |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
244 |
return None, parts, offset |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
245 |
if whitespace: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
246 |
parts.append(b'') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
247 |
if s[offset : offset + 1] == b'"' and not parts[-1]: |
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
248 |
return _parse_quote, parts, offset + 1 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
249 |
elif s[offset : offset + 1] == b'"' and parts[-1][-1:] == b'\\': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
250 |
parts[-1] = parts[-1][:-1] + s[offset : offset + 1] |
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
251 |
return _parse_plain, parts, offset + 1 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
252 |
parts[-1] += s[offset : offset + 1] |
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
253 |
return _parse_plain, parts, offset + 1 |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
254 |
|
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
255 |
def _parse_quote(parts, s, offset): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
256 |
if offset < len(s) and s[offset : offset + 1] == b'"': # "" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
257 |
parts.append(b'') |
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
258 |
offset += 1 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
259 |
while offset < len(s) and ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
260 |
s[offset : offset + 1].isspace() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
261 |
or s[offset : offset + 1] == b',' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
262 |
): |
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
263 |
offset += 1 |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
264 |
return _parse_plain, parts, offset |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
265 |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
266 |
while offset < len(s) and s[offset : offset + 1] != b'"': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
267 |
if ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
268 |
s[offset : offset + 1] == b'\\' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
269 |
and offset + 1 < len(s) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
270 |
and s[offset + 1 : offset + 2] == b'"' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
271 |
): |
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
272 |
offset += 1 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
273 |
parts[-1] += b'"' |
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
274 |
else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41342
diff
changeset
|
275 |
parts[-1] += s[offset : offset + 1] |
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
276 |
offset += 1 |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
277 |
|
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
278 |
if offset >= len(s): |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
279 |
real_parts = _configlist(parts[-1]) |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
280 |
if not real_parts: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
281 |
parts[-1] = b'"' |
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
282 |
else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
283 |
real_parts[0] = b'"' + real_parts[0] |
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
284 |
parts = parts[:-1] |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
285 |
parts.extend(real_parts) |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
286 |
return None, parts, offset |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
287 |
|
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
288 |
offset += 1 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
289 |
while offset < len(s) and s[offset : offset + 1] in [b' ', b',']: |
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
290 |
offset += 1 |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
291 |
|
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
292 |
if offset < len(s): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
293 |
if offset + 1 == len(s) and s[offset : offset + 1] == b'"': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
294 |
parts[-1] += b'"' |
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
295 |
offset += 1 |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
296 |
else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
297 |
parts.append(b'') |
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
298 |
else: |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
299 |
return None, parts, offset |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
300 |
|
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
301 |
return _parse_plain, parts, offset |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
302 |
|
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
303 |
def _configlist(s): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
304 |
s = s.rstrip(b' ,') |
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
305 |
if not s: |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
306 |
return [] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
307 |
parser, parts, offset = _parse_plain, [b''], 0 |
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
308 |
while parser: |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
309 |
parser, parts, offset = parser(parts, s, offset) |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
310 |
return parts |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
311 |
|
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
312 |
if value is not None and isinstance(value, bytes): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
313 |
result = _configlist(value.lstrip(b' ,\n')) |
31488
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
314 |
else: |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
315 |
result = value |
a7c687c35119
ui: move configlist parser to config.py
Jun Wu <quark@fb.com>
parents:
31383
diff
changeset
|
316 |
return result or [] |