mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-24 16:25:58 +01:00
hyprpm: add support for minimum versions
This commit is contained in:
parent
51b3148f09
commit
1ae592fcd9
9 changed files with 47 additions and 13 deletions
|
@ -75,6 +75,7 @@ CManifest::CManifest(const eManifestType type, const std::string& path) {
|
||||||
for (auto& plugin : m_vPlugins) {
|
for (auto& plugin : m_vPlugins) {
|
||||||
plugin.description = manifest[plugin.name]["description"].value_or("?");
|
plugin.description = manifest[plugin.name]["description"].value_or("?");
|
||||||
plugin.output = manifest[plugin.name]["output"].value_or("?");
|
plugin.output = manifest[plugin.name]["output"].value_or("?");
|
||||||
|
plugin.since = manifest[plugin.name]["since_hyprland"].value_or(0);
|
||||||
auto authors = manifest[plugin.name]["authors"].as_array();
|
auto authors = manifest[plugin.name]["authors"].as_array();
|
||||||
if (authors) {
|
if (authors) {
|
||||||
for (auto&& a : *authors) {
|
for (auto&& a : *authors) {
|
||||||
|
|
|
@ -19,6 +19,7 @@ class CManifest {
|
||||||
std::vector<std::string> authors;
|
std::vector<std::string> authors;
|
||||||
std::vector<std::string> buildSteps;
|
std::vector<std::string> buildSteps;
|
||||||
std::string output;
|
std::string output;
|
||||||
|
int since = 0;
|
||||||
bool failed = false;
|
bool failed = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -70,10 +70,22 @@ SHyprlandVersion CPluginManager::getHyprlandVersion() {
|
||||||
std::string hlbranch = HLVERCALL.substr(HLVERCALL.find("from branch") + 12);
|
std::string hlbranch = HLVERCALL.substr(HLVERCALL.find("from branch") + 12);
|
||||||
hlbranch = hlbranch.substr(0, hlbranch.find(" at commit "));
|
hlbranch = hlbranch.substr(0, hlbranch.find(" at commit "));
|
||||||
|
|
||||||
|
std::string hlcommits;
|
||||||
|
|
||||||
|
if (HLVERCALL.contains("commits:")) {
|
||||||
|
hlcommits = HLVERCALL.substr(HLVERCALL.find("commits:") + 10);
|
||||||
|
hlcommits = hlcommits.substr(0, hlcommits.find(" "));
|
||||||
|
}
|
||||||
|
|
||||||
|
int commits = 0;
|
||||||
|
try {
|
||||||
|
commits = std::stoi(hlcommits);
|
||||||
|
} catch (...) { ; }
|
||||||
|
|
||||||
if (m_bVerbose)
|
if (m_bVerbose)
|
||||||
std::cout << Colors::BLUE << "[v] " << Colors::RESET << "parsed commit " << hlcommit << " at branch " << hlbranch << "\n";
|
std::cout << Colors::BLUE << "[v] " << Colors::RESET << "parsed commit " << hlcommit << " at branch " << hlbranch << "\n";
|
||||||
|
|
||||||
ver = SHyprlandVersion{hlbranch, hlcommit};
|
ver = SHyprlandVersion{hlbranch, hlcommit, commits};
|
||||||
return ver;
|
return ver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,6 +226,12 @@ bool CPluginManager::addNewPluginRepo(const std::string& url, const std::string&
|
||||||
for (auto& p : pManifest->m_vPlugins) {
|
for (auto& p : pManifest->m_vPlugins) {
|
||||||
std::string out;
|
std::string out;
|
||||||
|
|
||||||
|
if (p.since > HLVER.commits) {
|
||||||
|
progress.printMessageAbove(std::string{Colors::RED} + "✖" + Colors::RESET + " Not building " + p.name + ": your Hyprland version is too old.\n");
|
||||||
|
p.failed = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
progress.printMessageAbove(std::string{Colors::RESET} + " → Building " + p.name);
|
progress.printMessageAbove(std::string{Colors::RESET} + " → Building " + p.name);
|
||||||
|
|
||||||
for (auto& bs : p.buildSteps) {
|
for (auto& bs : p.buildSteps) {
|
||||||
|
@ -225,10 +243,12 @@ bool CPluginManager::addNewPluginRepo(const std::string& url, const std::string&
|
||||||
std::cout << Colors::BLUE << "[v] " << Colors::RESET << "shell returned: " << out << "\n";
|
std::cout << Colors::BLUE << "[v] " << Colors::RESET << "shell returned: " << out << "\n";
|
||||||
|
|
||||||
if (!std::filesystem::exists("/tmp/hyprpm/new/" + p.output)) {
|
if (!std::filesystem::exists("/tmp/hyprpm/new/" + p.output)) {
|
||||||
progress.printMessageAbove(std::string{Colors::RED} + "✖" + Colors::RESET + " Plugin " + p.name + " failed to build.\n" << " This likely means that the plugin is either outdated, not yet available for your version, or broken.\n Try re-running with -v to see more verbose output.\n");
|
progress.printMessageAbove(std::string{Colors::RED} + "✖" + Colors::RESET + " Plugin " + p.name + " failed to build.\n" +
|
||||||
|
" This likely means that the plugin is either outdated, not yet available for your version, or broken.\n If you are on -git, update "
|
||||||
|
"first.\n Try re-running with -v to see "
|
||||||
|
"more verbose output.\n");
|
||||||
|
|
||||||
p.failed = true;
|
p.failed = true;
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -576,10 +596,15 @@ bool CPluginManager::updatePlugins(bool forceUpdateAll) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool failed = false;
|
|
||||||
for (auto& p : pManifest->m_vPlugins) {
|
for (auto& p : pManifest->m_vPlugins) {
|
||||||
std::string out;
|
std::string out;
|
||||||
|
|
||||||
|
if (p.since > HLVER.commits) {
|
||||||
|
progress.printMessageAbove(std::string{Colors::RED} + "✖" + Colors::RESET + " Not building " + p.name + ": your Hyprland version is too old.\n");
|
||||||
|
p.failed = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
progress.printMessageAbove(std::string{Colors::RESET} + " → Building " + p.name);
|
progress.printMessageAbove(std::string{Colors::RESET} + " → Building " + p.name);
|
||||||
|
|
||||||
for (auto& bs : p.buildSteps) {
|
for (auto& bs : p.buildSteps) {
|
||||||
|
@ -591,17 +616,18 @@ bool CPluginManager::updatePlugins(bool forceUpdateAll) {
|
||||||
std::cout << Colors::BLUE << "[v] " << Colors::RESET << "shell returned: " << out << "\n";
|
std::cout << Colors::BLUE << "[v] " << Colors::RESET << "shell returned: " << out << "\n";
|
||||||
|
|
||||||
if (!std::filesystem::exists("/tmp/hyprpm/update/" + p.output)) {
|
if (!std::filesystem::exists("/tmp/hyprpm/update/" + p.output)) {
|
||||||
std::cerr << "\n" << Colors::RED << "✖" << Colors::RESET << " Plugin " << p.name << " failed to build.\n" << " This likely means that the plugin is either outdated, not yet available for your version, or broken.\n Try re-running with -v to see more verbose output.\n";
|
std::cerr << "\n"
|
||||||
failed = true;
|
<< Colors::RED << "✖" << Colors::RESET << " Plugin " << p.name << " failed to build.\n"
|
||||||
break;
|
<< " This likely means that the plugin is either outdated, not yet available for your version, or broken.\n If you are on -git, update first.\n Try "
|
||||||
|
"re-running with -v to see more verbose "
|
||||||
|
"output.\n";
|
||||||
|
p.failed = true;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
progress.printMessageAbove(std::string{Colors::GREEN} + "✔" + Colors::RESET + " built " + p.name + " into " + p.output);
|
progress.printMessageAbove(std::string{Colors::GREEN} + "✔" + Colors::RESET + " built " + p.name + " into " + p.output);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (failed)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// add repo toml to DataState
|
// add repo toml to DataState
|
||||||
SPluginRepository newrepo = repo;
|
SPluginRepository newrepo = repo;
|
||||||
newrepo.plugins.clear();
|
newrepo.plugins.clear();
|
||||||
|
|
|
@ -32,6 +32,7 @@ enum ePluginLoadStateReturn {
|
||||||
struct SHyprlandVersion {
|
struct SHyprlandVersion {
|
||||||
std::string branch;
|
std::string branch;
|
||||||
std::string hash;
|
std::string hash;
|
||||||
|
int commits = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CPluginManager {
|
class CPluginManager {
|
||||||
|
|
|
@ -7,6 +7,7 @@ MESSAGE=$(git show ${GIT_COMMIT_HASH} | head -n 5 | tail -n 1 | sed -e 's/#//g'
|
||||||
DATE=$(git show ${GIT_COMMIT_HASH} --no-patch --format=%cd --date=local)
|
DATE=$(git show ${GIT_COMMIT_HASH} --no-patch --format=%cd --date=local)
|
||||||
DIRTY=$(git diff-index --quiet HEAD -- || echo dirty)
|
DIRTY=$(git diff-index --quiet HEAD -- || echo dirty)
|
||||||
TAG=$(git describe --tags)
|
TAG=$(git describe --tags)
|
||||||
|
COMMITS=$(git rev-list --count HEAD)
|
||||||
|
|
||||||
sed -i -e "s#@HASH@#${HASH}#" ./src/version.h
|
sed -i -e "s#@HASH@#${HASH}#" ./src/version.h
|
||||||
sed -i -e "s#@BRANCH@#${BRANCH}#" ./src/version.h
|
sed -i -e "s#@BRANCH@#${BRANCH}#" ./src/version.h
|
||||||
|
@ -14,3 +15,4 @@ sed -i -e "s#@MESSAGE@#${MESSAGE}#" ./src/version.h
|
||||||
sed -i -e "s#@DATE@#${DATE}#" ./src/version.h
|
sed -i -e "s#@DATE@#${DATE}#" ./src/version.h
|
||||||
sed -i -e "s#@DIRTY@#${DIRTY}#" ./src/version.h
|
sed -i -e "s#@DIRTY@#${DIRTY}#" ./src/version.h
|
||||||
sed -i -e "s#@TAG@#${TAG}#" ./src/version.h
|
sed -i -e "s#@TAG@#${TAG}#" ./src/version.h
|
||||||
|
sed -i -e "s#@COMMITS@#${COMMITS}#" ./src/version.h
|
||||||
|
|
|
@ -810,7 +810,7 @@ std::string versionRequest(eHyprCtlOutputFormat format, std::string request) {
|
||||||
|
|
||||||
if (format == eHyprCtlOutputFormat::FORMAT_NORMAL) {
|
if (format == eHyprCtlOutputFormat::FORMAT_NORMAL) {
|
||||||
std::string result = "Hyprland, built from branch " + std::string(GIT_BRANCH) + " at commit " + GIT_COMMIT_HASH + " " + GIT_DIRTY + " (" + commitMsg +
|
std::string result = "Hyprland, built from branch " + std::string(GIT_BRANCH) + " at commit " + GIT_COMMIT_HASH + " " + GIT_DIRTY + " (" + commitMsg +
|
||||||
").\nDate: " + GIT_COMMIT_DATE + "\nTag: " + GIT_TAG + "\n\nflags: (if any)\n";
|
").\nDate: " + GIT_COMMIT_DATE + "\nTag: " + GIT_TAG + ", commits: " + GIT_COMMITS + "\n\nflags: (if any)\n";
|
||||||
|
|
||||||
#ifdef LEGACY_RENDERER
|
#ifdef LEGACY_RENDERER
|
||||||
result += "legacyrenderer\n";
|
result += "legacyrenderer\n";
|
||||||
|
@ -832,8 +832,9 @@ std::string versionRequest(eHyprCtlOutputFormat format, std::string request) {
|
||||||
"commit_message": "{}",
|
"commit_message": "{}",
|
||||||
"commit_date": "{}",
|
"commit_date": "{}",
|
||||||
"tag": "{}",
|
"tag": "{}",
|
||||||
|
"commits": {},
|
||||||
"flags": [)#",
|
"flags": [)#",
|
||||||
GIT_BRANCH, GIT_COMMIT_HASH, (strcmp(GIT_DIRTY, "dirty") == 0 ? "true" : "false"), escapeJSONStrings(commitMsg), GIT_COMMIT_DATE, GIT_TAG);
|
GIT_BRANCH, GIT_COMMIT_HASH, (strcmp(GIT_DIRTY, "dirty") == 0 ? "true" : "false"), escapeJSONStrings(commitMsg), GIT_COMMIT_DATE, GIT_TAG, GIT_COMMITS);
|
||||||
|
|
||||||
#ifdef LEGACY_RENDERER
|
#ifdef LEGACY_RENDERER
|
||||||
result += "\"legacyrenderer\",";
|
result += "\"legacyrenderer\",";
|
||||||
|
|
|
@ -364,7 +364,7 @@ APICALL SVersionInfo HyprlandAPI::getHyprlandVersion(HANDLE handle) {
|
||||||
if (!PLUGIN)
|
if (!PLUGIN)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
return {GIT_COMMIT_HASH, GIT_TAG, GIT_DIRTY != std::string(""), GIT_BRANCH, GIT_COMMIT_MESSAGE};
|
return {GIT_COMMIT_HASH, GIT_TAG, GIT_DIRTY != std::string(""), GIT_BRANCH, GIT_COMMIT_MESSAGE, GIT_COMMITS};
|
||||||
}
|
}
|
||||||
|
|
||||||
APICALL std::shared_ptr<SHyprCtlCommand> HyprlandAPI::registerHyprCtlCommand(HANDLE handle, SHyprCtlCommand cmd) {
|
APICALL std::shared_ptr<SHyprCtlCommand> HyprlandAPI::registerHyprCtlCommand(HANDLE handle, SHyprCtlCommand cmd) {
|
||||||
|
|
|
@ -49,6 +49,7 @@ struct SVersionInfo {
|
||||||
bool dirty = false;
|
bool dirty = false;
|
||||||
std::string branch;
|
std::string branch;
|
||||||
std::string message;
|
std::string message;
|
||||||
|
std::string commits;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define APICALL extern "C"
|
#define APICALL extern "C"
|
||||||
|
|
|
@ -5,3 +5,4 @@
|
||||||
#define GIT_COMMIT_DATE "@DATE@"
|
#define GIT_COMMIT_DATE "@DATE@"
|
||||||
#define GIT_DIRTY "@DIRTY@"
|
#define GIT_DIRTY "@DIRTY@"
|
||||||
#define GIT_TAG "@TAG@"
|
#define GIT_TAG "@TAG@"
|
||||||
|
#define GIT_COMMITS "@COMMITS@"
|
||||||
|
|
Loading…
Reference in a new issue