UNPKG

@broadcom/endevor-for-zowe-cli

Version:

Endevor Plug-in for Zowe CLI

265 lines 29.7 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EndevorSyncActionUtils = void 0; const lodash_1 = require("lodash"); const CacheUtils_1 = require("../CacheUtils"); const IEndevorWorkspaceEnums_1 = require("../doc/IEndevorWorkspaceEnums"); const WorkspaceUtils_1 = require("../WorkspaceUtils"); const fs = require("fs"); const RetrieveElement_1 = require("../../elements/RetrieveElement"); const EndevorUtils_1 = require("../../utils/EndevorUtils"); const ListElement_1 = require("../../metadata/ListElement"); class EndevorSyncActionUtils { static performLocalDelete(action) { if (fs.existsSync(action.element.localFile)) { fs.unlinkSync(action.element.localFile); WorkspaceUtils_1.WorkspaceUtils.cleanupParentDirs(action.element.localFile); } CacheUtils_1.CacheUtils.removeSha1File(action.element.localFileVersion); action.element.localStatus = IEndevorWorkspaceEnums_1.ElementVersionStatus.MISSING; action.element.remoteStatus = IEndevorWorkspaceEnums_1.ElementVersionStatus.MISSING; action.element.mergeStatus = IEndevorWorkspaceEnums_1.ElementVersionStatus.MISSING; action.element.localFileVersion = (0, lodash_1.cloneDeep)(WorkspaceUtils_1.WorkspaceUtils.EmptyWorkspaceFileVersion); action.element.localElmVersion = (0, lodash_1.cloneDeep)(WorkspaceUtils_1.WorkspaceUtils.EmptyWorkspaceElementVersion); action.element.remoteElmVersion = (0, lodash_1.cloneDeep)(WorkspaceUtils_1.WorkspaceUtils.EmptyWorkspaceElementVersion); action.element.mergeElmVersion = (0, lodash_1.cloneDeep)(WorkspaceUtils_1.WorkspaceUtils.EmptyWorkspaceElementVersion); } static retrieveElm(action, session, instance, ccid, comment, optSignout, optOverrideSignout, location, searchMap, expectedFingerprint, charset, codePage) { return __awaiter(this, void 0, void 0, function* () { const retrieveOptions = { path: "log", return: "fir", search: searchMap ? "yes" : "no", ccid: ccid, comment: comment, signout: optSignout ? "yes" : "no", oveSign: optOverrideSignout ? "yes" : "no" }; try { const restResponse = yield RetrieveElement_1.RetrieveElement.retrieveElement(session, instance, location, retrieveOptions, charset); if (restResponse.isResponseJSON) { let notFound = false; let stcShortage = false; let oveSignNeeded = false; EndevorUtils_1.EndevorUtils.removeMessageTimestamps(restResponse.body.messages).forEach((message) => { if (message.startsWith("API0000W ELEMENT NOT FOUND")) { notFound = true; } if (message.startsWith("EWS1111E")) { stcShortage = true; } if (message.startsWith("C1G0167E")) { oveSignNeeded = true; action.errorMessages.push(message); } }); if (notFound) { action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE; action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_NOT_FOUND; return Promise.reject(); } if (stcShortage) { action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE; action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_STC_SHORTAGE; return Promise.reject(); } if (oveSignNeeded) { action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE; action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_SIGNOUT; return Promise.reject(); } if (restResponse.body.data[0] == null) { action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE; action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE; action.errorMessages = restResponse.body.messages; return Promise.reject(); } } if (restResponse.body.data[0] == null || restResponse.body.returnCode > 8) { action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE; action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE; action.errorMessages = restResponse.body.messages; return Promise.reject(); } const body = restResponse.body.data[0]; let fingerprint = restResponse.headers["fingerprint"]; if (fingerprint != null && fingerprint.length > 16) { fingerprint = fingerprint.slice(fingerprint.length - 16); } if (expectedFingerprint != undefined && fingerprint != expectedFingerprint) { action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE; action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_FINGERPRINT_MISMATCH; action.errorMessages.push(...restResponse.body.messages); if (fingerprint == null || fingerprint.length == 0) { action.errorMessages.push("Retrieve Element didn't return a fingerprint, sync cannot proceed. Contact you Endevor web services administrator."); } return Promise.reject(); } let newCharset = charset; const contentType = restResponse.headers["content-type"]; if (contentType) { const contentTypeSplit = contentType.split("charset="); if (contentTypeSplit.length == 2) { newCharset = contentTypeSplit[1]; } } if (action.element.fileCharset && action.element.fileCharset != newCharset) { action.errorMessages.push(`Endevor WS charset change: ${action.element.fileCharset} => ${newCharset}`); } action.element.fileCharset = newCharset; let newCodePage = codePage; const codePageHdr = restResponse.headers["x-broadcom-source-charset"]; if (codePageHdr) { newCodePage = codePageHdr; } if (action.element.codePage && action.element.codePage != newCodePage) { action.errorMessages.push(`Endevor WS source code page change: ${action.element.codePage} => ${newCodePage}`); } action.element.codePage = newCodePage; return body; } catch (err) { action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE; action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE; action.errorMessages.push(`${err}`); return Promise.reject(); } }); } static listElement(action_1, session_1, instance_1, location_1, searchMap_1, returnFirst_1, logicalPath_1) { return __awaiter(this, arguments, void 0, function* (action, session, instance, location, searchMap, returnFirst, logicalPath, failActionOnError = true) { const listOptions = { path: logicalPath ? "log" : "phy", return: returnFirst ? "fir" : "all", search: searchMap ? "yes" : "no" }; try { const restResponse = yield ListElement_1.ListElement.listElement(session, instance, location, listOptions); if (restResponse.isResponseJSON) { let stcShortage = false; EndevorUtils_1.EndevorUtils.removeMessageTimestamps(restResponse.body.messages).forEach((message) => { if (message.startsWith("EWS1111E")) { stcShortage = true; } }); if (stcShortage) { if (failActionOnError) { action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE; action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_STC_SHORTAGE; return Promise.reject(); } } if (restResponse.body.data == null || restResponse.body.returnCode > 8) { if (failActionOnError) { action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE; action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE; action.errorMessages.push(`Failed to list elements ${location.element}.${location.type} at ${location.environment}/${location.stageNumber}/${location.system}/${location.subsystem}`); action.errorMessages.push(...restResponse.body.messages); } return Promise.reject(); } return restResponse.body.data; } else { if (failActionOnError) { action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE; action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE; action.errorMessages.push(`Failed to list elements ${location.element}.${location.type} at ${location.environment}/${location.stageNumber}/${location.system}/${location.subsystem}`); } return Promise.reject(); } } catch (err) { if (failActionOnError) { action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE; action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE; action.errorMessages.push(`Failed to list elements ${location.element}.${location.type} at ${location.environment}/${location.stageNumber}/${location.system}/${location.subsystem}`); action.errorMessages.push(`${err}`); } return Promise.reject(); } }); } static composeActionsSummaryMsg(state, actions, successSG, successPL, failureSG, failurePL, notExecSG, notExecPL) { let successCount = 0; let warningCount = 0; let notExecCount = 0; let failCount = 0; actions.forEach((action) => { if (action.status == IEndevorWorkspaceEnums_1.EndevorActionStatus.SUCCESS) successCount++; else if (action.status == IEndevorWorkspaceEnums_1.EndevorActionStatus.WARNING) warningCount++; else if (action.status == IEndevorWorkspaceEnums_1.EndevorActionStatus.NOT_RUN) notExecCount++; else failCount++; }); if (actions.length > 0) { if (successCount > 0) { if (warningCount > 0) { state.warningMessages.push(`${successCount + warningCount} ${successCount + warningCount > 1 ? successPL : successSG} - ${warningCount} with warning(s).`); } else { state.infoMessages.push(`${successCount} ${successCount > 1 ? successPL : successSG}`); } } if (failCount > 0) { state.warningMessages.push(`${failCount} ${failCount > 1 ? failurePL : failureSG}`); } if (notExecCount > 0) { state.infoMessages.push(`${notExecCount} ${notExecCount > 1 ? notExecPL : notExecSG}`); } } return; } static composeActionsSummaryMsgForMerges(state, actions, successSG, successPL, autoMergeSG, autoMergePL, conflictSG, conflictPL, failureSG, failurePL, notExecSG, notExecPL) { let automergeCount = 0; let conflictCount = 0; let genericSuccessCount = 0; let notExecCount = 0; let failCount = 0; actions.forEach((action) => { if (action.statusDetailed == IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.SUCCESS_AUTOMERGED) automergeCount++; else if (action.statusDetailed == IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.SUCCESS_MANUAL_MERGE_STARTED) conflictCount++; else if (action.statusDetailed == IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.NOT_RUN_MANUAL_MERGE_IN_PROGRESS) conflictCount++; else if (action.status == IEndevorWorkspaceEnums_1.EndevorActionStatus.SUCCESS) genericSuccessCount++; else if (action.status == IEndevorWorkspaceEnums_1.EndevorActionStatus.NOT_RUN) notExecCount++; else failCount++; }); if (actions.length > 0) { if (automergeCount > 0) { state.infoMessages.push(`${automergeCount} ${automergeCount > 1 ? autoMergePL : autoMergeSG}`); } if (conflictCount > 0) { state.infoMessages.push(`${conflictCount} ${conflictCount > 1 ? conflictPL : conflictSG}`); } if (genericSuccessCount > 0) { state.infoMessages.push(`${genericSuccessCount} ${genericSuccessCount > 1 ? successPL : successSG}`); } if (failCount > 0) { state.warningMessages.push(`${failCount} ${failCount > 1 ? failurePL : failureSG}`); } if (notExecCount > 0) { state.infoMessages.push(`${notExecCount} ${notExecCount > 1 ? notExecPL : notExecSG}`); } } } } exports.EndevorSyncActionUtils = EndevorSyncActionUtils; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW5kZXZvclN5bmNBY3Rpb25VdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvd29ya3NwYWNlL2FjdGlvbnMvRW5kZXZvclN5bmNBY3Rpb25VdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUF1QkEsbUNBQW1DO0FBQ25DLDhDQUEyQztBQUMzQywwRUFBdUg7QUFFdkgsc0RBQW1EO0FBRW5ELHlCQUEwQjtBQUkxQixvRUFBaUU7QUFFakUsMkRBQXdEO0FBQ3hELDREQUF5RDtBQUl6RCxNQUFhLHNCQUFzQjtJQVExQixNQUFNLENBQUMsa0JBQWtCLENBQUMsTUFBeUI7UUFDeEQsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEMsK0JBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFDRCx1QkFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsNkNBQW9CLENBQUMsT0FBTyxDQUFDO1FBQzFELE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLDZDQUFvQixDQUFDLE9BQU8sQ0FBQztRQUMzRCxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyw2Q0FBb0IsQ0FBQyxPQUFPLENBQUM7UUFDMUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFBLGtCQUFTLEVBQUMsK0JBQWMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxHQUFHLElBQUEs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