Skip to content

Commit 912e129

Browse files
committed
Merge remote-tracking branch 'refs/remotes/qmfrederik/features/managed-git' into features/managed-git
2 parents 74e617b + 14822fd commit 912e129

File tree

8 files changed

+41
-7
lines changed

8 files changed

+41
-7
lines changed

azure-pipelines.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,11 @@ stages:
221221
inputs:
222222
packageType: sdk
223223
version: 3.1.100
224+
- task: UseDotNet@2
225+
displayName: Install .NET Core SDK 5.0.100
226+
inputs:
227+
packageType: sdk
228+
version: 5.0.100
224229
- script: dotnet --info
225230
displayName: Show dotnet SDK info
226231
- bash: |

src/NerdBank.GitVersioning.Benchmarks/GetVersionBenchmarks.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ namespace Nerdbank.GitVersioning.Benchmarks
88
{
99
[SimpleJob(RuntimeMoniker.NetCoreApp31, baseline: true)]
1010
[SimpleJob(RuntimeMoniker.NetCoreApp21)]
11+
[SimpleJob(RuntimeMoniker.NetCoreApp50)]
1112
[SimpleJob(RuntimeMoniker.Net461)]
1213
public class GetVersionBenchmarks
1314
{

src/NerdBank.GitVersioning.Tests/GitContextTests.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,12 @@ public void SelectCommitByPartialId(bool fromPack)
8585
Assert.Equal(this.LibGit2Repository.Head.Tip.Sha, this.Context.GitCommitId);
8686
}
8787

88+
[Fact]
89+
public void GetShortUniqueCommitId()
90+
{
91+
Assert.Equal("51cd9ed3", this.Context.GetShortUniqueCommitId(8));
92+
}
93+
8894
[Theory, CombinatorialData]
8995
public void SelectCommitByTag(bool packedRefs, bool canonicalName)
9096
{

src/NerdBank.GitVersioning/GitContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ public static GitContext Create(string path, string? committish = null, bool wri
174174
/// </summary>
175175
/// <param name="minLength">A minimum length.</param>
176176
/// <returns>A string that is at least <paramref name="minLength"/> in length but may be more as required to uniquely identify the git object identified by <see cref="GitCommitId"/>.</returns>
177-
internal abstract string GetShortUniqueCommitId(int minLength);
177+
public abstract string GetShortUniqueCommitId(int minLength);
178178

179179
internal abstract int CalculateVersionHeight(VersionOptions? committedVersion, VersionOptions? workingVersion);
180180

src/NerdBank.GitVersioning/LibGit2/LibGit2Context.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ public override bool TrySelectCommit(string committish)
7979
/// <inheritdoc />
8080
public override void Stage(string path) => Commands.Stage(this.Repository, path);
8181

82-
internal override string GetShortUniqueCommitId(int minLength) => this.Repository.ObjectDatabase.ShortenObjectId(this.Commit, minLength);
82+
/// <inheritdoc/>
83+
public override string GetShortUniqueCommitId(int minLength) => this.Repository.ObjectDatabase.ShortenObjectId(this.Commit, minLength);
8384

8485
internal override int CalculateVersionHeight(VersionOptions? committedVersion, VersionOptions? workingVersion)
8586
{

src/NerdBank.GitVersioning/Managed/ManagedGitContext.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ internal override Version GetIdAsVersion(VersionOptions? committedVersion, Versi
112112
return this.GetIdAsVersionHelper(version, versionHeight);
113113
}
114114

115-
internal override string GetShortUniqueCommitId(int minLength)
115+
/// <inheritdoc/>
116+
public override string GetShortUniqueCommitId(int minLength)
116117
{
117118
Verify.Operation(this.Commit is object, "No commit is selected.");
118119
return this.Repository.ShortenObjectId(this.Commit.Value.Sha, minLength);

src/NerdBank.GitVersioning/ManagedGit/GitRepository.cs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,19 @@ public GitRepository(string workingDirectory, string gitDirectory, string common
224224
/// </returns>
225225
public string ShortenObjectId(GitObjectId objectId, int minimum)
226226
{
227-
// TODO: implement this properly.
228-
return objectId.ToString().Substring(0, Math.Max(minimum, 8));
227+
var sha = objectId.ToString();
228+
229+
for (int length = minimum; length < sha.Length; length += 2)
230+
{
231+
var objectish = sha.Substring(0, length);
232+
233+
if (this.Lookup(objectish) != null)
234+
{
235+
return objectish;
236+
}
237+
}
238+
239+
return sha;
229240
}
230241

231242
/// <summary>
@@ -402,7 +413,16 @@ public GitCommit GetCommit(GitObjectId sha, bool readAuthor = false)
402413
// or in multiple pack files.
403414
if (objectId != null && !possibleObjectIds.Contains(objectId.Value))
404415
{
405-
possibleObjectIds.Add(objectId.Value);
416+
if (possibleObjectIds.Count > 0)
417+
{
418+
// If objectish already resolved to at least one object which is different from the current
419+
// object id, objectish is not well-defined; so stop resolving and return null instead.
420+
return null;
421+
}
422+
else
423+
{
424+
possibleObjectIds.Add(objectId.Value);
425+
}
406426
}
407427
}
408428
}

src/NerdBank.GitVersioning/NoGit/NoGitContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ public NoGitContext(string workingTreePath)
3030

3131
public override void ApplyTag(string name) => throw new InvalidOperationException(NotAGitRepoMessage);
3232
public override void Stage(string path) => throw new InvalidOperationException(NotAGitRepoMessage);
33+
public override string GetShortUniqueCommitId(int minLength) => throw new InvalidOperationException(NotAGitRepoMessage);
3334
public override bool TrySelectCommit(string committish) => throw new InvalidOperationException(NotAGitRepoMessage);
3435
internal override int CalculateVersionHeight(VersionOptions? committedVersion, VersionOptions? workingVersion) => 0;
3536
internal override Version GetIdAsVersion(VersionOptions? committedVersion, VersionOptions? workingVersion, int versionHeight) => throw new NotImplementedException();
36-
internal override string GetShortUniqueCommitId(int minLength) => throw new InvalidOperationException(NotAGitRepoMessage);
3737
}
3838
}

0 commit comments

Comments
 (0)