Chaste
Release::2018.1
|
#include <FileFinder.hpp>
Public Member Functions | |
FileFinder () | |
FileFinder (const std::string &rPath, RelativeTo::Value relativeTo) | |
FileFinder (const std::string &rLeafName, const FileFinder &rParentOrSibling) | |
FileFinder (const fs::path &rPath) | |
virtual | ~FileFinder () |
virtual void | SetPath (const std::string &rPath, RelativeTo::Value relativeTo) |
virtual void | SetPath (const std::string &rLeafName, const FileFinder &rParentOrSibling) |
bool | IsPathSet () const |
bool | Exists () const |
bool | IsFile () const |
bool | IsDir () const |
bool | IsEmpty () const |
std::string | GetAbsolutePath () const |
bool | IsNewerThan (const FileFinder &rOtherEntity) const |
std::string | GetLeafName () const |
std::string | GetLeafNameNoExtension () const |
std::string | GetExtension () const |
FileFinder | GetParent () const |
std::string | GetRelativePath (const FileFinder &rBasePath) const |
FileFinder | CopyTo (const FileFinder &rDest) const |
void | Remove () const |
void | DangerousRemove () const |
std::vector< FileFinder > | FindMatches (const std::string &rPattern) const |
bool | operator< (const FileFinder &otherFinder) const |
Static Public Member Functions | |
static bool | IsAbsolutePath (const std::string &rPath) |
static void | ReplaceSpacesWithUnderscores (std::string &rPath) |
static void | ReplaceUnderscoresWithSpaces (std::string &rPath) |
static void | FakePath (RelativeTo::Value fakeWhat, const std::string &rFakePath) |
static void | StopFaking () |
Private Member Functions | |
void | PrivateRemove (bool dangerous=false) const |
Private Attributes | |
std::string | mAbsPath |
Static Private Attributes | |
static bool | msFaking = false |
static RelativeTo::Value | msFakeWhat = RelativeTo::Absolute |
static std::string | msFakePath = "" |
A helper class for finding files or directories, given paths which can be relative to various locations (e.g. the Chaste source tree root, the current directory, the Chaste test output directory, or an absolute path).
Definition at line 69 of file FileFinder.hpp.
FileFinder::FileFinder | ( | ) |
Default constructor for subclasses to use. They should call SetPath() in their constructor.
This also allows classes to store a FileFinder instance that hasn't been properly set up yet, and assign to it later using operator=.
Definition at line 78 of file FileFinder.cpp.
Referenced by CopyTo(), FindMatches(), GetParent(), and PrivateRemove().
FileFinder::FileFinder | ( | const std::string & | rPath, |
RelativeTo::Value | relativeTo | ||
) |
Main constructor.
rPath | the path to the file/dir to find |
relativeTo | how to interpret this path |
Definition at line 83 of file FileFinder.cpp.
References SetPath().
FileFinder::FileFinder | ( | const std::string & | rLeafName, |
const FileFinder & | rParentOrSibling | ||
) |
Find a file (or folder) relative to some file or directory. If the second argument is a directory, we look for the given leaf name within it. If the second argument is a file, then we look for a sibling. An exception is raised if rParentOrSibling does not exist.
rLeafName | the leaf name of the file/dir to find |
rParentOrSibling | where to look for it |
Definition at line 88 of file FileFinder.cpp.
References SetPath().
FileFinder::FileFinder | ( | const fs::path & | rPath | ) |
Conversion constructor from a Boost Filesystem path object. Note that since fs::path has a conversion constructor from std::string, this allows us to be initialised with a string or character constant, too. The path will be interpreted as relative to the current working directory, unless it is an absolute path.
rPath | the path to the file/dir to find |
Definition at line 93 of file FileFinder.cpp.
References RelativeTo::Absolute, and SetPath().
|
virtual |
Needed because we have virtual methods.
Definition at line 98 of file FileFinder.cpp.
FileFinder FileFinder::CopyTo | ( | const FileFinder & | rDest | ) | const |
Copy this file or folder (recursively in the latter case) to the given destination. If the destination is a folder that exists, the source will be copied with the same name inside that folder. Otherwise the source will be copied with the given destination name.
If the source is a file and the destination is a file that exists it will be removed prior to copying. If the source is a folder and the destination is a file that exists then an error is thrown.
rDest | where to copy to |
Definition at line 308 of file FileFinder.cpp.
References EXCEPTION, Exists(), FileFinder(), IsDir(), IsFile(), and mAbsPath.
Referenced by CellMLToSharedLibraryConverter::ConvertCellmlToSo(), HeartConfig::CopySchema(), CardiacSimulation::CreateAndRun(), AbstractCardiacTissue< SPACE_DIM >::save(), and AbstractTetrahedralMesh< SPACE_DIM, SPACE_DIM >::save().
void FileFinder::DangerousRemove | ( | ) | const |
This method will allow you to remove any file from under either * CHASTE_TEST_OUTPUT or * the source tree (but not elsewhere).
For this reason it is a very dangerous operation and should not be used if Remove could be instead.
BEWARE: if you have managed to set CHASTE_TEST_OUTPUT to "/" this could wipe your system!
Definition at line 425 of file FileFinder.cpp.
References PrivateRemove().
Referenced by CellMLToSharedLibraryConverter::ConvertCellmlToSo().
bool FileFinder::Exists | ( | ) | const |
Definition at line 183 of file FileFinder.cpp.
References mAbsPath.
Referenced by ColumnDataReader::ColumnDataReader(), Hdf5DataReader::CommonConstructor(), OutputFileHandler::CommonConstructor(), CellMLToSharedLibraryConverter::Convert(), CellMLToSharedLibraryConverter::ConvertCellmlToSo(), HeartConfig::CopySchema(), CopyTo(), BidomainTissue< SPACE_DIM >::CreateExtracellularConductivityTensors(), ExtendedBidomainTissue< SPACE_DIM >::CreateExtracellularConductivityTensors(), AbstractCardiacTissue< ELEMENT_DIM, SPACE_DIM >::CreateIntracellularConductivityTensor(), ExtendedBidomainTissue< SPACE_DIM >::CreateIntracellularConductivityTensorSecondCell(), AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::InitialiseWriter(), IsNewerThan(), CellMLLoader::LoadCellMLFile(), CardiacSimulationArchiver< PROBLEM_CLASS >::Migrate(), Hdf5DataWriter::OpenFile(), PrivateRemove(), AbstractPurkinjeCellFactory< ELEMENT_DIM, SPACE_DIM >::ReadJunctionsFile(), AbstractCardiacTissue< SPACE_DIM >::save(), and SetPath().
|
static |
For testing purposes, fake the value of one of the normally fixed paths, e.g. ChasteSourceRoot.
fakeWhat | which path to fake |
rFakePath | its fake value |
Definition at line 557 of file FileFinder.cpp.
References msFakePath, msFakeWhat, and msFaking.
std::vector< FileFinder > FileFinder::FindMatches | ( | const std::string & | rPattern | ) | const |
rPattern | the pattern to match names against |
Definition at line 430 of file FileFinder.cpp.
References EXCEPTION, FileFinder(), IsDir(), mAbsPath, and PATH_LEAF_NAME.
Referenced by CellMLToSharedLibraryConverter::ConvertCellmlToSo(), and AbstractTetrahedralMesh< SPACE_DIM, SPACE_DIM >::save().
std::string FileFinder::GetAbsolutePath | ( | ) | const |
If this is a directory that exists (at the instant of this call), the absolute path is guaranteed to end in a '/'. Otherwise, the path is guaranteed not to end in a '/'.
Definition at line 224 of file FileFinder.cpp.
References IsDir(), and mAbsPath.
Referenced by ColumnDataReader::ColumnDataReader(), Hdf5DataReader::CommonConstructor(), AbstractConvergenceTester< CELL, CARDIAC_PROBLEM, DIM, PROBLEM_DIM >::Converge(), CellMLToSharedLibraryConverter::Convert(), CellMLToSharedLibraryConverter::ConvertCellmlToSo(), OutputFileHandler::CopyFileTo(), FibreReader< DIM >::FibreReader(), AbstractHdf5Converter< ELEMENT_DIM, SPACE_DIM >::GenerateListOfDatasets(), OutputFileHandler::GetChasteTestOutputDirectory(), ElectroMechanicsProblemDefinition< DIM >::GetFibreSheetDirectionsFile(), DynamicModelLoaderRegistry::GetLoader(), GetRelativePath(), AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::InitialiseWriter(), CardiacSimulationArchiver< PROBLEM_CLASS >::Migrate(), Hdf5DataWriter::OpenFile(), operator<(), OutputFileHandler::OutputFileHandler(), PrivateRemove(), AbstractPurkinjeCellFactory< ELEMENT_DIM, SPACE_DIM >::ReadJunctionsFile(), ArchiveLocationInfo::SetArchiveDirectory(), SetPath(), AbstractCardiacMechanicsSolver< ELASTICITY_SOLVER, DIM >::SetVariableFibreSheetDirections(), and AbstractTetrahedralMeshWriter< ELEMENT_DIM, SPACE_DIM >::WriteNclFile().
std::string FileFinder::GetExtension | ( | ) | const |
Definition at line 250 of file FileFinder.cpp.
References mAbsPath.
Referenced by AbstractTetrahedralMesh< SPACE_DIM, SPACE_DIM >::save().
std::string FileFinder::GetLeafName | ( | ) | const |
i.e. the individual file or directory name and none of the preceding folders on its path.
Definition at line 240 of file FileFinder.cpp.
References mAbsPath, and PATH_LEAF_NAME.
Referenced by CellMLLoader::LoadCellMLFile().
std::string FileFinder::GetLeafNameNoExtension | ( | ) | const |
i.e. the individual file or directory name and none of the preceding folders on its path.
Definition at line 245 of file FileFinder.cpp.
References mAbsPath.
Referenced by FibreConverter::Convert(), CellMLToSharedLibraryConverter::ConvertCellmlToSo(), CellMLLoader::LoadCellMLFile(), and AbstractTetrahedralMesh< SPACE_DIM, SPACE_DIM >::save().
FileFinder FileFinder::GetParent | ( | ) | const |
Definition at line 255 of file FileFinder.cpp.
References RelativeTo::Absolute, EXCEPT_IF_NOT, FileFinder(), and mAbsPath.
Referenced by FibreConverter::Convert(), CellMLToSharedLibraryConverter::ConvertCellmlToSo(), AbstractTetrahedralMesh< SPACE_DIM, SPACE_DIM >::save(), and SetPath().
std::string FileFinder::GetRelativePath | ( | const FileFinder & | rBasePath | ) | const |
rBasePath | where the returned path should be relative to |
Definition at line 263 of file FileFinder.cpp.
References EXCEPTION, and GetAbsolutePath().
Referenced by OutputFileHandler::GetRelativePath(), Hdf5ToMeshalyzerConverter< ELEMENT_DIM, SPACE_DIM >::Hdf5ToMeshalyzerConverter(), Hdf5ToVtkConverter< ELEMENT_DIM, SPACE_DIM >::Hdf5ToVtkConverter(), and OutputFileHandler::OutputFileHandler().
|
static |
rPath | the path to test |
Definition at line 525 of file FileFinder.cpp.
Referenced by ExtendedBidomainProblem< DIM >::load(), AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, 2 >::load(), ArchiveLocationInfo::SetMeshPathname(), ExecutableSupport::SetOutputDirectory(), and SetPath().
bool FileFinder::IsDir | ( | ) | const |
Definition at line 193 of file FileFinder.cpp.
References mAbsPath.
Referenced by ColumnDataReader::ColumnDataReader(), Hdf5DataReader::CommonConstructor(), CellMLToSharedLibraryConverter::ConvertCellmlToSo(), CopyTo(), FindMatches(), GetAbsolutePath(), IsEmpty(), CardiacSimulationArchiver< PROBLEM_CLASS >::Migrate(), and SetPath().
bool FileFinder::IsEmpty | ( | ) | const |
Definition at line 198 of file FileFinder.cpp.
References EXCEPTION, IsDir(), IsFile(), mAbsPath, and PATH_LEAF_NAME.
bool FileFinder::IsFile | ( | ) | const |
Definition at line 188 of file FileFinder.cpp.
References mAbsPath.
Referenced by OutputFileHandler::CopyFileTo(), CopyTo(), Hdf5ToMeshalyzerConverter< ELEMENT_DIM, SPACE_DIM >::Hdf5ToMeshalyzerConverter(), IsEmpty(), and PrivateRemove().
bool FileFinder::IsNewerThan | ( | const FileFinder & | rOtherEntity | ) | const |
rOtherEntity | the entity to test against. |
Definition at line 233 of file FileFinder.cpp.
References Exists(), and mAbsPath.
Referenced by CellMLToSharedLibraryConverter::Convert().
bool FileFinder::IsPathSet | ( | ) | const |
Definition at line 178 of file FileFinder.cpp.
References mAbsPath.
Referenced by CellMLToSharedLibraryConverter::ConvertCellmlToSo(), ExecutableSupport::InitializePetsc(), ExecutableSupport::PrintError(), ExecutableSupport::WriteMachineInfoFile(), and ExecutableSupport::WriteProvenanceInfoFile().
bool FileFinder::operator< | ( | const FileFinder & | otherFinder | ) | const |
Provide a sort operator to get a logical ordering from FindMatches it orders by alphabetical (or ASCII really).
otherFinder | Another FileFinder |
Definition at line 552 of file FileFinder.cpp.
References GetAbsolutePath(), and mAbsPath.
|
private |
This is code common to Remove() and DangerousRemove(). Should remain private and not to be called from elsewhere. Remove() is only allowed to delete things with a .chaste_deletable_folder in the testoutput directory.
DangerousRemove() is allowed to delete anything in the source or testoutput directories.
dangerous | whether we are doing a dangerous remove. |
Definition at line 356 of file FileFinder.cpp.
References RelativeTo::ChasteBuildRoot, RelativeTo::ChasteSourceRoot, EXCEPTION, Exists(), FileFinder(), GetAbsolutePath(), OutputFileHandler::GetChasteTestOutputDirectory(), IsFile(), mAbsPath, OutputFileHandler::SIG_FILE_NAME, and ChastePosixPathFixer::ToPosix().
Referenced by DangerousRemove(), and Remove().
void FileFinder::Remove | ( | ) | const |
Recursively remove this file or folder. Since this is a potentially very dangerous operation, only locations under the Chaste test output folder may be removed.
Only folders created by an OutputFileHandler, or the contents of such a folder, may be deleted (folders that have .chaste_deletable_folder present).
If you need to delete a file or folder without .chaste_deletable_folder, then you have to use DangerousRemove().
Definition at line 420 of file FileFinder.cpp.
References PrivateRemove().
|
static |
Replace any spaces in a path or filename with underscores.
rPath | a path or file name |
Definition at line 530 of file FileFinder.cpp.
|
static |
Replace any underscores in a path or filename with spaces (for making titles etc.).
rPath | a path or file name |
Definition at line 541 of file FileFinder.cpp.
|
virtual |
Change this FileFinder to point at a new location.
rPath | the path to the file/dir to find |
relativeTo | how to interpret this path |
Definition at line 102 of file FileFinder.cpp.
References RelativeTo::Absolute, RelativeTo::AbsoluteOrCwd, RelativeTo::ChasteBuildRoot, ChasteBuildRootDir(), RelativeTo::ChasteSourceRoot, ChasteSourceRootDir(), RelativeTo::ChasteTestOutput, RelativeTo::CWD, OutputFileHandler::GetChasteTestOutputDirectory(), IsAbsolutePath(), mAbsPath, msFakePath, msFakeWhat, msFaking, and NEVER_REACHED.
Referenced by AbstractHdf5Access::AbstractHdf5Access(), CellMLToSharedLibraryConverter::Convert(), CellMLToSharedLibraryConverter::ConvertCellmlToSo(), HeartConfig::CopySchema(), FileFinder(), OutputFileHandler::GetChasteTestOutputDirectory(), HeartFileFinder::HeartFileFinder(), ExecutableSupport::InitializePetsc(), HeartConfig::LoadFromCheckpoint(), ExecutableSupport::PrintError(), ExecutableSupport::SetOutputDirectory(), HeartConfig::SetParametersFile(), SetPath(), ExecutableSupport::WriteMachineInfoFile(), and ExecutableSupport::WriteProvenanceInfoFile().
|
virtual |
Change this FileFinder to point at a new location, relative to some file or directory.
rLeafName | the leaf name of the file/dir to find |
rParentOrSibling | where to look for it |
Definition at line 162 of file FileFinder.cpp.
References RelativeTo::Absolute, EXCEPTION, Exists(), GetAbsolutePath(), GetParent(), IsDir(), and SetPath().
|
static |
Stop faking one of the fixed paths.
Definition at line 564 of file FileFinder.cpp.
References msFaking.
|
private |
The absolute path to our file.
Definition at line 305 of file FileFinder.hpp.
Referenced by CopyTo(), Exists(), FindMatches(), GetAbsolutePath(), GetExtension(), GetLeafName(), GetLeafNameNoExtension(), GetParent(), IsDir(), IsEmpty(), IsFile(), IsNewerThan(), IsPathSet(), operator<(), PrivateRemove(), and SetPath().
|
staticprivate |
The fake value of the faked path.
Definition at line 314 of file FileFinder.hpp.
Referenced by FakePath(), and SetPath().
|
staticprivate |
Which path to fake.
Definition at line 311 of file FileFinder.hpp.
Referenced by FakePath(), and SetPath().
|
staticprivate |
Whether to fake one of the fixed paths, e.g. ChasteSourceRoot.
Definition at line 308 of file FileFinder.hpp.
Referenced by FakePath(), SetPath(), and StopFaking().