GitVersion.GitRepoMetadataProvider.GetVersionTagsOnBranch C# (CSharp) Method

GetVersionTagsOnBranch() public method

public GetVersionTagsOnBranch ( Branch branch, string tagPrefixRegex ) : IEnumerable
branch Branch
tagPrefixRegex string
return IEnumerable
        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;
            }
        }