static bool IsStableRelease(string tagName)
        {
            int major;
            int minor;

            return(ShortVersionParser.TryParseMajorMinor(tagName, out major, out minor));
        }
        public VersionPoint Execute(GitVersionContext context, DateTimeOffset olderThan)
        {
            var masterBranch = context.Repository.FindBranch("master");

            foreach (var commit in masterBranch.CommitsPriorToThan(olderThan))
            {
                foreach (var tag in context.Repository.TagsByDate(commit))
                {
                    ShortVersion shortVersion;
                    if (ShortVersionParser.TryParseMajorMinor(tag.Name, out shortVersion))
                    {
                        return(new VersionPoint
                        {
                            Major = shortVersion.Major,
                            Minor = shortVersion.Minor,
                        });
                    }
                }

                ShortVersion shortVersionFromMergeMessage;
                if (MergeMessageParser.TryParse(commit, out shortVersionFromMergeMessage))
                {
                    return(new VersionPoint
                    {
                        Major = shortVersionFromMergeMessage.Major,
                        Minor = shortVersionFromMergeMessage.Minor,
                    });
                }
            }
            return(new VersionPoint
            {
                Major = 0,
                Minor = 1,
            });
        }
        static VersionPoint BuildFrom(Tag stableTag, Commit commit)
        {
            int major;
            int minor;

            var hasParsed = ShortVersionParser.TryParseMajorMinor(stableTag.Name, out major, out minor);

            Debug.Assert(hasParsed);

            return(new VersionPoint
            {
                Major = major,
                Minor = minor,
                CommitSha = commit.Id.Sha,
            });
        }
        public VersionPoint Execute(GitVersionContext context, DateTimeOffset olderThan)
        {
            var masterBranch = context.Repository.FindBranch("master");

            foreach (var commit in masterBranch.CommitsPriorToThan(olderThan))
            {
                foreach (var tag in context.Repository.TagsByDate(commit))
                {
                    int major;
                    int minor;
                    if (ShortVersionParser.TryParseMajorMinor(tag.Name, out major, out minor))
                    {
                        return(new VersionPoint
                        {
                            Major = major,
                            Minor = minor,
                            Timestamp = commit.When(),
                            CommitSha = commit.Sha,
                        });
                    }
                }
                string versionString;
                if (MergeMessageParser.TryParse(commit, out versionString))
                {
                    int major;
                    int minor;
                    if (ShortVersionParser.TryParseMajorMinor(versionString, out major, out minor))
                    {
                        return(new VersionPoint
                        {
                            Major = major,
                            Minor = minor,
                            Timestamp = commit.When(),
                            CommitSha = commit.Sha,
                        });
                    }
                }
            }
            return(new VersionPoint
            {
                Major = 0,
                Minor = 1,
                Timestamp = DateTimeOffset.MinValue,
                CommitSha = null,
            });
        }
        static bool IsStableRelease(string tagName)
        {
            ShortVersion shortVersion;

            return(ShortVersionParser.TryParseMajorMinor(tagName, out shortVersion));
        }