From: biao716.wang Date: Mon, 15 Aug 2022 08:00:46 +0000 (+0900) Subject: Merge related patch for the latest pykickstarter X-Git-Tag: accepted/tools/devbase/tools/20250527.103804~48 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a48780c61e07497b0d656edabffa84930ab487d7;p=tools%2Fmic.git Merge related patch for the latest pykickstarter Change-Id: I9508c38fd6b21f040e2f817c754f00b5236da782 Signed-off-by: biao716.wang --- diff --git a/mic/3rdparty/pykickstart/commands/partition.py b/mic/3rdparty/pykickstart/commands/partition.py index 16034be..2ed4bdc 100644 --- a/mic/3rdparty/pykickstart/commands/partition.py +++ b/mic/3rdparty/pykickstart/commands/partition.py @@ -50,8 +50,10 @@ class FC3_PartData(BaseData): def __eq__(self, y): if not y: return False - - return self.mountpoint == y.mountpoint + if self.mountpoint: + return self.mountpoint == y.mountpoint + else: + return False def __ne__(self, y): return not self == y @@ -90,7 +92,11 @@ class FC3_PartData(BaseData): def __str__(self): retval = BaseData.__str__(self) - retval += "part %s%s\n" % (self.mountpoint, self._getArgsAsStr()) + if self.mountpoint: + mountpoint_str = "%s" % self.mountpoint + else: + mountpoint_str = "(No mount point)" + retval += "part %s%s\n" % (mountpoint_str, self._getArgsAsStr()) return retval class FC4_PartData(FC3_PartData): @@ -102,6 +108,7 @@ class FC4_PartData(FC3_PartData): self.bytesPerInode = kwargs.get("bytesPerInode", 4096) self.fsopts = kwargs.get("fsopts", "") self.label = kwargs.get("label", "") + self.fslabel = kwargs.get("fslabel", "") def _getArgsAsStr(self): retval = FC3_PartData._getArgsAsStr(self) @@ -110,8 +117,10 @@ class FC4_PartData(FC3_PartData): retval += " --bytes-per-inode=%d" % self.bytesPerInode if self.fsopts: retval += " --fsoptions=\"%s\"" % self.fsopts - if self.label: + if self.label retval += " --label=%s" % self.label + if self.fslabel != "": + retval += " --fslabel=%s" % self.fslabel return retval @@ -431,21 +440,17 @@ class FC3_Partition(KickstartCommand): return op def parse(self, args): - (ns, extra) = self.op.parse_known_args(args=args, lineno=self.lineno) - assert len(ns.mntpoint) == 1 - - if extra: - mapping = {"command": "partition", "options": extra} - raise KickstartParseError(_("Unexpected arguments to %(command)s command: %(options)s") % mapping, lineno=self.lineno) + (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) pd = self.dataClass() # pylint: disable=not-callable self.set_to_obj(ns, pd) pd.lineno = self.lineno - pd.mountpoint = ns.mntpoint[0] - - # Check for duplicates in the data list. - if pd.mountpoint != "swap" and pd in self.dataList(): - warnings.warn(_("A partition with the mountpoint %s has already been defined.") % pd.mountpoint, KickstartParseWarning) + if extra: + pd.mountpoint = extra[0] + if pd in self.dataList(): + warnings.warn(_("A partition with the mountpoint %s has already been defined.") % pd.mountpoint) + else: + pd.mountpoint = None return pd @@ -474,6 +479,8 @@ class FC4_Partition(FC3_Partition): on the partition. If the given label is already in use by another filesystem, a new label will be created for this partition.""") + op.add_argument("--fslabel", dest="fslabel", version=FC4, help=""" + label for file system.""") return op class RHEL5_Partition(FC4_Partition): diff --git a/mic/3rdparty/pykickstart/constants.py b/mic/3rdparty/pykickstart/constants.py index dadeea8..cb1b685 100644 --- a/mic/3rdparty/pykickstart/constants.py +++ b/mic/3rdparty/pykickstart/constants.py @@ -53,6 +53,8 @@ KS_SCRIPT_POST = 1 KS_SCRIPT_TRACEBACK = 2 KS_SCRIPT_PREINSTALL = 3 KS_SCRIPT_ONERROR = 4 +KS_SCRIPT_RUN = 5 +KS_SCRIPT_UMOUNT = 6 KS_WAIT = 0 KS_REBOOT = 1 diff --git a/mic/3rdparty/pykickstart/handlers/fc6.py b/mic/3rdparty/pykickstart/handlers/fc6.py index 048c515..392a85d 100644 --- a/mic/3rdparty/pykickstart/handlers/fc6.py +++ b/mic/3rdparty/pykickstart/handlers/fc6.py @@ -22,6 +22,7 @@ __all__ = ["FC6Handler"] from pykickstart import commands from pykickstart.base import BaseHandler from pykickstart.version import FC6 +from mic.kickstart.custom_commands.micrepo import * class FC6Handler(BaseHandler): version = FC6 @@ -67,6 +68,7 @@ class FC6Handler(BaseHandler): "raid": commands.raid.FC5_Raid, "reboot": commands.reboot.FC6_Reboot, "repo": commands.repo.FC6_Repo, + "tpk_repo": Mic_Tpk_Repo, "rootpw": commands.rootpw.FC3_RootPw, "selinux": commands.selinux.FC3_SELinux, "services": commands.services.FC6_Services, @@ -93,6 +95,7 @@ class FC6Handler(BaseHandler): "NetworkData": commands.network.FC6_NetworkData, "PartData": commands.partition.FC4_PartData, "RaidData": commands.raid.FC5_RaidData, + "TpkRepoData": Mic_Tpk_RepoData, "RepoData": commands.repo.FC6_RepoData, "UserData": commands.user.FC6_UserData, "VolGroupData": commands.volgroup.FC3_VolGroupData, diff --git a/mic/3rdparty/pykickstart/parser.py b/mic/3rdparty/pykickstart/parser.py index 7edf8aa..f3d17a3 100644 --- a/mic/3rdparty/pykickstart/parser.py +++ b/mic/3rdparty/pykickstart/parser.py @@ -231,6 +231,10 @@ class Script(KickstartObject): retval += '\n%pre-install' elif self.type == constants.KS_SCRIPT_ONERROR: retval += '\n%onerror' + elif self.type == constants.KS_SCRIPT_RUN: + retval += '\n%runscript' + elif self.type == constants.KS_SCRIPT_UMOUNT: + retval += '\n%post-umount' if self.interp != "/bin/sh" and self.interp: retval += " --interpreter=%s" % self.interp @@ -355,6 +359,7 @@ class Packages(KickstartObject): self.handleMissing = constants.KS_MISSING_PROMPT self.handleBroken = constants.KS_BROKEN_REPORT self.packageList = [] + self.tpk_packageList = [] self.instLangs = None self.multiLib = False self.excludeWeakdeps = False @@ -503,6 +508,25 @@ class Packages(KickstartObject): self.packageList = sorted(existingPackageSet) self.excludedList = sorted(existingExcludedSet) +class TpkPackages(KickstartObject): + """A class representing the %tpk_packages section of the kickstart file.""" + def __init__(self, *args, **kwargs): + KickstartObject.__init__(self, *args, **kwargs) + self.tpk_packageList = [] + def __str__(self): + tpk_pkgs = "" + retval = "\n%tpk_packages" + p = self.packageList + p.sort() + for pkg in p: + tpk_pkgs += "%s\n" % pkg + return retval + "\n" +tpk_pkgs + def add(self, tpkPackageList): + tpk_PackageSet = set(self.tpk_packageList) + for tpk_pkg in tpkPackageList: + stripped = tpk_pkg.strip() + tpk_PackageSet.add(stripped) + self.tpk_packageList = list(tpk_PackageSet) ### ### PARSER ### @@ -830,7 +854,10 @@ class KickstartParser(object): self.registerSection(PostScriptSection(self.handler, dataObj=Script)) self.registerSection(OnErrorScriptSection(self.handler, dataObj=Script)) self.registerSection(TracebackScriptSection(self.handler, dataObj=Script)) + self.registerSection(RunScriptSection(self.handler, dataObj=Script)) + self.registerSection(PostUmountScriptSection(self.handler, dataObj=Script)) self.registerSection(PackageSection(self.handler)) + self.registerSection(TpkPackageSection(self.handler)) # Whitelist well-known sections that pykickstart does not understand, # but shouldn't error on. diff --git a/mic/3rdparty/pykickstart/sections.py b/mic/3rdparty/pykickstart/sections.py index bf797c1..b7c0ffe 100644 --- a/mic/3rdparty/pykickstart/sections.py +++ b/mic/3rdparty/pykickstart/sections.py @@ -448,6 +448,35 @@ class TracebackScriptSection(OnErrorScriptSection): "your kickstart file to use the %onerror section instead.", KickstartDeprecationWarning) +class RunScriptSection(ScriptSection): + sectionOpen = "%runscript" + def _resetScript(self): + ScriptSection._resetScript(self) + self._script["type"] = KS_SCRIPT_RUN + + def finalize(self): + ScriptSection.finalize(self) + if self.handler: + for s in self.handler.scripts: + if s.type == KS_SCRIPT_UMOUNT: + raise KickstartError("%runscript and %post-umount " \ + "can not be defined together") + +class PostUmountScriptSection(ScriptSection): + sectionOpen = "%post-umount" + + def _resetScript(self): + ScriptSection._resetScript(self) + self._script["type"] = KS_SCRIPT_UMOUNT + + def finalize(self): + ScriptSection.finalize(self) + if self.handler: + for s in self.handler.scripts: + if s.type == KS_SCRIPT_RUN: + raise KickstartError("%runscript and %post-umount " \ + "can not be defined together") + class PackageSection(Section): sectionOpen = "%packages" _title = "Package Selection" @@ -800,3 +829,22 @@ class PackageSection(Section): "this option with its preferred alias %(new_option)s.") % {"option": option, "lineno": lineno, "new_option": new_option}, KickstartDeprecationWarning) + +class TpkPackageSection(Section): + sectionOpen = "%tpk_packages" + + def handleLine(self, line): + if not self.handler: + return + + (h, s, t) = line.partition('#') + line = h.rstrip() + self.handler.tpk_packages.add([line]) + + def handleHeader(self, lineno, args): + """Process the arguments to the %tpk_packages header and set attributes + on the Version's TpkPackages instance appropriate. This method may be + overridden in a subclass if necessary. + """ + Section.handleHeader(self, lineno, args) +