UNPKG

nodegit

Version:

Node.js libgit2 asynchronous native bindings

134 lines (119 loc) 4.13 kB
"use strict"; var NodeGit = require("../"); var LookupWrapper = NodeGit.Utils.lookupWrapper; var Tag = NodeGit.Tag; var signatureRegexesBySignatureType = { gpgsig: [/-----BEGIN PGP SIGNATURE-----[\s\S]+?-----END PGP SIGNATURE-----/gm, /-----BEGIN PGP MESSAGE-----[\s\S]+?-----END PGP MESSAGE-----/gm], x509: [/-----BEGIN SIGNED MESSAGE-----[\s\S]+?-----END SIGNED MESSAGE-----/gm] }; /** * Retrieves the tag pointed to by the oid * @async * @param {Repository} repo The repo that the tag lives in * @param {String|Oid|Tag} id The tag to lookup * @return {Tag} */ Tag.lookup = LookupWrapper(Tag); /** * @async * @param {Repository} repo * @param {String} tagName * @param {Oid} target * @param {Signature} tagger * @return {String} */ Tag.createBuffer = function (repo, tagName, target, tagger, message) { return NodeGit.Object.lookup(repo, target, NodeGit.Object.TYPE.ANY).then(function (object) { if (!NodeGit.Object.typeisloose(object.type())) { throw new Error("Object must be a loose type"); } var id = object.id().toString(); var objectType = NodeGit.Object.type2String(object.type()); var lines = ["object " + id, "type " + objectType, "tag " + tagName, "tagger " + tagger.toString(true) + "\n", "" + message + (message.endsWith("\n") ? "" : "\n")]; return lines.join("\n"); }); }; /** * @async * @param {Repository} repo * @param {String} tagName * @param {Oid} target * @param {Signature} tagger * @param {String} message * @param {Number} force * @param {Function} signingCallback Takes a string and returns a string * representing the signed message * @return {Oid} */ Tag.createWithSignature = function (repo, tagName, target, tagger, message, force, signingCallback) { var tagBuffer = void 0; return Tag.createBuffer(repo, tagName, target, tagger, message).then(function (tagBufferResult) { tagBuffer = tagBufferResult; return signingCallback(tagBuffer); }).then(function (_ref) { var code = _ref.code, signedData = _ref.signedData; switch (code) { case NodeGit.Error.CODE.OK: { var normalizedEnding = signedData.endsWith("\n") ? "" : "\n"; var signedTagString = tagBuffer + signedData + normalizedEnding; return Tag.createFromBuffer(repo, signedTagString, force); } case NodeGit.Error.CODE.PASSTHROUGH: return Tag.create(repo, tagName, target, tagger, message, force); default: { var error = new Error("Tag.createWithSignature threw with error code " + code); error.errno = code; throw error; } } }); }; /** * Retrieves the signature of an annotated tag * @async * @param {String} signatureType * @return {String|null} */ Tag.prototype.extractSignature = function () { var signatureType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "gpgsig"; var id = this.id(); var repo = this.repo; var signatureRegexes = signatureRegexesBySignatureType[signatureType]; if (!signatureRegexes) { throw new Error("Unsupported signature type"); } return repo.odb().then(function (odb) { return odb.read(id); }).then(function (odbObject) { var odbData = odbObject.toString(); var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = signatureRegexes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var regex = _step.value; var matchResult = odbData.match(regex); if (matchResult !== null) { return matchResult[0]; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } throw new Error("this tag is not signed"); }); };