X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Ffilewriter.py;h=8907fa6d96fa39f7c8e2d7163f3c20e4f361bd2e;hb=e8ef4a21ceff20319cde5002cb562ae05d7622c9;hp=f52ac76ac3f53e96f0d75a8ec29739ca9d3c9487;hpb=be1cb05f94229e2ea8e1dbc4322709117ae41fc5;p=dak.git diff --git a/daklib/filewriter.py b/daklib/filewriter.py index f52ac76a..8907fa6d 100755 --- a/daklib/filewriter.py +++ b/daklib/filewriter.py @@ -35,7 +35,7 @@ class BaseFileWriter(object): ''' Base class for compressed and uncompressed file writing. ''' - def __init__(template, **keywords): + def __init__(self, template, **keywords): ''' The template argument is a string template like "dists/%(suite)s/%(component)s/Contents-%(architecture)s.gz" that @@ -54,7 +54,13 @@ class BaseFileWriter(object): ''' Returns a file object for writing. ''' - self.file = open(self.path + '.new') + # create missing directories + try: + os.makedirs(os.path.dirname(self.path)) + except: + pass + self.file = open(self.path + '.new', 'w') + return self.file # internal helper function def rename(self, filename): @@ -77,10 +83,10 @@ class BaseFileWriter(object): if self.uncompressed: self.rename(self.path) else: - os.unlink(self.path) + os.unlink(self.path + '.new') -class BinaryContentsWriter(BaseFileWriter): - def __init__(**keywords): +class BinaryContentsFileWriter(BaseFileWriter): + def __init__(self, **keywords): ''' The value of the keywords suite, component, and architecture are strings. The value of component may be omitted if not applicable. @@ -92,8 +98,56 @@ class BinaryContentsWriter(BaseFileWriter): 'bzip2': False } flags.update(keywords) - if 'component' in flags: - template "dists/%(suite)s/%(component)s/Contents-%(architecture)s.gz" % values - else: - template = "dists/%(suite)s/Contents-%(architecture)s.gz" % values + if flags['debtype'] == 'deb': + template = "dists/%(suite)s/%(component)s/Contents-%(architecture)s" + else: # udeb + template = "dists/%(suite)s/%(component)s/Contents-udeb-%(architecture)s" + BaseFileWriter.__init__(self, template, **flags) + +class SourceContentsFileWriter(BaseFileWriter): + def __init__(self, **keywords): + ''' + The value of the keywords suite and component are strings. + Output files are gzip compressed only. + ''' + flags = { + 'uncompressed': False, + 'gzip': True, + 'bzip2': False + } + flags.update(keywords) + template = "dists/%(suite)s/%(component)s/Contents-source" + BaseFileWriter.__init__(self, template, **flags) + +class PackagesFileWriter(BaseFileWriter): + def __init__(self, **keywords): + ''' + The value of the keywords suite, component, debtype and architecture + are strings. Output files are gzip compressed only. + ''' + flags = { + 'uncompressed': False, + 'gzip': True, + 'bzip2': True + } + flags.update(keywords) + if flags['debtype'] == 'deb': + template = "dists/%(suite)s/%(component)s/binary-%(architecture)s/Packages" + else: # udeb + template = "dists/%(suite)s/%(component)s/debian-installer/binary-%(architecture)s/Packages" + BaseFileWriter.__init__(self, template, **flags) + +class SourcesFileWriter(BaseFileWriter): + def __init__(self, **keywords): + ''' + The value of the keywords suite and component are strings. Output + files are gzip compressed only. + ''' + flags = { + 'uncompressed': False, + 'gzip': True, + 'bzip2': True + } + flags.update(keywords) + template = "dists/%(suite)s/%(component)s/source/Sources" BaseFileWriter.__init__(self, template, **flags)