mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-14 18:23:15 +02:00
Prevent jobs from affecting each other via reporters when running jobsets from CLI.
(cherry picked from commit 44a3bb9274845593db733464aa3f68288e3eb150) Co-authored-by: Alex Shvartzkop <dudesuchamazing@gmail.com>
This commit is contained in:
parent
5576d1ed9c
commit
01991fed53
@ -211,6 +211,17 @@ REPORTER& WXLOG_REPORTER::GetInstance()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
REPORTER& REDIRECT_REPORTER::Report( const wxString& aText, SEVERITY aSeverity )
|
||||||
|
{
|
||||||
|
REPORTER::Report( aText, aSeverity );
|
||||||
|
|
||||||
|
if( m_redirectTarget )
|
||||||
|
m_redirectTarget->Report( aText, aSeverity );
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
REPORTER& STATUSBAR_REPORTER::Report( const wxString& aText, SEVERITY aSeverity )
|
REPORTER& STATUSBAR_REPORTER::Report( const wxString& aText, SEVERITY aSeverity )
|
||||||
{
|
{
|
||||||
REPORTER::Report( aText, aSeverity );
|
REPORTER::Report( aText, aSeverity );
|
||||||
|
@ -131,7 +131,10 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Returns true if the reporter client is non-empty.
|
* Returns true if the reporter client is non-empty.
|
||||||
*/
|
*/
|
||||||
virtual bool HasMessage() const = 0;
|
virtual bool HasMessage() const
|
||||||
|
{
|
||||||
|
return m_severityMask != 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the reporter has one or more messages matching the specified
|
* Returns true if the reporter has one or more messages matching the specified
|
||||||
@ -226,8 +229,6 @@ public:
|
|||||||
|
|
||||||
REPORTER& Report( const wxString& aText,
|
REPORTER& Report( const wxString& aText,
|
||||||
SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
|
SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
|
||||||
|
|
||||||
bool HasMessage() const override { return false; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -246,8 +247,6 @@ public:
|
|||||||
static REPORTER& GetInstance();
|
static REPORTER& GetInstance();
|
||||||
|
|
||||||
REPORTER& Report( const wxString& aMsg, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
|
REPORTER& Report( const wxString& aMsg, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
|
||||||
|
|
||||||
bool HasMessage() const override { return false; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -266,8 +265,6 @@ public:
|
|||||||
static REPORTER& GetInstance();
|
static REPORTER& GetInstance();
|
||||||
|
|
||||||
REPORTER& Report( const wxString& aMsg, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
|
REPORTER& Report( const wxString& aMsg, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
|
||||||
|
|
||||||
bool HasMessage() const override { return false; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -283,8 +280,17 @@ public:
|
|||||||
static REPORTER& GetInstance();
|
static REPORTER& GetInstance();
|
||||||
|
|
||||||
REPORTER& Report( const wxString& aMsg, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
|
REPORTER& Report( const wxString& aMsg, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
|
||||||
|
};
|
||||||
|
|
||||||
bool HasMessage() const override { return false; }
|
|
||||||
|
class KICOMMON_API REDIRECT_REPORTER : public REPORTER
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
REDIRECT_REPORTER( REPORTER* aRedirectTarget ) : m_redirectTarget( aRedirectTarget ) {}
|
||||||
|
|
||||||
|
REPORTER& Report( const wxString& aMsg, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
|
||||||
|
|
||||||
|
REPORTER* m_redirectTarget;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -240,28 +240,31 @@ bool JOBS_RUNNER::RunJobsForDestination( JOBSET_DESTINATION* aDestination, bool
|
|||||||
|
|
||||||
job.m_job->SetTempOutputDirectory( tempDirPath );
|
job.m_job->SetTempOutputDirectory( tempDirPath );
|
||||||
|
|
||||||
REPORTER* reporterToUse = &m_reporter;
|
REPORTER* targetReporter = &m_reporter;
|
||||||
|
|
||||||
if( reporterToUse == &NULL_REPORTER::GetInstance() )
|
if( targetReporter == &NULL_REPORTER::GetInstance() )
|
||||||
{
|
{
|
||||||
aDestination->m_lastRunReporters[job.m_id] = std::make_shared<JOBSET_OUTPUT_REPORTER>( tempDirPath,
|
aDestination->m_lastRunReporters[job.m_id] =
|
||||||
m_progressReporter );
|
std::make_shared<JOBSET_OUTPUT_REPORTER>( tempDirPath, m_progressReporter );
|
||||||
reporterToUse = aDestination->m_lastRunReporters[job.m_id].get();
|
|
||||||
|
targetReporter = aDestination->m_lastRunReporters[job.m_id].get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Use a redirect reporter so we don't have error flags set after running previous jobs
|
||||||
|
REDIRECT_REPORTER isolatedReporter( targetReporter );
|
||||||
int result = CLI::EXIT_CODES::SUCCESS;
|
int result = CLI::EXIT_CODES::SUCCESS;
|
||||||
|
|
||||||
|
|
||||||
if( iface < KIWAY::KIWAY_FACE_COUNT )
|
if( iface < KIWAY::KIWAY_FACE_COUNT )
|
||||||
{
|
{
|
||||||
result = m_kiway->ProcessJob( iface, job.m_job.get(), reporterToUse, m_progressReporter );
|
result = m_kiway->ProcessJob( iface, job.m_job.get(), &isolatedReporter,
|
||||||
|
m_progressReporter );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// special jobs
|
// special jobs
|
||||||
if( job.m_job->GetType() == "special_execute" )
|
if( job.m_job->GetType() == "special_execute" )
|
||||||
{
|
{
|
||||||
result = runSpecialExecute( &job, reporterToUse, m_project );
|
result = runSpecialExecute( &job, &isolatedReporter, m_project );
|
||||||
}
|
}
|
||||||
else if( job.m_job->GetType() == "special_copyfiles" )
|
else if( job.m_job->GetType() == "special_copyfiles" )
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user