1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-11-12 18:20:11 +01:00

Only do the magic import/except dance once

No need to do it for every file, once per app is enough
This commit is contained in:
Daniel Martí 2015-08-18 23:46:35 -07:00
parent 41fd1e86af
commit 46b1f09de3

View File

@ -1440,7 +1440,7 @@ def getpaths(build_dir, build, field):
return paths
def get_mime_type(path):
def init_mime_type():
'''
There are two incompatible versions of the 'magic' module, one
that comes as part of libmagic, which is what Debian includes as
@ -1452,25 +1452,49 @@ def get_mime_type(path):
libmagic. Hence this function with the following hacks:
'''
init_path = ''
method = ''
ms = None
def mime_from_file(path):
try:
return magic.from_file(path, mime=True)
except UnicodeError:
return None
def mime_file(path):
try:
return ms.file(path)
except UnicodeError:
return None
def mime_guess_type(path):
return mimetypes.guess_type(path, strict=False)
try:
import magic
try:
ms = magic.open(magic.MIME_TYPE)
ms.load()
result = magic.from_file(path, mime=True)
magic.from_file(init_path, mime=True)
method = 'from_file'
except AttributeError:
result = ms.file(path)
except UnicodeError:
logging.warn('Found malformed magic number at %s' % path)
result = None
ms.file(init_path)
method = 'file'
except ImportError:
import mimetypes
mimetypes.init()
result = mimetypes.guess_type(path, strict=False)
if ms is not None:
ms.close()
return result
method = 'guess_type'
logging.info("Using magic method " + method)
if method == 'from_file':
return mime_from_file
if method == 'file':
return mime_file
if method == 'guess_type':
return mime_guess_type
logging.critical("unknown magic method!")
# Scan the source code in the given directory (and all subdirectories)
@ -1538,6 +1562,8 @@ def scan_source(build_dir, root_dir, thisbuild):
logging.error('Found %s at %s' % (what, fd))
return 1
get_mime_type = init_mime_type()
# Iterate through all files in the source code
for r, d, f in os.walk(build_dir, topdown=True):