UNPKG

gamelet-cli

Version:

Download project from code.gamelet.com, edit/test in vscode and sync back to server.

179 lines 12.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isSourceMerged = exports.sourceMerge = void 0; const file_1 = require("../utils/file"); const node_diff3_1 = require("node-diff3"); /** * file local base * 1. o o o diff3 * 2. o o x diff2 * 3. o x o use file if file != base * 4. x o o del local if local == base * 5. o x x use file * 6. x o x (do nothing) * 7. x x o (do nothing) * 8. x x x (do nothing) * */ exports.sourceMerge = function (filename, remoteFile, baseFile, folder) { let localFilepath = `${folder}/${filename}`; // 4. if (remoteFile === null && file_1.fileExists(localFilepath) && baseFile !== null) { return file_1.getFileString(localFilepath) .then(content => { if (content == baseFile) { console.log(`Source deleted: ${filename}`); return file_1.unlink(localFilepath); } else { return Promise.resolve(true); } }) .then(() => { return { code: 4, name: 'deleted', filename: filename, }; }); } // 3. if (remoteFile !== null && !file_1.fileExists(localFilepath) && baseFile !== null) { if (remoteFile != baseFile) { console.log(`Source created: ${filename}`); return file_1.saveData(localFilepath, remoteFile) .then(() => { return { code: 3, name: 'added', filename: filename, }; }); } else { return Promise.resolve({ code: 3, name: '', filename: filename, }); } } // 5. if (remoteFile !== null && !file_1.fileExists(localFilepath) && baseFile === null) { return file_1.saveData(localFilepath, remoteFile) .then(() => { return { code: 5, name: 'added', filename: filename, }; }); } if (remoteFile !== null && file_1.fileExists(localFilepath)) { return file_1.getFileString(localFilepath) .then(localContent => { let remote = remoteFile.split("\n"); let local = localContent.split("\n"); let conflictLine = local.findIndex(line => line.match(/^\s*(<<<|>>>)/)); if (conflictLine != -1) { return Promise.reject(file_1.vscodeLink(`${localFilepath}:${conflictLine + 1}`, `Resolve the conflict first:`)); } // 1. 2, if (baseFile == remoteFile) { return { code: 1, name: '', filename: filename, }; } let base = baseFile ? baseFile.split("\n") : []; if (!isSourceMergable(filename)) { // encoded content if (baseFile == localContent) { return file_1.saveData(localFilepath, remoteFile) .then(() => { console.log(`Source overwritten with remote: ${filename}`); return { code: 1, name: 'merged', filename: filename, }; }); } else if (baseFile == remoteFile) { return { code: 1, name: 'merged', filename: filename, }; } else { return file_1.saveData(localFilepath, remoteFile) .then(() => { console.log(`Source overwritten with remote: ${filename}`); return { code: 1, name: 'merged', filename: filename, }; }); } } let merge = node_diff3_1.mergeDiff3(local, base, remote, { label: { a: 'local', o: 'base', b: 'remote', }, excludeFalseConflicts: true }); let content = merge.result.join("\n"); return file_1.saveData(localFilepath, content) .then(() => { if (merge.conflict) { conflictLine = merge.result.findIndex(line => line.match(/^\s*(<<<|>>>)/)); console.error(file_1.vscodeLink(`${localFilepath}:${conflictLine + 1}`, `Merge conflict required:`)); return { code: 1, name: 'conflict', filename: filename, }; } else { console.log(`Source merged: ${filename}`); return { code: 1, name: 'merged', filename: filename, }; } }); }); } else { return Promise.resolve({ code: 6, name: '', filename: filename, }); } }; function isSourceMergable(filename) { return !filename.match(/(\.events|\.twmap|events\.schema\.json)$/); } exports.isSourceMerged = function (filename, remoteFile, baseFile, folder) { let localFilepath = `${folder}/${filename}`; if (remoteFile != baseFile) { return Promise.resolve(false); } if (file_1.fileExists(localFilepath)) { return file_1.getFileString(localFilepath) .then(localContent => { let local = localContent.split("\n"); let conflictLine = local.findIndex(line => line.match(/^\s*(<<<|>>>)/)); if (conflictLine != -1) { return Promise.reject(file_1.vscodeLink(`${localFilepath}:${conflictLine + 1}`, `Resolve the conflict first:`)); } else { return Promise.resolve(true); } }); } else { return Promise.resolve(true); } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dhbWVsZXQvbWVyZ2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHdDQUF3RjtBQUN4RiwyQ0FBd0M7QUFReEM7Ozs7Ozs7Ozs7O0dBV0c7QUFDVSxRQUFBLFdBQVcsR0FBRyxVQUFVLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU07SUFDdkUsSUFBSSxhQUFhLEdBQUcsR0FBRyxNQUFNLElBQUksUUFBUSxFQUFFLENBQUM7SUFFNUMsS0FBSztJQUNMLElBQUksVUFBVSxLQUFLLElBQUksSUFBSSxpQkFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7UUFDdkUsT0FBTyxvQkFBYSxDQUFDLGFBQWEsQ0FBQzthQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDWixJQUFJLE9BQU8sSUFBSSxRQUFRLEVBQUU7Z0JBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLFFBQVEsRUFBRSxDQUFDLENBQUE7Z0JBQzFDLE9BQU8sYUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFBO2FBQy9CO2lCQUFNO2dCQUNILE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNoQztRQUNMLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUCxPQUFPO2dCQUNILElBQUksRUFBRSxDQUFDO2dCQUNQLElBQUksRUFBRSxTQUFTO2dCQUNmLFFBQVEsRUFBRSxRQUFRO2FBQ3JCLENBQUE7UUFDTCxDQUFDLENBQUMsQ0FBQTtLQUNUO0lBRUQsS0FBSztJQUNMLElBQUksVUFBVSxLQUFLLElBQUksSUFBSSxDQUFDLGlCQUFVLENBQUMsYUFBYSxDQUFDLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtRQUN4RSxJQUFJLFVBQVUsSUFBSSxRQUFRLEVBQUU7WUFDeEIsT0FBTyxDQUFDLEdB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