ENH: add 'report' to trace #includeEntry/#includeIfPresentEntry

- used in "expandDictionary -list" to find which files are included by
  any particular dictionary
This commit is contained in:
Mark Olesen
2011-04-15 13:34:25 +02:00
parent e1137fe8e2
commit c20efb0923
4 changed files with 77 additions and 11 deletions

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. \\ / A nd | Copyright (C) 2008-2011 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -28,12 +28,33 @@ Description
Read the dictionary provided as an argument, expand the macros etc. and Read the dictionary provided as an argument, expand the macros etc. and
write the resulting dictionary to standard output. write the resulting dictionary to standard output.
Usage
- expandDictionary inputDict [OPTION]
\param -list \n
Report the #include/#includeIfPresent to stdout only.
Note
The \c -list option can be useful when determining which files
are actually included by a directory. It can also be used to
determine which files may need to be copied when transferring
simulation to another environment. The following code snippet
could be a useful basis for such cases:
\verbatim
for i in . 0 constant system
do
find $i -maxdepth 1 -type f -exec expandDictionary -list '{}' \;
done | sed -ne '/^"\//!{ s/^"//; s/"$//; p }' | sort | uniq
\endverbatim
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "argList.H" #include "argList.H"
#include "IFstream.H" #include "IFstream.H"
#include "IOobject.H" #include "IOobject.H"
#include "dictionary.H" #include "dictionary.H"
#include "includeEntry.H"
using namespace Foam; using namespace Foam;
@ -48,6 +69,12 @@ int main(int argc, char *argv[])
"the resulting dictionary to standard output." "the resulting dictionary to standard output."
); );
argList::addBoolOption
(
"list",
"Report the #include/#includeIfPresent to stdout only"
);
argList::noBanner(); argList::noBanner();
argList::noParallel(); argList::noParallel();
argList::validArgs.append("inputDict"); argList::validArgs.append("inputDict");
@ -55,12 +82,22 @@ int main(int argc, char *argv[])
const string dictName = args[1]; const string dictName = args[1];
IOobject::writeBanner(Info) const bool listOpt = args.optionFound("list");
<<"//\n// " << dictName << "\n//\n";
dictionary(IFstream(dictName)(), true).write(Info, false); if (listOpt)
{
Foam::functionEntries::includeEntry::report = true;
}
IOobject::writeDivider(Info); dictionary dict(IFstream(dictName)(), true);
if (!listOpt)
{
IOobject::writeBanner(Info)
<<"//\n// " << dictName << "\n//\n";
dict.write(Info, false);
IOobject::writeDivider(Info);
}
return 0; return 0;
} }

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -39,6 +39,9 @@ const Foam::word Foam::functionEntries::includeEntry::typeName
// might include includeEntry // might include includeEntry
int Foam::functionEntries::includeEntry::debug(0); int Foam::functionEntries::includeEntry::debug(0);
bool Foam::functionEntries::includeEntry::report(false);
namespace Foam namespace Foam
{ {
namespace functionEntries namespace functionEntries
@ -89,10 +92,15 @@ bool Foam::functionEntries::includeEntry::execute
Istream& is Istream& is
) )
{ {
IFstream ifs(includeFileName(is)); const fileName fName(includeFileName(is));
IFstream ifs(fName);
if (ifs) if (ifs)
{ {
if (Foam::functionEntries::includeEntry::report)
{
Info<< fName << endl;
}
parentDict.read(ifs); parentDict.read(ifs);
return true; return true;
} }
@ -119,10 +127,15 @@ bool Foam::functionEntries::includeEntry::execute
Istream& is Istream& is
) )
{ {
IFstream ifs(includeFileName(is)); const fileName fName(includeFileName(is));
IFstream ifs(fName);
if (ifs) if (ifs)
{ {
if (Foam::functionEntries::includeEntry::report)
{
Info<< fName << endl;
}
entry.read(parentDict, ifs); entry.read(parentDict, ifs);
return true; return true;
} }

View File

@ -82,6 +82,12 @@ protected:
public: public:
// Static data members
//- Report which file is included to stdout
static bool report;
//- Runtime type information //- Runtime type information
ClassName("include"); ClassName("include");

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -69,10 +69,15 @@ bool Foam::functionEntries::includeIfPresentEntry::execute
Istream& is Istream& is
) )
{ {
IFstream ifs(includeFileName(is)); const fileName fName(includeFileName(is));
IFstream ifs(fName);
if (ifs) if (ifs)
{ {
if (Foam::functionEntries::includeEntry::report)
{
Info<< fName << endl;
}
parentDict.read(ifs); parentDict.read(ifs);
} }
@ -87,10 +92,15 @@ bool Foam::functionEntries::includeIfPresentEntry::execute
Istream& is Istream& is
) )
{ {
IFstream ifs(includeFileName(is)); const fileName fName(includeFileName(is));
IFstream ifs(fName);
if (ifs) if (ifs)
{ {
if (Foam::functionEntries::includeEntry::report)
{
Info<< fName << endl;
}
entry.read(parentDict, ifs); entry.read(parentDict, ifs);
} }