Refactor get_file_type function

This commit is contained in:
Fatih Aşıcı
2010-02-22 17:56:03 +00:00
parent 5116d858c4
commit abd60acd98
2 changed files with 21 additions and 8 deletions
+1
View File
@@ -3,6 +3,7 @@
for repository architecture as the current infrastructure for repository architecture as the current infrastructure
doesn't allow a unified repository for multiple doesn't allow a unified repository for multiple
architectures. architectures.
* pisi/operations/build.py: Refactor get_file_type function.
2010-02-12 Serdar Dalgıç <serdar@pardus.org.tr> 2010-02-12 Serdar Dalgıç <serdar@pardus.org.tr>
* pisi/operations/build.py: Use glob.glob0 and lstrip instead of * pisi/operations/build.py: Use glob.glob0 and lstrip instead of
+20 -8
View File
@@ -19,6 +19,7 @@ import stat
import pwd import pwd
import grp import grp
import locale import locale
import fnmatch
import gettext import gettext
__trans = gettext.translation('pisi', fallback=True) __trans = gettext.translation('pisi', fallback=True)
@@ -55,18 +56,29 @@ class ExcludedArchitectureException(Error):
pass pass
# Helper Functions # Helper Functions
def get_file_type(path, pinfo_list, install_dir): def get_file_type(path, pinfo_list):
"""Return the file type of a path according to the given PathInfo """Return the file type of a path according to the given PathInfo
list""" list"""
Match = lambda x: [match for match in glob.glob0(install_dir, x.lstrip("/")) if pisi.util.join_path(install_dir, path).find(match) > -1] path = "/%s" % path
info = None
glob_match = parent_match = None
def Sort(x): for pinfo in pinfo_list:
x.sort(reverse=True) if path == pinfo.path:
return x info = pinfo
break
elif fnmatch.fnmatch(path, pinfo.path):
glob_match = pinfo
elif fnmatch.fnmatch(path, "%s/*" % pinfo.path):
if parent_match is None or parent_match.path < pinfo.path:
parent_match = pinfo
else:
info = glob_match or parent_match
best_matched_path = Sort([pinfo.path for pinfo in pinfo_list if Match(pinfo.path)])[0]
info = [pinfo for pinfo in pinfo_list if best_matched_path == pinfo.path][0]
return info.fileType, info.permanent return info.fileType, info.permanent
def check_path_collision(package, pkgList): def check_path_collision(package, pkgList):
@@ -741,7 +753,7 @@ class Builder:
# don't include this file into the package. # don't include this file into the package.
continue continue
frpath = pisi.util.removepathprefix(install_dir, fpath) # relative path frpath = pisi.util.removepathprefix(install_dir, fpath) # relative path
ftype, permanent = get_file_type(frpath, package.files, install_dir) ftype, permanent = get_file_type(frpath, package.files)
fsize = long(pisi.util.dir_size(fpath)) fsize = long(pisi.util.dir_size(fpath))
if not os.path.islink(fpath): if not os.path.islink(fpath):
st = os.stat(fpath) st = os.stat(fpath)