Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to approach --help implementation #96

Open
kov opened this issue Sep 30, 2024 · 1 comment
Open

How to approach --help implementation #96

kov opened this issue Sep 30, 2024 · 1 comment

Comments

@kov
Copy link

kov commented Sep 30, 2024

I am working on the cmp implementation (#88) and would like to have --help output something useful, which I think is important for our version to really replace GNU cmp on a system. We should figure out which way to go here so that we can apply it to the other diffutils tools.

I believe we have 2 main options:

  1. Basically copy/paste GNU cmp output, with minimal changes
  2. Write from scratch

Option 1 has the benefit of being familiar for people who are used to the GNU tooling, or for those crazy enough to have scripted parsing of this output, for some reason. I suppose the main concern for doing it like this is an argument could be made that the output is copyrighted. This is how I envision it looking (note the different links at the bottom):

    print!(
        indoc! {"
        Usage: {} [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]
        Compare two files byte by byte.

        The optional SKIP1 and SKIP2 specify the number of bytes to skip
        at the beginning of each file (zero by default).

        Mandatory arguments to long options are mandatory for short options too.
          -b, --print-bytes          print differing bytes
          -i, --ignore-initial=SKIP         skip first SKIP bytes of both inputs
          -i, --ignore-initial=SKIP1:SKIP2  skip first SKIP1 bytes of FILE1 and
                                              first SKIP2 bytes of FILE2
          -l, --verbose              output byte numbers and differing byte values
          -n, --bytes=LIMIT          compare at most LIMIT bytes
          -s, --quiet, --silent      suppress all normal output
              --help                 display this help and exit
          -v, --version              output version information and exit

        SKIP values may be followed by the following multiplicative suffixes:
        kB 1000, K 1024, MB 1,000,000, M 1,048,576,
        GB 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y.

        If a FILE is '-' or missing, read standard input.
        Exit status is 0 if inputs are the same, 1 if different, 2 if trouble.

        This utility is part of the uutils project: https://github.com/uutils/
        Report bugs here: https://github.com/uutils/diffutils/issues
    "},
        params.executable.to_string_lossy()
    );

Option 2 is slightly more work, but dodges any concerns related to using stuff directly from GNU cmp, and something we would probably want if we ever move to something like Clap, I suppose.

Thoughts? Concerns?

@oSoMoN
Copy link
Collaborator

oSoMoN commented Sep 30, 2024

FWIW, the uutils/coreutils project doesn't seem to be aiming at replicating the help messages from its GNU counterpart. I took a cursory look at the output for various utilities, and in fact I'm seeing help messages that are more detailed and better structured. From a cursory look, I could find the following relevant issues: uutils/coreutils#818 and uutils/coreutils#4000. Both seem to go in the direction of option 2, i.e. rewrite help (and error) messages to dodge any copyright concerns.

I personally don't think scripted parsing of the help messages should be a concern. Those are localized, and intended for humans.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants