From a1e9643f2e5dabdde3667825b48bbecdba88b529 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fatih=20A=C5=9F=C4=B1c=C4=B1?= Date: Tue, 15 Jun 2010 19:06:38 +0000 Subject: [PATCH] archive: Guess archive type from file extension This makes "type" attribute of "Archive" tag optional. --- pisi/archive.py | 23 +++++++++++++++++++++++ pisi/specfile.py | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/pisi/archive.py b/pisi/archive.py index 9e94e056..ce64f9c7 100644 --- a/pisi/archive.py +++ b/pisi/archive.py @@ -580,6 +580,9 @@ class Archive: targz, tarbz2, tarlzma, tarxz, tarZ, tar, zip, gzip, bzip2, lzma, xz, binary""" + if not arch_type: + arch_type = self._guess_archive_type(file_path) + handlers = {'targz': ArchiveTar, 'tarbz2': ArchiveTar, 'tarlzma': ArchiveTar, @@ -601,6 +604,26 @@ class Archive: self.archive = handler(file_path, arch_type) + def _guess_archive_type(self, file_path): + types = (("targz", (".tar.gz", ".tgz")), + ("tarbz2", (".tar.bz2", ".tar.bz", ".tbz2", ".tbz")), + ("tarlzma", (".tar.lzma", ".tlz")), + ("tarxz", (".tar.xz", ".txz")), + ("tarZ", (".tar.Z",)), + ("tar", (".tar",)), + ("zip", (".zip", ".ZIP")), + ("gz", (".gz",)), + ("bz2", (".bz2", ".bz")), + ("lzma", (".lzma",)), + ("xz", (".xz",)), + ("binary", (".bin", ".run", ".sh"))) + + for _type, extensions in types: + if file_path.endswith(extensions): + return _type + + return "binary" + def unpack(self, target_dir, clean_dir=False): self.archive.unpack(target_dir, clean_dir) diff --git a/pisi/specfile.py b/pisi/specfile.py index 3bd90dbb..4b445454 100644 --- a/pisi/specfile.py +++ b/pisi/specfile.py @@ -153,7 +153,7 @@ class ComarProvide: class Archive: s_uri = [ autoxml.String, autoxml.mandatory ] - a_type = [ autoxml.String, autoxml.mandatory ] + a_type = [ autoxml.String, autoxml.optional ] a_sha1sum =[ autoxml.String, autoxml.mandatory ] a_target =[ autoxml.String, autoxml.optional ]