bit-bin
Version:
<a href="https://opensource.org/licenses/Apache-2.0"><img alt="apache" src="https://img.shields.io/badge/License-Apache%202.0-blue.svg"></a> <a href="https://github.com/teambit/bit/blob/master/CONTRIBUTING.md"><img alt="prs" src="https://img.shields.io/b
111 lines (86 loc) • 2.62 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _bluebird() {
const data = require("bluebird");
_bluebird = function () {
return data;
};
return data;
}
function _execa() {
const data = _interopRequireDefault(require("execa"));
_execa = function () {
return data;
};
return data;
}
function _gitNotFound() {
const data = _interopRequireDefault(require("./git/exceptions/git-not-found"));
_gitNotFound = function () {
return data;
};
return data;
}
function _gitExecutable() {
const data = _interopRequireDefault(require("./git/git-executable"));
_gitExecutable = function () {
return data;
};
return data;
}
function _logger() {
const data = _interopRequireDefault(require("../logger/logger"));
_logger = function () {
return data;
};
return data;
}
/**
* use git `merge-file` command. From the command help:
* `git merge-file <current-file> <base-file> <other-file>
* git merge-file incorporates all changes that lead from the <base-file> to <other-file> into
* <current-file>. The result ordinarily goes into <current-file>.`
*
* Here, we are not going to write the result into current-file. Instead, we'll use the "-p" flag,
* to just return the results.
*/
var _default = /*#__PURE__*/function () {
var _mergeFiles = (0, _bluebird().coroutine)(function* ({
filePath,
currentFile,
baseFile,
otherFile
}) {
const mergeResult = {
filePath,
output: null,
conflict: null
};
const gitExecutablePath = (0, _gitExecutable().default)();
try {
const result = yield (0, _execa().default)('git', ['merge-file', '-L', currentFile.label, '-L', 'Base File', '-L', otherFile.label, currentFile.path, baseFile.path, otherFile.path, '-p']);
mergeResult.output = result.stdout;
return mergeResult;
} catch (err) {
if (err.exitCode && Number.isInteger(err.exitCode) && err.stdout) {
// merge has been succeeded, return the diff results.
mergeResult.conflict = err.stdout;
return mergeResult;
}
if (err.exitCodeName === 'ENOENT') {
_logger().default.error(`failed running Git at ${gitExecutablePath}. full command: ${err.cmd}`);
throw new (_gitNotFound().default)(gitExecutablePath, err);
}
throw err;
}
});
function mergeFiles(_x) {
return _mergeFiles.apply(this, arguments);
}
return mergeFiles;
}();
exports.default = _default;
;