Example #1
0
        /// <summary>
        /// Determine what packages need to have their init.ps1 scripts executed based on the provided restore result.
        /// When a restore happens, new packages can be introduced (because the project.json was updated since the last
        /// restore) or existing packages can be installed (because the global packages folder was cleared or a restore
        /// has never been run on an existing project.json). In both of these cases, the init.ps1 scripts should be
        /// executed. Also, the init.ps1 scripts should be executed in dependency order, however it is the
        /// resposibility of <see cref="ExecuteInitPs1ScriptsAsync(BuildIntegratedNuGetProject, IEnumerable{PackageIdentity}, FallbackPackagePathResolver, INuGetProjectContext)"/>
        /// to do this.
        /// </summary>
        /// <param name="restoreResult">The restore result to examine.</param>
        /// <returns>The packages to execute init.ps1 scripts.</returns>
        public static IReadOnlyList <PackageIdentity> GetPackagesToExecuteInitPs1(RestoreResult restoreResult)
        {
            Debug.Assert(restoreResult.Success, "We should not be executing init.ps1 scripts after a failed restore.");

            // Packages added from the previous restore.
            var addedPackages = GetAddedPackages(restoreResult.PreviousLockFile, restoreResult.LockFile);

            // Packages that were not installed before.
            var installedPackages = restoreResult
                                    .GetAllInstalled()
                                    .Where(library => library.Type == LibraryType.Package)
                                    .Select(library => new PackageIdentity(library.Name, library.Version));

            // Get unique package identities.
            var newPackages = new HashSet <PackageIdentity>(addedPackages.Concat(installedPackages));

            return(newPackages.ToList());
        }