Exemplo n.º 1
0
        private static PackageSource GetLocalNugetFeed(bool create)
        {
            try
            {
                var settings = Settings.LoadDefaultSettings(null);
                var packageSourceProvider = new PackageSourceProvider(settings);
                var packageSources        = packageSourceProvider.LoadPackageSources();
                var localFeed             = packageSources.FirstOrDefault(x => x.IsLocal &&
                                                                          LocalFeedNames.Contains(x.Name, StringComparer.OrdinalIgnoreCase));

                if (localFeed == null && create)
                {
                    var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
                                            ".nuget", "my-packages");
                    var packageSource = new PackageSource(path, LocalFeedNames.First());
                    packageSourceProvider.AddPackageSource(packageSource);
                    localFeed = packageSource;
                }

                return(localFeed);
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine(ex.Message);
            }

            return(null);
        }
Exemplo n.º 2
0
        public override async Task <int> ExecuteAsync(CommandContext context, ConfigSettings settings)
        {
            AnsiConsole.Markup($"[bold blue]{Icon.Thinking} Synchronizing configuration...[/]");

            var manifest = await ToolInfo.LoadManifest(settings.Manifest, settings.Dev);

            if (!ToolInfo.Validate(manifest))
            {
                ToolInfo.ExitPrompt(settings.NonInteractive);
                return(-1);
            }

            AnsiConsole.MarkupLine(" ok");

            var manifestDotNetSdk    = manifest?.Check?.DotNet?.Sdks?.FirstOrDefault();
            var manifestNuGetSources = manifestDotNetSdk?.PackageSources;

            if (manifestDotNetSdk != null &&
                (settings.DotNetAllowPrerelease.HasValue ||
                 !string.IsNullOrEmpty(settings.DotNetRollForward) ||
                 settings.DotNetVersion))
            {
                // Write global.json or update global.json

                /*
                 *
                 *	{
                 *		"sdk": {
                 *		"version" : "",
                 *		"allowPrerelease": true,
                 *		"rollForward": "patch|feature|minor|major|latestPatch|latestFeature|latestMinor|latestMajor|disable"
                 *		}
                 *	}
                 */

                const string globalJsonFile = "global.json";


                DotNetGlobalJson globaljson = default;

                if (File.Exists(globalJsonFile))
                {
                    try { globaljson = JsonConvert.DeserializeObject <DotNetGlobalJson>(File.ReadAllText(globalJsonFile)); }
                    catch { }
                }

                if (globaljson == null)
                {
                    globaljson = new DotNetGlobalJson();
                }

                if (settings.DotNetVersion)
                {
                    Util.Log($"Setting version in global.json: {manifestDotNetSdk.Version}");
                    globaljson.Sdk.Version = manifestDotNetSdk.Version;
                    AnsiConsole.MarkupLine($"[green]{Icon.Success} Set global.json 'version': {manifestDotNetSdk.Version}[/]");
                }

                if (settings?.DotNetAllowPrerelease.HasValue ?? false)
                {
                    Util.Log($"Setting allowPrerelease in global.json: {settings.DotNetAllowPrerelease.Value}");
                    globaljson.Sdk.AllowPrerelease = settings.DotNetAllowPrerelease.Value;
                    AnsiConsole.MarkupLine($"[green]{Icon.Success} Set global.json 'allowPrerelease': {settings.DotNetAllowPrerelease.Value}[/]");
                }

                if (!string.IsNullOrEmpty(settings.DotNetRollForward))
                {
                    if (!DotNetGlobalJsonSdk.ValidRollForwardValues.Contains(settings.DotNetRollForward))
                    {
                        throw new ArgumentException("Invalid rollForward value specified.  Must be one of: ", string.Join(", ", DotNetGlobalJsonSdk.ValidRollForwardValues));
                    }

                    Util.Log($"Setting rollForward in global.json: {settings.DotNetRollForward}");
                    globaljson.Sdk.RollForward = settings.DotNetRollForward;
                    AnsiConsole.MarkupLine($"[green]{Icon.Success} Set global.json 'rollForward': {settings.DotNetRollForward}[/]");
                }

                File.WriteAllText(globalJsonFile, JsonConvert.SerializeObject(globaljson, Formatting.Indented));
            }

            if ((manifestNuGetSources?.Any() ?? false) && settings.NuGetSources)
            {
                // write nuget.config or update
                var nugetConfigFile = "NuGet.config";
                var nugetRoot       = Directory.GetCurrentDirectory();

                ISettings ns = new Settings(nugetRoot, nugetConfigFile);

                if (File.Exists(Path.Combine(nugetRoot, nugetConfigFile)))
                {
                    try
                    {
                        ns = Settings.LoadSpecificSettings(nugetRoot, nugetConfigFile);
                    }
                    catch { }
                }

                var packageSourceProvider = new PackageSourceProvider(ns);

                var addedAny = false;

                foreach (var src in manifestNuGetSources)
                {
                    var srcExists = false;
                    try
                    {
                        var existingSrc = packageSourceProvider.GetPackageSourceBySource(src);

                        if (existingSrc != null)
                        {
                            srcExists = true;
                        }
                    }
                    catch { }

                    if (srcExists)
                    {
                        Util.Log($"PackageSource already exists in NuGet.config: {src}");
                        AnsiConsole.MarkupLine($"{Icon.ListItem} PackageSource exists in NuGet.config: {src}");
                    }
                    else
                    {
                        Util.Log($"Adding PackageSource to NuGet.config: {src}");
                        packageSourceProvider.AddPackageSource(new PackageSource(src));
                        addedAny = true;

                        AnsiConsole.MarkupLine($"[green]{Icon.Success} Added PackageSource to NuGet.config: {src}[/]");
                    }
                }

                if (addedAny)
                {
                    Util.Log($"Saving NuGet.config");
                    ns.SaveToDisk();
                }
            }

            ToolInfo.ExitPrompt(settings.NonInteractive);
            return(0);
        }