Skip to content

Commit 1204fdf

Browse files
committed
Add support for local tracking branches (branch..remote = ".")
1 parent 1cb40da commit 1204fdf

File tree

4 files changed

+24
-1
lines changed

4 files changed

+24
-1
lines changed

LibGit2Sharp.Tests/BranchFixture.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ public void CanListAllBranchesWhenGivenWorkingDir()
172172
{
173173
using (var repo = new Repository(StandardTestRepoWorkingDirPath))
174174
{
175-
var expectedWdBranches = new[] { "master", "origin/HEAD", "origin/br2", "origin/master", "origin/packed-test", "origin/test" };
175+
var expectedWdBranches = new[] { "master", "track-local", "origin/HEAD", "origin/br2", "origin/master", "origin/packed-test", "origin/test" };
176176

177177
CollectionAssert.AreEqual(expectedWdBranches, repo.Branches.Select(b => b.Name).ToArray());
178178
}
@@ -186,6 +186,7 @@ public void CanListAllBranchesIncludingRemoteRefs()
186186
var expectedBranchesIncludingRemoteRefs = new[]
187187
{
188188
new { Name = "master", Sha = "32eab9cb1f450b5fe7ab663462b77d7f4b703344", IsRemote = false },
189+
new { Name = "track-local", Sha = "580c2111be43802dab11328176d94c391f1deae9", IsRemote = false },
189190
new { Name = "origin/HEAD", Sha = "580c2111be43802dab11328176d94c391f1deae9", IsRemote = true },
190191
new { Name = "origin/br2", Sha = "a4a7dce85cf63874e984719f4fdd239f5145052f", IsRemote = true },
191192
new { Name = "origin/master", Sha = "580c2111be43802dab11328176d94c391f1deae9", IsRemote = true },
@@ -266,6 +267,19 @@ public void CanGetTrackingInformationForTrackingBranch()
266267
}
267268
}
268269

270+
[Test]
271+
public void CanGetTrackingInformationForLocalTrackingBranch()
272+
{
273+
using (var repo = new Repository(StandardTestRepoPath))
274+
{
275+
var branch = repo.Branches["track-local"];
276+
branch.IsTracking.ShouldBeTrue();
277+
branch.TrackedBranch.ShouldEqual(repo.Branches["master"]);
278+
branch.AheadBy.ShouldEqual(2);
279+
branch.BehindBy.ShouldEqual(2);
280+
}
281+
}
282+
269283
[Test]
270284
public void CanWalkCommitsFromAnotherBranch()
271285
{

LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/config

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
[branch "master"]
1313
remote = origin
1414
merge = refs/heads/master
15+
[branch "track-local"]
16+
remote = .
17+
merge = refs/heads/master
1518
[unittests]
1619
longsetting = 15234
1720
intsetting = 2
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
580c2111be43802dab11328176d94c391f1deae9

LibGit2Sharp/Branch.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,11 @@ private Branch ResolveTrackedBranch()
187187

188188
private static string ResolveTrackedReference(string trackedRemote, string trackedRefName)
189189
{
190+
if (trackedRemote == ".")
191+
{
192+
return trackedRefName;
193+
}
194+
190195
//TODO: To be replaced by native libgit2 git_branch_tracked_reference() when available.
191196
return trackedRefName.Replace("refs/heads/", string.Concat("refs/remotes/", trackedRemote, "/"));
192197
}

0 commit comments

Comments
 (0)