Skip to content

Commit 43c2849

Browse files
committed
split out LastVersionOnMasterFinder
1 parent de4469e commit 43c2849

File tree

6 files changed

+342
-32
lines changed

6 files changed

+342
-32
lines changed

GitVersionCore.Tests/GitFlow/MetaDataByCommitFixture.cs

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
 using System;
2-
using GitVersion;
3-
using LibGit2Sharp;
4-
using NUnit.Framework;
5-
using Shouldly;
1+
using LibGit2Sharp;
2+
using NUnit.Framework;
3+
using Shouldly;
64

75
[TestFixture]
86
public class MetaDataByCommitFixture
@@ -33,65 +31,56 @@ public void CanCorrectlyDetectCommitCountsAndReleaseDataWhenThatApplies()
3331
using (var f = new CommitCountingRepoFixture())
3432
{
3533
ResetToP(f.Repository);
36-
EnsureMetaDataMatch(f, "develop", "1.4.0-unstable.7+7");
34+
EnsureMetaDataMatch(f, "1.4.0-unstable.7+7");
3735

3836
ResetToO(f.Repository);
39-
EnsureMetaDataMatch(f, "develop", "1.4.0-unstable.6+6");
37+
EnsureMetaDataMatch(f, "1.4.0-unstable.6+6");
4038

4139
ResetToN(f.Repository);
42-
EnsureMetaDataMatch(f, "master", "1.3.1", r => (Commit) r.Tags["1.3.0"].Target);
40+
EnsureMetaDataMatch(f, "1.3.1");
4341

4442
ResetToM(f.Repository);
45-
EnsureMetaDataMatch(f, "develop", "1.4.0-unstable.5+5");
43+
EnsureMetaDataMatch(f, "1.4.0-unstable.5+5");
4644

4745
ResetToL(f.Repository);
48-
EnsureMetaDataMatch(f, "hotfix-1.3.1", "1.3.1-beta.1+1", r => (Commit) r.Tags["1.3.0"].Target);
46+
EnsureMetaDataMatch(f, "1.3.1-beta.1+1");
4947

5048
ResetToK(f.Repository);
51-
EnsureMetaDataMatch(f, "feature", "1.4.0-feature+2");
49+
EnsureMetaDataMatch(f, "1.4.0-feature+2");
5250

5351
ResetToJ(f.Repository);
54-
EnsureMetaDataMatch(f, "feature", "1.4.0-feature+1");
52+
EnsureMetaDataMatch(f, "1.4.0-feature+1");
5553

5654
ResetToI(f.Repository);
57-
EnsureMetaDataMatch(f, "develop", "1.4.0-unstable.2+2");
55+
EnsureMetaDataMatch(f, "1.4.0-unstable.2+2");
5856

5957
ResetToH(f.Repository);
60-
EnsureMetaDataMatch(f, "master", "1.3.0", r => (Commit) r.Tags["1.3.0"].Target);
58+
EnsureMetaDataMatch(f, "1.3.0");
6159

6260
ResetToG(f.Repository);
63-
EnsureMetaDataMatch(f, "release-1.3.0", "1.3.0-beta.1+2");
61+
EnsureMetaDataMatch(f, "1.3.0-beta.1+2");
6462

6563
ResetToF(f.Repository);
66-
EnsureMetaDataMatch(f, "master", "1.2.1", r => (Commit) r.Tags["1.2.0"].Target);
64+
EnsureMetaDataMatch(f, "1.2.1");
6765

6866
ResetToE(f.Repository);
69-
EnsureMetaDataMatch(f, "develop", "1.3.0-unstable.2+2");
67+
EnsureMetaDataMatch(f, "1.3.0-unstable.2+2");
7068

7169
ResetToD(f.Repository);
72-
EnsureMetaDataMatch(f, "release-1.3.0", "1.3.0-beta.1+1");
70+
EnsureMetaDataMatch(f, "1.3.0-beta.1+1");
7371

7472
ResetToC(f.Repository);
75-
EnsureMetaDataMatch(f, "hotfix-1.2.1", "1.2.1-beta.1+1", r => (Commit) r.Tags["1.2.0"].Target);
73+
EnsureMetaDataMatch(f, "1.2.1-beta.1+1");
7674

7775
ResetToB(f.Repository);
78-
EnsureMetaDataMatch(f, "develop", "1.3.0-unstable.1+1");
76+
EnsureMetaDataMatch(f, "1.3.0-unstable.1+1");
7977
}
8078
}
8179

82-
static void EnsureMetaDataMatch(
83-
CommitCountingRepoFixture fixture, string branchName,
84-
string expectedSemVer, Func<IRepository, Commit> commitFinder = null)
80+
static void EnsureMetaDataMatch(CommitCountingRepoFixture fixture,string expectedSemVer)
8581
{
86-
87-
var referenceCommitFinder = commitFinder ?? (r => r.FindBranch(branchName).Tip);
88-
89-
var commit = referenceCommitFinder(fixture.Repository);
90-
9182
var result = fixture.ExecuteGitVersion();
9283
result.ToString("f").ShouldBe(expectedSemVer);
93-
result.BuildMetaData.ReleaseDate.OriginalCommitSha.ShouldBe(commit.Sha);
94-
result.BuildMetaData.ReleaseDate.OriginalDate.ShouldBe(commit.Committer.When);
9584
}
9685

9786
void DropTags(IRepository repo, params string[] names)

GitVersionCore.Tests/GitVersionCore.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
<Compile Include="Helpers\NextVersionWriter.cs" />
7979
<Compile Include="InformationalVersionBuilderTests.cs" />
8080
<Compile Include="JsonVersionBuilderTests.cs" />
81+
<Compile Include="LastVersionOnMasterFinderTests.cs" />
8182
<Compile Include="ModuleInitializer.cs" />
8283
<Compile Include="EmptyRepositoryFixture.cs" />
8384
<Compile Include="Helpers\GitHelper.cs" />
Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
 using System;
2+
using GitVersion;
3+
using LibGit2Sharp;
4+
using NUnit.Framework;
5+
using Shouldly;
6+
7+
[TestFixture]
8+
public class LastVersionOnMasterFinderTests
9+
{
10+
/*
11+
* hotfix-1.2.1 -----------C--
12+
* / \
13+
* master A----------------F-----H-------N
14+
* \ / \ /
15+
* hotfix-1.3.1 \ / ----L
16+
* \ / \
17+
* release-1.3.0 \ -D----G--- \
18+
* \ / \ \
19+
* develop -----B----E-------I-----M--O--P
20+
* \ /
21+
* feature -------J-K-
22+
*
23+
*
24+
* - A is tagged `1.2.0`
25+
* - F is tagged `1.2.1`
26+
* - H is tagged `1.3.0`
27+
* - N is tagged `1.3.1`
28+
*/
29+
30+
[Test]
31+
public void CanCorrectlyDetectCommitCountsAndReleaseDataWhenThatApplies()
32+
{
33+
using (var f = new CommitCountingRepoFixture())
34+
{
35+
ResetToP(f.Repository);
36+
EnsureMetaDataMatch(f, "develop");
37+
38+
ResetToO(f.Repository);
39+
EnsureMetaDataMatch(f, "develop");
40+
41+
ResetToN(f.Repository);
42+
EnsureMetaDataMatch(f, "master", r => (Commit) r.Tags["1.3.0"].Target);
43+
44+
ResetToM(f.Repository);
45+
EnsureMetaDataMatch(f, "develop");
46+
47+
ResetToL(f.Repository);
48+
EnsureMetaDataMatch(f, "hotfix-1.3.1", r => (Commit) r.Tags["1.3.0"].Target);
49+
50+
ResetToK(f.Repository);
51+
EnsureMetaDataMatch(f, "feature");
52+
53+
ResetToJ(f.Repository);
54+
EnsureMetaDataMatch(f, "feature");
55+
56+
ResetToI(f.Repository);
57+
EnsureMetaDataMatch(f, "develop");
58+
59+
ResetToH(f.Repository);
60+
EnsureMetaDataMatch(f, "master", r => (Commit) r.Tags["1.3.0"].Target);
61+
62+
ResetToG(f.Repository);
63+
EnsureMetaDataMatch(f, "release-1.3.0");
64+
65+
ResetToF(f.Repository);
66+
EnsureMetaDataMatch(f, "master", r => (Commit) r.Tags["1.2.0"].Target);
67+
68+
ResetToE(f.Repository);
69+
EnsureMetaDataMatch(f, "develop");
70+
71+
ResetToD(f.Repository);
72+
EnsureMetaDataMatch(f, "release-1.3.0");
73+
74+
ResetToC(f.Repository);
75+
EnsureMetaDataMatch(f, "hotfix-1.2.1", r => (Commit) r.Tags["1.2.0"].Target);
76+
77+
ResetToB(f.Repository);
78+
EnsureMetaDataMatch(f, "develop");
79+
}
80+
}
81+
82+
static void EnsureMetaDataMatch(CommitCountingRepoFixture fixture, string branchName, Func<IRepository, Commit> commitFinder = null)
83+
{
84+
var referenceCommitFinder = commitFinder ?? (r => r.FindBranch(branchName).Tip);
85+
86+
var commit = referenceCommitFinder(fixture.Repository);
87+
var releaseDate = LastVersionOnMasterFinder.Execute(fixture.Repository, commit);
88+
releaseDate.OriginalCommitSha.ShouldBe(commit.Sha);
89+
releaseDate.OriginalDate.ShouldBe(commit.Committer.When);
90+
}
91+
92+
void DropTags(IRepository repo, params string[] names)
93+
{
94+
foreach (var name in names)
95+
{
96+
if (repo.Tags[name] == null)
97+
{
98+
continue;
99+
}
100+
101+
repo.Tags.Remove(name);
102+
}
103+
}
104+
105+
void DropBranches(IRepository repo, params string[] names)
106+
{
107+
foreach (var name in names)
108+
{
109+
if (repo.Branches[name] == null)
110+
{
111+
continue;
112+
}
113+
114+
repo.Branches.Remove(name);
115+
}
116+
}
117+
118+
void ResetBranch(IRepository repo, string name, string committish)
119+
{
120+
var b = repo.Branches[name];
121+
Assert.NotNull(b);
122+
repo.Refs.UpdateTarget(b.CanonicalName, committish);
123+
}
124+
125+
void ResetToP(IRepository repo)
126+
{
127+
ResetBranch(repo, "develop", "4d65c519f88773854f9345eaf5dbb30cb49f6a74");
128+
}
129+
130+
void ResetToO(IRepository repo)
131+
{
132+
ResetBranch(repo, "develop", "7655537837096d925a4f974232f78ec589d86ebd");
133+
}
134+
135+
void ResetToN(IRepository repo)
136+
{
137+
ResetBranch(repo, "develop", "0b7a2482ab7d167cefa4ecfc106db001dc5c17ff");
138+
repo.Refs.UpdateTarget("HEAD", "refs/heads/master");
139+
}
140+
141+
void ResetToM(IRepository repo)
142+
{
143+
ResetBranch(repo, "develop", "0b7a2482ab7d167cefa4ecfc106db001dc5c17ff");
144+
ResetBranch(repo, "master", "5b84136c848fd48f1f8b3fa4e1b767a1f6101279");
145+
DropTags(repo, "1.3.1");
146+
repo.Refs.UpdateTarget("HEAD", "refs/heads/develop");
147+
}
148+
149+
void ResetToL(IRepository repo)
150+
{
151+
ResetBranch(repo, "develop", "243f56dcdb543688fd0a99bd3e0e72dd9a786603");
152+
repo.Refs.UpdateTarget("HEAD", "refs/heads/hotfix-1.3.1");
153+
}
154+
155+
void ResetToK(IRepository repo)
156+
{
157+
repo.Refs.UpdateTarget("HEAD", "refs/heads/feature");
158+
DropBranches(repo, "hotfix-1.3.1");
159+
}
160+
161+
void ResetToJ(IRepository repo)
162+
{
163+
ResetBranch(repo, "feature", "0491c5dac30d706f4e54c5cb26d082baad8228d1");
164+
}
165+
166+
void ResetToI(IRepository repo)
167+
{
168+
repo.Refs.UpdateTarget("HEAD", "refs/heads/develop");
169+
DropBranches(repo, "feature");
170+
}
171+
172+
void ResetToH(IRepository repo)
173+
{
174+
ResetBranch(repo, "develop", "320f4b6820cf4b0853dc08ac153f04fbd4958200");
175+
repo.Refs.UpdateTarget("HEAD", "refs/heads/master");
176+
}
177+
178+
void ResetToG(IRepository repo)
179+
{
180+
ResetBranch(repo, "master", "576a28e321cd6dc764b52c5fface672fa076f37f");
181+
repo.Refs.UpdateTarget("HEAD", "refs/heads/release-1.3.0");
182+
DropTags(repo, "1.3.0");
183+
}
184+
185+
void ResetToF(IRepository repo)
186+
{
187+
ResetBranch(repo, "release-1.3.0", "b53054c614d36edc9d1bee8c35cd2ed575a43607");
188+
repo.Refs.UpdateTarget("HEAD", "refs/heads/master");
189+
}
190+
191+
void ResetToE(IRepository repo)
192+
{
193+
ResetBranch(repo, "master", "8c890487ed143d5a72d151e64be1c5ddb314c908");
194+
repo.Refs.UpdateTarget("HEAD", "refs/heads/develop");
195+
DropTags(repo, "1.2.1");
196+
}
197+
198+
void ResetToD(IRepository repo)
199+
{
200+
ResetBranch(repo, "develop", "fab69e28ee35dd912c0c95d5993dd84e4f2bcd92");
201+
repo.Refs.UpdateTarget("HEAD", "refs/heads/release-1.3.0");
202+
}
203+
204+
void ResetToC(IRepository repo)
205+
{
206+
repo.Refs.UpdateTarget("HEAD", "refs/heads/hotfix-1.2.1");
207+
DropBranches(repo, "release-1.3.0");
208+
}
209+
210+
void ResetToB(IRepository repo)
211+
{
212+
repo.Refs.UpdateTarget("HEAD", "refs/heads/develop");
213+
DropBranches(repo, "hotfix-1.2.1");
214+
}
215+
}

GitVersionCore/GitVersionCore.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
<Compile Include="BuildServers\TeamCity.cs" />
6666
<Compile Include="CachedVersion.cs" />
6767
<Compile Include="DirectoryDateFinder.cs" />
68+
<Compile Include="ReleaseDateFinder - Copy.cs" />
6869
<Compile Include="ShortVersion.cs" />
6970
<Compile Include="SemanticVersionExtensions.cs" />
7071
<Compile Include="WarningException.cs" />

0 commit comments

Comments
 (0)