Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rename MinVerMajorMinor to MinVerMinimumMajorMinor #157

Merged
merged 1 commit into from
Dec 9, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions MinVer.Lib/Versioner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ namespace MinVer.Lib

public static class Versioner
{
public static Version GetVersion(Repository repo, string tagPrefix, MajorMinor range, string buildMetadata, ILogger log)
public static Version GetVersion(Repository repo, string tagPrefix, MajorMinor minimumRange, string buildMetadata, ILogger log)
{
var commit = repo.Commits.FirstOrDefault();

if (commit == default)
{
var version = new Version(range?.Major ?? 0, range?.Minor ?? 0, buildMetadata);
var version = new Version(minimumRange?.Major ?? 0, minimumRange?.Minor ?? 0, buildMetadata);

log.Info($"No commits found. Using default version {version}.");

Expand Down Expand Up @@ -176,13 +176,13 @@ public static Version GetVersion(Repository repo, string tagPrefix, MajorMinor r
var selectedCandidate = orderedCandidates.Last();
log.Info($"Using{(log.IsDebugEnabled && orderedCandidates.Count > 1 ? " " : " ")}{selectedCandidate.ToString(tagWidth, versionWidth, heightWidth)}.");

var baseVersion = range != default && selectedCandidate.Version.IsBefore(range.Major, range.Minor)
? new Version(range.Major, range.Minor)
var baseVersion = minimumRange != default && selectedCandidate.Version.IsBefore(minimumRange.Major, minimumRange.Minor)
? new Version(minimumRange.Major, minimumRange.Minor)
: selectedCandidate.Version;

if (baseVersion != selectedCandidate.Version)
{
log.Info($"Bumping version to {baseVersion} to satisfy {range} range.");
log.Info($"Bumping version to {baseVersion} to satisfy minimum major minor {minimumRange}.");
}

var calculatedVersion = baseVersion.WithHeight(selectedCandidate.Height).AddBuildMetadata(buildMetadata);
Expand Down
4 changes: 2 additions & 2 deletions MinVer/Logger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ public void WarnInvalidRepoPath(string path, Version version) =>
public static void ErrorInvalidRepoPath(string path) =>
Error(1002, $"Invalid repository path '{path}'. Directory does not exist.");

public static void ErrorInvalidMajorMinorRange(string majorMinor) =>
Error(1003, $"Invalid MAJOR.MINOR range '{majorMinor}'.");
public static void ErrorInvalidMinimumMajorMinor(string range) =>
Error(1003, $"Invalid minimum MAJOR.MINOR range '{range}'.");

public static void ErrorInvalidVerbosityLevel(string verbosity) =>
Error(1004, $"Invalid verbosity level '{verbosity}'. The level must be {VerbosityMap.Levels}.");
Expand Down
3 changes: 2 additions & 1 deletion MinVer/build/MinVer.targets
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@

<Target Name="MinVer" BeforeTargets="CoreCompile;GenerateNuspec" Condition="'$(DesignTimeBuild)' != 'true'">
<Error Condition="'$(UsingMicrosoftNETSdk)' != 'true'" Code="MINVER0001" Text="MinVer only works in SDK-style projects." />
<Error Condition="'$(MinVerMajorMinor)' != ''" Code="MINVER_TEMP0001" Text="MinVerMajorMinor has been renamed to MinVerMinimumMajorMinor." />
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This may be removed before RC.

<ItemGroup>
<MinVerInputs Include="--build-metadata &quot;$(MinVerBuildMetadata)&quot;" />
<MinVerInputs Include="--major-minor &quot;$(MinVerMajorMinor)&quot;" />
<MinVerInputs Include="--minimum-major-minor &quot;$(MinVerMinimumMajorMinor)&quot;" />
<MinVerInputs Include="--repo &quot;$(MSBuildProjectDirectory)&quot;" />
<MinVerInputs Include="--tag-prefix &quot;$(MinVerTagPrefix)&quot;" />
<MinVerInputs Include="--verbosity &quot;$(MinVerVerbosity)&quot;" />
Expand Down
14 changes: 7 additions & 7 deletions MinVerTests/MajorMinor.cs → MinVerTests/MinimumMajorMinor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ namespace MinVerTests

using Version = MinVer.Lib.Version;

public static class MajorMinor
public static class MinimumMajorMinor
{
[Scenario]
public static void NoCommits(string path, Repository repo, Version actualVersion)
{
$"Given an empty git repository in '{path = GetScenarioDirectory($"major-minor-not-tagged")}'"
$"Given an empty git repository in '{path = GetScenarioDirectory($"minimum-major-minor-not-tagged")}'"
.x(c => repo = EnsureEmptyRepository(path).Using(c));

"When the version is determined using major minor '1.2'"
"When the version is determined using minimum major minor '1.2'"
.x(() => actualVersion = Versioner.GetVersion(new Repository(path), default, new MinVer.Lib.MajorMinor(1, 2), default, new TestLogger()));

$"Then the version is '1.2.0-alpha.0'"
Expand All @@ -32,13 +32,13 @@ public static void NoCommits(string path, Repository repo, Version actualVersion
[Example("2.0.0", 3, 0, "3.0.0-alpha.0")]
public static void Tagged(string tag, int major, int minor, string expectedVersion, string path, Repository repo, Version actualVersion)
{
$"Given a git repository with a commit in '{path = GetScenarioDirectory($"major-minor-tagged-{tag}-{major}-{minor}")}'"
$"Given a git repository with a commit in '{path = GetScenarioDirectory($"minimum-major-minor-tagged-{tag}-{major}-{minor}")}'"
.x(c => repo = EnsureEmptyRepositoryAndCommit(path).Using(c));

$"And the commit is tagged '{tag}'"
.x(() => repo.ApplyTag(tag));

$"When the version is determined using major minor '{major}.{minor}'"
$"When the version is determined using minimum major minor '{major}.{minor}'"
.x(() => actualVersion = Versioner.GetVersion(new Repository(path), default, new MinVer.Lib.MajorMinor(major, minor), default, new TestLogger()));

$"Then the version is '{expectedVersion}'"
Expand All @@ -48,10 +48,10 @@ public static void Tagged(string tag, int major, int minor, string expectedVersi
[Scenario]
public static void NotTagged(string path, Repository repo, Version actualVersion)
{
$"Given a git repository with a commit in '{path = GetScenarioDirectory($"major-minor-not-tagged")}'"
$"Given a git repository with a commit in '{path = GetScenarioDirectory($"minimum-major-minor-not-tagged")}'"
.x(c => repo = EnsureEmptyRepositoryAndCommit(path).Using(c));

"When the version is determined using major minor '1.0'"
"When the version is determined using minimum major minor '1.0'"
.x(() => actualVersion = Versioner.GetVersion(new Repository(path), default, new MinVer.Lib.MajorMinor(1, 0), default, new TestLogger()));

$"Then the version is '1.0.0-alpha.0'"
Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ This behaviour can be [customised](#can-i-use-the-version-calculated-by-minver-f
Options can be specified as either MSBuild properties or environment variables.

- [`MinVerBuildMetadata`](#can-i-include-build-metadata-in-the-version)
- [`MinVerMajorMinor`](#can-i-bump-the-major-or-minor-version)
- [`MinVerMinimumMajorMinor`](#can-i-bump-the-major-or-minor-version)
- [`MinVerTagPrefix`](#can-i-prefix-my-tag-names)
- [`MinVerVerbosity`](#can-i-control-the-logging-verbosity)

Expand All @@ -96,21 +96,21 @@ _(With TL;DR answers inline.)_

Yes! You probably want to do this because at a point in time, on a given branch, you are working on a `MAJOR.MINOR` range, e.g. `1.0`, `1.1`, or `2.0`. The branch could be `master`, `develop`, a special release branch, a support branch, or anything else.

Before you create the first tag on that branch, interim builds will use the latest tag found in the commit history, which may not match the `MAJOR.MINOR` range which the current branch represents. Or if no tag is found in the commit history, interim builds will have the default version `0.0.0-alpha.0`. If you prefer those interim builds to have a version within the current range, specify the range with [`MinVerMajorMinor`](#options). For example:
Before you create the first tag on that branch, interim builds will use the latest tag found in the commit history, which may not match the `MAJOR.MINOR` range which the current branch represents. Or if no tag is found in the commit history, interim builds will have the default version `0.0.0-alpha.0`. If you prefer those interim builds to have a version within the current range, specify the range with [`MinVerMinimumMajorMinor`](#options). For example:

```xml
<PropertyGroup>
<MinVerMajorMinor>1.0</MinVerMajorMinor>
<MinVerMinimumMajorMinor>1.0</MinVerMinimumMajorMinor>
</PropertyGroup>
```

MinVer will now use a default version of `1.0.0-alpha.0`.

If you begin to release versions in the `1.0` range from another branch (e.g. a special release branch), update this value to `1.1`, `2.0`, or whatever `MAJOR.MINOR` range the current branch now represents.

Note that `MinVerMajorMinor` will be redundant after you create the first tag with same `MAJOR.MINOR`. If you don't care that the versions of interim builds before that first tag will have a lower `MAJOR.MINOR`, then simply don't specify `MinVerMajorMinor`.
Note that `MinVerMinimumMajorMinor` will be redundant after you create the first tag with same `MAJOR.MINOR`. If you don't care that the versions of interim builds before that first tag will have a lower `MAJOR.MINOR`, then simply don't specify `MinVerMinimumMajorMinor`.

Also note that if the latest tag found in the commit history has a higher `MAJOR.MINOR` than `MinVerMajorMinor`, then `MinVerMajorMinor` will be ignored.
Also note that if the latest tag found in the commit history has a higher `MAJOR.MINOR` than `MinVerMinimumMajorMinor`, then `MinVerMinimumMajorMinor` will be ignored.

### Can I use my own pre-release versioning scheme?

Expand Down
4 changes: 2 additions & 2 deletions minver-cli/Logger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ public void WarnInvalidRepoPath(string path, Version version) =>
public static void ErrorInvalidRepoPath(string path) =>
Error($"Invalid repository path '{path}'. Directory does not exist.");

public static void ErrorInvalidMajorMinorRange(string majorMinor) =>
Error($"Invalid MAJOR.MINOR range '{majorMinor}'.");
public static void ErrorInvalidMinimumMajorMinor(string range) =>
Error($"Invalid minimum MAJOR.MINOR range '{range}'.");

public static void ErrorInvalidVerbosityLevel(string verbosity) =>
Error($"Invalid verbosity level '{verbosity}'. The level must be {VerbosityMap.Levels}.");
Expand Down
26 changes: 16 additions & 10 deletions minver-cli/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,24 +14,30 @@ internal static class Program

private static int Main(string[] args)
{
if (args.Contains("--major-minor", StringComparer.OrdinalIgnoreCase))
{
Console.Out.WriteLine("--major-minor has been renamed to --minimum-major-minor");
return 2;
}

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This may be removed before RC.

var app = new CommandLineApplication { Name = "minver", FullName = $"MinVer CLI {informationalVersion}" };

app.HelpOption();

var buildMetadata = app.Option("-b|--build-metadata <BUILD_METADATA>", "", CommandOptionType.SingleValue);
var majorMinor = app.Option("-m|--major-minor <RANGE>", "1.0, 1.1, 2.0, etc.", CommandOptionType.SingleValue);
var minimumMajorMinor = app.Option("-m|--minimum-major-minor <RANGE>", "1.0, 1.1, 2.0, etc.", CommandOptionType.SingleValue);
var repo = app.Option("-r|--repo <PATH>", "Repository or working directory.", CommandOptionType.SingleValue);
var tagPrefix = app.Option("-t|--tag-prefix <TAG_PREFIX>", "", CommandOptionType.SingleValue);
var verbosity = app.Option("-v|--verbosity <LEVEL>", VerbosityMap.Levels, CommandOptionType.SingleValue);

app.OnExecute(() =>
{
if (!TryParse(repo.Value(), majorMinor.Value(), verbosity.Value(), out var path, out var range, out var level))
if (!TryParse(repo.Value(), minimumMajorMinor.Value(), verbosity.Value(), out var path, out var minimumRange, out var level))
{
return 2;
}

var version = GetVersion(path, tagPrefix.Value(), range, buildMetadata.Value(), level);
var version = GetVersion(path, tagPrefix.Value(), minimumRange, buildMetadata.Value(), level);

Console.Out.WriteLine(version);

Expand All @@ -41,10 +47,10 @@ private static int Main(string[] args)
return app.Execute(args);
}

private static bool TryParse(string repo, string majorMinor, string verbosity, out string path, out MajorMinor range, out Verbosity level)
private static bool TryParse(string repo, string minimumMajorMinor, string verbosity, out string path, out MajorMinor minimumRange, out Verbosity level)
{
path = ".";
range = default;
minimumRange = default;
level = default;

if (!string.IsNullOrEmpty(repo) && !Directory.Exists(path = repo))
Expand All @@ -53,9 +59,9 @@ private static bool TryParse(string repo, string majorMinor, string verbosity, o
return false;
}

if (!string.IsNullOrEmpty(majorMinor) && !MajorMinor.TryParse(majorMinor, out range))
if (!string.IsNullOrEmpty(minimumMajorMinor) && !MajorMinor.TryParse(minimumMajorMinor, out minimumRange))
{
Logger.ErrorInvalidMajorMinorRange(majorMinor);
Logger.ErrorInvalidMinimumMajorMinor(minimumMajorMinor);
return false;
}

Expand All @@ -68,7 +74,7 @@ private static bool TryParse(string repo, string majorMinor, string verbosity, o
return true;
}

private static Version GetVersion(string path, string tagPrefix, MajorMinor range, string buildMetadata, Verbosity level)
private static Version GetVersion(string path, string tagPrefix, MajorMinor minimumRange, string buildMetadata, Verbosity level)
{
var log = new Logger(level);

Expand All @@ -79,7 +85,7 @@ private static Version GetVersion(string path, string tagPrefix, MajorMinor rang

if (!RepositoryEx.TryCreateRepo(path, out var repo))
{
var version = new Version(range?.Major ?? 0, range?.Minor ?? 0, buildMetadata);
var version = new Version(minimumRange?.Major ?? 0, minimumRange?.Minor ?? 0, buildMetadata);

log.WarnInvalidRepoPath(path, version);

Expand All @@ -88,7 +94,7 @@ private static Version GetVersion(string path, string tagPrefix, MajorMinor rang

try
{
return Versioner.GetVersion(repo, tagPrefix, range, buildMetadata, log);
return Versioner.GetVersion(repo, tagPrefix, minimumRange, buildMetadata, log);
}
finally
{
Expand Down
8 changes: 4 additions & 4 deletions targets/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -170,16 +170,16 @@ public static async Task Main(string[] args)
});

Target(
"test-package-major-minor",
"test-package-minimum-major-minor",
DependsOn("test-package-commit-after-tag"),
async () =>
{
using (var repo = new Repository(testRepo))
{
// arrange
Environment.SetEnvironmentVariable("MinVerMajorMinor", "2.0", EnvironmentVariableTarget.Process);
Environment.SetEnvironmentVariable("MinVerMinimumMajorMinor", "2.0", EnvironmentVariableTarget.Process);

var output = Path.Combine(testPackageBaseOutput, $"{buildNumber}-test-package-major-minor");
var output = Path.Combine(testPackageBaseOutput, $"{buildNumber}-test-package-minimum-major-minor");

// act
Environment.SetEnvironmentVariable("MinVerVerbosity", "diagnostic", EnvironmentVariableTarget.Process);
Expand All @@ -190,7 +190,7 @@ public static async Task Main(string[] args)
}
});

Target("test-package", DependsOn("test-package-major-minor"));
Target("test-package", DependsOn("test-package-minimum-major-minor"));

await RunTargetsAndExitAsync(args);
}
Expand Down