@flxbl-io/sfp
Version:
sfp is a CLI tool to help you manage your Salesforce projects in an artifact centric model
160 lines • 14.4 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path = __importStar(require("path"));
const fs = __importStar(require("fs-extra"));
const _ = __importStar(require("lodash"));
const core_1 = require("@salesforce/core");
const simple_git_1 = __importDefault(require("simple-git"));
const sfp_logger_1 = __importDefault(require("@flxbl-io/sfp-logger"));
const SEP = /\/|\\/;
const git = (0, simple_git_1.default)();
class GitDiffUtils {
async isFileIncludesContent(diffFile, content) {
let fileAsString = await git.show(['--raw', diffFile.revisionFrom]);
let result = fileAsString.includes(content);
return result;
}
async fetchFileListRevisionTo(revisionTo, logger) {
sfp_logger_1.default.log('Fetching file list from target revision ' + revisionTo, core_1.LoggerLevel.TRACE, logger);
this.gitTreeRevisionTo = [];
let revisionTree = await git.raw(['ls-tree', '-r', revisionTo]);
const sepRegex = /\n|\r/;
let lines = revisionTree.split(sepRegex);
for (let i = 0; i < lines.length; i++) {
if (lines[i] === '')
continue;
let fields = lines[i].split(/\t/);
let pathStr = fields[1];
let revisionSha = fields[0].split(/\s/)[2];
let fileMetadata = {
revision: revisionSha,
path: path.join('.', pathStr),
};
this.gitTreeRevisionTo.push(fileMetadata);
}
return this.gitTreeRevisionTo;
}
async copyFile(filePath, outputFolder, logger) {
sfp_logger_1.default.log(`Copying file ${filePath} from git to ${outputFolder}`, core_1.LoggerLevel.TRACE, logger);
if (fs.existsSync(path.join(outputFolder, filePath))) {
sfp_logger_1.default.log(`File ${filePath} already in output folder. `, core_1.LoggerLevel.TRACE, logger);
return;
}
let gitFiles = [];
this.gitTreeRevisionTo.forEach((file) => {
if (file.path === filePath) {
gitFiles.push(file);
}
});
if (gitFiles.length == 0)
throw new Error(`Unable to find the required file ${filePath} in Git.., Did you really commit the file?`);
let copyOutputFolder = outputFolder;
for (let i = 0; i < gitFiles.length; i++) {
outputFolder = copyOutputFolder;
let gitFile = gitFiles[i];
sfp_logger_1.default.log(`Associated file ${i}: ${gitFile.path} Revision: ${gitFile.revision}`, core_1.LoggerLevel.TRACE, logger);
let outputPath = path.join(outputFolder, gitFile.path);
let filePathParts = gitFile.path.split(SEP);
if (fs.existsSync(outputFolder) == false) {
fs.mkdirSync(outputFolder);
}
// Create folder structure
for (let i = 0; i < filePathParts.length - 1; i++) {
let folder = filePathParts[i].replace('"', '');
outputFolder = path.join(outputFolder, folder);
if (fs.existsSync(outputFolder) == false) {
fs.mkdirSync(outputFolder);
}
}
let fileContent = await git.binaryCatFile(['-p', gitFile.revision]);
fs.writeFileSync(outputPath, fileContent);
}
}
async copyFolder(folderPath, outputFolder, logger) {
sfp_logger_1.default.log(`Copying folder ${folderPath} from git to ${outputFolder}`, core_1.LoggerLevel.TRACE, logger);
if (fs.existsSync(path.join(outputFolder, folderPath))) {
sfp_logger_1.default.log(`Folder ${folderPath} already in output folder. `, core_1.LoggerLevel.TRACE, logger);
return;
}
this.gitTreeRevisionTo.forEach((file) => {
let fileToCompare = file.path;
if (fileToCompare.startsWith(folderPath)) {
this.copyFile(fileToCompare, outputFolder, logger);
}
});
}
getChangedOrAdded(list1, list2, key) {
let result = {
addedEdited: [],
deleted: [],
};
//Ensure array
if (!_.isNil(list1) && !Array.isArray(list1)) {
list1 = [list1];
}
if (!_.isNil(list2) && !Array.isArray(list2)) {
list2 = [list2];
}
if (_.isNil(list1) && !_.isNil(list2) && list2.length > 0) {
result.addedEdited.push(...list2);
}
if (_.isNil(list2) && !_.isNil(list1) && list1.length > 0) {
result.deleted.push(...list1);
}
if (!_.isNil(list1) && !_.isNil(list2)) {
list1.forEach((elem1) => {
let found = false;
for (let i = 0; i < list2.length; i++) {
let elem2 = list2[i];
if (elem1[key] === elem2[key]) {
//check if edited
if (!_.isEqual(elem1, elem2)) {
result.addedEdited.push(elem2);
}
found = true;
break;
}
}
if (!found) {
result.deleted.push(elem1);
}
});
//Check for added elements
let addedElement = _.differenceWith(list2, list1, function (element1, element2) {
return element1[key] === element2[key];
});
if (!_.isNil(addedElement)) {
result.addedEdited.push(...addedElement);
}
}
return result;
}
}
exports.default = GitDiffUtils;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2l0RGlmZlV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9naXQvR2l0RGlmZlV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE2QjtBQUM3Qiw2Q0FBK0I7QUFDL0IsMENBQTRCO0FBRTVCLDJDQUErQztBQUMvQyw0REFBa0Q7QUFDbEQsc0VBQXlEO0FBQ3pELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQztBQWNwQixNQUFNLEdBQUcsR0FBYyxJQUFBLG9CQUFTLEdBQUUsQ0FBQztBQUVuQyxNQUFxQixZQUFZO0lBTXRCLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxRQUF3QixFQUFFLE9BQWU7UUFDeEUsSUFBSSxZQUFZLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLElBQUksTUFBTSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVNLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxVQUFrQixFQUFFLE1BQWM7UUFDbkUsb0JBQVMsQ0FBQyxHQUFHLENBQUMsMENBQTBDLEdBQUcsVUFBVSxFQUFFLGtCQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxZQUFZLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN6QixJQUFJLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLEtBQUss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