ENH: Refactor internal file(INSTALL) arg parsing

The internal file(INSTALL) command argument parsing used several
booleans with at most one set to true at a time to track argument
parsing state.  This refactors it to use one enumeration.
This commit is contained in:
Brad King 2009-01-05 11:03:41 -05:00
parent 024aa044de
commit e2fa035c70

View File

@ -1688,11 +1688,10 @@ bool cmFileCommand::ParseInstallArgs(std::vector<std::string> const& args,
bool& optional) bool& optional)
{ {
std::string stype = "FILES"; std::string stype = "FILES";
bool doing_files = false; enum Doing { DoingNone, DoingFiles, DoingProperties,
bool doing_properties = false; DoingPermissionsFile, DoingPermissionsDir,
bool doing_permissions_file = false; DoingPermissionsMatch };
bool doing_permissions_dir = false; Doing doing = DoingNone;
bool doing_permissions_match = false;
bool use_given_permissions_file = false; bool use_given_permissions_file = false;
bool use_given_permissions_dir = false; bool use_given_permissions_dir = false;
bool use_source_permissions = false; bool use_source_permissions = false;
@ -1717,10 +1716,7 @@ bool cmFileCommand::ParseInstallArgs(std::vector<std::string> const& args,
i++; i++;
destination = args[i]; destination = args[i];
doing_files = false; doing = DoingNone;
doing_properties = false;
doing_permissions_file = false;
doing_permissions_dir = false;
} }
else if ( *cstr == "TYPE" && i < args.size()-1 ) else if ( *cstr == "TYPE" && i < args.size()-1 )
{ {
@ -1739,10 +1735,7 @@ bool cmFileCommand::ParseInstallArgs(std::vector<std::string> const& args,
i++; i++;
optional = true; optional = true;
} }
doing_properties = false; doing = DoingNone;
doing_files = false;
doing_permissions_file = false;
doing_permissions_dir = false;
} }
else if ( *cstr == "RENAME" && i < args.size()-1 ) else if ( *cstr == "RENAME" && i < args.size()-1 )
{ {
@ -1756,10 +1749,7 @@ bool cmFileCommand::ParseInstallArgs(std::vector<std::string> const& args,
i++; i++;
rename = args[i]; rename = args[i];
doing_properties = false; doing = DoingNone;
doing_files = false;
doing_permissions_file = false;
doing_permissions_dir = false;
} }
else if ( *cstr == "REGEX" && i < args.size()-1 ) else if ( *cstr == "REGEX" && i < args.size()-1 )
{ {
@ -1773,10 +1763,7 @@ bool cmFileCommand::ParseInstallArgs(std::vector<std::string> const& args,
this->SetError(e.str().c_str()); this->SetError(e.str().c_str());
return false; return false;
} }
doing_properties = false; doing = DoingNone;
doing_files = false;
doing_permissions_file = false;
doing_permissions_dir = false;
} }
else if ( *cstr == "EXCLUDE" ) else if ( *cstr == "EXCLUDE" )
{ {
@ -1790,7 +1777,7 @@ bool cmFileCommand::ParseInstallArgs(std::vector<std::string> const& args,
return false; return false;
} }
current_match_rule->Properties.Exclude = true; current_match_rule->Properties.Exclude = true;
doing_permissions_match = true; doing = DoingPermissionsMatch;
} }
else if ( *cstr == "PROPERTIES" ) else if ( *cstr == "PROPERTIES" )
{ {
@ -1802,27 +1789,19 @@ bool cmFileCommand::ParseInstallArgs(std::vector<std::string> const& args,
return false; return false;
} }
doing_properties = true; doing = DoingProperties;
doing_files = false;
doing_permissions_file = false;
doing_permissions_dir = false;
} }
else if ( *cstr == "PERMISSIONS" ) else if ( *cstr == "PERMISSIONS" )
{ {
if(current_match_rule) if(current_match_rule)
{ {
doing_permissions_match = true; doing = DoingPermissionsMatch;
doing_permissions_file = false;
} }
else else
{ {
doing_permissions_match = false; doing = DoingPermissionsFile;
doing_permissions_file = true;
use_given_permissions_file = true; use_given_permissions_file = true;
} }
doing_properties = false;
doing_files = false;
doing_permissions_dir = false;
} }
else if ( *cstr == "DIR_PERMISSIONS" ) else if ( *cstr == "DIR_PERMISSIONS" )
{ {
@ -1835,10 +1814,7 @@ bool cmFileCommand::ParseInstallArgs(std::vector<std::string> const& args,
} }
use_given_permissions_dir = true; use_given_permissions_dir = true;
doing_properties = false; doing = DoingPermissionsDir;
doing_files = false;
doing_permissions_file = false;
doing_permissions_dir = true;
} }
else if ( *cstr == "USE_SOURCE_PERMISSIONS" ) else if ( *cstr == "USE_SOURCE_PERMISSIONS" )
{ {
@ -1850,10 +1826,7 @@ bool cmFileCommand::ParseInstallArgs(std::vector<std::string> const& args,
return false; return false;
} }
doing_properties = false; doing = DoingNone;
doing_files = false;
doing_permissions_file = false;
doing_permissions_dir = false;
use_source_permissions = true; use_source_permissions = true;
} }
else if ( *cstr == "FILES_MATCHING" ) else if ( *cstr == "FILES_MATCHING" )
@ -1866,10 +1839,7 @@ bool cmFileCommand::ParseInstallArgs(std::vector<std::string> const& args,
return false; return false;
} }
doing_properties = false; doing = DoingNone;
doing_files = false;
doing_permissions_file = false;
doing_permissions_dir = false;
installer.MatchlessFiles = false; installer.MatchlessFiles = false;
} }
else if ( *cstr == "COMPONENTS" ) else if ( *cstr == "COMPONENTS" )
@ -1890,7 +1860,7 @@ bool cmFileCommand::ParseInstallArgs(std::vector<std::string> const& args,
this->SetError(e.str().c_str()); this->SetError(e.str().c_str());
return false; return false;
} }
else if ( *cstr == "FILES" && !doing_files) else if(*cstr == "FILES" && doing != DoingFiles)
{ {
if(current_match_rule) if(current_match_rule)
{ {
@ -1900,35 +1870,32 @@ bool cmFileCommand::ParseInstallArgs(std::vector<std::string> const& args,
return false; return false;
} }
doing_files = true; doing = DoingFiles;
doing_properties = false;
doing_permissions_file = false;
doing_permissions_dir = false;
} }
else if ( doing_properties && i < args.size()-1 ) else if(doing == DoingProperties && i < args.size()-1)
{ {
properties[args[i]] = args[i+1].c_str(); properties[args[i]] = args[i+1].c_str();
i++; i++;
} }
else if ( doing_files ) else if(doing == DoingFiles)
{ {
files.push_back(*cstr); files.push_back(*cstr);
} }
else if(doing_permissions_file) else if(doing == DoingPermissionsFile)
{ {
if(!installer.CheckPermissions(args[i], permissions_file)) if(!installer.CheckPermissions(args[i], permissions_file))
{ {
return false; return false;
} }
} }
else if(doing_permissions_dir) else if(doing == DoingPermissionsDir)
{ {
if(!installer.CheckPermissions(args[i], permissions_dir)) if(!installer.CheckPermissions(args[i], permissions_dir))
{ {
return false; return false;
} }
} }
else if(doing_permissions_match) else if(doing == DoingPermissionsMatch)
{ {
if(!installer.CheckPermissions( if(!installer.CheckPermissions(
args[i], current_match_rule->Properties.Permissions)) args[i], current_match_rule->Properties.Permissions))