Inheritance: IPackageRepository
        public void AnalyzerInstaller_InstallMultiplePackages_Succeeds()
        {
            // Arrange

            // Create dummy NuGet package containing multiple assemblies
            string fakeRemotePackageSource = TestUtils.CreateTestSpecificFolder(this.TestContext, "fakeNuGetSource");
            LocalPackageRepository fakeRemoteRepo = new LocalPackageRepository(fakeRemotePackageSource);
            
            CreateAndInstallPackageWithDummyContent(fakeRemoteRepo, "package1", "1.0-rc1", "package1.dll");
            CreateAndInstallPackageWithDummyContent(fakeRemoteRepo, "package2", "22.2", "package2.dll");

            IEnumerable<NuGetPackageInfo> packages = new NuGetPackageInfo[] {
                new NuGetPackageInfo() { Id = "package1", Version = "1.0-rc1" },
                new NuGetPackageInfo() { Id = "package2", Version = "22.2" }
            };

            string localCacheDir = TestUtils.CreateTestSpecificFolder(this.TestContext, "localInstallCache");
            AnalyzerInstaller testSubject = new AnalyzerInstaller(fakeRemotePackageSource, localCacheDir, new TestLogger());

            // Act
            IEnumerable<string> assemblyPaths = testSubject.InstallAssemblies(packages);

            // Assert
            AssertExpectedAssembliesReturned(assemblyPaths,
                "package1.dll",
                "package2.dll");
        }
        public void AnalyzerInstaller_InstallMultiFilePackage_Succeeds()
        {
            // Arrange

            // Create dummy NuGet package containing multiple assemblies
            string fakeRemotePackageSource = TestUtils.CreateTestSpecificFolder(this.TestContext, "fakeNuGetSource");
            LocalPackageRepository fakeRemoteRepo = new LocalPackageRepository(fakeRemotePackageSource);

            PackageBuilder builder = CreatePackageBuilder("simplepackage1", "1.0.0");
            AddDummyFile(builder, "test.txt"); // not an assembly
            AddDummyFile(builder, "\\analyzer\\bbb.dll.xxx"); // not an assembly
            AddDummyFile(builder, "\\analyzer\\aaa.dll");
            AddDummyFile(builder, "\\supporting\\bbb.DLL");

            CreateAndInstallPackage(fakeRemoteRepo, builder);

            IEnumerable<NuGetPackageInfo> packages = new NuGetPackageInfo[] {
                new NuGetPackageInfo() { Id = "simplepackage1", Version = "1.0.0" }
            };

            string localCacheDir = TestUtils.CreateTestSpecificFolder(this.TestContext, "localInstallCache");
            AnalyzerInstaller testSubject = new AnalyzerInstaller(fakeRemotePackageSource, localCacheDir, new TestLogger());

            // Act
            IEnumerable<string> assemblyPaths = testSubject.InstallAssemblies(packages);

            // Assert
            AssertExpectedAssembliesReturned(assemblyPaths,
                "\\analyzer\\aaa.dll",
                "\\supporting\\bbb.dll");
        }
示例#3
0
        public static async Task<string> Install(this IPackage package, string source, string dest)
        {
            IPackageRepository packageRepository = new LocalPackageRepository(source);
            IPackageManager packageManager = new PackageManager(packageRepository, dest);

            var tcs = new TaskCompletionSource<string>();

            var handler = new EventHandler<PackageOperationEventArgs>((sender, args) => tcs.SetResult(args.InstallPath));

            packageManager.PackageInstalled += handler;

            packageManager.InstallPackage(package, true, true);

            packageManager.PackageInstalled -= handler;

            if (await Task.WhenAny(tcs.Task, Task.Delay(5000)) == tcs.Task)
            {
                await tcs.Task;
                return tcs.Task.Result;
            }
            else
            {
                throw new TimeoutException("Package install timeout");
            }    
        }
示例#4
0
        public IEnumerable<string> CreatePackageFile()
        {
            var packagesFile = Path.Combine(_fileSystem.CurrentDirectory, Constants.PackagesFile);
            var packageReferenceFile = new PackageReferenceFile(packagesFile);

            var packagesFolder = Path.Combine(_fileSystem.CurrentDirectory, Constants.PackagesFolder);
            var repository = new LocalPackageRepository(packagesFolder);

            var newestPackages = repository.GetPackages().GroupBy(p => p.Id)
                .Select(g => g.OrderByDescending(p => p.Version).FirstOrDefault());

            foreach (var package in newestPackages)
            {
                var newestFramework = GetNewestSupportedFramework(package);
                packageReferenceFile.AddEntry(package.Id, package.Version, newestFramework);

                if (newestFramework == null)
                {
                    yield return string.Format("{0}, Version {1}", package.Id, package.Version);
                }
                else
                {
                    yield return string.Format("{0}, Version {1}, .NET {2}", package.Id, package.Version, newestFramework.Version);
                }
            }
        }
示例#5
0
        public ReferenceAttacher(Solution solution)
        {
            _solution = solution;
            _repository = new LocalPackageRepository(_solution.PackagesFolder());

            _packages = new Cache<string, IPackage>(name => _repository.FindPackage(name));
        }
示例#6
0
        internal static Target ProcessDependencies(string solutionName, PackageSpec project)
        {
            List <string> packageCollection = new List <string>();

            Target projectTarget = new Target();

            projectTarget.project  = solutionName;
            projectTarget.moduleId = $"netframework:{project.Name}";
            projectTarget.module   = project.Name;
            projectTarget.release  = project.Version.ToFullString();

            projectTarget.dependencies = new List <Dependency>();

            // Generate lock file
            var lockFileService = new LockFileService();
            var lockFile        = lockFileService.GetLockFile(project.FilePath, project.RestoreMetadata.OutputPath);

            foreach (var targetFramework in project.TargetFrameworks)
            {
                var lockFileTargetFramework = lockFile.Targets.FirstOrDefault(t => t.TargetFramework.Equals(targetFramework.FrameworkName));
                ReportDependency(projectTarget.dependencies, targetFramework, false, packageCollection, lockFileTargetFramework);
            }

            var packageRepository          = new NuGet.LocalPackageRepository($@"{project.BaseDirectory}\packages");
            IQueryable <IPackage> packages = packageRepository.GetPackages();

            foreach (IPackage package in packages)
            {
                ReportDependencyPackage(projectTarget.dependencies, package, true, packageCollection);
            }

            return(projectTarget);
        }
示例#7
0
        public ReferenceAttacher(Solution solution)
        {
            _solution = solution;
            _repository = new LocalPackageRepository(_solution.PackagesFolder());

            _packages = new Cache<string, IPackage>(name => _repository.FindPackage(name));
            _toolsVersionMatch["4.0"] = "net40";
        }
示例#8
0
 public NuGetPackageFolder(
     string physicalPath,
     Reports reports)
 {
     _repository = new LocalPackageRepository(physicalPath, reports.Quiet);
     _reports = reports;
     Source = physicalPath;
 }
示例#9
0
 public PackageFolder(
     string physicalPath,
     IReport report)
 {
     _repository = new LocalPackageRepository(physicalPath)
     {
         Report = report
     };
     _report = report;
 }
示例#10
0
        public IPackageObject FindPackage(string path, IPackageReference packageRef)
        {
            var repository = new LocalPackageRepository(path);

            var package = packageRef.Version != null
                ? repository.FindPackage(packageRef.PackageId, new SemanticVersion(packageRef.Version, packageRef.SpecialVersion), true, true)
                : repository.FindPackage(packageRef.PackageId);

            return package == null ? null : new PackageObject(package, packageRef.FrameworkName);
        }
示例#11
0
		public void GenerateGraph_with_assemblies_should_include_all_packages()
		{
			var repo = new LocalPackageRepository(@"..\..\..\packages");
			var g = new GraphGenerator(repo) { IncludeAssemblyReferences = true };
			using (var s = File.OpenWrite("nuget.dgml"))
			{
				g.WriteGraph(s);
				s.Flush();
			}
		}
示例#12
0
		public void GenerateGraph_should_include_all_packages()
		{
			var repo = new LocalPackageRepository(@"..\..\..\packages");
			var g = new GraphGenerator(repo);
			using (var s = File.OpenWrite("nuget.dgml"))
			{
				g.WriteGraph(s);
				s.Flush();
			}
		}
		public static bool IsPackageInstalled (this PackageReference packageReference, PhysicalFileSystem fileSystem)
		{
			if (packageReference.Version == null) {
				return false;
			}

			var repository = new LocalPackageRepository (new DefaultPackagePathResolver (fileSystem), fileSystem);
			return repository
				.GetPackageLookupPaths (packageReference.Id, packageReference.Version)
				.Any ();
		}
示例#14
0
        public IPackageObject FindPackage(string path, IPackageReference packageRef)
        {
            Guard.AgainstNullArgument("packageRef", packageRef);

            var repository = new LocalPackageRepository(path);

            var package = packageRef.Version != null && !(packageRef.Version.Major == 0 && packageRef.Version.Minor == 0)
                ? repository.FindPackage(packageRef.PackageId, new SemanticVersion(packageRef.Version, packageRef.SpecialVersion), true, true)
                : repository.FindPackage(packageRef.PackageId);

            return package == null ? null : new PackageObject(package, packageRef.FrameworkName);
        }
 public WebProjectManager(string remoteSource, string siteRoot)
 {
     string webRepositoryDirectory = GetWebRepositoryDirectory(siteRoot);
     Uri uri = new Uri(remoteSource);
     IPackageRepository repository = new DataServicePackageRepository(uri);//PackageRepositoryFactory.Default.CreateRepository(remoteSource);
     IPackagePathResolver resolver = new DefaultPackagePathResolver(webRepositoryDirectory);
     IPackageRepository repository2 = new LocalPackageRepository(webRepositoryDirectory, false); //PackageRepositoryFactory.Default.CreateRepository(webRepositoryDirectory);
     IProjectSystem system = new WebProjectSystem(siteRoot);
     ((DataServicePackageRepository)repository).ProgressAvailable += new EventHandler<ProgressEventArgs>(repository_ProgressAvailable);
     //((DataServicePackageRepository)repository).SendingRequest += new EventHandler<WebRequestEventArgs>(repository_sendingRequest);
     this._projectManager = new ProjectManager(repository, resolver, system, repository2);
     _projectManager.Logger = new LoggerController();
 }
示例#16
0
 public static void InstallPackage(this IVsPackageInstaller packageInstaller, Project project, string packageName, IVsPackageInstallerServices packageInstallerServices, string version = null)
 {
     if (version == null)
     {
         version = new V2FeedContext(new Uri("http://www.nuget.org/api/v2/")).Execute<V2FeedPackage>(new Uri("http://www.nuget.org/api/v2/Packages?$filter=IsAbsoluteLatestVersion and Id eq '" + packageName + "'&$skip=0&$top=1&$select=Id,Version&targetFramework=&includePrerelease=true")).Single().Version;
     }
     packageInstaller.InstallPackage("http://packages.nuget.org", project, packageName, version, false);
     //workaround to the bug on Package installer that does not install package depencences
     var dependencies = new LocalPackageRepository(packageInstallerServices.GetPackageLocation(packageName)).FindPackage(packageName).DependencySets.SelectMany(ds => ds.Dependencies);
     foreach (var dependency in dependencies)
     {
         InstallPackage(packageInstaller, project, dependency.Id, packageInstallerServices, dependency.VersionSpec.ToString());
     }
 }
示例#17
0
        public IEnumerable<string> CreatePackageFile()
        {
            var packageReferenceFile = new PackageReferenceFile(Path.Combine(_fileSystem.CurrentDirectory, Constants.PackagesFile));
            var repository = new LocalPackageRepository(Path.Combine(_fileSystem.CurrentDirectory, Constants.PackagesFolder));
            var arbitraryPackages = repository.GetPackages();
            var result = new List<string>();

            foreach (var package in arbitraryPackages.GroupBy(i => i.Id))
            {
                var p = package.OrderByDescending(i => i.Version).FirstOrDefault();
                packageReferenceFile.AddEntry(p.Id, p.Version, VersionUtility.ParseFrameworkName("net45"));
                result.Add(string.Format("{0}, Version {1}, .NET 4.5", p.Id, p.Version));
            }

            return result;
        }
示例#18
0
        public void CreatePackageFile()
        {
            var packagesFile = Path.Combine(_fileSystem.CurrentDirectory, _fileSystem.PackagesFile);
            var packageReferenceFile = new PackageReferenceFile(packagesFile);

            var packagesFolder = Path.Combine(_fileSystem.CurrentDirectory, _fileSystem.PackagesFolder);
            var repository = new LocalPackageRepository(packagesFolder);

            var newestPackages = repository.GetPackages().GroupBy(p => p.Id)
                .Select(g => g.OrderByDescending(p => p.Version).FirstOrDefault());

            if (!newestPackages.Any())
            {
                _logger.Info("No packages found!");
                return;
            }

            _logger.InfoFormat("{0} {1}...", (File.Exists(packagesFile) ? "Updating" : "Creating"), _fileSystem.PackagesFile);

            foreach (var package in newestPackages)
            {
                var newestFramework = GetNewestSupportedFramework(package);

                if (!packageReferenceFile.EntryExists(package.Id, package.Version))
                {
                    packageReferenceFile.AddEntry(package.Id, package.Version, package.DevelopmentDependency, newestFramework);

                    if (newestFramework == null)
                    {
                        _logger.InfoFormat("Added {0} (v{1}) to {2}", package.Id, package.Version, _fileSystem.PackagesFile);
                    }
                    else
                    {
                        _logger.InfoFormat("Added {0} (v{1}, .NET {2}) to {3}", package.Id, package.Version, newestFramework.Version, _fileSystem.PackagesFile);
                    }

                    continue;
                }

                _logger.InfoFormat("Skipped {0} because it already exists.", package.Id);
            }

            _logger.InfoFormat("Successfully {0} {1}.", (File.Exists(packagesFile) ? "updated" : "created"), _fileSystem.PackagesFile);
        }
示例#19
0
        public void CreatePackageFile()
        {
            var packagesFile = Path.Combine(_fileSystem.CurrentDirectory, _fileSystem.PackagesFile);
            var packagesFolder = Path.Combine(_fileSystem.CurrentDirectory, _fileSystem.PackagesFolder);
            var repository = new LocalPackageRepository(packagesFolder);
            var packages = repository.GetPackages().OrderByDescending(x => x.Version);

            var configFile = new JObject();
            var dependencyObject = new JObject();
            configFile.Add("dependencies", dependencyObject);

            foreach (var package in packages)
            {
                if (dependencyObject[package.Id] == null)
                    dependencyObject.Add(new JProperty(package.Id, package.Version.ToString()));
            }

            File.WriteAllText(packagesFile, configFile.ToString());
        }
示例#20
0
        public ReferenceAttacher(Solution solution)
        {
            _solution = solution;
            _repository = new LocalPackageRepository(_solution.PackagesDirectory());

            _packages = new Cache<string, IPackage>(name =>
            {
                try
                {
                    return _repository.FindPackage(name);
                }
                catch (Exception)
                {
                    return null;
                }
            });

            _toolsVersionMatch["4.0"] = "net40";
        }
示例#21
0
        public bool ExecuteCommand()
        {
            var sw = new Stopwatch();
            sw.Start();

            var restoreDirectory = RestoreDirectory ?? Directory.GetCurrentDirectory();

            var projectJsonFiles = Directory.GetFiles(restoreDirectory, "project.json", SearchOption.AllDirectories);

            var rootDirectory = ProjectResolver.ResolveRootDirectory(restoreDirectory);
            ReadSettings(rootDirectory);

            string packagesDirectory = PackageFolder;

            if (string.IsNullOrEmpty(PackageFolder))
            {
                packagesDirectory = NuGetDependencyResolver.ResolveRepositoryPath(rootDirectory);
            }

            var packagesFolderFileSystem = CreateFileSystem(packagesDirectory);
            var pathResolver = new DefaultPackagePathResolver(packagesFolderFileSystem, useSideBySidePaths: true);
            var localRepository = new LocalPackageRepository(pathResolver, packagesFolderFileSystem);

            int restoreCount = 0;
            int successCount = 0;
            foreach (var projectJsonPath in projectJsonFiles)
            {
                restoreCount += 1;
                var success = RestoreForProject(localRepository, projectJsonPath, rootDirectory, packagesDirectory).Result;
                if (success)
                {
                    successCount += 1;
                }
            }

            if (restoreCount > 1)
            {
                Reports.Information.WriteLine(string.Format("Total time {0}ms", sw.ElapsedMilliseconds));
            }

            return restoreCount == successCount;
        }
示例#22
0
        internal static Target ProcessDependencies(string solutionName, PackageSpec project, string projectPath)
        {
            HashSet <string> packageCollection = new HashSet <string>();

            Target projectTarget = new Target();

            projectTarget.project  = solutionName;
            projectTarget.moduleId = $"vs:{project.Name}";
            projectTarget.module   = project.Name;
            projectTarget.release  = project.Version.ToFullString();

            projectTarget.dependencies = new List <Dependency>();

            foreach (var targetFramework in project.TargetFrameworks)
            {
                Dependency targetDependency = new Dependency();
                projectTarget.dependencies.Add(targetDependency);

                var frameworkName = targetFramework.FrameworkName.ToString();
                packageCollection.Add(frameworkName);

                targetDependency.name = frameworkName;
                targetDependency.key  = $"netframework:{frameworkName}";
            }

            var directoryInfo = VisualStudioProvider.TryGetPackagesDirectoryInfo(project.BaseDirectory);

            if (directoryInfo == null)
            {
                directoryInfo = VisualStudioProvider.TryGetPackagesDirectoryInfo(projectPath);
            }

            var packageRepository          = new NuGet.LocalPackageRepository($@"{directoryInfo.FullName}\packages");
            IQueryable <IPackage> packages = packageRepository.GetPackages();

            foreach (IPackage package in packages)
            {
                ReportDependencyPackage(packageRepository, projectTarget.dependencies, package, packageCollection);
            }

            return(projectTarget);
        }
示例#23
0
        //download the specified version of the package and update project reference to it. The newly downloaded package
        //will be located in /packages folder. The updated project reference can be checked in corresponding .csproj file.
        public bool Execute(string packageid, string projectFile, SemanticVersion version, string packages)
        {
            try
            {
                System.Console.WriteLine("-------------------------------------");
                System.Console.WriteLine("Project File " + projectFile);
                System.Console.WriteLine("Package "+packageid);
                System.Console.WriteLine("Version "+version);

                IPackageRepository repo = PackageRepositoryFactory.Default.CreateRepository("https://packages.nuget.org/api/v2");
                var packagePathResolver = new DefaultPackagePathResolver(packages);
                var packagesFolderFileSystem = new PhysicalFileSystem(packages);
                var projectSystem = new MSBuildProjectSystem(projectFile);
                var localRepository = new LocalPackageRepository(packagePathResolver, packagesFolderFileSystem);
                var projectManager = new ProjectManager(repo, packagePathResolver, projectSystem, localRepository);

                projectManager.RemovePackageReference(packageid,true,false);
                projectManager.AddPackageReference(packageid, version, true, false);
                projectSystem.Save();

                string filename = packageid + "." + version;
                string[] s = Directory.GetFiles(packages+ @"\"+filename);
                if (s.IsEmpty()) { System.Console.WriteLine("empty"); }
                else
                {
                    var nupkgFile = new PhysicalFileSystem(s[0]);
                    ZipPackage z = new ZipPackage(s[0]);
                    z.ExtractContents(nupkgFile, packages + @"\" + filename);
                }
                System.Console.WriteLine("Successfully updated");
                return true;
            }
            catch (Exception e)
            {
                System.Console.Write("failure");
                System.Console.Write(e.StackTrace);
                return false;
            }
        }
示例#24
0
        public void RunFromGallery()
        {
            Directory.CreateDirectory(_targetDirectory);

            var client = new HttpClient(DeveloperFeed);
            client.SendingRequest += (sender, e) =>
            {
                e.Request.Credentials = _credentials;
                e.Request.PreAuthenticate = true;
            };
            var remoteRepo = new DataServicePackageRepository(client);
            var targetRepo = new LocalPackageRepository(_targetDirectory);
            var packages = remoteRepo.GetPackages()
                                     .Where(p => p.IsAbsoluteLatestVersion)
                                     .ToList();
            Parallel.ForEach(packages,
                             new ParallelOptions { MaxDegreeOfParallelism = 4 },
                             package =>
                             {
                                 // Some packages are updated without revving the version. We'll only opt not to re-download
                                 // a package if an identical version does not exist on disk.
                                 var existingPackage = targetRepo.FindPackage(package.Id, package.Version);
                                 var dataServicePackage = (DataServicePackage)package;
                                 if (existingPackage == null ||
                                     !existingPackage.GetHash(dataServicePackage.PackageHashAlgorithm).Equals(dataServicePackage.PackageHash, StringComparison.Ordinal))
                                 {
                                     Trace.WriteLine(string.Format("{0}: Adding package {1}", DateTime.Now, package.GetFullName()));
                                     var packagePath = GetPackagePath(package);

                                     using (var input = package.GetStream())
                                     using (var output = File.Create(packagePath))
                                     {
                                         input.CopyTo(output);
                                     }

                                     PurgeOldVersions(targetRepo, package);
                                 }
                             });
        }
示例#25
0
        public Form1()
        {
            InitializeComponent();

            
            var kerbalPath = ConfigurationManager.AppSettings.Get("kerbalInstallPath");
            var serverUrl = ConfigurationManager.AppSettings.Get("kerbalModServer");
            txtKerbalPath.Text = kerbalPath;

           // var modCacheDirectory = kerbalPath + @"\ModCache";
            var modCacheDirectory =  @"ModCache";

            Directory.SetCurrentDirectory(kerbalPath);

            _PackageRepository = PackageRepositoryFactory.Default.CreateRepository(serverUrl);
           
            var localPackageRepository = new LocalPackageRepository(modCacheDirectory);
            
            var project = new KerbalProjectSystem("");
            _ProjectManager = new ProjectManager(_PackageRepository,
                new DefaultPackagePathResolver(serverUrl),
                project,
                localPackageRepository);

            _PackageManager = new PackageManager(_PackageRepository, new DefaultPackagePathResolver(serverUrl), project, localPackageRepository);

            if (!Directory.Exists(modCacheDirectory))
            {
                Directory.CreateDirectory(modCacheDirectory);
            }
            
            lstAvailableMods.DisplayMember = "Description";
            lstAvailableMods.ValueMember = "Id";

            lstInstalledMods.DisplayMember = "Description";
            lstInstalledMods.ValueMember = "Id";
            RefreshModLists();
        }
示例#26
0
        public IEnumerable<IPackageReference> FindReferences(string path)
        {
            var packageReferenceFile = new PackageReferenceFile(path);
            var references = packageReferenceFile.GetPackageReferences();

            if (!references.Any())
            {
                var packagesFolder = Path.Combine(_fileSystem.GetWorkingDirectory(path), Constants.PackagesFolder);
                if (_fileSystem.DirectoryExists(packagesFolder))
                {
                    var repository = new LocalPackageRepository(packagesFolder);
                    var arbitraryPackages = repository.GetPackages().Where(i => i.GetSupportedFrameworks().Any(x => x.FullName == VersionUtility.ParseFrameworkName("net40").FullName)).ToList();
                    if (arbitraryPackages.Any())
                    {
                        return arbitraryPackages.Select(i => new PackageReference(i.Id, VersionUtility.ParseFrameworkName("net40"), i.Version.Version) { SpecialVersion = i.Version.SpecialVersion });
                    }
                }

                return Enumerable.Empty<IPackageReference>();
            }

            var packages = references.Select(i => new PackageReference(i.Id, i.TargetFramework, i.Version.Version) { SpecialVersion = i.Version.SpecialVersion });
            return packages;
        }
示例#27
0
 internal void VerifyPackage(string filename)
 {
     try
     {
         Log.InfoFormat("Creating verify path {0}", filename);
         var fi = new FileInfo(filename);
         var tempPath =
             new FileInfo(
                 Path.Combine(
                     Path.GetTempPath(),
                     "octgn",
                     Guid.NewGuid().ToString(),
                     fi.Name.Replace(fi.Extension, ".nupkg")));
         if (!File.Exists(filename))
         {
             Log.InfoFormat("Package magically disappeared {0}", filename);
             return;
         }
         Log.InfoFormat("Creating directory {0}", filename);
         if (!Directory.Exists(tempPath.Directory.FullName)) Directory.CreateDirectory(tempPath.Directory.FullName);
         Log.InfoFormat("Copying file {0}", filename);
         fi.MegaCopyTo(tempPath);
         Log.InfoFormat("Creating repo to make sure it loads {0}", filename);
         var repo = new LocalPackageRepository(tempPath.Directory.FullName);
         Log.InfoFormat("Loading repo into array to make sure it works {0}", filename);
         var arr = repo.GetPackages().ToArray();
         Log.InfoFormat("Fully verified {0}", filename);
     }
     catch (Exception)
     {
         Log.WarnFormat("Package not valid {0}", filename);
         throw new UserMessageException(L.D.Exception__FileIsInvalid_Format, filename);
     }
     finally
     {
         Log.InfoFormat("Finished {0}", filename);
     }
 }
示例#28
0
 public IEnumerable<IPackage> GetAllPackages(string rootFolder)
 {
     //rootFolder is repository root
     var targetFolder = rootFolder.AppendPath(PackagesFolder);
     var packagePathResolver = new DefaultPackagePathResolver(targetFolder);
     var packagesFolderFileSystem = new PhysicalFileSystem(targetFolder);
     var localRepository = new LocalPackageRepository(packagePathResolver, packagesFolderFileSystem);
     return localRepository.GetPackages();
 }
示例#29
0
        public IPackageRepository get_local_repository(IPackagePathResolver pathResolver, NuGet.IFileSystem nugetPackagesFileSystem)
        {
            this.Log().Debug(() => "Setting up local repository at '{0}'".format_with(nugetPackagesFileSystem.Root));

            IPackageRepository localRepository = new LocalPackageRepository(pathResolver, nugetPackagesFileSystem);
            localRepository.PackageSaveMode = PackageSaveModes.Nupkg | PackageSaveModes.Nuspec;

            return localRepository;
        }
示例#30
0
        private void ExecuteInitScripts()
        {
            // Fix for Bug 1426 Disallow ExecuteInitScripts from being executed concurrently by multiple threads.
            lock (_initScriptsLock)
            {
                if (!_solutionManager.IsSolutionOpen)
                {
                    return;
                }

                IRepositorySettings repositorySettings = ServiceLocator.GetInstance<IRepositorySettings>();
                Debug.Assert(repositorySettings != null);
                if (repositorySettings == null)
                {
                    return;
                }

                try
                {
                    var localRepository = new LocalPackageRepository(repositorySettings.RepositoryPath);

                    // invoke init.ps1 files in the order of package dependency.
                    // if A -> B, we invoke B's init.ps1 before A's.

                    var sorter = new PackageSorter();
                    var sortedPackages = sorter.GetPackagesByDependencyOrder(localRepository);

                    foreach (var package in sortedPackages)
                    {
                        string installPath = localRepository.PathResolver.GetInstallPath(package);

                        AddPathToEnvironment(Path.Combine(installPath, "tools"));
                        Runspace.ExecuteScript(installPath, "tools\\init.ps1", package);
                    }
                }
                catch (Exception ex)
                {
                    // if execution of Init scripts fails, do not let it crash our console
                    ReportError(ex);

                    ExceptionHelper.WriteToActivityLog(ex);
                }
            }
        }
示例#31
0
        void DownloadPackage(IPackage package, string fullPathToDownloadTo, NuGet.PackageDownloader directDownloader)
        {
            Log.VerboseFormat("Found package {0} version {1}", package.Id, package.Version);
            Log.Verbose("Downloading to: " + fullPathToDownloadTo);

            var dsp = package as DataServicePackage;
            if (dsp != null && directDownloader != null)
            {
                Log.Verbose("A direct download is possible; bypassing the NuGet machine cache");
                using (var targetFile = new FileStream(fullPathToDownloadTo, FileMode.CreateNew))
                    directDownloader.DownloadPackage(dsp.DownloadUrl, dsp, targetFile);
                return;
            }

            var physical = new PhysicalFileSystem(Path.GetDirectoryName(fullPathToDownloadTo));
            var local = new LocalPackageRepository(new FixedFilePathResolver(package.Id, fullPathToDownloadTo), physical);
            local.AddPackage(package);
        }
示例#32
0
        public IEnumerable<IPackageReference> FindReferences(string path)
        {
            var packageReferenceFile = new PackageReferenceFile(path);

            var references = packageReferenceFile.GetPackageReferences().ToList();
            if (references.Any())
            {
                foreach (var packageReference in references)
                {
                    yield return new PackageReference(
                            packageReference.Id,
                            packageReference.TargetFramework,
                            packageReference.Version.Version,
                            packageReference.Version.SpecialVersion);
                }

                yield break;
            }

            // No packages.config, check packages folder
            var packagesFolder = Path.Combine(_fileSystem.GetWorkingDirectory(path), Constants.PackagesFolder);
            if (!_fileSystem.DirectoryExists(packagesFolder)) yield break;

            var repository = new LocalPackageRepository(packagesFolder);

            var arbitraryPackages = repository.GetPackages();
            if (!arbitraryPackages.Any()) yield break;

            foreach (var arbitraryPackage in arbitraryPackages)
            {
                var newestFramework = GetNewestSupportedFramework(arbitraryPackage)
                    ?? VersionUtility.EmptyFramework;

                yield return new PackageReference(
                        arbitraryPackage.Id,
                        newestFramework,
                        arbitraryPackage.Version.Version,
                        arbitraryPackage.Version.SpecialVersion);
            }
        }