diff --git a/bin/index.js b/bin/index.js index dd4e2be..b8b3e4a 100755 --- a/bin/index.js +++ b/bin/index.js @@ -180,6 +180,11 @@ var getAllCommits = function() { }); }; +var getRepositoryUrl = function() { + var host = (opts.host === 'api.github.com') ? 'github.com' : opts.host; + return "https://"+host+"/"+opts.owner+"/"+opts.repository; +}; + var getData = function() { if (opts.data === 'commits') return getAllCommits(); return getPullRequests(); @@ -190,14 +195,29 @@ var tagger = function(sortedTags, data) { if (opts.data === 'commits') date = moment(data.commit.committer.date); else date = moment(data.merged_at); - var current = null; + var prevTag = null; + var currTag = null; for (var i=0, len=sortedTags.length; i < len; i++) { var tag = sortedTags[i]; + prevTag = tag; if (tag.date < date) break; - current = tag; + currTag = tag; } - if (!current) current = {name: opts.tagName, date: currentDate}; - return current; + if (!currTag) currTag = {name: opts.tagName, date: currentDate}; + return { currTag: currTag, prevTag: prevTag }; +}; + +var getPrTag = function(pr) { + var url = (function(){ + if (pr.tag === null) return; + if (pr.prevTag == null) return; + var currentTagName = (pr.tag.name === 'upcoming' ? 'HEAD' : pr.tag.name); + var previousTagName = pr.prevTag.name; + return getRepositoryUrl()+'/compare/'+previousTagName+'...'+currentTagName; + })(); + + if (url) return "[" + pr.tag.name + "](" + url + ")"; + return pr.tag.name; }; var prFormatter = function(data) { @@ -211,7 +231,7 @@ var prFormatter = function(data) { output+= "\n"; } else if (pr.tag.name != currentTagName) { currentTagName = pr.tag.name; - output+= "\n### " + pr.tag.name + output+= "\n### " + getPrTag(pr); output+= " " + pr.tag.date.tz(opts.timeZone).format(opts.dateFormat); output+= "\n"; } @@ -347,8 +367,7 @@ var commitFormatter = function(data) { } - var host = (opts.host === 'api.github.com') ? 'github.com' : opts.host; - var url = "https://"+host+"/"+opts.owner+"/"+opts.repository+"/pull/"+prNumber; + var url = getRepositoryUrl()+"/pull/"+prNumber; output += "- [#" + prNumber + "](" + url + ") " + message; if (authors.length) { @@ -410,7 +429,9 @@ var task = function() { return data; }) .map(function(data){ - data.tag = tagger(allTags, data); + var tagInfo = tagger(allTags, data); + data.prevTag = tagInfo.prevTag; + data.tag = tagInfo.currTag; data.tagDate = data.tag.date; return data; })