public SharpDevelopProjectManager(IPackageRepository sourceRepository,
			IPackagePathResolver pathResolver,
			IProjectSystem project,
			IPackageRepository localRepository)
			: base(sourceRepository, pathResolver, project, localRepository)
		{
		}
Esempio n. 2
0
 public void TransformFile(IPackageFile file, string targetPath, IProjectSystem projectSystem)
 {
     if (!projectSystem.FileExists(targetPath)) {
         using (Stream stream = Process(file, projectSystem).AsStream()) {
             projectSystem.AddFile(targetPath, stream);
         }
     }
 }
Esempio n. 3
0
 private static XElement GetXml(IPackageFile file, IProjectSystem projectSystem)
 {
     using (Stream stream = file.GetStream())
     {
         var content = Preprocessor.Process(file, projectSystem);
         return XElement.Parse(content);
     }
 }
		public ExtensionReferenceRepository(IProjectSystem project, IPackageRepository sourceRepository)
		{
			Guard.ArgumentNotNull(() => project);
			Guard.ArgumentNotNull(() => sourceRepository);

			Project = project;
			SourceRepository = sourceRepository;
		}
Esempio n. 5
0
 public VsProjectManager(
     VsPackageManager packageManager, 
     IPackagePathResolver pathResolver, 
     IProjectSystem project, 
     IPackageRepository localRepository)
     : base(packageManager, pathResolver, project, localRepository)
 {
     _packageManager = packageManager;
 }
Esempio n. 6
0
        public void TransformFile(IPackageFile file, string targetPath, IProjectSystem projectSystem)
        {
            // Get the xml fragment
            XElement xmlFragment = GetXml(file, projectSystem);

            XDocument transformDocument = XmlUtility.GetOrCreateDocument(xmlFragment.Name, projectSystem, targetPath);

            // Do a merge
            transformDocument.Root.MergeWith(xmlFragment, _nodeActions);

            projectSystem.AddFile(targetPath, transformDocument.Save);
        }
Esempio n. 7
0
        public static INuGetProjectSystemFactory CreateProjectSystemFactory(IProjectSystem projectSystem = null)
        {
            if(projectSystem == null)
            {
                var mockProjectSystem = new Mock<IProjectSystem>();
                mockProjectSystem.Setup(ps => ps.Root).Returns("");
                projectSystem = mockProjectSystem.Object;
            }

            var mock = new Mock<INuGetProjectSystemFactory>();
            mock.Setup(f => f.CreateProject(It.IsAny<string>())).Returns(projectSystem);
            return mock.Object;
        }
Esempio n. 8
0
        private static void PerformXdtTransform(IPackageFile file, string targetPath, IProjectSystem projectSystem)
        {
            if (projectSystem.FileExists(targetPath))
            {
                string content = Preprocessor.Process(file, projectSystem);

                try
                {
                    using (var transformation = new XmlTransformation(content, isTransformAFile: false, logger: null))
                    {
                        using (var document = new XmlTransformableDocument())
                        {
                            document.PreserveWhitespace = true;

                            // make sure we close the input stream immediately so that we can override 
                            // the file below when we save to it.
                            using (var inputStream = projectSystem.OpenFile(targetPath))
                            {
                                document.Load(inputStream);
                            }

                            bool succeeded = transformation.Apply(document);
                            if (succeeded)
                            {
                                using (var memoryStream = new MemoryStream())
                                {
                                    // save the result into a memoryStream first so that if there is any
                                    // exception during document.Save(), the original file won't be truncated.
                                    document.Save(memoryStream);
                                    memoryStream.Seek(0, SeekOrigin.Begin);
                                    using (var fileStream = projectSystem.CreateFile(targetPath))
                                    {
                                        memoryStream.CopyTo(fileStream);
                                    }
                                }
                            }
                        }
                    }
                }
                catch (Exception exception)
                {
                    throw new InvalidDataException(
                        String.Format(
                            CultureInfo.CurrentCulture, 
                            NuGetResources.XdtError + " " + exception.Message,
                            targetPath, 
                            projectSystem.ProjectName), 
                        exception);
                }
            }
        }
 public ExtensionReferenceRepository(IProjectSystem project, IPackageRepository sourceRepository, IExtensionManager extensionManager) {
     if (project == null) {
         throw new ArgumentNullException("project");
     }
     if (sourceRepository == null) {
         throw new ArgumentNullException("sourceRepository");
     }
     if (extensionManager == null) {
         throw new ArgumentNullException("extensionManager");
     }
     Project = project;
     SourceRepository = sourceRepository;
     _extensionManager = extensionManager;
 }
        public SharpDevelopPackageManager(
			IPackageRepository sourceRepository,
			IProjectSystem projectSystem,
			ISolutionPackageRepository solutionPackageRepository,
			IPackageOperationResolverFactory packageOperationResolverFactory)
            : base(sourceRepository,
				solutionPackageRepository.PackagePathResolver,
				solutionPackageRepository.FileSystem,
				solutionPackageRepository.Repository)
        {
            this.projectSystem = projectSystem;
            this.packageOperationResolverFactory = packageOperationResolverFactory;
            CreateProjectManager();
        }
		public SharpDevelopPackageManager(
			IPackageRepository sourceRepository,
			IProjectSystem projectSystem,
			IFileSystem fileSystem,
			ISharedPackageRepository localRepository,
			IPackagePathResolver pathResolver)
			: base(
				sourceRepository,
				pathResolver,
				fileSystem,
				localRepository)
		{
			this.projectSystem = projectSystem;
			CreateProjectManager();
		}
Esempio n. 12
0
        internal WebNuGetProject(IEnumerable<string> remoteSources, string siteRoot, Version targetFramework, INuGetProjectSystemFactory projectSystemFactory, INuGetPackageManagerFactory packageManagerFactory, INuGetProjectManagerFactory projectManagerFactory)
        {
            _projectSystem = projectSystemFactory.CreateProject(siteRoot);

            // websites don't always know their target framework
            if (_projectSystem is NuGetWebProjectSystem && targetFramework != null)
            {
                ((NuGetWebProjectSystem)_projectSystem).TargetFramework = new FrameworkName(".NetFramework", targetFramework);
            }

            string webRepositoryDirectory = GetWebRepositoryDirectory(siteRoot);

            var enumerable = remoteSources as IList<string> ?? remoteSources.ToList();
            _packageManager = packageManagerFactory.CreatePackageManager(enumerable, webRepositoryDirectory);
            _projectManager = projectManagerFactory.CreateProjectManager(enumerable, webRepositoryDirectory, _projectSystem);
        }
        public CoreInteropProjectManager(
            InstallationTarget target, 
            SourceRepository activeSource,
            IDependencyResolver2 dependencyResolver)
        {
            // Get the required features from the target
            _sharedRepo = target.GetRequiredFeature<ISharedPackageRepository>();
            _refRepo = target.GetRequiredFeature<IProjectManager>().LocalRepository;
            _projectSystem = target.TryGetFeature<IProjectSystem>();
            _target = target;

            _sourceRepo = new CoreInteropSourceRepository(activeSource);
            _pacman = new CoreInteropPackageManager(
                _sharedRepo,
                dependencyResolver,
                _sourceRepo);
        }
Esempio n. 14
0
        public void RevertFile(IPackageFile file, string targetPath, IEnumerable<IPackageFile> matchingFiles, IProjectSystem projectSystem)
        {
            // Get the xml snippet
            XElement xmlFragment = GetXml(file, projectSystem);

            XDocument document = XmlUtility.GetOrCreateDocument(xmlFragment.Name, projectSystem, targetPath);

            // Merge the other xml elements into one element within this xml hierarchy (matching the config file path)
            var mergedFragments = matchingFiles.Select(f => GetXml(f, projectSystem))
                                               .Aggregate(new XElement(xmlFragment.Name), (left, right) => left.MergeWith(right, _nodeActions));

            // Take the difference of the xml and remove it from the main xml file
            document.Root.Except(xmlFragment.Except(mergedFragments));

            // Save the new content to the file system
            projectSystem.AddFile(targetPath, document.Save);
        }
Esempio n. 15
0
        public IProjectManager CreateProjectManager(IEnumerable<string> remoteSources, string packagesPath, IProjectSystem project)
        {
            if(remoteSources == null)
            {
                throw new ArgumentNullException("remoteSources");
            }
            if (!remoteSources.Any())
            {
                throw new ArgumentException("Must provide at least one remote source");
            }

            var sourceRepo = new AggregateRepository(PackageRepositoryFactory.Default, remoteSources, true);
            var pathResolver = new DefaultPackagePathResolver(packagesPath);

            var packagesConfigRepo = new PackageReferenceRepository(project, project.ProjectName, new SharedPackageRepository(packagesPath));

            return new ProjectManager(sourceRepository: sourceRepo,
                                        pathResolver: pathResolver,
                                        localRepository: packagesConfigRepo,
                                        project: project);
        }
 public PluginReferenceRepository(IProjectSystem project, IPackageRepository sourceRepository, IPluginFinder pluginFinder)
     : base(project, sourceRepository)
 {
     _pluginFinder = pluginFinder;
     _descriptors  = _pluginFinder.GetPluginDescriptors().ToList();
 }
        internal IEnumerable<PackageDependency> GetReferences(IPackageRepository localRepository,
                                     IFileSystem sharedRepositoryFileSystem,
                                     ISharedPackageRepository sharedPackageRepository,
                                     IPackageRepository sourceRepository,
                                     IPackageConstraintProvider constraintProvider,
                                     IPackagePathResolver pathResolver,
                                     IProjectSystem project)
        {
            var packageManager = new PackageManager(sourceRepository, pathResolver, sharedRepositoryFileSystem, sharedPackageRepository);

            var projectManager = new ProjectManager(sourceRepository, pathResolver, project, localRepository)
            {
                ConstraintProvider = constraintProvider
            };

            // Fix for work item 2411: When updating packages, we did not add packages to the shared package repository. 
            // Consequently, when querying the package reference repository, we would have package references with no backing package files in
            // the shared repository. This would cause the reference repository to skip the package assuming that the entry is invalid.
            projectManager.PackageReferenceAdded += (sender, eventArgs) =>
            {
                PackageExtractor.InstallPackage(packageManager, eventArgs.Package);
            };

            projectManager.Logger = project.Logger = new NugetUpdateTask.VerboseLogger(this);

            using (sourceRepository.StartOperation(RepositoryOperationNames.Update))
            {
                foreach (var package in GetPackages(localRepository))
                {
                    if (localRepository.Exists(package.Id))
                    {
                        if (projectManager.IsInstalled(package))
                        {
                            Log(Level.Debug, "Found installed package {0} version {1}", package.Id, package.Version);
                            yield return new PackageDependency(package.Id, new VersionSpec(package.Version));
                        }
                    }
                }
            }
        }
Esempio n. 18
0
        public static void AddFiles(this IProjectSystem project,
                                    IEnumerable <IPackageFile> files,
                                    IDictionary <string, IPackageFileTransformer> fileTransformers)
        {
            // Convert files to a list
            List <IPackageFile> fileList = files.ToList();

            // See if the project system knows how to sort the files
            var fileComparer = project as IComparer <IPackageFile>;

            if (fileComparer != null)
            {
                fileList.Sort(fileComparer);
            }

            var batchProcessor = project as IBatchProcessor <string>;

            try
            {
                if (batchProcessor != null)
                {
                    var paths = fileList.Select(file => ResolvePath(fileTransformers, file.EffectivePath));
                    batchProcessor.BeginProcessing(paths, PackageAction.Install);
                }

                foreach (IPackageFile file in fileList)
                {
                    if (file.IsEmptyFolder())
                    {
                        continue;
                    }

                    IPackageFileTransformer transformer;

                    // Resolve the target path
                    string path = ResolveTargetPath(project,
                                                    fileTransformers,
                                                    file.EffectivePath,
                                                    out transformer);

                    if (project.IsSupportedFile(path))
                    {
                        // Try to get the package file modifier for the extension
                        if (transformer != null)
                        {
                            // If the transform was done then continue
                            transformer.TransformFile(file, path, project);
                        }
                        else
                        {
                            TryAddFile(project, file, path);
                        }
                    }
                }
            }
            finally
            {
                if (batchProcessor != null)
                {
                    batchProcessor.EndProcessing();
                }
            }
        }
Esempio n. 19
0
        private static void PerformXdtTransform(IPackageFile file, string targetPath, IProjectSystem projectSystem)
        {
            if (projectSystem.FileExists(targetPath))
            {
                string content = Preprocessor.Process(file, projectSystem);

                try
                {
                    using (var transformation = new XmlTransformation(content, isTransformAFile: false, logger: null))
                    {
                        using (var document = new XmlTransformableDocument())
                        {
                            document.PreserveWhitespace = true;

                            // make sure we close the input stream immediately so that we can override
                            // the file below when we save to it.
                            using (var inputStream = projectSystem.OpenFile(targetPath))
                            {
                                document.Load(inputStream);
                            }

                            bool succeeded = transformation.Apply(document);
                            if (succeeded)
                            {
                                using (var memoryStream = new MemoryStream())
                                {
                                    // save the result into a memoryStream first so that if there is any
                                    // exception during document.Save(), the original file won't be truncated.
                                    document.Save(memoryStream);
                                    memoryStream.Seek(0, SeekOrigin.Begin);
                                    using (var fileStream = projectSystem.CreateFile(targetPath))
                                    {
                                        memoryStream.CopyTo(fileStream);
                                    }
                                }
                            }
                        }
                    }
                }
                catch (Exception exception)
                {
                    throw new InvalidDataException(
                              String.Format(
                                  CultureInfo.CurrentCulture,
                                  NuGetResources.XdtError + " " + exception.Message,
                                  targetPath,
                                  projectSystem.ProjectName),
                              exception);
                }
            }
        }
Esempio n. 20
0
 public void RevertFile(IPackageFile file, string targetPath, IEnumerable<IPackageFile> matchingFiles, IProjectSystem projectSystem)
 {
     Func<Stream> streamFactory = () => Process(file, projectSystem).AsStream();
     FileSystemExtensions.DeleteFileSafe(projectSystem, targetPath, streamFactory);
 }
        public void RevertFile(IPackageFile file, string targetPath, IEnumerable <IPackageFile> matchingFiles, IProjectSystem projectSystem)
        {
            Func <Stream> streamFactory = () => Process(file, projectSystem).AsStream();

            FileSystemExtensions.DeleteFileSafe(projectSystem, targetPath, streamFactory);
        }
Esempio n. 22
0
        internal static IEnumerable <T> GetCompatibleItemsCore <T>(this IProjectSystem projectSystem, IEnumerable <T> items) where T : IFrameworkTargetable
        {
            IEnumerable <T> enumerable;

            return(!VersionUtility.TryGetCompatibleItems <T>(projectSystem.TargetFramework, items, out enumerable) ? Enumerable.Empty <T>() : enumerable);
        }
Esempio n. 23
0
 public FilesService(IProjectSystem projectSystem)
 {
     _projectSystem = projectSystem;
 }
Esempio n. 24
0
 public void TransformFile(IPackageFile file, string targetPath, IProjectSystem projectSystem)
 {
     PerformXdtTransform(file, targetPath, projectSystem);
 }
Esempio n. 25
0
 public void RevertFile(IPackageFile file, string targetPath, IEnumerable<IPackageFile> matchingFiles, IProjectSystem projectSystem)
 {
     PerformXdtTransform(file, targetPath, projectSystem);
 }
Esempio n. 26
0
        internal void UpdatePackages(IPackageRepository localRepository,
                                     IFileSystem sharedRepositoryFileSystem,
                                     ISharedPackageRepository sharedPackageRepository,
                                     IPackageRepository sourceRepository,
                                     IPackageConstraintProvider constraintProvider,
                                     IPackagePathResolver pathResolver,
                                     IProjectSystem project)
        {
            var packageManager = new PackageManager(sourceRepository, pathResolver, sharedRepositoryFileSystem, sharedPackageRepository);

            var projectManager = new ProjectManager(sourceRepository, pathResolver, project, localRepository)
                                 {
                                     ConstraintProvider = constraintProvider
                                 };

            // Fix for work item 2411: When updating packages, we did not add packages to the shared package repository. 
            // Consequently, when querying the package reference repository, we would have package references with no backing package files in
            // the shared repository. This would cause the reference repository to skip the package assuming that the entry is invalid.
            projectManager.PackageReferenceAdded += (sender, eventArgs) =>
            {
                PackageExtractor.InstallPackage(packageManager, eventArgs.Package);
            };

            projectManager.Logger = project.Logger = this;

            using (sourceRepository.StartOperation(RepositoryOperationNames.Update))
            {
                foreach (var package in GetPackages(localRepository))
                {
                    if (localRepository.Exists(package.Id))
                    {
                        try
                        {
                            // If the user explicitly allows prerelease or if the package being updated is prerelease we'll include prerelease versions in our list of packages
                            // being considered for an update.
                            bool allowPrerelease = Prerelease || !package.IsReleaseVersion();
                            if (Safe)
                            {
                                IVersionSpec safeRange = VersionUtility.GetSafeRange(package.Version);
                                projectManager.UpdatePackageReference(package.Id, safeRange, updateDependencies: true, allowPrereleaseVersions: allowPrerelease);
                            }
                            else
                            {
                                projectManager.UpdatePackageReference(package.Id, version: null, updateDependencies: true, allowPrereleaseVersions: allowPrerelease);
                            }
                        }
                        catch (InvalidOperationException e)
                        {
                            Console.WriteWarning(e.Message);
                        }
                    }
                }
            }
        }
        private static XElement GetXml(IPackageFile file, IProjectSystem projectSystem)
        {
            var content = Preprocessor.Process(file, projectSystem);

            return(XElement.Parse(content, LoadOptions.PreserveWhitespace));
        }
Esempio n. 28
0
 private static XElement GetXml(IPackageFile file, IProjectSystem projectSystem)
 {
     var content = Preprocessor.Process(file, projectSystem);
     return XElement.Parse(content, LoadOptions.PreserveWhitespace);
 }
Esempio n. 29
0
 /// <summary>
 /// The standard constructor.  We'll just call the base constructor.
 /// </summary>
 /// <param name="sourceRepository"></param>
 /// <param name="pathResolver"></param>
 /// <param name="project"></param>
 /// <param name="localRepository"></param>
 public RockProjectManager(IPackageRepository sourceRepository, IPackagePathResolver pathResolver, IProjectSystem project, IPackageRepository localRepository)
     : base(sourceRepository, pathResolver, project, localRepository)
 {
 }
 public CurrentProjectFacts()
 {
     _workspace = new OmnisharpWorkspace(new HostServicesBuilder(Enumerable.Empty<ICodeActionProvider>()));
     _context = new DnxContext();
     _projectSystem = new DnxProjectSystem(_workspace, null, new FakeLoggerFactory(), null, null, null, null, _context);
 }
        public static void DeleteFiles(this IProjectSystem project,
                                       IEnumerable <IPackageFile> files,
                                       IEnumerable <IPackage> otherPackages,
                                       IDictionary <FileTransformExtensions, IPackageFileTransformer> fileTransformers)
        {
            IPackageFileTransformer transformer;
            // First get all directories that contain files
            var directoryLookup = files.ToLookup(
                p => Path.GetDirectoryName(ResolveTargetPath(project, fileTransformers, fte => fte.UninstallExtension, p.EffectivePath, out transformer)));

            // Get all directories that this package may have added
            var directories = from grouping in directoryLookup
                              from directory in FileSystemExtensions.GetDirectories(grouping.Key)
                              orderby directory.Length descending
                              select directory;

            // Remove files from every directory
            foreach (var directory in directories)
            {
                var directoryFiles = directoryLookup.Contains(directory) ? directoryLookup[directory] : Enumerable.Empty <IPackageFile>();

                if (!project.DirectoryExists(directory))
                {
                    continue;
                }
                var batchProcessor = project as IBatchProcessor <string>;

                try
                {
                    if (batchProcessor != null)
                    {
                        var paths = directoryFiles.Select(file => ResolvePath(fileTransformers, fte => fte.UninstallExtension, file.EffectivePath));
                        batchProcessor.BeginProcessing(paths, PackageAction.Uninstall);
                    }

                    foreach (var file in directoryFiles)
                    {
                        if (file.IsEmptyFolder())
                        {
                            continue;
                        }

                        // Resolve the path
                        string path = ResolveTargetPath(project,
                                                        fileTransformers,
                                                        fte => fte.UninstallExtension,
                                                        file.EffectivePath,
                                                        out transformer);

                        if (project.IsSupportedFile(path))
                        {
                            if (transformer != null)
                            {
                                var matchingFiles = from p in otherPackages
                                                    from otherFile in project.GetCompatibleItemsCore(p.GetContentFiles())
                                                    where otherFile.EffectivePath.Equals(file.EffectivePath, StringComparison.OrdinalIgnoreCase)
                                                    select otherFile;

                                try
                                {
                                    transformer.RevertFile(file, path, matchingFiles, project);
                                }
                                catch (Exception e)
                                {
                                    // Report a warning and move on
                                    project.Logger.Log(MessageLevel.Warning, e.Message);
                                }
                            }
                            else
                            {
                                project.DeleteFileSafe(path, file.GetStream);
                            }
                        }
                    }

                    // If the directory is empty then delete it
                    if (!project.GetFilesSafe(directory).Any() &&
                        !project.GetDirectoriesSafe(directory).Any())
                    {
                        project.DeleteDirectorySafe(directory, recursive: false);
                    }
                }
                finally
                {
                    if (batchProcessor != null)
                    {
                        batchProcessor.EndProcessing();
                    }
                }
            }
        }
Esempio n. 32
0
 public CurrentProjectFacts()
 {
     _workspace     = new OmnisharpWorkspace(new HostServicesBuilder(Enumerable.Empty <ICodeActionProvider>()));
     _context       = new DnxContext();
     _projectSystem = new DnxProjectSystem(_workspace, null, new FakeLoggerFactory(), null, null, null, null, _context);
 }
		public ThemeReferenceRepository(IProjectSystem project, IPackageRepository sourceRepository, IThemeRegistry themeRegistry)
			: base(project, sourceRepository)
		{
			_themeRegistry = themeRegistry;
			_themeManifests = _themeRegistry.GetThemeManifests();
		}
 public ThemeReferenceRepository(IProjectSystem project, IPackageRepository sourceRepository, IThemeRegistry themeRegistry)
     : base(project, sourceRepository)
 {
     _themeManifests = themeRegistry.GetThemeManifests(true);
 }
Esempio n. 35
0
 private static void PerformXdtTransform(IPackageFile file, string targetPath, IProjectSystem projectSystem)
 {
     if (projectSystem.FileExists(targetPath))
     {
         string transform = Preprocessor.Process(file, projectSystem);
         try
         {
             using (XmlTransformation transformation = new XmlTransformation(transform, false, null))
             {
                 using (XmlTransformableDocument document = new XmlTransformableDocument())
                 {
                     document.PreserveWhitespace = true;
                     using (Stream stream = projectSystem.OpenFile(targetPath))
                     {
                         document.Load(stream);
                     }
                     if (transformation.Apply(document))
                     {
                         using (MemoryStream stream2 = new MemoryStream())
                         {
                             document.Save(stream2);
                             stream2.Seek(0L, SeekOrigin.Begin);
                             using (Stream stream3 = projectSystem.CreateFile(targetPath))
                             {
                                 stream2.CopyTo(stream3);
                             }
                         }
                     }
                 }
             }
         }
         catch (Exception exception)
         {
             object[] args = new object[] { targetPath, projectSystem.ProjectName };
             throw new InvalidDataException(string.Format(CultureInfo.CurrentCulture, NuGetResources.XdtError + " " + exception.Message, args), exception);
         }
     }
 }
Esempio n. 36
0
 public FilesController(IProjectSystem projectSystem)
 {
     _projectSystem = projectSystem;
 }
Esempio n. 37
0
        public virtual void RevertFile(IPackageFile file, string targetPath, IEnumerable <IPackageFile> matchingFiles, IProjectSystem projectSystem)
        {
            XElement  xml      = GetXml(file, projectSystem);
            XDocument document = XmlUtility.GetOrCreateDocument(xml.Name, projectSystem, targetPath);

            document.Root.Except(xml.Except(Enumerable.Aggregate <XElement, XElement>(from f in matchingFiles select GetXml(f, projectSystem), new XElement(xml.Name), (left, right) => left.MergeWith(right, this._nodeActions))));
            using (Stream stream = projectSystem.CreateFile(targetPath))
            {
                document.Save(stream);
            }
        }
Esempio n. 38
0
 private static XElement GetXml(IPackageFile file, IProjectSystem projectSystem)
 {
     var content = Preprocessor.Process(file, projectSystem);
     return XElement.Parse(content);
 }
Esempio n. 39
0
 public void TransformFile(IPackageFile file, string targetPath, IProjectSystem projectSystem)
 {
     PerformXdtTransform(file, targetPath, projectSystem);
 }
Esempio n. 40
0
        internal void UpdatePackages(IPackageRepository localRepository,
                                     IPackageRepository sourceRepository,
                                     IPackageConstraintProvider constraintProvider,
                                     IPackagePathResolver pathResolver,
                                     IProjectSystem project)
        {
            var projectManager = new ProjectManager(sourceRepository, pathResolver, project, localRepository)
                                 {
                                     ConstraintProvider = constraintProvider
                                 };

            if (Verbose)
            {
                projectManager.Logger = Console;
            }

            foreach (var package in GetPackages(localRepository))
            {
                if (localRepository.Exists(package.Id))
                {
                    try
                    {
                        // If the user explicitly allows prerelease or if the package being updated is prerelease we'll include prerelease versions in our list of packages
                        // being considered for an update.
                        bool allowPrerelease = Prerelease || !package.IsReleaseVersion();
                        if (Safe)
                        {
                            IVersionSpec safeRange = VersionUtility.GetSafeRange(package.Version);
                            projectManager.UpdatePackageReference(package.Id, safeRange, updateDependencies: true, allowPrereleaseVersions: allowPrerelease);
                        }
                        else
                        {
                            projectManager.UpdatePackageReference(package.Id, version: null, updateDependencies: true, allowPrereleaseVersions: allowPrerelease);
                        }
                    }
                    catch (InvalidOperationException e)
                    {
                        Console.WriteWarning(e.Message);
                    }
                }
            }
        }
Esempio n. 41
0
        public void RevertFile(IPackageFile file, string targetPath, IEnumerable <IPackageFile> matchingFiles, IProjectSystem projectSystem)
        {
            // Get the xml snippet
            XElement xmlFragment = GetXml(file, projectSystem);

            XDocument document = XmlUtility.GetOrCreateDocument(xmlFragment.Name, projectSystem, targetPath);

            // Merge the other xml elements into one element within this xml hierarchy (matching the config file path)
            var mergedFragments = matchingFiles.Select(f => GetXml(f, projectSystem))
                                  .Aggregate(new XElement(xmlFragment.Name), (left, right) => left.MergeWith(right, _nodeActions));

            // Take the difference of the xml and remove it from the main xml file
            document.Root.Except(xmlFragment.Except(mergedFragments));

            // Save the new content to the file system
            projectSystem.AddFile(targetPath, document.Save);
        }
Esempio n. 42
0
        private void CopyNativeBinaries(IProjectSystem projectSystem, IFileSystem packagesFileSystem, PackageName packageName)
        {
            const string nativeBinariesFolder = "NativeBinaries";

            string nativeBinariesPath = Path.Combine(packageName.Name, nativeBinariesFolder);
            if (packagesFileSystem.DirectoryExists(nativeBinariesPath))
            {
                IEnumerable<string> nativeFiles = packagesFileSystem.GetFiles(nativeBinariesPath, "*.*", recursive: true);
                foreach (string file in nativeFiles)
                {
                    string targetPath = Path.Combine(Constants.BinDirectory, file.Substring(nativeBinariesPath.Length + 1));  // skip over NativeBinaries/ word
                    using (Stream stream = packagesFileSystem.OpenFile(file)) 
                    {
                        projectSystem.AddFile(targetPath, stream);
                    }
                }
            }
        }
Esempio n. 43
0
        internal void UpdatePackages(IPackageRepository localRepository,
                                     IFileSystem sharedRepositoryFileSystem,
                                     ISharedPackageRepository sharedPackageRepository,
                                     IPackageRepository sourceRepository,
                                     IPackageConstraintProvider constraintProvider,
                                     IPackagePathResolver pathResolver,
                                     IProjectSystem projectSystem)
        {
            var packageManager = new PackageManager(sourceRepository, pathResolver, sharedRepositoryFileSystem, sharedPackageRepository);

            var projectManager = new ProjectManager(packageManager, pathResolver, projectSystem, localRepository)
            {
                ConstraintProvider = constraintProvider
            };

            // Fix for work item 2411: When updating packages, we did not add packages to the shared package repository.
            // Consequently, when querying the package reference repository, we would have package references with no backing package files in
            // the shared repository. This would cause the reference repository to skip the package assuming that the entry is invalid.
            projectManager.PackageReferenceAdded += (sender, eventArgs) =>
            {
                PackageExtractor.InstallPackage(packageManager, eventArgs.Package);
            };

            projectManager.Logger = projectSystem.Logger = this;

            foreach (var package in GetPackages(localRepository))
            {
                if (localRepository.Exists(package.Id))
                {
                    using (sourceRepository.StartOperation(RepositoryOperationNames.Update, package.Id, mainPackageVersion: null))
                    {
                        try
                        {
                            // If the user explicitly allows prerelease or if the package being updated is prerelease we'll include prerelease versions in our list of packages
                            // being considered for an update.
                            bool allowPrerelease = Prerelease || !package.IsReleaseVersion();
                            var  resolver        = new ActionResolver()
                            {
                                AllowPrereleaseVersions = allowPrerelease
                            };
                            var updateUtility = new UpdateUtility(resolver)
                            {
                                AllowPrereleaseVersions = allowPrerelease,
                                Safe = Safe
                            };

                            var operations            = updateUtility.ResolveActionsForUpdate(package.Id, null, new[] { projectManager }, false);
                            var userOperationExecutor = new ActionExecutor();
                            userOperationExecutor.Execute(operations);
                        }
                        catch (InvalidOperationException e)
                        {
                            if (Console.Verbosity == NuGet.Verbosity.Detailed)
                            {
                                Console.WriteWarning(e.ToString());
                            }
                            else
                            {
                                Console.WriteWarning(e.Message);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 44
0
        public static void DeleteFiles(this IProjectSystem project, IEnumerable <IPackageFile> files, IEnumerable <IPackage> otherPackages, IDictionary <FileTransformExtensions, IPackageFileTransformer> fileTransformers)
        {
            IPackageFileTransformer        transformer;
            ILookup <string, IPackageFile> lookup = Enumerable.ToLookup <IPackageFile, string>(files, p => Path.GetDirectoryName(ResolveTargetPath(project, fileTransformers, fte => fte.UninstallExtension, p.EffectivePath, out transformer)));

            foreach (string str in from grouping in lookup
                     from directory in FileSystemExtensions.GetDirectories(grouping.Key)
                     orderby directory.Length descending
                     select directory)
            {
                IEnumerable <IPackageFile> enumerable = lookup.Contains(str) ? lookup[str] : Enumerable.Empty <IPackageFile>();
                if (project.DirectoryExists(str))
                {
                    IBatchProcessor <string> processor = project as IBatchProcessor <string>;
                    try
                    {
                        if (processor != null)
                        {
                            Func <IPackageFile, string> < > 9__6;
                            Func <IPackageFile, string> func5 = < > 9__6;
                            if (< > 9__6 == null)
                            {
                                Func <IPackageFile, string> local5 = < > 9__6;
                                func5 = < > 9__6 = file => ResolvePath(fileTransformers, fte => fte.UninstallExtension, file.EffectivePath);
                            }
                            processor.BeginProcessing(Enumerable.Select <IPackageFile, string>(enumerable, func5), PackageAction.Uninstall);
                        }
                        foreach (IPackageFile file in enumerable)
                        {
                            if (!file.IsEmptyFolder())
                            {
                                string path = ResolveTargetPath(project, fileTransformers, fte => fte.UninstallExtension, file.EffectivePath, out transformer);
                                if (project.IsSupportedFile(path))
                                {
                                    Func <IPackage, IEnumerable <IPackageFile> > < > 9__9;
                                    if (transformer == null)
                                    {
                                        project.DeleteFileSafe(path, new Func <Stream>(file.GetStream));
                                        continue;
                                    }
                                    Func <IPackage, IEnumerable <IPackageFile> > func4 = < > 9__9;
                                    if (< > 9__9 == null)
                                    {
                                        Func <IPackage, IEnumerable <IPackageFile> > local7 = < > 9__9;
                                        func4 = < > 9__9 = p => project.GetCompatibleItemsCore <IPackageFile>(p.GetContentFiles());
                                    }
                                    IEnumerable <IPackageFile> matchingFiles = from <> h__TransparentIdentifier0 in Enumerable.SelectMany(otherPackages, func4, (p, otherFile) => new {
                                        p         = p,
                                        otherFile = otherFile
                                    })
                                                                               where < > h__TransparentIdentifier0.otherFile.EffectivePath.Equals(file.EffectivePath, StringComparison.OrdinalIgnoreCase)
                                                                               select <> h__TransparentIdentifier0.otherFile;
                                    try
                                    {
                                        transformer.RevertFile(file, path, matchingFiles, project);
                                    }
                                    catch (Exception exception)
                                    {
                                        project.Logger.Log(MessageLevel.Warning, exception.Message, new object[0]);
                                    }
                                }
                            }
                        }
                        if (!project.GetFilesSafe(str).Any <string>() && !project.GetDirectoriesSafe(str).Any <string>())
                        {
                            project.DeleteDirectorySafe(str, false);
                        }
                    }
                    finally
                    {
                        if (processor != null)
                        {
                            processor.EndProcessing();
                        }
                    }
                }
            }
        }
Esempio n. 45
0
        private static XElement GetXml(IPackageFile file, IProjectSystem projectSystem)
        {
            var content = Preprocessor.Process(file, projectSystem);

            return(XElement.Parse(content));
        }
Esempio n. 46
0
 public void TransformFile(IPackageFile file, string targetPath, IProjectSystem projectSystem)
 {
     ProjectSystemExtensions.TryAddFile(projectSystem, targetPath, () => Process(file, projectSystem).AsStream());
 }
Esempio n. 47
0
        public ProjectManager(IPackageRepository sourceRepository, IPackagePathResolver pathResolver, IProjectSystem project, IPackageRepository localRepository)
        {
            if (sourceRepository == null)
            {
                throw new ArgumentNullException("sourceRepository");
            }
            if (pathResolver == null)
            {
                throw new ArgumentNullException("pathResolver");
            }
            if (project == null)
            {
                throw new ArgumentNullException("project");
            }
            if (localRepository == null)
            {
                throw new ArgumentNullException("localRepository");
            }

            SourceRepository            = sourceRepository;
            Project                     = project;
            PathResolver                = pathResolver;
            LocalRepository             = localRepository;
            _packageReferenceRepository = LocalRepository as IPackageReferenceRepository;
        }
Esempio n. 48
0
 public NullProjectManager(IPackageManager packageManager)
 {
     _localRepository = new VirtualRepository(repo: null);
     _project         = new NullProjectSystem();
     PackageManager   = packageManager;
 }
Esempio n. 49
0
        internal void UpdatePackages(IPackageRepository localRepository,
                                     IFileSystem sharedRepositoryFileSystem,
                                     ISharedPackageRepository sharedPackageRepository,
                                     IPackageRepository sourceRepository,
                                     IPackageConstraintProvider constraintProvider,
                                     IPackagePathResolver pathResolver,
                                     IProjectSystem project)
        {
            var packageManager = new PackageManager(sourceRepository, pathResolver, sharedRepositoryFileSystem, sharedPackageRepository);

            var projectManager = new ProjectManager(packageManager, pathResolver, project, localRepository)
                                 {
                                     ConstraintProvider = constraintProvider
                                 };

            // Fix for work item 2411: When updating packages, we did not add packages to the shared package repository. 
            // Consequently, when querying the package reference repository, we would have package references with no backing package files in
            // the shared repository. This would cause the reference repository to skip the package assuming that the entry is invalid.
            projectManager.PackageReferenceAdded += (sender, eventArgs) =>
            {
                PackageExtractor.InstallPackage(packageManager, eventArgs.Package);
            };

            projectManager.Logger = project.Logger = this;

            foreach (var package in GetPackages(localRepository))
            {
                if (localRepository.Exists(package.Id))
                {
                    using (sourceRepository.StartOperation(RepositoryOperationNames.Update, package.Id, mainPackageVersion: null))
                    {
                        try
                        {
                            // If the user explicitly allows prerelease or if the package being updated is prerelease we'll include prerelease versions in our list of packages
                            // being considered for an update.
                            bool allowPrerelease = Prerelease || !package.IsReleaseVersion();
                            var resolver = new ActionResolver()
                            {
                                AllowPrereleaseVersions = allowPrerelease
                            };
                            var updateUtility = new UpdateUtility(resolver)
                            {
                                AllowPrereleaseVersions = allowPrerelease,
                                Safe = Safe
                            };

                            var operations = updateUtility.ResolveActionsForUpdate(package.Id, null, new[] { projectManager }, false);
                            var userOperationExecutor = new ActionExecutor();
                            userOperationExecutor.Execute(operations);
                        }
                        catch (InvalidOperationException e)
                        {
                            if (Console.Verbosity == NuGet.Verbosity.Detailed)
                            {
                                Console.WriteWarning(e.ToString());
                            }
                            else
                            {
                                Console.WriteWarning(e.Message);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 50
0
        public ProjectManager(IPackageManager packageManager, IPackagePathResolver pathResolver, IProjectSystem project, IPackageRepository localRepository)
        {
            Dictionary <FileTransformExtensions, IPackageFileTransformer> dictionary1 = new Dictionary <FileTransformExtensions, IPackageFileTransformer>();

            dictionary1.Add(new FileTransformExtensions(".transform", ".transform"), new XmlTransformer(GetConfigMappings()));
            dictionary1.Add(new FileTransformExtensions(".pp", ".pp"), new Preprocessor());
            dictionary1.Add(new FileTransformExtensions(".install.xdt", ".uninstall.xdt"), new XdtTransformer());
            this._fileTransformers = dictionary1;
            if (pathResolver == null)
            {
                throw new ArgumentNullException("pathResolver");
            }
            if (project == null)
            {
                throw new ArgumentNullException("project");
            }
            if (localRepository == null)
            {
                throw new ArgumentNullException("localRepository");
            }
            this.PackageManager              = packageManager;
            this.Project                     = project;
            this.PathResolver                = pathResolver;
            this.LocalRepository             = localRepository;
            this._packageReferenceRepository = this.LocalRepository as IPackageReferenceRepository;
        }
        public static void AddFiles(this IProjectSystem project,
                                    IEnumerable <IPackageFile> files,
                                    IDictionary <FileTransformExtensions, IPackageFileTransformer> fileTransformers)
        {
            // Convert files to a list
            List <IPackageFile> fileList = files.ToList();

            // See if the project system knows how to sort the files
            var fileComparer = project as IComparer <IPackageFile>;

            if (fileComparer != null)
            {
                fileList.Sort(fileComparer);
            }

            var batchProcessor = project as IBatchProcessor <string>;

            try
            {
                if (batchProcessor != null)
                {
                    var paths = fileList.Select(file => ResolvePath(fileTransformers, fte => fte.InstallExtension, file.EffectivePath));
                    batchProcessor.BeginProcessing(paths, PackageAction.Install);
                }

                foreach (IPackageFile file in fileList)
                {
                    if (file.IsEmptyFolder())
                    {
                        continue;
                    }

                    // Resolve the target path
                    IPackageFileTransformer installTransformer;
                    string path = ResolveTargetPath(project, fileTransformers, fte => fte.InstallExtension, file.EffectivePath, out installTransformer);

                    if (project.IsSupportedFile(path))
                    {
                        if (installTransformer != null)
                        {
                            installTransformer.TransformFile(file, path, project);
                        }
                        else
                        {
                            // Ignore uninstall transform file during installation
                            string truncatedPath;
                            IPackageFileTransformer uninstallTransformer =
                                FindFileTransformer(fileTransformers, fte => fte.UninstallExtension, file.EffectivePath, out truncatedPath);
                            if (uninstallTransformer != null)
                            {
                                continue;
                            }
                            TryAddFile(project, path, file.GetStream);
                        }
                    }
                }
            }
            finally
            {
                if (batchProcessor != null)
                {
                    batchProcessor.EndProcessing();
                }
            }
        }
Esempio n. 52
0
        public IProjectManager CreateProjectManager(IEnumerable <string> remoteSources, string packagesPath, IProjectSystem project)
        {
            if (remoteSources == null)
            {
                throw new ArgumentNullException("remoteSources");
            }
            if (!remoteSources.Any())
            {
                throw new ArgumentException("Must provide at least one remote source");
            }

            var sourceRepo   = new AggregateRepository(PackageRepositoryFactory.Default, remoteSources, true);
            var pathResolver = new DefaultPackagePathResolver(packagesPath);

            var packagesConfigRepo = new PackageReferenceRepository(project, project.ProjectName, new SharedPackageRepository(packagesPath));

            return(new ProjectManager(sourceRepository: sourceRepo,
                                      pathResolver: pathResolver,
                                      localRepository: packagesConfigRepo,
                                      project: project));
        }
		public PluginReferenceRepository(IProjectSystem project, IPackageRepository sourceRepository, IPluginFinder pluginFinder)
			: base(project, sourceRepository)
		{
			_pluginFinder = pluginFinder;
			_descriptors = _pluginFinder.GetPluginDescriptors().ToList();
		}
Esempio n. 54
0
 private static string ResolvePath(IProjectSystem projectSystem, string path)
 {
     return(projectSystem.ResolvePath(RemoveContentDirectory(path)));
 }
Esempio n. 55
0
 public void TransformFile(IPackageFile file, string targetPath, IProjectSystem projectSystem)
 {
     ProjectSystemExtensions.TryAddFile(projectSystem, targetPath, () => Process(file, projectSystem).AsStream());
 }
Esempio n. 56
0
        public static void DeleteFiles(this IProjectSystem project,
                                       IEnumerable <IPackageFile> files,
                                       IEnumerable <IPackage> otherPackages,
                                       IDictionary <string, IPackageFileTransformer> fileTransformers)
        {
            // First get all directories that contain files
            var directoryLookup = files.ToLookup(p => Path.GetDirectoryName(ResolvePath(project, p.Path)));


            // Get all directories that this package may have added
            var directories = from grouping in directoryLookup
                              from directory in FileSystemExtensions.GetDirectories(grouping.Key)
                              orderby directory.Length descending
                              select directory;

            // Remove files from every directory
            foreach (var directory in directories)
            {
                var directoryFiles = directoryLookup.Contains(directory) ? directoryLookup[directory] : Enumerable.Empty <IPackageFile>();

                if (!project.DirectoryExists(directory))
                {
                    continue;
                }

                foreach (var file in directoryFiles)
                {
                    // Remove the content folder from the path
                    string path = ResolvePath(project, file.Path);

                    // Try to get the package file modifier for the extension
                    string extension = Path.GetExtension(file.Path);
                    IPackageFileTransformer transformer;
                    if (fileTransformers.TryGetValue(extension, out transformer))
                    {
                        // Remove the extension to get the target path
                        path = RemoveExtension(path);

                        if (project.IsSupportedFile(path))
                        {
                            var matchingFiles = from p in otherPackages
                                                from otherFile in p.GetContentFiles()
                                                where otherFile.Path.Equals(file.Path, StringComparison.OrdinalIgnoreCase)
                                                select otherFile;

                            try {
                                transformer.RevertFile(file, path, matchingFiles, project);
                            }
                            catch (Exception e) {
                                // Report a warning and move on
                                project.Logger.Log(MessageLevel.Warning, e.Message);
                            }
                        }
                    }
                    else if (project.IsSupportedFile(path))
                    {
                        project.DeleteFileSafe(path, file.GetStream);
                    }
                }

                // If the directory is empty then delete it
                if (!project.GetFilesSafe(directory).Any() &&
                    !project.GetDirectoriesSafe(directory).Any())
                {
                    project.DeleteDirectorySafe(directory, recursive: false);
                }
            }
        }
        public ProjectManager(IPackageManager packageManager, IPackagePathResolver pathResolver, IProjectSystem project, IPackageRepository localRepository)
        {
            // !!! TODO: we should get rid of the parameter pathResolver. Use packageManager's path resolver
            // instead.
            if (pathResolver == null)
            {
                throw new ArgumentNullException("pathResolver");
            }
            if (project == null)
            {
                throw new ArgumentNullException("project");
            }
            if (localRepository == null)
            {
                throw new ArgumentNullException("localRepository");
            }

            PackageManager              = packageManager;
            Project                     = project;
            PathResolver                = pathResolver;
            LocalRepository             = localRepository;
            _packageReferenceRepository = LocalRepository as IPackageReferenceRepository;
        }
Esempio n. 58
0
 private static XElement GetXml(IPackageFile file, IProjectSystem projectSystem) =>
 XElement.Parse(Preprocessor.Process(file, projectSystem), LoadOptions.PreserveWhitespace);
Esempio n. 59
0
 public void RevertFile(IPackageFile file, string targetPath, IEnumerable <IPackageFile> matchingFiles, IProjectSystem projectSystem)
 {
     PerformXdtTransform(file, targetPath, projectSystem);
 }
Esempio n. 60
0
 public FilesController(IProjectSystem projectSystem)
 {
     _projectSystem = projectSystem;
 }