UNPKG

find-node-modules

Version:

Return an array of all parent node_modules directories

866 lines (842 loc) 23.4 kB
"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