code: def fill_archive(self, stream=None, kind='tgz', prefix=None,
                       subrepos=False):
          
          allowed_kinds = settings.ARCHIVE_SPECS.keys()
          if kind not in allowed_kinds:
              raise ImproperArchiveTypeError('Archive kind not supported use one'
                  'of %s', allowed_kinds)
  
          if prefix is None:
              prefix = '%s-%s' % (self.repository.name, self.short_id)
          elif prefix.startswith('/'):
              raise VCSError("Prefix cannot start with leading slash")
          elif prefix.strip() == '':
              raise VCSError("Prefix cannot be empty")
  
          if kind == 'zip':
              frmt = 'zip'
          else:
              frmt = 'tar'
          _git_path = settings.GIT_EXECUTABLE_PATH
          cmd = '%s archive --format=%s --prefix=%s/ %s' % (_git_path,
                                                  frmt, prefix, self.raw_id)
          if kind == 'tgz':
              cmd += ' | gzip -9'
          elif kind == 'tbz2':
              cmd += ' | bzip2 -9'
  
          if stream is None:
              raise VCSError('You need to pass in a valid stream for filling'
                             ' with archival data')
          popen = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True,
              cwd=self.repository.path)
  
          buffer_size = 1024 * 8
          chunk = popen.stdout.read(buffer_size)
          while chunk:
              stream.write(chunk)
              chunk = popen.stdout.read(buffer_size)
          # Make sure all descriptors would be read
          popen.communicate()
docs: Fills up given stream.
  
          :param stream: file like object.
          :param kind: one of following: ``zip``, ``tgz`` or ``tbz2``.
              Default: ``tgz``.
          :param prefix: name of root directory in archive.
              Default is repository name and changeset's raw_id joined with dash
              (``repo-tip.<KIND>``).
          :param subrepos: include subrepos in this archive.
  
          :raise ImproperArchiveTypeError: If given kind is wrong.
          :raise VcsError: If given stream is None