Update process: check sanity of customer repository: are etc/ and
opt/directories contained? If not, remove the repository and clone it again. This is done without checking the ISMAS-WAIT-button.
This commit is contained in:
		
							
								
								
									
										130
									
								
								worker.cpp
									
									
									
									
									
								
							
							
						
						
									
										130
									
								
								worker.cpp
									
									
									
									
									
								
							@@ -237,52 +237,88 @@ void Worker::privateUpdate() {
 | 
			
		||||
    emit disableExit();
 | 
			
		||||
 | 
			
		||||
    m_returnCode = -1;
 | 
			
		||||
 | 
			
		||||
    QDir customerRepository(m_customerRepository);
 | 
			
		||||
    if (!customerRepository.exists()) {
 | 
			
		||||
    QDir customerRepositoryEtc(QDir::cleanPath(m_customerRepository + QDir::separator() + "etc/"));
 | 
			
		||||
 | 
			
		||||
    Utils::printUpdateStatusMsg(
 | 
			
		||||
        QStringList()
 | 
			
		||||
            <<  QString("STEP 1: CHECK SANITY OF CUSTOMER REPOSITORY %1...")
 | 
			
		||||
                    .arg(m_customerRepository));
 | 
			
		||||
 | 
			
		||||
    bool initialClone = false;      // the customer repository is cloned without
 | 
			
		||||
                                    // checking the ISMAS-trigger (WAIT-)button.
 | 
			
		||||
                                    // but if there was a sane repository
 | 
			
		||||
                                    // available, then the trigger-button must
 | 
			
		||||
                                    // have been activated in ISMAS.
 | 
			
		||||
 | 
			
		||||
    bool continueUpdate = true;     // check if git-clone command has timed-out,
 | 
			
		||||
                                    // resulting in a corrupted git-repository, which
 | 
			
		||||
                                    // does not contain an ./etc-directory
 | 
			
		||||
    if (isRepositoryCorrupted()) {
 | 
			
		||||
        QString s("CORRUPTED CUSTOMER REPOSITORY. REPAIRING...");
 | 
			
		||||
        if ((continueUpdate = repairCorruptedRepository()) == true) {
 | 
			
		||||
            Utils::printUpdateStatusMsg(
 | 
			
		||||
                QStringList() << s <<
 | 
			
		||||
                    QString("CORRUPTED CUSTOMER REPOSITORY. REPAIRING...DONE"));
 | 
			
		||||
        } else {
 | 
			
		||||
            Utils::printUpdateStatusMsg(
 | 
			
		||||
                QStringList() << s <<
 | 
			
		||||
                    QString("CORRUPTED CUSTOMER REPOSITORY. REPAIRING...FAIL"));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (continueUpdate) {
 | 
			
		||||
 | 
			
		||||
        Utils::printUpdateStatusMsg(
 | 
			
		||||
            QStringList()
 | 
			
		||||
                <<  QString("STEP 1: CHECKED SANITY OF CUSTOMER REPOSITORY %1 DONE")
 | 
			
		||||
                        .arg(m_customerRepository)
 | 
			
		||||
                <<  QString("STEP 2: FETCH CUSTOMER REPOSITORY %1...")
 | 
			
		||||
                        .arg(m_customerRepository));
 | 
			
		||||
 | 
			
		||||
        if ((continueUpdate = customerRepository.exists()) == false) {
 | 
			
		||||
           emit appendText("\nInitializing customer environment ...");
 | 
			
		||||
           startProgressLoop();
 | 
			
		||||
           for (int i = 0; i < 5; ++i) {   // try to checkout git repository
 | 
			
		||||
               setProgress(i);             // and switch to branch
 | 
			
		||||
               if (m_gc.gitCloneAndCheckoutBranch()) {
 | 
			
		||||
            stopProgressLoop();
 | 
			
		||||
                   if (!isRepositoryCorrupted()) {
 | 
			
		||||
                        emit replaceLast("Initializing customer environment", UPDATE_STEP_DONE);
 | 
			
		||||
 | 
			
		||||
            setProgress(5);
 | 
			
		||||
 | 
			
		||||
            m_updateStatus = UpdateStatus(UPDATE_STATUS::GIT_CLONE_AND_CHECKOUT_SUCCESS,
 | 
			
		||||
                                  QString("CLONED AND CHECKED OUT: ") + m_customerRepository);
 | 
			
		||||
 | 
			
		||||
            IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
 | 
			
		||||
                    QString("#M=APISM#C=CMD_EVENT#J=") +
 | 
			
		||||
                        m_ismasClient.cloneAndCheckoutCustomerRepository(
 | 
			
		||||
                            m_updateStatus.m_statusDescription));
 | 
			
		||||
 | 
			
		||||
            setProgress(10);
 | 
			
		||||
 | 
			
		||||
            IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
 | 
			
		||||
                    QString("#M=APISM#C=CMD_EVENT#J=") +
 | 
			
		||||
                        m_ismasClient.updateOfPSASucceeded(""));
 | 
			
		||||
 | 
			
		||||
            setProgress(100);
 | 
			
		||||
            m_ismasClient.setProgressInPercent(100);
 | 
			
		||||
            IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT,
 | 
			
		||||
                QString("#M=APISM#C=CMD_EVENT#J=") + m_ismasClient.updateOfPSAActivated());
 | 
			
		||||
 | 
			
		||||
            m_returnCode = 0;
 | 
			
		||||
        } else {
 | 
			
		||||
            stopProgressLoop();
 | 
			
		||||
            setProgress(0);
 | 
			
		||||
 | 
			
		||||
            emit replaceLast("Initializing customer environment", UPDATE_STEP_FAIL);
 | 
			
		||||
 | 
			
		||||
            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));
 | 
			
		||||
 | 
			
		||||
            m_returnCode = -3;
 | 
			
		||||
                        m_returnCode = sendCloneAndCheckoutSuccess();
 | 
			
		||||
                        continueUpdate = true;
 | 
			
		||||
                        initialClone = true;
 | 
			
		||||
                        Utils::printInfoMsg("INITIAL CLONE DONE");
 | 
			
		||||
                        break;
 | 
			
		||||
                   }
 | 
			
		||||
    } else {
 | 
			
		||||
        if (updateTriggerSet(5)) {
 | 
			
		||||
               }
 | 
			
		||||
 | 
			
		||||
               QThread::sleep(1);  // maybe git needs more time
 | 
			
		||||
           }
 | 
			
		||||
           if (continueUpdate == false) {
 | 
			
		||||
               emit replaceLast("Initializing customer environment", UPDATE_STEP_FAIL);
 | 
			
		||||
               m_returnCode = sendCloneAndCheckoutFailure();
 | 
			
		||||
           }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (continueUpdate) {   // repository is neither not existent nor
 | 
			
		||||
                            // corrupted. check now if the ISMAS-trigger
 | 
			
		||||
                            // (WAIT-BUTTON) is activated even in case of
 | 
			
		||||
                            // initial checkout
 | 
			
		||||
        if (!initialClone) {
 | 
			
		||||
 | 
			
		||||
            Utils::printUpdateStatusMsg(
 | 
			
		||||
                QStringList()
 | 
			
		||||
                    <<  QString("STEP 2: FETCHED CUSTOMER REPOSITORY %1 DONE")
 | 
			
		||||
                            .arg(m_customerRepository)
 | 
			
		||||
                    <<  QString("STEP 3: CHECK ISMAS-UPDATE-TRIGGER FOR WAIT-STATUS..."));
 | 
			
		||||
 | 
			
		||||
            //if ((continueUpdate = updateTriggerSet(10)) == false) {
 | 
			
		||||
            //    m_returnCode = sendIsmasTriggerFailure();
 | 
			
		||||
            //}
 | 
			
		||||
 | 
			
		||||
            if (updateTriggerSet(10)) {
 | 
			
		||||
                if (customerEnvironment(30)) {
 | 
			
		||||
                    m_ismasClient.setProgressInPercent(50);
 | 
			
		||||
                    if (filesToUpdate()) {
 | 
			
		||||
@@ -373,14 +409,12 @@ void Worker::privateUpdate() {
 | 
			
		||||
                    m_returnCode = -6;
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
            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));
 | 
			
		||||
            m_returnCode = -5;
 | 
			
		||||
                m_returnCode = sendIsmasTriggerFailure();
 | 
			
		||||
            }
 | 
			
		||||
        } else { // initialClone
 | 
			
		||||
            Utils::printUpdateStatusMsg(
 | 
			
		||||
                QString("STEP 2: FETCHED CUSTOMER REPOSITORY %1 DONE")
 | 
			
		||||
                        .arg(m_customerRepository));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user