mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-03 09:56:38 -05:00
util: Add GetPathArg default path argument
Let GetPathArg method be used more places for path arguments that have default values, like "-settings" and BITCOIN_SETTINGS_FILENAME in the next commit. Also: - Fix negated argument handling. Return path{} not path{"0"} when path argument is negated. - Add new tests for default and negated cases - Move GetPathArg() method declaration next to GetArg() declarations. The two methods are close substitutes for each other, so this should help keep them consistent and make them more discoverable.
This commit is contained in:
parent
08bcfa2767
commit
687e655ae2
3 changed files with 35 additions and 12 deletions
|
@ -245,6 +245,24 @@ BOOST_AUTO_TEST_CASE(patharg)
|
||||||
|
|
||||||
ResetArgs(local_args, "-dir=user/.bitcoin/.//");
|
ResetArgs(local_args, "-dir=user/.bitcoin/.//");
|
||||||
BOOST_CHECK_EQUAL(local_args.GetPathArg("-dir"), relative_path);
|
BOOST_CHECK_EQUAL(local_args.GetPathArg("-dir"), relative_path);
|
||||||
|
|
||||||
|
// Check negated and default argument handling. Specifying an empty argument
|
||||||
|
// is the same as not specifying the argument. This is convenient for
|
||||||
|
// scripting so later command line arguments can override earlier command
|
||||||
|
// line arguments or bitcoin.conf values. Currently the -dir= case cannot be
|
||||||
|
// distinguished from -dir case with no assignment, but #16545 would add the
|
||||||
|
// ability to distinguish these in the future (and treat the no-assign case
|
||||||
|
// like an imperative command or an error).
|
||||||
|
ResetArgs(local_args, "");
|
||||||
|
BOOST_CHECK_EQUAL(local_args.GetPathArg("-dir", "default"), fs::path{"default"});
|
||||||
|
ResetArgs(local_args, "-dir=override");
|
||||||
|
BOOST_CHECK_EQUAL(local_args.GetPathArg("-dir", "default"), fs::path{"override"});
|
||||||
|
ResetArgs(local_args, "-dir=");
|
||||||
|
BOOST_CHECK_EQUAL(local_args.GetPathArg("-dir", "default"), fs::path{"default"});
|
||||||
|
ResetArgs(local_args, "-dir");
|
||||||
|
BOOST_CHECK_EQUAL(local_args.GetPathArg("-dir", "default"), fs::path{"default"});
|
||||||
|
ResetArgs(local_args, "-nodir");
|
||||||
|
BOOST_CHECK_EQUAL(local_args.GetPathArg("-dir", "default"), fs::path{""});
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(doubledash)
|
BOOST_AUTO_TEST_CASE(doubledash)
|
||||||
|
|
|
@ -387,9 +387,12 @@ std::optional<unsigned int> ArgsManager::GetArgFlags(const std::string& name) co
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
fs::path ArgsManager::GetPathArg(std::string pathlike_arg) const
|
fs::path ArgsManager::GetPathArg(std::string arg, const fs::path& default_value) const
|
||||||
{
|
{
|
||||||
auto result = fs::PathFromString(GetArg(pathlike_arg, "")).lexically_normal();
|
if (IsArgNegated(arg)) return fs::path{};
|
||||||
|
std::string path_str = GetArg(arg, "");
|
||||||
|
if (path_str.empty()) return default_value;
|
||||||
|
fs::path result = fs::PathFromString(path_str).lexically_normal();
|
||||||
// Remove trailing slash, if present.
|
// Remove trailing slash, if present.
|
||||||
return result.has_filename() ? result : result.parent_path();
|
return result.has_filename() ? result : result.parent_path();
|
||||||
}
|
}
|
||||||
|
|
|
@ -270,16 +270,6 @@ protected:
|
||||||
*/
|
*/
|
||||||
std::optional<const Command> GetCommand() const;
|
std::optional<const Command> GetCommand() const;
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a normalized path from a specified pathlike argument
|
|
||||||
*
|
|
||||||
* It is guaranteed that the returned path has no trailing slashes.
|
|
||||||
*
|
|
||||||
* @param pathlike_arg Pathlike argument to get a path from (e.g., "-datadir", "-blocksdir" or "-walletdir")
|
|
||||||
* @return Normalized path which is get from a specified pathlike argument
|
|
||||||
*/
|
|
||||||
fs::path GetPathArg(std::string pathlike_arg) const;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get blocks directory path
|
* Get blocks directory path
|
||||||
*
|
*
|
||||||
|
@ -342,6 +332,18 @@ protected:
|
||||||
*/
|
*/
|
||||||
std::string GetArg(const std::string& strArg, const std::string& strDefault) const;
|
std::string GetArg(const std::string& strArg, const std::string& strDefault) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return path argument or default value
|
||||||
|
*
|
||||||
|
* @param arg Argument to get a path from (e.g., "-datadir", "-blocksdir" or "-walletdir")
|
||||||
|
* @param default_value Optional default value to return instead of the empty path.
|
||||||
|
* @return normalized path if argument is set, with redundant "." and ".."
|
||||||
|
* path components and trailing separators removed (see patharg unit test
|
||||||
|
* for examples or implementation for details). If argument is empty or not
|
||||||
|
* set, default_value is returned unchanged.
|
||||||
|
*/
|
||||||
|
fs::path GetPathArg(std::string arg, const fs::path& default_value = {}) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return integer argument or default value
|
* Return integer argument or default value
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Reference in a new issue