Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 25 additions & 5 deletions libs/linglong/src/linglong/cli/cli.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,13 @@
#include "linglong/api/types/v1/SubState.hpp"
#include "linglong/api/types/v1/UpgradeListResult.hpp"
#include "linglong/cli/printer.h"
#include "linglong/oci-cfg-generators/container_cfg_builder.h"

Check warning on line 26 in libs/linglong/src/linglong/cli/cli.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

Include file: "linglong/oci-cfg-generators/container_cfg_builder.h" not found.
#include "linglong/package/layer_file.h"

Check warning on line 27 in libs/linglong/src/linglong/cli/cli.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

Include file: "linglong/package/layer_file.h" not found.
#include "linglong/package/reference.h"

Check warning on line 28 in libs/linglong/src/linglong/cli/cli.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

Include file: "linglong/package/reference.h" not found.
#include "linglong/repo/config.h"

Check warning on line 29 in libs/linglong/src/linglong/cli/cli.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

Include file: "linglong/repo/config.h" not found.
#include "linglong/runtime/container_builder.h"

Check warning on line 30 in libs/linglong/src/linglong/cli/cli.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

Include file: "linglong/runtime/container_builder.h" not found.
#include "linglong/runtime/run_context.h"

Check warning on line 31 in libs/linglong/src/linglong/cli/cli.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

Include file: "linglong/runtime/run_context.h" not found.
#include "linglong/utils/error/error.h"

Check warning on line 32 in libs/linglong/src/linglong/cli/cli.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

Include file: "linglong/utils/error/error.h" not found.
#include "linglong/utils/finally/finally.h"
#include "linglong/utils/gettext.h"
#include "linglong/utils/serialize/json.h"
Expand Down Expand Up @@ -1897,14 +1898,25 @@
}

if (argsParseFunc("remove")) {
if (cfgRef.defaultRepo == alias) {
this->printer.printErr(
LINGLONG_ERRV(QString{ "repo " } + alias.c_str()
+ "is default repo, please change default repo before removing it."));
if (cfgRef.repos.size() == 1) {
this->printer.printErr(LINGLONG_ERRV(QString{ "repo " } + alias.c_str()
+ " is the only repo, please add another repo "
"before removing it or update it directly."));
return -1;
}

cfgRef.repos.erase(existingRepo);

if (cfgRef.defaultRepo == alias) {
// choose the max priority repo as default repo
auto maxPriority = linglong::repo::getRepoMaxPriority(cfgRef);
for (auto &repo : cfgRef.repos) {
if (repo.priority == maxPriority) {

Check warning on line 1913 in libs/linglong/src/linglong/cli/cli.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

Consider using std::find_if algorithm instead of a raw loop.
cfgRef.defaultRepo = repo.alias.value_or(repo.name);
break;
}
}
}

return this->setRepoConfig(utils::serialize::toQVariantMap(cfgRef));
}

Expand All @@ -1921,6 +1933,14 @@
if (argsParseFunc("set-default")) {
if (cfgRef.defaultRepo != alias) {
cfgRef.defaultRepo = alias;
// set-default is equal to set-priority to the current max priority + 100
auto maxPriority = linglong::repo::getRepoMaxPriority(cfgRef);
for (auto &repo : cfgRef.repos) {
if (repo.alias.value_or(repo.name) == alias) {
repo.priority = maxPriority + 100;
break;
}
}
return this->setRepoConfig(utils::serialize::toQVariantMap(cfgRef));
}

Expand Down