public static void RunBuildInProcess(BuildJob job, BuildSettings settings)
		{
			if (job == null)
				throw new ArgumentNullException("job");
			if (settings == null)
				throw new ArgumentNullException("settings");
			lock (lockObject) {
				if (inProcessBuildWorker == null)
					inProcessBuildWorker = new Program();
			}
			inProcessBuildWorker.BuildInProcess(settings, job);
		}
		public static void StartBuild(BuildJob job, BuildSettings settings)
		{
			if (job == null)
				throw new ArgumentNullException("job");
			if (settings == null)
				throw new ArgumentNullException("settings");
			
			BuildRun buildRun = new BuildRun(job, settings);
			lock (lockObject) {
				if (freeWorkerProcesses.Count > 0) {
					DequeueFreeWorkerProcess().StartBuild(buildRun);
				} else {
					outstandingBuildRuns.Enqueue(buildRun);
					if (workerProcessCount < MaxWorkerProcessCount) {
						workerProcessCount++;
						(new WorkerProcessHost()).Start();
					}
				}
			}
		}
Beispiel #3
0
 internal void BuildInProcess(BuildSettings settings, BuildJob job)
 {
     lock (this) {
         if (currentJob != null)
             throw new InvalidOperationException("Already running a job");
         currentJob = job;
         requestCancellation = false;
         hostEventSource = new EventSource();
     }
     job.CancelCallback = delegate {
         lock (this) {
             if (currentJob == job) {
                 requestCancellation = true;
             }
         }
     };
     bool success = false;
     try {
         foreach (ILogger logger in settings.Logger) {
             logger.Initialize(hostEventSource);
         }
         success = DoBuild();
         foreach (ILogger logger in settings.Logger) {
             logger.Shutdown();
         }
     } finally {
         lock (this) {
             currentJob = null;
         }
         if (settings.BuildDoneCallback != null)
             settings.BuildDoneCallback(success);
     }
 }
			public BuildRun(BuildJob job, BuildSettings settings)
			{
				this.job = job;
				this.settings = settings;
				foreach (ILogger logger in settings.Logger) {
					logger.Initialize(eventSource);
				}
			}