def add_path(path): # add the files under material path for fpath, fhash in util.get_file_hashes(path, collisions, install_dir): if ( ctx.get_option("create_static") and fpath.endswith(ctx.const.ar_file_suffix) and not package.name.endswith(ctx.const.static_name_suffix) and util.is_ar_file(fpath) ): # if this is an ar file, and this package is not a static package, # don't include this file into the package. continue frpath = util.removepathprefix(install_dir, fpath) # relative path ftype, permanent = get_file_type(frpath, package.files) fsize = long(util.dir_size(fpath)) if not os.path.islink(fpath): st = os.stat(fpath) else: st = os.lstat(fpath) fileinfo = pisi.files.FileInfo( path=frpath, type=ftype, permanent=permanent, size=fsize, hash=fhash, uid=str(st.st_uid), gid=str(st.st_gid), mode=oct(stat.S_IMODE(st.st_mode)), ) files.append(fileinfo) if stat.S_IMODE(st.st_mode) & stat.S_ISUID: ctx.ui.warning(_("/%s has suid bit set") % frpath)
def gen_files_xml(self, package): """Generates files.xml using the path definitions in specfile and the files produced by the build system.""" if package.debug_package: install_dir = self.pkg_debug_dir() else: install_dir = self.pkg_install_dir() # FIXME: We need to expand globs before trying to calculate hashes # Not on the fly like now. # we'll exclude collisions in get_file_hashes. Having a # collisions list is not wrong, we must just handle it :). collisions = check_path_collision(package, self.spec.packages) # FIXME: material collisions after expanding globs could be # reported as errors # Use a dict to avoid duplicate entries in files.xml. d = {} def add_path(path): # add the files under material path for fpath, fhash in util.get_file_hashes(path, collisions, install_dir): if ctx.get_option('create_static') \ and fpath.endswith(ctx.const.ar_file_suffix) \ and not package.name.endswith(ctx.const.static_name_suffix) \ and util.is_ar_file(fpath): # if this is an ar file, and this package is not a static package, # don't include this file into the package. continue frpath = util.removepathprefix(install_dir, fpath) # relative path ftype, permanent = get_file_type(frpath, package.files) fsize = long(util.dir_size(fpath)) if not os.path.islink(fpath): st = os.stat(fpath) else: st = os.lstat(fpath) d[frpath] = pisi.files.FileInfo(path=frpath, type=ftype, permanent=permanent, size=fsize, hash=fhash, uid=str(st.st_uid), gid=str(st.st_gid), mode=oct(stat.S_IMODE(st.st_mode))) if stat.S_IMODE(st.st_mode) & stat.S_ISUID: ctx.ui.warning(_("/%s has suid bit set") % frpath) for pinfo in package.files: wildcard_path = util.join_path(install_dir, pinfo.path) for path in glob.glob(wildcard_path): add_path(path) files = pisi.files.Files() for fileinfo in d.itervalues(): files.append(fileinfo) files_xml_path = util.join_path(self.pkg_dir(), ctx.const.files_xml) files.write(files_xml_path) self.files = files
def gen_files_xml(self, package): """Generates files.xml using the path definitions in specfile and the files produced by the build system.""" files = pisi.files.Files() if package.debug_package: install_dir = self.pkg_debug_dir() else: install_dir = self.pkg_install_dir() # FIXME: We need to expand globs before trying to calculate hashes # Not on the fly like now. # we'll exclude collisions in get_file_hashes. Having a # collisions list is not wrong, we must just handle it :). collisions = check_path_collision(package, self.spec.packages) # FIXME: material collisions after expanding globs could be # reported as errors d = {} def add_path(path): # add the files under material path for fpath, fhash in pisi.util.get_file_hashes( path, collisions, install_dir): if ctx.get_option('create_static') \ and fpath.endswith(ctx.const.ar_file_suffix) \ and not package.name.endswith(ctx.const.static_name_suffix) \ and pisi.util.is_ar_file(fpath): # if this is an ar file, and this package is not a static package, # don't include this file into the package. continue frpath = pisi.util.removepathprefix(install_dir, fpath) # relative path ftype, permanent = get_file_type(frpath, package.files, install_dir) fsize = pisi.util.dir_size(fpath) if not os.path.islink(fpath): st = os.stat(fpath) else: st = os.lstat(fpath) d[frpath] = pisi.files.FileInfo(path=frpath, type=ftype, permanent=permanent, size=fsize, hash=fhash, uid=str(st.st_uid), gid=str(st.st_gid), mode=oct( stat.S_IMODE(st.st_mode))) if stat.S_IMODE(st.st_mode) & stat.S_ISUID: ctx.ui.warning(_("/%s has suid bit set") % frpath) for pinfo in package.files: wildcard_path = pisi.util.join_path(install_dir, pinfo.path) for path in glob.glob(wildcard_path): add_path(path) for (p, fileinfo) in d.iteritems(): files.append(fileinfo) files_xml_path = pisi.util.join_path(self.pkg_dir(), ctx.const.files_xml) files.write(files_xml_path) self.files = files