PackageUpgrader CheckPackageUpgrade(ILogger log, Package dependentPackage, PackageDependency dependency, Package dependencyPackage) { // Don't do anything if source is a system (read-only) package for now // We only want to process local packages if (dependentPackage.IsSystem) { return(null); } // Check if package might need upgrading var dependentPackagePreviousMinimumVersion = dependency.Version.MinVersion; if (dependentPackagePreviousMinimumVersion < dependencyPackage.Meta.Version) { // Find upgrader for given package // Note: If no upgrader is found, we assume it is still compatible with previous versions, so do nothing var packageUpgrader = AssetRegistry.GetPackageUpgrader(dependencyPackage.Meta.Name); if (packageUpgrader != null) { // Check if upgrade is necessary if (dependency.Version.MinVersion >= packageUpgrader.Attribute.PackageUpdatedVersionRange.MinVersion) { return(null); } // Check if upgrade is allowed if (dependency.Version.MinVersion < packageUpgrader.Attribute.PackageMinimumVersion) { // Throw an exception, because the package update is not allowed and can't be done throw new InvalidOperationException(string.Format("Upgrading package [{0}] to use [{1}] from version [{2}] to [{3}] is not supported", dependentPackage.Meta.Name, dependencyPackage.Meta.Name, dependentPackagePreviousMinimumVersion, dependencyPackage.Meta.Version)); } log.Info("Upgrading package [{0}] to use [{1}] from version [{2}] to [{3}] will be required", dependentPackage.Meta.Name, dependencyPackage.Meta.Name, dependentPackagePreviousMinimumVersion, dependencyPackage.Meta.Version); return(packageUpgrader); } } return(null); }
public PendingPackageUpgrade(PackageUpgrader packageUpgrader, PackageDependency dependency, Package dependencyPackage) { PackageUpgrader = packageUpgrader; Dependency = dependency; DependencyPackage = dependencyPackage; }
/// <summary> /// Performs the package migration, before assets are loaded /// </summary> /// <param name="session">The session.</param> /// <param name="log">The log.</param> /// <param name="dependentPackage">The source package.</param> /// <param name="dependency">The dependency.</param> /// <param name="dependencyPackage">The dependency package.</param> /// <param name="assetFiles">The asset files.</param> /// <returns></returns> public abstract bool Upgrade(PackageSession session, ILogger log, Package dependentPackage, PackageDependency dependency, Package dependencyPackage, IList <PackageLoadingAssetFile> assetFiles);
/// <summary> /// Performs the second step of package migration, after assets have been loaded. /// </summary> /// <param name="session">The session.</param> /// <param name="log">The log.</param> /// <param name="dependentPackage">The source package.</param> /// <param name="dependency">The dependency.</param> /// <param name="dependencyPackage">The dependency package.</param> /// <param name="dependencyVersionBeforeUpdate">The version before the update.</param> /// <returns></returns> public virtual bool UpgradeAfterAssetsLoaded(PackageSession session, ILogger log, Package dependentPackage, PackageDependency dependency, Package dependencyPackage, PackageVersionRange dependencyVersionBeforeUpdate) { return(true); }
/// <summary> /// Performs a preprocessing step of package migration, before assembly references are loaded. /// </summary> /// <param name="session">The session.</param> /// <param name="log">The log.</param> /// <param name="dependentPackage">The source package.</param> /// <param name="dependency">The dependency.</param> /// <param name="dependencyPackage">The dependency package.</param> /// <returns></returns> public virtual bool UpgradeBeforeAssembliesLoaded(PackageSession session, ILogger log, Package dependentPackage, PackageDependency dependency, Package dependencyPackage) { return(true); }