CQtDeployer/Deploy/envirement.cpp

170 lines
4.1 KiB
C++
Raw Normal View History

2019-09-23 16:46:57 +03:00
//#
2022-03-09 17:56:42 +03:00
//# Copyright (C) 2018-2022 QuasarApp.
2019-09-23 16:46:57 +03:00
//# Distributed under the lgplv3 software license, see the accompanying
//# Everyone is permitted to copy and distribute verbatim copies
//# of this license document, but changing it is not allowed.
//#
2020-01-16 11:10:16 +03:00
#include "deploycore.h"
2019-09-07 12:01:20 +03:00
#include "envirement.h"
2019-12-20 17:25:20 +03:00
#include "pathutils.h"
2019-09-07 12:36:20 +03:00
#include "quasarapp.h"
#include <QDir>
#include <QFileInfo>
2019-09-07 12:01:20 +03:00
2019-12-20 17:25:20 +03:00
QSet<QString> Envirement::upper(const QSet<QString>& set) const {
QSet<QString> res;
2020-01-12 16:43:03 +03:00
for (const auto &i : set) {
2019-12-20 17:25:20 +03:00
res.insert(PathUtils::fixPath(i));
}
return res;
}
2020-02-26 14:29:04 +03:00
QStringList Envirement::environmentList() const {
return _dataEnvironment.values();
2019-09-07 12:01:20 +03:00
}
QStringList Envirement::ignoreEnvList() const {
2020-02-26 14:29:04 +03:00
return _ignoreEnvList->environmentList();
2019-09-07 12:01:20 +03:00
}
void Envirement::setIgnoreEnvList(const QStringList &ignoreEnvList) {
2019-09-07 12:01:20 +03:00
2020-02-26 14:29:04 +03:00
if (!_ignoreEnvList)
_ignoreEnvList = new Envirement();
2020-02-26 14:29:04 +03:00
_ignoreEnvList->addEnv(ignoreEnvList);
}
2019-09-07 12:36:20 +03:00
2020-05-06 13:35:13 +03:00
void Envirement::setIgnoreEnvListRecursive(const QStringList &ignoreEnvList, int depch) {
if (!_ignoreEnvList)
_ignoreEnvList = new Envirement();
for (const auto &i: ignoreEnvList) {
_ignoreEnvList->addEnvRec(i, depch);
}
}
2020-02-26 14:29:04 +03:00
void Envirement::addEnvRec(const QString &dir, int depch) {
addEnv(Envirement::recursiveInvairement(dir, depch));
}
2019-09-07 12:36:20 +03:00
2020-02-26 14:29:04 +03:00
void Envirement::addEnv(const QString &dir) {
2019-09-07 12:36:20 +03:00
2020-02-26 14:29:04 +03:00
char separator = DeployCore::getEnvSeparator();
2019-09-07 12:36:20 +03:00
if (dir.contains(separator)) {
2020-02-26 14:29:04 +03:00
addEnv(dir.split(separator));
2020-02-27 20:37:05 +03:00
} else {
addEnv(QStringList{dir});
2019-09-07 12:36:20 +03:00
}
2020-02-26 14:29:04 +03:00
}
2019-09-07 12:36:20 +03:00
2020-02-26 14:29:04 +03:00
void Envirement::addEnv(const QStringList &listDirs) {
2019-09-07 12:36:20 +03:00
2020-02-26 14:29:04 +03:00
for (const auto& i : listDirs) {
auto path = PathUtils::fixPath(QFileInfo(i).absoluteFilePath());
2019-09-07 12:36:20 +03:00
if (isIgnore(i)) {
QuasarAppUtils::Params::log(QString("The %0 path is ignored and not added to a search list!!").arg(i),
QuasarAppUtils::Debug);
2020-02-26 14:29:04 +03:00
continue;
}
2019-09-07 12:36:20 +03:00
2020-02-26 14:29:04 +03:00
if (!QFileInfo(path).isDir()) {
QuasarAppUtils::Params::log(QString("%0 is not a directory!! ").arg(path),
2021-05-01 00:31:15 +03:00
QuasarAppUtils::Debug);
2020-02-26 14:29:04 +03:00
continue;
}
2019-09-07 12:36:20 +03:00
2020-02-26 14:29:04 +03:00
if (_dataEnvironment.contains(path)) {
QuasarAppUtils::Params::log (QString("Path %0 is already added").arg(path),
2021-05-01 00:31:15 +03:00
QuasarAppUtils::Debug);
2020-02-26 14:29:04 +03:00
continue;
}
2019-09-07 12:36:20 +03:00
2020-02-26 14:29:04 +03:00
_dataEnvironment.insert(path);
2019-09-07 12:36:20 +03:00
}
}
bool Envirement::isIgnore(const QString &path) const {
return _ignoreEnvList && _ignoreEnvList->inThisEnvirement(path);
}
2020-07-28 23:56:34 +03:00
void Envirement::clear() {
if (_ignoreEnvList)
delete _ignoreEnvList;
_dataEnvironment.clear();
}
2019-09-22 21:55:04 +03:00
bool Envirement::inThisEnvirement(const QString &file) const {
2019-09-23 10:06:22 +03:00
QFileInfo info (file);
2019-09-23 10:06:22 +03:00
if (info.isFile()) {
2020-02-26 14:29:04 +03:00
return _dataEnvironment.contains(PathUtils::fixPath(info.absolutePath()));
2019-09-23 10:06:22 +03:00
}
return _dataEnvironment.contains(PathUtils::fixPath(info.absoluteFilePath()));
2019-09-23 10:06:22 +03:00
2019-09-22 21:55:04 +03:00
}
2019-09-07 12:36:20 +03:00
int Envirement::size() const {
2020-02-26 14:29:04 +03:00
return _dataEnvironment.size();
2019-09-07 12:36:20 +03:00
}
2019-09-08 13:37:33 +03:00
QString Envirement::concatEnv() const {
2020-02-26 14:29:04 +03:00
if (_dataEnvironment.isEmpty()) {
2019-09-08 13:37:33 +03:00
return "";
}
2020-02-26 14:29:04 +03:00
QString result = *_dataEnvironment.begin();
for (const auto &i: _dataEnvironment) {
2020-01-16 11:10:16 +03:00
result += (DeployCore::getEnvSeparator() + i);
2019-09-08 13:37:33 +03:00
}
return result;
}
2020-02-26 14:29:04 +03:00
QStringList Envirement::recursiveInvairement(QDir &dir, int depch, int depchLimit) {
if (!dir.exists() || (depchLimit >= 0 && depch >= depchLimit)) {
2020-02-26 14:29:04 +03:00
return {dir.absolutePath()};
}
QFileInfoList list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
2020-02-26 14:29:04 +03:00
QStringList res = {};
for (QFileInfo &i : list) {
if (!dir.cd(i.fileName())) {
continue;
}
2020-02-26 14:29:04 +03:00
res += Envirement::recursiveInvairement(dir, depch + 1, depchLimit);
dir.cdUp();
}
2020-02-26 14:29:04 +03:00
res += dir.absolutePath();
return res;
}
2020-02-26 14:29:04 +03:00
QStringList Envirement::recursiveInvairement(const QString &dir, int depch) {
QDir _dir(dir);
return recursiveInvairement(_dir, 0, depch);
}
2020-02-26 14:29:04 +03:00
Envirement::Envirement() {
2019-09-07 12:01:20 +03:00
}
2020-02-26 14:29:04 +03:00
Envirement::~Envirement() {
if (_ignoreEnvList) {
delete _ignoreEnvList;
_ignoreEnvList = nullptr;
}
}