Skip to content

Latest commit

 

History

History
114 lines (86 loc) · 3.55 KB

README.md

File metadata and controls

114 lines (86 loc) · 3.55 KB

Node Git Tags

Gets and parses semver tags using Git and Node.js

Usage

Assuming you have the following git tags:

  • v1.0.1
  • v1.0.0
  • v0.1.0-beta
  • NonSemverTag

Get all semver tags

gittags.get([repo], callback(err, tags))

Argument Type Description
repo (optional) string Optional repo path. Defaults to process.cwd()
callback function Required callback fn
callback(err) null | Error Error, if there is one
callback(tags) Array.<string> Array of semver tags found (e.g. ['1.0.1', '1.0.0'])
var gittags = require('git-tags');

gittags.get(function(err, tags) {
  if (err) throw err;

  console.log(tags);
  // ['1.0.1', '1.0.0', '0.1.0-beta']
});

// Also takes a repo location:
gittags.get('/foorepo', function(err, tags) {});

Latest

gittags.latest([repo], callback(err, latest))

Name Type Description
repo (optional) string Optional repo path. Defaults to process.cwd()
callback function Required callback
err null | Error Error if, there is one
latest string Latest semver tag found (e.g. '1.0.1')
gittags.latest(function(err, latest) {
  console.log(latest);
  // '1.0.1'
});

Oldest

gittags.oldest([repo], callback(err, oldest))

Same as latest but opposite.

gittags.oldest(function(err, oldest) {
  console.log(oldest);
  // '0.1.0-beta'
});

Semver Parse

Two functions relating to semver exist for convenience. parse is just semver.parse, and mmp which stands for "Major, Minor, Patch". If you need more semver stuff, you should use the node-semver module directly.

gittags.parse(tag) -> SemVer

Name Type Description
tag string Version string to parse (e.g. 'v1.0.2-beta'). See node-semver for more info.

gittags.mmp(tag) -> formattedTag

Name Type Description
tag string Tag to format (e.g. 'v1.0.2-beta')
formattedTag string Major.Minor.Patch formatted tag (e.g. '1.0.2')
gittags.mmp('v1.3.10-beta.12');
// => '1.3.10'

var version = gittags.parse('v1.3.10-beta.12');
// <SemVer "1.3.10-beta.12">
version.prerelease;
// ['beta', 12]
version.compare('v1.3.10');
// -1
version.compare('v1.3.9');
// 1
// etc...

Note Stating the obvious, this module uses the callback fashion of async handling. This makes them easy to integrate w/ promises.

Bluebird, for example

var Q = require('bluebird');
var gittags = Q.promisifyAll(require('git-tags'));

gittags.latestAsync().then(console.log);
// 1.0.1

I originally intended this to use child_process.spawn and return a stream, but I then realized these are blocking in Linux/Unix, limiting the usefulness of that. And it's Git tags so who cares?

If you want streams, you can use something like highland.js which is awesome, BTW.

License

MIT