Skip to content

Commit 76b0bc2

Browse files
committed
Merge pull request #464 from eggapauli/no-tracking-branch-in-dynamic-repo
Fix tracking branches in dynamic repositories
2 parents 2201f0d + c69bcb6 commit 76b0bc2

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

GitVersionCore/BuildServers/GitHelper.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,9 @@ static void CreateMissingLocalBranchesFromRemoteTrackingOnes(Repository repo, st
200200

201201
foreach (var remoteTrackingReference in repo.Refs.FromGlob(prefix + "*").Where(r => r.CanonicalName != remoteHeadCanonicalName))
202202
{
203-
var localCanonicalName = "refs/heads/" + remoteTrackingReference.CanonicalName.Substring(prefix.Length);
203+
var remoteTrackingReferenceName = remoteTrackingReference.CanonicalName;
204+
var branchName = remoteTrackingReferenceName.Substring(prefix.Length);
205+
var localCanonicalName = "refs/heads/" + branchName;
204206

205207
if (repo.Refs.Any(x => x.CanonicalName == localCanonicalName))
206208
{
@@ -218,6 +220,9 @@ static void CreateMissingLocalBranchesFromRemoteTrackingOnes(Repository repo, st
218220
{
219221
repo.Refs.Add(localCanonicalName, new ObjectId(symbolicReference.ResolveToDirectReference().TargetIdentifier), true);
220222
}
223+
224+
var branch = repo.Branches[branchName];
225+
repo.Branches.Update(branch, b => b.TrackedBranch = remoteTrackingReferenceName);
221226
}
222227
}
223228

GitVersionExe.Tests/GitPreparerTests.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,5 +208,41 @@ public void UsesGitVersionConfigWhenCreatingDynamicRepository()
208208
}
209209
}
210210

211+
[Test]
212+
public void UsingDynamicRepositoryWithFeatureBranchWorks()
213+
{
214+
var repoName = Guid.NewGuid().ToString();
215+
var tempPath = Path.GetTempPath();
216+
var tempDir = Path.Combine(tempPath, repoName);
217+
Directory.CreateDirectory(tempDir);
218+
219+
try
220+
{
221+
using (var mainRepositoryFixture = new EmptyRepositoryFixture(new Config()))
222+
{
223+
var commitId = mainRepositoryFixture.Repository.MakeACommit().Id.Sha;
224+
225+
var arguments = new Arguments
226+
{
227+
TargetPath = tempDir,
228+
TargetUrl = mainRepositoryFixture.RepositoryPath,
229+
TargetBranch = "feature1",
230+
CommitId = commitId
231+
};
232+
233+
var gitPreparer = new GitPreparer(arguments.TargetUrl, arguments.DynamicRepositoryLocation, arguments.Authentication, arguments.TargetBranch, arguments.NoFetch, arguments.TargetPath);
234+
gitPreparer.Initialise(true);
235+
236+
mainRepositoryFixture.Repository.CreateBranch("feature1").Checkout();
237+
238+
Assert.DoesNotThrow(() => gitPreparer.Initialise(true));
239+
}
240+
}
241+
finally
242+
{
243+
Directory.Delete(tempDir, true);
244+
}
245+
}
246+
211247
// TODO test around normalisation
212248
}

0 commit comments

Comments
 (0)