Exemplo n.º 1
0
        public async Task <UpdateNeeded> IsUpdateNeededAsync(string packageName, bool includePreRelease)
        {
            SemanticVersion largestAvailableVersion;

            try
            {
                using (var downloader = new NugetDownloader(commandDirectory))
                {
                    var versionFound = await downloader.GetLatestVersionAsync(packageName, includePreRelease);

                    if (versionFound == null)
                    {
                        WriteLineIfVerbose($"Could not find '{packageName}'.");
                        return(UpdateNeeded.PackageNotFound);
                    }
                    largestAvailableVersion = SemanticVersion.Parse(versionFound);
                }
            }
            catch (Exception ex)
            {
                WriteLine("Could not download Nuget.");
                WriteLineIfVerbose(ex.ToString());
                return(UpdateNeeded.No);
            }
            var directory               = commandDirectory.GetDirectoryForPackage(packageName);
            var packageDirs             = Directory.EnumerateDirectories(directory);
            var packageVersions         = packageDirs.Select(packageDir => SemanticVersion.Parse(Path.GetFileName(packageDir)));
            var largestInstalledVersion = packageVersions.Max();

            return(largestInstalledVersion >= largestAvailableVersion ? UpdateNeeded.No : UpdateNeeded.Yes);
        }
Exemplo n.º 2
0
        private async Task <bool> DeleteRedirectFileAsync(string packageName)
        {
            var packageDir = commandDirectory.GetDirectoryForPackage(packageName);

            if (!Directory.Exists(packageDir))
            {
                WriteLine($"Package {packageName} is not installed.");
                return(false);
            }
            var packageDirs = Directory.EnumerateDirectories(packageDir);

            foreach (var packageAndVersionDir in packageDirs)
            {
                var packageInfo = await PackageInfo.GetMainFilePathAsync(packageName, packageAndVersionDir);

                if (packageInfo == null || !packageInfo.Commands.Any())
                {
                    return(true);
                }
                foreach (var command in packageInfo.Commands)
                {
                    var binFile = commandDirectory.GetBinFile(command.Name + (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ".cmd" : ""));
                    try
                    {
                        if (File.Exists(binFile))
                        {
                            WriteLineIfVerbose($"Deleting bin file '{binFile}'.");
                            File.Delete(binFile);
                        }
                        else
                        {
                            WriteLineIfVerbose($"Bin file '{binFile}' does not exist.");
                        }
                    }
                    catch (Exception ex)
                    {
                        WriteLine($"Could not delete bin file '{binFile}'.");
                        WriteLineIfVerbose(ex.ToString());
                        return(false);
                    }
                }
            }
            return(true);
        }
Exemplo n.º 3
0
        public async Task <bool> InstallAsync(string packageName, SemanticVersion packageVersion, bool force, bool includePreRelease)
        {
            WriteLineIfVerbose($"Installing {packageName}...");
            PackageInfo packageInfo;

            try
            {
                using (var downloader = new NugetDownloader(commandDirectory))
                {
                    packageInfo = await downloader.DownloadAndExtractNugetAsync(packageName, packageVersion, force, includePreRelease);

                    if (packageInfo == null)
                    {
                        return(false);
                    }
                }
            }
            catch (Exception ex)
            {
                WriteLineIfVerbose("Could not download Nuget.");
                WriteLineIfVerbose(ex.ToString());
                return(false);
            }
            var created = CreateBinFile(packageInfo);

            if (!created)
            {
                if (Directory.Exists(packageInfo.PackageDir))
                {
                    WriteLineIfVerbose($"Deleting {packageInfo}...");
                    Directory.Delete(packageInfo.PackageDir, true);
                    var packageDirectoryForAllVersions = commandDirectory.GetDirectoryForPackage(packageName);
                    if (Directory.EnumerateDirectories(packageDirectoryForAllVersions).Count() <= 1)
                    {
                        Directory.Delete(packageDirectoryForAllVersions, true);
                    }
                }
                return(false);
            }
            var added = CreateRuntimeConfigDevJsonFile(packageInfo.PackageDir);

            if (!added)
            {
                return(false);
            }
            var restored = await RestoreAsync(packageInfo.PackageDir);

            return(restored);
        }
Exemplo n.º 4
0
        public async Task <bool> ListAsync()
        {
            var sb = new StringBuilder();

            try
            {
                var packageDirectories = Directory.EnumerateDirectories(commandDirectory.PackagesDir).OrderBy(d => d);
                foreach (var pkgDir in packageDirectories)
                {
                    var packageDirectory = pkgDir;
                    if (!packageDirectory.EndsWith(Path.DirectorySeparatorChar.ToString()))
                    {
                        packageDirectory += Path.DirectorySeparatorChar.ToString();
                    }
                    var packageName        = Path.GetFileName(Path.GetDirectoryName(packageDirectory));
                    var versionDirectories = Directory.EnumerateDirectories(packageDirectory).OrderBy(d => d);
                    foreach (var verDir in versionDirectories)
                    {
                        var versionDirectory = verDir;
                        if (!versionDirectory.EndsWith(Path.DirectorySeparatorChar.ToString()))
                        {
                            versionDirectory += Path.DirectorySeparatorChar.ToString();
                        }
                        var packageVersion = Path.GetFileName(Path.GetDirectoryName(versionDirectory));
                        sb.AppendLine($"{packageName} ({packageVersion})");
                    }

                    var packageDirs = Directory.EnumerateDirectories(commandDirectory.GetDirectoryForPackage(packageName)).OrderBy(d => d);
                    foreach (var packageDir in packageDirs)
                    {
                        var packageInfo = await PackageInfo.GetMainFilePathAsync(packageName, packageDir);

                        if (packageInfo == null || !packageInfo.Commands.Any())
                        {
                            continue;
                        }
                        foreach (var command in packageInfo.Commands)
                        {
                            if (command.Name == packageName)
                            {
                                continue;
                            }
                            if (IsVerbose)
                            {
                                sb.AppendLine($"  {command.Name} ({command.ExecutableFilePath})");
                            }
                            else
                            {
                                sb.AppendLine($"  {command.Name}");
                            }
                        }
                    }
                }
                var packagesInfo = sb.ToString();
                WriteLine(packagesInfo);
                return(true);
            }
            catch (Exception ex)
            {
                WriteLineIfVerbose($"Error getting package info: '{ex.Message}'.");
                return(false);
            }
        }