public string GetAndIncrementTag(DirectoryInfo repository, SemanticVersionElement semanticVersionElement) { var latestTag = _git.GetLatestTag(repository); if (latestTag == null) { _logger.LogInformation("Repository doesn't contain any Tags."); return(Prompt.GetString(TagPrompt, "1.0.0")); } _logger.LogInformation($"Latest Tag is '{latestTag}'"); if (SemanticVersion.TryParse(latestTag, out var semver)) { switch (semanticVersionElement) { case SemanticVersionElement.None: var next = semver.Minor.HasValue ? semver.Increase(SemanticVersionElement.Minor).ToString() : semver.Increase(SemanticVersionElement.Major).ToString(); return(Prompt.GetString(TagPrompt, next)); case SemanticVersionElement.Major: case SemanticVersionElement.Minor: case SemanticVersionElement.Patch: return(semver.Increase(semanticVersionElement).ToString()); default: throw new ArgumentOutOfRangeException(nameof(semanticVersionElement), semanticVersionElement, null); } } return(Prompt.GetString(TagPrompt)); }
public SemanticVersion Increase(SemanticVersionElement semanticVersionElement) { switch (semanticVersionElement) { case SemanticVersionElement.None: return(this); case SemanticVersionElement.Major: return(new SemanticVersion( Major + 1, Minor.HasValue ? (int?)0 : null, Patch.HasValue ? (int?)0 : null )); case SemanticVersionElement.Minor: if (Minor.HasValue) { return(new SemanticVersion( Major, Minor + 1, Patch.HasValue ? (int?)0 : null )); } else { throw new ArgumentException($"Can't increase version {semanticVersionElement}"); } case SemanticVersionElement.Patch: if (Patch.HasValue) { return(new SemanticVersion( Major, Minor, Patch + 1 )); } else { throw new ArgumentException($"Can't increase version {semanticVersionElement}"); } default: throw new ArgumentOutOfRangeException(nameof(semanticVersionElement), semanticVersionElement, null); } }