diff --git a/.editorconfig b/.editorconfig
index 98824c08..fb31b8c2 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -79,3 +79,9 @@ csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
+
+# CSIsNull001: Use `is null` for null checks
+dotnet_diagnostic.CSIsNull001.severity = warning
+
+# CSIsNull002: Use `is object` for non-null checks
+dotnet_diagnostic.CSIsNull002.severity = warning
diff --git a/3rdPartyNotices.txt b/3rdPartyNotices.txt
index f96a675c..3a888faa 100644
--- a/3rdPartyNotices.txt
+++ b/3rdPartyNotices.txt
@@ -127,31 +127,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
-dotnet/PInvoke (https://github.com/dotnet/pinvoke)
-==============
-
-MIT License
-
-Copyright (c) .NET Foundation and Contributors
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
Cake Contrib (https://github.com/cake-contrib/graphics)
============
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 10d8b58c..c03e99ab 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -43,6 +43,7 @@ stages:
windows:
imageName: 'windows-2019'
testModifier:
+ dotnet32: "\"C:\\Program Files (x86)\\dotnet\\dotnet.exe\""
variables:
- ${{ if eq(variables['System.TeamFoundationCollectionUri'], 'https://dev.azure.com/andrewarnott/') }}:
- group: dotnetfoundation code signing
@@ -58,17 +59,24 @@ stages:
displayName: Configure git commit author for testing
- task: UseDotNet@2
- displayName: Install .NET Core SDK 5.0.202
+ displayName: Install .NET Core 5.0.202 SDK
inputs:
packageType: sdk
version: 5.0.202
- task: UseDotNet@2
- displayName: Install .NET Core 3.1
+ displayName: Install .NET Core 3.1 runtime
inputs:
packageType: runtime
version: 3.1.x
+ - pwsh: |
+ Invoke-WebRequest -Uri "https://dot.net/v1/dotnet-install.ps1" -OutFile dotnet-install.ps1
+ & .\dotnet-install.ps1 -Architecture x86 -Version 5.0.202 -InstallDir "C:\Program Files (x86)\dotnet\" -NoPath -Verbose
+ & .\dotnet-install.ps1 -Architecture x86 -Channel 3.1 -InstallDir "C:\Program Files (x86)\dotnet\" -NoPath -Verbose
+ displayName: Install 32-bit .NET Core SDK 5.0.202, 3.1
+ condition: ne(variables['dotnet32'], '')
+
- script: dotnet --info
displayName: Show dotnet SDK info
@@ -121,8 +129,22 @@ stages:
--collect:"XPlat Code Coverage"
--
RunConfiguration.DisableAppDomain=true
- displayName: Run tests
+ displayName: Run x64 tests
+ workingDirectory: src
+
+ - script: >
+ $(dotnet32) test NerdBank.GitVersioning.Tests
+ --no-build $(testModifier)
+ -c $(BuildConfiguration)
+ --filter "TestCategory!=FailsOnAzurePipelines"
+ --logger "trx;LogFileName=$(Build.ArtifactStagingDirectory)/TestLogs/TestResults.trx"
+ --results-directory $(Build.ArtifactStagingDirectory)/CodeCoverage/
+ --collect:"XPlat Code Coverage"
+ --
+ RunConfiguration.DisableAppDomain=true
+ displayName: Run x86 tests
workingDirectory: src
+ condition: ne(variables['dotnet32'], '')
- task: PublishCodeCoverageResults@1
displayName: Publish code coverage results
@@ -296,17 +318,17 @@ stages:
vmImage: $(imageName)
steps:
- task: UseDotNet@2
- displayName: Install .NET Core SDK 2.1.811
+ displayName: Install .NET Core 2.1 runtime
inputs:
- packageType: sdk
- version: 2.1.811
+ packageType: runtime
+ version: 2.1.x
- task: UseDotNet@2
- displayName: Install .NET Core SDK 3.1.100
+ displayName: Install .NET Core 3.1 runtime
inputs:
- packageType: sdk
- version: 3.1.100
+ packageType: runtime
+ version: 3.1.x
- task: UseDotNet@2
- displayName: Install .NET Core SDK 5.0.202
+ displayName: Install .NET Core 5.0.202 SDK
inputs:
packageType: sdk
version: 5.0.202
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index e283fab8..94a570b3 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -24,9 +24,13 @@
2.0.312
-
+
+
+ all
+ runtime; build; native; contentfiles; analyzers
+
diff --git a/src/NerdBank.GitVersioning.Tests/BuildIntegrationTests.cs b/src/NerdBank.GitVersioning.Tests/BuildIntegrationTests.cs
index b2ab89f5..d931f2e2 100644
--- a/src/NerdBank.GitVersioning.Tests/BuildIntegrationTests.cs
+++ b/src/NerdBank.GitVersioning.Tests/BuildIntegrationTests.cs
@@ -219,7 +219,7 @@ public async Task GetBuildVersion_In_Git_But_Head_Lacks_VersionFile()
var repo = new Repository(this.RepoPath); // do not assign Repo property to avoid commits being generated later
repo.Commit("empty", this.Signer, this.Signer, new CommitOptions { AllowEmptyCommit = true });
this.WriteVersionFile("3.4");
- Assumes.True(repo.Index[VersionFile.JsonFileName] == null);
+ Assumes.True(repo.Index[VersionFile.JsonFileName] is null);
var buildResult = await this.BuildAsync();
Assert.Equal("3.4.0." + this.GetVersion().Revision, buildResult.BuildVersion);
Assert.Equal("3.4.0+" + repo.Head.Tip.Id.Sha.Substring(0, VersionOptions.DefaultGitCommitIdShortFixedLength), buildResult.AssemblyInformationalVersion);
diff --git a/src/NerdBank.GitVersioning.Tests/ManagedGit/DeltaStreamReaderTests.cs b/src/NerdBank.GitVersioning.Tests/ManagedGit/DeltaStreamReaderTests.cs
index 2e475ca9..279e0a16 100644
--- a/src/NerdBank.GitVersioning.Tests/ManagedGit/DeltaStreamReaderTests.cs
+++ b/src/NerdBank.GitVersioning.Tests/ManagedGit/DeltaStreamReaderTests.cs
@@ -89,7 +89,7 @@ public void ReadStreamTest()
DeltaInstruction? current;
- while ((current = DeltaStreamReader.Read(stream)) != null)
+ while ((current = DeltaStreamReader.Read(stream)) is not null)
{
instructions.Add(current.Value);
}
@@ -139,7 +139,7 @@ public void ReadStreamTest_Memory()
DeltaInstruction? current;
- while ((current = DeltaStreamReader.Read(ref memory)) != null)
+ while ((current = DeltaStreamReader.Read(ref memory)) is not null)
{
instructions.Add(current.Value);
}
diff --git a/src/NerdBank.GitVersioning.Tests/ManagedGit/GitPackTests.cs b/src/NerdBank.GitVersioning.Tests/ManagedGit/GitPackTests.cs
index 94905c70..0c14a314 100644
--- a/src/NerdBank.GitVersioning.Tests/ManagedGit/GitPackTests.cs
+++ b/src/NerdBank.GitVersioning.Tests/ManagedGit/GitPackTests.cs
@@ -63,7 +63,15 @@ public void GetPackedObject()
// This commit is not deltafied. It is stored as a .gz-compressed stream in the pack file.
var zlibStream = Assert.IsType(commitStream);
var deflateStream = Assert.IsType(zlibStream.BaseStream);
- var pooledStream = Assert.IsType(deflateStream.BaseStream);
+
+ if (IntPtr.Size > 4)
+ {
+ var pooledStream = Assert.IsType(deflateStream.BaseStream);
+ }
+ else
+ {
+ var pooledStream = Assert.IsType(deflateStream.BaseStream);
+ }
Assert.Equal(222, commitStream.Length);
Assert.Equal("/zgldANj+jvgOwlecnOKylZDVQg=", Convert.ToBase64String(sha.ComputeHash(commitStream)));
@@ -85,7 +93,15 @@ public void GetDeltafiedObject()
var deltaStream = Assert.IsType(commitStream);
var zlibStream = Assert.IsType(deltaStream.BaseStream);
var deflateStream = Assert.IsType(zlibStream.BaseStream);
- var pooledStream = Assert.IsType(deflateStream.BaseStream);
+
+ if (IntPtr.Size > 4)
+ {
+ var pooledStream = Assert.IsType(deflateStream.BaseStream);
+ }
+ else
+ {
+ var directAccessStream = Assert.IsType(deflateStream.BaseStream);
+ }
Assert.Equal(137, commitStream.Length);
Assert.Equal("lZu/7nGb0n1UuO9SlPluFnSvj4o=", Convert.ToBase64String(sha.ComputeHash(commitStream)));
@@ -120,14 +136,24 @@ public void TryGetObjectTest()
using (SHA1 sha = SHA1.Create())
{
Assert.True(gitPack.TryGetObject(GitObjectId.Parse("f5b401f40ad83f13030e946c9ea22cb54cb853cd"), "commit", out Stream commitStream));
+ using (commitStream)
+ {
+ // This commit is not deltafied. It is stored as a .gz-compressed stream in the pack file.
+ var zlibStream = Assert.IsType(commitStream);
+ var deflateStream = Assert.IsType(zlibStream.BaseStream);
- // This commit is not deltafied. It is stored as a .gz-compressed stream in the pack file.
- var zlibStream = Assert.IsType(commitStream);
- var deflateStream = Assert.IsType(zlibStream.BaseStream);
- var pooledStream = Assert.IsType(deflateStream.BaseStream);
+ if (IntPtr.Size > 4)
+ {
+ var pooledStream = Assert.IsType(deflateStream.BaseStream);
+ }
+ else
+ {
+ var directAccessStream = Assert.IsType(deflateStream.BaseStream);
+ }
- Assert.Equal(222, commitStream.Length);
- Assert.Equal("/zgldANj+jvgOwlecnOKylZDVQg=", Convert.ToBase64String(sha.ComputeHash(commitStream)));
+ Assert.Equal(222, commitStream.Length);
+ Assert.Equal("/zgldANj+jvgOwlecnOKylZDVQg=", Convert.ToBase64String(sha.ComputeHash(commitStream)));
+ }
}
}
diff --git a/src/NerdBank.GitVersioning.Tests/ReleaseManagerTests.cs b/src/NerdBank.GitVersioning.Tests/ReleaseManagerTests.cs
index 9ad8c96c..fb3e248c 100644
--- a/src/NerdBank.GitVersioning.Tests/ReleaseManagerTests.cs
+++ b/src/NerdBank.GitVersioning.Tests/ReleaseManagerTests.cs
@@ -320,7 +320,7 @@ public void PrepeareRelease_ReleaseBranchWithVersionDecrement(string initialVers
// prepare release
var releaseManager = new ReleaseManager();
- releaseManager.PrepareRelease(this.RepoPath, releaseUnstableTag, (nextVersion == null ? null : Version.Parse(nextVersion)), parameterVersionIncrement);
+ releaseManager.PrepareRelease(this.RepoPath, releaseUnstableTag, (nextVersion is null ? null : Version.Parse(nextVersion)), parameterVersionIncrement);
// check if a branch was created
Assert.Contains(this.LibGit2Repository.Branches, branch => branch.FriendlyName == expectedBranchName);
@@ -394,7 +394,7 @@ public void PrepareRelease_MasterWithVersionDecrement(string initialVersion, str
// running PrepareRelease should result in an error
// because we're setting the version on master to a lower version
this.AssertError(
- () => new ReleaseManager().PrepareRelease(this.RepoPath, releaseUnstableTag, (nextVersion == null ? null : Version.Parse(nextVersion))),
+ () => new ReleaseManager().PrepareRelease(this.RepoPath, releaseUnstableTag, (nextVersion is null ? null : Version.Parse(nextVersion))),
ReleasePreparationError.VersionDecrement);
}
@@ -412,7 +412,7 @@ public void PrepareRelease_MasterWithoutVersionIncrement(string initialVersion,
// running PrepareRelease should result in an error
// because we're trying to set master to the version it already has
this.AssertError(
- () => new ReleaseManager().PrepareRelease(this.RepoPath, null, (nextVersion == null ? null : Version.Parse(nextVersion))),
+ () => new ReleaseManager().PrepareRelease(this.RepoPath, null, (nextVersion is null ? null : Version.Parse(nextVersion))),
ReleasePreparationError.NoVersionIncrement);
}
diff --git a/src/NerdBank.GitVersioning.Tests/RepoTestBase.cs b/src/NerdBank.GitVersioning.Tests/RepoTestBase.cs
index 4bcd8bbb..5cc81647 100644
--- a/src/NerdBank.GitVersioning.Tests/RepoTestBase.cs
+++ b/src/NerdBank.GitVersioning.Tests/RepoTestBase.cs
@@ -143,7 +143,7 @@ protected void AddCommits(int count = 1)
protected Commit? WriteVersionTxtFile(string version = "1.2", string prerelease = "", string? relativeDirectory = null)
{
- if (relativeDirectory == null)
+ if (relativeDirectory is null)
{
relativeDirectory = string.Empty;
}
@@ -163,7 +163,7 @@ protected void AddCommits(int count = 1)
{
Requires.NotNull(versionData, nameof(versionData));
- if (relativeDirectory == null)
+ if (relativeDirectory is null)
{
relativeDirectory = string.Empty;
}
@@ -197,7 +197,7 @@ protected void AddCommits(int count = 1)
if (Path.GetExtension(relativeFilePath) == ".json")
{
string txtFilePath = relativeFilePath.Substring(0, relativeFilePath.Length - 4) + "txt";
- if (!File.Exists(Path.Combine(this.RepoPath, txtFilePath)) && this.LibGit2Repository.Index[txtFilePath] != null)
+ if (!File.Exists(Path.Combine(this.RepoPath, txtFilePath)) && this.LibGit2Repository.Index[txtFilePath] is not null)
{
this.LibGit2Repository.Index.Remove(txtFilePath);
}
diff --git a/src/NerdBank.GitVersioning.Tests/TestUtilities.cs b/src/NerdBank.GitVersioning.Tests/TestUtilities.cs
index cad5242a..6ea6efc3 100644
--- a/src/NerdBank.GitVersioning.Tests/TestUtilities.cs
+++ b/src/NerdBank.GitVersioning.Tests/TestUtilities.cs
@@ -54,7 +54,7 @@ internal static void ExtractEmbeddedResource(string resourcePath, string extract
using (var stream = GetEmbeddedResource(resourcePath))
{
- Requires.Argument(stream != null, nameof(resourcePath), "Resource not found.");
+ Requires.Argument(stream is not null, nameof(resourcePath), "Resource not found.");
using (var extractedFile = File.OpenWrite(extractedFilePath))
{
stream.CopyTo(extractedFile);
diff --git a/src/NerdBank.GitVersioning.Tests/VersionFileTests.cs b/src/NerdBank.GitVersioning.Tests/VersionFileTests.cs
index a4ad2af3..f6330e61 100644
--- a/src/NerdBank.GitVersioning.Tests/VersionFileTests.cs
+++ b/src/NerdBank.GitVersioning.Tests/VersionFileTests.cs
@@ -140,7 +140,7 @@ public void SetVersion_WritesSimplestFile(string version, string assemblyVersion
var versionOptions = new VersionOptions
{
Version = SemanticVersion.Parse(version),
- AssemblyVersion = assemblyVersion != null || precision != null ? new VersionOptions.AssemblyVersionOptions(assemblyVersion != null ? new Version(assemblyVersion) : null, precision) : null,
+ AssemblyVersion = assemblyVersion is not null || precision is not null ? new VersionOptions.AssemblyVersionOptions(assemblyVersion is not null ? new Version(assemblyVersion) : null, precision) : null,
VersionHeightOffset = versionHeightOffset,
Inherit = inherit,
};
diff --git a/src/NerdBank.GitVersioning/AssemblyVersionOptionsConverter.cs b/src/NerdBank.GitVersioning/AssemblyVersionOptionsConverter.cs
index 0f88e0f5..0e88f638 100644
--- a/src/NerdBank.GitVersioning/AssemblyVersionOptionsConverter.cs
+++ b/src/NerdBank.GitVersioning/AssemblyVersionOptionsConverter.cs
@@ -51,7 +51,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var data = value as VersionOptions.AssemblyVersionOptions;
- if (data != null)
+ if (data is not null)
{
if (data.PrecisionOrDefault == VersionOptions.DefaultVersionPrecision && !this.includeDefaults)
{
diff --git a/src/NerdBank.GitVersioning/CloudBuildServices/GitLab.cs b/src/NerdBank.GitVersioning/CloudBuildServices/GitLab.cs
index aa0c649a..21abebd2 100644
--- a/src/NerdBank.GitVersioning/CloudBuildServices/GitLab.cs
+++ b/src/NerdBank.GitVersioning/CloudBuildServices/GitLab.cs
@@ -14,13 +14,13 @@
internal class GitLab : ICloudBuild
{
public string BuildingBranch =>
- Environment.GetEnvironmentVariable("CI_COMMIT_TAG") == null ?
+ Environment.GetEnvironmentVariable("CI_COMMIT_TAG") is null ?
$"refs/heads/{Environment.GetEnvironmentVariable("CI_COMMIT_REF_NAME")}" : null;
public string BuildingRef => this.BuildingBranch ?? this.BuildingTag;
public string BuildingTag =>
- Environment.GetEnvironmentVariable("CI_COMMIT_TAG") != null ?
+ Environment.GetEnvironmentVariable("CI_COMMIT_TAG") is not null ?
$"refs/tags/{Environment.GetEnvironmentVariable("CI_COMMIT_TAG")}" : null;
public string GitCommitId => Environment.GetEnvironmentVariable("CI_COMMIT_SHA");
diff --git a/src/NerdBank.GitVersioning/CloudBuildServices/SpaceAutomation.cs b/src/NerdBank.GitVersioning/CloudBuildServices/SpaceAutomation.cs
index cf1930ab..b3d11a0d 100644
--- a/src/NerdBank.GitVersioning/CloudBuildServices/SpaceAutomation.cs
+++ b/src/NerdBank.GitVersioning/CloudBuildServices/SpaceAutomation.cs
@@ -19,7 +19,7 @@ internal class SpaceAutomation : ICloudBuild
public string GitCommitId => Environment.GetEnvironmentVariable("JB_SPACE_GIT_REVISION");
- public bool IsApplicable => this.GitCommitId != null;
+ public bool IsApplicable => this.GitCommitId is not null;
public bool IsPullRequest => false;
diff --git a/src/NerdBank.GitVersioning/CloudBuildServices/TeamCity.cs b/src/NerdBank.GitVersioning/CloudBuildServices/TeamCity.cs
index da5367e9..828798ee 100644
--- a/src/NerdBank.GitVersioning/CloudBuildServices/TeamCity.cs
+++ b/src/NerdBank.GitVersioning/CloudBuildServices/TeamCity.cs
@@ -19,7 +19,7 @@ internal class TeamCity : ICloudBuild
public string GitCommitId => Environment.GetEnvironmentVariable("BUILD_VCS_NUMBER");
- public bool IsApplicable => this.GitCommitId != null;
+ public bool IsApplicable => this.GitCommitId is not null;
public bool IsPullRequest => false;
diff --git a/src/NerdBank.GitVersioning/FilterPathJsonConverter.cs b/src/NerdBank.GitVersioning/FilterPathJsonConverter.cs
index acd57e03..304c41f0 100644
--- a/src/NerdBank.GitVersioning/FilterPathJsonConverter.cs
+++ b/src/NerdBank.GitVersioning/FilterPathJsonConverter.cs
@@ -22,7 +22,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
throw new NotSupportedException();
}
- if (this.repoRelativeBaseDirectory == null)
+ if (this.repoRelativeBaseDirectory is null)
{
throw new ArgumentNullException(nameof(this.repoRelativeBaseDirectory), $"Base directory must not be null to be able to deserialize filter paths. Ensure that one was passed to {nameof(VersionOptions.GetJsonSettings)}, and that the version.json file is being written to a Git repository.");
}
@@ -37,7 +37,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
throw new NotSupportedException();
}
- if (this.repoRelativeBaseDirectory == null)
+ if (this.repoRelativeBaseDirectory is null)
{
throw new ArgumentNullException(nameof(this.repoRelativeBaseDirectory), $"Base directory must not be null to be able to serialize filter paths. Ensure that one was passed to {nameof(VersionOptions.GetJsonSettings)}, and that the version.json file is being written to a Git repository.");
}
diff --git a/src/NerdBank.GitVersioning/LibGit2/LibGit2GitExtensions.cs b/src/NerdBank.GitVersioning/LibGit2/LibGit2GitExtensions.cs
index aa27910b..b644803f 100644
--- a/src/NerdBank.GitVersioning/LibGit2/LibGit2GitExtensions.cs
+++ b/src/NerdBank.GitVersioning/LibGit2/LibGit2GitExtensions.cs
@@ -60,13 +60,13 @@ internal static int GetVersionHeight(LibGit2Context context, Version? baseVersio
var tracker = new GitWalkTracker(context);
var versionOptions = tracker.GetVersion(context.Commit);
- if (versionOptions == null)
+ if (versionOptions is null)
{
return 0;
}
var baseSemVer =
- baseVersion != null ? SemanticVersion.Parse(baseVersion.ToString()) :
+ baseVersion is not null ? SemanticVersion.Parse(baseVersion.ToString()) :
versionOptions.Version ?? SemVer0;
var versionHeightPosition = versionOptions.VersionHeightPosition;
@@ -148,7 +148,7 @@ public static IEnumerable GetCommitsFromVersion(LibGit2Context context,
var tracker = new GitWalkTracker(context);
var possibleCommits = from commit in GetCommitsReachableFromRefs(context.Repository)
let commitVersionOptions = tracker.GetVersion(commit)
- where commitVersionOptions != null
+ where commitVersionOptions is not null
where !IsCommitIdMismatch(version, commitVersionOptions, commit)
where !IsVersionHeightMismatch(version, commitVersionOptions, commit, tracker)
select commit;
@@ -195,7 +195,7 @@ private static bool CommitMatchesVersion(this Commit commit, SemanticVersion exp
var commitVersionData = tracker.GetVersion(commit);
var semVerFromFile = commitVersionData?.Version;
- if (semVerFromFile == null)
+ if (semVerFromFile is null)
{
return false;
}
@@ -224,7 +224,7 @@ private static bool CommitMatchesVersion(this Commit commit, Version expectedVer
var commitVersionData = tracker.GetVersion(commit);
var semVerFromFile = commitVersionData?.Version;
- if (semVerFromFile == null)
+ if (semVerFromFile is null)
{
return false;
}
@@ -401,7 +401,7 @@ bool TryCalculateHeight(Commit commit)
int height = 1;
- if (includePaths != null)
+ if (includePaths is not null)
{
// If there are no include paths, or any of the include
// paths refer to the root of the repository, then do not
@@ -506,8 +506,8 @@ internal static Version GetIdAsVersionHelper(this Commit? commit, VersionOptions
// Don't use the ?? coalescing operator here because the position property getters themselves can return null, which should NOT be overridden with our default.
// The default value is only appropriate if versionOptions itself is null.
- var versionHeightPosition = versionOptions != null ? versionOptions.VersionHeightPosition : SemanticVersion.Position.Build;
- var commitIdPosition = versionOptions != null ? versionOptions.GitCommitIdPosition : SemanticVersion.Position.Revision;
+ var versionHeightPosition = versionOptions is not null ? versionOptions.VersionHeightPosition : SemanticVersion.Position.Build;
+ var commitIdPosition = versionOptions is not null ? versionOptions.GitCommitIdPosition : SemanticVersion.Position.Revision;
// The compiler (due to WinPE header requirements) only allows 16-bit version components,
// and forbids 0xffff as a value.
diff --git a/src/NerdBank.GitVersioning/Managed/ManagedGitContext.cs b/src/NerdBank.GitVersioning/Managed/ManagedGitContext.cs
index d42f1aec..a6d4fab5 100644
--- a/src/NerdBank.GitVersioning/Managed/ManagedGitContext.cs
+++ b/src/NerdBank.GitVersioning/Managed/ManagedGitContext.cs
@@ -94,7 +94,7 @@ internal override int CalculateVersionHeight(VersionOptions? committedVersion, V
{
var workingCopyVersion = workingVersion?.Version?.Version;
- if (workingCopyVersion == null || !workingCopyVersion.Equals(headCommitVersion))
+ if (workingCopyVersion is null || !workingCopyVersion.Equals(headCommitVersion))
{
// The working copy has changed the major.minor version.
// So by definition the version height is 0, since no commit represents it yet.
@@ -153,8 +153,8 @@ private Version GetIdAsVersionHelper(VersionOptions? versionOptions, int version
// Don't use the ?? coalescing operator here because the position property getters themselves can return null, which should NOT be overridden with our default.
// The default value is only appropriate if versionOptions itself is null.
- var versionHeightPosition = versionOptions != null ? versionOptions.VersionHeightPosition : SemanticVersion.Position.Build;
- var commitIdPosition = versionOptions != null ? versionOptions.GitCommitIdPosition : SemanticVersion.Position.Revision;
+ var versionHeightPosition = versionOptions is not null ? versionOptions.VersionHeightPosition : SemanticVersion.Position.Build;
+ var commitIdPosition = versionOptions is not null ? versionOptions.GitCommitIdPosition : SemanticVersion.Position.Revision;
// The compiler (due to WinPE header requirements) only allows 16-bit version components,
// and forbids 0xffff as a value.
diff --git a/src/NerdBank.GitVersioning/Managed/ManagedGitExtensions.cs b/src/NerdBank.GitVersioning/Managed/ManagedGitExtensions.cs
index 58b8206e..2f05103e 100644
--- a/src/NerdBank.GitVersioning/Managed/ManagedGitExtensions.cs
+++ b/src/NerdBank.GitVersioning/Managed/ManagedGitExtensions.cs
@@ -35,13 +35,13 @@ internal static int GetVersionHeight(ManagedGitContext context, Version? baseVer
var tracker = new GitWalkTracker(context);
var versionOptions = tracker.GetVersion(context.Commit.Value);
- if (versionOptions == null)
+ if (versionOptions is null)
{
return 0;
}
var baseSemVer =
- baseVersion != null ? SemanticVersion.Parse(baseVersion.ToString()) :
+ baseVersion is not null ? SemanticVersion.Parse(baseVersion.ToString()) :
versionOptions.Version ?? SemVer0;
var versionHeightPosition = versionOptions.VersionHeightPosition;
@@ -69,7 +69,7 @@ private static bool CommitMatchesVersion(GitCommit commit, SemanticVersion expec
var commitVersionData = tracker.GetVersion(commit);
var semVerFromFile = commitVersionData?.Version;
- if (commitVersionData == null || semVerFromFile == null)
+ if (commitVersionData is null || semVerFromFile is null)
{
return false;
}
@@ -167,7 +167,7 @@ bool TryCalculateHeight(GitCommit commit)
int height = 1;
- if (pathFilters != null)
+ if (pathFilters is not null)
{
var relevantCommit = true;
@@ -250,7 +250,7 @@ private static bool IsRelevantCommit(GitRepository repository, GitTree tree, Git
isRelevant = IsRelevantCommit(
repository,
repository.GetTree(entry.Sha),
- parentEntry == null ? GitTree.Empty : repository.GetTree(parentEntry.Sha),
+ parentEntry is null ? GitTree.Empty : repository.GetTree(parentEntry.Sha),
$"{fullPath}/",
filters);
}
@@ -262,7 +262,7 @@ private static bool IsRelevantCommit(GitRepository repository, GitTree tree, Git
}
}
- if (parentEntry != null)
+ if (parentEntry is not null)
{
parent.Children.Remove(child.Key);
}
diff --git a/src/NerdBank.GitVersioning/ManagedGit/FileHelpers.cs b/src/NerdBank.GitVersioning/ManagedGit/FileHelpers.cs
index 623539a1..e1d9713b 100644
--- a/src/NerdBank.GitVersioning/ManagedGit/FileHelpers.cs
+++ b/src/NerdBank.GitVersioning/ManagedGit/FileHelpers.cs
@@ -5,8 +5,9 @@
using System.IO;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;
-using static PInvoke.Kernel32;
-using FileShare = PInvoke.Kernel32.FileShare;
+using Windows.Win32;
+using Windows.Win32.Storage.FileSystem;
+using Windows.Win32.System.SystemServices;
namespace Nerdbank.GitVersioning.ManagedGit
{
@@ -24,7 +25,7 @@ internal static bool TryOpen(string path, out FileStream? stream)
{
if (IsWindows)
{
- var handle = CreateFile(path, ACCESS_MASK.GenericRight.GENERIC_READ, FileShare.FILE_SHARE_READ, (SECURITY_ATTRIBUTES?)null, CreationDisposition.OPEN_EXISTING, CreateFileFlags.FILE_ATTRIBUTE_NORMAL, SafeObjectHandle.Null);
+ var handle = PInvoke.CreateFile(path, FILE_ACCESS_FLAGS.FILE_GENERIC_READ, FILE_SHARE_MODE.FILE_SHARE_READ, lpSecurityAttributes: null, FILE_CREATION_DISPOSITION.OPEN_EXISTING, FILE_FLAGS_AND_ATTRIBUTES.FILE_ATTRIBUTE_NORMAL, null);
if (!handle.IsInvalid)
{
@@ -62,12 +63,15 @@ internal static unsafe bool TryOpen(ReadOnlySpan path, [NotNullWhen(true)]
{
if (IsWindows)
{
- var handle = CreateFile(path, ACCESS_MASK.GenericRight.GENERIC_READ, FileShare.FILE_SHARE_READ, null, CreationDisposition.OPEN_EXISTING, CreateFileFlags.FILE_ATTRIBUTE_NORMAL, SafeObjectHandle.Null);
+ HANDLE handle;
+ fixed (char* pPath = &path[0])
+ {
+ handle = PInvoke.CreateFile(pPath, FILE_ACCESS_FLAGS.FILE_GENERIC_READ, FILE_SHARE_MODE.FILE_SHARE_READ, null, FILE_CREATION_DISPOSITION.OPEN_EXISTING, FILE_FLAGS_AND_ATTRIBUTES.FILE_ATTRIBUTE_NORMAL, default);
+ }
- if (!handle.IsInvalid)
+ if (!handle.Equals(Constants.INVALID_HANDLE_VALUE))
{
- var fileHandle = new SafeFileHandle(handle.DangerousGetHandle(), ownsHandle: true);
- handle.SetHandleAsInvalid();
+ var fileHandle = new SafeFileHandle(handle, ownsHandle: true);
stream = new FileStream(fileHandle, System.IO.FileAccess.Read);
return true;
}
diff --git a/src/NerdBank.GitVersioning/ManagedGit/GitCommitReader.cs b/src/NerdBank.GitVersioning/ManagedGit/GitCommitReader.cs
index 25b22e49..8af84e05 100644
--- a/src/NerdBank.GitVersioning/ManagedGit/GitCommitReader.cs
+++ b/src/NerdBank.GitVersioning/ManagedGit/GitCommitReader.cs
@@ -38,7 +38,7 @@ public static class GitCommitReader
///
public static GitCommit Read(Stream stream, GitObjectId sha, bool readAuthor = false)
{
- if (stream == null)
+ if (stream is null)
{
throw new ArgumentNullException(nameof(stream));
}
diff --git a/src/NerdBank.GitVersioning/ManagedGit/GitObjectId.cs b/src/NerdBank.GitVersioning/ManagedGit/GitObjectId.cs
index f21794b7..3e62f158 100644
--- a/src/NerdBank.GitVersioning/ManagedGit/GitObjectId.cs
+++ b/src/NerdBank.GitVersioning/ManagedGit/GitObjectId.cs
@@ -174,7 +174,7 @@ public override bool Equals(object? obj)
///
public override string ToString()
{
- if (this.sha == null)
+ if (this.sha is null)
{
this.sha = this.CreateString(0, 20);
}
diff --git a/src/NerdBank.GitVersioning/ManagedGit/GitPack.cs b/src/NerdBank.GitVersioning/ManagedGit/GitPack.cs
index 27c45c69..576dd50d 100644
--- a/src/NerdBank.GitVersioning/ManagedGit/GitPack.cs
+++ b/src/NerdBank.GitVersioning/ManagedGit/GitPack.cs
@@ -31,8 +31,8 @@ public class GitPack : IDisposable
private readonly Func packStream;
private readonly Lazy indexStream;
private readonly GitPackCache cache;
- private MemoryMappedFile packFile;
- private MemoryMappedViewAccessor accessor;
+ private MemoryMappedFile? packFile = null;
+ private MemoryMappedViewAccessor? accessor = null;
// Maps GitObjectIds to offets in the git pack.
private readonly Dictionary offsets = new Dictionary();
@@ -98,8 +98,11 @@ public GitPack(GetObjectFromRepositoryDelegate getObjectFromRepositoryDelegate,
this.indexStream = indexStream ?? throw new ArgumentNullException(nameof(indexStream));
this.cache = cache ?? new GitPackMemoryCache();
- this.packFile = MemoryMappedFile.CreateFromFile(this.packStream(), mapName: null, 0, MemoryMappedFileAccess.Read, HandleInheritability.None, leaveOpen: false);
- this.accessor = this.packFile.CreateViewAccessor(0, 0, MemoryMappedFileAccess.Read);
+ if (IntPtr.Size > 4)
+ {
+ this.packFile = MemoryMappedFile.CreateFromFile(this.packStream(), mapName: null, 0, MemoryMappedFileAccess.Read, HandleInheritability.None, leaveOpen: false);
+ this.accessor = this.packFile.CreateViewAccessor(0, 0, MemoryMappedFileAccess.Read);
+ }
}
///
@@ -143,7 +146,7 @@ public bool TryGetObject(GitObjectId objectId, string objectType, out Stream? va
{
var offset = this.GetOffset(objectId);
- if (offset == null)
+ if (offset is null)
{
value = null;
return false;
@@ -202,7 +205,17 @@ public Stream GetObject(long offset, string objectType)
}
var packStream = this.GetPackStream();
- Stream objectStream = GitPackReader.GetObject(this, packStream, offset, objectType, packObjectType);
+ Stream objectStream;
+
+ try
+ {
+ objectStream = GitPackReader.GetObject(this, packStream, offset, objectType, packObjectType);
+ }
+ catch
+ {
+ packStream.Dispose();
+ throw;
+ }
return this.cache.Add(offset, objectStream);
}
@@ -240,8 +253,8 @@ public void Dispose()
this.indexReader.Value.Dispose();
}
- this.accessor.Dispose();
- this.packFile.Dispose();
+ this.accessor?.Dispose();
+ this.packFile?.Dispose();
this.cache.Dispose();
}
@@ -255,7 +268,7 @@ public void Dispose()
var indexReader = this.indexReader.Value;
var offset = indexReader.GetOffset(objectId);
- if (offset != null)
+ if (offset is not null)
{
this.offsets.Add(objectId, offset.Value);
}
@@ -265,7 +278,17 @@ public void Dispose()
private Stream GetPackStream()
{
- return new MemoryMappedStream(this.accessor);
+ // On 64-bit processes, we can use Memory Mapped Streams (the address space
+ // will be large enough to map the entire packfile). On 32-bit processes,
+ // we directly access the underlying stream.
+ if (IntPtr.Size > 4)
+ {
+ return new MemoryMappedStream(this.accessor);
+ }
+ else
+ {
+ return this.packStream();
+ }
}
private GitPackIndexReader OpenIndex()
diff --git a/src/NerdBank.GitVersioning/ManagedGit/GitPackDeltafiedStream.cs b/src/NerdBank.GitVersioning/ManagedGit/GitPackDeltafiedStream.cs
index f2ab7d0e..3cff6c53 100644
--- a/src/NerdBank.GitVersioning/ManagedGit/GitPackDeltafiedStream.cs
+++ b/src/NerdBank.GitVersioning/ManagedGit/GitPackDeltafiedStream.cs
@@ -169,7 +169,7 @@ protected override void Dispose(bool disposing)
private bool TryGetInstruction(out DeltaInstruction instruction)
{
- if (this.current != null && this.offset < this.current.Value.Size)
+ if (this.current is not null && this.offset < this.current.Value.Size)
{
instruction = this.current.Value;
return true;
@@ -177,7 +177,7 @@ private bool TryGetInstruction(out DeltaInstruction instruction)
this.current = DeltaStreamReader.Read(this.deltaStream);
- if (this.current == null)
+ if (this.current is null)
{
instruction = default;
return false;
diff --git a/src/NerdBank.GitVersioning/ManagedGit/GitPackIndexMappedReader.cs b/src/NerdBank.GitVersioning/ManagedGit/GitPackIndexMappedReader.cs
index 8f895ac1..b3690166 100644
--- a/src/NerdBank.GitVersioning/ManagedGit/GitPackIndexMappedReader.cs
+++ b/src/NerdBank.GitVersioning/ManagedGit/GitPackIndexMappedReader.cs
@@ -32,7 +32,7 @@ public unsafe class GitPackIndexMappedReader : GitPackIndexReader
///
public GitPackIndexMappedReader(FileStream stream)
{
- if (stream == null)
+ if (stream is null)
{
throw new ArgumentNullException(nameof(stream));
}
@@ -128,7 +128,7 @@ public override (long?, GitObjectId?) GetOffset(Span objectName, bool ends
{
// If the first bit of the offset address is set, the offset is stored as a 64-bit value in the table of 8-byte offset entries,
// which follows the table of 4-byte offset entries: "large offsets are encoded as an index into the next table with the msbit set."
- offset = offset & 0x7FF;
+ offset = offset & 0x7FFFFFFF;
offsetBuffer = this.Value.Slice(offsetTableStart + 4 * objectCount + 8 * (int)offset, 8);
var offset64 = BinaryPrimitives.ReadInt64BigEndian(offsetBuffer);
diff --git a/src/NerdBank.GitVersioning/ManagedGit/GitPackReader.cs b/src/NerdBank.GitVersioning/ManagedGit/GitPackReader.cs
index 30d3bead..354060d4 100644
--- a/src/NerdBank.GitVersioning/ManagedGit/GitPackReader.cs
+++ b/src/NerdBank.GitVersioning/ManagedGit/GitPackReader.cs
@@ -13,12 +13,12 @@ internal static class GitPackReader
public static Stream GetObject(GitPack pack, Stream stream, long offset, string objectType, GitPackObjectType packObjectType)
{
- if (pack == null)
+ if (pack is null)
{
throw new ArgumentNullException(nameof(pack));
}
- if (stream == null)
+ if (stream is null)
{
throw new ArgumentNullException(nameof(stream));
}
@@ -44,7 +44,7 @@ public static Stream GetObject(GitPack pack, Stream stream, long offset, string
if (type == GitPackObjectType.OBJ_OFS_DELTA)
{
var baseObjectRelativeOffset = ReadVariableLengthInteger(stream);
- var baseObjectOffset = (int)(offset - baseObjectRelativeOffset);
+ long baseObjectOffset = offset - baseObjectRelativeOffset;
var deltaStream = new ZLibStream(stream, decompressedSize);
var baseObjectStream = pack.GetObject(baseObjectOffset, objectType);
@@ -98,9 +98,9 @@ private static (GitPackObjectType, long) ReadObjectHeader(Stream stream)
return (type, length);
}
- private static int ReadVariableLengthInteger(Stream stream)
+ private static long ReadVariableLengthInteger(Stream stream)
{
- int offset = -1;
+ long offset = -1;
int b;
do
diff --git a/src/NerdBank.GitVersioning/ManagedGit/GitRepository.cs b/src/NerdBank.GitVersioning/ManagedGit/GitRepository.cs
index 459f23c6..05e8fd53 100644
--- a/src/NerdBank.GitVersioning/ManagedGit/GitRepository.cs
+++ b/src/NerdBank.GitVersioning/ManagedGit/GitRepository.cs
@@ -192,7 +192,7 @@ public string ShortenObjectId(GitObjectId objectId, int minimum)
{
var objectish = sha.Substring(0, length);
- if (this.Lookup(objectish) != null)
+ if (this.Lookup(objectish) is not null)
{
return objectish;
}
@@ -263,7 +263,7 @@ public GitCommit GetCommit(GitObjectId sha, bool readAuthor = false)
{
using (Stream? stream = this.GetObjectBySha(sha, "commit"))
{
- if (stream == null)
+ if (stream is null)
{
throw new GitException($"The commit {sha} was not found in this repository.") { ErrorCode = GitException.ErrorCodes.ObjectNotFound };
}
@@ -396,7 +396,7 @@ public GitCommit GetCommit(GitObjectId sha, bool readAuthor = false)
// It's possible for the same object to be present in both the object database and the pack files,
// or in multiple pack files.
- if (objectId != null && !possibleObjectIds.Contains(objectId.Value))
+ if (objectId is not null && !possibleObjectIds.Contains(objectId.Value))
{
if (possibleObjectIds.Count > 0)
{
@@ -435,7 +435,7 @@ public GitTree GetTree(GitObjectId sha)
{
using (Stream? stream = this.GetObjectBySha(sha, "tree"))
{
- if (stream == null)
+ if (stream is null)
{
throw new GitException($"The tree {sha} was not found in this repository.") { ErrorCode = GitException.ErrorCodes.ObjectNotFound };
}
@@ -461,7 +461,7 @@ public GitObjectId GetTreeEntry(GitObjectId treeId, ReadOnlySpan nodeName)
{
using (Stream? treeStream = this.GetObjectBySha(treeId, "tree"))
{
- if (treeStream == null)
+ if (treeStream is null)
{
throw new GitException($"The tree {treeId} was not found in this repository.") { ErrorCode = GitException.ErrorCodes.ObjectNotFound };
}
diff --git a/src/NerdBank.GitVersioning/ManagedGit/ZLibStream.cs b/src/NerdBank.GitVersioning/ManagedGit/ZLibStream.cs
index 31d11366..d4e68212 100644
--- a/src/NerdBank.GitVersioning/ManagedGit/ZLibStream.cs
+++ b/src/NerdBank.GitVersioning/ManagedGit/ZLibStream.cs
@@ -56,9 +56,9 @@ public ZLibStream(Stream stream, long length = -1)
Span zlibHeader = stackalloc byte[2];
stream.ReadAll(zlibHeader);
- if (zlibHeader[0] != 0x78 || (zlibHeader[1] != 0x01 && zlibHeader[1] != 0x9C))
+ if (zlibHeader[0] != 0x78 || (zlibHeader[1] != 0x01 && zlibHeader[1] != 0x9C && zlibHeader[1] != 0x5E && zlibHeader[1] != 0xDA))
{
- throw new GitException();
+ throw new GitException($"Invalid zlib header {zlibHeader[0]:X2} {zlibHeader[1]:X2}");
}
}
diff --git a/src/NerdBank.GitVersioning/NativeMethods.json b/src/NerdBank.GitVersioning/NativeMethods.json
new file mode 100644
index 00000000..69d2bcc5
--- /dev/null
+++ b/src/NerdBank.GitVersioning/NativeMethods.json
@@ -0,0 +1,3 @@
+{
+ "$schema": "https://aka.ms/CsWin32.schema.json"
+}
\ No newline at end of file
diff --git a/src/NerdBank.GitVersioning/NativeMethods.txt b/src/NerdBank.GitVersioning/NativeMethods.txt
new file mode 100644
index 00000000..885be08e
--- /dev/null
+++ b/src/NerdBank.GitVersioning/NativeMethods.txt
@@ -0,0 +1,2 @@
+CreateFile
+INVALID_HANDLE_VALUE
diff --git a/src/NerdBank.GitVersioning/NerdBank.GitVersioning.csproj b/src/NerdBank.GitVersioning/NerdBank.GitVersioning.csproj
index afeb8233..1119a781 100644
--- a/src/NerdBank.GitVersioning/NerdBank.GitVersioning.csproj
+++ b/src/NerdBank.GitVersioning/NerdBank.GitVersioning.csproj
@@ -10,14 +10,14 @@
-
+
+
-
diff --git a/src/NerdBank.GitVersioning/ReleaseManager.cs b/src/NerdBank.GitVersioning/ReleaseManager.cs
index 42324946..6656a73e 100644
--- a/src/NerdBank.GitVersioning/ReleaseManager.cs
+++ b/src/NerdBank.GitVersioning/ReleaseManager.cs
@@ -248,7 +248,7 @@ public void PrepareRelease(string projectDirectory, string releaseUnstableTag =
// get the current version
var versionOptions = context.VersionFile.GetVersion();
- if (versionOptions == null)
+ if (versionOptions is null)
{
this.stderr.WriteLine($"Failed to load version file for directory '{projectDirectory}'.");
throw new ReleasePreparationException(ReleasePreparationError.NoVersionFile);
@@ -287,7 +287,7 @@ public void PrepareRelease(string projectDirectory, string releaseUnstableTag =
}
// check if the release branch already exists
- if (repository.Branches[releaseBranchName] != null)
+ if (repository.Branches[releaseBranchName] is not null)
{
this.stderr.WriteLine($"Cannot create branch '{releaseBranchName}' because it already exists.");
throw new ReleasePreparationException(ReleasePreparationError.BranchAlreadyExists);
@@ -384,7 +384,7 @@ private void UpdateVersion(LibGit2Context context, SemanticVersion oldVersion, S
private Signature GetSignature(Repository repository)
{
var signature = repository.Config.BuildSignature(DateTimeOffset.Now);
- if (signature == null)
+ if (signature is null)
{
this.stderr.WriteLine("Cannot create commits in this repo because git user name and email are not configured.");
throw new ReleasePreparationException(ReleasePreparationError.UserNotConfigured);
@@ -443,7 +443,7 @@ private SemanticVersion GetNextDevVersion(VersionOptions versionOptions, Version
var currentVersion = versionOptions.Version;
SemanticVersion nextDevVersion;
- if (nextVersionOverride != null)
+ if (nextVersionOverride is not null)
{
nextDevVersion = new SemanticVersion(nextVersionOverride, currentVersion.Prerelease, currentVersion.BuildMetadata);
}
diff --git a/src/NerdBank.GitVersioning/SemanticVersion.cs b/src/NerdBank.GitVersioning/SemanticVersion.cs
index 9b503b46..ad07b529 100644
--- a/src/NerdBank.GitVersioning/SemanticVersion.cs
+++ b/src/NerdBank.GitVersioning/SemanticVersion.cs
@@ -155,7 +155,7 @@ internal enum Position
///
/// Gets a value indicating whether this instance is the default "0.0" instance.
///
- internal bool IsDefault => this.Version?.Major == 0 && this.Version.Minor == 0 && this.Version.Build == -1 && this.Version.Revision == -1 && this.Prerelease == null && this.BuildMetadata == null;
+ internal bool IsDefault => this.Version?.Major == 0 && this.Version.Minor == 0 && this.Version.Build == -1 && this.Version.Revision == -1 && this.Prerelease is null && this.BuildMetadata is null;
///
/// Gets the debugger display for this instance.
@@ -239,7 +239,7 @@ public override string ToString()
/// true if the instances have equal values; false otherwise.
public bool Equals(SemanticVersion other)
{
- if (other == null)
+ if (other is null)
{
return false;
}
diff --git a/src/NerdBank.GitVersioning/SemanticVersionJsonConverter.cs b/src/NerdBank.GitVersioning/SemanticVersionJsonConverter.cs
index a064cb19..a4ae7f34 100644
--- a/src/NerdBank.GitVersioning/SemanticVersionJsonConverter.cs
+++ b/src/NerdBank.GitVersioning/SemanticVersionJsonConverter.cs
@@ -32,7 +32,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var version = value as SemanticVersion;
- if (version != null)
+ if (version is not null)
{
writer.WriteValue(version.ToString());
return;
diff --git a/src/NerdBank.GitVersioning/VersionOptions.cs b/src/NerdBank.GitVersioning/VersionOptions.cs
index 7aee1dfa..cac77f86 100644
--- a/src/NerdBank.GitVersioning/VersionOptions.cs
+++ b/src/NerdBank.GitVersioning/VersionOptions.cs
@@ -570,9 +570,7 @@ internal bool IsDefaultVersionTheOnlyPropertySet
{
get
{
- return this.Version != null
- && this.AssemblyVersion == null
- && (this.CloudBuild?.IsDefault ?? true)
+ return this.Version is not null && this.AssemblyVersion is null && (this.CloudBuild?.IsDefault ?? true)
&& this.VersionHeightOffset == 0
&& !this.SemVer1NumericIdentifierPadding.HasValue
&& !this.Inherit;
@@ -693,7 +691,7 @@ public bool Equals(NuGetPackageVersionOptions? x, NuGetPackageVersionOptions? y)
return true;
}
- if (x == null || y == null)
+ if (x is null || y is null)
{
return false;
}
@@ -1575,7 +1573,7 @@ public bool Equals(ReleaseOptions? x, ReleaseOptions? y)
///
public int GetHashCode(ReleaseOptions? obj)
{
- if (obj == null)
+ if (obj is null)
return 0;
unchecked
diff --git a/src/NerdBank.GitVersioning/VersionOracle.cs b/src/NerdBank.GitVersioning/VersionOracle.cs
index 84c83019..93a11394 100644
--- a/src/NerdBank.GitVersioning/VersionOracle.cs
+++ b/src/NerdBank.GitVersioning/VersionOracle.cs
@@ -294,7 +294,7 @@ public IEnumerable BuildMetadataWithCommitId
var properties = this.GetType().GetTypeInfo().GetProperties(BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.Instance);
foreach (var property in properties)
{
- if (property.GetCustomAttribute() == null)
+ if (property.GetCustomAttribute() is null)
{
var value = property.GetValue(this);
if (value is object)
diff --git a/src/Nerdbank.GitVersioning.Tasks/ContextAwareTask.cs b/src/Nerdbank.GitVersioning.Tasks/ContextAwareTask.cs
index b4c1e51b..f3bb3e17 100644
--- a/src/Nerdbank.GitVersioning.Tasks/ContextAwareTask.cs
+++ b/src/Nerdbank.GitVersioning.Tasks/ContextAwareTask.cs
@@ -31,11 +31,11 @@ public override bool Execute()
var outerProperties = this.GetType().GetRuntimeProperties().ToDictionary(i => i.Name);
var innerProperties = innerTaskType.GetRuntimeProperties().ToDictionary(i => i.Name);
var propertiesDiscovery = from outerProperty in outerProperties.Values
- where outerProperty.SetMethod != null && outerProperty.GetMethod != null
+ where outerProperty.SetMethod is not null && outerProperty.GetMethod is not null
let innerProperty = innerProperties[outerProperty.Name]
select new { outerProperty, innerProperty };
var propertiesMap = propertiesDiscovery.ToArray();
- var outputPropertiesMap = propertiesMap.Where(pair => pair.outerProperty.GetCustomAttribute() != null).ToArray();
+ var outputPropertiesMap = propertiesMap.Where(pair => pair.outerProperty.GetCustomAttribute() is not null).ToArray();
foreach (var propertyPair in propertiesMap)
{
@@ -54,7 +54,7 @@ public override bool Execute()
return result;
#else
// On .NET Framework (on Windows), we find native binaries by adding them to our PATH.
- if (this.UnmanagedDllDirectory != null)
+ if (this.UnmanagedDllDirectory is not null)
{
string pathEnvVar = Environment.GetEnvironmentVariable("PATH");
string[] searchPaths = pathEnvVar.Split(Path.PathSeparator);
diff --git a/src/Nerdbank.GitVersioning.Tasks/GetBuildVersion.cs b/src/Nerdbank.GitVersioning.Tasks/GetBuildVersion.cs
index 2a9c00d4..77b79342 100644
--- a/src/Nerdbank.GitVersioning.Tasks/GetBuildVersion.cs
+++ b/src/Nerdbank.GitVersioning.Tasks/GetBuildVersion.cs
@@ -237,7 +237,7 @@ protected override bool ExecuteInner()
oracle.PublicRelease = string.Equals(this.DefaultPublicRelease, "true", StringComparison.OrdinalIgnoreCase);
}
- if (this.BuildMetadata != null)
+ if (this.BuildMetadata is not null)
{
oracle.BuildMetadata.AddRange(this.BuildMetadata.Split(';'));
}
@@ -259,7 +259,7 @@ protected override bool ExecuteInner()
this.PrereleaseVersion = oracle.PrereleaseVersion;
this.GitCommitId = oracle.GitCommitId;
this.GitCommitIdShort = oracle.GitCommitIdShort;
- this.GitCommitDateTicks = oracle.GitCommitDate != null ? oracle.GitCommitDate.Value.UtcTicks.ToString(CultureInfo.InvariantCulture) : null;
+ this.GitCommitDateTicks = oracle.GitCommitDate is not null ? oracle.GitCommitDate.Value.UtcTicks.ToString(CultureInfo.InvariantCulture) : null;
this.GitVersionHeight = oracle.VersionHeight;
this.BuildMetadataFragment = oracle.BuildMetadataFragment;
this.CloudBuildNumber = oracle.CloudBuildNumberEnabled ? oracle.CloudBuildNumber : null;
@@ -279,7 +279,7 @@ protected override bool ExecuteInner()
var allVariables = oracle.CloudBuildAllVars
.Select(item => new TaskItem(item.Key, new Dictionary { { "Value", item.Value } }));
- if (cloudBuildVersionVars != null)
+ if (cloudBuildVersionVars is not null)
{
cloudBuildVersionVars = cloudBuildVersionVars
.Union(allVariables);
@@ -290,7 +290,7 @@ protected override bool ExecuteInner()
}
}
- if (cloudBuildVersionVars != null)
+ if (cloudBuildVersionVars is not null)
{
this.CloudBuildVersionVars = cloudBuildVersionVars.ToArray();
}
diff --git a/src/Nerdbank.GitVersioning.Tasks/NativeVersionInfo.cs b/src/Nerdbank.GitVersioning.Tasks/NativeVersionInfo.cs
index 8709c89e..8153a545 100644
--- a/src/Nerdbank.GitVersioning.Tasks/NativeVersionInfo.cs
+++ b/src/Nerdbank.GitVersioning.Tasks/NativeVersionInfo.cs
@@ -106,7 +106,7 @@ BLOCK NBGV_VERSION_BLOCK
public override bool Execute()
{
this.generator = this.CreateGenerator();
- if (this.generator != null)
+ if (this.generator is not null)
{
this.generator.StartFile();
@@ -300,7 +300,7 @@ protected void AddCodeComment(string comment, string token)
{
var sr = new StringReader(comment);
string line;
- while ((line = sr.ReadLine()) != null)
+ while ((line = sr.ReadLine()) is not null)
{
this.codeBuilder.Append(token);
this.codeBuilder.AppendLine(line);
diff --git a/src/Nerdbank.GitVersioning.Tasks/Nerdbank.GitVersioning.nuspec b/src/Nerdbank.GitVersioning.Tasks/Nerdbank.GitVersioning.nuspec
index 30e035fc..48fc3455 100644
--- a/src/Nerdbank.GitVersioning.Tasks/Nerdbank.GitVersioning.nuspec
+++ b/src/Nerdbank.GitVersioning.Tasks/Nerdbank.GitVersioning.nuspec
@@ -23,7 +23,6 @@ IMPORTANT: The 3.x release may produce a different version height than prior maj
-
@@ -49,7 +48,6 @@ IMPORTANT: The 3.x release may produce a different version height than prior maj
-
diff --git a/src/Nerdbank.GitVersioning.Tasks/SetCloudBuildVariables.cs b/src/Nerdbank.GitVersioning.Tasks/SetCloudBuildVariables.cs
index 9939043d..b721152c 100644
--- a/src/Nerdbank.GitVersioning.Tasks/SetCloudBuildVariables.cs
+++ b/src/Nerdbank.GitVersioning.Tasks/SetCloudBuildVariables.cs
@@ -20,7 +20,7 @@ public class SetCloudBuildVariables : Task
public override bool Execute()
{
var cloudBuild = CloudBuild.Active;
- if (cloudBuild != null)
+ if (cloudBuild is not null)
{
var envVars = new Dictionary(StringComparer.OrdinalIgnoreCase);
@@ -42,7 +42,7 @@ public override bool Execute()
}
}
- if (this.CloudBuildVersionVars != null)
+ if (this.CloudBuildVersionVars is not null)
{
foreach (var variable in this.CloudBuildVersionVars)
{
@@ -82,7 +82,7 @@ private void PipeOutputToMSBuildLog(string output, bool warning)
using (var logReader = new StringReader(output))
{
string line;
- while ((line = logReader.ReadLine()) != null)
+ while ((line = logReader.ReadLine()) is not null)
{
// The prefix is presumed to nullify the effect in a real cloud build,
// yet make it detectable by a unit test.
diff --git a/src/Nerdbank.GitVersioning.sln b/src/Nerdbank.GitVersioning.sln
index 66c96ce6..43ffb2c7 100644
--- a/src/Nerdbank.GitVersioning.sln
+++ b/src/Nerdbank.GitVersioning.sln
@@ -1,12 +1,13 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.28404.58
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31411.2
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{4BD1A7CD-6F52-4F5A-825B-50E4D8C3ECFF}"
ProjectSection(SolutionItems) = preProject
..\.editorconfig = ..\.editorconfig
..\.gitignore = ..\.gitignore
+ ..\3rdPartyNotices.txt = ..\3rdPartyNotices.txt
..\azure-pipelines.yml = ..\azure-pipelines.yml
..\build.ps1 = ..\build.ps1
Directory.Build.props = Directory.Build.props
diff --git a/src/nbgv/Program.cs b/src/nbgv/Program.cs
index e23b2d42..b68a1fef 100644
--- a/src/nbgv/Program.cs
+++ b/src/nbgv/Program.cs
@@ -282,7 +282,7 @@ private static int OnInstallCommand(string path, string version, IReadOnlyList met
}
var oracle = new VersionOracle(context, CloudBuild.Active);
- if (metadata != null)
+ if (metadata is not null)
{
oracle.BuildMetadata.AddRange(metadata);
}
@@ -418,7 +418,7 @@ private static int OnGetVersionCommand(string project, IReadOnlyList met
}
var property = oracle.GetType().GetProperty(variable, CaseInsensitiveFlags);
- if (property == null)
+ if (property is null)
{
Console.Error.WriteLine("Variable \"{0}\" not a version property.", variable);
return (int)ExitCodes.BadVariable;
@@ -447,7 +447,7 @@ private static int OnSetVersionCommand(string project, string version)
using var context = GitContext.Create(searchPath, writable: true);
var existingOptions = context.VersionFile.GetVersion(out string actualDirectory);
string versionJsonPath;
- if (existingOptions != null)
+ if (existingOptions is not null)
{
existingOptions.Version = semver;
versionJsonPath = context.VersionFile.SetVersion(actualDirectory, existingOptions);
@@ -598,7 +598,7 @@ private static int OnCloudCommand(string project, IReadOnlyList metadata
using var context = GitContext.Create(searchPath, writable: AlwaysUseLibGit2);
var oracle = new VersionOracle(context, cloudBuild: activeCloudBuild);
- if (metadata != null)
+ if (metadata is not null)
{
oracle.BuildMetadata.AddRange(metadata);
}
@@ -620,7 +620,7 @@ private static int OnCloudCommand(string project, IReadOnlyList metadata
}
}
- if (define != null)
+ if (define is not null)
{
foreach (string def in define)
{
@@ -641,7 +641,7 @@ private static int OnCloudCommand(string project, IReadOnlyList metadata
}
}
- if (activeCloudBuild != null)
+ if (activeCloudBuild is not null)
{
if (string.IsNullOrEmpty(version))
{
diff --git a/src/nuget.config b/src/nuget.config
index 7ada9430..ede70863 100644
--- a/src/nuget.config
+++ b/src/nuget.config
@@ -13,6 +13,7 @@
Microsoft;aarnott;xunit;kzu;castleproject;patrickb8man;jamesnk;ethomson;AndreyAkinshin;MarcoRossignoli;cake-build;ericnewton76;0xd4d;manuel.roemer
+