public override bool Execute()
        {
            int buildId;

            try {
                dynamic buildEngine = BuildEngine.AccessPrivate();

                var     host  = buildEngine.host;
                dynamic pHost = new AccessPrivateWrapper(host);
                var     bp    = pHost.buildParameters;
                dynamic pBp   = new AccessPrivateWrapper(bp);

                buildId = pBp.buildId;

                lock (typeof(InvokeBuild)) {
                    if (buildId <= MaxBuildId)
                    {
                        // this happens when we build a solution, and it wants to build each project
                        return(true);
                    }
                    MaxBuildId = buildId;
                }
            }
            catch {
            }

            using (new PushDirectory(Environment.CurrentDirectory)) {
                try {
                    if (Location.Is())
                    {
                        Environment.CurrentDirectory = Location.GetFullPath();
                    }

                    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.");
                        }
                    }

                    if (!File.Exists(ScriptFile))
                    {
                        throw new ClrPlusException(@"Unable to find Invoke-build script file '{0}'.".format(ScriptFile));
                    }

                    string[] defines = Defines.IsNullOrEmpty() ? new string[0] : Defines.Select(each => each.ItemSpec).ToArray();

                    using (var buildScript = new BuildScript(ScriptFile)) {
                        buildScript.BuildMessage += message => {
                            try {
                                switch (message.EventType)
                                {
                                case "BuildWarning":
                                    Log.LogWarning(message.Subcategory, message.Code, message.HelpKeyword, message.File, message.LineNumber, message.ColumnNumber, message.EndLineNumber, message.EndColumnNumber, message.Message);
                                    break;

                                case "BuildError":
                                    Log.LogError(message.Subcategory, message.Code, message.HelpKeyword, message.File, message.LineNumber, message.ColumnNumber, message.EndLineNumber, message.EndColumnNumber, message.Message);
                                    break;

                                case "ProjectStarted":
                                    Log.LogExternalProjectStarted(message.Message, message.HelpKeyword, message.ProjectFile, message.TargetNames);
                                    break;

                                case "ProjectFinished":
                                    Log.LogExternalProjectFinished(message.Message, message.HelpKeyword, message.ProjectFile, message.Succeeded);
                                    break;

                                case "TaskStarted":
                                    Log.LogMessage(MessageImportance.Low, message.Message);
                                    break;

                                case "TaskFinished":
                                    Log.LogMessage(MessageImportance.Low, message.Message);
                                    break;

                                case "TargetStarted":
                                    Log.LogMessage(MessageImportance.Low, message.Message);
                                    break;

                                case "TargetFinished":
                                    Log.LogMessage(MessageImportance.Low, message.Message);
                                    break;

                                case "BuildStarted":
                                    Log.LogMessage(MessageImportance.Low, message.Message);
                                    break;

                                case "BuildFinished":
                                    Log.LogMessage(MessageImportance.Low, message.Message);
                                    break;

                                case "BuildMessage":
                                    Log.LogMessage((MessageImportance)message.Importance, message.Message);
                                    break;

                                default:
                                    Log.LogMessage(MessageImportance.Low, message.Message);
                                    break;
                                }
                            }
                            catch (Exception e) {
                                LogError("{0}/{1}/{2}", e.GetType().Name, e.Message, e.StackTrace);
                            }
                            return(false);
                        };

                        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);
                        }

                        var targets = Targets.IsNullOrEmpty() ? new string[0] : Targets.Select(each => each.ItemSpec).ToArray();

                        if (Targets.IsNullOrEmpty())
                        {
                            targets = new string[] {
                                "default"
                            };
                        }

                        Environment.SetEnvironmentVariable("MaxThreads", "" + MaxThreads);
                        Environment.SetEnvironmentVariable("HIDE_THREADS", "true");

                        buildScript.MaxThreads = MaxThreads;
                        return(buildScript.Execute(targets));
                    }
                } catch (Exception e) {
                    LogError("{0}/{1}/{2}".format(e.GetType().Name, e.Message, e.StackTrace));
                    return(false);
                } finally {
                    Environment.SetEnvironmentVariable("HIDE_THREADS", null);
                    Environment.SetEnvironmentVariable("MaxThreads", null);
                }
            }
        }
示例#2
0
        public override bool Execute() {
            int buildId;

            try {
                dynamic buildEngine = BuildEngine.AccessPrivate();

                var host = buildEngine.host;
                dynamic pHost = new AccessPrivateWrapper(host);
                var bp = pHost.buildParameters;
                dynamic pBp = new AccessPrivateWrapper(bp);

                buildId = pBp.buildId;

                lock (typeof(InvokeBuild)) {
                    if (buildId <= MaxBuildId) {
                        // this happens when we build a solution, and it wants to build each project
                        return true;
                    }
                    MaxBuildId = buildId;
                }
            }
            catch {
            
            }

            using (new PushDirectory(Environment.CurrentDirectory)) {
                try {
                    if (Location.Is()) {
                        Environment.CurrentDirectory = Location.GetFullPath();
                    }

                    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.");
                        }
                    }

                    if (!File.Exists(ScriptFile)) {
                        throw new ClrPlusException(@"Unable to find Invoke-build script file '{0}'.".format(ScriptFile));
                    }

                    string[] defines = Defines.IsNullOrEmpty() ? new string[0] : Defines.Select(each => each.ItemSpec).ToArray();

                    using (var buildScript = new BuildScript(ScriptFile)) {

                        buildScript.BuildMessage += message => {
                            try {
                                switch (message.EventType) {
                                    case "BuildWarning":
                                        Log.LogWarning(message.Subcategory, message.Code, message.HelpKeyword, message.File, message.LineNumber, message.ColumnNumber, message.EndLineNumber, message.EndColumnNumber, message.Message);
                                        break;
                                    case "BuildError":
                                        Log.LogError(message.Subcategory, message.Code, message.HelpKeyword, message.File, message.LineNumber, message.ColumnNumber, message.EndLineNumber, message.EndColumnNumber, message.Message);
                                        break;
                                    case "ProjectStarted":
                                        Log.LogExternalProjectStarted(message.Message, message.HelpKeyword, message.ProjectFile, message.TargetNames);
                                        break;
                                    case "ProjectFinished":
                                        Log.LogExternalProjectFinished(message.Message, message.HelpKeyword, message.ProjectFile, message.Succeeded);
                                        break;
                                    case "TaskStarted":
                                        Log.LogMessage(MessageImportance.Low, message.Message);
                                        break;
                                    case "TaskFinished":
                                        Log.LogMessage(MessageImportance.Low, message.Message);
                                        break;
                                    case "TargetStarted":
                                        Log.LogMessage(MessageImportance.Low, message.Message);
                                        break;
                                    case "TargetFinished":
                                        Log.LogMessage(MessageImportance.Low, message.Message);
                                        break;
                                    case "BuildStarted":
                                        Log.LogMessage(MessageImportance.Low, message.Message);
                                        break;
                                    case "BuildFinished":
                                        Log.LogMessage(MessageImportance.Low, message.Message);
                                        break;
                                    case "BuildMessage":
                                        Log.LogMessage((MessageImportance)message.Importance, message.Message);
                                        break;
                                    default:
                                        Log.LogMessage(MessageImportance.Low, message.Message);
                                        break;
                                }
                                
                            }
                            catch (Exception e) {
                                LogError("{0}/{1}/{2}", e.GetType().Name, e.Message, e.StackTrace );
                            }
                            return false;
                        };

                        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);
                        }

                        var targets = Targets.IsNullOrEmpty() ? new string[0] : Targets.Select(each => each.ItemSpec).ToArray();

                        if (Targets.IsNullOrEmpty()) {
                            targets = new string[] {
                                "default"
                            };
                        }

                        Environment.SetEnvironmentVariable("MaxThreads", "" + MaxThreads);
                        Environment.SetEnvironmentVariable("HIDE_THREADS", "true");

                        buildScript.MaxThreads = MaxThreads;
                        return buildScript.Execute(targets);
                    }

                } catch (Exception e) {
                    LogError("{0}/{1}/{2}".format(e.GetType().Name, e.Message, e.StackTrace));
                    return false;
                } finally {
                    Environment.SetEnvironmentVariable("HIDE_THREADS", null);
                    Environment.SetEnvironmentVariable("MaxThreads", null);
                }
            }

        }
示例#3
0
        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);
                    }
                }
            }
        }