void DuplicateFinderJob::slotBugReportFetched(const BugReport &bug, QObject *owner) { if (this != owner) { return; } ParseBugBacktraces parse(bug, this); parse.parse(); BacktraceGenerator *btGenerator = DrKonqi::debuggerManager()->backtraceGenerator(); const ParseBugBacktraces::DuplicateRating rating = parse.findDuplicate(btGenerator->parser()->parsedBacktraceLines()); qDebug() << "Duplicate rating:" << rating; //TODO handle more cases here if (rating != ParseBugBacktraces::PerfectDuplicate) { qDebug() << "Bug" << bug.bugNumber() << "most likely not a duplicate:" << rating; analyzeNextBug(); return; } //The Bug is a duplicate, now find out the status and resolution of the existing report if (bug.resolutionValue() == BugReport::Duplicate) { qDebug() << "Found duplicate is a duplicate itself."; if (!m_result.duplicate) { m_result.duplicate = bug.bugNumberAsInt(); } fetchBug(bug.markedAsDuplicateOf()); } else if ((bug.statusValue() == BugReport::UnknownStatus) || (bug.resolutionValue() == BugReport::UnknownResolution)) { qDebug() << "Either the status or the resolution is unknown."; qDebug() << "Status \"" << bug.bugStatus() << "\" known:" << (bug.statusValue() != BugReport::UnknownStatus); qDebug() << "Resolution \"" << bug.resolution() << "\" known:" << (bug.resolutionValue() != BugReport::UnknownResolution); analyzeNextBug(); } else { if (!m_result.duplicate) { m_result.duplicate = bug.bugNumberAsInt(); } m_result.parentDuplicate = bug.bugNumberAsInt(); m_result.status = bug.statusValue(); m_result.resolution = bug.resolutionValue(); qDebug() << "Found duplicate information (id/status/resolution):" << bug.bugNumber() << bug.bugStatus() << bug.resolution(); emitResult(); } }