diff --git a/src/GitVersionCore/GitRepoMetadataProvider.cs b/src/GitVersionCore/GitRepoMetadataProvider.cs index b60829ab67..4416d79c3c 100644 --- a/src/GitVersionCore/GitRepoMetadataProvider.cs +++ b/src/GitVersionCore/GitRepoMetadataProvider.cs @@ -24,6 +24,25 @@ public GitRepoMetadataProvider(IRepository repository, Config configuration) this.configuration = configuration; } + public static IEnumerable> GetValidVersionTags(IRepository repository, string tagPrefixRegex, DateTimeOffset? olderThan = null) + { + var tags = new List>(); + + foreach (var tag in repository.Tags) + { + if (olderThan.HasValue && ((Commit)tag.PeeledTarget()).When() > olderThan.Value) + continue; + + SemanticVersion semver; + if (SemanticVersion.TryParse(tag.FriendlyName, tagPrefixRegex, out semver)) + { + tags.Add(Tuple.Create(tag, semver)); + } + } + + return tags; + } + public IEnumerable GetVersionTagsOnBranch(Branch branch, string tagPrefixRegex) { if (semanticVersionTagsOnBranchCache.ContainsKey(branch)) @@ -34,15 +53,7 @@ public IEnumerable GetVersionTagsOnBranch(Branch branch, string using (Logger.IndentLog(string.Format("Getting version tags from branch '{0}'.", branch.CanonicalName))) { - var tags = new List>(); - foreach(var t in this.Repository.Tags) - { - SemanticVersion semver; - if (SemanticVersion.TryParse(t.FriendlyName, tagPrefixRegex, out semver)) - { - tags.Add(Tuple.Create(t, semver)); - } - } + var tags = GetValidVersionTags(this.Repository, tagPrefixRegex); var versionTags = branch.Commits.SelectMany(c => tags.Where(t => c.Sha == t.Item1.Target.Sha).Select(t => t.Item2)).ToList(); @@ -225,7 +236,7 @@ List GetMergeCommitsForBranch(Branch branch, Branch[] excludedBran var currentBranchConfig = configuration.GetConfigForBranch(branch.NameWithoutRemote()); var regexesToCheck = currentBranchConfig == null - ? new [] { ".*" } // Match anything if we can't find a branch config + ? new[] { ".*" } // Match anything if we can't find a branch config : currentBranchConfig.SourceBranches.Select(sb => configuration.Branches[sb].Regex); var branchMergeBases = Repository.Branches .ExcludingBranches(excludedBranches) diff --git a/src/GitVersionCore/VersionCalculation/BaseVersionCalculators/TaggedCommitVersionStrategy.cs b/src/GitVersionCore/VersionCalculation/BaseVersionCalculators/TaggedCommitVersionStrategy.cs index 332862923e..e228d41fd9 100644 --- a/src/GitVersionCore/VersionCalculation/BaseVersionCalculators/TaggedCommitVersionStrategy.cs +++ b/src/GitVersionCore/VersionCalculation/BaseVersionCalculators/TaggedCommitVersionStrategy.cs @@ -19,22 +19,8 @@ public override IEnumerable GetVersions(GitVersionContext context) public IEnumerable GetTaggedVersions(GitVersionContext context, Branch currentBranch, DateTimeOffset? olderThan) { - var allTags = new List>(); - foreach(var tag in context.Repository.Tags) - { - if (olderThan.HasValue && ((Commit)tag.PeeledTarget()).When() > olderThan.Value) - continue; - - SemanticVersion version; - - if (!SemanticVersion.TryParse(tag.FriendlyName, context.Configuration.GitTagPrefix, out version)) - { - continue; - } - - allTags.Add(Tuple.Create(tag, version)); - } - + var allTags = GitRepoMetadataProvider.GetValidVersionTags(context.Repository, context.Configuration.GitTagPrefix, olderThan); + var tagsOnBranch = currentBranch .Commits .SelectMany(commit => { return allTags.Where(t => IsValidTag(t.Item1, commit)); })