@broadcom/endevor-for-zowe-cli
Version:
Endevor Plug-in for Zowe CLI
216 lines • 24.3 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.EndevorSyncActionUpdate = void 0;
const lodash_1 = require("lodash");
const AddUpdElement_1 = require("../../elements/AddUpdElement");
const EndevorUtils_1 = require("../../utils/EndevorUtils");
const CacheUtils_1 = require("../CacheUtils");
const IEndevorWorkspaceEnums_1 = require("../doc/IEndevorWorkspaceEnums");
const HashUtils_1 = require("../HashUtils");
const WorkspaceUtils_1 = require("../WorkspaceUtils");
const EndevorSyncAction_1 = require("./EndevorSyncAction");
const fs = require("fs");
const EndevorSyncActionUtils_1 = require("./EndevorSyncActionUtils");
class EndevorSyncActionUpdate extends EndevorSyncAction_1.EndevorSyncAction {
constructor(element, location, isAdd, withSync, workspaceDir, charset) {
super(element, location);
this.actionType = IEndevorWorkspaceEnums_1.EndevorActionType.UPDATE;
this.actionName = "Update Element";
this.isAdd = isAdd;
this.withSync = withSync;
this.workspaceDir = workspaceDir;
this.charset = charset;
if (isAdd) {
this.actionType = IEndevorWorkspaceEnums_1.EndevorActionType.ADD;
this.actionName = "Add Element";
}
}
static composeActionsSummaryMsg(state, actions) {
EndevorSyncActionUtils_1.EndevorSyncActionUtils.composeActionsSummaryMsg(state, actions, "element updated", "elements updated", "element update failed", "element updates failed", "element update not executed", "element updates not executed");
}
performAction(session, instance, ccid, comment, optSignout, optOverrideSignout) {
return __awaiter(this, void 0, void 0, function* () {
if (!fs.existsSync(this.element.localFile)) {
this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_NOT_FOUND;
this.errorMessages.push("Local file not found:" + this.element.localFile);
return false;
}
const addUpdOptions = {
ccid: ccid,
comment: comment,
fingerprint: this.element.localElmVersion.fingerprint,
"from-file": this.element.localFile,
"override-signout": optOverrideSignout,
generate: false,
charset: this.charset,
"source-charset": this.element.codePage
};
if (this.withSync) {
addUpdOptions.sync = true;
addUpdOptions["sync-fingerprint"] = this.element.syncFingerprint;
}
try {
const restResponse = yield AddUpdElement_1.AddUpdElement.updElement(session, instance, this.location, addUpdOptions);
let notFound = false;
let noChanges = false;
let stcShortage = false;
let fingerprintMismatch = false;
let syncFingerprintMismatch = false;
let syncFeatureDisabled = false;
let oveSignNeeded = false;
if (restResponse.isResponseJSON) {
EndevorUtils_1.EndevorUtils.removeMessageTimestamps(restResponse.body.messages).forEach((message) => {
if (message.startsWith("API0000W ELEMENT NOT FOUND")) {
notFound = true;
}
if (message.startsWith("SMGR122W")) {
noChanges = true;
}
if (message.startsWith("EWS1111E")) {
stcShortage = true;
}
if (message.startsWith("C1G0410E")) {
fingerprintMismatch = true;
}
if (message.startsWith("C1G0411E")) {
syncFingerprintMismatch = true;
}
if (message.startsWith("C1G0413C")) {
syncFeatureDisabled = 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 (noChanges) {
this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.SUCCESS;
this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.SUCCESS_NO_CHANGE;
if (syncFeatureDisabled)
this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.SUCCESS_SYNC_DISABLED;
delete this.element.syncFingerprint;
const currentSha1 = yield HashUtils_1.HashUtils.getFileHash(this.element.localFile);
if (this.element.localFileVersion.sha1 != currentSha1) {
CacheUtils_1.CacheUtils.removeSha1File(this.element.localFileVersion);
yield CacheUtils_1.CacheUtils.addSha1FileFromFile(this.workspaceDir, this.location.environment, this.location.stageNumber, this.location.system, this.location.subsystem, this.element.localFileVersion, this.element.localFile);
}
this.element.localStatus = IEndevorWorkspaceEnums_1.ElementVersionStatus.INSYNC;
if (this.element.remoteStatus != IEndevorWorkspaceEnums_1.ElementVersionStatus.ENCODING_CHANGE) {
this.element.remoteStatus = IEndevorWorkspaceEnums_1.ElementVersionStatus.INSYNC;
}
return true;
}
if (stcShortage) {
this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_STC_SHORTAGE;
return false;
}
if (fingerprintMismatch) {
this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_FINGERPRINT_MISMATCH;
return false;
}
if (syncFingerprintMismatch) {
this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_FINGERPRINT_MISMATCH;
delete this.element.syncFingerprint;
return false;
}
if (oveSignNeeded) {
this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_SIGNOUT;
return false;
}
if (restResponse.body.returnCode > 8) {
this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE;
restResponse.body.messages.forEach((msg) => {
this.errorMessages.push(msg);
});
return false;
}
const fingerprint = restResponse.headers["fingerprint"];
if (fingerprint == null || fingerprint == this.element.localElmVersion.fingerprint) {
this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE;
restResponse.body.messages.forEach((msg) => {
this.errorMessages.push(msg);
});
return false;
}
CacheUtils_1.CacheUtils.removeSha1File(this.element.localFileVersion);
yield CacheUtils_1.CacheUtils.addSha1FileFromFile(this.workspaceDir, this.location.environment, this.location.stageNumber, this.location.system, this.location.subsystem, this.element.localFileVersion, this.element.localFile);
this.element.localStatus = IEndevorWorkspaceEnums_1.ElementVersionStatus.INSYNC;
if (this.element.remoteStatus != IEndevorWorkspaceEnums_1.ElementVersionStatus.ENCODING_CHANGE) {
this.element.remoteStatus = IEndevorWorkspaceEnums_1.ElementVersionStatus.INSYNC;
}
this.element.localElmVersion.fingerprint = fingerprint;
this.element.remoteElmVersion.fingerprint = fingerprint;
const metadataUpdated = yield this.listElementAfterUpdate(session, instance);
if (!metadataUpdated) {
this.element.remoteElmVersion = (0, lodash_1.cloneDeep)(WorkspaceUtils_1.WorkspaceUtils.EmptyWorkspaceElementVersion);
this.element.localElmVersion = (0, lodash_1.cloneDeep)(WorkspaceUtils_1.WorkspaceUtils.EmptyWorkspaceElementVersion);
}
this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.SUCCESS;
this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.SUCCESS;
if (syncFeatureDisabled)
this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.SUCCESS_SYNC_DISABLED;
delete this.element.syncFingerprint;
return true;
}
else {
this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE;
return false;
}
}
catch (err) {
this.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
this.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE;
this.errorMessages.push(`${err}`);
return false;
}
});
}
listElementAfterUpdate(session, instance) {
return __awaiter(this, void 0, void 0, function* () {
var _a, _b, _c, _d, _e;
const locationList = yield EndevorSyncActionUtils_1.EndevorSyncActionUtils.listElement(this, session, instance, this.location, false, true, true, false).catch(() => {
return null;
});
if (locationList == null)
return false;
if (locationList.length == 0) {
return false;
}
else if (this.element.localElmVersion.fingerprint == locationList[0].fingerprint) {
this.element.remoteElmVersion.fingerprint = locationList[0].fingerprint;
this.element.remoteElmVersion.ccid = (_a = locationList[0].elmLastLLCcid) !== null && _a !== void 0 ? _a : "";
this.element.remoteElmVersion.comment = (_b = locationList[0].elmLastLLComment) !== null && _b !== void 0 ? _b : "";
this.element.remoteElmVersion.userId = (_c = locationList[0].elmLastLLUsrid) !== null && _c !== void 0 ? _c : "";
this.element.remoteElmVersion.vvll = (_d = locationList[0].elmVVLL) !== null && _d !== void 0 ? _d : "";
this.element.remoteElmVersion.date = (_e = locationList[0].elmLastLLDate) !== null && _e !== void 0 ? _e : "";
this.element.localElmVersion = (0, lodash_1.cloneDeep)(this.element.remoteElmVersion);
return true;
}
return false;
});
}
}
exports.EndevorSyncActionUpdate = EndevorSyncActionUpdate;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW5kZXZvclN5bmNBY3Rpb25VcGRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL3dvcmtzcGFjZS9hY3Rpb25zL0VuZGV2b3JTeW5jQWN0aW9uVXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQXdCQSxtQ0FBbUM7QUFDbkMsZ0VBQTZEO0FBRzdELDJEQUF3RDtBQUN4RCw4Q0FBMkM7QUFDM0MsMEVBS3VDO0FBRXZDLDRDQUF5QztBQUN6QyxzREFBbUQ7QUFDbkQsMkRBQXdEO0FBQ3hELHlCQUEwQjtBQUUxQixxRUFBa0U7QUFRbEUsTUFBYSx1QkFBd0IsU0FBUSxxQ0FBaUI7SUFRNUQsWUFDRSxPQUFpQyxFQUNqQyxRQUEyQixFQUMzQixLQUFjLEVBQ2QsUUFBaUIsRUFDakIsWUFBb0IsRUFDcEIsT0FBZTtRQUVmLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFmM0IsZUFBVSxHQUFHLDBDQUFpQixDQUFDLE1BQU0sQ0FBQztRQUN0QyxlQUFVLEdBQUcsZ0JBQWdCLENBQUM7UUFlNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxVQUFVLEdBQUcsMENBQWlCLENBQUMsR0FBRyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRU0sTUFBTSxDQUFDLHdCQUF3QixDQUFDLEtBQTZCLEVBQUUsT0FBa0M7UUFDdEcsK0NBQXNCLENBQUMsd0JBQXdCLENBQzdDLEtBQUssRUFDTCxPQUFPLEVBQ1AsaUJBQWlCLEVBQ2pC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