Node Git Tags
Gets and parses semver tags using Git and Node.jsUsage
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('gittags'));
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.