gamelet-cli
Version:
Download project from code.gamelet.com, edit/test in vscode and sync back to server.
179 lines • 12.9 kB
JavaScript
;
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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