vitest 0.22.1 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +29 -29
- package/dist/browser.d.ts +5 -4
- package/dist/browser.mjs +11 -9
- package/dist/{chunk-api-setup.377c28aa.mjs → chunk-api-setup.5fc06d1d.mjs} +90 -87
- package/dist/{chunk-constants.71e8a211.mjs → chunk-constants.6196597b.mjs} +0 -0
- package/dist/{chunk-integrations-coverage.d205bd87.mjs → chunk-env-node.ceb43f1c.mjs} +31 -179
- package/dist/{chunk-install-pkg.3aa3eae6.mjs → chunk-install-pkg.e081fc1b.mjs} +3 -3
- package/dist/chunk-integrations-coverage.99c020eb.mjs +166 -0
- package/dist/{chunk-integrations-globals.60af7da3.mjs → chunk-integrations-globals.ef598c23.mjs} +6 -7
- package/dist/{chunk-magic-string.efe26975.mjs → chunk-magic-string.56b2b543.mjs} +30 -10
- package/dist/{chunk-mock-date.304e29b1.mjs → chunk-mock-date.0d86eaa5.mjs} +26 -5
- package/dist/{chunk-node-git.9a7e3153.mjs → chunk-node-git.6f289b0a.mjs} +18 -12
- package/dist/{chunk-runtime-chain.be610650.mjs → chunk-runtime-chain.2af36ddf.mjs} +507 -173
- package/dist/{chunk-runtime-error.1104e45a.mjs → chunk-runtime-error.ed9b4f70.mjs} +206 -75
- package/dist/{chunk-runtime-hooks.5d7073db.mjs → chunk-runtime-hooks.75ce0575.mjs} +18 -12
- package/dist/{chunk-runtime-mocker.49d21aa6.mjs → chunk-runtime-mocker.fc76f21d.mjs} +17 -10
- package/dist/{chunk-runtime-rpc.57586b73.mjs → chunk-runtime-rpc.3fe371e9.mjs} +1 -2
- package/dist/{chunk-utils-source-map.bbf3ad19.mjs → chunk-utils-source-map.70ee97e1.mjs} +11 -5
- package/dist/{chunk-vite-node-client.cddda63d.mjs → chunk-vite-node-client.74ebe3d5.mjs} +55 -13
- package/dist/{chunk-vite-node-debug.536c4c5b.mjs → chunk-vite-node-debug.2d8a1dc3.mjs} +1 -1
- package/dist/{chunk-vite-node-externalize.c843f497.mjs → chunk-vite-node-externalize.41bf722e.mjs} +483 -197
- package/dist/{chunk-vite-node-utils.b432150c.mjs → chunk-vite-node-utils.68573626.mjs} +24 -40
- package/dist/cli-wrapper.mjs +21 -17
- package/dist/cli.mjs +23 -15
- package/dist/config.cjs +2 -2
- package/dist/config.d.ts +4 -3
- package/dist/config.mjs +2 -2
- package/dist/entry.mjs +19 -14
- package/dist/environments.d.ts +23 -0
- package/dist/environments.mjs +3 -0
- package/dist/{global-fe52f84b.d.ts → global-ea084c9f.d.ts} +135 -19
- package/dist/{index-ea17aa0c.d.ts → index-5f09f4d0.d.ts} +3 -2
- package/dist/index.d.ts +6 -5
- package/dist/index.mjs +6 -7
- package/dist/loader.mjs +3 -4
- package/dist/node.d.ts +5 -4
- package/dist/node.mjs +14 -12
- package/dist/suite.mjs +5 -6
- package/dist/vendor-index.0557b03a.mjs +147 -0
- package/dist/{vendor-index.9d9196cc.mjs → vendor-index.13e3bda3.mjs} +0 -0
- package/dist/{vendor-index.fbec8a81.mjs → vendor-index.4aeeb598.mjs} +2 -2
- package/dist/{vendor-index.2ae8040a.mjs → vendor-index.62ce5c33.mjs} +0 -0
- package/dist/{vendor-index.29636037.mjs → vendor-index.731a22f2.mjs} +0 -0
- package/dist/worker.mjs +17 -15
- package/package.json +17 -10
- package/dist/chunk-utils-global.fa20c2f6.mjs +0 -5
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { importModule } from 'local-pkg';
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
How it works:
|
|
5
|
+
`this.#head` is an instance of `Node` which keeps track of its current value and nests another instance of `Node` that keeps the value that comes after it. When a value is provided to `.enqueue()`, the code needs to iterate through `this.#head`, going deeper and deeper to find the last value. However, iterating through every single item is slow. This problem is solved by saving a reference to the last value as `this.#tail` so that it can reference it to add a new value.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
class Node {
|
|
9
|
+
value;
|
|
10
|
+
next;
|
|
11
|
+
|
|
12
|
+
constructor(value) {
|
|
13
|
+
this.value = value;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
class Queue {
|
|
18
|
+
#head;
|
|
19
|
+
#tail;
|
|
20
|
+
#size;
|
|
21
|
+
|
|
22
|
+
constructor() {
|
|
23
|
+
this.clear();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
enqueue(value) {
|
|
27
|
+
const node = new Node(value);
|
|
28
|
+
|
|
29
|
+
if (this.#head) {
|
|
30
|
+
this.#tail.next = node;
|
|
31
|
+
this.#tail = node;
|
|
32
|
+
} else {
|
|
33
|
+
this.#head = node;
|
|
34
|
+
this.#tail = node;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
this.#size++;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
dequeue() {
|
|
41
|
+
const current = this.#head;
|
|
42
|
+
if (!current) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
this.#head = this.#head.next;
|
|
47
|
+
this.#size--;
|
|
48
|
+
return current.value;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
clear() {
|
|
52
|
+
this.#head = undefined;
|
|
53
|
+
this.#tail = undefined;
|
|
54
|
+
this.#size = 0;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
get size() {
|
|
58
|
+
return this.#size;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
* [Symbol.iterator]() {
|
|
62
|
+
let current = this.#head;
|
|
63
|
+
|
|
64
|
+
while (current) {
|
|
65
|
+
yield current.value;
|
|
66
|
+
current = current.next;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function pLimit(concurrency) {
|
|
72
|
+
if (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {
|
|
73
|
+
throw new TypeError('Expected `concurrency` to be a number from 1 and up');
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const queue = new Queue();
|
|
77
|
+
let activeCount = 0;
|
|
78
|
+
|
|
79
|
+
const next = () => {
|
|
80
|
+
activeCount--;
|
|
81
|
+
|
|
82
|
+
if (queue.size > 0) {
|
|
83
|
+
queue.dequeue()();
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const run = async (fn, resolve, args) => {
|
|
88
|
+
activeCount++;
|
|
89
|
+
|
|
90
|
+
const result = (async () => fn(...args))();
|
|
91
|
+
|
|
92
|
+
resolve(result);
|
|
93
|
+
|
|
94
|
+
try {
|
|
95
|
+
await result;
|
|
96
|
+
} catch {}
|
|
97
|
+
|
|
98
|
+
next();
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const enqueue = (fn, resolve, args) => {
|
|
102
|
+
queue.enqueue(run.bind(undefined, fn, resolve, args));
|
|
103
|
+
|
|
104
|
+
(async () => {
|
|
105
|
+
// This function needs to wait until the next microtask before comparing
|
|
106
|
+
// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously
|
|
107
|
+
// when the run function is dequeued and called. The comparison in the if-statement
|
|
108
|
+
// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.
|
|
109
|
+
await Promise.resolve();
|
|
110
|
+
|
|
111
|
+
if (activeCount < concurrency && queue.size > 0) {
|
|
112
|
+
queue.dequeue()();
|
|
113
|
+
}
|
|
114
|
+
})();
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
const generator = (fn, ...args) => new Promise(resolve => {
|
|
118
|
+
enqueue(fn, resolve, args);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
Object.defineProperties(generator, {
|
|
122
|
+
activeCount: {
|
|
123
|
+
get: () => activeCount,
|
|
124
|
+
},
|
|
125
|
+
pendingCount: {
|
|
126
|
+
get: () => queue.size,
|
|
127
|
+
},
|
|
128
|
+
clearQueue: {
|
|
129
|
+
value: () => {
|
|
130
|
+
queue.clear();
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
return generator;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const CoverageProviderMap = {
|
|
139
|
+
c8: "@vitest/coverage-c8",
|
|
140
|
+
istanbul: "@vitest/coverage-istanbul"
|
|
141
|
+
};
|
|
142
|
+
async function resolveCoverageProvider(provider) {
|
|
143
|
+
if (typeof provider === "string") {
|
|
144
|
+
const pkg = CoverageProviderMap[provider];
|
|
145
|
+
if (!pkg)
|
|
146
|
+
throw new Error(`Unknown coverage provider: ${provider}`);
|
|
147
|
+
return await importModule(pkg);
|
|
148
|
+
} else {
|
|
149
|
+
return provider;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
async function getCoverageProvider(options) {
|
|
153
|
+
if ((options == null ? void 0 : options.enabled) && (options == null ? void 0 : options.provider)) {
|
|
154
|
+
const { getProvider } = await resolveCoverageProvider(options.provider);
|
|
155
|
+
return await getProvider();
|
|
156
|
+
}
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
async function takeCoverageInsideWorker(options) {
|
|
160
|
+
if (options.enabled && options.provider) {
|
|
161
|
+
const { takeCoverage } = await resolveCoverageProvider(options.provider);
|
|
162
|
+
return await (takeCoverage == null ? void 0 : takeCoverage());
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export { CoverageProviderMap as C, getCoverageProvider as g, pLimit as p, takeCoverageInsideWorker as t };
|
package/dist/{chunk-integrations-globals.60af7da3.mjs → chunk-integrations-globals.ef598c23.mjs}
RENAMED
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
import { k as globalApis } from './chunk-constants.
|
|
2
|
-
import { i as index } from './chunk-runtime-hooks.
|
|
1
|
+
import { k as globalApis } from './chunk-constants.6196597b.mjs';
|
|
2
|
+
import { i as index } from './chunk-runtime-hooks.75ce0575.mjs';
|
|
3
3
|
import 'tty';
|
|
4
4
|
import 'url';
|
|
5
5
|
import 'path';
|
|
6
|
-
import './chunk-runtime-chain.
|
|
6
|
+
import './chunk-runtime-chain.2af36ddf.mjs';
|
|
7
7
|
import 'util';
|
|
8
|
-
import './chunk-mock-date.
|
|
8
|
+
import './chunk-mock-date.0d86eaa5.mjs';
|
|
9
9
|
import 'local-pkg';
|
|
10
10
|
import 'chai';
|
|
11
11
|
import './vendor-_commonjsHelpers.4da45ef5.mjs';
|
|
12
|
-
import './chunk-runtime-rpc.
|
|
13
|
-
import './chunk-utils-global.fa20c2f6.mjs';
|
|
12
|
+
import './chunk-runtime-rpc.3fe371e9.mjs';
|
|
14
13
|
import './chunk-utils-timers.b48455ed.mjs';
|
|
15
14
|
import 'fs';
|
|
16
|
-
import './chunk-utils-source-map.
|
|
15
|
+
import './chunk-utils-source-map.70ee97e1.mjs';
|
|
17
16
|
import './spy.mjs';
|
|
18
17
|
import 'tinyspy';
|
|
19
18
|
|
|
@@ -219,15 +219,20 @@ class Chunk {
|
|
|
219
219
|
}
|
|
220
220
|
}
|
|
221
221
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
if (typeof
|
|
226
|
-
|
|
227
|
-
} else
|
|
228
|
-
|
|
222
|
+
function getBtoa () {
|
|
223
|
+
if (typeof window !== 'undefined' && typeof window.btoa === 'function') {
|
|
224
|
+
return (str) => window.btoa(unescape(encodeURIComponent(str)));
|
|
225
|
+
} else if (typeof Buffer === 'function') {
|
|
226
|
+
return (str) => Buffer.from(str, 'utf-8').toString('base64');
|
|
227
|
+
} else {
|
|
228
|
+
return () => {
|
|
229
|
+
throw new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');
|
|
230
|
+
};
|
|
231
|
+
}
|
|
229
232
|
}
|
|
230
233
|
|
|
234
|
+
const btoa = /*#__PURE__*/ getBtoa();
|
|
235
|
+
|
|
231
236
|
class SourceMap {
|
|
232
237
|
constructor(properties) {
|
|
233
238
|
this.version = 3;
|
|
@@ -419,7 +424,7 @@ class MagicString {
|
|
|
419
424
|
indentExclusionRanges: { writable: true, value: options.indentExclusionRanges },
|
|
420
425
|
sourcemapLocations: { writable: true, value: new BitSet() },
|
|
421
426
|
storedNames: { writable: true, value: {} },
|
|
422
|
-
indentStr: { writable: true, value:
|
|
427
|
+
indentStr: { writable: true, value: undefined },
|
|
423
428
|
});
|
|
424
429
|
|
|
425
430
|
this.byStart[0] = chunk;
|
|
@@ -549,7 +554,19 @@ class MagicString {
|
|
|
549
554
|
return new SourceMap(this.generateDecodedMap(options));
|
|
550
555
|
}
|
|
551
556
|
|
|
557
|
+
_ensureindentStr() {
|
|
558
|
+
if (this.indentStr === undefined) {
|
|
559
|
+
this.indentStr = guessIndent(this.original);
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
_getRawIndentString() {
|
|
564
|
+
this._ensureindentStr();
|
|
565
|
+
return this.indentStr;
|
|
566
|
+
}
|
|
567
|
+
|
|
552
568
|
getIndentString() {
|
|
569
|
+
this._ensureindentStr();
|
|
553
570
|
return this.indentStr === null ? '\t' : this.indentStr;
|
|
554
571
|
}
|
|
555
572
|
|
|
@@ -561,7 +578,10 @@ class MagicString {
|
|
|
561
578
|
indentStr = undefined;
|
|
562
579
|
}
|
|
563
580
|
|
|
564
|
-
|
|
581
|
+
if (indentStr === undefined) {
|
|
582
|
+
this._ensureindentStr();
|
|
583
|
+
indentStr = this.indentStr || '\t';
|
|
584
|
+
}
|
|
565
585
|
|
|
566
586
|
if (indentStr === '') return this; // noop
|
|
567
587
|
|
|
@@ -1277,7 +1297,7 @@ class Bundle {
|
|
|
1277
1297
|
const indentStringCounts = {};
|
|
1278
1298
|
|
|
1279
1299
|
this.sources.forEach((source) => {
|
|
1280
|
-
const indentStr = source.content.
|
|
1300
|
+
const indentStr = source.content._getRawIndentString();
|
|
1281
1301
|
|
|
1282
1302
|
if (indentStr === null) return;
|
|
1283
1303
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { relative } from 'path';
|
|
2
|
-
import { r as relative$1, p as picocolors, E as EXIT_CODE_RESTART } from './chunk-constants.
|
|
2
|
+
import { r as relative$1, p as picocolors, E as EXIT_CODE_RESTART } from './chunk-constants.6196597b.mjs';
|
|
3
3
|
import { isPackageExists } from 'local-pkg';
|
|
4
4
|
|
|
5
5
|
const RealDate = Date;
|
|
@@ -178,14 +178,17 @@ function shuffle(array, seed = RealDate.now()) {
|
|
|
178
178
|
return array;
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
+
function isAtomTest(s) {
|
|
182
|
+
return s.type === "test" || s.type === "benchmark";
|
|
183
|
+
}
|
|
181
184
|
function getTests(suite) {
|
|
182
|
-
return toArray(suite).flatMap((s) => s
|
|
185
|
+
return toArray(suite).flatMap((s) => isAtomTest(s) ? [s] : s.tasks.flatMap((c) => isAtomTest(c) ? [c] : getTests(c)));
|
|
183
186
|
}
|
|
184
187
|
function getSuites(suite) {
|
|
185
188
|
return toArray(suite).flatMap((s) => s.type === "suite" ? [s, ...getSuites(s.tasks)] : []);
|
|
186
189
|
}
|
|
187
190
|
function hasTests(suite) {
|
|
188
|
-
return toArray(suite).some((s) => s.tasks.some((c) => c
|
|
191
|
+
return toArray(suite).some((s) => s.tasks.some((c) => isAtomTest(c) || hasTests(c)));
|
|
189
192
|
}
|
|
190
193
|
function hasFailed(suite) {
|
|
191
194
|
return toArray(suite).some((s) => {
|
|
@@ -211,10 +214,17 @@ function getNames(task) {
|
|
|
211
214
|
return names;
|
|
212
215
|
}
|
|
213
216
|
|
|
217
|
+
function getWorkerState() {
|
|
218
|
+
return globalThis.__vitest_worker__;
|
|
219
|
+
}
|
|
220
|
+
|
|
214
221
|
var _a;
|
|
215
222
|
const isNode = typeof process < "u" && typeof process.stdout < "u" && !((_a = process.versions) == null ? void 0 : _a.deno) && !globalThis.window;
|
|
216
223
|
const isBrowser = typeof window !== "undefined";
|
|
217
224
|
const isWindows = isNode && process.platform === "win32";
|
|
225
|
+
const getRunMode = () => getWorkerState().config.mode;
|
|
226
|
+
const isRunningInTest = () => getRunMode() === "test";
|
|
227
|
+
const isRunningInBenchmark = () => getRunMode() === "benchmark";
|
|
218
228
|
const relativePath = isBrowser ? relative : relative$1;
|
|
219
229
|
function partitionSuiteChildren(suite) {
|
|
220
230
|
let tasksGroup = [];
|
|
@@ -263,7 +273,7 @@ async function ensurePackageInstalled(dependency, root) {
|
|
|
263
273
|
message: picocolors.exports.reset(`Do you want to install ${picocolors.exports.green(dependency)}?`)
|
|
264
274
|
});
|
|
265
275
|
if (install) {
|
|
266
|
-
await (await import('./chunk-install-pkg.
|
|
276
|
+
await (await import('./chunk-install-pkg.e081fc1b.mjs')).installPackage(dependency, { dev: true });
|
|
267
277
|
process.stderr.write(picocolors.exports.yellow(`
|
|
268
278
|
Package ${dependency} installed, re-run the command to start.
|
|
269
279
|
`));
|
|
@@ -307,5 +317,16 @@ class AggregateErrorPonyfill extends Error {
|
|
|
307
317
|
this.errors = [...errors];
|
|
308
318
|
}
|
|
309
319
|
}
|
|
320
|
+
function createDefer() {
|
|
321
|
+
let resolve2 = null;
|
|
322
|
+
let reject = null;
|
|
323
|
+
const p = new Promise((_resolve, _reject) => {
|
|
324
|
+
resolve2 = _resolve;
|
|
325
|
+
reject = _reject;
|
|
326
|
+
});
|
|
327
|
+
p.resolve = resolve2;
|
|
328
|
+
p.reject = reject;
|
|
329
|
+
return p;
|
|
330
|
+
}
|
|
310
331
|
|
|
311
|
-
export { AggregateErrorPonyfill as A,
|
|
332
|
+
export { AggregateErrorPonyfill as A, hasFailedSnapshot as B, getSuites as C, deepMerge as D, ensurePackageInstalled as E, stdout as F, isWindows as G, mergeSlashes as H, getAllMockableProperties as I, RealDate as R, resetModules as a, getCallLastIndex as b, getNames as c, assertTypes as d, getFullName as e, isRunningInTest as f, getWorkerState as g, isRunningInBenchmark as h, isObject as i, notNullish as j, deepClone as k, getType as l, mockDate as m, noop as n, isNode as o, relativePath as p, isBrowser as q, resetDate as r, slash as s, toArray as t, partitionSuiteChildren as u, shuffle as v, hasTests as w, hasFailed as x, createDefer as y, getTests as z };
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { a as resolve } from './chunk-constants.
|
|
2
|
-
import { e as execa } from './vendor-index.
|
|
1
|
+
import { a as resolve } from './chunk-constants.6196597b.mjs';
|
|
2
|
+
import { e as execa } from './vendor-index.4aeeb598.mjs';
|
|
3
3
|
import 'tty';
|
|
4
4
|
import 'url';
|
|
5
5
|
import 'path';
|
|
6
6
|
import 'buffer';
|
|
7
7
|
import 'child_process';
|
|
8
8
|
import 'process';
|
|
9
|
-
import './vendor-index.
|
|
9
|
+
import './vendor-index.62ce5c33.mjs';
|
|
10
10
|
import './vendor-_commonjsHelpers.4da45ef5.mjs';
|
|
11
11
|
import 'fs';
|
|
12
12
|
import 'stream';
|
|
13
13
|
import 'util';
|
|
14
14
|
import 'os';
|
|
15
|
-
import './vendor-index.
|
|
15
|
+
import './vendor-index.731a22f2.mjs';
|
|
16
16
|
import 'assert';
|
|
17
17
|
import 'events';
|
|
18
18
|
|
|
@@ -51,18 +51,24 @@ class VitestGit {
|
|
|
51
51
|
return [...staged, ...unstaged];
|
|
52
52
|
}
|
|
53
53
|
getFilesSince(hash) {
|
|
54
|
-
return this.resolveFilesWithGitCommand(
|
|
54
|
+
return this.resolveFilesWithGitCommand(
|
|
55
|
+
["diff", "--name-only", `${hash}...HEAD`]
|
|
56
|
+
);
|
|
55
57
|
}
|
|
56
58
|
getStagedFiles() {
|
|
57
|
-
return this.resolveFilesWithGitCommand(
|
|
59
|
+
return this.resolveFilesWithGitCommand(
|
|
60
|
+
["diff", "--cached", "--name-only"]
|
|
61
|
+
);
|
|
58
62
|
}
|
|
59
63
|
getUnstagedFiles() {
|
|
60
|
-
return this.resolveFilesWithGitCommand(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
return this.resolveFilesWithGitCommand(
|
|
65
|
+
[
|
|
66
|
+
"ls-files",
|
|
67
|
+
"--other",
|
|
68
|
+
"--modified",
|
|
69
|
+
"--exclude-standard"
|
|
70
|
+
]
|
|
71
|
+
);
|
|
66
72
|
}
|
|
67
73
|
async getRoot(cwd) {
|
|
68
74
|
const options = ["rev-parse", "--show-cdup"];
|