From bb83192eec4da2f974fff2043996df7c03194dbf Mon Sep 17 00:00:00 2001 From: Bernd Wachter Date: Fri, 30 Aug 2013 17:34:07 +0300 Subject: [PATCH] [ssuks] Add device specific pack script section /usr/share/ssu/kickstart/pack/, with default fallback --- ssuks/ssukickstarter.cpp | 31 ++++++++++++++++++++----------- ssuks/ssukickstarter.h | 9 ++++++++- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/ssuks/ssukickstarter.cpp b/ssuks/ssukickstarter.cpp index abe0a16..5e89c01 100644 --- a/ssuks/ssukickstarter.cpp +++ b/ssuks/ssukickstarter.cpp @@ -144,20 +144,27 @@ QStringList SsuKickstarter::packages(){ } // we intentionally don't support device-specific post scriptlets -QStringList SsuKickstarter::scriptletSection(QString name, bool chroot){ +QStringList SsuKickstarter::scriptletSection(QString name, int flags){ QStringList result; QString path; QDir dir; - if (chroot) - path = Sandbox::map(QString("/%1/kickstart/%2/") + if ((flags & NoChroot) == NoChroot) + path = Sandbox::map(QString("/%1/kickstart/%2_nochroot/") .arg(SSU_DATA_DIR) .arg(name)); else - path = Sandbox::map(QString("/%1/kickstart/%2_nochroot/") + path = Sandbox::map(QString("/%1/kickstart/%2/") .arg(SSU_DATA_DIR) .arg(name)); + if ((flags & DeviceSpecific) == DeviceSpecific){ + if (dir.exists(path + "/" + replaceSpaces(deviceModel.toLower()))) + path = path + "/" + replaceSpaces(deviceModel.toLower()); + else + path = path + "/default"; + } + dir.setPath(path); QStringList scriptlets = dir.entryList(QDir::AllEntries|QDir::NoDot|QDir::NoDotDot, QDir::Name); @@ -177,10 +184,11 @@ QStringList SsuKickstarter::scriptletSection(QString name, bool chroot){ result.prepend(QString("export SSU_RELEASE_TYPE=%1") .arg(rndMode ? "rnd" : "release")); - if (chroot) - result.prepend("%" + name); - else + if ((flags & NoChroot) == NoChroot) result.prepend("%" + name + " --nochroot"); + else + result.prepend("%" + name); + result.append("%end"); } @@ -317,10 +325,11 @@ bool SsuKickstarter::write(QString kickstart){ } kout << repos().join("\n") << endl << endl; kout << packages().join("\n") << endl << endl; - kout << scriptletSection("pre", true).join("\n") << endl << endl; - kout << scriptletSection("post", true).join("\n") << endl << endl; - kout << scriptletSection("post", false).join("\n") << endl << endl; - // add flags as bitmask? + // TODO: now that extending scriptlet section is might make sense to make it configurable + kout << scriptletSection("pre", Chroot).join("\n") << endl << endl; + kout << scriptletSection("post", Chroot).join("\n") << endl << endl; + kout << scriptletSection("post", NoChroot).join("\n") << endl << endl; + kout << scriptletSection("pack", DeviceSpecific).join("\n") << endl << endl; // POST, die-on-error return true; diff --git a/ssuks/ssukickstarter.h b/ssuks/ssukickstarter.h index 58f5a3e..626a658 100644 --- a/ssuks/ssukickstarter.h +++ b/ssuks/ssukickstarter.h @@ -21,6 +21,13 @@ class SsuKickstarter { void setRepoParameters(QHash parameters); bool write(QString kickstart=""); + enum ScriptletFlags { + /// Chroot is not useful, but helps in making the code more readable + Chroot = 0, + NoChroot = 0x1, + DeviceSpecific = 0x2, + }; + private: QHash repoOverride; Ssu ssu; @@ -32,7 +39,7 @@ class SsuKickstarter { QStringList packages(); QString replaceSpaces(const QString &value); QStringList repos(); - QStringList scriptletSection(QString name, bool chroot=true); + QStringList scriptletSection(QString name, int flags=Chroot); }; #endif