[main] Introduce cmdline option parser to share some code between executables#20073
[main] Introduce cmdline option parser to share some code between executables#20073silverweed merged 2 commits intoroot-project:masterfrom
Conversation
Test Results 22 files 22 suites 3d 18h 24m 6s ⏱️ For more details on these failures, see this check. Results for commit 0b7e907. ♻️ This comment has been updated with latest results. |
|
Thanks a lot for the initiative! Even if it's 300 lines of code, isn't it better to rely on something external that gets auto-maintained, even if it's bigger in number of lines of code? Or to understand better the motivation, what do we gain by having a small parser for which we have to add our own tests?
|
It's mostly the last point (though the first is also somewhat important). |
d475a82 to
3e4fe8b
Compare
|
On the flipside, a library that is heavily used is more likely to come across all of the weird edge cases that are going to end up making the custom implementation significantly longer eventually. When I designed CLI11, I did have ROOT in mind, and with that you could actually make it easy to have a user extend an application. That would definitely be more than 10x functionality. |
This is an unprovable assumption as of now - if we start finding such edge cases regularly then this might tilt the decision towards an external library. It's very easy to change our mind later after all, this is all "leaf code", which brings me to the second point:
I don't see the point here: the user cannot "extend" a binary like
Again, this is conjecture which can only be proven with actually trying both things. My position is: let's start with the simpler option, then if we realize it was a mistake we can easily swap the implementation later. |
e709b30 to
9ef69b0
Compare
jblomer
left a comment
There was a problem hiding this comment.
Nice! Two general comments:
- I'd call "boolean flag" a switch
- Perhaps call out in the initial documentation that repeated flags are not supported (e.g., no
root-ssh -vvv)
ca1bf2d to
16da20f
Compare
…on Mac See comment in the code as to why
We now have enough C++ executables (with more to be ported) to justify sharing some code between them, in particular option parsing.
This PR introduces a simple option parser class that covers most of our cases. Not all cases (e.g.
haddkeeps its custom parsing because it's a bit weird), but it's already enough to coverrootlsandrootbrowse, and will in the future also coverrootcp,rootmvetc.The parser is documented with code examples and properly tested and it's about 300 lines of codes (about an order of magnitude less than e.g. cxxopts which in my opinion is overkill for our use case).
Checklist: