X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Ffilewriter.py;h=7db42085298828f6bb2da3168f3ff135552c3a6c;hb=6f863f95e3d1bae18aa5579e958fd8a121b06545;hp=3b816ee9b5f53261151f7090d9f110774294274e;hpb=d352c619dd4e8bd36e8459e1916310af686d3d8f;p=dak.git diff --git a/daklib/filewriter.py b/daklib/filewriter.py old mode 100755 new mode 100644 index 3b816ee9..7db42085 --- a/daklib/filewriter.py +++ b/daklib/filewriter.py @@ -27,7 +27,7 @@ Helper code for file writing with optional compression. from daklib.config import Config -from subprocess import check_call +from daklib.daksubprocess import check_call import os, os.path @@ -48,9 +48,7 @@ class BaseFileWriter(object): self.gzip = 'gzip' in compression self.bzip2 = 'bzip2' in compression self.xz = 'xz' in compression - root_dir = Config()['Dir::Root'] - relative_dir = template % keywords - self.path = os.path.join(root_dir, relative_dir) + self.path = template % keywords def open(self): ''' @@ -67,24 +65,28 @@ class BaseFileWriter(object): # internal helper function def rename(self, filename): tempfilename = filename + '.new' - os.chmod(tempfilename, 0o664) + os.chmod(tempfilename, 0o644) os.rename(tempfilename, filename) + # internal helper function to compress output + def compress(self, cmd, suffix, path): + in_filename = "{0}.new".format(path) + out_filename = "{0}.{1}.new".format(path, suffix) + with open(in_filename, 'r') as in_fh, open(out_filename, 'w') as out_fh: + check_call(cmd, stdin=in_fh, stdout=out_fh) + self.rename("{0}.{1}".format(path, suffix)) + def close(self): ''' Closes the file object and does the compression and rename work. ''' self.file.close() if self.gzip: - check_call('gzip -9cn --rsyncable <%s.new >%s.gz.new' % (self.path, self.path), - shell = True) - self.rename('%s.gz' % self.path) + self.compress(['gzip', '-9cn', '--rsyncable'], 'gz', self.path) if self.bzip2: - check_call('bzip2 -9 <%s.new >%s.bz2.new' % (self.path, self.path), shell = True) - self.rename('%s.bz2' % self.path) + self.compress(['bzip2', '-9'], 'bz2', self.path) if self.xz: - check_call('xz -c <{0}.new >{0}.xz.new'.format(self.path), shell=True) - self.rename('{0}.xz'.format(self.path)) + self.compress(['xz', '-c'], 'xz', self.path) if self.uncompressed: self.rename(self.path) else: @@ -102,9 +104,9 @@ class BinaryContentsFileWriter(BaseFileWriter): } flags.update(keywords) if flags['debtype'] == 'deb': - template = "dists/%(suite)s/%(component)s/Contents-%(architecture)s" + template = "%(archive)s/dists/%(suite)s/%(component)s/Contents-%(architecture)s" else: # udeb - template = "dists/%(suite)s/%(component)s/Contents-udeb-%(architecture)s" + template = "%(archive)s/dists/%(suite)s/%(component)s/Contents-udeb-%(architecture)s" BaseFileWriter.__init__(self, template, **flags) class SourceContentsFileWriter(BaseFileWriter): @@ -117,7 +119,7 @@ class SourceContentsFileWriter(BaseFileWriter): 'compression': ['gzip'], } flags.update(keywords) - template = "dists/%(suite)s/%(component)s/Contents-source" + template = "%(archive)s/dists/%(suite)s/%(component)s/Contents-source" BaseFileWriter.__init__(self, template, **flags) class PackagesFileWriter(BaseFileWriter): @@ -127,13 +129,13 @@ class PackagesFileWriter(BaseFileWriter): are strings. Output files are gzip compressed only. ''' flags = { - 'compression': ['gzip', 'bzip2'], + 'compression': ['gzip', 'xz'], } flags.update(keywords) if flags['debtype'] == 'deb': - template = "dists/%(suite)s/%(component)s/binary-%(architecture)s/Packages" + template = "%(archive)s/dists/%(suite)s/%(component)s/binary-%(architecture)s/Packages" else: # udeb - template = "dists/%(suite)s/%(component)s/debian-installer/binary-%(architecture)s/Packages" + template = "%(archive)s/dists/%(suite)s/%(component)s/debian-installer/binary-%(architecture)s/Packages" BaseFileWriter.__init__(self, template, **flags) class SourcesFileWriter(BaseFileWriter): @@ -143,10 +145,10 @@ class SourcesFileWriter(BaseFileWriter): files are gzip compressed only. ''' flags = { - 'compression': ['gzip', 'bzip2'], + 'compression': ['gzip', 'xz'], } flags.update(keywords) - template = "dists/%(suite)s/%(component)s/source/Sources" + template = "%(archive)s/dists/%(suite)s/%(component)s/source/Sources" BaseFileWriter.__init__(self, template, **flags) class TranslationFileWriter(BaseFileWriter): @@ -160,5 +162,5 @@ class TranslationFileWriter(BaseFileWriter): 'language': 'en', } flags.update(keywords) - template = "dists/%(suite)s/%(component)s/i18n/Translation-%(language)s" + template = "%(archive)s/dists/%(suite)s/%(component)s/i18n/Translation-%(language)s" super(TranslationFileWriter, self).__init__(template, **flags)