]> git.decadent.org.uk Git - dak.git/blobdiff - daklib/filewriter.py
shutup
[dak.git] / daklib / filewriter.py
index f52ac76ac3f53e96f0d75a8ec29739ca9d3c9487..8e17efdfcbeac574997f1c5c9288d7a84aa8ac9b 100755 (executable)
@@ -35,7 +35,7 @@ class BaseFileWriter(object):
     '''
     Base class for compressed and uncompressed file writing.
     '''
     '''
     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
         '''
         The template argument is a string template like
         "dists/%(suite)s/%(component)s/Contents-%(architecture)s.gz" that
@@ -54,12 +54,18 @@ class BaseFileWriter(object):
         '''
         Returns a file object for writing.
         '''
         '''
         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):
         tempfilename = filename + '.new'
 
     # internal helper function
     def rename(self, filename):
         tempfilename = filename + '.new'
-        os.chmod(tempfilename, 0664)
+        os.chmod(tempfilename, 0o664)
         os.rename(tempfilename, filename)
 
     def close(self):
         os.rename(tempfilename, filename)
 
     def close(self):
@@ -68,19 +74,19 @@ class BaseFileWriter(object):
         '''
         self.file.close()
         if self.gzip:
         '''
         self.file.close()
         if self.gzip:
-            check_call('gzip --rsyncable <%s.new >%s.gz.new' % (self.path, self.path),
+            check_call('gzip -9cn --rsyncable <%s.new >%s.gz.new' % (self.path, self.path),
                 shell = True)
             self.rename('%s.gz' % self.path)
         if self.bzip2:
                 shell = True)
             self.rename('%s.gz' % self.path)
         if self.bzip2:
-            check_call('bzip2 <%s.new >%s.bz2.new' % (self.path, self.path), shell = True)
+            check_call('bzip2 -9 <%s.new >%s.bz2.new' % (self.path, self.path), shell = True)
             self.rename('%s.bz2' % self.path)
         if self.uncompressed:
             self.rename(self.path)
         else:
             self.rename('%s.bz2' % self.path)
         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.
         '''
         The value of the keywords suite, component, and architecture are
         strings. The value of component may be omitted if not applicable.
@@ -92,8 +98,72 @@ class BinaryContentsWriter(BaseFileWriter):
             'bzip2':        False
         }
         flags.update(keywords)
             '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)
         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)
+
+class TranslationFileWriter(BaseFileWriter):
+    def __init__(self, **keywords):
+        '''
+        The value of the keywords suite, component and language are strings.
+        Output files are bzip2 compressed only.
+        '''
+        flags = {
+            'uncompressed': False,
+            'gzip':         False,
+            'bzip2':        True,
+            'language':     'en',
+        }
+        flags.update(keywords)
+        template = "dists/%(suite)s/%(component)s/i18n/Translation-%(language)s"
+        super(TranslationFileWriter, self).__init__(template, **flags)