public IEnumerable<SemanticVersion> GetVersionTagsOnBranch(Branch branch, string tagPrefixRegex)
{
if (semanticVersionTagsOnBranchCache.ContainsKey(branch))
{
Logger.WriteDebug(string.Format("Cache hit for version tags on branch '{0}", branch.CanonicalName));
return semanticVersionTagsOnBranchCache[branch];
}
using (Logger.IndentLog(string.Format("Getting version tags from branch '{0}'.", branch.CanonicalName)))
{
var tags = this.Repository.Tags.Select(t => t).ToList();
var versionTags = this.Repository.Commits.QueryBy(new CommitFilter
{
IncludeReachableFrom = branch.Tip
})
.SelectMany(c => tags.Where(t => c.Sha == t.Target.Sha).SelectMany(t =>
{
SemanticVersion semver;
if (SemanticVersion.TryParse(t.FriendlyName, tagPrefixRegex, out semver))
return new[] { semver };
return new SemanticVersion[0];
})).ToList();
semanticVersionTagsOnBranchCache.Add(branch, versionTags);
return versionTags;
}
}