-
Notifications
You must be signed in to change notification settings - Fork 4.2k
/
check-local-changes.js
55 lines (52 loc) · 1.67 KB
/
check-local-changes.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/**
* External dependencies
*/
const SimpleGit = require( 'simple-git' );
SimpleGit()
.diff( [ '-U0' ] )
.then( ( diff ) => {
// npm will introduce changes to a `package-lock.json` file for optional
// dependencies varying on environment. If the only changes are the
// addition of an "optional" flag in `package-lock.json` file from
// `git diff`: we ignore the results.
//
// See: https://github.com/npm/npm/issues/17722
// Example input:
//
// diff --git a/package-lock.json b/package-lock.json
// index e8c8a25dc..251af8689 100644
// --- a/package-lock.json
// +++ b/package-lock.json
// @@ -14373 +14373,2 @@
// - "dev": true
// + "dev": true,
// + "optional": true
// @@ -14648 +14649,2 @@
// - "dev": true
// + "dev": true,
// + "optional": true
const nonOptionalDiff = diff
// Strip individual diffs of optional-only.
.replace(
/@@ .+ @@\n(-.+\n\+.+,\n)?\+.+\"optional\": true,?\n/gm,
''
)
// If no more line diffs remain after above, remove diff heading for file.
.replace(
/diff --git a\/package-lock.json b\/package-lock.json\nindex \w+..\w+ \d+\n--- a\/package-lock.json\n\+\+\+ b\/package-lock.json\n(?!@@)/,
''
);
if ( !! nonOptionalDiff ) {
console.error(
"There are local uncommitted changes after one or both of 'npm install' or 'npm run docs:build'!\n"
);
console.log( nonOptionalDiff );
process.exitCode = 1;
}
} )
.catch( ( error ) => {
console.error(
'Checking local changes failed!\n\n' + error.toString() + '\n'
);
process.exitCode = 1;
} );