Skip to content
This repository has been archived by the owner on Sep 1, 2022. It is now read-only.

Program options arg types and Bash completion #614

Merged
merged 2 commits into from
Apr 6, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 18 additions & 12 deletions pkg/kovri-bash.sh
Original file line number Diff line number Diff line change
Expand Up @@ -57,25 +57,31 @@ _parse_kovri_help() {
# Completion suggestions
########################################
_kovri() {
local cur prev
local cur prev type
_init_completion -n = || return

case "${prev}" in
--host|--port|--service|--httpproxyport|--httpproxyaddress|--socksproxyport| \
--socksproxyaddress|--i2pcontrolport|--i2pcontroladdress|--i2pcontrolpassword| \
--reseed-from)
# An argument is required.
return
;;
--log-to-file|--log-to-console|--floodfill|-f|--enable-ssu|--enable-ntcp| \
--daemon)
COMPREPLY=($(compgen -W "on off yes no true false 1 0" -- "${cur}"))
return
;;
--log-level)
COMPREPLY=($(compgen -W "0 1 2 3 4 5" -- "${cur}"))
return
;;
-*)
type=$(kovri --help | \
grep -Poi "^\s*(${prev}|\-\w \[ ${prev} \]|${prev} \[ --\S+ \])\s\K\w+")
case "${type}" in
path)
_filedir
return
;;
bool)
COMPREPLY=($(compgen -W "on off yes no true false 1 0" -- "${cur}"))
return
;;
arg)
# An argument is required.
return
;;
esac
esac

# Start parsing the help for option suggestions.
Expand Down
37 changes: 23 additions & 14 deletions src/app/config.cc
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,17 @@ void Configuration::ParseKovriConfig() {
"host", bpo::value<std::string>()->default_value("127.0.0.1"))(
"port,p", bpo::value<int>()->default_value(0))(
"data-dir",
bpo::value<std::string>()->default_value(
kovri::core::GetDefaultDataPath().string()))(
"daemon,d", bpo::value<bool>()->default_value(false))(
bpo::value<std::string>()
->default_value(kovri::core::GetDefaultDataPath().string())
->value_name("path"))(
"daemon,d", bpo::value<bool>()->default_value(false)->value_name("bool"))(
"service,s", bpo::value<std::string>()->default_value(""))(
"log-to-console", bpo::value<bool>()->default_value(true))(
"log-to-file", bpo::value<bool>()->default_value(true))(
"log-file-name", bpo::value<std::string>()->default_value(""))(
"log-to-console",
bpo::value<bool>()->default_value(true)->value_name("bool"))(
"log-to-file",
bpo::value<bool>()->default_value(true)->value_name("bool"))(
"log-file-name",
bpo::value<std::string>()->default_value("")->value_name("path"))(
// TODO(anonimal): use only 1 log file?
// Log levels
// 0 = fatal
Expand All @@ -90,20 +94,25 @@ void Configuration::ParseKovriConfig() {
// 3 = info warn error fatal
// 4 = debug info warn error fatal
// 5 = trace debug info warn error fatal
"log-level", bpo::value<std::uint16_t>()->default_value(3))(
"kovriconf,c", bpo::value<std::string>()->default_value(""))(
"tunnelsconf,t", bpo::value<std::string>()->default_value(""));
"log-level",
bpo::value<std::uint16_t>()->default_value(3))(
"kovriconf,c",
bpo::value<std::string>()->default_value("")->value_name("path"))(
"tunnelsconf,t",
bpo::value<std::string>()->default_value("")->value_name("path"));
// This is NOT our default values for port, log-file-name, kovriconf and tunnelsconf

bpo::options_description network("\nnetwork");
network.add_options()
("v6,6", bpo::value<bool>()->default_value(false))
("floodfill,f", bpo::value<bool>()->default_value(false))
("v6,6", bpo::value<bool>()->default_value(false)->value_name("bool"))
("floodfill,f",
bpo::value<bool>()->default_value(false)->value_name("bool"))
("bandwidth,b", bpo::value<std::string>()->default_value("L"))
("enable-ssu", bpo::value<bool>()->default_value(true))
("enable-ntcp", bpo::value<bool>()->default_value(true))
("enable-ssu", bpo::value<bool>()->default_value(true)->value_name("bool"))
("enable-ntcp", bpo::value<bool>()->default_value(true)->value_name("bool"))
("reseed-from,r", bpo::value<std::string>()->default_value(""))
("reseed-skip-ssl-check", bpo::value<bool>()->default_value(false));
("reseed-skip-ssl-check",
bpo::value<bool>()->default_value(false)->value_name("bool"));

bpo::options_description client("\nclient");
client.add_options()
Expand Down
8 changes: 6 additions & 2 deletions src/util/base.cc
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,12 @@ BaseCommand::BaseCommand() : m_Desc("General options")
{
m_Desc.add_options()("help,h", "produce this help message")(
"type,t", bpo::value<std::string>(&m_OptType), "encode/decode")(
"infile,i", bpo::value<std::string>(&m_OptInfile), "input file")(
"outfile,o", bpo::value<std::string>(&m_OptOutfile), "output file");
"infile,i",
bpo::value<std::string>(&m_OptInfile)->value_name("path"),
"input file")(
"outfile,o",
bpo::value<std::string>(&m_OptOutfile)->value_name("path"),
"output file");
}

void BaseCommand::PrintUsage(const std::string& name) const
Expand Down
9 changes: 6 additions & 3 deletions src/util/main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,12 @@ int main(int argc, const char* argv[])
// See src/app/config.cc for log options
general_desc.add_options()("help,h", "produce this help message")(
"all,a", "print all options")(
"log-to-console", bpo::value<bool>()->default_value(true))(
"log-to-file", bpo::value<bool>()->default_value(false))(
"log-file-name", bpo::value<std::string>()->default_value(""))(
"log-to-console",
bpo::value<bool>()->default_value(true)->value_name("bool"))(
"log-to-file",
bpo::value<bool>()->default_value(false)->value_name("bool"))(
"log-file-name",
bpo::value<std::string>()->default_value("")->value_name("path"))(
"log-level", bpo::value<std::uint16_t>()->default_value(3));

bpo::options_description spec("Specific options");
Expand Down