@broadcom/endevor-for-zowe-cli
Version:
Endevor Plug-in for Zowe CLI
244 lines • 27.1 kB
JavaScript
"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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