mirror of
https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
synced 2025-02-13 23:38:20 +00:00
Make sure that containing directories exist before writing output files
We don't use os.makedirs(dir, exist_ok=True) as that is too strict: it fails if the directory already exists with different permissions (e. g. with 775). Thus introduce a helper function ensuredir().
This commit is contained in:
parent
f32a8e37da
commit
a2dcb26901
@ -208,6 +208,7 @@ from britney2.utils import (old_libraries_format, undo_changes,
|
||||
create_provides_map, read_release_file,
|
||||
read_sources_file, get_dependency_solvers,
|
||||
invalidate_excuses, compile_nuninst,
|
||||
ensuredir,
|
||||
)
|
||||
|
||||
__author__ = 'Fabio Tranchitella and the Debian Release Team'
|
||||
@ -1633,6 +1634,7 @@ class Britney(object):
|
||||
if not self.options.dry_run:
|
||||
self.log("> Writing Excuses to %s" % self.options.excuses_output, type="I")
|
||||
sorted_excuses = sorted(excuses.values(), key=lambda x: x.sortkey())
|
||||
ensuredir(os.path.dirname(self.options.excuses_output))
|
||||
write_excuses(sorted_excuses, self.options.excuses_output,
|
||||
output_format="legacy-html")
|
||||
if hasattr(self.options, 'excuses_yaml_output'):
|
||||
@ -2742,6 +2744,7 @@ class Britney(object):
|
||||
except AttributeError:
|
||||
return
|
||||
|
||||
ensuredir(os.path.dirname(self.options.upgrade_output))
|
||||
with open(self.options.upgrade_output, 'w', encoding='utf-8') as f:
|
||||
self.__output = f
|
||||
|
||||
|
@ -8,6 +8,7 @@ from urllib.parse import quote
|
||||
import apt_pkg
|
||||
|
||||
from britney2.hints import Hint, split_into_one_hint_per_package
|
||||
from britney2.utils import ensuredir
|
||||
|
||||
|
||||
@unique
|
||||
@ -385,6 +386,7 @@ class AgePolicy(BasePolicy):
|
||||
basename = 'Dates'
|
||||
old_file = None
|
||||
filename = os.path.join(directory, basename)
|
||||
ensuredir(directory)
|
||||
filename_tmp = os.path.join(directory, '%s_new' % basename)
|
||||
with open(filename_tmp, 'w', encoding='utf-8') as fd:
|
||||
for pkg in sorted(dates):
|
||||
|
@ -346,6 +346,16 @@ def make_migrationitem(package, sources):
|
||||
return MigrationItem("%s/%s" % (item.uvname, sources[item.suite][item.package].version))
|
||||
|
||||
|
||||
def ensuredir(dir):
|
||||
"""Create dir if it does not exist
|
||||
|
||||
os.makedirs(dir, exist_ok=True) is too strict as that will fail if the
|
||||
direcotry already exists with different permissions.
|
||||
"""
|
||||
if not os.path.isdir(dir):
|
||||
os.makedirs(dir)
|
||||
|
||||
|
||||
def write_excuses(excuselist, dest_file, output_format="yaml"):
|
||||
"""Write the excuses to dest_file
|
||||
|
||||
@ -354,6 +364,7 @@ def write_excuses(excuselist, dest_file, output_format="yaml"):
|
||||
or "legacy-html".
|
||||
"""
|
||||
if output_format == "yaml":
|
||||
ensuredir(os.path.dirname(dest_file))
|
||||
with open(dest_file, 'w', encoding='utf-8') as f:
|
||||
edatalist = [e.excusedata() for e in excuselist]
|
||||
excusesdata = {
|
||||
@ -362,6 +373,7 @@ def write_excuses(excuselist, dest_file, output_format="yaml"):
|
||||
}
|
||||
f.write(yaml.dump(excusesdata, default_flow_style=False, allow_unicode=True))
|
||||
elif output_format == "legacy-html":
|
||||
ensuredir(os.path.dirname(dest_file))
|
||||
with open(dest_file, 'w', encoding='utf-8') as f:
|
||||
f.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n")
|
||||
f.write("<html><head><title>excuses...</title>")
|
||||
@ -425,6 +437,7 @@ def write_controlfiles(sources, packages, suite, basedir):
|
||||
(PROVIDES, 'Provides'), (CONFLICTS, 'Conflicts'),
|
||||
(ESSENTIAL, 'Essential'))
|
||||
|
||||
ensuredir(basedir)
|
||||
for arch in packages_s:
|
||||
filename = os.path.join(basedir, 'Packages_%s' % arch)
|
||||
binaries = packages_s[arch][0]
|
||||
|
Loading…
x
Reference in New Issue
Block a user