forked from qt-creator/qt-creator
Utils: Use std::variant for environment changes
Change-Id: Ibdac141c5ef2dc2fa4c163e059f746dfb6f9625d Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -395,58 +395,58 @@ std::optional<EnvironmentProvider> EnvironmentProvider::provider(const QByteArra
|
|||||||
|
|
||||||
void EnvironmentChange::addSetValue(const QString &key, const QString &value)
|
void EnvironmentChange::addSetValue(const QString &key, const QString &value)
|
||||||
{
|
{
|
||||||
m_changeItems.append({Item::SetValue, QVariant::fromValue(QPair<QString, QString>(key, value))});
|
m_changeItems.append(Item{std::in_place_index_t<SetValue>(), QPair<QString, QString>{key, value}});
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnvironmentChange::addUnsetValue(const QString &key)
|
void EnvironmentChange::addUnsetValue(const QString &key)
|
||||||
{
|
{
|
||||||
m_changeItems.append({Item::UnsetValue, key});
|
m_changeItems.append(Item{std::in_place_index_t<UnsetValue>(), key});
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnvironmentChange::addPrependToPath(const FilePaths &values)
|
void EnvironmentChange::addPrependToPath(const FilePaths &values)
|
||||||
{
|
{
|
||||||
for (int i = values.size(); --i >= 0; ) {
|
for (int i = values.size(); --i >= 0; ) {
|
||||||
const FilePath value = values.at(i);
|
const FilePath value = values.at(i);
|
||||||
m_changeItems.append({Item::PrependToPath, value.toVariant()});
|
m_changeItems.append(Item{std::in_place_index_t<PrependToPath>(), value});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnvironmentChange::addAppendToPath(const FilePaths &values)
|
void EnvironmentChange::addAppendToPath(const FilePaths &values)
|
||||||
{
|
{
|
||||||
for (const FilePath &value : values)
|
for (const FilePath &value : values)
|
||||||
m_changeItems.append({Item::AppendToPath, value.toVariant()});
|
m_changeItems.append(Item{std::in_place_index_t<AppendToPath>(), value});
|
||||||
}
|
}
|
||||||
|
|
||||||
EnvironmentChange EnvironmentChange::fromFixedEnvironment(const Environment &fixedEnv)
|
EnvironmentChange EnvironmentChange::fromFixedEnvironment(const Environment &fixedEnv)
|
||||||
{
|
{
|
||||||
EnvironmentChange change;
|
EnvironmentChange change;
|
||||||
change.m_changeItems.append({Item::SetFixedEnvironment, QVariant::fromValue(fixedEnv)});
|
change.m_changeItems.append(Item{std::in_place_index_t<SetFixedEnvironment>(), fixedEnv});
|
||||||
return change;
|
return change;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnvironmentChange::applyToEnvironment(Environment &env) const
|
void EnvironmentChange::applyToEnvironment(Environment &env) const
|
||||||
{
|
{
|
||||||
for (const Item &item : m_changeItems) {
|
for (const Item &item : m_changeItems) {
|
||||||
switch (item.type) {
|
switch (item.index()) {
|
||||||
case Item::SetSystemEnvironment:
|
case SetSystemEnvironment:
|
||||||
env = Environment::systemEnvironment();
|
env = Environment::systemEnvironment();
|
||||||
break;
|
break;
|
||||||
case Item::SetFixedEnvironment:
|
case SetFixedEnvironment:
|
||||||
env = item.data.value<Environment>();
|
env = std::get<SetFixedEnvironment>(item);
|
||||||
break;
|
break;
|
||||||
case Item::SetValue: {
|
case SetValue: {
|
||||||
auto data = item.data.value<QPair<QString, QString>>();
|
const QPair<QString, QString> data = std::get<SetValue>(item);
|
||||||
env.set(data.first, data.second);
|
env.set(data.first, data.second);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Item::UnsetValue:
|
case UnsetValue:
|
||||||
env.unset(item.data.toString());
|
env.unset(std::get<UnsetValue>(item));
|
||||||
break;
|
break;
|
||||||
case Item::PrependToPath:
|
case PrependToPath:
|
||||||
env.prependOrSetPath(FilePath::fromVariant(item.data));
|
env.prependOrSetPath(std::get<PrependToPath>(item));
|
||||||
break;
|
break;
|
||||||
case Item::AppendToPath:
|
case AppendToPath:
|
||||||
env.appendOrSetPath(FilePath::fromVariant(item.data));
|
env.appendOrSetPath(std::get<AppendToPath>(item));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -109,22 +109,24 @@ class QTCREATOR_UTILS_EXPORT EnvironmentChange final
|
|||||||
public:
|
public:
|
||||||
EnvironmentChange() = default;
|
EnvironmentChange() = default;
|
||||||
|
|
||||||
class Item final
|
enum Type {
|
||||||
{
|
SetSystemEnvironment,
|
||||||
public:
|
SetFixedEnvironment,
|
||||||
enum Type {
|
SetValue,
|
||||||
SetSystemEnvironment,
|
UnsetValue,
|
||||||
SetFixedEnvironment,
|
PrependToPath,
|
||||||
SetValue,
|
AppendToPath,
|
||||||
UnsetValue,
|
|
||||||
PrependToPath,
|
|
||||||
AppendToPath,
|
|
||||||
};
|
|
||||||
|
|
||||||
Type type;
|
|
||||||
QVariant data;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
using Item = std::variant<
|
||||||
|
std::monostate, // SetSystemEnvironment dummy
|
||||||
|
Environment, // SetFixedEnvironment
|
||||||
|
QPair<QString, QString>, // SetValue
|
||||||
|
QString, // UnsetValue
|
||||||
|
FilePath, // PrependToPath
|
||||||
|
FilePath // AppendToPath
|
||||||
|
>;
|
||||||
|
|
||||||
static EnvironmentChange fromFixedEnvironment(const Environment &fixedEnv);
|
static EnvironmentChange fromFixedEnvironment(const Environment &fixedEnv);
|
||||||
|
|
||||||
void applyToEnvironment(Environment &) const;
|
void applyToEnvironment(Environment &) const;
|
||||||
|
Reference in New Issue
Block a user