Skip to content

Commit

Permalink
add option to ignore height
Browse files Browse the repository at this point in the history
  • Loading branch information
adamralph committed Mar 6, 2022
1 parent 13365e6 commit cec748a
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 7 deletions.
11 changes: 7 additions & 4 deletions MinVer.Lib/Versioner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ namespace MinVer.Lib
{
public static class Versioner
{
public static Version GetVersion(string workDir, string tagPrefix, MajorMinor minMajorMinor, string buildMeta, VersionPart autoIncrement, string defaultPreReleasePhase, ILogger log)
public static Version GetVersion(string workDir, string tagPrefix, MajorMinor minMajorMinor, string buildMeta, VersionPart autoIncrement, string defaultPreReleasePhase, ILogger log, bool ignoreHeight = false)
{
log = log ?? throw new ArgumentNullException(nameof(log));

defaultPreReleasePhase = string.IsNullOrEmpty(defaultPreReleasePhase)
? "alpha"
: defaultPreReleasePhase;

var version = GetVersion(workDir, tagPrefix, autoIncrement, defaultPreReleasePhase, log).AddBuildMetadata(buildMeta);
var version = GetVersion(workDir, tagPrefix, autoIncrement, defaultPreReleasePhase, log, ignoreHeight).AddBuildMetadata(buildMeta);

var calculatedVersion = version.Satisfying(minMajorMinor, defaultPreReleasePhase);

Expand All @@ -28,7 +28,7 @@ public static Version GetVersion(string workDir, string tagPrefix, MajorMinor mi
return calculatedVersion;
}

private static Version GetVersion(string workDir, string tagPrefix, VersionPart autoIncrement, string defaultPreReleasePhase, ILogger log)
private static Version GetVersion(string workDir, string tagPrefix, VersionPart autoIncrement, string defaultPreReleasePhase, ILogger log, bool ignoreHeight)
{
if (!Git.IsWorkingDirectory(workDir, log))
{
Expand Down Expand Up @@ -70,8 +70,11 @@ private static Version GetVersion(string workDir, string tagPrefix, VersionPart

_ = string.IsNullOrEmpty(selectedCandidate.Tag) && log.IsInfoEnabled && log.Info($"No commit found with a valid SemVer 2.0 version{(string.IsNullOrEmpty(tagPrefix) ? "" : $" prefixed with '{tagPrefix}'")}. Using default version {selectedCandidate.Version}.");
_ = log.IsInfoEnabled && log.Info($"Using{(log.IsDebugEnabled && orderedCandidates.Count > 1 ? " " : " ")}{selectedCandidate.ToString(tagWidth, versionWidth, heightWidth)}.");
_ = ignoreHeight && log.IsDebugEnabled && log.Debug("Ignoring height.");

return selectedCandidate.Version.WithHeight(selectedCandidate.Height, autoIncrement, defaultPreReleasePhase);
return ignoreHeight
? selectedCandidate.Version
: selectedCandidate.Version.WithHeight(selectedCandidate.Height, autoIncrement, defaultPreReleasePhase);
}

private static List<Candidate> GetCandidates(Commit head, IEnumerable<(string Name, string Sha)> tags, string tagPrefix, string defaultPreReleasePhase, ILogger log)
Expand Down
2 changes: 2 additions & 0 deletions MinVer/build/MinVer.targets
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
<Message Importance="$(MinVerDetailed)" Text="MinVer: [input] MinVerAutoIncrement=$(MinVerAutoIncrement)" />
<Message Importance="$(MinVerDetailed)" Text="MinVer: [input] MinVerBuildMetadata=$(MinVerBuildMetadata)" />
<Message Importance="$(MinVerDetailed)" Text="MinVer: [input] MinVerDefaultPreReleasePhase=$(MinVerDefaultPreReleasePhase)" />
<Message Importance="$(MinVerDetailed)" Text="MinVer: [input] MinVerIgnoreHeight=$(MinVerIgnoreHeight)" />
<Message Importance="$(MinVerDetailed)" Text="MinVer: [input] MinVerMinimumMajorMinor=$(MinVerMinimumMajorMinor)" />
<Message Importance="$(MinVerDetailed)" Text="MinVer: [input] MinVerTagPrefix=$(MinVerTagPrefix)" />
<Message Importance="$(MinVerDetailed)" Text="MinVer: [input] MinVerVerbosity=$(MinVerVerbosity)" />
Expand All @@ -32,6 +33,7 @@
<MinVerInputs Include="--auto-increment &quot;$(MinVerAutoIncrement)&quot;" />
<MinVerInputs Include="--build-metadata &quot;$(MinVerBuildMetadata)&quot;" />
<MinVerInputs Include="--default-pre-release-phase &quot;$(MinVerDefaultPreReleasePhase)&quot;" />
<MinVerInputs Include="--ignore-height" Condition="'$(MinVerIgnoreHeight)' == 'true'" />
<MinVerInputs Include="--minimum-major-minor &quot;$(MinVerMinimumMajorMinor)&quot;" />
<MinVerInputs Include="--tag-prefix &quot;$(MinVerTagPrefix)&quot;" />
<MinVerInputs Include="--verbosity &quot;$(MinVerVerbosity)&quot;" />
Expand Down
35 changes: 35 additions & 0 deletions MinVerTests.Packages/IgnoringHeight.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using System.Reflection;
using System.Threading.Tasks;
using MinVerTests.Infra;
using Xunit;

namespace MinVerTests.Packages
{
public static class IgnoringHeight
{
[Fact]
public static async Task HeightIsIgnored()
{
// arrange
var path = MethodBase.GetCurrentMethod().GetTestDirectory();
await Sdk.CreateProject(path);

await Git.Init(path);
await Git.Commit(path);
await Git.Tag(path, "2.3.4");
await Git.Commit(path);

var envVars = ("MinVerIgnoreHeight".ToAltCase(), "true".ToAltCase());

var expected = Package.WithVersion(2, 3, 4);

// act
var (actual, _, _) = await Sdk.BuildProject(path, envVars);
var (cliStandardOutput, _) = await MinVerCli.ReadAsync(path, envVars: envVars);

// assert
Assert.Equal(expected, actual);
Assert.Equal(expected.Version, cliStandardOutput.Trim());
}
}
}
25 changes: 23 additions & 2 deletions minver-cli/Options.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ internal class Options
VersionPart? autoIncrement,
string? buildMeta,
string? defaultPreReleasePhase,
bool? ignoreHeight,
MajorMinor? minMajorMinor,
string? tagPrefix,
Verbosity? verbosity,
Expand All @@ -21,6 +22,7 @@ internal class Options
this.AutoIncrement = autoIncrement;
this.BuildMeta = buildMeta;
this.DefaultPreReleasePhase = defaultPreReleasePhase;
this.IgnoreHeight = ignoreHeight;
this.MinMajorMinor = minMajorMinor;
this.TagPrefix = tagPrefix;
this.Verbosity = verbosity;
Expand All @@ -33,6 +35,7 @@ public static bool TryParseEnvVars([NotNullWhen(returnValue: true)] out Options?
options = null;

VersionPart? autoIncrement = null;
bool? ignoreHeight = null;
MajorMinor? minMajorMinor = null;
Verbosity? verbosity = null;
Lib.Version? versionOverride = null;
Expand All @@ -55,6 +58,20 @@ public static bool TryParseEnvVars([NotNullWhen(returnValue: true)] out Options?

var defaultPreReleasePhase = GetEnvVar("MinVerDefaultPreReleasePhase");

var ignoreHeightEnvVar = GetEnvVar("MinVerIgnoreHeight");
if (!string.IsNullOrEmpty(ignoreHeightEnvVar))
{
if (bool.TryParse(ignoreHeightEnvVar, out var value))
{
ignoreHeight = value;
}
else
{
Logger.ErrorInvalidEnvVar("MinVerIgnoreHeight", ignoreHeightEnvVar, "true, false (case insensitive)");
return false;
}
}

var minMajorMinorEnvVar = GetEnvVar("MinVerMinimumMajorMinor");
if (!string.IsNullOrEmpty(minMajorMinorEnvVar) && !MajorMinor.TryParse(minMajorMinorEnvVar, out minMajorMinor))
{
Expand All @@ -78,7 +95,7 @@ public static bool TryParseEnvVars([NotNullWhen(returnValue: true)] out Options?
return false;
}

options = new Options(autoIncrement, buildMeta, defaultPreReleasePhase, minMajorMinor, tagPrefix, verbosity, versionOverride);
options = new Options(autoIncrement, buildMeta, defaultPreReleasePhase, ignoreHeight, minMajorMinor, tagPrefix, verbosity, versionOverride);

return true;
}
Expand All @@ -100,6 +117,7 @@ public static bool TryParseEnvVars([NotNullWhen(returnValue: true)] out Options?
string? autoIncrementOption,
string? buildMetaOption,
string? defaultPreReleasePhaseOption,
bool? ignoreHeight,
string? minMajorMinorOption,
string? tagPrefixOption,
string? verbosityOption,
Expand Down Expand Up @@ -148,7 +166,7 @@ public static bool TryParseEnvVars([NotNullWhen(returnValue: true)] out Options?
}
#endif

options = new Options(autoIncrement, buildMetaOption, defaultPreReleasePhaseOption, minMajorMinor, tagPrefixOption, verbosity, versionOverride);
options = new Options(autoIncrement, buildMetaOption, defaultPreReleasePhaseOption, ignoreHeight, minMajorMinor, tagPrefixOption, verbosity, versionOverride);

return true;
}
Expand All @@ -159,6 +177,7 @@ public static bool TryParseEnvVars([NotNullWhen(returnValue: true)] out Options?
this.AutoIncrement ?? other.AutoIncrement,
this.BuildMeta ?? other.BuildMeta,
this.DefaultPreReleasePhase ?? other.DefaultPreReleasePhase,
this.IgnoreHeight ?? other.IgnoreHeight,
this.MinMajorMinor ?? other.MinMajorMinor,
this.TagPrefix ?? other.TagPrefix,
this.Verbosity ?? other.Verbosity,
Expand All @@ -171,6 +190,8 @@ public static bool TryParseEnvVars([NotNullWhen(returnValue: true)] out Options?

public string? DefaultPreReleasePhase { get; private set; }

public bool? IgnoreHeight { get; private set; }

public MajorMinor? MinMajorMinor { get; private set; }

public string? TagPrefix { get; private set; }
Expand Down
4 changes: 3 additions & 1 deletion minver-cli/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ private static int Main(string[] args)
var autoIncrementOption = app.Option("-a|--auto-increment <VERSION_PART>", VersionPartExtensions.ValidValues, CommandOptionType.SingleValue);
var buildMetaOption = app.Option("-b|--build-metadata <BUILD_METADATA>", "", CommandOptionType.SingleValue);
var defaultPreReleasePhaseOption = app.Option("-d|--default-pre-release-phase <PHASE>", "alpha (default), preview, etc.", CommandOptionType.SingleValue);
var ignoreHeightOption = app.Option<bool>("-i|--ignore-height", "Use the latest tag (or root commit) as-is, without adding height", CommandOptionType.NoValue);
var minMajorMinorOption = app.Option("-m|--minimum-major-minor <MINIMUM_MAJOR_MINOR>", MajorMinor.ValidValues, CommandOptionType.SingleValue);
var tagPrefixOption = app.Option("-t|--tag-prefix <TAG_PREFIX>", "", CommandOptionType.SingleValue);
var verbosityOption = app.Option("-v|--verbosity <VERBOSITY>", VerbosityMap.ValidValues, CommandOptionType.SingleValue);
Expand All @@ -43,6 +44,7 @@ private static int Main(string[] args)
autoIncrementOption.Value(),
buildMetaOption.Value(),
defaultPreReleasePhaseOption.Value(),
ignoreHeightOption.HasValue() ? (bool?)true : null,
minMajorMinorOption.Value(),
tagPrefixOption.Value(),
verbosityOption.Value(),
Expand Down Expand Up @@ -76,7 +78,7 @@ private static int Main(string[] args)
return 0;
}
var version = Versioner.GetVersion(workDir, options.TagPrefix ?? "", options.MinMajorMinor ?? MajorMinor.Zero, options.BuildMeta ?? "", options.AutoIncrement ?? default, options.DefaultPreReleasePhase ?? "", log);
var version = Versioner.GetVersion(workDir, options.TagPrefix ?? "", options.MinMajorMinor ?? MajorMinor.Zero, options.BuildMeta ?? "", options.AutoIncrement ?? default, options.DefaultPreReleasePhase ?? "", log, options.IgnoreHeight ?? false);
Console.Out.WriteLine(version);
Expand Down

0 comments on commit cec748a

Please sign in to comment.