Skip to content

Commit 3905343

Browse files
pjohnmeyerowlstronaut
authored andcommitted
fix: Warn when defaulting to --inc=patch in CLI
1 parent 0d0a0a2 commit 3905343

3 files changed

Lines changed: 34 additions & 10 deletions

File tree

bin/semver.js

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ const main = () => {
4646
a = a.slice(0, indexOfEqualSign)
4747
argv.unshift(value)
4848
}
49+
4950
switch (a) {
5051
case '-rv': case '-rev': case '--rev': case '--reverse':
5152
reverse = true
@@ -60,15 +61,10 @@ const main = () => {
6061
versions.push(argv.shift())
6162
break
6263
case '-i': case '--inc': case '--increment':
63-
switch (argv[0]) {
64-
case 'major': case 'minor': case 'patch': case 'prerelease':
65-
case 'premajor': case 'preminor': case 'prepatch':
66-
case 'release':
67-
inc = argv.shift()
68-
break
69-
default:
70-
inc = 'patch'
71-
break
64+
if (semver.RELEASE_TYPES.includes(argv[0]) || (argv[0] === 'release')) {
65+
inc = { value: argv.shift(), maybeErrantValue: null, option: a }
66+
} else {
67+
inc = { value: 'patch', maybeErrantValue: argv[0], option: a }
7268
}
7369
break
7470
case '--preid':
@@ -102,6 +98,14 @@ const main = () => {
10298

10399
options = parseOptions({ loose, includePrerelease, rtl })
104100

101+
if (
102+
inc &&
103+
versions.includes(inc.maybeErrantValue) &&
104+
!semver.valid(inc.maybeErrantValue, options)
105+
) {
106+
console.warn(`Invalid value for ${inc.option}; defaulting to 'patch'. This may become a failure in future major versions.`)
107+
}
108+
105109
versions = versions.map((v) => {
106110
return coerce ? (semver.coerce(v, options) || { version: v }).version : v
107111
}).filter((v) => {
@@ -125,7 +129,7 @@ const main = () => {
125129
versions
126130
.sort((a, b) => semver[reverse ? 'rcompare' : 'compare'](a, b, options))
127131
.map(v => semver.clean(v, options))
128-
.map(v => inc ? semver.inc(v, inc, options, identifier, identifierBase) : v)
132+
.map(v => inc ? semver.inc(v, inc.value, options, identifier, identifierBase) : v)
129133
.forEach(v => console.log(v))
130134
}
131135

tap-snapshots/test/bin/semver.js.test.cjs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,24 @@ Object {
303303
}
304304
`
305305

306+
exports[`test/bin/semver.js TAP inc tests > -i invalid 1.0.0 1`] = `
307+
Object {
308+
"code": 0,
309+
"err": "Invalid value for -i; defaulting to 'patch'. This may become a failure in future major versions.\\n",
310+
"out": "1.0.1\\n",
311+
"signal": null,
312+
}
313+
`
314+
315+
exports[`test/bin/semver.js TAP inc tests > -i major -i minor 1.0.0 1`] = `
316+
Object {
317+
"code": 0,
318+
"err": "",
319+
"out": "1.1.0\\n",
320+
"signal": null,
321+
}
322+
`
323+
306324
exports[`test/bin/semver.js TAP inc tests > -i major 1.0.0 1`] = `
307325
Object {
308326
"code": 0,

test/bin/semver.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ t.test('inc tests', t => Promise.all([
3434
['-i', 'premajor', '1.0.0', '--preid=beta', '-n', 'false'],
3535
['-i', '1.2.3'],
3636
['-i', 'release', '1.0.0-pre'],
37+
['-i', 'major', '-i', 'minor', '1.0.0'], // last -i "wins"
38+
['-i', 'invalid', '1.0.0'], // invalid -i value, should warn
3739
].map(args => t.resolveMatchSnapshot(run(args), args.join(' ')))))
3840

3941
t.test('help output', t => Promise.all([

0 commit comments

Comments
 (0)