protected override void BeginProcessing() {
#if USING_RESTABLE_CMDLET
if (Remote) {
ProcessRecordViaRest();
return;
}
#endif
using (new PushDirectory(Path.Combine(SessionState.Drive.Current.Root, SessionState.Drive.Current.CurrentLocation) )) {
// Invoking a ptk script.
if (string.IsNullOrWhiteSpace(ScriptFile)) {
// search for it.
ScriptFile = new[] {
@"copkg\.buildinfo", @"contrib\.buildinfo", @"contrib\coapp\.buildinfo", @".buildinfo"
}.WalkUpPaths();
if (string.IsNullOrEmpty(ScriptFile)) {
throw new ClrPlusException(@"Unable to find .buildinfo file anywhere in the current directory structure.");
}
}
using (var local = LocalEventSource) {
local.Events += new SourceError((code, location, message, objects) => {
location = location.IsNullOrEmpty() ? SourceLocation.Unknowns : location;
Host.UI.WriteErrorLine("{0}:{1}:{2}".format(location.FirstOrDefault(), code, message.format(objects)));
return true;
});
if (!NoWarnings) {
local.Events += new SourceWarning((code, location, message, objects) => {
WriteWarning(message);
return false;
});
}
local.Events += new SourceDebug((code, location, message, objects) => {
WriteVerbose(message);
return false;
});
local.Events += new MSBuildMessage((obj) => {
switch (obj.EventType) {
case "BuildWarning":
if (!NoWarnings) {
Host.UI.WriteLine("{0}:{1}:{2}".format(obj.File, obj.Code, obj.Message));
}
break;
case "BuildError":
Host.UI.WriteErrorLine("{0}:{1}:{2}".format(obj.File, obj.Code, obj.Message));
break;
case "ProjectStarted":
case "ProjectFinished":
case "TaskStarted":
case "TaskFinished":
case "TargetStarted":
case "TargetFinished":
case "BuildStarted":
case "BuildFinished":
WriteVerbose(obj.Message);
break;
case "BuildMessage":
if (filterMessages.Any(each => obj.Message.IndexOf(each) > -1)) {
WriteVerbose(obj.Message);
}
else {
Host.UI.WriteLine(obj.Message);
}
break;
default:
WriteVerbose(obj.Message);
break;
}
return false;
});
using (buildScript = new BuildScript(ScriptFile)) {
if (Defines != null) {
foreach (var i in Defines) {
var p = i.IndexOf("=");
var k = p > -1 ? i.Substring(0, p) : i;
var v = p > -1 ? i.Substring(p + 1) : "";
buildScript.AddMacro(k, v);
}
}
if (Define != null) {
foreach (var i in Define) {
var p = i.IndexOf("=");
var k = p > -1 ? i.Substring(0, p) : i;
var v = p > -1 ? i.Substring(p + 1) : "";
buildScript.AddMacro(k, v);
}
}
if (Targets.IsNullOrEmpty()) {
Targets = new string[] {
"default"
};
}
if (SaveScript) {
WriteObject("Script Saved To: {0}".format( buildScript.EmitScript()));
return;
}
if (DumpScript) {
WriteObject(buildScript.ScriptText());
return;
}
Environment.SetEnvironmentVariable("MaxThreads", ""+MaxThreads);
buildScript.MaxThreads = MaxThreads;
buildScript.Execute(Targets);
}
}
}
}