Spring
DataDirLocater Class Reference

#include <DataDirLocater.h>

Collaboration diagram for DataDirLocater:

List of all members.

Public Member Functions

 DataDirLocater ()
 construct a data directory locater
void LocateDataDirs ()
 locate spring data directories
void Check ()
 call after LocateDataDirs()
const std::vector< DataDir > & GetDataDirs () const
const DataDirGetWriteDir () const
std::string GetWriteDirPath () const
 returns the highest priority writable directory, aka the writedir
std::vector< std::string > GetDataDirPaths () const
bool IsIsolationMode () const
void SetIsolationMode (bool enabled)
std::string GetIsolationModeDir () const
void SetIsolationModeDir (const std::string &dir)
void SetWriteDir (const std::string &dir)
void UpdateIsolationModeByEnvVar ()
 reads envvar to detect if we should run in isolated mode used by unitsync.cpp
void ChangeCwdToWriteDir ()
 cd's into writedir

Static Public Member Functions

static bool IsPortableMode ()

Private Member Functions

void AddCurWorkDir ()
void AddPortableDir ()
void AddHomeDirs ()
void AddEtcDirs ()
void AddShareDirs ()
std::string SubstEnvVars (const std::string &in) const
 substitutes environment variables with their values
void AddDirs (const std::string &dirs)
 Adds the directories from a colon separated string to the data-dir handler.
void AddDir (const std::string &dir)
 Adds a single directory to the datadir handler. Will only add the directory if it was not already added, as lower index in the list of dirs means higher prefference, adding it again would be pointless.
bool DeterminePermissions (DataDir *dataDir)
 Figure out permissions we have for a single data directory.
void FilterUsableDataDirs ()
 Figure out permissions we have for the data directories.
bool IsWriteableDir (DataDir *dataDir)
void FindWriteableDataDir ()

Static Private Member Functions

static bool IsInstallDirDataDir ()
static bool LooksLikeMultiVersionDataDir (const std::string &dirPath)

Private Attributes

bool isolationMode
std::string isolationModeDir
std::string forcedWriteDir
std::vector< DataDirdataDirs
const DataDirwriteDir

Detailed Description

Definition at line 22 of file DataDirLocater.h.


Constructor & Destructor Documentation

DataDirLocater::DataDirLocater ( )

Does not locate data directories, use LocateDataDirs() for that.


Member Function Documentation

void DataDirLocater::AddCurWorkDir ( )
private
void DataDirLocater::AddDir ( const std::string &  dir)
private
void DataDirLocater::AddDirs ( const std::string &  dirs)
private
Parameters:
dirscolon separated string, use ';' on Windows and ':' on all other OSs
void DataDirLocater::AddEtcDirs ( )
private
void DataDirLocater::AddHomeDirs ( )
private
void DataDirLocater::AddPortableDir ( )
private
void DataDirLocater::AddShareDirs ( )
private
void DataDirLocater::ChangeCwdToWriteDir ( )
void DataDirLocater::Check ( )
bool DataDirLocater::DeterminePermissions ( DataDir dataDir)
private
Returns:
whether we have permissions to read the data directory.
void DataDirLocater::FilterUsableDataDirs ( )
private
void DataDirLocater::FindWriteableDataDir ( )
private
std::vector<std::string> DataDirLocater::GetDataDirPaths ( ) const
const std::vector<DataDir>& DataDirLocater::GetDataDirs ( ) const
std::string DataDirLocater::GetIsolationModeDir ( ) const
inline

Returns the isolation-mode directory, or "", if the default one is used. The default one is CWD or CWD/.., in case of a versioned data-dir. If the env var SPRING_ISOLATED is set to a valid directory, it replaced the above mentioned default. This is only relevant if isolation-mode is active.

See also:
IsIsolationMode

Definition at line 91 of file DataDirLocater.h.

References isolationModeDir.

{ return isolationModeDir; }
const DataDir* DataDirLocater::GetWriteDir ( ) const
inline

Definition at line 51 of file DataDirLocater.h.

References writeDir.

{ return writeDir; }
std::string DataDirLocater::GetWriteDirPath ( ) const
static bool DataDirLocater::IsInstallDirDataDir ( )
staticprivate

Determines whether a given path may be a data-dir for multiple engine versions. This is done by checking the precense of some dirs, like "./maps/" and "./games/". You may think of this as denoting multi-engine-version portable-mode. This will return true on a default install on windows.

Parameters:
dirPatha path to a dir to check for whether it is a data-dir for multiple engine versions.
Returns:
whether dirPath may be a data-dir for multiple engine versions.
bool DataDirLocater::IsIsolationMode ( ) const
inline

Returns whether isolation-mode is enabled. In isolation-mode, we will only use a singel data-dir. This defaults to false, but can be set to true by setting the env var SPRING_ISOLATED.

See also:
GetIsolationModeDir

Definition at line 66 of file DataDirLocater.h.

References isolationMode.

{ return isolationMode; }
static bool DataDirLocater::IsPortableMode ( )
static

Determines whether we are in portable mode. It defines portable mode as: The spring binary (spring binary), the unitsync and springsettings.cfg are in the same directory.

bool DataDirLocater::IsWriteableDir ( DataDir dataDir)
private
void DataDirLocater::LocateDataDirs ( )

Attempts to locate a writable data dir, and then tries to chdir to it. As the writable data dir will usually be the current dir already under windows, the chdir will have no effect.

The first dir added will be the writable data dir.

See also:
Manpage
static bool DataDirLocater::LooksLikeMultiVersionDataDir ( const std::string &  dirPath)
staticprivate
void DataDirLocater::SetIsolationMode ( bool  enabled)
inline

Sets whether isolation-mode is enabled.

See also:
IsIsolationMode
SetIsolationModeDir

Definition at line 81 of file DataDirLocater.h.

References isolationMode.

{ isolationMode = enabled; }
void DataDirLocater::SetIsolationModeDir ( const std::string &  dir)
inline

Sets the isolation-mode directory. If set to "", we use the default one, which is is CWD or CWD/.., in case of a versioned data-dir. This is only relevant if isolation-mode is active.

See also:
SetIsolationMode

Definition at line 100 of file DataDirLocater.h.

References isolationModeDir.

{ isolationModeDir = dir; }
void DataDirLocater::SetWriteDir ( const std::string &  dir)
inline

Force the write directory. If set to "", we use the default one.

Definition at line 106 of file DataDirLocater.h.

References forcedWriteDir.

{ forcedWriteDir = dir; }
std::string DataDirLocater::SubstEnvVars ( const std::string &  in) const
private
void DataDirLocater::UpdateIsolationModeByEnvVar ( )

Member Data Documentation

std::vector<DataDir> DataDirLocater::dataDirs
private

Definition at line 177 of file DataDirLocater.h.

std::string DataDirLocater::forcedWriteDir
private

Definition at line 175 of file DataDirLocater.h.

Referenced by SetWriteDir().

bool DataDirLocater::isolationMode
private

Definition at line 173 of file DataDirLocater.h.

Referenced by IsIsolationMode(), and SetIsolationMode().

std::string DataDirLocater::isolationModeDir
private

Definition at line 174 of file DataDirLocater.h.

Referenced by GetIsolationModeDir(), and SetIsolationModeDir().

const DataDir* DataDirLocater::writeDir
private

Definition at line 178 of file DataDirLocater.h.

Referenced by GetWriteDir().


The documentation for this class was generated from the following file: