UNPKG

@broadcom/endevor-for-zowe-cli

Version:

Endevor Plug-in for Zowe CLI

150 lines 18.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.EndevorSyncActionConflict = void 0; const RetrieveElement_1 = require("../../elements/RetrieveElement"); const EndevorUtils_1 = require("../../utils/EndevorUtils"); const CacheUtils_1 = require("../CacheUtils"); const IEndevorWorkspaceEnums_1 = require("../doc/IEndevorWorkspaceEnums"); const MergeUtils_1 = require("../MergeUtils"); const EndevorSyncAction_1 = require("./EndevorSyncAction"); const fs = require("fs"); const EndevorSyncActionUtils_1 = require("./EndevorSyncActionUtils"); const HandlerUtils_1 = require("../../../cli/utils/HandlerUtils"); class EndevorSyncActionConflict extends EndevorSyncAction_1.EndevorSyncAction { constructor(element, location, nodeEncoding, endOfLine, workspaceDir, charset) { super(element, location); this.actionType = IEndevorWorkspaceEnums_1.EndevorActionType.CONFLICT; this.actionName = "Conflict Resolution"; this.actionColorANSI = HandlerUtils_1.HandlerUtils.ANSI_COLOR_GREEN; this.nodeEncoding = nodeEncoding; this.endOfLine = endOfLine; this.workspaceDir = workspaceDir; this.charset = charset; } static composeActionsSummaryMsg(state, actions) { EndevorSyncActionUtils_1.EndevorSyncActionUtils.composeActionsSummaryMsgForMerges(state, actions, "element successfully retrieved with unknown merge result", "elements successfully retrieved with unknown merge result", "element successfully auto-merged", "elements successfully auto-merged", "element require manual conflict resolution", "elements require manual conflict resolution", "element retrieve in preparation for conflict resolution failed", "element retrieves in preparation for conflict resolution failed", "element conflict resolution not started", "element conflict resolutions not started"); } performAction(session, instance, ccid, comment, optSignout, optOverrideSignout) { return __awaiter(this, void 0, void 0, function* () { if (this.element.localStatus == IEndevorWorkspaceEnums_1.ElementVersionStatus.CONFLICT_RESOLUTION) { this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.NOT_RUN; this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.NOT_RUN_MANUAL_MERGE_IN_PROGRESS; return false; } const retrieveOptions = { path: "log", return: "fir", search: "yes", ccid: ccid, comment: comment, signout: optSignout ? "yes" : "no", oveSign: optOverrideSignout ? "yes" : "no" }; try { const restResponse = yield RetrieveElement_1.RetrieveElement.retrieveElement(session, instance, this.location, retrieveOptions, this.element.fileCharset ? this.element.fileCharset : this.charset, this.element.codePage); 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; } this.errorMessages.push(message); }); if (notFound) { this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE; this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_NOT_FOUND; return false; } if (stcShortage) { this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE; this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_STC_SHORTAGE; return false; } if (oveSignNeeded) { this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE; this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_SIGNOUT; return false; } if (restResponse.body.data[0] == null) { this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE; this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE; this.errorMessages = restResponse.body.messages; return false; } } if (restResponse.body.data[0] == null) { this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE; this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE; return false; } const remoteContent = restResponse.body.data[0]; let fingerprint = restResponse.headers["fingerprint"]; if (fingerprint != null && fingerprint.length > 16) { fingerprint = fingerprint.slice(fingerprint.length - 16); } if (fingerprint != this.element.mergeElmVersion.fingerprint) { this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE; this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_FINGERPRINT_MISMATCH; if (fingerprint == null || fingerprint.length == 0) { this.errorMessages.push("Retrieve Element didn't return a fingerprint, sync cannot proceed. Contact you Endevor web services administrator."); } return false; } let conflict = false; const remoteDescription = `(vvll ${this.element.mergeElmVersion.vvll} ccid '${this.element.mergeElmVersion.ccid}' created by ${this.element.mergeElmVersion.userId} on ${this.element.mergeElmVersion.date.substring(0, 10)} at ${this.element.mergeElmVersion.date.substring(11, 19)})`; if (this.element.localStatus == IEndevorWorkspaceEnums_1.ElementVersionStatus.NEW) { const localDescription = `(untracked)`; conflict = MergeUtils_1.MergeUtils.perform2WayMerge(fs.readFileSync(this.element.localFile), remoteContent, this.element.localFile, localDescription, remoteDescription, this.nodeEncoding, this.endOfLine); } else { let localDescription = `(based on unknown vvll)`; if (this.element.localElmVersion.vvll != "") { localDescription = `(based on vvll ${this.element.localElmVersion.vvll} ccid '${this.element.localElmVersion.ccid}' created by ${this.element.localElmVersion.userId} on ${this.element.localElmVersion.date.substring(0, 10)} at ${this.element.localElmVersion.date.substring(11, 19)})`; } conflict = MergeUtils_1.MergeUtils.perform3WayMerge(CacheUtils_1.CacheUtils.readSha1File(this.element.localFileVersion), fs.readFileSync(this.element.localFile), remoteContent, this.element.localFile, localDescription, remoteDescription, this.nodeEncoding, this.endOfLine); } this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.SUCCESS; CacheUtils_1.CacheUtils.removeSha1File(this.element.localFileVersion); yield CacheUtils_1.CacheUtils.addSha1FileFromBuffer(this.workspaceDir, this.location.environment, this.location.stageNumber, this.location.system, this.location.subsystem, this.element.localFileVersion, remoteContent); if (this.element.localFileVersion.sha1File == "") { this.element.localFileVersion.sha1File = "was empty"; } this.element.localElmVersion = this.element.mergeElmVersion; if (conflict) { this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.SUCCESS_MANUAL_MERGE_STARTED; this.element.localStatus = IEndevorWorkspaceEnums_1.ElementVersionStatus.CONFLICT_RESOLUTION; } else { this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.SUCCESS_AUTOMERGED; yield MergeUtils_1.MergeUtils.markElementAsMerged(this.element); } return true; } catch (err) { this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE; this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE; this.errorMessages.push(`${err}`); return false; } }); } } exports.EndevorSyncActionConflict = EndevorSyncActionConflict; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW5kZXZvclN5bmNBY3Rpb25Db25mbGljdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvd29ya3NwYWNlL2FjdGlvbnMvRW5kZXZvclN5bmNBY3Rpb25Db25mbGljdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUEwQkEsb0VBQWlFO0FBRWpFLDJEQUF3RDtBQUN4RCw4Q0FBMkM7QUFDM0MsMEVBS3VDO0FBRXZDLDhDQUEyQztBQUMzQywyREFBd0Q7QUFDeEQseUJBQTBCO0FBQzFCLHFFQUFrRTtBQUNsRSxrRUFBK0Q7QUFNL0QsTUFBYSx5QkFBMEIsU0FBUSxxQ0FBaUI7SUFTOUQsWUFDRSxPQUFpQyxFQUNqQyxRQUEyQixFQUMzQixZQUE0QixFQUM1QixTQUFpQixFQUNqQixZQUFvQixFQUNwQixPQUFlO1FBRWYsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQWhCM0IsZUFBVSxHQUFHLDBDQUFpQixDQUFDLFFBQVEsQ0FBQztRQUN4QyxlQUFVLEdBQUcscUJBQXFCLENBQUM7UUFDbkMsb0JBQWUsR0FBVywyQkFBWSxDQUFDLGdCQUFnQixDQUFDO1FBZXRELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFTSxNQUFNLENBQUMsd0JBQXdCLENBQUMsS0FBNkIsRUFBRSxPQUFvQztRQUN4RywrQ0FBc0IsQ0FBQyxpQ0FBaUMsQ0FDdEQsS0FBSyxFQUNMLE9BQU8sRUFDUCwwREFBMEQsRUFDMUQsMkRBQTJELEVBQzNELGtDQUFrQyxFQUNsQyxtQ0FBbUMsRUFDbkMsNENBQTRDLEVBQzVDLDZDQUE2QyxFQUM3QyxnRUFBZ0UsRUFDaEUsaUVBQWlF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