Ejemplo n.º 1
0
        /// <summary>
        /// Updates the global.json entries for tools.dotnet and sdk.version if they are older than an incoming version
        /// </summary>
        /// <param name="incomingDotnetVersion">version to compare against</param>
        /// <param name="repoGlobalJson">Global.Json file to update</param>
        /// <returns>Updated global.json file if was able to update, or the unchanged global.json if unable to</returns>
        private GitFile UpdateDotnetVersionGlobalJson(SemanticVersion incomingDotnetVersion, GitFile repoGlobalJson)
        {
            string repoGlobalJsonContent = repoGlobalJson.ContentEncoding == ContentEncoding.Base64 ?
                                           _gitClient.GetDecodedContent(repoGlobalJson.Content) :
                                           repoGlobalJson.Content;

            try
            {
                JObject parsedGlobalJson = JObject.Parse(repoGlobalJsonContent);
                if (SemanticVersion.TryParse(parsedGlobalJson.SelectToken("tools.dotnet").ToString(), out SemanticVersion repoDotnetVersion))
                {
                    if (repoDotnetVersion.CompareTo(incomingDotnetVersion) < 0)
                    {
                        parsedGlobalJson["tools"]["dotnet"] = incomingDotnetVersion.ToNormalizedString();

                        // Also update and keep sdk.version in sync.
                        JToken sdkVersion = parsedGlobalJson.SelectToken("sdk.version");
                        if (sdkVersion != null)
                        {
                            parsedGlobalJson["sdk"]["version"] = incomingDotnetVersion.ToNormalizedString();
                        }
                        return(new GitFile(VersionFiles.GlobalJson, parsedGlobalJson));
                    }
                    return(repoGlobalJson);
                }
                else
                {
                    _logger.LogError("Could not parse the repo's dotnet version from the global.json. Skipping update to dotnet version sections");
                    return(repoGlobalJson);
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Failed to update Dotnet version for global.json. Skipping update to version sections.");
                return(repoGlobalJson);
            }
        }