#include "git_command.h" #include "command.h" #include "utils_internal.h" using namespace internal; #include #include #include #include #include bool GitCommand::initEnv = false; static bool initEnv() { QString gitSSHCommand{""}; QByteArray const v = qgetenv("GIT_SSH_COMMAND"); if (v.isEmpty()) { QString sshKeyFile("/opt/app/tools/atbupdate/.keys/id_ed25519_ptuConfig"); if (QFileInfo(sshKeyFile).exists()) { if (qgetenv("GIT_SSH_COMMAND").isNull()) { gitSSHCommand = "ssh -i /opt/app/tools/atbupdate/.keys/id_ed25519_ptuConfig"; if (!qputenv("GIT_SSH_COMMAND", QByteArray(gitSSHCommand.toStdString().c_str()))) { qCritical() << "ERROR: GIT_SSH_COMMAND not put into env. Exiting..."; return false; } } } else { qCritical() << "ERROR ssh-key-file" << sshKeyFile << "does not exists. Exiting..."; return false; } } else { gitSSHCommand = QString(v.toStdString().c_str()); qCritical() << "WARNING GIT_SSH_COMMAND already set in enviroment:" << gitSSHCommand; if (gitSSHCommand != "ssh -i /opt/app/tools/atbupdate/.keys/id_ed25519_ptuConfig") { qCritical() << "ERROR" << gitSSHCommand << "wrong. Exiting..."; return false; } } // qCritical() << __func__ << ":" << __LINE__ << gitSSHCommand; return true; } GitCommand::GitCommand() : m_workingDirectory(customerRepoDir()) { // qCritical() << __func__ << ":" << __LINE__ << m_workingDirectory; if (!GitCommand::initEnv) { GitCommand::initEnv = ::initEnv(); } } bool GitCommand::exec(QStringList const &options, int start_timeout, int finish_timeout) { bool ret = false; if (GitCommand::initEnv) { Command cmd(QString("git"), options, m_workingDirectory, start_timeout, finish_timeout); ret = cmd.exec(); //qCritical() << __func__ << ":" << __LINE__ << cmd.command() // << "," << cmd.args() // << ", result" << cmd.commandResult(); m_commandResult = cmd.commandResult(); } return ret; } bool GitCommand::check(int start_timeout, int finish_timeout) { QStringList const lst{"fsck"}; return exec(lst, start_timeout, finish_timeout); } bool GitCommand::checkout(int start_timeout, int finish_timeout) { int const zoneNr = read1stLineOfFile("/mnt/system_data/zone_nr"); if (zoneNr != -1) { QStringList const lst{"checkout", QString("zg1/zone%1").arg(zoneNr)}; // qCritical() << __func__ << __LINE__ << lst; return exec(lst, start_timeout, finish_timeout); } return false; } bool GitCommand::clone(int start_timeout, int finish_timeout) { m_workingDirectory = customerRepoRoot(); // /opt/app/tools/atbupdate ! QDir const repoDir{customerRepoDir()}; if (repoDir.exists() && repoDir.entryInfoList(QDir::NoDotAndDotDot|QDir::AllEntries).count() != 0) { qCritical() << "clone error:" << repoDir << "exists and is not empty"; return false; } // git clone "gitea@ptu-config.atb-comm.de:ATB/customer_999" QStringList const lst{"clone", repositoryUrl() + customerRepoDirName()}; return exec(lst, start_timeout, finish_timeout); } bool GitCommand::pull(int start_timeout, int finish_timeout) { QStringList const lst{"pull"}; return exec(lst, start_timeout, finish_timeout); } bool GitCommand::status(int start_timeout, int finish_timeout) { QStringList const lst{"status"}; return exec(lst, start_timeout, finish_timeout); }