Пример #1
0
    def gen_read_files(self, f):
        self.p(cfg.header, f, "set -e", "set -eo pipefail")
        self.p(cfg.clear_lst, f)
        for hdd in self.hdds:
            if self.ag.productpath.startswith("http"):
                self.p(cfg.read_files_curl, f, "ISOMASK", hdd)
            else:
                awkpartfrom = """| awk '{ $1=$2=$3=$4=""; print substr($0,5); }' """
                awkpartto = awkpartfrom
                if not hdd.startswith(".*"):
                    awkpartto = ""

                if " " in self.archs:
                    self.p(
                        cfg.read_files_hdd,
                        f,
                        "FOLDER",
                        self.iso_folder.get(hdd, ""),
                        "ISOMASK",
                        hdd,
                        "| head -n 1",
                        "",
                        awkpartfrom,
                        awkpartto,
                    )
                else:
                    self.p(
                        cfg.read_files_hdd,
                        f,
                        "FOLDER",
                        self.iso_folder.get(hdd, self.hdd_folder.get(hdd, "")),
                        "ISOMASK",
                        hdd,
                        awkpartfrom,
                        awkpartto,
                    )
        if not self.isos and not self.hdds:
            for asset in self.assets:
                self.p(cfg.read_files_hdd, f, "FOLDER",
                       self.asset_folders.get(asset, ""), "ISOMASK", asset)
        if self.iso_5:
            self.p(cfg.read_files_iso, f, "FOLDER",
                   self.iso_folder.get(self.iso_5, ""), "SRCISO", self.iso_5)
        elif self.isos:
            # if isos don't belong to custom folder - just read them all with single command
            if not self.iso_folder:
                # self.p(cfg.read_files_isos, f, "FOLDER", self.folder)
                self.p(cfg.read_files_isos, f)
            else:
                for iso in self.isos:
                    if "*" in iso:
                        self.p(
                            cfg.read_files_iso,
                            f,
                            "FOLDER",
                            self.iso_folder.get(iso, ""),
                            "SRCISO",
                            "",
                            "Media1?.iso$",
                            iso,
                        )
                    else:
                        self.p(cfg.read_files_iso, f, "FOLDER",
                               self.iso_folder.get(iso, ""), "SRCISO", iso)

        if self.repolink:
            self.p(cfg.read_files_repo_link, f)
        if self.repolink and self.build_id_from_iso:
            self.p(cfg.read_files_repo_link2, f)
        if self.repolink and not self.isos and not self.iso_5 and not self.hdds and not self.assets:
            self.p(cfg.read_files_repo_link3, f)
        if self.repos:
            self.p(cfg.read_files_repo, f)
            if self.build_id_from_iso:
                self.p(
                    cfg.read_files_repo,
                    f,
                    "PRODUCTREPOPATH/",
                    "PRODUCTREPOPATH/../iso/",
                    "files_repo.lst",
                    "files_iso_buildid.lst",
                    "Media1(.license)?$",
                    "Media1?.iso$",
                )
            if any(
                    repo.attrib.get(cfg.media2_name(), "")
                    for repo in self.repos):
                self.p(
                    cfg.read_files_repo,
                    f,
                    "Media1",
                    "Media2",
                    "REPOORS",
                    "|".join([
                        m.attrib["name"] if "name" in m.attrib else m.tag
                        for m in filter(
                            lambda x: x.attrib.get(cfg.media2_name(), ""),
                            self.repos)
                    ]),
                )
            if any(
                    repo.attrib.get(cfg.media3_name(), "")
                    for repo in self.repos):
                self.p(
                    cfg.read_files_repo,
                    f,
                    "Media1",
                    "Media3",
                    "REPOORS",
                    "|".join([
                        m.attrib["name"] if "name" in m.attrib else m.tag
                        for m in filter(
                            lambda x: x.attrib.get(cfg.media3_name(), ""),
                            self.repos)
                    ]),
                )
        for repodir in self.repodirs:
            gen = repodir.attrib.get("gen", "")
            if gen:
                self.gen_repo(repodir, gen, f)
            else:
                archs = repodir.attrib.get("archs", "ARCHORS")
                txt = "PRODUCTREPOPATH"
                if self.version_from_media:
                    txt = "PRODUCTREPOPATH/"
                self.p(
                    cfg.read_files_repo,
                    f,
                    txt,
                    self.ag.productpath + "/" + self.folder + "/*" +
                    repodir.attrib["folder"] + "*",
                    "REPOORS",
                    "",
                    "files_repo.lst",
                    "files_repo_{}.lst".format(
                        os.path.basename(
                            repodir.attrib["folder"]).lstrip("*")),
                    "ARCHORS",
                    archs.replace(" ", "|").replace("armv7hl",
                                                    "armv7hl|armv7l"),
                )

        # let's sync media.1/media to be able verify build_id
        if "ToTest" in self.ag.envdir or self.version_from_media:
            archs = self.archs
            if not archs:
                archs = self.ag.archs
            wild = "*"
            done = ""
            if archs:
                wild = "*" + archs + "*"
            if " " in archs and self.repodirs:
                self.p("for arch in {}; do".format(archs), f)
                wild = "*$arch*"
                done = "done"

            if "Leap" in self.ag.envdir or "Jump" in self.ag.envdir or self.version_from_media:
                for repodir in self.repodirs:
                    self.p(
                        cfg.read_files_repo_media,
                        f,
                        "PRODUCTREPOPATH",
                        self.ag.productpath + "/" + self.folder + "/*" +
                        repodir.attrib["folder"] + wild,
                        "Media1.lst",
                        "Media1_{}.lst".format(
                            os.path.basename(repodir.attrib["folder"]).lstrip(
                                "*") + repodir.get("archs", "")),
                    )
            elif "Factory" in self.ag.envdir:
                for repodir in self.repodirs:
                    if not repodir.attrib.get("gen", ""):
                        self.p(
                            cfg.read_files_repo_media +
                            cfg.read_files_repo_media_convert,
                            f,
                            "PRODUCTREPOPATH",
                            self.ag.productpath + "/" + self.folder + "/*" +
                            repodir.attrib["folder"] + wild,
                            "Media1.lst",
                            "",
                            "destlst",
                            "Media1_{}.lst".format(
                                os.path.basename(
                                    repodir.attrib["folder"]).lstrip("*")),
                            "media.1/media",
                            "media.1/products",
                        )

            if done:
                self.p(done, f)

        if self.assets and self.assets_flavor:
            for k, v in self.asset_folders.items():
                self.p(
                    """rsync -4 --list-only $rsync_pwd_option PRODUCTPATH/{}/*{} | awk '{{ $1=$2=$3=$4=""; print substr($0,5); }}' >> __envsub/files_asset.lst"""
                    .format(v, k),
                    f,
                )
Пример #2
0
    def gen_read_files(self,f):
        self.p(cfg.header, f, "set -e", "set -eo pipefail")
        self.p(cfg.clear_lst, f)
        for hdd in self.hdds:
            if self.ag.productpath.startswith('http'):
                self.p(cfg.read_files_curl, f, "ISOMASK", hdd)
            else:
                awkpartfrom = '''| awk '{ $1=$2=$3=$4=""; print substr($0,5); }' '''
                awkpartto = awkpartfrom
                if not hdd.startswith('.*'):
                    awkpartto = ''

                if ' ' in self.archs:
                    self.p(cfg.read_files_hdd, f, "FOLDER", self.iso_folder.get(hdd,""), "ISOMASK", hdd, '| head -n 1', '', awkpartfrom, awkpartto)
                else:
                    self.p(cfg.read_files_hdd, f, "FOLDER", self.iso_folder.get(hdd,self.hdd_folder.get(hdd,"")), "ISOMASK", hdd, awkpartfrom, awkpartto)
        if not self.isos:
            for asset in self.assets:
                self.p(cfg.read_files_hdd, f, "FOLDER", "", "ISOMASK", asset)
        if self.iso_5:
            self.p(cfg.read_files_iso, f, "FOLDER", self.iso_folder.get(self.iso_5,""), "SRCISO", self.iso_5)
        elif self.isos:
            # if isos don't belong to custom folder - just read them all with single command
            if not self.iso_folder:
                # self.p(cfg.read_files_isos, f, "FOLDER", self.folder)
                self.p(cfg.read_files_isos, f)
            else:
                for iso in self.isos:
                    self.p(cfg.read_files_iso, f, "FOLDER", self.iso_folder.get(iso,""), "SRCISO", iso)

        if self.repolink:
            self.p(cfg.read_files_repo_link, f)
        if self.repolink and self.build_id_from_iso:
            self.p(cfg.read_files_repo_link2, f)
        if self.repolink and not self.isos and not self.iso_5 and not self.hdds and not self.assets:
            self.p(cfg.read_files_repo_link3, f)
        if self.repos:
            self.p(cfg.read_files_repo, f)
            if self.build_id_from_iso:
                self.p(cfg.read_files_repo, f, "PRODUCTREPOPATH/", "PRODUCTREPOPATH/../iso/", "files_repo.lst", "files_iso_buildid.lst","Media1(.license)?$","Media1?.iso$")
            if any(repo.attrib.get(cfg.media2_name(),"") for repo in self.repos):
                self.p(cfg.read_files_repo, f, "Media1", "Media2", "REPOORS", '|'.join([m.attrib["name"] if "name" in m.attrib else m.tag for m in filter(lambda x: x.attrib.get(cfg.media2_name(),""), self.repos)]))
            if any(repo.attrib.get(cfg.media3_name(),"") for repo in self.repos):
                self.p(cfg.read_files_repo, f, "Media1", "Media3", "REPOORS", '|'.join([m.attrib["name"] if "name" in m.attrib else m.tag for m in filter(lambda x: x.attrib.get(cfg.media3_name(),""), self.repos)]))
        for repodir in self.repodirs:
            gen = repodir.attrib.get("gen", "")
            if gen:
                self.gen_repo(repodir, gen, f)
            else:
                archs = repodir.attrib.get("archs", "ARCHORS")
                self.p(cfg.read_files_repo, f, "PRODUCTREPOPATH", self.ag.productpath + "/" + self.folder + "/*" + repodir.attrib["folder"] + "*", "REPOORS", "", "files_repo.lst", "files_repo_{}.lst".format(os.path.basename(repodir.attrib["folder"]).lstrip('*')), "ARCHORS", archs.replace(' ','|'))

        # let's sync media.1/media to be able verify build_id
        if 'ToTest' in self.ag.envdir:
            archs = self.archs
            if not archs:
                archs = self.ag.archs
            wild = '*'
            done = ''
            if archs: 
                wild = '*'+archs+'*'
            if ' ' in archs and self.repodirs:
                self.p("for arch in {}; do".format(archs), f)
                wild = '*$arch*'
                done = 'done'

            if 'Leap' in self.ag.envdir:
                for repodir in self.repodirs:
                    self.p(cfg.read_files_repo_media, f, "PRODUCTREPOPATH", self.ag.productpath + "/" + self.folder + "/*" + repodir.attrib["folder"] + wild, 'Media1.lst', 'Media1_{}.lst'.format(os.path.basename(repodir.attrib["folder"]).lstrip('*') + repodir.get('archs','')))
            elif 'Factory' in self.ag.envdir:
                for repodir in self.repodirs:
                    if not repodir.attrib.get('gen', ''):
                        self.p(cfg.read_files_repo_media + cfg.read_files_repo_media_convert, f, "PRODUCTREPOPATH", self.ag.productpath + "/" + self.folder + "/*" + repodir.attrib["folder"] + wild, 'Media1.lst', '', 'destlst', 'Media1_{}.lst'.format(os.path.basename(repodir.attrib["folder"]).lstrip('*')), 'media.1/media', 'media.1/products')
 
            if done:
                self.p(done, f)

        if self.assets and self.assets_flavor:
            for k, v in self.asset_folders.items():
                self.p('''rsync -4 --list-only $rsync_pwd_option PRODUCTPATH/{}/*{} | awk '{{ $1=$2=$3=$4=""; print substr($0,5); }}' >> __envsub/files_asset.lst'''.format(v, k), f)