Skip to content

Commit

Permalink
added check if .dot file is already queued for processing before addi…
Browse files Browse the repository at this point in the history
…ng a new processing job
  • Loading branch information
Thomas Haller committed May 14, 2019
1 parent 9dda0c6 commit b1c32a9
Show file tree
Hide file tree
Showing 2 changed files with 114 additions and 51 deletions.
159 changes: 108 additions & 51 deletions src/dot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1511,6 +1511,24 @@ bool DotManager::run()
return TRUE;
}

bool DotManager::containsRun(const QCString& baseName, const QCString& path, const QCString& md5Hash)
{
QListIterator<DotRunner> li(m_dotRuns);
DotRunner *dr;
for (li.toFirst();(dr=li.current());++li)
{
if (baseName != QCString(dr->getBaseName().data())) continue;
if (path != QCString(dr->getPath().data())) continue;
// we have a match
if (md5Hash != QCString(dr->getMd5Hash().data()))
{
err("md5 hash does not match for two different runs of %s !\n", (baseName + ".dot").data());
}
return TRUE;
}
return FALSE;
}

//--------------------------------------------------------------------


Expand Down Expand Up @@ -2406,7 +2424,12 @@ void DotGfxHierarchyTable::createGraph(DotNode *n,FTextStream &out,
calculateMd5Signature(theGraph, sigStr);

bool regenerate=FALSE;
if (checkMd5Signature(absBaseName,sigStr) ||
if (DotManager::instance()->containsRun(absBaseName, d.absPath().data(), sigStr))
{
// file is already queued
regenerate=TRUE;
}
else if (checkMd5Signature(absBaseName,sigStr) ||
!checkDeliverables(absImgName,absMapName))
{
regenerate=TRUE;
Expand Down Expand Up @@ -3185,7 +3208,7 @@ QCString computeMd5Signature(DotNode *root,
return sigStr;
}

static bool updateDotGraph(DotNode *root,
static void updateDotGraph(DotNode *root,
DotNode::GraphType gt,
const QCString &baseName,
GraphOutputFormat format,
Expand All @@ -3207,7 +3230,6 @@ static bool updateDotGraph(DotNode *root,
FTextStream t(&f);
t << theGraph;
}
return checkMd5Signature(baseName,md5); // graph needs to be regenerated
}

QCString DotClassGraph::writeGraph(FTextStream &out,
Expand Down Expand Up @@ -3256,35 +3278,42 @@ QCString DotClassGraph::writeGraph(FTextStream &out,
QCString absImgName = absBaseName+"."+imgExt;

bool regenerate = FALSE;
QCString md5;
if (updateDotGraph(m_startNode,
QCString sigStr;
updateDotGraph(m_startNode,
m_graphType,
absBaseName,
graphFormat,
m_lrRank ? "LR" : "",
m_graphType==DotNode::Inheritance,
m_graphType == DotNode::Inheritance,
TRUE,
md5,
sigStr,
m_startNode->label()
) ||
!checkDeliverables(graphFormat==GOF_BITMAP ? absImgName :
usePDFLatex ? absPdfName : absEpsName,
graphFormat==GOF_BITMAP && generateImageMap ? absMapName : QCString())
)
);

if (DotManager::instance()->containsRun(absBaseName, d.absPath().data(), sigStr))
{
// file is already queued
regenerate=TRUE;
}
else if (checkMd5Signature(absBaseName,sigStr) ||
!checkDeliverables(graphFormat==GOF_BITMAP ? absImgName :
usePDFLatex ? absPdfName : absEpsName,
graphFormat==GOF_BITMAP && generateImageMap ? absMapName : QCString())
)
{
regenerate=TRUE;
if (graphFormat==GOF_BITMAP) // run dot to create a bitmap image
{
DotRunner *dotRun = new DotRunner(absBaseName,
d.absPath().data(), md5, TRUE,absImgName);
d.absPath().data(), sigStr, TRUE,absImgName);
dotRun->addJob(imgFmt,absImgName);
if (generateImageMap) dotRun->addJob(MAP_CMD,absMapName);
DotManager::instance()->addRun(dotRun);

}
else if (graphFormat==GOF_EPS) // run dot to create a .eps image
{
DotRunner *dotRun = new DotRunner(absBaseName, d.absPath().data(), md5, FALSE);
DotRunner *dotRun = new DotRunner(absBaseName, d.absPath().data(), sigStr, FALSE);
if (usePDFLatex)
{
dotRun->addJob("pdf",absPdfName,absBaseName);
Expand Down Expand Up @@ -3604,34 +3633,41 @@ QCString DotInclDepGraph::writeGraph(FTextStream &out,
QCString absImgName = absBaseName+"."+imgExt;

bool regenerate = FALSE;
QCString md5;
if (updateDotGraph(m_startNode,
DotNode::Dependency,
absBaseName,
graphFormat,
"", // lrRank
FALSE, // renderParents
m_inverse, // backArrows
md5,
m_startNode->label()
) ||
!checkDeliverables(graphFormat==GOF_BITMAP ? absImgName :
usePDFLatex ? absPdfName : absEpsName,
graphFormat==GOF_BITMAP && generateImageMap ? absMapName : QCString())
)
QCString sigStr;
updateDotGraph(m_startNode,
DotNode::Dependency,
absBaseName,
graphFormat,
"", // lrRank
FALSE, // renderParents
m_inverse, // backArrows
sigStr,
m_startNode->label()
);

if (DotManager::instance()->containsRun(absBaseName, d.absPath().data(), sigStr))
{
// file is already queued
regenerate=TRUE;
}
else if (checkMd5Signature(absBaseName,sigStr) ||
!checkDeliverables(graphFormat==GOF_BITMAP ? absImgName :
usePDFLatex ? absPdfName : absEpsName,
graphFormat==GOF_BITMAP && generateImageMap ? absMapName : QCString())
)
{
regenerate=TRUE;
if (graphFormat==GOF_BITMAP)
{
// run dot to create a bitmap image
DotRunner *dotRun = new DotRunner(absBaseName, d.absPath().data(), md5, TRUE, absImgName);
DotRunner *dotRun = new DotRunner(absBaseName, d.absPath().data(), sigStr, TRUE, absImgName);
dotRun->addJob(imgFmt,absImgName);
if (generateImageMap) dotRun->addJob(MAP_CMD,absMapName);
DotManager::instance()->addRun(dotRun);
}
else if (graphFormat==GOF_EPS)
{
DotRunner *dotRun = new DotRunner(absBaseName, d.absPath().data(), md5, FALSE);
DotRunner *dotRun = new DotRunner(absBaseName, d.absPath().data(), sigStr, FALSE);
if (usePDFLatex)
{
dotRun->addJob("pdf",absPdfName,absBaseName);
Expand Down Expand Up @@ -3921,27 +3957,34 @@ QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat graphForma
QCString absImgName = absBaseName+"."+imgExt;

bool regenerate = FALSE;
QCString md5;
if (updateDotGraph(m_startNode,
DotNode::CallGraph,
absBaseName,
graphFormat,
m_inverse ? "RL" : "LR", // lrRank
FALSE, // renderParents
m_inverse, // backArrows
md5,
m_startNode->label()
) ||
!checkDeliverables(graphFormat==GOF_BITMAP ? absImgName :
usePDFLatex ? absPdfName : absEpsName,
graphFormat==GOF_BITMAP && generateImageMap ? absMapName : QCString())
)
QCString sigStr;
updateDotGraph(m_startNode,
DotNode::CallGraph,
absBaseName,
graphFormat,
m_inverse ? "RL" : "LR", // lrRank
FALSE, // renderParents
m_inverse, // backArrows
sigStr,
m_startNode->label()
);

if (DotManager::instance()->containsRun(absBaseName, d.absPath().data(), sigStr))
{
// file is already queued
regenerate=TRUE;
}
else if (checkMd5Signature(absBaseName,sigStr) ||
!checkDeliverables(graphFormat==GOF_BITMAP ? absImgName :
usePDFLatex ? absPdfName : absEpsName,
graphFormat==GOF_BITMAP && generateImageMap ? absMapName : QCString())
)
{
regenerate=TRUE;
if (graphFormat==GOF_BITMAP)
{
// run dot to create a bitmap image
DotRunner *dotRun = new DotRunner(absBaseName, d.absPath().data(), md5, TRUE, absImgName);
DotRunner *dotRun = new DotRunner(absBaseName, d.absPath().data(), sigStr, TRUE, absImgName);
dotRun->addJob(imgFmt,absImgName);
if (generateImageMap) dotRun->addJob(MAP_CMD,absMapName);
DotManager::instance()->addRun(dotRun);
Expand All @@ -3950,7 +3993,7 @@ QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat graphForma
else if (graphFormat==GOF_EPS)
{
// run dot to create a .eps image
DotRunner *dotRun = new DotRunner(absBaseName, d.absPath().data(), md5, FALSE);
DotRunner *dotRun = new DotRunner(absBaseName, d.absPath().data(), sigStr, FALSE);
if (usePDFLatex)
{
dotRun->addJob("pdf",absPdfName,absBaseName);
Expand Down Expand Up @@ -4085,7 +4128,12 @@ QCString DotDirDeps::writeGraph(FTextStream &out,
QCString sigStr(33);
calculateMd5Signature(theGraph, sigStr);
bool regenerate=FALSE;
if (checkMd5Signature(absBaseName,sigStr) ||
if (DotManager::instance()->containsRun(absBaseName, d.absPath().data(), sigStr))
{
// file is already queued
regenerate=TRUE;
}
else if (checkMd5Signature(absBaseName,sigStr) ||
!checkDeliverables(graphFormat==GOF_BITMAP ? absImgName :
usePDFLatex ? absPdfName : absEpsName,
graphFormat==GOF_BITMAP && generateImageMap ? absMapName : QCString())
Expand Down Expand Up @@ -4231,7 +4279,11 @@ void generateGraphLegend(const char *path)
QCString imgFmt = Config_getEnum(DOT_IMAGE_FORMAT);
QCString imgName = "graph_legend."+imgExt;
QCString absImgName = absBaseName+"."+imgExt;
if (checkMd5Signature(absBaseName,sigStr) ||
if (DotManager::instance()->containsRun(absBaseName, d.absPath().data(), sigStr))
{
// file is already queued
}
else if (checkMd5Signature(absBaseName,sigStr) ||
!checkDeliverables(absImgName))
{
QFile dotFile(absDotName);
Expand Down Expand Up @@ -4649,7 +4701,12 @@ QCString DotGroupCollaboration::writeGraph( FTextStream &t,
QCString absPdfName = absBaseName+".pdf";
QCString absEpsName = absBaseName+".eps";
bool regenerate=FALSE;
if (checkMd5Signature(absBaseName,sigStr) ||
if (DotManager::instance()->containsRun(absBaseName, d.absPath().data(), sigStr))
{
// file is already queued
regenerate=TRUE;
}
else if (checkMd5Signature(absBaseName,sigStr) ||
!checkDeliverables(graphFormat==GOF_BITMAP ? absImgName :
usePDFLatex ? absPdfName : absEpsName,
graphFormat==GOF_BITMAP /*&& generateImageMap*/ ? absMapName : QCString())
Expand Down
6 changes: 6 additions & 0 deletions src/dot.h
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,10 @@ class DotRunner
bool run();
const CleanupItem &cleanup() const { return m_cleanupItem; }

DotConstString const& getBaseName() { return m_baseName; }
DotConstString const& getPath() { return m_path; }
DotConstString const& getMd5Hash() { return m_md5Hash; }

private:
DotConstString m_dotExe;
bool m_multiTargets;
Expand Down Expand Up @@ -498,6 +502,8 @@ class DotManager
const QCString &figureNAme,const QCString &relPath);
bool run();

bool containsRun(const QCString& baseName, const QCString& path, const QCString& md5Hash);

private:
DotManager();
virtual ~DotManager();
Expand Down

0 comments on commit b1c32a9

Please sign in to comment.