Skip to content

Commit ff6f27f

Browse files
committed
Refactoring of MainlineBranchFinder class.
1 parent 0080e73 commit ff6f27f

File tree

8 files changed

+21
-25
lines changed

8 files changed

+21
-25
lines changed

src/GitVersion.Core.Tests/Core/GitVersionExecutorTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,6 @@ public void WorkingDirectoryWithoutCommits()
373373
var gitVersionCalculator = GetGitVersionCalculator(gitVersionOptions);
374374
gitVersionCalculator.CalculateVersionVariables();
375375
});
376-
377376
exception?.Message.ShouldContain("No commits found on the current branch.");
378377
}
379378

src/GitVersion.Core/Configuration/ConfigurationBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ private static void FinalizeBranchConfiguration(Config config, string name, Bran
127127
{
128128
if (name == Config.DevelopBranchKey)
129129
{
130-
// Why this applies only on develop branch? I'm supprised that the configuration coming from user.
130+
// Why this applies only on develop branch? I'm surprised that the value not coming from configuration.
131131
branchConfig.VersioningMode = config.VersioningMode == VersioningMode.Mainline ? VersioningMode.Mainline : VersioningMode.ContinuousDeployment;
132132
}
133133
else

src/GitVersion.Core/Core/Abstractions/IRepositoryStore.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ public interface IRepositoryStore
2121
IEnumerable<IBranch> GetReleaseBranches(IEnumerable<KeyValuePair<string, BranchConfig>> releaseBranchConfig);
2222
IEnumerable<IBranch> ExcludingBranches(IEnumerable<IBranch> branchesToExclude);
2323
IEnumerable<IBranch> GetBranchesContainingCommit(ICommit? commit, IEnumerable<IBranch>? branches = null, bool onlyTrackedBranches = false);
24-
IDictionary<string, List<IBranch>> GetMainlineBranches(ICommit commit, Config configuration, IEnumerable<KeyValuePair<string, BranchConfig>>? mainlineBranchConfigs);
24+
25+
IDictionary<string, List<IBranch>> GetMainlineBranches(ICommit commit, Config configuration);
2526

2627
/// <summary>
2728
/// Find the commit where the given branch was branched from another branch.

src/GitVersion.Core/Core/MainlineBranchFinder.cs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,21 @@ internal class MainlineBranchFinder
1010
{
1111
private readonly Config configuration;
1212
private readonly ILog log;
13-
private readonly IEnumerable<KeyValuePair<string, BranchConfig>>? mainlineBranchConfigs;
13+
private readonly List<BranchConfig> mainlineBranchConfigurations;
1414
private readonly IGitRepository repository;
1515
private readonly IRepositoryStore repositoryStore;
1616

1717

18-
public MainlineBranchFinder(IRepositoryStore repositoryStore,
19-
IGitRepository repository,
20-
Config configuration,
21-
IEnumerable<KeyValuePair<string, BranchConfig>>? mainlineBranchConfigs,
22-
ILog log)
18+
public MainlineBranchFinder(
19+
IRepositoryStore repositoryStore,
20+
IGitRepository repository,
21+
Config configuration,
22+
ILog log)
2323
{
2424
this.repositoryStore = repositoryStore.NotNull();
2525
this.repository = repository.NotNull();
2626
this.configuration = configuration.NotNull();
27-
this.mainlineBranchConfigs = mainlineBranchConfigs;
27+
mainlineBranchConfigurations = configuration.Branches.Select(e => e.Value).Where(b => b?.IsMainline == true).ToList();
2828
this.log = log.NotNull();
2929
}
3030

@@ -44,7 +44,7 @@ public IDictionary<string, List<IBranch>> FindMainlineBranches(ICommit commit)
4444
private bool BranchIsMainline(INamedReference branch)
4545
{
4646
var matcher = new MainlineConfigBranchMatcher(branch, this.log);
47-
return this.mainlineBranchConfigs?.Any(matcher.IsMainline) == true;
47+
return this.mainlineBranchConfigurations.Any(matcher.IsMainline) == true;
4848
}
4949

5050
private class MainlineConfigBranchMatcher
@@ -58,9 +58,8 @@ public MainlineConfigBranchMatcher(INamedReference branch, ILog log)
5858
this.log = log;
5959
}
6060

61-
public bool IsMainline(KeyValuePair<string, BranchConfig> mainlineBranchConfig)
61+
public bool IsMainline(BranchConfig value)
6262
{
63-
var (_, value) = mainlineBranchConfig;
6463
if (value?.Regex == null)
6564
return false;
6665

src/GitVersion.Core/Core/RepositoryStore.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,9 @@ public IEnumerable<IBranch> GetBranchesContainingCommit(ICommit? commit, IEnumer
132132
return branchesContainingCommitFinder.GetBranchesContainingCommit(commit, branches, onlyTrackedBranches);
133133
}
134134

135-
public IDictionary<string, List<IBranch>> GetMainlineBranches(ICommit commit, Config configuration, IEnumerable<KeyValuePair<string, BranchConfig>>? mainlineBranchConfigs)
135+
public IDictionary<string, List<IBranch>> GetMainlineBranches(ICommit commit, Config configuration)
136136
{
137-
var mainlineBranchFinder = new MainlineBranchFinder(this, this.repository, configuration, mainlineBranchConfigs, this.log);
137+
var mainlineBranchFinder = new MainlineBranchFinder(this, this.repository, configuration, this.log);
138138
return mainlineBranchFinder.FindMainlineBranches(commit);
139139
}
140140

@@ -199,25 +199,23 @@ public IEnumerable<BranchCommit> FindCommitBranchesWasBranchedFrom(IBranch branc
199199

200200
public IEnumerable<BranchCommit> FindCommitBranchesWasBranchedFrom(IBranch branch, Config configuration, IEnumerable<IBranch> excludedBranches)
201201
{
202-
using (this.log.IndentLog($"Finding branch source of '{branch}'"))
202+
using (this.log.IndentLog($"Finding branches source of '{branch}'"))
203203
{
204204
if (branch.Tip == null)
205205
{
206206
this.log.Warning($"{branch} has no tip.");
207-
return Enumerable.Empty<BranchCommit>();
207+
yield break;
208208
}
209209

210-
var list = new List<BranchCommit>();
211210
DateTimeOffset? when = null;
212211
var branchCommits = new MergeCommitFinder(this, configuration, excludedBranches, this.log)
213212
.FindMergeCommitsFor(branch).ToList();
214213
foreach (var branchCommit in branchCommits)
215214
{
216215
if (when != null && branchCommit.Commit.When != when) break;
217-
list.Add(branchCommit);
216+
yield return branchCommit;
218217
when = branchCommit.Commit.When;
219218
}
220-
return list;
221219
}
222220
}
223221

src/GitVersion.Core/PublicAPI.Shipped.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,6 @@ GitVersion.Common.IRepositoryStore.FindMergeBase(GitVersion.ICommit! commit, Git
154154
GitVersion.Common.IRepositoryStore.GetBranchesContainingCommit(GitVersion.ICommit? commit, System.Collections.Generic.IEnumerable<GitVersion.IBranch!>? branches = null, bool onlyTrackedBranches = false) -> System.Collections.Generic.IEnumerable<GitVersion.IBranch!>!
155155
GitVersion.Common.IRepositoryStore.GetCommitLog(GitVersion.ICommit? baseVersionSource, GitVersion.ICommit? currentCommit) -> System.Collections.Generic.IEnumerable<GitVersion.ICommit!>!
156156
GitVersion.Common.IRepositoryStore.GetCurrentCommit(GitVersion.IBranch! currentBranch, string? commitId) -> GitVersion.ICommit?
157-
GitVersion.Common.IRepositoryStore.GetMainlineBranches(GitVersion.ICommit! commit, GitVersion.Model.Configuration.Config! configuration, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string!, GitVersion.Model.Configuration.BranchConfig!>>? mainlineBranchConfigs) -> System.Collections.Generic.IDictionary<string!, System.Collections.Generic.List<GitVersion.IBranch!>!>!
158157
GitVersion.Common.IRepositoryStore.GetMainlineCommitLog(GitVersion.ICommit? baseVersionSource, GitVersion.ICommit? mainlineTip) -> System.Collections.Generic.IEnumerable<GitVersion.ICommit!>!
159158
GitVersion.Common.IRepositoryStore.GetMergeBaseCommits(GitVersion.ICommit? mergeCommit, GitVersion.ICommit? mergedHead, GitVersion.ICommit? findMergeBase) -> System.Collections.Generic.IEnumerable<GitVersion.ICommit!>!
160159
GitVersion.Common.IRepositoryStore.GetNumberOfUncommittedChanges() -> int
@@ -816,7 +815,6 @@ GitVersion.RepositoryStore.FindMergeBase(GitVersion.ICommit! commit, GitVersion.
816815
GitVersion.RepositoryStore.GetBranchesContainingCommit(GitVersion.ICommit? commit, System.Collections.Generic.IEnumerable<GitVersion.IBranch!>? branches = null, bool onlyTrackedBranches = false) -> System.Collections.Generic.IEnumerable<GitVersion.IBranch!>!
817816
GitVersion.RepositoryStore.GetCommitLog(GitVersion.ICommit? baseVersionSource, GitVersion.ICommit? currentCommit) -> System.Collections.Generic.IEnumerable<GitVersion.ICommit!>!
818817
GitVersion.RepositoryStore.GetCurrentCommit(GitVersion.IBranch! currentBranch, string? commitId) -> GitVersion.ICommit?
819-
GitVersion.RepositoryStore.GetMainlineBranches(GitVersion.ICommit! commit, GitVersion.Model.Configuration.Config! configuration, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string!, GitVersion.Model.Configuration.BranchConfig!>>? mainlineBranchConfigs) -> System.Collections.Generic.IDictionary<string!, System.Collections.Generic.List<GitVersion.IBranch!>!>!
820818
GitVersion.RepositoryStore.GetMainlineCommitLog(GitVersion.ICommit? baseVersionSource, GitVersion.ICommit? mainlineTip) -> System.Collections.Generic.IEnumerable<GitVersion.ICommit!>!
821819
GitVersion.RepositoryStore.GetMergeBaseCommits(GitVersion.ICommit? mergeCommit, GitVersion.ICommit? mergedHead, GitVersion.ICommit? findMergeBase) -> System.Collections.Generic.IEnumerable<GitVersion.ICommit!>!
822820
GitVersion.RepositoryStore.GetNumberOfUncommittedChanges() -> int

src/GitVersion.Core/PublicAPI.Unshipped.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
GitVersion.Common.IRepositoryStore.FindCommitBranchesWasBranchedFrom(GitVersion.IBranch! branch, GitVersion.Model.Configuration.Config! configuration, params GitVersion.IBranch![]! excludedBranches) -> System.Collections.Generic.IEnumerable<GitVersion.BranchCommit>!
22
GitVersion.Common.IRepositoryStore.FindCommitBranchesWasBranchedFrom(GitVersion.IBranch! branch, GitVersion.Model.Configuration.Config! configuration, System.Collections.Generic.IEnumerable<GitVersion.IBranch!>! excludedBranches) -> System.Collections.Generic.IEnumerable<GitVersion.BranchCommit>!
33
GitVersion.Common.IRepositoryStore.GetCurrentCommitTaggedVersion(GitVersion.ICommit? commit, string? tagPrefix) -> GitVersion.SemanticVersion?
4+
GitVersion.Common.IRepositoryStore.GetMainlineBranches(GitVersion.ICommit! commit, GitVersion.Model.Configuration.Config! configuration) -> System.Collections.Generic.IDictionary<string!, System.Collections.Generic.List<GitVersion.IBranch!>!>!
45
GitVersion.Common.IRepositoryStore.GetSourceBranches(GitVersion.IBranch! branch, GitVersion.Model.Configuration.Config! configuration, params GitVersion.IBranch![]! excludedBranches) -> System.Collections.Generic.IEnumerable<GitVersion.IBranch!>!
56
GitVersion.Common.IRepositoryStore.GetSourceBranches(GitVersion.IBranch! branch, GitVersion.Model.Configuration.Config! configuration, System.Collections.Generic.IEnumerable<GitVersion.IBranch!>! excludedBranches) -> System.Collections.Generic.IEnumerable<GitVersion.IBranch!>!
67
GitVersion.Model.Configuration.BranchConfig.Inherit(GitVersion.Model.Configuration.BranchConfig? parentConfig) -> GitVersion.Model.Configuration.BranchConfig!
78
GitVersion.Model.Configuration.EffectiveConfiguration.EffectiveConfiguration(GitVersion.Extensions.AssemblyVersioningScheme assemblyVersioningScheme, GitVersion.Extensions.AssemblyFileVersioningScheme assemblyFileVersioningScheme, string? assemblyInformationalFormat, string? assemblyVersioningFormat, string? assemblyFileVersioningFormat, GitVersion.VersionCalculation.VersioningMode versioningMode, string? tagPrefix, string? tag, string? nextVersion, GitVersion.IncrementStrategy increment, string? branchPrefixToTrim, bool preventIncrementOfMergedBranchVersion, string? tagNumberPattern, string? continuousDeploymentFallbackTag, bool trackMergeTarget, string? majorVersionBumpMessage, string? minorVersionBumpMessage, string? patchVersionBumpMessage, string? noBumpMessage, GitVersion.VersionCalculation.CommitMessageIncrementMode commitMessageIncrementing, System.Collections.Generic.IEnumerable<GitVersion.VersionCalculation.IVersionFilter!>! versionFilters, bool tracksReleaseBranches, bool isReleaseBranch, bool isMainline, string? commitDateFormat, bool updateBuildNumber, GitVersion.SemanticVersionFormat semanticVersionFormat, int preReleaseWeight, int tagPreReleaseWeight) -> void
89
GitVersion.RepositoryStore.FindCommitBranchesWasBranchedFrom(GitVersion.IBranch! branch, GitVersion.Model.Configuration.Config! configuration, params GitVersion.IBranch![]! excludedBranches) -> System.Collections.Generic.IEnumerable<GitVersion.BranchCommit>!
910
GitVersion.RepositoryStore.FindCommitBranchesWasBranchedFrom(GitVersion.IBranch! branch, GitVersion.Model.Configuration.Config! configuration, System.Collections.Generic.IEnumerable<GitVersion.IBranch!>! excludedBranches) -> System.Collections.Generic.IEnumerable<GitVersion.BranchCommit>!
1011
GitVersion.RepositoryStore.GetCurrentCommitTaggedVersion(GitVersion.ICommit? commit, string? tagPrefix) -> GitVersion.SemanticVersion?
12+
GitVersion.RepositoryStore.GetMainlineBranches(GitVersion.ICommit! commit, GitVersion.Model.Configuration.Config! configuration) -> System.Collections.Generic.IDictionary<string!, System.Collections.Generic.List<GitVersion.IBranch!>!>!
1113
GitVersion.RepositoryStore.GetSourceBranches(GitVersion.IBranch! branch, GitVersion.Model.Configuration.Config! configuration, params GitVersion.IBranch![]! excludedBranches) -> System.Collections.Generic.IEnumerable<GitVersion.IBranch!>!
1214
GitVersion.RepositoryStore.GetSourceBranches(GitVersion.IBranch! branch, GitVersion.Model.Configuration.Config! configuration, System.Collections.Generic.IEnumerable<GitVersion.IBranch!>! excludedBranches) -> System.Collections.Generic.IEnumerable<GitVersion.IBranch!>!
1315
GitVersion.SemanticVersion.BuildMetaData -> GitVersion.SemanticVersionBuildMetaData?

src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,16 +143,15 @@ private IBranch GetMainline(ICommit? baseVersionSource)
143143

144144
IDictionary<string, List<IBranch>>? mainlineBranches = null;
145145

146-
List<KeyValuePair<string, Model.Configuration.BranchConfig>>? mainlineBranchConfigs = context.FullConfiguration.Branches.Where(b => b.Value.IsMainline != null && b.Value.IsMainline.Value).ToList();
147146
if (context.CurrentCommit != null)
148147
{
149-
mainlineBranches = this.repositoryStore.GetMainlineBranches(context.CurrentCommit, context.FullConfiguration, mainlineBranchConfigs);
148+
mainlineBranches = this.repositoryStore.GetMainlineBranches(context.CurrentCommit, context.FullConfiguration);
150149
}
151150
mainlineBranches ??= new Dictionary<string, List<IBranch>>();
152151

153152
if (!mainlineBranches.Any())
154153
{
155-
var mainlineBranchConfigsString = string.Join(", ", mainlineBranchConfigs.Where(x => x.Value != null).Select(b => b.Value?.Name));
154+
var mainlineBranchConfigsString = string.Join(", ", context.FullConfiguration.Branches.Where(b => b.Value?.IsMainline == true).Select(b => b.Value.Name));
156155
throw new WarningException($"No branches can be found matching the commit {context.CurrentCommit?.Sha} in the configured Mainline branches: {mainlineBranchConfigsString}");
157156
}
158157

0 commit comments

Comments
 (0)