Skip to content

Commit

Permalink
Fix task positions in outputwindow
Browse files Browse the repository at this point in the history
* fixed the task offset for tasks created directly by build steps
* no longer clear output window for new build step
* update task navigation by outputwindow to capture tasks from output parsers
* qbs build steps now only report first task for failure
* qbs build steps do not convert from path to string to path uselessly
  • Loading branch information
arBmind committed Feb 25, 2022
1 parent 22d4654 commit 1be86dd
Show file tree
Hide file tree
Showing 11 changed files with 39 additions and 46 deletions.
14 changes: 12 additions & 2 deletions src/plugins/coreplugin/outputwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ class OutputWindowPrivate
QTimer scrollTimer;
QElapsedTimer lastMessage;
QHash<unsigned int, QPair<int, int>> taskPositions;
int lineCount = 0; // correct line count to apply offsets
};

} // namespace Internal
Expand Down Expand Up @@ -494,6 +495,12 @@ void OutputWindow::appendMessage(const QString &output, OutputFormat format)
d->queuedOutput.last().first.append(output);
if (!d->queueTimer.isActive())
d->queueTimer.start();

d->lineCount += output.count('\n');
}

int OutputWindow::directTaskOffset() const {
return document()->blockCount() - d->lineCount;
}

void OutputWindow::registerPositionOf(unsigned taskId, int linkedOutputLines, int skipLines,
Expand All @@ -507,6 +514,7 @@ void OutputWindow::registerPositionOf(unsigned taskId, int linkedOutputLines, in
const int lastLine = firstLine + linkedOutputLines - 1;

d->taskPositions.insert(taskId, qMakePair(firstLine, lastLine));
if (d->taskPositions.size() ==1) emit hasPositionsChanged();
}

bool OutputWindow::knowsPositionOf(unsigned taskId) const
Expand Down Expand Up @@ -628,7 +636,10 @@ void OutputWindow::clear()
{
d->formatter.clear();
d->scrollToBottom = true;
auto hadTaskPositions = hasPositions();
d->taskPositions.clear();
d->lineCount = 0;
if (hadTaskPositions) emit hasPositionsChanged();
}

void OutputWindow::flush()
Expand All @@ -650,8 +661,7 @@ void OutputWindow::reset()
{
flush();
d->queueTimer.stop();
d->formatter.reset();
d->scrollToBottom = true;
clear();
if (!d->queuedOutput.isEmpty()) {
d->queuedOutput.clear();
d->formatter.appendMessage(tr("[Discarding excessive amount of pending output.]\n"),
Expand Down
2 changes: 2 additions & 0 deletions src/plugins/coreplugin/outputwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ class CORE_EXPORT OutputWindow : public QPlainTextEdit

void appendMessage(const QString &out, Utils::OutputFormat format);

int directTaskOffset() const;
void registerPositionOf(unsigned taskId, int linkedOutputLines, int skipLines, int offset = 0);
bool knowsPositionOf(unsigned taskId) const;
void showPositionOf(unsigned taskId);
Expand Down Expand Up @@ -95,6 +96,7 @@ class CORE_EXPORT OutputWindow : public QPlainTextEdit

signals:
void wheelZoom();
void hasPositionsChanged();

public slots:
void setWordWrapEnabled(bool wrap);
Expand Down
3 changes: 2 additions & 1 deletion src/plugins/projectexplorer/buildmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -748,7 +748,8 @@ void BuildManager::nextStep()
connect(d->m_currentBuildStep, &BuildStep::finished, instance(), finishedHandler);
connect(d->m_currentBuildStep, &BuildStep::progress,
instance(), &BuildManager::progressChanged);
d->m_outputWindow->reset();
// d->m_outputWindow->reset();
d->m_outputWindow->outputFormatter()->reset();
d->m_currentBuildStep->setupOutputFormatter(d->m_outputWindow->outputFormatter());
d->m_currentBuildStep->run();
} else {
Expand Down
7 changes: 4 additions & 3 deletions src/plugins/projectexplorer/compileoutputwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@ CompileOutputWindow::CompileOutputWindow(QAction *cancelBuildAction) :
m_outputWindow->setUndoRedoEnabled(false);
m_outputWindow->setMaxCharCount(Core::Constants::DEFAULT_MAX_CHAR_COUNT);

connect(m_outputWindow, &Core::OutputWindow::hasPositionsChanged, this, &IOutputPane::navigateStateChanged);

Utils::ProxyAction *cancelBuildProxyButton =
Utils::ProxyAction::proxyActionWithIcon(cancelBuildAction,
Utils::Icons::STOP_SMALL_TOOLBAR.icon());
Expand Down Expand Up @@ -222,10 +224,9 @@ bool CompileOutputWindow::canNavigate() const
return true;
}

void CompileOutputWindow::registerPositionOf(const Task &task, int linkedOutputLines, int skipLines,
int offset)
void CompileOutputWindow::registerPositionOf(const Task &task, int linkedOutputLines, int skipLines)
{
m_outputWindow->registerPositionOf(task.taskId, linkedOutputLines, skipLines, offset);
m_outputWindow->registerPositionOf(task.taskId, linkedOutputLines, skipLines, m_outputWindow->directTaskOffset());
}

void CompileOutputWindow::scrollToFirstTask()
Expand Down
2 changes: 1 addition & 1 deletion src/plugins/projectexplorer/compileoutputwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class CompileOutputWindow final : public Core::IOutputPane

void appendText(const QString &text, BuildStep::OutputFormat format);

void registerPositionOf(const Task &task, int linkedOutputLines, int skipLines, int offset = 0);
void registerPositionOf(const Task &task, int linkedOutputLines, int skipLines);
void scrollToFirstTask();

void flush();
Expand Down
18 changes: 5 additions & 13 deletions src/plugins/qbsprojectmanager/qbsbuildstep.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -432,12 +432,11 @@ void QbsBuildStep::buildingDone(const ErrorInfo &error)
m_session->disconnect(this);
m_session = nullptr;
m_lastWasSuccess = !error.hasError();
for (const ErrorInfoItem &item : qAsConst(error.items)) {
createTaskAndOutput(
ProjectExplorer::Task::Error,
item.description,
item.filePath.toString(),
item.line);
bool isFirst = true;
for (const ErrorInfoItem &item : error.items) {
emit addOutput(item.description, OutputFormat::Stdout);
if (isFirst) emit addTask(CompileTask(Task::Error, item.description, item.filePath, item.line), 1);
isFirst = false;
}

// Building can uncover additional target artifacts.
Expand Down Expand Up @@ -505,13 +504,6 @@ void QbsBuildStep::handleProcessResult(
emit addOutput(line, OutputFormat::Stdout);
}

void QbsBuildStep::createTaskAndOutput(ProjectExplorer::Task::TaskType type, const QString &message,
const QString &file, int line)
{
emit addOutput(message, OutputFormat::Stdout);
emit addTask(CompileTask(type, message, FilePath::fromString(file), line), 1);
}

QString QbsBuildStep::buildVariant() const
{
return qbsConfiguration(PreserveVariables).value(Constants::QBS_CONFIG_VARIANT_KEY).toString();
Expand Down
3 changes: 0 additions & 3 deletions src/plugins/qbsprojectmanager/qbsbuildstep.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,6 @@ class QbsBuildStep final : public ProjectExplorer::BuildStep
const QStringList &stdErr,
bool success);

void createTaskAndOutput(ProjectExplorer::Task::TaskType type,
const QString &message, const QString &file, int line);

void setBuildVariant(const QString &variant);
void setConfiguredArchitectures(const QStringList &architectures);
QString profile() const;
Expand Down
15 changes: 7 additions & 8 deletions src/plugins/qbsprojectmanager/qbscleanstep.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,8 +142,13 @@ void QbsCleanStep::cleaningDone(const ErrorInfo &error)
m_session->disconnect(this);
m_session = nullptr;

for (const ErrorInfoItem &item : error.items)
createTaskAndOutput(Task::Error, item.description, item.filePath.toString(), item.line);
bool isFirst = true;
for (const ErrorInfoItem &item : error.items) {
emit addOutput(item.description, OutputFormat::Stdout);
if (isFirst) emit addTask(CompileTask(Task::Error, item.description, item.filePath, item.line), 1);
isFirst = false;
}

emit finished(!error.hasError());
}

Expand All @@ -159,12 +164,6 @@ void QbsCleanStep::handleProgress(int value)
emit progress(value * 100 / m_maxProgress, m_description);
}

void QbsCleanStep::createTaskAndOutput(ProjectExplorer::Task::TaskType type, const QString &message, const QString &file, int line)
{
emit addOutput(message, OutputFormat::Stdout);
emit addTask(CompileTask(type, message, Utils::FilePath::fromString(file), line), 1);
}

// --------------------------------------------------------------------
// QbsCleanStepFactory:
// --------------------------------------------------------------------
Expand Down
3 changes: 0 additions & 3 deletions src/plugins/qbsprojectmanager/qbscleanstep.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,6 @@ class QbsCleanStep final : public ProjectExplorer::BuildStep
void handleTaskStarted(const QString &desciption, int max);
void handleProgress(int value);

void createTaskAndOutput(ProjectExplorer::Task::TaskType type,
const QString &message, const QString &file, int line);

Utils::BoolAspect *m_dryRunAspect = nullptr;
Utils::BoolAspect *m_keepGoingAspect = nullptr;

Expand Down
15 changes: 6 additions & 9 deletions src/plugins/qbsprojectmanager/qbsinstallstep.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,8 +139,12 @@ void QbsInstallStep::installDone(const ErrorInfo &error)
m_session->disconnect(this);
m_session = nullptr;

for (const ErrorInfoItem &item : error.items)
createTaskAndOutput(Task::Error, item.description, item.filePath, item.line);
bool isFirst = true;
for (const ErrorInfoItem &item : error.items) {
emit addOutput(item.description, OutputFormat::Stdout);
if (isFirst) emit addTask(CompileTask(Task::Error, item.description, item.filePath, item.line), 1);
isFirst = false;
}

emit finished(!error.hasError());
}
Expand All @@ -157,13 +161,6 @@ void QbsInstallStep::handleProgress(int value)
emit progress(value * 100 / m_maxProgress, m_description);
}

void QbsInstallStep::createTaskAndOutput(Task::TaskType type, const QString &message,
const Utils::FilePath &file, int line)
{
emit addOutput(message, OutputFormat::Stdout);
emit addTask(CompileTask(type, message, file, line), 1);
}

QbsBuildStepData QbsInstallStep::stepData() const
{
QbsBuildStepData data;
Expand Down
3 changes: 0 additions & 3 deletions src/plugins/qbsprojectmanager/qbsinstallstep.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,6 @@ class QbsInstallStep final : public ProjectExplorer::BuildStep
void handleTaskStarted(const QString &desciption, int max);
void handleProgress(int value);

void createTaskAndOutput(ProjectExplorer::Task::TaskType type,
const QString &message, const Utils::FilePath &file, int line);

Utils::BoolAspect *m_cleanInstallRoot = nullptr;
Utils::BoolAspect *m_dryRun = nullptr;
Utils::BoolAspect *m_keepGoing = nullptr;
Expand Down

0 comments on commit 1be86dd

Please sign in to comment.