Skip to content

Commit 5c27b12

Browse files
committed
Fixed a possible NullReferenceException in mainline mode
1 parent f935865 commit 5c27b12

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,4 +107,5 @@ site/
107107
# Cake
108108
####################
109109
/tools
110-
/*.zip
110+
/*.zip
111+
GitVersion.CommandLine/*/

src/GitVersionCore/VersionCalculation/NextVersionCalculator.cs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ SemanticVersion FindMainlineModeVersion(BaseVersion baseVersion, GitVersionConte
127127
mainlineVersion = IncrementForEachCommit(context, directCommits, mainlineVersion);
128128
mainlineVersion.BuildMetaData = metaDataCalculator.Create(findMergeBase, context);
129129
// Only increment if head is not a merge commit, ensures PR's and forward merges end up correct.
130-
if (mergedHead.Parents.Count() == 1)
130+
if (mergedHead.Parents.Count() == 1)
131131
{
132132
Logger.WriteInfo(string.Format("Performing {0} increment for current branch ", branchIncrement));
133133
mainlineVersion = mainlineVersion.IncrementVersion(branchIncrement);
@@ -146,7 +146,7 @@ SemanticVersion FindMainlineModeVersion(BaseVersion baseVersion, GitVersionConte
146146

147147
SemanticVersion AggregateMergeCommitIncrement(GitVersionContext context, Commit commit, List<Commit> directCommits, SemanticVersion mainlineVersion)
148148
{
149-
// Merge commit, process all merged commits as a batch
149+
// Merge commit, process all merged commits as a batch
150150
var mergeCommit = commit;
151151
var mergedHead = GetMergedHead(mergeCommit);
152152
var findMergeBase = context.Repository.ObjectDatabase.FindMergeBase(mergeCommit.Parents.First(), mergedHead);
@@ -183,8 +183,14 @@ static Commit GetMainlineTip(GitVersionContext context)
183183
seenMainlineTips.Add(b.Tip.Sha);
184184
return true;
185185
})
186-
.GroupBy(b => context.Repository.ObjectDatabase.FindMergeBase(b.Tip, context.CurrentCommit).Sha)
187-
.ToDictionary(b => b.Key, b => b.ToList());
186+
.Select(b => new
187+
{
188+
MergeBase = context.Repository.ObjectDatabase.FindMergeBase(b.Tip, context.CurrentCommit),
189+
Branch = b
190+
})
191+
.Where(a => a.MergeBase != null)
192+
.GroupBy(b => b.MergeBase.Sha, b => b.Branch)
193+
.ToDictionary(b => b.Key, b => b.ToList());
188194

189195
var allMainlines = mainlineBranches.Values.SelectMany(branches => branches.Select(b => b.FriendlyName));
190196
Logger.WriteInfo("Found possible mainline branches: " + string.Join(", ", allMainlines));
@@ -217,7 +223,7 @@ private static SemanticVersion IncrementForEachCommit(GitVersionContext context,
217223
directCommit
218224
}) ?? VersionField.Patch;
219225
mainlineVersion = mainlineVersion.IncrementVersion(directCommitIncrement);
220-
Logger.WriteInfo(string.Format("Direct commit on master {0} incremented base versions {1}, now {2}",
226+
Logger.WriteInfo(string.Format("Direct commit on master {0} incremented base versions {1}, now {2}",
221227
directCommit.Sha, directCommitIncrement, mainlineVersion));
222228
}
223229
return mainlineVersion;
@@ -231,8 +237,8 @@ private static VersionField FindMessageIncrement(
231237
IncludeReachableFrom = mergedHead,
232238
ExcludeReachableFrom = findMergeBase
233239
};
234-
var commits = mergeCommit == null ?
235-
context.Repository.Commits.QueryBy(filter).ToList() :
240+
var commits = mergeCommit == null ?
241+
context.Repository.Commits.QueryBy(filter).ToList() :
236242
new[] { mergeCommit }.Union(context.Repository.Commits.QueryBy(filter)).ToList();
237243
commitLog.RemoveAll(c => commits.Any(c1 => c1.Sha == c.Sha));
238244
return IncrementStrategyFinder.GetIncrementForCommits(context, commits) ?? VersionField.Patch;

0 commit comments

Comments
 (0)