Example #1
0
        private static string[] GetSiteLibraryDirs(InstalledPackageInfo package, IEnumerable <string> files, IFileSystem fs)
        {
            List <string> dirs = new List <string>();

            if (package.PackageName.ContainsIgnoreCase("r-base-core"))
            {
                string localSiteLibrary = "/usr/local/r/site-library";
                if (fs.DirectoryExists(localSiteLibrary))
                {
                    dirs.Add(localSiteLibrary);
                }

                string siteLibrary = GetPath(files, "/R/site-library", "", fs);
                if (!string.IsNullOrWhiteSpace(siteLibrary))
                {
                    dirs.Add(siteLibrary);
                }
            }

            string library = GetPath(files, "/R/library/base", "/base", fs);

            if (!string.IsNullOrWhiteSpace(library))
            {
                dirs.Add(library);
            }

            return(dirs.ToArray());
        }
Example #2
0
        public void ReadInstalledPackagesTest()
        {
            var fs       = new TestFileSystem();
            var packages = InstalledPackageInfo.GetPackages(fs);

            packages.Count().Should().Be(2183); // number of installed packages in the status file

            // Test for MRO
            var mro = packages.Where(p => p.PackageName.StartsWithOrdinal("microsoft-r-open-mro"));

            mro.Count().Should().Be(1);
            var mroFiles = mro.First().GetPackageFiles(fs);

            mroFiles.Count().Should().BeGreaterThan(0);
            var mroLib = mroFiles.Where(f => f.EndsWithOrdinal("/libR.so"));

            mroLib.Count().Should().BeGreaterThan(0);

            //Test for CRAN R
            var cranR = packages.Where(p => p.PackageName.EqualsOrdinal("r-base-core"));

            cranR.Count().Should().Be(1);
            var cranRFiles = mro.First().GetPackageFiles(fs);

            cranRFiles.Count().Should().BeGreaterThan(0);
            var cranRLib = mroFiles.Where(f => f.EndsWithOrdinal("/libR.so"));

            cranRLib.Count().Should().BeGreaterThan(0);
        }
        public override IRInterpreterInfo CreateInfo(string name, string path)
        {
            var packagesInfo = InstalledPackageInfo.GetPackages(_fileSystem);
            var libRsoPath   = Path.Combine(path, "lib/libR.so").Replace('\\', '/');

            // In linux there is no direct way to get version from binary. So, try and find a package that
            // has this file in the package files list.
            InstalledPackageInfo package = null;

            foreach (var pkg in packagesInfo)
            {
                var files = pkg.GetPackageFiles(_fileSystem);
                if (files.Contains(libRsoPath))
                {
                    package = pkg;
                    break;
                }
            }

            if (package != null)
            {
                return(new RLinuxInterpreterInfo(name, package, package.Version, package.GetVersion(), _fileSystem));
            }
            return(null);
        }
Example #4
0
        public LocalDocker GetLocalDocker()
        {
            const string dockerPath = "/usr/bin/docker";
            var          packages   = InstalledPackageInfo.GetPackages(_fs);
            var          dockerPkgs = packages
                                      .Where(pkg => pkg.PackageName.EqualsIgnoreCase(DockerCePackageName) || pkg.PackageName.EqualsIgnoreCase(DockerEePackageName))
                                      .ToList();

            if (dockerPkgs.Any())
            {
                var pkg   = dockerPkgs.First();
                var files = pkg.GetPackageFiles(_fs).Where(f => f.Equals(dockerPath));
                if (files.Any())
                {
                    var docker = new LocalDocker(Path.GetDirectoryName(dockerPath), dockerPath);
                    if (!_fs.FileExists(docker.DockerCommandPath))
                    {
                        throw new ContainerServiceNotInstalledException(Resources.Error_NoDockerCommand.FormatInvariant(docker.DockerCommandPath));
                    }

                    return(docker);
                }
            }

            throw new ContainerServiceNotInstalledException(Resources.Error_DockerNotFound.FormatInvariant(DockerCePackageName, DockerEePackageName));
        }
        public override IEnumerable <IRInterpreterInfo> GetCompatibleEngines()
        {
            var packagesInfo = InstalledPackageInfo.GetPackages(_fileSystem);
            var interpreters = new List <IRInterpreterInfo>();

            interpreters.AddRange(GetInstalledMRO(packagesInfo));
            interpreters.AddRange(GetInstalledCranR(packagesInfo));
            return(interpreters);
        }
Example #6
0
        public IEnumerable <IRInterpreterInfo> GetCompatibleEngines(ISupportedRVersionRange svl = null)
        {
            var packagesInfo = InstalledPackageInfo.GetPackages(_fileSystem);
            var interpreters = new List <IRInterpreterInfo>();

            interpreters.AddRange(GetInstalledMRO(packagesInfo, svl));
            interpreters.AddRange(GetInstalledCranR(packagesInfo, svl));
            return(interpreters);
        }
Example #7
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Name of the R interpreter</param>
        /// <param name="corePackage">Instance of the core interpreter package
        /// (r-base-core, microsoft-r-open-mro, etc)</param>
        /// <param name="fileSystem"></param>
        public RLinuxInterpreterInfo(string name, InstalledPackageInfo corePackage, string version, Version parsedVersion, IFileSystem fileSystem) :
            base(name, parsedVersion, fileSystem)
        {
            var files = corePackage.GetPackageFiles(fileSystem);

            InstallPath         = GetRInstallPath(files, fileSystem);
            _packageFullVersion = version;

            BinPath         = GetRLibPath();
            DocPath         = GetRDocPath(files, fileSystem);
            IncludePath     = GetIncludePath(files, fileSystem);
            RShareDir       = GetRSharePath(files, fileSystem);
            SiteLibraryDirs = GetSiteLibraryDirs(corePackage, files, fileSystem);
        }
Example #8
0
 public static RInterpreterInfo CreateFromPackage(InstalledPackageInfo package, string namePrefix, IFileSystem fs)
 {
     return(new RInterpreterInfo($"{namePrefix} '{package.Version}'", package, package.Version, package.GetVersion(), fs));
 }