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
Jérome Perrin
slapos.buildout
Commits
9340cc53
Commit
9340cc53
authored
Nov 17, 2012
by
Jim Fulton
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of github.com:buildout/buildout
parents
ceb9dcd6
9632be86
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
58 additions
and
31 deletions
+58
-31
bootstrap/bootstrap.py
bootstrap/bootstrap.py
+1
-2
buildout.cfg
buildout.cfg
+1
-0
dev.py
dev.py
+1
-2
setup.py
setup.py
+1
-0
src/zc/buildout/buildout.py
src/zc/buildout/buildout.py
+3
-1
src/zc/buildout/buildout.txt
src/zc/buildout/buildout.txt
+0
-2
src/zc/buildout/download.py
src/zc/buildout/download.py
+13
-15
src/zc/buildout/easy_install.py
src/zc/buildout/easy_install.py
+7
-1
src/zc/buildout/testing.py
src/zc/buildout/testing.py
+6
-0
src/zc/buildout/tests.py
src/zc/buildout/tests.py
+22
-8
zc.recipe.egg_/src/zc/recipe/egg/tests.py
zc.recipe.egg_/src/zc/recipe/egg/tests.py
+3
-0
No files found.
bootstrap/bootstrap.py
View file @
9340cc53
...
@@ -98,7 +98,6 @@ if find_links:
...
@@ -98,7 +98,6 @@ if find_links:
distribute_path
=
ws
.
find
(
distribute_path
=
ws
.
find
(
pkg_resources
.
Requirement
.
parse
(
'distribute'
)).
location
pkg_resources
.
Requirement
.
parse
(
'distribute'
)).
location
env
=
dict
(
os
.
environ
,
PYTHONPATH
=
distribute_path
)
requirement
=
'zc.buildout'
requirement
=
'zc.buildout'
version
=
options
.
version
version
=
options
.
version
...
@@ -135,7 +134,7 @@ if version:
...
@@ -135,7 +134,7 @@ if version:
cmd
.
append
(
requirement
)
cmd
.
append
(
requirement
)
import
subprocess
import
subprocess
if
subprocess
.
call
(
cmd
,
env
=
env
)
!=
0
:
if
subprocess
.
call
(
cmd
,
env
=
dict
(
os
.
environ
,
PYTHONPATH
=
distribute_path
)
)
!=
0
:
raise
Exception
(
raise
Exception
(
"Failed to execute command:
\
n
%s"
,
"Failed to execute command:
\
n
%s"
,
repr
(
cmd
)[
1
:
-
1
])
repr
(
cmd
)[
1
:
-
1
])
...
...
buildout.cfg
View file @
9340cc53
...
@@ -10,6 +10,7 @@ zope.exceptions = 4.0.1
...
@@ -10,6 +10,7 @@ zope.exceptions = 4.0.1
[py]
[py]
recipe = zc.recipe.egg
recipe = zc.recipe.egg
eggs = zc.buildout
eggs = zc.buildout
zc.recipe.egg
zope.testing
zope.testing
interpreter = py
interpreter = py
...
...
dev.py
View file @
9340cc53
...
@@ -53,11 +53,10 @@ import pkg_resources
...
@@ -53,11 +53,10 @@ import pkg_resources
######################################################################
######################################################################
# Install buildout
# Install buildout
if
subprocess
.
call
(
if
subprocess
.
call
(
[
sys
.
executable
]
+
[
sys
.
executable
]
+
[
'setup.py'
,
'-q'
,
'develop'
,
'-m'
,
'-x'
,
'-d'
,
'develop-eggs'
],
[
'setup.py'
,
'-q'
,
'develop'
,
'-m'
,
'-x'
,
'-d'
,
'develop-eggs'
],
env
=
{
'PYTHONPATH'
:
os
.
path
.
dirname
(
pkg_resources
.
__file__
)}
):
env
=
dict
(
os
.
environ
,
PYTHONPATH
=
os
.
path
.
dirname
(
pkg_resources
.
__file__
))
):
raise
RuntimeError
(
"buildout build failed."
)
raise
RuntimeError
(
"buildout build failed."
)
pkg_resources
.
working_set
.
add_entry
(
'src'
)
pkg_resources
.
working_set
.
add_entry
(
'src'
)
...
...
setup.py
View file @
9340cc53
...
@@ -94,6 +94,7 @@ setup(
...
@@ -94,6 +94,7 @@ setup(
'Intended Audience :: Developers'
,
'Intended Audience :: Developers'
,
'License :: OSI Approved :: Zope Public License'
,
'License :: OSI Approved :: Zope Public License'
,
'Programming Language :: Python'
,
'Programming Language :: Python'
,
'Programming Language :: Python :: 3'
,
'Programming Language :: Python :: 2.4'
,
'Programming Language :: Python :: 2.4'
,
'Programming Language :: Python :: 2.5'
,
'Programming Language :: Python :: 2.5'
,
'Programming Language :: Python :: 2.6'
,
'Programming Language :: Python :: 2.6'
,
...
...
src/zc/buildout/buildout.py
View file @
9340cc53
...
@@ -393,8 +393,10 @@ class Buildout(DictMixin):
...
@@ -393,8 +393,10 @@ class Buildout(DictMixin):
sep
=
re
.
compile
(
r'[\\/]'
)
sep
=
re
.
compile
(
r'[\\/]'
)
if
args
:
if
args
:
eggs
=
'
\
n
'
.
join
(
a
for
a
in
args
if
not
sep
.
search
(
a
))
eggs
=
'
\
n
'
.
join
(
a
for
a
in
args
if
not
sep
.
search
(
a
))
sepsub
=
os
.
path
.
sep
==
'/'
and
'/'
or
re
.
escape
(
os
.
path
.
sep
)
paths
=
'
\
n
'
.
join
(
paths
=
'
\
n
'
.
join
(
sep
.
sub
(
os
.
path
.
sep
,
a
)
for
a
in
args
if
sep
.
search
(
a
))
sep
.
sub
(
sepsub
,
a
)
for
a
in
args
if
sep
.
search
(
a
))
f
.
write
(
'[buildout]
\
n
'
f
.
write
(
'[buildout]
\
n
'
'parts = py
\
n
'
'parts = py
\
n
'
'
\
n
'
'
\
n
'
...
...
src/zc/buildout/buildout.txt
View file @
9340cc53
...
@@ -2575,10 +2575,8 @@ or paths to use:
...
@@ -2575,10 +2575,8 @@ or paths to use:
>>> cd(sample_bootstrapped)
>>> cd(sample_bootstrapped)
>>> remove('setup.cfg')
>>> remove('setup.cfg')
>>> remove('bin', 'buildout')
>>> print_(system(buildout + ' -csetup.cfg init demo other ./src'), end='')
>>> print_(system(buildout + ' -csetup.cfg init demo other ./src'), end='')
Creating '/sample-bootstrapped/setup.cfg'.
Creating '/sample-bootstrapped/setup.cfg'.
Generated script '/sample-bootstrapped/bin/buildout'.
Getting distribution for 'zc.recipe.egg'.
Getting distribution for 'zc.recipe.egg'.
Got zc.recipe.egg 1.3.3dev.
Got zc.recipe.egg 1.3.3dev.
Installing py.
Installing py.
...
...
src/zc/buildout/download.py
View file @
9340cc53
...
@@ -181,7 +181,7 @@ class Download(object):
...
@@ -181,7 +181,7 @@ class Download(object):
self
.
logger
.
info
(
'Downloading %s'
%
url
)
self
.
logger
.
info
(
'Downloading %s'
%
url
)
handle
,
tmp_path
=
tempfile
.
mkstemp
(
prefix
=
'buildout-'
)
handle
,
tmp_path
=
tempfile
.
mkstemp
(
prefix
=
'buildout-'
)
try
:
os
.
close
(
handle
)
try
:
try
:
tmp_path
,
headers
=
urlretrieve
(
url
,
tmp_path
)
tmp_path
,
headers
=
urlretrieve
(
url
,
tmp_path
)
if
not
check_md5sum
(
tmp_path
,
md5sum
):
if
not
check_md5sum
(
tmp_path
,
md5sum
):
...
@@ -195,8 +195,6 @@ class Download(object):
...
@@ -195,8 +195,6 @@ class Download(object):
except
Exception
:
except
Exception
:
os
.
remove
(
tmp_path
)
os
.
remove
(
tmp_path
)
raise
raise
finally
:
os
.
close
(
handle
)
if
path
:
if
path
:
shutil
.
move
(
tmp_path
,
path
)
shutil
.
move
(
tmp_path
,
path
)
...
...
src/zc/buildout/easy_install.py
View file @
9340cc53
...
@@ -94,6 +94,8 @@ def _get_index(index_url, find_links, allow_hosts=('*',)):
...
@@ -94,6 +94,8 @@ def _get_index(index_url, find_links, allow_hosts=('*',)):
if
index_url
is
None
:
if
index_url
is
None
:
index_url
=
default_index_url
index_url
=
default_index_url
if
index_url
.
startswith
(
'file://'
):
index_url
=
index_url
[
7
:]
index
=
AllowHostsPackageIndex
(
index_url
,
hosts
=
allow_hosts
)
index
=
AllowHostsPackageIndex
(
index_url
,
hosts
=
allow_hosts
)
if
find_links
:
if
find_links
:
...
@@ -433,6 +435,7 @@ class Installer:
...
@@ -433,6 +435,7 @@ class Installer:
# Retrieve the dist:
# Retrieve the dist:
if
avail
is
None
:
if
avail
is
None
:
self
.
_index
.
obtain
(
requirement
)
raise
MissingDistribution
(
requirement
,
ws
)
raise
MissingDistribution
(
requirement
,
ws
)
# We may overwrite distributions, so clear importer
# We may overwrite distributions, so clear importer
...
@@ -1049,7 +1052,10 @@ def _create_script(contents, dest):
...
@@ -1049,7 +1052,10 @@ def _create_script(contents, dest):
if
changed
:
if
changed
:
open
(
dest
,
'w'
).
write
(
contents
)
open
(
dest
,
'w'
).
write
(
contents
)
logger
.
info
(
"Generated script %r."
,
script
)
logger
.
info
(
"Generated script %r."
,
# Normalize for windows
script
.
endswith
(
'-script.py'
)
and
script
[:
-
10
]
or
script
)
try
:
try
:
os
.
chmod
(
dest
,
493
)
# 0755
os
.
chmod
(
dest
,
493
)
# 0755
...
...
src/zc/buildout/testing.py
View file @
9340cc53
...
@@ -503,3 +503,9 @@ normalize_exception_type_for_python_2_and_3 = (
...
@@ -503,3 +503,9 @@ normalize_exception_type_for_python_2_and_3 = (
re.compile(r'
^
(
\
w
+
\
.)
*
([
A
-
Z
][
A
-
Za
-
z0
-
9
]
+
Error
:
)
'),
re.compile(r'
^
(
\
w
+
\
.)
*
([
A
-
Z
][
A
-
Za
-
z0
-
9
]
+
Error
:
)
'),
'
\
2
')
'
\
2
')
not_found = (re.compile(r'
Not
found
:
[
^
\
n
]
+/
\
w
+/
\
r
?
\
n
'), '')
ignore_not_upgrading = (
re.compile(
'
Not
upgrading
because
not
running
a
local
buildout
command
.
\
n
'
), '')
src/zc/buildout/tests.py
View file @
9340cc53
...
@@ -2912,6 +2912,7 @@ def test_suite():
...
@@ -2912,6 +2912,7 @@ def test_suite():
zc
.
buildout
.
testing
.
normalize_endings
,
zc
.
buildout
.
testing
.
normalize_endings
,
zc
.
buildout
.
testing
.
normalize_script
,
zc
.
buildout
.
testing
.
normalize_script
,
zc
.
buildout
.
testing
.
normalize_egg_py
,
zc
.
buildout
.
testing
.
normalize_egg_py
,
zc
.
buildout
.
testing
.
not_found
,
(
re
.
compile
(
'__buildout_signature__ = recipes-
\
S+
'
),
(
re
.
compile
(
'__buildout_signature__ = recipes-
\
S+
'
),
'
__buildout_signature__
=
recipes
-
SSSSSSSSSSS
'),
'
__buildout_signature__
=
recipes
-
SSSSSSSSSSS
'),
(re.compile('
executable
=
[
\
S
]
+
python
\
S
*
', re.I),
(re.compile('
executable
=
[
\
S
]
+
python
\
S
*
', re.I),
...
@@ -2945,6 +2946,7 @@ def test_suite():
...
@@ -2945,6 +2946,7 @@ def test_suite():
zc.buildout.testing.normalize_endings,
zc.buildout.testing.normalize_endings,
zc.buildout.testing.normalize_script,
zc.buildout.testing.normalize_script,
zc.buildout.testing.normalize_egg_py,
zc.buildout.testing.normalize_egg_py,
zc.buildout.testing.not_found,
(re.compile('
__buildout_signature__
=
recipes
-
\
S
+
'),
(re.compile('
__buildout_signature__
=
recipes
-
\
S
+
'),
'
__buildout_signature__
=
recipes
-
SSSSSSSSSSS
'),
'
__buildout_signature__
=
recipes
-
SSSSSSSSSSS
'),
(re.compile('
[
-
d
]
distribute
-
\
S
+
[.]
egg
'), '
distribute
.
egg
'),
(re.compile('
[
-
d
]
distribute
-
\
S
+
[.]
egg
'), '
distribute
.
egg
'),
...
@@ -2974,6 +2976,7 @@ def test_suite():
...
@@ -2974,6 +2976,7 @@ def test_suite():
zc.buildout.testing.normalize_path,
zc.buildout.testing.normalize_path,
zc.buildout.testing.normalize_endings,
zc.buildout.testing.normalize_endings,
zc.buildout.testing.normalize_exception_type_for_python_2_and_3,
zc.buildout.testing.normalize_exception_type_for_python_2_and_3,
zc.buildout.testing.not_found,
(re.compile('
zc
.
buildout
.
buildout
.
MissingOption
'),
(re.compile('
zc
.
buildout
.
buildout
.
MissingOption
'),
'
MissingOption
'),
'
MissingOption
'),
(re.compile(r'
\
S
+
buildout
.
py
'), '
buildout
.
py
'),
(re.compile(r'
\
S
+
buildout
.
py
'), '
buildout
.
py
'),
...
@@ -2994,6 +2997,7 @@ def test_suite():
...
@@ -2994,6 +2997,7 @@ def test_suite():
zc.buildout.testing.normalize_endings,
zc.buildout.testing.normalize_endings,
zc.buildout.testing.normalize_script,
zc.buildout.testing.normalize_script,
zc.buildout.testing.normalize_egg_py,
zc.buildout.testing.normalize_egg_py,
zc.buildout.testing.not_found,
normalize_bang,
normalize_bang,
normalize_S,
normalize_S,
(re.compile('
99
[.]
99
'), '
NINETYNINE
.
NINETYNINE
'),
(re.compile('
99
[.]
99
'), '
NINETYNINE
.
NINETYNINE
'),
...
@@ -3010,20 +3014,25 @@ def test_suite():
...
@@ -3010,20 +3014,25 @@ def test_suite():
setUp=easy_install_SetUp,
setUp=easy_install_SetUp,
tearDown=zc.buildout.testing.buildoutTearDown,
tearDown=zc.buildout.testing.buildoutTearDown,
checker=renormalizing.RENormalizing([
checker=renormalizing.RENormalizing([
zc.buildout.testing.normalize_script,
zc.buildout.testing.normalize_path,
zc.buildout.testing.normalize_path,
zc.buildout.testing.normalize_endings,
zc.buildout.testing.normalize_endings,
zc.buildout.testing.normalize_script,
zc.buildout.testing.normalize_egg_py,
zc.buildout.testing.normalize_egg_py,
zc.buildout.testing.normalize_exception_type_for_python_2_and_3,
zc.buildout.testing.normalize_exception_type_for_python_2_and_3,
zc.buildout.testing.not_found,
normalize_bang,
normalize_bang,
normalize_S,
normalize_S,
(re.compile('
[
-
d
]
distribute
-
\
S
+
[.]
egg
'), '
distribute
.
egg
'),
(re.compile('
[
-
d
]
distribute
-
\
S
+
[.]
egg
'), '
distribute
.
egg
'),
(re.compile(r'
\\
[
\\
]
?
'), '
/
'),
(re.compile(r'
\\
[
\\
]
?
'), '
/
'),
(re.compile('
(
\
n
?
)
-
([
a
-
zA
-
Z_
.
-
]
+
)
\
n
-
\\
2.
exe
\
n
'),
'
\\
1
-
\\
2
\
n
'),
]+(sys.version_info < (2, 5) and [
]+(sys.version_info < (2, 5) and [
(re.compile('
.
*
No
module
named
runpy
.
*
', re.S), ''),
(re.compile('
.
*
No
module
named
runpy
.
*
', re.S), ''),
(re.compile('
.
*
usage
:
pdb
.
py
scriptfile
.
*
', re.S), ''),
(re.compile('
.
*
usage
:
pdb
.
py
scriptfile
.
*
', re.S), ''),
(re.compile('
.
*
Error
:
what
does
not
exist
.
*
', re.S), ''),
(re.compile('
.
*
Error
:
what
does
not
exist
.
*
', re.S), ''),
] or [])),
] or [])),
),
),
doctest.DocFileSuite(
doctest.DocFileSuite(
...
@@ -3033,11 +3042,13 @@ def test_suite():
...
@@ -3033,11 +3042,13 @@ def test_suite():
optionflags=doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS,
optionflags=doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS,
checker=renormalizing.RENormalizing([
checker=renormalizing.RENormalizing([
zc.buildout.testing.normalize_exception_type_for_python_2_and_3,
zc.buildout.testing.normalize_exception_type_for_python_2_and_3,
zc.buildout.testing.not_found,
(re.compile('
at
-
?
0
x
[
^>
]
+
'), '
<
MEM
ADDRESS
>
'),
(re.compile('
at
-
?
0
x
[
^>
]
+
'), '
<
MEM
ADDRESS
>
'),
(re.compile('
http
:
//
localhost
:[
0
-
9
]{
4
,
5
}
/
'),
(re.compile('
http
:
//
localhost
:[
0
-
9
]{
4
,
5
}
/
'),
'
http
:
//
localhost
/
'),
'
http
:
//
localhost
/
'),
(re.compile('
[
0
-
9
a
-
f
]{
32
}
'), '
<
MD5
CHECKSUM
>
'),
(re.compile('
[
0
-
9
a
-
f
]{
32
}
'), '
<
MD5
CHECKSUM
>
'),
zc.buildout.testing.normalize_path,
zc.buildout.testing.normalize_path,
zc.buildout.testing.ignore_not_upgrading,
]),
]),
),
),
...
@@ -3050,6 +3061,7 @@ def test_suite():
...
@@ -3050,6 +3061,7 @@ def test_suite():
zc.buildout.testing.normalize_script,
zc.buildout.testing.normalize_script,
zc.buildout.testing.normalize_egg_py,
zc.buildout.testing.normalize_egg_py,
zc.buildout.testing.normalize___pycache__,
zc.buildout.testing.normalize___pycache__,
zc.buildout.testing.not_found,
(re.compile(r'
^
(
\
w
+
\
.)
*
(
Missing
\
w
+
:
)
'), '
\
2
'),
(re.compile(r'
^
(
\
w
+
\
.)
*
(
Missing
\
w
+
:
)
'), '
\
2
'),
(re.compile("buildout: Running
\
S*se
t
up.py"),
(re.compile("buildout: Running
\
S*se
t
up.py"),
'
buildout
:
Running
setup
.
py
'),
'
buildout
:
Running
setup
.
py
'),
...
@@ -3086,6 +3098,7 @@ def test_suite():
...
@@ -3086,6 +3098,7 @@ def test_suite():
zc.buildout.testing.normalize_endings,
zc.buildout.testing.normalize_endings,
zc.buildout.testing.normalize_script,
zc.buildout.testing.normalize_script,
zc.buildout.testing.normalize_egg_py,
zc.buildout.testing.normalize_egg_py,
zc.buildout.testing.not_found,
(re.compile('__buildout_signature__ = recipes-
\
S+
'
),
(re.compile('__buildout_signature__ = recipes-
\
S+
'
),
'__buildout_signature__ = recipes-SSSSSSSSSSS'),
'__buildout_signature__ = recipes-SSSSSSSSSSS'),
(re.compile('[-d] distribute-
\
S+[.]egg
'
), 'distribute.egg'),
(re.compile('[-d] distribute-
\
S+[.]egg
'
), 'distribute.egg'),
...
@@ -3120,6 +3133,7 @@ def test_suite():
...
@@ -3120,6 +3133,7 @@ def test_suite():
zc.buildout.testing.normalize_path,
zc.buildout.testing.normalize_path,
zc.buildout.testing.normalize_endings,
zc.buildout.testing.normalize_endings,
zc.buildout.testing.normalize_script,
zc.buildout.testing.normalize_script,
zc.buildout.testing.not_found,
normalize_bang,
normalize_bang,
(re.compile('Downloading.*distribute.*egg
\
n
'), ''),
(re.compile('Downloading.*distribute.*egg
\
n
'), ''),
]),
]),
...
...
zc.recipe.egg_/src/zc/recipe/egg/tests.py
View file @
9340cc53
...
@@ -48,6 +48,7 @@ def test_suite():
...
@@ -48,6 +48,7 @@ def test_suite():
zc
.
buildout
.
testing
.
normalize_egg_py
,
zc
.
buildout
.
testing
.
normalize_egg_py
,
zc
.
buildout
.
tests
.
normalize_bang
,
zc
.
buildout
.
tests
.
normalize_bang
,
zc
.
buildout
.
tests
.
normalize_S
,
zc
.
buildout
.
tests
.
normalize_S
,
zc
.
buildout
.
testing
.
not_found
,
(
re
.
compile
(
'[d-] zc.buildout(-
\
S+)?[.]egg(-li
n
k)?'
),
(
re
.
compile
(
'[d-] zc.buildout(-
\
S+)?[.]egg(-li
n
k)?'
),
'zc.buildout.egg'
),
'zc.buildout.egg'
),
(
re
.
compile
(
'[d-] distribute-[^-]+-'
),
'distribute-X-'
),
(
re
.
compile
(
'[d-] distribute-[^-]+-'
),
'distribute-X-'
),
...
@@ -61,6 +62,7 @@ def test_suite():
...
@@ -61,6 +62,7 @@ def test_suite():
checker
=
renormalizing
.
RENormalizing
([
checker
=
renormalizing
.
RENormalizing
([
zc
.
buildout
.
testing
.
normalize_path
,
zc
.
buildout
.
testing
.
normalize_path
,
zc
.
buildout
.
testing
.
normalize_endings
,
zc
.
buildout
.
testing
.
normalize_endings
,
zc
.
buildout
.
testing
.
not_found
,
(
re
.
compile
(
'__buildout_signature__ = '
(
re
.
compile
(
'__buildout_signature__ = '
'sample-
\
S+
\
s+'
'sample-
\
S+
\
s+'
'zc.recipe.egg-
\
S+
\
s+'
'zc.recipe.egg-
\
S+
\
s+'
...
@@ -80,6 +82,7 @@ def test_suite():
...
@@ -80,6 +82,7 @@ def test_suite():
checker=renormalizing.RENormalizing([
checker=renormalizing.RENormalizing([
zc.buildout.testing.normalize_path,
zc.buildout.testing.normalize_path,
zc.buildout.testing.normalize_endings,
zc.buildout.testing.normalize_endings,
zc.buildout.testing.not_found,
(re.compile("(d ((ext)?demo(needed)?|other)"
(re.compile("(d ((ext)?demo(needed)?|other)"
"-
\
d[.]
\
d-py)
\
d[.]
\
d(-
\
S+)?[.]egg
"
),
"-
\
d[.]
\
d-py)
\
d[.]
\
d(-
\
S+)?[.]egg
"
),
'
\\
1
V
.
V
.
egg
'),
'
\\
1
V
.
V
.
egg
'),
...
...
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