public Build ( |
||
options | ||
iniData | ||
Résultat |
public BuildResult Build ( BuildOptions options, IniData iniData )
{
BuildResult result = new BuildResult();
context = new BuildContext( options, iniData );
var ignorePatterns = new string[0];
if ( iniData.Sections.ContainsSection("Ignore") ) {
ignorePatterns = iniData.Sections["Ignore"]
.Select( element => element.KeyName )
.Select( key => ContentUtils.BackslashesToSlashes( key ) )
.ToArray();
}
if ( iniData.Sections.ContainsSection("Download") ) {
Download( context, iniData.Sections["Download"], result );
}
//
// gather files on source folder ignoring
// files that match ignore pattern :
//
Log.Message("Gathering files...");
var assetSources = GatherAssetFiles( ignorePatterns, iniData, context, ref result );
Log.Message("");
//
// Check hash collisions :
//
var collisions = assetSources
.GroupBy( file0 => file0.TargetName )
.Where( fileGroup1 => fileGroup1.Count() > 1 )
.Distinct()
.ToArray();
if (collisions.Any()) {
Log.Error("Hash collisions detected:");
int collisionCount = 0;
foreach ( var collision in collisions ) {
Log.Error(" [{0}] {1}", collisionCount++, collision.Key);
foreach ( var collisionEntry in collision ) {
Log.Error( " {0}", collisionEntry.FullSourcePath );
}
}
throw new BuildException("Hash collisions detected");
}
//
// remove stale built content :
//
Log.Message("Cleaning stale content up...");
CleanStaleContent( options.FullOutputDirectory, assetSources );
Log.Message("");
//
// Build everything :
//
foreach ( var assetSource in assetSources ) {
var proc = assetSource.CreateProcessor();
BuildAsset( proc, assetSource.BuildArguments, assetSource, ref result );
}
return result;
}
Builder::Build ( |
/// <summary> /// /// </summary> /// <param name="options"></param> public static void Build ( BuildOptions options ) { Log.Message(""); Log.Message("-------- Build started : {0} --------", options.InputDirectory ); options.CheckOptionsAndMakeDirs(); Log.Message("Reading '.content'..."); // // Parse INI file : // var ip = new StreamIniDataParser(); ip.Parser.Configuration.AllowDuplicateSections = true; ip.Parser.Configuration.AllowDuplicateKeys = true; ip.Parser.Configuration.CommentString = "#"; ip.Parser.Configuration.OverrideDuplicateKeys = true; ip.Parser.Configuration.KeyValueAssigmentChar = '='; ip.Parser.Configuration.AllowKeysWithoutValues = true; var iniData = ip.ReadData( new StreamReader( options.ContentIniFile ) ); // // Setup builder : // var bindings = AssetProcessorBinding.GatherAssetProcessors(); Log.Message("Asset processors:"); foreach ( var bind in bindings ) { Log.Message(" {0,-20} - {1}", bind.Name, bind.Type.Name ); } Log.Message(""); var builder = new Builder( bindings ); var result = builder.Build( options, iniData ); Log.Message("-------- {5} total, {0} succeeded, {1} failed, {2} up-to-date, {3} ignored, {4} skipped --------", result.Succeded, result.Failed, result.UpToDate, result.Ignored, result.Skipped, result.Total ); Log.Message(""); if (result.Failed>0) { throw new BuildException("Build errors"); } }