Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
slapos.buildout
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boxiang Sun
slapos.buildout
Commits
b096b83a
Commit
b096b83a
authored
8 years ago
by
Julien Muchembled
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add support for escaping $ with $$
parent
30ba4860
master
feat/integrity
networkcache
next
2.7.1+slapos016
2.7.1+slapos015
2.7.1+slapos014
2.7.1+slapos013
2.7.1+slapos012
2.7.1+slapos010
2.7.1+slapos009
2.7.1+slapos008
2.7.1+slapos007
2.7.1+slapos006
2.7.1+slapos005
2.7.1+slapos004
2.7.1+slapos003
2.7.1+slapos002
2.7.1+slapos001
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
84 additions
and
13 deletions
+84
-13
src/zc/buildout/buildout.py
src/zc/buildout/buildout.py
+16
-13
src/zc/buildout/tests.py
src/zc/buildout/tests.py
+68
-0
No files found.
src/zc/buildout/buildout.py
View file @
b096b83a
...
...
@@ -648,7 +648,7 @@ class Buildout(DictMixin):
if
part
in
install_parts
:
old_options
=
installed_part_options
[
part
].
copy
()
installed_files
=
old_options
.
pop
(
'__buildout_installed__'
)
new_options
=
self
.
get
(
part
)
new_options
=
self
.
get
(
part
)
.
copy
()
if
old_options
==
new_options
:
# The options are the same, but are all of the
# installed files still there? If not, we should
...
...
@@ -1337,12 +1337,16 @@ class Options(DictMixin):
def
_dosub
(
self
,
option
,
v
):
__doing__
=
'Getting option %s:%s.'
,
self
.
name
,
option
seen
=
[(
self
.
name
,
option
)]
v
=
'$$'
.
join
([
self
.
_sub
(
s
,
seen
)
for
s
in
v
.
split
(
'$$'
)])
v
=
'$$'
.
join
([
self
.
_sub
(
s
,
seen
,
last
=
False
)
for
s
in
v
.
split
(
'$$'
)])
self
.
_cooked
[
option
]
=
v
def
get
(
self
,
option
,
default
=
None
,
seen
=
None
):
def
get
(
self
,
option
,
default
=
None
,
seen
=
None
,
last
=
True
):
try
:
return
self
.
_data
[
option
]
if
last
:
return
self
.
_data
[
option
].
replace
(
'$${'
,
'${'
)
else
:
return
self
.
_data
[
option
]
except
KeyError
:
pass
...
...
@@ -1364,16 +1368,20 @@ class Options(DictMixin):
)
else
:
seen
.
append
(
key
)
v
=
'$$'
.
join
([
self
.
_sub
(
s
,
seen
)
for
s
in
v
.
split
(
'$$'
)])
v
=
'$$'
.
join
([
self
.
_sub
(
s
,
seen
,
last
=
False
)
for
s
in
v
.
split
(
'$$'
)])
seen
.
pop
()
self
.
_data
[
option
]
=
v
return
v
if
last
:
return
v
.
replace
(
'$${'
,
'${'
)
else
:
return
v
_template_split
=
re
.
compile
(
'([$]{[^}]*})'
).
split
_simple
=
re
.
compile
(
'[-a-zA-Z0-9 ._]+$'
).
match
_valid
=
re
.
compile
(
'
\
${[-
a
-zA-Z0-9 ._]*:[-a-zA-Z0-9 ._]+}$'
).
match
def
_sub
(
self
,
template
,
seen
):
def
_sub
(
self
,
template
,
seen
,
last
=
True
):
value
=
self
.
_template_split
(
template
)
subs
=
[]
for
ref
in
value
[
1
::
2
]:
...
...
@@ -1401,7 +1409,7 @@ class Options(DictMixin):
section
,
option
=
s
if
not
section
:
section
=
self
.
name
v
=
self
.
buildout
[
section
].
get
(
option
,
None
,
seen
)
v
=
self
.
buildout
[
section
].
get
(
option
,
None
,
seen
,
last
=
last
)
if
v
is
None
:
if
option
==
'_buildout_section_name_'
:
v
=
self
.
name
...
...
@@ -1414,11 +1422,6 @@ class Options(DictMixin):
return
''
.
join
([
''
.
join
(
v
)
for
v
in
zip
(
value
[::
2
],
subs
)])
def
__getitem__
(
self
,
key
):
try
:
return
self
.
_data
[
key
]
except
KeyError
:
pass
v
=
self
.
get
(
key
)
if
v
is
None
:
raise
MissingOption
(
"Missing option: %s:%s"
%
(
self
.
name
,
key
))
...
...
This diff is collapsed.
Click to expand it.
src/zc/buildout/tests.py
View file @
b096b83a
...
...
@@ -1016,6 +1016,7 @@ Uninstall recipes need to be called when a part is removed too:
uninstalling
Installing demo.
installing
Unused options for demo: 'x'.
>>> write('buildout.cfg', '''
...
...
@@ -2753,6 +2754,73 @@ def increment_on_command_line():
recipe='zc.buildout:debug'
"""
def
bug_664539_simple_buildout
():
r"""
>>> write('buildout.cfg', '''
... [buildout]
... parts = escape
...
... [escape]
... recipe = zc.buildout:debug
... foo = $${nonexistent:option}
... ''')
>>> print_(system(buildout), end='')
Installing escape.
foo='${nonexistent:option}'
recipe='zc.buildout:debug'
"""
def
bug_664539_reference
():
r"""
>>> write('buildout.cfg', '''
... [buildout]
... parts = escape
...
... [escape]
... recipe = zc.buildout:debug
... foo = ${:bar}
... bar = $${nonexistent:option}
... ''')
>>> print_(system(buildout), end='')
Installing escape.
bar='${nonexistent:option}'
foo='${nonexistent:option}'
recipe='zc.buildout:debug'
"""
def
bug_664539_complex_buildout
():
r"""
>>> write('buildout.cfg', '''
... [buildout]
... parts = escape
...
... [escape]
... recipe = zc.buildout:debug
... foo = ${level1:foo}
...
... [level1]
... recipe = zc.buildout:debug
... foo = ${level2:foo}
...
... [level2]
... recipe = zc.buildout:debug
... foo = $${nonexistent:option}
... ''')
>>> print_(system(buildout), end='')
Installing level2.
foo='${nonexistent:option}'
recipe='zc.buildout:debug'
Installing level1.
foo='${nonexistent:option}'
recipe='zc.buildout:debug'
Installing escape.
foo='${nonexistent:option}'
recipe='zc.buildout:debug'
"""
def
test_constrained_requirement
():
"""
zc.buildout.easy_install._constrained_requirement(constraint, requirement)
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment