Skip to content

Commit aba2bec

Browse files
committed
Some updates to remote fixture. This will allow cleaner tests going forward
1 parent 4ea2dcf commit aba2bec

File tree

11 files changed

+81
-71
lines changed

11 files changed

+81
-71
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using GitVersion;
2+
using LibGit2Sharp;
3+
4+
public class LocalRepositoryFixture : RepositoryFixtureBase
5+
{
6+
public LocalRepositoryFixture(Config configuration, IRepository repository) : base(configuration, repository)
7+
{
8+
}
9+
}
Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,30 @@
11
using System;
2-
3-
using GitVersion;
4-
using LibGit2Sharp;
2+
using GitVersion;
3+
using LibGit2Sharp;
54

65
public class RemoteRepositoryFixture : RepositoryFixtureBase
76
{
8-
public string LocalRepositoryPath;
9-
public IRepository LocalRepository;
10-
117
public RemoteRepositoryFixture(Func<string, IRepository> builder, Config configuration)
128
: base(builder, configuration)
139
{
14-
CloneRepository();
10+
CreateLocalRepository();
1511
}
1612

1713
public RemoteRepositoryFixture(Config configuration)
1814
: base(CreateNewRepository, configuration)
1915
{
20-
CloneRepository();
16+
CreateLocalRepository();
2117
}
2218

19+
public LocalRepositoryFixture LocalRepositoryFixture { get; private set; }
20+
21+
2322
/// <summary>
2423
/// Simulates running on build server
2524
/// </summary>
2625
public void InitialiseRepo()
2726
{
28-
new GitPreparer(null, null, new Authentication(), null, false, LocalRepositoryPath).Initialise(true, null);
27+
new GitPreparer(null, null, new Authentication(), null, false, LocalRepositoryFixture.RepositoryPath).Initialise(true, null);
2928
}
3029

3130
static IRepository CreateNewRepository(string path)
@@ -38,25 +37,14 @@ static IRepository CreateNewRepository(string path)
3837
return repo;
3938
}
4039

41-
void CloneRepository()
40+
void CreateLocalRepository()
4241
{
43-
LocalRepositoryPath = PathHelper.GetTempPath();
44-
LibGit2Sharp.Repository.Clone(RepositoryPath, LocalRepositoryPath);
45-
LocalRepository = new Repository(LocalRepositoryPath);
42+
LocalRepositoryFixture = CloneRepository();
4643
}
4744

4845
public override void Dispose()
4946
{
50-
LocalRepository.Dispose();
51-
try
52-
{
53-
DirectoryHelper.DeleteDirectory(LocalRepositoryPath);
54-
}
55-
catch (Exception e)
56-
{
57-
Console.WriteLine("Failed to clean up repository path at {0}. Received exception: {1}", RepositoryPath, e.Message);
58-
}
59-
47+
LocalRepositoryFixture.Dispose();
6048
base.Dispose();
6149
}
6250
}

src/GitVersionCore.Tests/Fixtures/RepositoryFixtureBase.cs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,29 @@
99
public abstract class RepositoryFixtureBase : IDisposable
1010
{
1111
Dictionary<string, string> participants = new Dictionary<string, string>();
12-
public string RepositoryPath;
13-
public IRepository Repository;
1412
Config configuration;
1513
StringBuilder diagramBuilder;
1614

1715
protected RepositoryFixtureBase(Func<string, IRepository> repoBuilder, Config configuration)
16+
: this(configuration, repoBuilder(PathHelper.GetTempPath()))
17+
{
18+
}
19+
20+
protected RepositoryFixtureBase(Config configuration, IRepository repository)
1821
{
1922
ConfigurationProvider.ApplyDefaultsTo(configuration);
2023
diagramBuilder = new StringBuilder();
2124
diagramBuilder.AppendLine("@startuml");
2225
this.configuration = configuration;
23-
RepositoryPath = PathHelper.GetTempPath();
24-
Repository = repoBuilder(RepositoryPath);
26+
Repository = repository;
2527
Repository.Config.Set("user.name", "Test");
2628
Repository.Config.Set("user.email", "[email protected]");
2729
IsForTrackedBranchOnly = true;
2830
}
2931

3032
public bool IsForTrackedBranchOnly { private get; set; }
33+
public IRepository Repository { get; private set; }
34+
public string RepositoryPath { get { return Repository.Info.WorkingDirectory.TrimEnd('\\'); } }
3135

3236
public void Checkout(string branch)
3337
{
@@ -190,4 +194,11 @@ public virtual void Dispose()
190194
Trace.WriteLine(string.Empty);
191195
Trace.WriteLine(diagramBuilder.ToString());
192196
}
197+
198+
public LocalRepositoryFixture CloneRepository(Config config = null)
199+
{
200+
var localPath = PathHelper.GetTempPath();
201+
LibGit2Sharp.Repository.Clone(RepositoryPath, localPath);
202+
return new LocalRepositoryFixture(config ?? new Config(), new Repository(localPath));
203+
}
193204
}

src/GitVersionCore.Tests/GitPreparerTests.cs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,6 @@
99
[TestFixture]
1010
public class GitPreparerTests
1111
{
12-
public GitPreparerTests()
13-
{
14-
Logger.SetLoggers(s => { }, s => { }, s => { });
15-
}
16-
1712
const string DefaultBranchName = "master";
1813
const string SpecificBranchName = "feature/foo";
1914

@@ -168,7 +163,7 @@ public void UsingDynamicRepositoryWithFeatureBranchWorks()
168163

169164
mainRepositoryFixture.Repository.CreateBranch("feature1").Checkout();
170165

171-
Assert.DoesNotThrow(() => gitPreparer.Initialise(true, null));
166+
Should.NotThrow(() => gitPreparer.Initialise(true, null));
172167
}
173168
}
174169
finally
@@ -194,7 +189,7 @@ public void UsingDynamicRepositoryWithoutTargetBranchFails()
194189
var gitPreparer = new GitPreparer(mainRepositoryFixture.RepositoryPath, null, new Authentication(), null, false, tempDir);
195190
gitPreparer.Initialise(true, null);
196191

197-
Assert.Throws<Exception>(() => gitPreparer.Initialise(true, null));
192+
Should.Throw<Exception>(() => gitPreparer.Initialise(true, null));
198193
}
199194
}
200195
finally
@@ -215,7 +210,7 @@ public void TestErrorThrownForInvalidRepository()
215210
{
216211
var gitPreparer = new GitPreparer("http://127.0.0.1/testrepo.git", null, new Authentication(), null, false, tempDir);
217212

218-
Assert.Throws<Exception>(() => gitPreparer.Initialise(true, null));
213+
Should.Throw<Exception>(() => gitPreparer.Initialise(true, null));
219214
}
220215
finally
221216
{

src/GitVersionCore.Tests/GitVersionCore.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@
121121
<Compile Include="BuildServers\TeamCityTests.cs" />
122122
<Compile Include="Fixtures\CommitCountingRepoFixture.cs" />
123123
<Compile Include="ConfigProviderTests.cs" />
124+
<Compile Include="Fixtures\LocalRepositoryFixture.cs" />
124125
<Compile Include="Fixtures\RemoteRepositoryFixture.cs" />
125126
<Compile Include="GitDirFinderTests.cs" />
126127
<Compile Include="Fixtures\BaseGitFlowRepositoryFixture.cs" />

src/GitVersionCore.Tests/Helpers/GitTestExtensions.cs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ public static void MergeNoFF(this IRepository repository, string branch)
2020

2121
public static void MergeNoFF(this IRepository repository, string branch, Signature sig)
2222
{
23-
// Fixes a race condition
2423
repository.Merge(repository.FindBranch(branch), sig, new MergeOptions
2524
{
2625
FastForwardStrategy = FastForwardStrategy.NoFastFoward
@@ -61,20 +60,26 @@ public static Tag MakeATaggedCommit(this IRepository repository, string tag)
6160
return repository.Tags.Add(tag, commit);
6261
}
6362

64-
public static Branch CreatePullRequest(this IRepository repository, string from, string to, int prNumber = 2, bool isRemotePr = true)
63+
public static Commit CreatePullRequestRef(this IRepository repository, string from, string to, int prNumber = 2, bool normalise = false, bool allowFastFowardMerge = false)
6564
{
65+
repository.Checkout(repository.FindBranch(to).Tip);
66+
if (allowFastFowardMerge)
67+
{
68+
repository.Merge(repository.FindBranch(from), Constants.SignatureNow());
69+
}
70+
else
71+
{
72+
repository.MergeNoFF(from);
73+
}
74+
var commit = repository.Head.Tip;
75+
repository.Refs.Add("refs/pull/" + prNumber + "/merge", commit.Id);
6676
repository.Checkout(to);
67-
repository.MergeNoFF(from);
68-
repository.CreateBranch("pull/" + prNumber + "/merge").Checkout();
69-
repository.Checkout(to);
70-
repository.Reset(ResetMode.Hard, "HEAD~1");
71-
var pullBranch = repository.Checkout("pull/" + prNumber + "/merge");
72-
if (isRemotePr)
77+
if (normalise)
7378
{
74-
// If we delete the branch, it is effectively the same as remote PR
75-
repository.Branches.Remove(from);
79+
// Turn the ref into a real branch
80+
repository.Branches.Add("pull/" + prNumber + "/merge", commit).Checkout();
7681
}
7782

78-
return pullBranch;
83+
return commit;
7984
}
8085
}

src/GitVersionCore.Tests/IntegrationTests/HotfixBranchScenarios.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public void PatchOlderReleaseExample()
7272
fixture.Repository.MakeACommit();
7373
fixture.AssertFullSemver("1.1.1-fix.1+3");
7474

75-
fixture.Repository.CreatePullRequest("feature/fix", "hotfix-1.1.1", isRemotePr: false);
75+
fixture.Repository.CreatePullRequestRef("feature/fix", "hotfix-1.1.1", normalise: true);
7676
fixture.AssertFullSemver("1.1.1-PullRequest.2+4");
7777
fixture.Repository.Checkout("hotfix-1.1.1");
7878
fixture.Repository.MergeNoFF("feature/fix", Constants.SignatureNow());

src/GitVersionCore.Tests/IntegrationTests/OtherScenarios.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ public void DoNotBlowUpWhenMasterAndDevelopPointAtSameCommit()
2222
fixture.Repository.MakeACommit();
2323
fixture.Repository.CreateBranch("develop");
2424

25-
fixture.LocalRepository.Network.Fetch(fixture.LocalRepository.Network.Remotes.First());
26-
fixture.LocalRepository.Checkout(fixture.Repository.Head.Tip);
27-
fixture.LocalRepository.Branches.Remove("master");
25+
fixture.LocalRepositoryFixture.Repository.Network.Fetch(fixture.LocalRepositoryFixture.Repository.Network.Remotes.First());
26+
fixture.LocalRepositoryFixture.Repository.Checkout(fixture.Repository.Head.Tip);
27+
fixture.LocalRepositoryFixture.Repository.Branches.Remove("master");
2828
fixture.InitialiseRepo();
2929
fixture.AssertFullSemver("1.0.1+1");
3030
}
@@ -42,9 +42,9 @@ public void DoNotBlowUpWhenDevelopAndFeatureBranchPointAtSameCommit()
4242
fixture.Repository.MakeACommit();
4343
fixture.Repository.CreateBranch("feature/someFeature");
4444

45-
fixture.LocalRepository.Network.Fetch(fixture.LocalRepository.Network.Remotes.First());
46-
fixture.LocalRepository.Checkout(fixture.Repository.Head.Tip);
47-
fixture.LocalRepository.Branches.Remove("master");
45+
fixture.LocalRepositoryFixture.Repository.Network.Fetch(fixture.LocalRepositoryFixture.Repository.Network.Remotes.First());
46+
fixture.LocalRepositoryFixture.Repository.Checkout(fixture.Repository.Head.Tip);
47+
fixture.LocalRepositoryFixture.Repository.Branches.Remove("master");
4848
fixture.InitialiseRepo();
4949
fixture.AssertFullSemver("1.1.0-unstable.1");
5050
}

src/GitVersionCore.Tests/IntegrationTests/PullRequestScenarios.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public void CanCalculatePullRequestChanges()
1414
fixture.Repository.CreateBranch("feature/Foo").Checkout();
1515
fixture.Repository.MakeACommit();
1616

17-
fixture.Repository.CreatePullRequest("feature/Foo", "master");
17+
fixture.Repository.CreatePullRequestRef("feature/Foo", "master", normalise: true);
1818

1919
fixture.Repository.DumpGraph();
2020
fixture.AssertFullSemver("0.1.1-PullRequest.2+2");
@@ -32,7 +32,7 @@ public void CanCalculatePullRequestChangesInheritingConfig()
3232
fixture.Repository.CreateBranch("feature/Foo").Checkout();
3333
fixture.Repository.MakeACommit();
3434

35-
fixture.Repository.CreatePullRequest("feature/Foo", "develop", 44);
35+
fixture.Repository.CreatePullRequestRef("feature/Foo", "develop", 44, normalise: true);
3636

3737
fixture.Repository.DumpGraph();
3838
fixture.AssertFullSemver("0.2.0-PullRequest.44+3");
@@ -49,7 +49,7 @@ public void CanCalculatePullRequestChangesFromRemoteRepo()
4949
fixture.Repository.MakeACommit();
5050

5151

52-
fixture.Repository.CreatePullRequest("feature/Foo", "master");
52+
fixture.Repository.CreatePullRequestRef("feature/Foo", "master", normalise: true);
5353

5454
fixture.Repository.DumpGraph();
5555
fixture.AssertFullSemver("0.1.1-PullRequest.2+2");
@@ -67,7 +67,7 @@ public void CanCalculatePullRequestChangesInheritingConfigFromRemoteRepo()
6767
fixture.Repository.CreateBranch("feature/Foo").Checkout();
6868
fixture.Repository.MakeACommit();
6969

70-
fixture.Repository.CreatePullRequest("feature/Foo", "develop");
70+
fixture.Repository.CreatePullRequestRef("feature/Foo", "develop", normalise: true);
7171

7272
fixture.AssertFullSemver("0.2.0-PullRequest.2+3");
7373
}
@@ -85,7 +85,7 @@ public void CanCalculatePullRequestChangesWhenThereAreMultipleMergeCandidates()
8585
fixture.Repository.CreateBranch("feature/Foo").Checkout();
8686
fixture.Repository.MakeACommit();
8787

88-
fixture.Repository.CreatePullRequest("feature/Foo", "develop");
88+
fixture.Repository.CreatePullRequestRef("feature/Foo", "develop", normalise: true);
8989

9090
fixture.AssertFullSemver("0.2.0-PullRequest.2+3");
9191
}
@@ -102,7 +102,7 @@ public void CalculatesCorrectVersionAfterReleaseBranchMergedToMaster()
102102
fixture.Repository.MakeACommit();
103103
fixture.Repository.MakeACommit();
104104

105-
fixture.Repository.CreatePullRequest("release/2.0.0", "master");
105+
fixture.Repository.CreatePullRequestRef("release/2.0.0", "master", normalise: true);
106106

107107
fixture.AssertFullSemver("2.0.0-PullRequest.2+0");
108108
}

src/GitVersionCore.Tests/IntegrationTests/RemoteRepositoryScenarios.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public void GivenARemoteGitRepositoryWithCommits_ThenClonedLocalShouldMatchRemot
1212
using (var fixture = new RemoteRepositoryFixture(new Config()))
1313
{
1414
fixture.AssertFullSemver("0.1.0+4");
15-
fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepository);
15+
fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepositoryFixture.Repository);
1616
}
1717
}
1818

@@ -39,7 +39,7 @@ public void GivenARemoteGitRepositoryWithCommitsAndBranches_ThenClonedLocalShoul
3939
new Config()))
4040
{
4141
fixture.AssertFullSemver("1.0.0-beta.1+5");
42-
fixture.AssertFullSemver("1.0.0-beta.1+5", fixture.LocalRepository);
42+
fixture.AssertFullSemver("1.0.0-beta.1+5", fixture.LocalRepositoryFixture.Repository);
4343
}
4444
}
4545

@@ -50,9 +50,10 @@ public void GivenARemoteGitRepositoryAheadOfLocalRepository_ThenChangesShouldPul
5050
{
5151
fixture.Repository.MakeACommit();
5252
fixture.AssertFullSemver("0.1.0+5");
53-
fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepository);
54-
fixture.LocalRepository.Network.Pull(fixture.LocalRepository.Config.BuildSignature(new DateTimeOffset(DateTime.Now)), new PullOptions());
55-
fixture.AssertFullSemver("0.1.0+5", fixture.LocalRepository);
53+
fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepositoryFixture.Repository);
54+
var buildSignature = fixture.LocalRepositoryFixture.Repository.Config.BuildSignature(new DateTimeOffset(DateTime.Now));
55+
fixture.LocalRepositoryFixture.Repository.Network.Pull(buildSignature, new PullOptions());
56+
fixture.AssertFullSemver("0.1.0+5", fixture.LocalRepositoryFixture.Repository);
5657
}
5758
}
5859

@@ -63,22 +64,22 @@ public void GivenARemoteGitRepositoryWhenCheckingOutDetachedhead_UsingExistingIm
6364
using (var fixture = new RemoteRepositoryFixture(new Config()))
6465
{
6566
fixture.IsForTrackedBranchOnly = false;
66-
fixture.LocalRepository.Checkout(fixture.LocalRepository.Head.Tip);
67+
fixture.LocalRepositoryFixture.Repository.Checkout(fixture.LocalRepositoryFixture.Repository.Head.Tip);
6768

68-
Assert.Throws<WarningException>(() => fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepository), "It looks like the branch being examined is a detached Head pointing to commit '{0}'. Without a proper branch name GitVersion cannot determine the build version.", fixture.LocalRepository.Head.Tip.Id.ToString(7));
69+
Assert.Throws<WarningException>(() => fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepositoryFixture.Repository),
70+
"It looks like the branch being examined is a detached Head pointing to commit '{0}'. Without a proper branch name GitVersion cannot determine the build version.",
71+
fixture.LocalRepositoryFixture.Repository.Head.Tip.Id.ToString(7));
6972
}
7073
}
7174

7275
[Test]
7376
public void GivenARemoteGitRepositoryWhenCheckingOutDetachedhead_UsingTrackingBranchOnlyBehaviourShouldReturnVersion_0_1_4plus5()
7477
{
75-
7678
using (var fixture = new RemoteRepositoryFixture(new Config()))
7779
{
80+
fixture.LocalRepositoryFixture.Repository.Checkout(fixture.LocalRepositoryFixture.Repository.Head.Tip);
7881

79-
fixture.LocalRepository.Checkout(fixture.LocalRepository.Head.Tip);
80-
81-
fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepository);
82+
fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepositoryFixture.Repository);
8283
}
8384
}
8485
}

src/GitVersionCore/Helpers/ProcessHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public static Process Start(ProcessStartInfo startInfo)
3131
// NOTE: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 @asbjornu
3232
if (exception.NativeErrorCode == 2)
3333
{
34-
throw new FileNotFoundException(String.Format("The executable file '{0}' could not be found.",
34+
throw new FileNotFoundException(string.Format("The executable file '{0}' could not be found.",
3535
startInfo.FileName),
3636
startInfo.FileName,
3737
exception);

0 commit comments

Comments
 (0)