From: Artem Bityutskiy Date: Tue, 28 Jan 2014 11:05:09 +0000 (+0200) Subject: TransRead: remove code duplication X-Git-Tag: v3.2~24 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8074b69098fef2c04f2aaa727c474fdf9ea19a03;p=tools%2Fbmap-tools.git TransRead: remove code duplication We had some amount of duplicated code related to opening a tar file - introduce a '_open_tarfile()' helper function for this instead. On top of this, stop using 'tarfile' modules for opening 'tar.gz' and 'tar.bz2' files since for some reasons this is a lot slower than using the '_CompressedFile' module, like we do for 'tar.xz' files. Change-Id: I1c35cff9056c555df7e7391da0b0213a016a9e45 Signed-off-by: Artem Bityutskiy --- diff --git a/bmaptools/TransRead.py b/bmaptools/TransRead.py index 519394e..c620e50 100644 --- a/bmaptools/TransRead.py +++ b/bmaptools/TransRead.py @@ -278,6 +278,22 @@ class TransRead(object): if _file_obj: _file_obj.close() + def _open_tarfile(self): + """ + This is a helper function for '_open_compressed_file' which is called + when the file is a tar archive. + """ + + import tarfile + + f_obj = tarfile.open(fileobj=self._f_objs[-1], mode='r|*') + self._f_objs.append(f_obj) + + member = self._f_objs[-1].next() + self.size = member.size + f_obj = self._f_objs[-1].extractfile(member) + self._f_objs.append(f_obj) + def _open_compressed_file(self): """ Detect file compression type and open it with the corresponding @@ -286,24 +302,8 @@ class TransRead(object): """ try: - if self.name.endswith('.tar.gz') \ - or self.name.endswith('.tar.bz2') \ - or self.name.endswith('.tgz'): - import tarfile - - if self.name.endswith('.tar.bz2'): - self.compression_type = 'bzip2' - else: - self.compression_type = 'gzip' - - f_obj = tarfile.open(fileobj=self._f_objs[-1], mode='r|*') - self._f_objs.append(f_obj) - - member = self._f_objs[-1].next() - self.size = member.size - f_obj = self._f_objs[-1].extractfile(member) - self._f_objs.append(f_obj) - elif self.name.endswith('.gz') or self.name.endswith('.gzip'): + if self.name.endswith('.gz') or self.name.endswith('.gzip') \ + or self.name.endswith('.tgz'): import zlib self.compression_type = 'gzip' @@ -311,6 +311,9 @@ class TransRead(object): f_obj = _CompressedFile(self._f_objs[-1], decompressor.decompress) self._f_objs.append(f_obj) + + if self.name.endswith('.tar.gz') or self.name.endswith('.tgz'): + self._open_tarfile() elif self.name.endswith('.bz2'): import bz2 @@ -318,6 +321,9 @@ class TransRead(object): f_obj = _CompressedFile(self._f_objs[-1], bz2.BZ2Decompressor().decompress, 128) self._f_objs.append(f_obj) + + if self.name.endswith('.tar.bz2'): + self._open_tarfile() elif self.name.endswith('.xz'): try: import lzma @@ -334,15 +340,7 @@ class TransRead(object): self._f_objs.append(f_obj) if self.name.endswith('.tar.xz'): - import tarfile - - f_obj = tarfile.open(fileobj=self._f_objs[-1], mode='r|*') - self._f_objs.append(f_obj) - - member = self._f_objs[-1].next() - self.size = member.size - f_obj = self._f_objs[-1].extractfile(member) - self._f_objs.append(f_obj) + self._open_tarfile() else: if not self.is_url: self.size = os.fstat(self._f_objs[-1].fileno()).st_size