Skip to content

Commit 9c24953

Browse files
committed
Merge pull request #696 from JakeGinnivan/PerformanceFix
Performance fix
2 parents e91b741 + 77f778e commit 9c24953

File tree

3 files changed

+43
-10
lines changed

3 files changed

+43
-10
lines changed

src/GitVersionCore.Tests/Helpers/GitTestExtensions.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ public static class GitTestExtensions
88
{
99
static int pad = 1;
1010

11-
public static Commit MakeACommit(this IRepository repository)
11+
public static Commit MakeACommit(this IRepository repository, string commitMessage = null)
1212
{
13-
return CreateFileAndCommit(repository, Guid.NewGuid().ToString());
13+
return CreateFileAndCommit(repository, Guid.NewGuid().ToString(), commitMessage);
1414
}
1515

1616
public static void MergeNoFF(this IRepository repository, string branch)
@@ -33,7 +33,7 @@ public static Commit[] MakeCommits(this IRepository repository, int numCommitsTo
3333
.ToArray();
3434
}
3535

36-
public static Commit CreateFileAndCommit(this IRepository repository, string relativeFileName)
36+
public static Commit CreateFileAndCommit(this IRepository repository, string relativeFileName, string commitMessage = null)
3737
{
3838
var randomFile = Path.Combine(repository.Info.WorkingDirectory, relativeFileName);
3939
if (File.Exists(randomFile))
@@ -47,7 +47,7 @@ public static Commit CreateFileAndCommit(this IRepository repository, string rel
4747

4848
repository.Stage(randomFile);
4949

50-
return repository.Commit(string.Format("Test Commit for file '{0}'", relativeFileName),
50+
return repository.Commit(string.Format("Test Commit for file '{0}' - {1}", relativeFileName, commitMessage),
5151
Constants.SignatureNow(), Constants.SignatureNow());
5252
}
5353

src/GitVersionCore.Tests/IntegrationTests/VersionBumpingScenarios.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,22 @@ public void AppliedPrereleaseTagCausesBump()
2323
fixture.AssertFullSemver("1.0.0-pre.2+1");
2424
}
2525
}
26+
27+
[Test]
28+
public void CanUseCommitMessagesToBumpVersion()
29+
{
30+
using (var fixture = new EmptyRepositoryFixture(new Config()))
31+
{
32+
fixture.Repository.MakeACommit();
33+
fixture.MakeATaggedCommit("1.0.0");
34+
fixture.Repository.MakeACommit("+semver:minor");
35+
36+
fixture.AssertFullSemver("1.1.0+1");
37+
38+
fixture.Repository.MakeACommit("+semver:major");
39+
40+
fixture.AssertFullSemver("2.0.0+2");
41+
}
42+
43+
}
2644
}

src/GitVersionCore/IncrementStrategyFinder.cs

Lines changed: 21 additions & 6 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)";
@@ -80,14 +81,28 @@ public static class IncrementStrategyFinder
8081

8182
private static IEnumerable<Commit> GetIntermediateCommits(IRepository repo, Commit baseCommit, Commit headCommit)
8283
{
83-
var filter = new CommitFilter
84+
if (baseCommit == null) yield break;
85+
86+
if (intermediateCommitCache == null || intermediateCommitCache.LastOrDefault() != headCommit)
87+
{
88+
var filter = new CommitFilter
89+
{
90+
Since = headCommit,
91+
SortBy = CommitSortStrategies.Topological | CommitSortStrategies.Reverse
92+
};
93+
94+
intermediateCommitCache = repo.Commits.QueryBy(filter).ToList();
95+
}
96+
97+
var found = false;
98+
foreach (var commit in intermediateCommitCache)
8499
{
85-
Since = headCommit,
86-
Until = baseCommit,
87-
SortBy = CommitSortStrategies.Topological | CommitSortStrategies.Reverse
88-
};
100+
if (commit.Sha == baseCommit.Sha)
101+
found = true;
89102

90-
return repo.Commits.QueryBy(filter);
103+
if (found)
104+
yield return commit;
105+
}
91106
}
92107

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

0 commit comments

Comments
 (0)