4 using System.Collections.Generic;
7 using SiliconStudio.Assets.Diagnostics;
8 using SiliconStudio.Core.Diagnostics;
9 using SiliconStudio.Core.IO;
10 using SiliconStudio.Core.Serialization;
12 namespace SiliconStudio.Assets.Analysis
21 private readonly
Package package;
26 if (package == null)
throw new ArgumentNullException(
"package");
28 this.package = package;
60 if (log == null)
throw new ArgumentNullException(
"log");
63 if (
string.IsNullOrWhiteSpace(package.Meta.Name) && package.FullPath != null)
65 package.Meta.Name = package.FullPath.GetFileName();
66 package.IsDirty =
true;
69 if (Parameters.IsPackageCheckDependencies)
71 CheckDependencies().CopyTo(log);
74 if (Parameters.IsProcessingUPaths)
76 ProcessPackageUPaths();
79 ProcessAssets().CopyTo(log);
91 if (package.Session == null)
97 if (Parameters.ConvertUPathTo ==
UPathType.Relative && package.FullPath == null)
99 log.Error(package, null, AssetMessageCode.PackageFilePathNotSet);
104 foreach (var packageDependency
in package.Meta.Dependencies)
107 var subPackage = package.Session.Packages.Find(packageDependency);
108 if (subPackage == null)
112 log.Warning(package, null, AssetMessageCode.PackageDependencyModified, packageDependency, PackageStore.Instance.DefaultPackageMinVersion);
113 packageDependency.Version = PackageStore.Instance.DefaultPackageMinVersion;
114 package.IsDirty =
true;
118 log.Error(package, null, AssetMessageCode.PackageNotFound, packageDependency);
124 foreach (var packageReference
in package.LocalDependencies)
127 var newSubPackage = package.Session.Packages.Find(packageReference.Id);
128 if (newSubPackage == null)
130 log.Error(package, null, AssetMessageCode.PackageNotFound, packageReference.Location);
134 if (newSubPackage.FullPath == null || newSubPackage.IsSystem)
140 var pathToSubPackage = Parameters.ConvertUPathTo == UPathType.Relative ? newSubPackage.FullPath.MakeRelative(package.RootDirectory) : newSubPackage.FullPath;
141 if (packageReference.Location != pathToSubPackage)
144 packageReference.Location = pathToSubPackage;
146 if (Parameters.SetDirtyFlagOnAssetWhenFixingUFile)
148 package.IsDirty =
true;
163 if (package.FullPath == null)
168 var packageReferenceLinks = AssetReferenceAnalysis.Visit(package);
169 CommonAnalysis.UpdatePaths(package, packageReferenceLinks.Where(link => link.Reference is
UPath), Parameters);
176 var assets = (package.TemporaryAssets.Count > 0 ? (
IEnumerable<AssetItem>)package.TemporaryAssets : package.Assets);
178 foreach (var assetItem
in assets)
180 AssetAnalysis.Run(assetItem, log, Parameters);
string DefaultPackageName
Gets or sets the default package name (mainly used in dev environment).
static PackageStore Instance
Gets the default package manager.
PackageAnalysis(Package package, PackageAnalysisParameters parameters=null)
SiliconStudio.Core.Diagnostics.LoggerResult LoggerResult
A logger that stores messages locally useful for internal log scenarios.
Class PackageAnalysisParameters. This class cannot be inherited.
Manage packages locally installed and accessible on the store.
An analysis to check the validity of a Package, convert UFile or UDirectory references to absolute/re...
LoggerResult ProcessAssets()
LoggerResult CheckDependencies()
Checks the package.
UPathType
Describes if a UPath is relative or absolute.
Base class that describes a uniform path and provides method to manipulate them. Concrete class are U...
void Run(ILogger log)
Runs a full analysis on this package.
LoggerResult Run()
Runs a full analysis on this package.
A package managing assets.
void ProcessPackageUPaths()
Processes the UPaths on package (but not on assets, use ProcessAssets for this)