UNPKG

@broadcom/endevor-for-zowe-cli

Version:

Endevor Plug-in for Zowe CLI

244 lines 27.1 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.AbstractWorkspaceActionHandler = void 0; const imperative_1 = require("@zowe/imperative"); const api_1 = require("../../api"); const MergeUtils_1 = require("../../api/workspace/MergeUtils"); const HandlerUtils_1 = require("./HandlerUtils"); class AbstractWorkspaceActionHandler { process(commandParameters) { return __awaiter(this, void 0, void 0, function* () { var _a, _b, _c, _d; this.args = commandParameters.arguments; this.commandConsole = commandParameters.response.console; this.progressApi = commandParameters.response.progress; this.actionName = this.args._[1].trim().toUpperCase(); if (this.actionName.startsWith("SYNC") || this.actionName.startsWith("UNSYNC") || this.actionName.startsWith("MERGE")) { this.instance = api_1.EndevorRestUtils.setInstance(this.args); this.session = yield api_1.EndevorRestUtils.setupEndevorSession(this.args, true); api_1.EndevorRestUtils.failIfUsingV1(this.session); if (this.args["suppress-messages"] == null || !this.args["suppress-messages"]) { HandlerUtils_1.HandlerUtils.validateBasePath(this.session, this.commandConsole); } if (api_1.EndevorRestUtils.isThisV1(this.session)) { throw new imperative_1.ImperativeError({ msg: "[ERROR] " + this.actionName + " action is not supported when using version 1 of Endevor REST API" }); } if (this.args["suppress-messages"] == null || !this.args["suppress-messages"]) { commandParameters.response.console.log(HandlerUtils_1.HandlerUtils.getSessionNotification(this.session, this.instance)); if (this.actionName.startsWith("MERGE")) { if (this.args["merge-out-of-sync"]) { commandParameters.response.console.log(`[INFO] MERGE out of sync elements executed in location: ${this.args.environment}/${this.args["stage-number"]}/${this.args.system}/${this.args.subsystem} on element: ${this.args.element}.${this.args.type}`); } else { const fromLocation = { environment: (_a = this.args["merge-environment"]) !== null && _a !== void 0 ? _a : this.args.environment, stageNumber: (_b = this.args["merge-stage-number"]) !== null && _b !== void 0 ? _b : this.args["stage-number"], system: (_c = this.args["merge-system"]) !== null && _c !== void 0 ? _c : this.args.system, subsystem: (_d = this.args["merge-subsystem"]) !== null && _d !== void 0 ? _d : this.args.subsystem, type: this.args.type, element: this.args.element }; commandParameters.response.console.log(`[INFO] MERGE executed from location: ${fromLocation.environment}/${fromLocation.stageNumber}/${fromLocation.system}/${fromLocation.subsystem} to location: ${this.args.environment}/${this.args["stage-number"]}/${this.args.system}/${this.args.subsystem} on element: ${this.args.element}.${this.args.type}`); } } else { commandParameters.response.console.log(`[INFO] ${this.actionName} executed in location: ${this.args.environment}/${this.args["stage-number"]}/${this.args.system}/${this.args.subsystem} on element: ${this.args.element}.${this.args.type}`); } } } else { if (this.args["suppress-messages"] == null || !this.args["suppress-messages"]) { if (this.actionName.startsWith("CONFIRM")) { commandParameters.response.console.log(`[INFO] CONFIRM conflict resolution executed for ${this.args["workspace-file"]}`); } else { commandParameters.response.console.log(`[INFO] ${this.actionName} workspace executed`); } } } const response = yield this.sendRequest(); commandParameters.response.data.setObj(response); if (this.args["response-format-json"] != true) { this.handleResponse(response); } }); } handleResponse(response) { if (this.actionName != undefined && (this.actionName.startsWith("SYNC") || this.actionName.startsWith("MERGE"))) { this.printActionsReport(response); } for (const message of response.errorMessages) { this.commandConsole.log("[ERROR] " + message); } for (const message of response.warningMessages) { this.commandConsole.log("[WARN] " + message); } for (const message of response.infoMessages) { this.commandConsole.log("[INFO] " + message); } if (response.unresolvedMergeConflicts) { this.commandConsole.log("[INFO] Conflicts have been found and need to be manually resolved before Endevor can be updated. Local files have been updated with conflict annotation."); this.commandConsole.log("[INFO] Edit the files to resolve the conflicts, then use the following commands to confirm each conflict is resolved:"); this.commandConsole.log(" "); response.actions.forEach((action) => { if (action.statusDetailed == api_1.EndevorActionStatusDetailed.NOT_RUN_MANUAL_MERGE_IN_PROGRESS || action.statusDetailed == api_1.EndevorActionStatusDetailed.SUCCESS_MANUAL_MERGE_STARTED) this.commandConsole.log(" " + MergeUtils_1.MergeUtils.getMergeCommand(action.localFile)); }); this.commandConsole.log(" "); } } printActionsReport(response) { if (response.actions.length == 0) { return ""; } response.actions.forEach((action) => { if (action.action == api_1.EndevorActionType.LOCAL_DELETE) this.printSingleElementAction(action); }); response.actions.forEach((action) => { if (action.action == api_1.EndevorActionType.RENAME) this.printSingleElementAction(action); }); response.actions.forEach((action) => { if (action.action == api_1.EndevorActionType.RETRIEVE) this.printSingleElementAction(action); }); response.actions.forEach((action) => { if (action.action == api_1.EndevorActionType.CONFLICT) this.printSingleElementAction(action); }); response.actions.forEach((action) => { if (action.action == api_1.EndevorActionType.VALIDATE_SYNC) this.printSingleElementAction(action); }); response.actions.forEach((action) => { if (action.action == api_1.EndevorActionType.MERGE) this.printSingleElementAction(action); }); response.actions.forEach((action) => { if (action.action == api_1.EndevorActionType.ADD) this.printSingleElementAction(action); }); response.actions.forEach((action) => { if (action.action == api_1.EndevorActionType.UPDATE || action.action == api_1.EndevorActionType.UPDATE_WITH_SYNC) this.printSingleElementAction(action); }); response.actions.forEach((action) => { if (action.action == api_1.EndevorActionType.REMOTE_DELETE) this.printSingleElementAction(action); }); this.commandConsole.log("Messages:"); return ""; } printSingleElementAction(action) { let statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED; let statusExplanation = ""; switch (action.statusDetailed) { case api_1.EndevorActionStatusDetailed.NOT_RUN: statusExplanation = "not executed"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_YELLOW; break; case api_1.EndevorActionStatusDetailed.NOT_RUN_CCID_REQUIRED: statusExplanation = "not executed - CCID required"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_YELLOW; break; case api_1.EndevorActionStatusDetailed.NOT_RUN_COMMENT_REQUIRED: statusExplanation = "not executed - comment required"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_YELLOW; break; case api_1.EndevorActionStatusDetailed.NOT_RUN_CCID_COMMENT_REQUIRED: statusExplanation = "not executed - CCID & comment required"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_YELLOW; break; case api_1.EndevorActionStatusDetailed.NOT_RUN_MANUAL_MERGE_IN_PROGRESS: statusExplanation = "manual conflict resolution in progress"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_BLUE; break; case api_1.EndevorActionStatusDetailed.FAILURE: statusExplanation = "failed"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED; break; case api_1.EndevorActionStatusDetailed.FAILURE_FINGERPRINT_MISMATCH: statusExplanation = "failed - element change (fingerprint mismatch) during sync, re-enter the sync command"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED; break; case api_1.EndevorActionStatusDetailed.FAILURE_NOT_FOUND: statusExplanation = "failed - element change (not found) during sync, re-enter the sync command"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED; break; case api_1.EndevorActionStatusDetailed.FAILURE_STC_SHORTAGE: statusExplanation = "failed - server out of STC resources, retry"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED; break; case api_1.EndevorActionStatusDetailed.FAILURE_MAX_RC: statusExplanation = "failed - max RC exceeded"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED; break; case api_1.EndevorActionStatusDetailed.FAILURE_SIGNOUT: statusExplanation = "failed - signout failed"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED; break; case api_1.EndevorActionStatusDetailed.FAILURE_MERGE_LOCATION_INVALID: statusExplanation = "failed - invalid merge location specified"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED; break; case api_1.EndevorActionStatusDetailed.WARNING: statusExplanation = "successful with warning(s)"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_YELLOW; break; case api_1.EndevorActionStatusDetailed.SUCCESS: statusExplanation = "successful"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_GREEN; break; case api_1.EndevorActionStatusDetailed.SUCCESS_NO_CHANGE: statusExplanation = "successful - no changes detected"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_GREEN; break; case api_1.EndevorActionStatusDetailed.SUCCESS_AUTOMERGED: statusExplanation = "auto-merge successful"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_GREEN; break; case api_1.EndevorActionStatusDetailed.SUCCESS_MANUAL_MERGE_STARTED: statusExplanation = "manual conflict resolution started"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_BLUE; break; case api_1.EndevorActionStatusDetailed.SUCCESS_IN_SYNC: statusExplanation = "successful - element is already in sync"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_GREEN; break; case api_1.EndevorActionStatusDetailed.SUCCESS_OUT_OF_SYNC: statusExplanation = "successful - element is out of sync"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_GREEN; break; case api_1.EndevorActionStatusDetailed.SUCCESS_SYNC_DISABLED: statusExplanation = "successful, but sync in place is disabled in Endevor"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_YELLOW; break; default: api_1.EndevorUtils.failCompile(action.statusDetailed); } this.commandConsole.log(`${statusColor}${action.actionName} ${statusExplanation}${HandlerUtils_1.HandlerUtils.ANSI_COLOR_RESET}:`); this.commandConsole.log(` element: ${action.fullElementName}`); this.commandConsole.log(` type: ${action.type}`); this.commandConsole.log(` file: ${action.localFile}`); action.errorMessages.forEach((error) => { this.commandConsole.log(` ${error}`); }); } } exports.AbstractWorkspaceActionHandler = AbstractWorkspaceActionHandler; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RXb3Jrc3BhY2VBY3Rpb24uaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvdXRpbHMvQWJzdHJhY3RXb3Jrc3BhY2VBY3Rpb24uaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUF1QkEsaURBUTBCO0FBQzFCLG1DQVVtQjtBQUNuQiwrREFBNEQ7QUFDNUQsaURBQThDO0FBRTlDLE1BQXNCLDhCQUE4QjtJQVFyQyxPQUFPLENBQUMsaUJBQXFDOzs7WUFDeEQsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUM7WUFDeEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ3pELElBQUksQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN2RCxJQUFJLENBQUMsVUFBVSxHQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBWSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xFLElBQ0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUNuQyxDQUFDO2dCQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsc0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUEwQixDQUFDLENBQUM7Z0JBQzlFLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxzQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBeUIsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDaEcsc0JBQWdCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FB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