Skip to content
26 changes: 8 additions & 18 deletions src/GitVersion.LibGit2Sharp/Git/Branch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,16 @@ internal Branch(LibGit2Sharp.Branch branch)
{
innerBranch = branch;
Name = new ReferenceName(branch.CanonicalName);

var commit = innerBranch.Tip;
Tip = commit is null ? null : new Commit(commit);

var commits = innerBranch.Commits;
Commits = commits is null ? null : new CommitCollection(commits);
}
public ReferenceName Name { get; }
public ICommit? Tip { get; }
public ICommitCollection? Commits { get; }

public int CompareTo(IBranch other) => comparerHelper.Compare(this, other);
public bool Equals(IBranch other) => equalityHelper.Equals(this, other);
Expand All @@ -24,24 +32,6 @@ internal Branch(LibGit2Sharp.Branch branch)
public override string ToString() => Name.ToString();
public static implicit operator LibGit2Sharp.Branch(Branch d) => d.innerBranch;

public ICommit? Tip
{
get
{
var commit = innerBranch.Tip;
return commit is null ? null : new Commit(commit);
}
}

public ICommitCollection? Commits
{
get
{
var commits = innerBranch.Commits;
return commits is null ? null : new CommitCollection(commits);
}
}

public bool IsDetachedHead => Name.Canonical.Equals("(no branch)", StringComparison.OrdinalIgnoreCase);

public bool IsRemote => innerBranch.IsRemote;
Expand Down
18 changes: 9 additions & 9 deletions src/GitVersion.LibGit2Sharp/Git/Commit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,19 @@

namespace GitVersion
{
internal sealed class Commit : ICommit
internal sealed class Commit : GitObject, ICommit
{
private static readonly LambdaEqualityHelper<ICommit> equalityHelper = new(x => x.Id);
private static readonly LambdaKeyComparer<ICommit, string> comparerHelper = new(x => x.Sha);

private readonly LibGit2Sharp.Commit innerCommit;

internal Commit(LibGit2Sharp.Commit innerCommit) => this.innerCommit = innerCommit;
internal Commit(LibGit2Sharp.Commit innerCommit) : base(innerCommit)
{
this.innerCommit = innerCommit;
Parents = innerCommit.Parents.Select(parent => new Commit(parent));
When = innerCommit.Committer.When;
}

public int CompareTo(ICommit other) => comparerHelper.Compare(this, other);
public bool Equals(ICommit other) => equalityHelper.Equals(this, other);
Expand All @@ -24,13 +29,8 @@ public override string ToString()
}
public static implicit operator LibGit2Sharp.Commit(Commit d) => d.innerCommit;

public IEnumerable<ICommit> Parents => innerCommit.Parents.Select(parent => new Commit(parent));

public string Sha => innerCommit.Sha;

public IObjectId Id => new ObjectId(innerCommit.Id);

public DateTimeOffset When => innerCommit.Committer.When;
public IEnumerable<ICommit> Parents { get; }
public DateTimeOffset When { get; }

public string Message => innerCommit.Message;
}
Expand Down
2 changes: 1 addition & 1 deletion src/GitVersion.LibGit2Sharp/Git/CommitCollection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public IEnumerator<ICommit> GetEnumerator()
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();

public IEnumerable<ICommit> GetCommitsPriorTo(DateTimeOffset olderThan) => this.SkipWhile(c => c.When > olderThan);
public ICommitCollection QueryBy(CommitFilter commitFilter)
public IEnumerable<ICommit> QueryBy(CommitFilter commitFilter)
{
static object? GetReacheableFrom(object item)
{
Expand Down
28 changes: 28 additions & 0 deletions src/GitVersion.LibGit2Sharp/Git/GitObject.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using GitVersion.Helpers;

namespace GitVersion
{
internal class GitObject : IGitObject
{
private static readonly LambdaEqualityHelper<IGitObject> equalityHelper = new(x => x.Id);
private static readonly LambdaKeyComparer<IGitObject, string> comparerHelper = new(x => x.Sha);

internal GitObject(LibGit2Sharp.GitObject innerGitObject)
{
Id = new ObjectId(innerGitObject.Id);
Sha = innerGitObject.Sha;
}

public int CompareTo(IGitObject other) => comparerHelper.Compare(this, other);
public bool Equals(IGitObject other) => equalityHelper.Equals(this, other);
public override bool Equals(object obj) => Equals((obj as IGitObject)!);
public override int GetHashCode() => equalityHelper.GetHashCode(this);
public override string ToString()
{
return Id.ToString(7);
}

public IObjectId Id { get; }
public string Sha { get; }
}
}
Loading