// Updates the specified package in projects private IEnumerable <Resolver.PackageAction> ResolveActionsToUpdateOnePackage(string id, SemanticVersion version, IEnumerable <IProjectManager> projectManagers, bool projectNameSpecified) { var packageManager = projectManagers.First().PackageManager; var oldPackage = projectNameSpecified ? FindPackageToUpdate(id, version, packageManager, projectManagers.First()) : FindPackageToUpdate(id, version, packageManager, projectManagers, Logger); if (oldPackage.Item2 == null) { // we're updating a solution level package var package = packageManager.SourceRepository.FindPackage( id, version, AllowPrereleaseVersions, allowUnlisted: false); if (package == null) { Logger.Log(MessageLevel.Info, VsResources.NoUpdatesAvailable, id); return(Enumerable.Empty <Resolver.PackageAction>()); } Resolver.AddOperation(PackageAction.Update, package, new NullProjectManager(packageManager)); } else { AddUpdateOperations( id, version, projectManagers); } return(Resolver.ResolveActions()); }
void AddUnsafeUpdateOperation( string id, SemanticVersion version, bool targetVersionSetExplicitly, IProjectManager projectManager) { var oldPackage = projectManager.LocalRepository.FindPackage(id); if (oldPackage == null) { return; } Logger.Log(MessageLevel.Debug, NuGetResources.Debug_LookingForUpdates, id); var package = projectManager.PackageManager.SourceRepository.FindPackage( id, version, projectManager.ConstraintProvider, AllowPrereleaseVersions, allowUnlisted: false); // the condition (allowPrereleaseVersions || targetVersionSetExplicitly || oldPackage.IsReleaseVersion() || !package.IsReleaseVersion() || oldPackage.Version < package.Version) // is to fix bug 1574. We want to do nothing if, let's say, you have package 2.0alpha installed, and you do: // update-package // without specifying a version explicitly, and the feed only has version 1.0 as the latest stable version. if (package != null && oldPackage.Version != package.Version && (AllowPrereleaseVersions || targetVersionSetExplicitly || oldPackage.IsReleaseVersion() || !package.IsReleaseVersion() || oldPackage.Version < package.Version)) { Logger.Log(MessageLevel.Info, NuGetResources.Log_UpdatingPackages, package.Id, oldPackage.Version, package.Version, projectManager.Project.ProjectName); Resolver.AddOperation(PackageAction.Install, package, projectManager); } else { throw new Exception(String.Format(NuGetResources.InvalidVersionString, version.ToString())); } // Display message that no updates are available. IVersionSpec constraint = projectManager.ConstraintProvider.GetConstraint(package.Id); if (constraint != null) { Logger.Log(MessageLevel.Info, NuGetResources.Log_ApplyingConstraints, package.Id, VersionUtility.PrettyPrint(constraint), projectManager.ConstraintProvider.Source); } Logger.Log( MessageLevel.Info, NuGetResources.Log_NoUpdatesAvailableForProject, package.Id, projectManager.Project.ProjectName); }
void AddUnsafeUpdateOperation( string id, SemanticVersion version, bool targetVersionSetExplicitly, IProjectManager projectManager) { Logger.Log(MessageLevel.Debug, NuGetResources.Debug_LookingForUpdates, id); var package = projectManager.PackageManager.SourceRepository.FindPackage( id, version, projectManager.ConstraintProvider, AllowPrereleaseVersions, allowUnlisted: false); if (package != null) { Logger.Log(MessageLevel.Info, NuGetResources.Log_UpdatingPackages, package.Id, package.Version, projectManager.Project.ProjectName); Resolver.AddOperation(PackageAction.Install, package, projectManager); } else { throw new Exception(String.Format(NuGetResources.InvalidVersionString, version.ToString())); } // Display message that no updates are available. IVersionSpec constraint = projectManager.ConstraintProvider.GetConstraint(package.Id); if (constraint != null) { Logger.Log(MessageLevel.Info, NuGetResources.Log_ApplyingConstraints, package.Id, VersionUtility.PrettyPrint(constraint), projectManager.ConstraintProvider.Source); } Logger.Log( MessageLevel.Info, NuGetResources.Log_NoUpdatesAvailableForProject, package.Id, projectManager.Project.ProjectName); }
// Add update operations to the resolver private void AddUpdateOperations( string id, SemanticVersion version, IEnumerable <IProjectManager> projectManagers) { if (!Safe) { // Update to latest version foreach (var projectManager in projectManagers) { AddUnsafeUpdateOperation( id, version, version != null, projectManager); } } else { // safe update foreach (var projectManager in projectManagers) { IPackage installedPackage = projectManager.LocalRepository.FindPackage(id); if (installedPackage == null) { continue; } var safeRange = VersionUtility.GetSafeRange(installedPackage.Version); var package = projectManager.PackageManager.SourceRepository.FindPackage( id, safeRange, projectManager.ConstraintProvider, AllowPrereleaseVersions, allowUnlisted: false); Resolver.AddOperation(PackageAction.Install, package, projectManager); } } }