find-node-modules
Version:
Return an array of all parent node_modules directories
866 lines (842 loc) • 23.4 kB
JavaScript
"use strict";
var cov_10pi1yxegw = function () {
var path = "/Users/callumacrae/Sites/find-node-modules/cz-cli/src/git/commit.js";
var hash = "defd01604f2d2bb8a3dd79cc53d71163bdb1e3fc";
var global = new Function("return this")();
var gcv = "__coverage__";
var coverageData = {
path: "/Users/callumacrae/Sites/find-node-modules/cz-cli/src/git/commit.js",
statementMap: {
"0": {
start: {
line: 15,
column: 15
},
end: {
line: 15,
column: 20
}
},
"1": {
start: {
line: 20,
column: 2
},
end: {
line: 81,
column: 3
}
},
"2": {
start: {
line: 21,
column: 15
},
end: {
line: 21,
column: 73
}
},
"3": {
start: {
line: 22,
column: 16
},
end: {
line: 25,
column: 6
}
},
"4": {
start: {
line: 27,
column: 4
},
end: {
line: 32,
column: 7
}
},
"5": {
start: {
line: 28,
column: 6
},
end: {
line: 28,
column: 25
}
},
"6": {
start: {
line: 28,
column: 18
},
end: {
line: 28,
column: 25
}
},
"7": {
start: {
line: 29,
column: 6
},
end: {
line: 29,
column: 20
}
},
"8": {
start: {
line: 31,
column: 6
},
end: {
line: 31,
column: 16
}
},
"9": {
start: {
line: 34,
column: 4
},
end: {
line: 51,
column: 7
}
},
"10": {
start: {
line: 35,
column: 6
},
end: {
line: 35,
column: 25
}
},
"11": {
start: {
line: 35,
column: 18
},
end: {
line: 35,
column: 25
}
},
"12": {
start: {
line: 36,
column: 6
},
end: {
line: 36,
column: 20
}
},
"13": {
start: {
line: 38,
column: 6
},
end: {
line: 50,
column: 7
}
},
"14": {
start: {
line: 39,
column: 8
},
end: {
line: 46,
column: 9
}
},
"15": {
start: {
line: 40,
column: 10
},
end: {
line: 45,
column: 14
}
},
"16": {
start: {
line: 47,
column: 8
},
end: {
line: 47,
column: 95
}
},
"17": {
start: {
line: 49,
column: 8
},
end: {
line: 49,
column: 19
}
},
"18": {
start: {
line: 53,
column: 27
},
end: {
line: 53,
column: 70
}
},
"19": {
start: {
line: 54,
column: 4
},
end: {
line: 80,
column: 5
}
},
"20": {
start: {
line: 55,
column: 17
},
end: {
line: 55,
column: 46
}
},
"21": {
start: {
line: 56,
column: 6
},
end: {
line: 63,
column: 7
}
},
"22": {
start: {
line: 57,
column: 8
},
end: {
line: 57,
column: 43
}
},
"23": {
start: {
line: 58,
column: 8
},
end: {
line: 58,
column: 19
}
},
"24": {
start: {
line: 60,
column: 8
},
end: {
line: 60,
column: 16
}
},
"25": {
start: {
line: 62,
column: 8
},
end: {
line: 62,
column: 22
}
},
"26": {
start: {
line: 67,
column: 6
},
end: {
line: 79,
column: 7
}
},
"27": {
start: {
line: 68,
column: 19
},
end: {
line: 68,
column: 49
}
},
"28": {
start: {
line: 69,
column: 8
},
end: {
line: 76,
column: 9
}
},
"29": {
start: {
line: 70,
column: 10
},
end: {
line: 70,
column: 45
}
},
"30": {
start: {
line: 71,
column: 10
},
end: {
line: 71,
column: 21
}
},
"31": {
start: {
line: 73,
column: 10
},
end: {
line: 73,
column: 18
}
},
"32": {
start: {
line: 75,
column: 10
},
end: {
line: 75,
column: 24
}
},
"33": {
start: {
line: 78,
column: 8
},
end: {
line: 78,
column: 16
}
}
},
fnMap: {
"0": {
name: "commit",
decl: {
start: {
line: 14,
column: 9
},
end: {
line: 14,
column: 15
}
},
loc: {
start: {
line: 14,
column: 51
},
end: {
line: 82,
column: 1
}
},
line: 14
},
"1": {
name: "(anonymous_1)",
decl: {
start: {
line: 27,
column: 22
},
end: {
line: 27,
column: 23
}
},
loc: {
start: {
line: 27,
column: 37
},
end: {
line: 32,
column: 5
}
},
line: 27
},
"2": {
name: "(anonymous_2)",
decl: {
start: {
line: 34,
column: 21
},
end: {
line: 34,
column: 22
}
},
loc: {
start: {
line: 34,
column: 45
},
end: {
line: 51,
column: 5
}
},
line: 34
}
},
branchMap: {
"0": {
loc: {
start: {
line: 20,
column: 2
},
end: {
line: 81,
column: 3
}
},
type: "if",
locations: [{
start: {
line: 20,
column: 2
},
end: {
line: 81,
column: 3
}
}, {
start: {
line: 20,
column: 2
},
end: {
line: 81,
column: 3
}
}],
line: 20
},
"1": {
loc: {
start: {
line: 21,
column: 53
},
end: {
line: 21,
column: 71
}
},
type: "binary-expr",
locations: [{
start: {
line: 21,
column: 53
},
end: {
line: 21,
column: 65
}
}, {
start: {
line: 21,
column: 69
},
end: {
line: 21,
column: 71
}
}],
line: 21
},
"2": {
loc: {
start: {
line: 24,
column: 13
},
end: {
line: 24,
column: 49
}
},
type: "cond-expr",
locations: [{
start: {
line: 24,
column: 29
},
end: {
line: 24,
column: 37
}
}, {
start: {
line: 24,
column: 40
},
end: {
line: 24,
column: 49
}
}],
line: 24
},
"3": {
loc: {
start: {
line: 28,
column: 6
},
end: {
line: 28,
column: 25
}
},
type: "if",
locations: [{
start: {
line: 28,
column: 6
},
end: {
line: 28,
column: 25
}
}, {
start: {
line: 28,
column: 6
},
end: {
line: 28,
column: 25
}
}],
line: 28
},
"4": {
loc: {
start: {
line: 35,
column: 6
},
end: {
line: 35,
column: 25
}
},
type: "if",
locations: [{
start: {
line: 35,
column: 6
},
end: {
line: 35,
column: 25
}
}, {
start: {
line: 35,
column: 6
},
end: {
line: 35,
column: 25
}
}],
line: 35
},
"5": {
loc: {
start: {
line: 38,
column: 6
},
end: {
line: 50,
column: 7
}
},
type: "if",
locations: [{
start: {
line: 38,
column: 6
},
end: {
line: 50,
column: 7
}
}, {
start: {
line: 38,
column: 6
},
end: {
line: 50,
column: 7
}
}],
line: 38
},
"6": {
loc: {
start: {
line: 39,
column: 8
},
end: {
line: 46,
column: 9
}
},
type: "if",
locations: [{
start: {
line: 39,
column: 8
},
end: {
line: 46,
column: 9
}
}, {
start: {
line: 39,
column: 8
},
end: {
line: 46,
column: 9
}
}],
line: 39
}
},
s: {
"0": 0,
"1": 0,
"2": 0,
"3": 0,
"4": 0,
"5": 0,
"6": 0,
"7": 0,
"8": 0,
"9": 0,
"10": 0,
"11": 0,
"12": 0,
"13": 0,
"14": 0,
"15": 0,
"16": 0,
"17": 0,
"18": 0,
"19": 0,
"20": 0,
"21": 0,
"22": 0,
"23": 0,
"24": 0,
"25": 0,
"26": 0,
"27": 0,
"28": 0,
"29": 0,
"30": 0,
"31": 0,
"32": 0,
"33": 0
},
f: {
"0": 0,
"1": 0,
"2": 0
},
b: {
"0": [0, 0],
"1": [0, 0],
"2": [0, 0],
"3": [0, 0],
"4": [0, 0],
"5": [0, 0],
"6": [0, 0]
},
_coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
hash: "defd01604f2d2bb8a3dd79cc53d71163bdb1e3fc"
};
var coverage = global[gcv] || (global[gcv] = {});
if (coverage[path] && coverage[path].hash === hash) {
return coverage[path];
}
return coverage[path] = coverageData;
}();
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.commit = commit;
var _child_process = require("child_process");
var _path = _interopRequireDefault(require("path"));
var _fs = require("fs");
var _dedent = _interopRequireDefault(require("dedent"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Asynchronously git commit at a given path with a message
*/
function commit(repoPath, message, options, done) {
cov_10pi1yxegw.f[0]++;
let called = (cov_10pi1yxegw.s[0]++, false); // commit the file by spawning a git process, unless the --hook
// option was provided. in that case, write the commit message into
// the .git/COMMIT_EDITMSG file
cov_10pi1yxegw.s[1]++;
if (!options.hookMode) {
cov_10pi1yxegw.b[0][0]++;
let args = (cov_10pi1yxegw.s[2]++, ['commit', '-m', (0, _dedent.default)(message), ...((cov_10pi1yxegw.b[1][0]++, options.args) || (cov_10pi1yxegw.b[1][1]++, []))]);
let child = (cov_10pi1yxegw.s[3]++, (0, _child_process.spawn)('git', args, {
cwd: repoPath,
stdio: options.quiet ? (cov_10pi1yxegw.b[2][0]++, 'ignore') : (cov_10pi1yxegw.b[2][1]++, 'inherit')
}));
cov_10pi1yxegw.s[4]++;
child.on('error', function (err) {
cov_10pi1yxegw.f[1]++;
cov_10pi1yxegw.s[5]++;
if (called) {
cov_10pi1yxegw.b[3][0]++;
cov_10pi1yxegw.s[6]++;
return;
} else {
cov_10pi1yxegw.b[3][1]++;
}
cov_10pi1yxegw.s[7]++;
called = true;
cov_10pi1yxegw.s[8]++;
done(err);
});
cov_10pi1yxegw.s[9]++;
child.on('exit', function (code, signal) {
cov_10pi1yxegw.f[2]++;
cov_10pi1yxegw.s[10]++;
if (called) {
cov_10pi1yxegw.b[4][0]++;
cov_10pi1yxegw.s[11]++;
return;
} else {
cov_10pi1yxegw.b[4][1]++;
}
cov_10pi1yxegw.s[12]++;
called = true;
cov_10pi1yxegw.s[13]++;
if (code) {
cov_10pi1yxegw.b[5][0]++;
cov_10pi1yxegw.s[14]++;
if (code === 128) {
cov_10pi1yxegw.b[6][0]++;
cov_10pi1yxegw.s[15]++;
console.warn(`
Git exited with code 128. Did you forget to run:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
`);
} else {
cov_10pi1yxegw.b[6][1]++;
}
cov_10pi1yxegw.s[16]++;
done(Object.assign(new Error(`git exited with error code ${code}`), {
code,
signal
}));
} else {
cov_10pi1yxegw.b[5][1]++;
cov_10pi1yxegw.s[17]++;
done(null);
}
});
} else {
cov_10pi1yxegw.b[0][1]++;
const commitFilePath = (cov_10pi1yxegw.s[18]++, _path.default.join(repoPath, '/.git/COMMIT_EDITMSG'));
cov_10pi1yxegw.s[19]++;
try {
const fd = (cov_10pi1yxegw.s[20]++, (0, _fs.openSync)(commitFilePath, 'w'));
cov_10pi1yxegw.s[21]++;
try {
cov_10pi1yxegw.s[22]++;
(0, _fs.writeFileSync)(fd, (0, _dedent.default)(message));
cov_10pi1yxegw.s[23]++;
done(null);
} catch (e) {
cov_10pi1yxegw.s[24]++;
done(e);
} finally {
cov_10pi1yxegw.s[25]++;
(0, _fs.closeSync)(fd);
}
} catch (e) {
cov_10pi1yxegw.s[26]++;
// windows doesn't allow opening existing hidden files
// in 'w' mode... but it does let you do 'r+'!
try {
const fd = (cov_10pi1yxegw.s[27]++, (0, _fs.openSync)(commitFilePath, 'r+'));
cov_10pi1yxegw.s[28]++;
try {
cov_10pi1yxegw.s[29]++;
(0, _fs.writeFileSync)(fd, (0, _dedent.default)(message));
cov_10pi1yxegw.s[30]++;
done(null);
} catch (e) {
cov_10pi1yxegw.s[31]++;
done(e);
} finally {
cov_10pi1yxegw.s[32]++;
(0, _fs.closeSync)(fd);
}
} catch (e) {
cov_10pi1yxegw.s[33]++;
done(e);
}
}
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbW1pdC5qcyJdLCJuYW1lcyI6WyJjb21taXQiLCJyZXBvUGF0aCIsIm1lc3NhZ2UiLCJvcHRpb25zIiwiZG9uZSIsImNhbGxlZCIsImhvb2tNb2RlIiwiYXJncyIsImNoaWxkIiwiY3dkIiwic3RkaW8iLCJxdWlldCIsIm9uIiwiZXJyIiwiY29kZSIsInNpZ25hbCIsImNvbnNvbGUiLCJ3YXJuIiwiT2JqZWN0IiwiYXNzaWduIiwiRXJyb3IiLCJjb21taXRGaWxlUGF0aCIsInBhdGgiLCJqb2luIiwiZmQiLCJlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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VTtBQUFBOztBQUNWO0FBQ0E7QUFDQSxVQUFJO0FBQ0YsY0FBTUQsRUFBRSw0QkFBRyxrQkFBU0gsY0FBVCxFQUF5QixJQUF6QixDQUFILENBQVI7QUFERTs7QUFFRixZQUFJO0FBQUE7QUFDRixpQ0FBY0csRUFBZCxFQUFrQixxQkFBT3RCLE9BQVAsQ0FBbEI7QUFERTtBQUVGRSxVQUFBQSxJQUFJLENBQUMsSUFBRCxDQUFKO0FBQ0QsU0FIRCxDQUdFLE9BQU9xQixDQUFQLEVBQVU7QUFBQTtBQUNWckIsVUFBQUEsSUFBSSxDQUFDcUIsQ0FBRCxDQUFKO0FBQ0QsU0FMRCxTQUtVO0FBQUE7QUFDUiw2QkFBVUQsRUFBVjtBQUNEO0FBQ0YsT0FWRCxDQVVFLE9BQU9DLENBQVAsRUFBVTtBQUFBO0FBQ1ZyQixRQUFBQSxJQUFJLENBQUNxQixDQUFELENBQUo7QUFDRDtBQUNGO0FBQ0Y7QUFDRiIsInNvdXJjZVJvb3QiOiIvVXNlcnMvY2FsbHVtYWNyYWUvU2l0ZXMvZmluZC1ub2RlLW1vZHVsZXMvY3otY2xpL3NyYy9naXQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHsgd3JpdGVGaWxlU3luYywgb3BlblN5bmMsIGNsb3NlU3luYyB9IGZyb20gJ2ZzJztcblxuaW1wb3J0IGRlZGVudCBmcm9tICdkZWRlbnQnO1xuXG5leHBvcnQgeyBjb21taXQgfTtcblxuLyoqXG4gKiBBc3luY2hyb25vdXNseSBnaXQgY29tbWl0IGF0IGEgZ2l2ZW4gcGF0aCB3aXRoIGEgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBjb21taXQgKHJlcG9QYXRoLCBtZXNzYWdlLCBvcHRpb25zLCBkb25lKSB7XG4gIGxldCBjYWxsZWQgPSBmYWxzZTtcblxuICAvLyBjb21taXQgdGhlIGZpbGUgYnkgc3Bhd25pbmcgYSBnaXQgcHJvY2VzcywgdW5sZXNzIHRoZSAtLWhvb2tcbiAgLy8gb3B0aW9uIHdhcyBwcm92aWRlZC4gaW4gdGhhdCBjYXNlLCB3cml0ZSB0aGUgY29tbWl0IG1lc3NhZ2UgaW50b1xuICAvLyB0aGUgLmdpdC9DT01NSVRfRURJVE1TRyBmaWxlXG4gIGlmICghb3B0aW9ucy5ob29rTW9kZSkge1xuICAgIGxldCBhcmdzID0gWydjb21taXQnLCAnLW0nLCBkZWRlbnQobWVzc2FnZSksIC4uLihvcHRpb25zLmFyZ3MgfHwgW10pXTtcbiAgICBsZXQgY2hpbGQgPSBzcGF3bignZ2l0JywgYXJncywge1xuICAgICAgY3dkOiByZXBvUGF0aCxcbiAgICAgIHN0ZGlvOiBvcHRpb25zLnF1aWV0ID8gJ2lnbm9yZScgOiAnaW5oZXJpdCdcbiAgICB9KTtcblxuICAgIGNoaWxkLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChjYWxsZWQpIHJldHVybjtcbiAgICAgIGNhbGxlZCA9IHRydWU7XG5cbiAgICAgIGRvbmUoZXJyKTtcbiAgICB9KTtcblxuICAgIGNoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUsIHNpZ25hbCkge1xuICAgICAgaWYgKGNhbGxlZCkgcmV0dXJuO1xuICAgICAgY2FsbGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKGNvZGUpIHtcbiAgICAgICAgaWYgKGNvZGUgPT09IDEyOCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgXG4gICAgICAgICAgICBHaXQgZXhpdGVkIHdpdGggY29kZSAxMjguIERpZCB5b3UgZm9yZ2V0IHRvIHJ1bjpcblxuICAgICAgICAgICAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJ5b3VAZXhhbXBsZS5jb21cIlxuICAgICAgICAgICAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4gICAgICAgICAgICBgKVxuICAgICAgICB9XG4gICAgICAgIGRvbmUoT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoYGdpdCBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICR7Y29kZX1gKSwgeyBjb2RlLCBzaWduYWwgfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9uZShudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjb21taXRGaWxlUGF0aCA9IHBhdGguam9pbihyZXBvUGF0aCwgJy8uZ2l0L0NPTU1JVF9FRElUTVNHJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZkID0gb3BlblN5bmMoY29tbWl0RmlsZVBhdGgsICd3Jyk7XG4gICAgICB0cnkge1xuICAgICAgICB3cml0ZUZpbGVTeW5jKGZkLCBkZWRlbnQobWVzc2FnZSkpO1xuICAgICAgICBkb25lKG51bGwpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkb25lKGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY2xvc2VTeW5jKGZkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyB3aW5kb3dzIGRvZXNuJ3QgYWxsb3cgb3BlbmluZyBleGlzdGluZyBoaWRkZW4gZmlsZXNcbiAgICAgIC8vIGluICd3JyBtb2RlLi4uIGJ1dCBpdCBkb2VzIGxldCB5b3UgZG8gJ3IrJyFcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZkID0gb3BlblN5bmMoY29tbWl0RmlsZVBhdGgsICdyKycpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHdyaXRlRmlsZVN5bmMoZmQsIGRlZGVudChtZXNzYWdlKSk7XG4gICAgICAgICAgZG9uZShudWxsKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgY2xvc2VTeW5jKGZkKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkb25lKGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19