On Tue, 12 May 2020 at 22:19, Tom Zander <t...@freedommail.ch> wrote:
> They are expected to always be equivalent. It would not be logical to have the > short one as an alias if they are not equivalent. I agree. Note that you cannot have short-name with optional argument or you have to break a rule; see below. > > > You asked for an example; see `git commit -S`. From the manpage: > > > -S[<keyid>], --gpg-sign[=<keyid>] > > > > Thank you for the example. Let me show you that it raises an issue > > too because it is not so "simple". :-) > > Easier example then: from the 'ls(1)' manpage: > -I, --ignore=PATTERN No. `ls -I -l` is not doing the right behaviour, i.e., the flag '-l' is not applied. PATTERN is not optional. > seems git is trying to be smart. Git resolves the ambiguity by removing the form '-S keyid'. Other said, (1) '-Skeyid' uses keyid as argument (2) '-S keyid' fails as I showed you. (3) '-S' fallbacks to the default (see .gitconfig) Back to Guix, using the same strategy means: (1) guix package -d8 -p /path/to/profile (2) guix package -d 8 -p /path/to/profile # fails (3) guix pacakge -d -p /path/to/profile # delete all the generations except the current one The three cases cannot all works. You have to choose two cases. Currently Guix uses (1) and (2); and (3) fails. Git uses (1) and (3); and (2) fails. You have right by remarking that the "git-way" seems more consistent when flipping the options. However they are less consistent in regard with option requiring one argument. git commit -S4417B7 -m 'init' I do not have a strong opinion on the topic. Even if I am often annoyed by "guix package -I -p /path/to/profile". > The point is not to reinvent the wheel that have been invented so many > times... A command line parser is a known thing that you can, and should, > mirror how others do things. Are you aware of the wheel? :-) https://srfi.schemers.org/srfi-37/srfi-37.html https://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html https://pubs.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap12.html#tag_12_02 > Even 'ls' uses optional short arguments (--ignore). So I'm not sure I agree > with your line of reasoning. No, the argument of '--ignore' is not optional. At least with the GNU version from coreutils 8.30. Note the options with optional argument (--color and --hyperlink) do not have a short-name form. > Doing; > ls -I -v > clearly understands that '-v' is not to be used as an optional argument. > The reason, as far as I can tell, is that it does not fit as another argument. You have wrong. Compare ls -I -l ls -l -I ls -I '' -l Because Guix uses SRFI-37 to parse command-line arguments and this will not change, IMHO, the question asked on guile-devel is the one explained above about the 3 cases. All the best, simon