diff --git a/worker.cpp b/worker.cpp index 4e79550..4a2a430 100644 --- a/worker.cpp +++ b/worker.cpp @@ -148,6 +148,83 @@ void Worker::update() { std::call_once(once, &Worker::privateUpdate, this); } +bool Worker::isRepositoryCorrupted() { + QDir customerRepository(m_customerRepository); + if (customerRepository.exists()) { + QDir customerRepositoryEtc(QDir::cleanPath(m_customerRepository + QDir::separator() + "etc/")); + QDir customerRepositoryOpt(QDir::cleanPath(m_customerRepository + QDir::separator() + "opt/")); + QDir customerRepositoryGit(QDir::cleanPath(m_customerRepository + QDir::separator() + ".git/")); + // etc-directory inside git-repository does not exist, which means the + // git-repository is corrupted -> remove it and start from scratch + if (!customerRepositoryEtc.exists() + || !customerRepositoryGit.exists() + || !customerRepositoryOpt.exists()) { + // should never happen + Utils::printCriticalErrorMsg("CORRUPTED CUSTOMER REPOSITORY"); + return true; + } + } + + return false; +} + +bool Worker::repairCorruptedRepository() { + QDir customerRepository(m_customerRepository); + if (!customerRepository.removeRecursively()) { + Utils::printCriticalErrorMsg("ERROR REMOVING CORR. CUST-REPOSITORY"); + m_updateStatus = UpdateStatus(UPDATE_STATUS::REMOVE_GIT_REPOSITORY_FAILED, + QString("REMOVAL OF GIT-REPOSITORY %1 FAILED").arg(m_customerRepository)); + IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, + QString("#M=APISM#C=CMD_EVENT#J=") + + m_ismasClient.sanityCheckFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR, + m_updateStatus.m_statusDescription)); + emit showErrorMessage("apism sanity check", m_updateStatus.m_statusDescription); + return false; + } + return true; + +} + +int Worker::sendCloneAndCheckoutFailure() { + stopProgressLoop(); + setProgress(0); + m_updateStatus = UpdateStatus(UPDATE_STATUS::GIT_CLONE_AND_CHECKOUT_FAILURE, + QString("CLONE OR CHECKOUT FAILED: ") + m_customerRepository); + IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, + QString("#M=APISM#C=CMD_EVENT#J=") + + m_ismasClient.errorGitClone(100, m_updateStatus.m_statusDescription)); + + return CLONE_AND_CHECKOUT_FAILURE; +} + +int Worker::sendCloneAndCheckoutSuccess() { + m_updateStatus = UpdateStatus(UPDATE_STATUS::GIT_CLONE_AND_CHECKOUT_SUCCESS, + QString("CLONED REPOSITORY %1 AND CHECKED OUT BRANCH %2") + .arg(m_customerRepository) + .arg(m_gc.branchName())); + + IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, + QString("#M=APISM#C=CMD_EVENT#J=") + + m_ismasClient.cloneAndCheckoutCustomerRepository( + m_updateStatus.m_statusDescription)); + + return CLONE_AND_CHECKOUT_SUCCESS; +} + +int Worker::sendIsmasTriggerFailure() { + stopProgressLoop(); + setProgress(0); + m_updateStatus = UpdateStatus(UPDATE_STATUS::ISMAS_UPDATE_TRIGGER_SET_FAILURE, + QString("ISMAS update trigger wrong")); + IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, + QString("#M=APISM#C=CMD_EVENT#J=") + + m_ismasClient.updateOfPSAFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR, + "CHECK-UPDATE-TRIGGER", + m_updateStatus.m_statusDescription)); + return ISMAS_TRIGGER_FAILURE; +} + + void Worker::privateUpdate() { if (!m_mainWindow) { Utils::printCriticalErrorMsg("m_mainWindow NOT SET");