Beispiel #1
0
        public void TestFailure1()
        {
            var p1 = new Project {
                Filename = @"C:\1"
            };
            var p2 = new Project {
                Filename = @"C:\2"
            };

            _graph.Add(p1, new BuildEnvironment());
            _graph.Add(p2, new BuildEnvironment());
            _graph.AddDependency(p2, p1);

            Project          next;
            BuildEnvironment unused;

            _graph.TryGetNextProject(out next, out unused).Should().BeTrue();
            next.Should().Be(p1);

            _graph.MarkAsFailed(p1);
            _graph.FailedCount.Should().Be(1);
            _graph.TryGetNextProject(out next, out unused)
            .Should()
            .BeFalse("because p2 depends on p1 and because the latter has failed, the former may not be build next");

            _graph.FinishedEvent.Wait(TimeSpan.Zero).Should().BeTrue("Because no more projects can be build");
        }
Beispiel #2
0
        private void Run()
        {
            try
            {
                while (true)
                {
                    Project          project;
                    BuildEnvironment environment;
                    if (_graph.TryGetNextProject(out project, out environment))
                    {
                        var logger = _buildLog.CreateLogger();
                        try
                        {
                            _taskEngine.Run(project,
                                            _target,
                                            environment,
                                            _graph,
                                            logger);

                            if (logger.HasErrors)
                            {
                                _graph.MarkAsFailed(project);
                            }
                            else
                            {
                                _graph.MarkAsSuccess(project);
                            }
                        }
                        catch (BuildException e)
                        {
                            logger.WriteLine(Verbosity.Quiet, "error: {0}", e.Message);

                            Log.ErrorFormat("Cauhgt exception while building project '{0}': {1}",
                                            project.Filename,
                                            e);

                            _graph.MarkAsFailed(project);
                        }
                        catch (Exception e)
                        {
                            logger.WriteLine(Verbosity.Quiet, "error: Internal build error: {0}", e);

                            Log.ErrorFormat("Cauhgt unexpected exception while building project '{0}': {1}",
                                            project.Filename,
                                            e);

                            _graph.MarkAsFailed(project);
                        }
                    }
                    else
                    {
                        if (_graph.FinishedEvent.Wait(TimeSpan.FromSeconds(100)))
                        {
                            break;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Log.FatalFormat("Caught unexpected exception: {0}", e);
            }
            finally
            {
                _isFinished = true;
            }
        }