Skip to content
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
3 changes: 3 additions & 0 deletions cmake/scripts/argparse2help.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import sys
import importlib
import os

Check failure on line 3 in cmake/scripts/argparse2help.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (I001)

cmake/scripts/argparse2help.py:1:1: I001 Import block is un-sorted or un-formatted

def getLongest():
longestSize = 0
Expand All @@ -18,6 +18,9 @@
splitPath = sys.argv[2].split("/")
file.write("#ifndef ROOT_{}\n".format(splitPath[len(splitPath)-1].partition(".")[0]))
file.write("#define ROOT_{}\n".format(splitPath[len(splitPath)-1].partition(".")[0]))
file.write("constexpr static const char kCommandLineShortHelp[] = R\"RAW(\n")
file.write(parser.format_usage() + "\n")
file.write(")RAW\";\n\n")
file.write("constexpr static const char kCommandLineOptionsHelp[] = R\"RAW(\n")
file.write(parser.format_usage() + "\n")
if parser.description is not None:
Expand All @@ -32,7 +35,7 @@
listOptions = arg.option_strings
options = ", ".join(listOptions)
spaces = " " * (12 + longestSize - len(options))
if help != None:

Check failure on line 38 in cmake/scripts/argparse2help.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (E711)

cmake/scripts/argparse2help.py:38:14: E711 Comparison to `None` should be `cond is not None`
help = help.replace("\n", "\n {}".format(" "*(len(options)) + spaces))
file.write(" {}{}{}\n".format(options, spaces, help))
else:
Expand All @@ -59,7 +62,7 @@
else:
listOptions = arg.option_strings
options = " ".join(listOptions)
if help != None:

Check failure on line 65 in cmake/scripts/argparse2help.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (E711)

cmake/scripts/argparse2help.py:65:14: E711 Comparison to `None` should be `cond is not None`
file.write(".IP {}\n".format(options))
file.write(help.replace("\n","\n.IP\n")+ "\n")
else:
Expand Down
17 changes: 12 additions & 5 deletions main/src/hadd.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ struct HAddArgs {
bool fDebug;
bool fKeepCompressionAsIs;
bool fUseFirstInputCompression;
bool fHelp;

std::optional<std::string> fWorkingDir;
std::optional<IntFlag_t> fNProcesses;
Expand Down Expand Up @@ -565,6 +566,10 @@ static std::optional<HAddArgs> ParseArgs(int argc, char **argv)
PARSE_FLAG(FlagToggle, arg, "k", args.fSkipErrors);
PARSE_FLAG(FlagToggle, arg, "O", args.fReoptimize);
PARSE_FLAG(FlagToggle, arg, "dbg", args.fDebug);
// Accept --help, -help and -h as "help"
PARSE_FLAG(FlagToggle, arg, "-help", args.fHelp);
PARSE_FLAG(FlagToggle, arg, "help", args.fHelp);
PARSE_FLAG(FlagToggle, arg, "h", args.fHelp);
PARSE_FLAG(FlagArg, argc, argv, argIdx, "d", args.fWorkingDir);
PARSE_FLAG(FlagArg, argc, argv, argIdx, "j", args.fNProcesses, {0});
PARSE_FLAG(FlagArg, argc, argv, argIdx, "Ltype", args.fObjectFilterType, {}, ConvertFilterType);
Expand Down Expand Up @@ -653,16 +658,16 @@ static Int_t ParseFilterFile(const std::optional<std::string> &filterFileName,

int main(int argc, char **argv)
{
if (argc < 3 || "-h" == std::string(argv[1]) || "--help" == std::string(argv[1])) {
fprintf(stderr, kCommandLineOptionsHelp);
return (argc == 2 && ("-h" == std::string(argv[1]) || "--help" == std::string(argv[1]))) ? 0 : 1;
}

const auto argsOpt = ParseArgs(argc, argv);
if (!argsOpt)
return 1;
const HAddArgs &args = *argsOpt;

if (args.fHelp) {
fputs(kCommandLineOptionsHelp, stderr);
return 0;
}

ROOT::TIOFeatures features = args.fFeatures.value_or(ROOT::TIOFeatures{});
Int_t maxopenedfiles = args.fMaxOpenedFiles.value_or(0);
gHaddVerbosity = args.fVerbosity.value_or(kDefaultHaddVerbosity);
Expand Down Expand Up @@ -705,10 +710,12 @@ int main(int argc, char **argv)
const char *targetname = 0;
if (!args.fOutputArgIdx) {
Err() << "missing output file.\n";
fputs(kCommandLineShortHelp, stderr);
return 1;
}
if (!args.fFirstInputIdx) {
Err() << "missing input file.\n";
fputs(kCommandLineShortHelp, stderr);
return 1;
}
targetname = argv[args.fOutputArgIdx];
Expand Down
28 changes: 28 additions & 0 deletions roottest/root/io/hadd/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -77,13 +77,41 @@ ROOTTEST_ADD_TEST(test_MergeFilterWhitelist
################################################################
# argument parsing tests #
################################################################
ROOTTEST_ADD_TEST(test_hadd_args_missing_output
COMMAND ${ROOT_hadd_CMD}
PASSREGEX "Error in <hadd>: missing output file."
)

ROOTTEST_ADD_TEST(test_hadd_args_missing_input
COMMAND ${ROOT_hadd_CMD} foo.root
PASSREGEX "Error in <hadd>: missing input file."
)

ROOTTEST_ADD_TEST(test_hadd_args_gen_input
COPY_TO_BUILDDIR hadd_gen_input_tree.C hadd_args_verify.C
PRECMD ${CMAKE_COMMAND} -E rm -f hadd_args_in.root
COMMAND ${ROOT_root_CMD} -q -b -l "hadd_gen_input_tree.C(\"hadd_args_in.root\")"
FIXTURES_SETUP root-io-hadd-test_hadd_args_gen_input-fixture
)

ROOTTEST_ADD_TEST(test_hadd_args_help_short
FIXTURES_REQUIRED root-io-hadd-test_hadd_args_gen_input-fixture
COMMAND ${ROOT_hadd_CMD} -n0 hadd_args_n0_out.root hadd_args_in.root -h
PASSREGEX "usage: hadd"
)

ROOTTEST_ADD_TEST(test_hadd_args_help_long
FIXTURES_REQUIRED root-io-hadd-test_hadd_args_gen_input-fixture
COMMAND ${ROOT_hadd_CMD} -n0 hadd_args_n0_out.root hadd_args_in.root -help
PASSREGEX "usage: hadd"
)

ROOTTEST_ADD_TEST(test_hadd_args_help_long2
FIXTURES_REQUIRED root-io-hadd-test_hadd_args_gen_input-fixture
COMMAND ${ROOT_hadd_CMD} -n0 hadd_args_n0_out.root hadd_args_in.root --help
PASSREGEX "usage: hadd"
)

ROOTTEST_ADD_TEST(test_hadd_args_n0
FIXTURES_REQUIRED root-io-hadd-test_hadd_args_gen_input-fixture
PRECMD ${CMAKE_COMMAND} -E rm -f hadd_args_n0_out.root
Expand Down
Loading