示例#1
0
        private void AddBuildJob(IPipelineRunManager pipelineRunManager, BuildJob job, List <RunnableJob> runnableJobs, HashSet <BuildJob> dependentJobs, IDictionary <BuildJob, IJobStatus> jobMap)
        {
            if (dependentJobs.Contains(job))
            {
                throw new CircularDependencyException();
            }

            if (jobMap.ContainsKey(job))
            {
                return;
            }

            dependentJobs.Add(job);

            foreach (var input in job.Input)
            {
                switch (input.Source)
                {
                case ArtifactBuildInput artifact:
                    AddBuildJob(pipelineRunManager, artifact.Job, runnableJobs, dependentJobs, jobMap);
                    break;
                }
            }

            dependentJobs.Remove(job);

            var runnable = new RunnableJob(pipelineRunManager, job, jobMap);

            jobMap.Add(job, runnable.JobStatus);
            runnableJobs.Add(runnable);
        }
示例#2
0
 /// <summary>Run the job on the current thread</summary>
 /// <param name="jobManager">The parent job manager.</param>
 /// <param name="workerThread">Cancellation pending?</param>
 internal void Run(JobManager jobManager, BackgroundWorker workerThread)
 {
     try
     {
         RunnableJob.Run(jobManager, workerThread);
     }
     catch (Exception err)
     {
         Error = err;
     }
     finally
     {
         worker      = null;
         isCompleted = true;
     }
 }