Example #1
0
 public bool IsLessThan(GitVersion other)
 {
     return(this.CompareVersionNumbers(other) < 0);
 }
Example #2
0
        public static bool TryParseInstallerName(string input, string installerExtension, out GitVersion version)
        {
            // Installer name is of the form
            // Git-2.14.1.scalar.1.1.gb16030b-64-bit.exe

            version = null;

            if (!input.StartsWith("Git-", StringComparison.InvariantCultureIgnoreCase))
            {
                return(false);
            }

            if (!input.EndsWith("-64-bit" + installerExtension, StringComparison.InvariantCultureIgnoreCase))
            {
                return(false);
            }

            return(TryParseVersion(input.Substring(4, input.Length - 15), out version));
        }
Example #3
0
        public static bool TryParseVersion(string input, out GitVersion version)
        {
            version = null;

            int    major, minor, build, revision = 0, minorRevision = 0;
            int?   rc       = null;
            string platform = null;

            if (string.IsNullOrWhiteSpace(input))
            {
                return(false);
            }

            string[] parsedComponents = input.Split('.');
            int      numComponents    = parsedComponents.Length;

            // We minimally accept the official Git version number format which
            // consists of three components: "major.minor.build" or "major.minor.build-rc<N>".
            //
            // The other supported formats are the Git for Windows and Microsoft Git
            // formats which look like: "major.minor.build.platform.revision.minorRevision"
            // or "major.minor.build-rc<N>.platform.revision.minorRevision".
            //      0     1     2            3        4        5
            // len  1     2     3            4        5        6
            //
            if (numComponents < 3)
            {
                return(false);
            }

            // Major version
            if (!TryParseComponent(parsedComponents[0], out major))
            {
                return(false);
            }

            // Minor version
            if (!TryParseComponent(parsedComponents[1], out minor))
            {
                return(false);
            }

            // Check if this is a release candidate version and if so split
            // it from the build number.
            string[] buildParts = parsedComponents[2].Split("-rc", StringSplitOptions.RemoveEmptyEntries);
            if (buildParts.Length > 1 && TryParseComponent(buildParts[1], out int rcInt))
            {
                rc = rcInt;
            }

            // Build number
            if (!TryParseComponent(buildParts[0], out build))
            {
                return(false);
            }

            // Take the platform component verbatim
            if (numComponents >= 4)
            {
                platform = parsedComponents[3];
            }

            // Platform revision
            if (numComponents < 5 || !TryParseComponent(parsedComponents[4], out revision))
            {
                revision = 0;
            }

            // Minor platform revision
            if (numComponents < 6 || !TryParseComponent(parsedComponents[5], out minorRevision))
            {
                minorRevision = 0;
            }

            version = new GitVersion(major, minor, build, platform, revision, minorRevision, rc);
            return(true);
        }