Skip to content

Commit 0b745da

Browse files
committed
Cache the commits which we look for commit messages in.
1 parent e91b741 commit 0b745da

File tree

1 file changed

+27
-8
lines changed

1 file changed

+27
-8
lines changed

src/GitVersionCore/IncrementStrategyFinder.cs

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public enum CommitMessageIncrementMode
1515

1616
public static class IncrementStrategyFinder
1717
{
18+
private static List<Commit> intermediateCommitCache;
1819
public const string DefaultMajorPattern = @"\+semver:\s?(breaking|major)";
1920
public const string DefaultMinorPattern = @"\+semver:\s?(feature|minor)";
2021
public const string DefaultPatchPattern = @"\+semver:\s?(fix|patch)";
@@ -53,7 +54,7 @@ public static class IncrementStrategyFinder
5354
return null;
5455
}
5556

56-
var commits = GetIntermediateCommits(context.Repository, baseVersion.BaseVersionSource, context.CurrentCommit);
57+
var commits = GetIntermediateCommits(context.Repository, baseVersion.BaseVersionSource, context.CurrentCommit, context.CurrentBranch);
5758

5859
if (context.Configuration.CommitMessageIncrementing == CommitMessageIncrementMode.MergeMessageOnly)
5960
{
@@ -78,16 +79,34 @@ public static class IncrementStrategyFinder
7879
return null;
7980
}
8081

81-
private static IEnumerable<Commit> GetIntermediateCommits(IRepository repo, Commit baseCommit, Commit headCommit)
82+
private static IEnumerable<Commit> GetIntermediateCommits(IRepository repo, Commit baseCommit, Commit headCommit, Branch currentBranch)
8283
{
83-
var filter = new CommitFilter
84+
if (baseCommit == null) yield break;
85+
86+
if (intermediateCommitCache == null)
87+
{
88+
var filter = new CommitFilter
89+
{
90+
Since = currentBranch.Tip,
91+
Until = baseCommit,
92+
SortBy = CommitSortStrategies.Topological | CommitSortStrategies.Reverse
93+
};
94+
95+
intermediateCommitCache = repo.Commits.QueryBy(filter).ToList();
96+
}
97+
98+
var found = false;
99+
foreach (var commit in intermediateCommitCache)
84100
{
85-
Since = headCommit,
86-
Until = baseCommit,
87-
SortBy = CommitSortStrategies.Topological | CommitSortStrategies.Reverse
88-
};
101+
if (commit.Sha == baseCommit.Sha)
102+
found = true;
103+
104+
if (found)
105+
yield return commit;
89106

90-
return repo.Commits.QueryBy(filter);
107+
if (commit.Sha == headCommit.Sha)
108+
yield break;
109+
}
91110
}
92111

93112
private static VersionField? FindIncrementFromMessage(string message, Regex major, Regex minor, Regex patch)

0 commit comments

Comments
 (0)