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
8
Merge Requests
8
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
slapos.buildout
Commits
54bbe6bf
Commit
54bbe6bf
authored
Apr 10, 2015
by
Jérome Perrin
1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Save installed database in an atomic way
This reduces the risk of leaving a corrupted .installed.cfg
parent
5058b42c
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
26 additions
and
5 deletions
+26
-5
src/zc/buildout/buildout.py
src/zc/buildout/buildout.py
+26
-5
No files found.
src/zc/buildout/buildout.py
View file @
54bbe6bf
...
...
@@ -839,11 +839,16 @@ class Buildout(UserDict.DictMixin):
def
_update_installed
(
self
,
**
buildout_options
):
installed
=
self
[
'buildout'
][
'installed'
]
f
=
open
(
installed
,
'a'
)
f
.
write
(
'
\
n
[buildout]
\
n
'
)
# read old installed database
with
open
(
installed
,
'r'
)
as
f
:
installed_data
=
f
.
read
()
installed_data
=
'%s
\
n
[buildout]
\
n
'
%
installed_data
f
=
StringIO
()
f
.
write
(
installed_data
)
for
option
,
value
in
buildout_options
.
items
():
_save_option
(
option
,
value
,
f
)
f
.
close
(
)
self
.
_save_installed_database
(
f
.
getvalue
()
)
def
_uninstall_part
(
self
,
part
,
installed_part_options
):
# uninstall part
...
...
@@ -1007,17 +1012,33 @@ class Buildout(UserDict.DictMixin):
for
d
in
installed
]
return
' '
.
join
(
installed
)
def
_save_installed_database
(
self
,
text
):
# Saved installed database in an atomic fashion
installed
=
self
[
'buildout'
][
'installed'
]
temp_installed
=
'%s.tmp'
%
installed
try
:
with
open
(
temp_installed
,
'w'
)
as
f
:
f
.
write
(
text
)
f
.
flush
()
os
.
fsync
(
f
.
fileno
())
os
.
rename
(
temp_installed
,
installed
)
finally
:
try
:
os
.
remove
(
temp_installed
)
except
OSError
:
pass
def
_save_installed_options
(
self
,
installed_options
):
installed
=
self
[
'buildout'
][
'installed'
]
if
not
installed
:
return
f
=
open
(
installed
,
'w'
)
f
=
StringIO
(
)
_save_options
(
'buildout'
,
installed_options
[
'buildout'
],
f
)
for
part
in
installed_options
[
'buildout'
][
'parts'
].
split
():
print
>>
f
_save_options
(
part
,
installed_options
[
part
],
f
)
f
.
close
()
self
.
_save_installed_database
(
f
.
getvalue
())
def
_error
(
self
,
message
,
*
args
):
raise
zc
.
buildout
.
UserError
(
message
%
args
)
...
...
Julien Muchembled
@jm
mentioned in commit
837c540d
·
Jul 09, 2015
mentioned in commit
837c540d
mentioned in commit 837c540d26798795c8d9012908500cb68facc48e
Toggle commit list
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