/** * Parse an individual uncovered source file. **/ public function ParseUncoveredSourceFile($fileinfo, $path) { $coverageFileLog = new CoverageFileLog(); $coverageFileLog->AggregateBuildId = $this->AggregateBuildId; $coverageFileLog->PreviousAggregateParentId = $this->PreviousAggregateParentId; $coverageFile = new CoverageFile(); $coverageFile->FullPath = trim($path); $coverage = new Coverage(); $coverage->CoverageFile = $coverageFile; // SplFileObject was giving me an erroneous extra line at the // end of the file, so instead we use good old file(). $lines = file($fileinfo); $lineNumber = 0; foreach ($lines as $line) { $sourceLine = rtrim($line); $coverageFile->File .= $sourceLine; $coverageFile->File .= '<br>'; $coverageFileLog->AddLine($lineNumber, 0); $lineNumber++; } // Save this source file to the database. $coverageFile->TrimLastNewline(); $coverageFile->Update($this->Build->Id); // Check if this build already has coverage for this file. // If so, return early so we don't overwrite it with a blank entry. $coverage->BuildId = $this->Build->Id; if ($coverage->Exists()) { return false; } // Otherwise save the line-by-line coverage to the database. $coverageFileLog->BuildId = $this->Build->Id; $coverageFileLog->FileId = $coverageFile->Id; $coverageFileLog->Insert(true); $coverage->LocUntested = $lineNumber; $coverage->LocTested = 0; $coverage->Covered = 1; // Add any labels. if (array_key_exists($path, $this->Labels)) { foreach ($this->Labels[$path] as $labelText) { $label = new Label(); $label->SetText($labelText); $coverage->AddLabel($label); } } // Add this Coverage to our summary. $this->CoverageSummary->AddCoverage($coverage); }