Imported Upstream version 3.10.0

Former-commit-id: 172c8e3c300b39d5785c7a3e8dfb08ebdbc1a99b
This commit is contained in:
Jo Shields
2014-10-04 11:27:48 +01:00
parent fe777c5c82
commit 8b9b85e7f5
970 changed files with 20242 additions and 31308 deletions

View File

@ -40,7 +40,7 @@ namespace Microsoft.Build.BuildEngine {
{
}
public bool Build (IBuildTask buildTask, out bool executeOnErrors)
public bool Build (IBuildTask buildTask, TaskExecutionMode taskExecutionMode, out bool executeOnErrors)
{
executeOnErrors = false;
try {
@ -49,15 +49,11 @@ namespace Microsoft.Build.BuildEngine {
// populate list of referenced items and metadata
ParseTaskAttributes (buildTask);
if (consumedMetadataReferences.Count == 0) {
// No batching required
if (ConditionParser.ParseAndEvaluate (buildTask.Condition, project))
return buildTask.Execute ();
else // skipped, it should be logged
return true;
return Execute (buildTask, taskExecutionMode);
}
BatchAndPrepareBuckets ();
return Run (buildTask, out executeOnErrors);
return Run (buildTask, taskExecutionMode, out executeOnErrors);
} finally {
consumedItemsByName = null;
consumedMetadataReferences = null;
@ -68,7 +64,7 @@ namespace Microsoft.Build.BuildEngine {
}
}
bool Run (IBuildTask buildTask, out bool executeOnErrors)
bool Run (IBuildTask buildTask, TaskExecutionMode taskExecutionMode, out bool executeOnErrors)
{
executeOnErrors = false;
@ -76,11 +72,9 @@ namespace Microsoft.Build.BuildEngine {
bool retval = true;
if (buckets.Count == 0) {
// batched mode, but no values in the corresponding items!
if (ConditionParser.ParseAndEvaluate (buildTask.Condition, project)) {
retval = buildTask.Execute ();
if (!retval && !buildTask.ContinueOnError)
executeOnErrors = true;
}
retval = Execute (buildTask, taskExecutionMode);
if (!retval && !buildTask.ContinueOnError)
executeOnErrors = true;
return retval;
}
@ -89,12 +83,10 @@ namespace Microsoft.Build.BuildEngine {
foreach (Dictionary<string, BuildItemGroup> bucket in buckets) {
project.PushBatch (bucket, commonItemsByName);
try {
if (ConditionParser.ParseAndEvaluate (buildTask.Condition, project)) {
retval = buildTask.Execute ();
if (!retval && !buildTask.ContinueOnError) {
executeOnErrors = true;
break;
}
retval = Execute (buildTask, taskExecutionMode);
if (!retval && !buildTask.ContinueOnError) {
executeOnErrors = true;
break;
}
} finally {
project.PopBatch ();
@ -104,6 +96,22 @@ namespace Microsoft.Build.BuildEngine {
return retval;
}
bool Execute (IBuildTask buildTask, TaskExecutionMode taskExecutionMode)
{
if (ConditionParser.ParseAndEvaluate (buildTask.Condition, project)) {
switch (taskExecutionMode) {
case TaskExecutionMode.Complete:
return buildTask.Execute ();
case TaskExecutionMode.SkipAndSetOutput:
return buildTask.ResolveOutputItems ();
default:
throw new NotImplementedException ();
}
}
return true;
}
// Parse task attributes to get list of referenced metadata and items
// to determine batching