Skip to content

Commit bca7d95

Browse files
committed
ReferenceCollection proxy
1 parent d617a59 commit bca7d95

File tree

5 files changed

+56
-9
lines changed

5 files changed

+56
-9
lines changed

src/GitVersionCore.Tests/Core/RepositoryExtensionsTests.cs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using NSubstitute;
1010
using NUnit.Framework;
1111
using BranchCollection = GitVersion.BranchCollection;
12+
using ReferenceCollection = GitVersion.ReferenceCollection;
1213

1314
namespace GitVersionCore.Tests
1415
{
@@ -164,22 +165,14 @@ public TesatbleRemote(string name)
164165
private class TestableReferenceCollection : ReferenceCollection
165166
{
166167
Reference reference;
167-
168-
public override DirectReference Add(string name, ObjectId targetId)
169-
{
170-
throw new InvalidOperationException("Update should be invoked when case-insensitively comparing branches.");
171-
}
172-
173168
public override Reference Add(string name, string canonicalRefNameOrObjectish)
174169
{
175170
return reference = new TestableReference(canonicalRefNameOrObjectish);
176171
}
177-
178172
public override Reference UpdateTarget(Reference directRef, ObjectId targetId)
179173
{
180174
return reference;
181175
}
182-
183176
public override Reference this[string name] => reference;
184177
}
185178

src/GitVersionCore.Tests/Mocks/MockReferenceCollection.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Collections.Generic;
22
using LibGit2Sharp;
3+
using ReferenceCollection = GitVersion.ReferenceCollection;
34

45
namespace GitVersionCore.Tests.Mocks
56
{

src/GitVersionCore.Tests/Mocks/MockRepository.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using GitVersion;
33
using LibGit2Sharp;
44
using BranchCollection = GitVersion.BranchCollection;
5+
using ReferenceCollection = GitVersion.ReferenceCollection;
56

67
namespace GitVersionCore.Tests.Mocks
78
{

src/GitVersionCore/Core/GitModel.cs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,56 @@ public void Update(Branch branch, params Action<BranchUpdater>[] actions)
3434
innerBranchCollection.Update(branch, actions);
3535
}
3636
}
37+
38+
public class ReferenceCollection : IEnumerable<Reference>
39+
{
40+
private readonly LibGit2Sharp.ReferenceCollection innerReferenceCollection;
41+
private ReferenceCollection(LibGit2Sharp.ReferenceCollection branchCollection) => innerReferenceCollection = branchCollection;
42+
43+
protected ReferenceCollection()
44+
{
45+
}
46+
47+
public static implicit operator LibGit2Sharp.ReferenceCollection(ReferenceCollection d) => d.innerReferenceCollection;
48+
public static explicit operator ReferenceCollection(LibGit2Sharp.ReferenceCollection b) => new ReferenceCollection(b);
49+
50+
public IEnumerator<Reference> GetEnumerator()
51+
{
52+
foreach (var reference in innerReferenceCollection)
53+
yield return reference;
54+
}
55+
56+
public virtual Reference Add(string name, string canonicalRefNameOrObjectish)
57+
{
58+
return innerReferenceCollection.Add(name, canonicalRefNameOrObjectish);
59+
}
60+
61+
public virtual DirectReference Add(string name, ObjectId targetId)
62+
{
63+
return innerReferenceCollection.Add(name, targetId);
64+
}
65+
66+
public virtual DirectReference Add(string name, ObjectId targetId, bool allowOverwrite)
67+
{
68+
return innerReferenceCollection.Add(name, targetId, allowOverwrite);
69+
}
70+
71+
public virtual Reference UpdateTarget(Reference directRef, ObjectId targetId)
72+
{
73+
return innerReferenceCollection.UpdateTarget(directRef, targetId);
74+
}
75+
76+
public virtual ReflogCollection Log(string canonicalName)
77+
{
78+
return innerReferenceCollection.Log(canonicalName);
79+
}
80+
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
81+
public virtual Reference this[string name] => innerReferenceCollection[name];
82+
public virtual Reference Head => this["HEAD"];
83+
84+
public virtual IEnumerable<Reference> FromGlob(string pattern)
85+
{
86+
return innerReferenceCollection.FromGlob(pattern);
87+
}
88+
}
3789
}

src/GitVersionCore/Core/GitRepository.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public void Dispose()
3636

3737
public Branch Head => repositoryInstance.Head;
3838

39-
public ReferenceCollection Refs => repositoryInstance.Refs;
39+
public ReferenceCollection Refs => (ReferenceCollection)repositoryInstance.Refs;
4040

4141
public IQueryableCommitLog Commits => repositoryInstance.Commits;
4242

0 commit comments

Comments
 (0)