Skip to content

Commit b924119

Browse files
committed
Merge pull request #346 from JakeGinnivan/ConfigBasedVersioningImprovements
Config based versioning improvements
2 parents 7b59651 + f7e30c4 commit b924119

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1117
-79
lines changed

GitVersionCore.Tests/Fixtures/BaseGitFlowRepositoryFixture.cs

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
using System;
22
using System.IO;
3-
using System.Text;
43
using GitVersion;
5-
using GitVersion.Helpers;
64
using LibGit2Sharp;
75

86
/// <summary>
@@ -41,19 +39,4 @@ void SetupRepo(Action<IRepository> initialMasterAction)
4139
Repository.CreateBranch("develop").Checkout();
4240
Repository.MakeACommit();
4341
}
44-
45-
public void DumpGraph()
46-
{
47-
var output = new StringBuilder();
48-
49-
ProcessHelper.Run(
50-
o => output.AppendLine(o),
51-
e => output.AppendLineFormat("ERROR: {0}", e),
52-
null,
53-
"git",
54-
@"log --graph --abbrev-commit --decorate --date=relative --all",
55-
RepositoryPath);
56-
57-
Console.Write(output.ToString());
58-
}
5942
}

GitVersionCore.Tests/Fixtures/EmptyRepositoryFixture.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using System;
2+
using System.Text;
23
using GitVersion;
4+
using GitVersion.Helpers;
35
using LibGit2Sharp;
46

57
public class EmptyRepositoryFixture : RepositoryFixtureBase
@@ -9,6 +11,21 @@ public EmptyRepositoryFixture(Config configuration) :
911
{
1012
}
1113

14+
public void DumpGraph()
15+
{
16+
var output = new StringBuilder();
17+
18+
ProcessHelper.Run(
19+
o => output.AppendLine(o),
20+
e => output.AppendLineFormat("ERROR: {0}", e),
21+
null,
22+
"git",
23+
@"log --graph --abbrev-commit --decorate --date=relative --all",
24+
RepositoryPath);
25+
26+
Console.Write(output.ToString());
27+
}
28+
1229
static IRepository CreateNewRepository(string path)
1330
{
1431
LibGit2Sharp.Repository.Init(path);
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
namespace GitVersionCore.Tests
2+
{
3+
using GitVersion;
4+
using LibGit2Sharp;
5+
6+
public class GitVersionContextBuilder
7+
{
8+
IRepository repository;
9+
Config config;
10+
11+
public GitVersionContextBuilder WithRepository(IRepository repository)
12+
{
13+
this.repository = repository;
14+
return this;
15+
}
16+
17+
public GitVersionContextBuilder WithConfig(Config config)
18+
{
19+
this.config = config;
20+
return this;
21+
}
22+
23+
public GitVersionContextBuilder WithTaggedMaster()
24+
{
25+
repository = CreateRepository();
26+
var target = repository.Head.Tip;
27+
((MockTagCollection)repository.Tags).Add(new MockTag ("1.0.0", target));
28+
return this;
29+
}
30+
31+
public GitVersionContextBuilder AddCommit()
32+
{
33+
((MockBranch)repository.Head).Add(new MockCommit());
34+
return this;
35+
}
36+
37+
public GitVersionContextBuilder WithDevelopBranch()
38+
{
39+
return WithBranch("develop");
40+
}
41+
42+
public GitVersionContextBuilder WithBranch(string branchName)
43+
{
44+
repository = CreateRepository();
45+
return AddBranch(branchName);
46+
}
47+
48+
public GitVersionContextBuilder AddBranch(string branchName)
49+
{
50+
var mockBranch = new MockBranch(branchName)
51+
{
52+
new MockCommit()
53+
};
54+
((MockBranchCollection)repository.Branches).Add(mockBranch);
55+
((MockRepository)repository).Head = mockBranch;
56+
return this;
57+
}
58+
59+
public GitVersionContext Build()
60+
{
61+
return new GitVersionContext(repository ?? CreateRepository(), config ?? new Config());
62+
}
63+
64+
IRepository CreateRepository()
65+
{
66+
var mockBranch = new MockBranch("master") { new MockCommit { CommitterEx = SignatureBuilder.SignatureNow() } };
67+
var mockRepository = new MockRepository
68+
{
69+
Branches = new MockBranchCollection
70+
{
71+
mockBranch
72+
},
73+
Tags = new MockTagCollection(),
74+
Head = mockBranch
75+
};
76+
77+
return mockRepository;
78+
}
79+
}
80+
}

GitVersionCore.Tests/GitVersionContextTests.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace GitVersionCore.Tests
22
{
33
using GitVersion;
4+
using LibGit2Sharp;
45
using NUnit.Framework;
56
using Shouldly;
67

@@ -50,5 +51,26 @@ public void UsesBranchSpecificConfigOverTopLevelDefaults()
5051
context.Configuration.VersioningMode.ShouldBe(VersioningMode.ContinuousDeployment);
5152
context.Configuration.Tag.ShouldBe("alpha");
5253
}
54+
55+
[Test]
56+
public void CanFindParentBranchForInheritingIncrementStrategy()
57+
{
58+
var config = new Config();
59+
config.Branches["develop"].Increment = IncrementStrategy.Major;
60+
config.Branches["feature[/-]"].Increment = IncrementStrategy.Inherit;
61+
62+
using (var repo = new EmptyRepositoryFixture(config))
63+
{
64+
repo.Repository.MakeACommit();
65+
repo.Repository.CreateBranch("develop").Checkout();
66+
repo.Repository.MakeACommit();
67+
var featureBranch = repo.Repository.CreateBranch("feature/foo");
68+
featureBranch.Checkout();
69+
repo.Repository.MakeACommit();
70+
71+
var context = new GitVersionContext(repo.Repository, config);
72+
context.Configuration.Increment.ShouldBe(IncrementStrategy.Major);
73+
}
74+
}
5375
}
5476
}

GitVersionCore.Tests/GitVersionCore.Tests.csproj

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@
9696
<Compile Include="Mocks\MockCommit.cs" />
9797
<Compile Include="Mocks\MockCommitLog.cs" />
9898
<Compile Include="Mocks\MockMergeCommit.cs" />
99+
<Compile Include="Mocks\MockQueryableCommitLog.cs" />
99100
<Compile Include="Mocks\MockReferenceCollection.cs" />
100101
<Compile Include="Mocks\MockReflogCollection.cs" />
101102
<Compile Include="Mocks\MockRepository.cs" />
@@ -114,6 +115,15 @@
114115
<Compile Include="TestEffectiveConfiguration.cs" />
115116
<Compile Include="TestFileSystem.cs" />
116117
<Compile Include="VariableProviderTests.cs" />
118+
<Compile Include="VersionCalculation\BaseVersionCalculatorTests.cs" />
119+
<Compile Include="VersionCalculation\NewNextVersionCalculatorTests.cs" />
120+
<Compile Include="VersionCalculation\Strategies\ConfigNextVersionBaseVersionStrategyTests.cs" />
121+
<Compile Include="GitVersionContextBuilder.cs" />
122+
<Compile Include="VersionCalculation\Strategies\LastTagBaseVersionStrategyTests.cs" />
123+
<Compile Include="VersionCalculation\Strategies\MergeMessageBaseVersionStrategyTests.cs" />
124+
<Compile Include="VersionCalculation\Strategies\VersionInBranchBaseVersionStrategyTests.cs" />
125+
<Compile Include="VersionCalculation\TestBaseVersionCalculator.cs" />
126+
<Compile Include="VersionCalculation\TestMetaDataCalculator.cs" />
117127
</ItemGroup>
118128
<ItemGroup>
119129
<None Include="packages.config" />

GitVersionCore.Tests/IntegrationTests/GitFlow/DevelopScenarios.cs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,43 @@
66
public class DevelopScenarios
77
{
88
[Test]
9-
public void WhenDevelopBranchedFromMaster_MinorIsIncreased()
9+
public void WhenDevelopBranchedFromTaggedCommitOnMasterVersionDoesNotChange()
1010
{
1111
using (var fixture = new EmptyRepositoryFixture(new Config()))
1212
{
1313
fixture.Repository.MakeATaggedCommit("1.0.0");
1414
fixture.Repository.CreateBranch("develop").Checkout();
15+
// TODO Should actually be 1.0.0+0
1516
fixture.AssertFullSemver("1.1.0-unstable.0+0");
1617
}
1718
}
1819

20+
[Test]
21+
public void WhenDevelopBranchedFromMaster_MinorIsIncreased()
22+
{
23+
using (var fixture = new EmptyRepositoryFixture(new Config()))
24+
{
25+
fixture.Repository.MakeATaggedCommit("1.0.0");
26+
fixture.Repository.CreateBranch("develop").Checkout();
27+
fixture.Repository.MakeACommit();
28+
fixture.AssertFullSemver("1.1.0-unstable.1+1");
29+
}
30+
}
31+
1932
[Test]
2033
public void MergingReleaseBranchBackIntoDevelopWithoutMergingToMaster_DoesNotBumpDevelopVersion()
2134
{
2235
using (var fixture = new EmptyRepositoryFixture(new Config()))
2336
{
2437
fixture.Repository.MakeATaggedCommit("1.0.0");
2538
fixture.Repository.CreateBranch("develop").Checkout();
39+
fixture.Repository.MakeACommit();
2640
fixture.Repository.CreateBranch("release-2.0.0").Checkout();
2741
fixture.AssertFullSemver("2.0.0-beta.1+0");
2842
fixture.Repository.Checkout("develop");
29-
fixture.AssertFullSemver("1.1.0-unstable.0+0");
43+
fixture.AssertFullSemver("1.1.0-unstable.1+1");
3044
fixture.Repository.MergeNoFF("release-2.0.0", Constants.SignatureNow());
31-
fixture.AssertFullSemver("1.1.0-unstable.0+0");
45+
fixture.AssertFullSemver("1.1.0-unstable.1+1");
3246
}
3347
}
3448

GitVersionCore.Tests/Mocks/MockCommit.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,17 @@
66
[DebuggerDisplay("{DebuggerDisplay}")]
77
public class MockCommit : Commit
88
{
9+
static int commitCount = 1;
10+
static DateTimeOffset when = DateTimeOffset.Now;
11+
912
public MockCommit(ObjectId id = null)
1013
{
1114
idEx = id ?? new ObjectId(Guid.NewGuid().ToString().Replace("-", "") + "00000000");
12-
MessageEx = "";
15+
MessageEx = "Commit " + commitCount++;
1316
ParentsEx = new List<Commit> { null };
14-
CommitterEx = new Signature("Joe", "[email protected]", DateTimeOffset.Now);
17+
CommitterEx = new Signature("Joe", "[email protected]", when);
18+
// Make sure each commit is a different time
19+
when = when.AddSeconds(1);
1520
}
1621

1722
public string MessageEx;

GitVersionCore.Tests/Mocks/MockCommitLog.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Collections;
22
using System.Collections.Generic;
3+
using System.Linq;
34
using LibGit2Sharp;
45

56
public class MockCommitLog : ICommitLog, ICollection<Commit>
@@ -8,7 +9,10 @@ public class MockCommitLog : ICommitLog, ICollection<Commit>
89

910
public IEnumerator<Commit> GetEnumerator()
1011
{
11-
return Commits.GetEnumerator();
12+
if (SortedBy == CommitSortStrategies.Reverse)
13+
return Commits.GetEnumerator();
14+
15+
return Enumerable.Reverse(Commits).GetEnumerator();
1216
}
1317

1418
IEnumerator IEnumerable.GetEnumerator()
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using System;
2+
using System.Collections;
3+
using System.Collections.Generic;
4+
using LibGit2Sharp;
5+
6+
public class MockQueryableCommitLog : IQueryableCommitLog
7+
{
8+
readonly ICommitLog commits;
9+
10+
public MockQueryableCommitLog(ICommitLog commits)
11+
{
12+
this.commits = commits;
13+
}
14+
15+
public IEnumerator<Commit> GetEnumerator()
16+
{
17+
return commits.GetEnumerator();
18+
}
19+
20+
IEnumerator IEnumerable.GetEnumerator()
21+
{
22+
return GetEnumerator();
23+
}
24+
25+
public CommitSortStrategies SortedBy
26+
{
27+
get { throw new NotImplementedException(); }
28+
}
29+
30+
public ICommitLog QueryBy(CommitFilter filter)
31+
{
32+
throw new NotImplementedException();
33+
}
34+
35+
public Commit FindMergeBase(Commit first, Commit second)
36+
{
37+
throw new NotImplementedException();
38+
}
39+
40+
public Commit FindMergeBase(IEnumerable<Commit> commits, MergeBaseFindingStrategy strategy)
41+
{
42+
throw new NotImplementedException();
43+
}
44+
}

GitVersionCore.Tests/Mocks/MockRepository.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
public class MockRepository : IRepository
66
{
7+
IQueryableCommitLog commits;
8+
79
public MockRepository()
810
{
911
Tags = new MockTagCollection();
@@ -116,7 +118,13 @@ public BlameHunkCollection Blame(string path, BlameOptions options = null)
116118
public Configuration Config { get; set; }
117119
public Index Index { get; set; }
118120
public ReferenceCollection Refs { get; set; }
119-
public IQueryableCommitLog Commits { get; set; }
121+
122+
public IQueryableCommitLog Commits
123+
{
124+
get { return commits ?? new MockQueryableCommitLog(Head.Commits); }
125+
set { commits = value; }
126+
}
127+
120128
public BranchCollection Branches { get; set; }
121129
public TagCollection Tags { get; set; }
122130
public RepositoryInformation Info { get; set; }

GitVersionCore.Tests/Mocks/MockTag.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,15 @@ public override GitObject Target
1515
get { return TargetEx; }
1616
}
1717
public TagAnnotation AnnotationEx;
18+
19+
public MockTag() { }
20+
21+
public MockTag(string name, Commit target)
22+
{
23+
NameEx = name;
24+
TargetEx = target;
25+
}
26+
1827
public override TagAnnotation Annotation
1928
{
2029
get { return AnnotationEx; }

GitVersionCore.Tests/TestEffectiveConfiguration.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ public TestEffectiveConfiguration(
99
VersioningMode versioningMode = VersioningMode.ContinuousDelivery,
1010
string gitTagPrefix = "v",
1111
string tag = "",
12-
string nextVersion = null) :
13-
base(assemblyVersioningScheme, versioningMode, gitTagPrefix, tag, nextVersion)
12+
string nextVersion = null,
13+
string branchPrefixToTrim = "") :
14+
base(assemblyVersioningScheme, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch, branchPrefixToTrim)
1415
{
1516
}
1617
}

0 commit comments

Comments
 (0)