diff --git a/bin/semver b/bin/semver index c5f2e857..dee7bdaa 100755 --- a/bin/semver +++ b/bin/semver @@ -16,10 +16,29 @@ var argv = process.argv.slice(2) , semver = require("../semver") , reverse = false -main() +preMain() -function main () { - if (!argv.length) return help() +function preMain() { + if (!process.stdin.isTTY) { + process.stdin.setEncoding('utf8'); + + process.stdin.on('readable', function() { + var chunk = process.stdin.read(); + if (chunk !== null) { + versions = versions.concat(chunk.split(/\s/)); + } + }); + + process.stdin.on('end', () => { + main(versions.length !== 0); + }); + } else { + main(false); + } +} + +function main (piped) { + if (!argv.length && !piped) return help() while (argv.length) { var a = argv.shift() var i = a.indexOf('=') @@ -56,6 +75,7 @@ function main () { break case "-h": case "--help": case "-?": return help() + break default: versions.push(a) break diff --git a/test/cli.js b/test/cli.js new file mode 100644 index 00000000..05fbeaa6 --- /dev/null +++ b/test/cli.js @@ -0,0 +1,39 @@ +var test = require('tap').test; +var execSync = require('child_process').execSync +var exec = require('child_process').exec; + +test('the command line using pipes or arguments produces the same output', function (t) { + if (process.version.substring(0,5) === 'v0.10' || process.version.substring(0,5) === 'v0.12') { + t.plan(6); + var bin = 'node ./bin/semver '; + [[bin+'-i 1.0.0', 'echo 1.0.0 | '+bin+'-i'], + [bin+'-i major 1.0.0', 'echo 1.0.0 | '+bin+'-i major'], + [bin+'-i prerelease 1.0.0', 'echo 1.0.0 | '+bin+'-i prerelease'], + [bin+'-i preminor 1.0.0', 'echo 1.0.0 | '+bin+'-i preminor'], + [bin+'-i prepatch --preid alpha 1.0.0', 'echo 1.0.0 | '+bin+'-i prepatch --preid alpha'], + [bin+'-r \\>1.0.0 0.8.0 1.1.1', 'echo 0.8.0 1.1.1 | '+bin+'-r \\>1.0.0'] + ].forEach(function(tab) { + exec(tab[0], function(error, stdout, stderr) { + var resCli = stdout + stderr; + exec(tab[1], function(error, stdout, stderr) { + var resPipe = stdout + stderr; + t.assert(resCli === resPipe); + }); + }); + }); + } else { + var bin = 'node ./bin/semver '; + [[bin+'-i 1.0.0', 'echo 1.0.0 | '+bin+'-i'], + [bin+'-i major 1.0.0', 'echo 1.0.0 | '+bin+'-i major'], + [bin+'-i prerelease 1.0.0', 'echo 1.0.0 | '+bin+'-i prerelease'], + [bin+'-i preminor 1.0.0', 'echo 1.0.0 | '+bin+'-i preminor'], + [bin+'-i prepatch --preid alpha 1.0.0', 'echo 1.0.0 | '+bin+'-i prepatch --preid alpha'], + [bin+'-r \\>1.0.0 0.8.0 1.1.1', 'echo 0.8.0 1.1.1 | '+bin+'-r \\>1.0.0'] + ].forEach(function(tab) { + var resCli = execSync(tab[0]); + var resPipe = execSync(tab[1]); + t.assert(resCli.equals(resPipe)); + }); + t.end(); + } +})