fix build

This commit is contained in:
Andrei Yankovich 2020-08-15 14:38:03 +03:00
parent 25a04c2974
commit 60980c4967
18 changed files with 155 additions and 68 deletions

View File

@ -29,6 +29,8 @@ CONFIG(release, debug|release): {
include('$$PWD/../QuasarAppLib/QuasarLib.pri') include('$$PWD/../QuasarAppLib/QuasarLib.pri')
include('$$PWD/../Deploy/Deploy.pri') include('$$PWD/../Deploy/Deploy.pri')
include('$$PWD/../zip/zip.pri')
include('$$PWD/../pe/pe-parser-library/pe-parser-library.pri') include('$$PWD/../pe/pe-parser-library/pe-parser-library.pri')

View File

@ -63,6 +63,7 @@ SOURCES += \
Distributions/idistribution.cpp \ Distributions/idistribution.cpp \
ignorerule.cpp \ ignorerule.cpp \
metafilemanager.cpp \ metafilemanager.cpp \
packagecontrol.cpp \
packing.cpp \ packing.cpp \
pathutils.cpp \ pathutils.cpp \
pe.cpp \ pe.cpp \
@ -97,6 +98,7 @@ HEADERS += \
Distributions/idistribution.h \ Distributions/idistribution.h \
ignorerule.h \ ignorerule.h \
metafilemanager.h \ metafilemanager.h \
packagecontrol.h \
packing.h \ packing.h \
pathutils.h \ pathutils.h \
pe.h \ pe.h \

View File

@ -8,7 +8,7 @@ DefaultDistro::DefaultDistro(FileManager *fileManager)
}; };
bool DefaultDistro::deployTemplate() { bool DefaultDistro::deployTemplate(PackageControl &pkg) {
return true; return true;
} }

View File

@ -11,7 +11,7 @@ public:
// iDistribution interface // iDistribution interface
public: public:
QString getConfig() const ; QString getConfig() const ;
bool deployTemplate() override; bool deployTemplate(PackageControl &pkg) override;
Envirement toolKitEnv() const override; Envirement toolKitEnv() const override;
QString runCmd() override; QString runCmd() override;
QStringList runArg() const override; QStringList runArg() const override;

View File

@ -9,6 +9,7 @@
#include <QFileInfo> #include <QFileInfo>
class FileManager; class FileManager;
class DistroModule; class DistroModule;
class PackageControl;
class DEPLOYSHARED_EXPORT iDistribution class DEPLOYSHARED_EXPORT iDistribution
{ {
@ -16,7 +17,7 @@ public:
iDistribution(FileManager * fileManager); iDistribution(FileManager * fileManager);
virtual ~iDistribution(); virtual ~iDistribution();
virtual bool deployTemplate() = 0; virtual bool deployTemplate(PackageControl& pkgCtrl) = 0;
virtual bool removeTemplate() const = 0; virtual bool removeTemplate() const = 0;
virtual Envirement toolKitEnv() const = 0; virtual Envirement toolKitEnv() const = 0;
virtual QProcessEnvironment processEnvirement() const = 0; virtual QProcessEnvironment processEnvirement() const = 0;

View File

@ -5,6 +5,7 @@
#include <QDateTime> #include <QDateTime>
#include <QProcess> #include <QProcess>
#include <packagecontrol.h>
#include <pathutils.h> #include <pathutils.h>
QIF::QIF(FileManager *fileManager) QIF::QIF(FileManager *fileManager)
@ -63,7 +64,7 @@ QString QIF::runCmd() {
return binarycreator; return binarycreator;
} }
bool QIF::deployTemplate() { bool QIF::deployTemplate(PackageControl &pkg) {
auto customTemplate = QuasarAppUtils::Params::getStrArg("qif", ""); auto customTemplate = QuasarAppUtils::Params::getStrArg("qif", "");
const DeployConfig *cfg = DeployCore::_config; const DeployConfig *cfg = DeployCore::_config;
@ -74,61 +75,60 @@ bool QIF::deployTemplate() {
if (customTemplate.isEmpty()) { if (customTemplate.isEmpty()) {
// default template // default template
auto sortedMap = sortPackages(cfg->packages()); for (auto it = cfg->packages().begin();
it != cfg->packages().end(); ++it) {
for (auto &it : sortedMap) { auto package = it.value();
auto package = it.second;
TemplateInfo info; TemplateInfo info;
info.Name = PathUtils::stripPath(it.first); info.Name = PathUtils::stripPath(it.key());
if (info.Name.isEmpty()) { if (info.Name.isEmpty()) {
QFileInfo targetInfo(*package->targets().begin()); QFileInfo targetInfo(*package.targets().begin());
info.Name = targetInfo.baseName(); info.Name = targetInfo.baseName();
} }
if (!package->name().isEmpty()) { if (!package.name().isEmpty()) {
info.Name = package->name(); info.Name = package.name();
} }
auto location = cfg->getTargetDir() + "/" + getLocation() + "/packages/" + auto location = cfg->getTargetDir() + "/" + getLocation() + "/packages/" +
((it.first.isEmpty())? "Application": info.Name); ((it.key().isEmpty())? "Application": info.Name);
auto locationData = location + "/data/" + info.Name; auto locationData = location + "/data/" + info.Name;
info.Description = "This package contains the " + info.Name; info.Description = "This package contains the " + info.Name;
if (!package->description().isEmpty()) if (!package.description().isEmpty())
info.Description = package->description(); info.Description = package.description();
info.Version = "1.0"; info.Version = "1.0";
if (!package->version().isEmpty()) if (!package.version().isEmpty())
info.Version = package->version(); info.Version = package.version();
info.ReleaseData = QDate::currentDate().toString("yyyy-MM-dd"); info.ReleaseData = QDate::currentDate().toString("yyyy-MM-dd");
if (!package->releaseData().isEmpty()) if (!package.releaseData().isEmpty())
info.ReleaseData = package->releaseData(); info.ReleaseData = package.releaseData();
info.Icon = "icons/Icon.png"; info.Icon = "icons/Icon.png";
if (package->icon().isEmpty()) { if (package.icon().isEmpty()) {
if (!copyFile(":/Templates/QIF/Distributions/Templates/qif/Icon.png", if (!copyFile(":/Templates/QIF/Distributions/Templates/qif/Icon.png",
locationData + "/icons/", false)) { locationData + "/icons/", false)) {
return false; return false;
} }
} else { } else {
QFileInfo iconInfo(package->icon()); QFileInfo iconInfo(package.icon());
info.Icon = info.Name + "/icons/" + iconInfo.fileName(); info.Icon = info.Name + "/icons/" + iconInfo.fileName();
if (!copyFile(package->icon(), locationData + "/icons/", false)) { if (!copyFile(package.icon(), locationData + "/icons/", false)) {
return false; return false;
} }
} }
info.Publisher = "Company"; info.Publisher = "Company";
if (!package->publisher().isEmpty()) if (!package.publisher().isEmpty())
info.Publisher = package->publisher(); info.Publisher = package.publisher();
QString cmdArray = "["; QString cmdArray = "[";
int initSize = cmdArray.size(); int initSize = cmdArray.size();
for (const auto &target :it.second->targets()) { for (const auto &target :package.targets()) {
auto fileinfo = QFileInfo(target); auto fileinfo = QFileInfo(target);
if (fileinfo.suffix().compare("exe", ONLY_WIN_CASE_INSENSIATIVE) == 0 || fileinfo.suffix().isEmpty()) { if (fileinfo.suffix().compare("exe", ONLY_WIN_CASE_INSENSIATIVE) == 0 || fileinfo.suffix().isEmpty()) {
if (cmdArray.size() > initSize) { if (cmdArray.size() > initSize) {
@ -152,7 +152,7 @@ bool QIF::deployTemplate() {
return false; return false;
} }
if (!moveData(cfg->getTargetDir() + "/" + it.first, locationData, getLocation())) { if (!pkg.movePackage(it.key(), locationData)) {
return false; return false;
} }

View File

@ -3,7 +3,7 @@
#include "idistribution.h" #include "idistribution.h"
class PackageControl;
/** /**
* @brief The QIF class provides interface betvin deployment targets and Qt Installer Framework * @brief The QIF class provides interface betvin deployment targets and Qt Installer Framework
*/ */
@ -13,7 +13,7 @@ public:
QIF(FileManager *fileManager); QIF(FileManager *fileManager);
Envirement toolKitEnv() const override; Envirement toolKitEnv() const override;
QString runCmd() override; QString runCmd() override;
bool deployTemplate() override; bool deployTemplate(PackageControl &pkg) override;
QStringList runArg() const override; QStringList runArg() const override;
bool removeTemplate() const override; bool removeTemplate() const override;
QProcessEnvironment processEnvirement() const override; QProcessEnvironment processEnvirement() const override;

View File

@ -12,32 +12,31 @@ ZipArhive::ZipArhive(FileManager *fileManager)
setLocation("tmp zip"); setLocation("tmp zip");
} }
bool ZipArhive::deployTemplate() { bool ZipArhive::deployTemplate(PackageControl &pkg) {
// default template // default template
const DeployConfig *cfg = DeployCore::_config; const DeployConfig *cfg = DeployCore::_config;
auto sortedMap = sortPackages(cfg->packages());
ZipCompresser zipWorker; ZipCompresser zipWorker;
for (auto &it : sortedMap) { for (auto it = cfg->packages().begin();
auto package = it.second; it != cfg->packages().end(); ++it) {
auto package = it.value();
TemplateInfo info; TemplateInfo info;
info.Name = PathUtils::stripPath(it.first); info.Name = PathUtils::stripPath(it.key());
if (info.Name.isEmpty()) { if (info.Name.isEmpty()) {
QFileInfo targetInfo(*package->targets().begin()); QFileInfo targetInfo(*package.targets().begin());
info.Name = targetInfo.baseName(); info.Name = targetInfo.baseName();
} }
if (!package->name().isEmpty()) { if (!package.name().isEmpty()) {
info.Name = package->name(); info.Name = package.name();
} }
auto location = cfg->getTargetDir() + "/" + getLocation() + "/" + auto location = cfg->getTargetDir() + "/" + getLocation() + "/" +
((it.first.isEmpty())? "Application": info.Name); ((it.key().isEmpty())? "Application": info.Name);
if (!moveData(cfg->getTargetDir() + "/" + it.first, location, getLocation())) { if (!moveData(cfg->getTargetDir() + "/" + it.key(), location, getLocation())) {
return false; return false;
} }

View File

@ -12,13 +12,13 @@ public:
// iDistribution interface // iDistribution interface
public: public:
bool deployTemplate(); bool deployTemplate(PackageControl &pkg) override;
bool removeTemplate() const; bool removeTemplate() const override;
Envirement toolKitEnv() const; Envirement toolKitEnv() const override;
QProcessEnvironment processEnvirement() const; QProcessEnvironment processEnvirement() const override;
QString runCmd(); QString runCmd() override;
QStringList runArg() const; QStringList runArg() const override;
QStringList outPutFiles() const; QStringList outPutFiles() const override;
private: private:
QStringList outFiles; QStringList outFiles;
}; };

View File

@ -1173,16 +1173,19 @@ QString ConfigParser::findWindowsPath(const QString& path) const {
return "C:/" + win_magic; return "C:/" + win_magic;
} }
iDistribution *ConfigParser::getDistribution() { QList<iDistribution *> ConfigParser::getDistribution() {
QList<iDistribution *> distros;
if (QuasarAppUtils::Params::isEndable("zip")) { if (QuasarAppUtils::Params::isEndable("zip")) {
return new ZipArhive(_fileManager); distros.push_back(new ZipArhive(_fileManager));
} }
if (QuasarAppUtils::Params::isEndable("qif")) { if (QuasarAppUtils::Params::isEndable("qif")) {
return new QIF(_fileManager); distros.push_back(new QIF(_fileManager));
} }
return new DefaultDistro(_fileManager); distros.push_back(new DefaultDistro(_fileManager));
return distros;
} }
void ConfigParser::initEnvirement() { void ConfigParser::initEnvirement() {

View File

@ -100,7 +100,7 @@ private:
QJsonValue writeKeyArray(int separatorLvl, const QString &parameter, const QString &confFileDir) const; QJsonValue writeKeyArray(int separatorLvl, const QString &parameter, const QString &confFileDir) const;
QString findWindowsPath(const QString &path) const; QString findWindowsPath(const QString &path) const;
iDistribution* getDistribution(); QList<iDistribution *> getDistribution();
bool isNeededQt() const; bool isNeededQt() const;
}; };

View File

@ -16,7 +16,7 @@
Deploy::Deploy() { Deploy::Deploy() {
_fileManager = new FileManager(); _fileManager = new FileManager();
_scaner = new DependenciesScanner(); _scaner = new DependenciesScanner();
_packing = new Packing(); _packing = new Packing(_fileManager);
_pluginParser = new PluginsParser(); _pluginParser = new PluginsParser();
_paramsParser = new ConfigParser(_fileManager, _pluginParser, _scaner, _packing); _paramsParser = new ConfigParser(_fileManager, _pluginParser, _scaner, _packing);

View File

@ -78,7 +78,7 @@ public:
QStringList *listOfCopiedItems = nullptr, QStringList *listOfCopiedItems = nullptr,
QStringList *mask = nullptr); QStringList *mask = nullptr);
bool moveFolder(const QString &from, const QString &to, const QString &ignore); bool moveFolder(const QString &from, const QString &to, const QString &ignore = "");
void clear(const QString& targetDir, bool force); void clear(const QString& targetDir, bool force);

View File

@ -0,0 +1,6 @@
#include "packagecontrol.h"
PackageControl::PackageControl()
{
}

19
Deploy/packagecontrol.h Normal file
View File

@ -0,0 +1,19 @@
#ifndef PACKAGECONTROL_H
#define PACKAGECONTROL_H
#include <QString>
/**
* @brief The PackageControl class - this is interface for move files for package
*/
class PackageControl
{
public:
PackageControl();
virtual bool movePackage(const QString& package,
const QString& newLocation) = 0;
};
#endif // PACKAGECONTROL_H

View File

@ -1,5 +1,6 @@
#include "Distributions/idistribution.h" #include "Distributions/idistribution.h"
#include "deployconfig.h" #include "deployconfig.h"
#include "filemanager.h"
#include "packing.h" #include "packing.h"
#include "pathutils.h" #include "pathutils.h"
#include "quasarapp.h" #include "quasarapp.h"
@ -7,7 +8,10 @@
#include <QProcess> #include <QProcess>
#include <QThread> #include <QThread>
Packing::Packing() { Packing::Packing(FileManager *fileManager) {
assert(fileManager);
_fileManager = fileManager;
_proc = new QProcess(this); _proc = new QProcess(this);
connect(_proc, SIGNAL(readyReadStandardError()), connect(_proc, SIGNAL(readyReadStandardError()),
@ -28,27 +32,31 @@ void Packing::setDistribution(const QList<iDistribution*> &pakages) {
bool Packing::create() { bool Packing::create() {
if (!collectPackages()) {
return false;
}
for (auto package : _pakage) { for (auto package : _pakage) {
if (!package) if (!package)
return false; return false;
if (!package->deployTemplate()) if (!package->deployTemplate(*this))
return false; return false;
if (package->runCmd().size()) { if (package->runCmd().size()) {
const DeployConfig *cfg = DeployCore::_config; const DeployConfig *cfg = DeployCore::_config;
QFileInfo cmdInfo(_pakage->runCmd()); QFileInfo cmdInfo(package->runCmd());
auto allExecRight = QFile::ExeUser | QFile::ExeGroup | QFile::ExeOwner; auto allExecRight = QFile::ExeUser | QFile::ExeGroup | QFile::ExeOwner;
if (!cmdInfo.permission(allExecRight)) { if (!cmdInfo.permission(allExecRight)) {
QFile::setPermissions(cmdInfo.absoluteFilePath(), cmdInfo.permissions() | allExecRight); QFile::setPermissions(cmdInfo.absoluteFilePath(), cmdInfo.permissions() | allExecRight);
} }
_proc->setProgram(_pakage->runCmd()); _proc->setProgram(package->runCmd());
_proc->setProcessEnvironment(_proc->processEnvironment()); _proc->setProcessEnvironment(_proc->processEnvironment());
_proc->setArguments(_pakage->runArg()); _proc->setArguments(package->runArg());
_proc->setWorkingDirectory(cfg->getTargetDir()); _proc->setWorkingDirectory(cfg->getTargetDir());
_proc->start(); _proc->start();
@ -74,9 +82,27 @@ bool Packing::create() {
} }
} }
_pakage->removeTemplate(); if (!restorePackagesLocations()) {
return false;
}
package->removeTemplate();
} }
return true;
}
bool Packing::movePackage(const QString &package,
const QString &newLocation) {
if (moveData(_packagesLocations.value(package),
newLocation)) {
_packagesLocations[package] = newLocation;
return true;
}
return false;
} }
QMultiMap<int ,QPair<QString, const DistroModule*>> QMultiMap<int ,QPair<QString, const DistroModule*>>
@ -89,7 +115,7 @@ sortPackages(const QHash<QString, DistroModule> &input) {
return result; return result;
} }
void Packing::collectPackages() { bool Packing::collectPackages() {
const DeployConfig *cfg = DeployCore::_config; const DeployConfig *cfg = DeployCore::_config;
auto sortedMap = sortPackages(cfg->packages()); auto sortedMap = sortPackages(cfg->packages());
@ -113,12 +139,29 @@ void Packing::collectPackages() {
((it.first.isEmpty())? "Application": Name); ((it.first.isEmpty())? "Application": Name);
_packages.insert(it.first, location); _packagesLocations.insert(it.first, location);
if (!moveData(cfg->getTargetDir() + "/" + it.first, location, tmpPakcageLocation)) { if (!moveData(cfg->getTargetDir() + "/" + it.first, location, tmpPakcageLocation)) {
return false; return false;
} }
} }
_defaultPackagesLocations = _packagesLocations;
return true;
}
bool Packing::moveData(const QString &from, const QString &to, const QString &ignore) const {
return _fileManager->moveFolder(from, to, ignore);
}
bool Packing::restorePackagesLocations() {
for (auto it = _packagesLocations.begin(); it != _packagesLocations.end(); ++it) {
if (!moveData(it.value(), _defaultPackagesLocations.value(it.key()))) {
return false;
}
}
return true;
} }
void Packing::handleOutputUpdate() { void Packing::handleOutputUpdate() {

View File

@ -4,6 +4,7 @@
#include <QObject> #include <QObject>
#include <QProcess> #include <QProcess>
#include "deploy_global.h" #include "deploy_global.h"
#include "packagecontrol.h"
/** /**
* @brief The Packing class - this class have interface for configure package and * @brief The Packing class - this class have interface for configure package and
@ -12,27 +13,38 @@
class ConfigParser; class ConfigParser;
class iDistribution; class iDistribution;
class FileManager;
class DEPLOYSHARED_EXPORT Packing : public QObject class DEPLOYSHARED_EXPORT Packing : public QObject, public PackageControl
{ {
Q_OBJECT Q_OBJECT
public: public:
Packing(); Packing(FileManager *fileManager);
~Packing(); ~Packing();
void setDistribution(const QList<iDistribution*> &pakages); void setDistribution(const QList<iDistribution*> &pakages);
bool create(); bool create();
bool movePackage(const QString &package, const QString &newLocation);
private: private:
void collectPackages(); bool collectPackages();
bool moveData(const QString& from, const QString& to,
const QString &ignore = "") const;
bool restorePackagesLocations();
QList<iDistribution*> _pakage; QList<iDistribution*> _pakage;
QProcess *_proc = nullptr; QProcess *_proc = nullptr;
QHash<QString, QString> _packages; QHash<QString, QString> _packagesLocations;
QHash<QString, QString> _defaultPackagesLocations;
FileManager* _fileManager = nullptr;
private slots: private slots:
void handleOutputUpdate(); void handleOutputUpdate();
}; };
#endif // PACKING_H #endif // PACKING_H

View File

@ -354,7 +354,7 @@ void deploytest::testDeployTarget() {
FileManager file; FileManager file;
DependenciesScanner scan; DependenciesScanner scan;
Packing pac; Packing pac(&file);
PluginsParser _pluginParser; PluginsParser _pluginParser;
ConfigParser *deploy = new ConfigParser(&file, &_pluginParser, &scan, &pac); ConfigParser *deploy = new ConfigParser(&file, &_pluginParser, &scan, &pac);
@ -922,7 +922,7 @@ void deploytest::testSetTargetDir() {
FileManager file; FileManager file;
DependenciesScanner scan; DependenciesScanner scan;
Packing pac; Packing pac(&file);
PluginsParser _plugins; PluginsParser _plugins;
ConfigParser dep(&file, &_plugins, &scan, &pac); ConfigParser dep(&file, &_plugins, &scan, &pac);