diff --git a/installsystems/image.py b/installsystems/image.py index 3bf16ea4a231ddfed30ad3f285121bee60aa2494..cd41d6fe83c13ea3457ec5653a2e397aff474d48 100644 --- a/installsystems/image.py +++ b/installsystems/image.py @@ -162,12 +162,9 @@ class SourceImage(Image): arrow("Add format") tarball.add_str("format", self.format, tarfile.REGTYPE, 0444) # add parser scripts - arrow("Add parser scripts") - tarball.add(self.parser_path, arcname="parser", - recursive=True, filter=self._tar_scripts_filter) + self._add_scripts(tarball, self.parser_path) # add setup scripts - tarball.add(self.setup_path, arcname="setup", - recursive=True, filter=self._tar_scripts_filter) + self._add_scripts(tarball, self.setup_path) # closing tarball file tarball.close() arrowlevel(-1) @@ -245,16 +242,35 @@ class SourceImage(Image): fsource.close() fdest.close() - def _tar_scripts_filter(self, tinfo): + def _add_scripts(self, tarball, directory): ''' - Filter files which can be included in scripts tarball + Add scripts inside a directory into a tarball ''' - if not re.match("(parser|setup)(/\d+-.*\.py)?$", tinfo.name): - return None - tinfo.mode = 0755 - tinfo.uid = tinfo.gid = 0 - tinfo.uname = tinfo.gname = "root" - return tinfo + basedirectory = os.path.basename(directory) + arrow("Add %s scripts" % basedirectory) + arrowlevel(1) + # adding base directory + ti = tarball.gettarinfo(directory, arcname=basedirectory) + ti.mode = 0755 + ti.uid = ti.gid = 0 + ti.uname = ti.gname = "root" + tarball.addfile(ti) + # adding each file + for fi in os.listdir(directory): + # check name + if not re.match("\d+-.*\.py$", fi): + debug("name %s skipped: invalid name" % fi) + continue + # adding file + ti = tarball.gettarinfo(os.path.join(directory, fi), + arcname=os.path.join(basedirectory, + os.path.basename(fi))) + ti.mode = 0755 + ti.uid = ti.gid = 0 + ti.uname = ti.gname = "root" + tarball.addfile(ti) + arrow("%s added" % fi) + arrowlevel(-1) def generate_json_description(self, payloads): '''