From: Stefan Beller <stefanbeller@googlemail.com>
To: Thomas Rast <tr@thomasrast.ch>
Cc: Josh Triplett <josh@joshtriplett.org>,
Michael Haggerty <mhagger@alum.mit.edu>,
git@vger.kernel.org, Dan Carpenter <dan.carpenter@oracle.com>,
Greg KH <greg@kroah.com>,
ksummit-2013-discuss@lists.linuxfoundation.org,
ksummit-attendees@lists.linuxfoundation.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] commit: Add -f, --fixes <commit> option to add Fixes: line
Date: Sun, 27 Oct 2013 18:03:12 +0100 [thread overview]
Message-ID: <526D4750.7040804@googlemail.com> (raw)
In-Reply-To: <87zjpuznf1.fsf@thomasrast.ch>
On 10/27/2013 05:30 PM, Thomas Rast wrote:
> Stefan Beller <stefanbeller@googlemail.com> writes:
>
>> I assembled an overview table, which plots the long options of
>> git commands by the short letters.
> [...]
>> (In case thunderbird messes it up, here it is again http://pastebin.com/raw.php?i=JBci2Krx)
>>
>> As you can see, f is always --force except for git-config, where it is --file
>
> Woah! Impressive work. Did you autogenerate this? If so, can we have
> it as a small make target somewhere? If not, can you send a patch to
> put your table in Documentation somewhere?
>
I thought about generating it by parsing the man pages,
but I felt it would not be reliable enough and quite time consuming
to come up with a parser. Parsing the C sources however also seemed time consuming,
so I decided to come up with this patch:
--8<--
Subject: [PATCH] parse-options: print all options having short and long form and exit
This patch basically only prints all options which have a long and a short form
and then aborts the program. A typical output looks like this:
./git-add
add, n, dry-run
add, v, verbose
add, i, interactive
add, p, patch
add, e, edit
add, f, force
add, u, update
add, N, intent-to-add
add, A, all
---
parse-options.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/parse-options.c b/parse-options.c
index 62e9b1c..b356ca9 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -500,6 +500,12 @@ int parse_options(int argc, const char **argv, const char *prefix,
{
struct parse_opt_ctx_t ctx;
+ for (; options->type != OPTION_END; options++) {
+ if (options->long_name && options->short_name)
+ printf("%s, %c, %s\n", argv[0], options->short_name, options->long_name);
+ }
+ exit(1);
+
parse_options_start(&ctx, argc, argv, prefix, options, flags);
switch (parse_options_step(&ctx, options, usagestr)) {
case PARSE_OPT_HELP:
--
1.8.4.1.605.g23c6912
Unfortunately we can only check git commands, which are written in C.
You'll notice all the perl/shell written commands are missing (rebase, etc).
Also a few commands written in C cannot easily be picked up, as they do stuff
before calling parse_options. [typically something like "if (argc != 4) print_usage();"]
These commands are also not contained.
The generation of the table however was just a little python:
--8<--
#!/usr/bin/python
cmds="""git-add
git-apply
git-archive
git-branch
git-check-attr
git-check-ignore
git-check-mailmap
git-checkout
git-checkout-index
git-cherry
git-cherry-pick
git-clean
git-clone
git-column
git-commit
git-config
git-count-objects
git-credential-cache
git-credential-store
git-describe
git-fetch
git-fmt-merge-msg
git-for-each-ref
git-format-patch
git-fsck
git-fsck-objects
git-gc
git-grep
git-hash-object
git-help
git-init
git-init-db
git-log
git-ls-files
git-ls-tree
git-merge
git-merge-base
git-merge-file
git-merge-ours
git-mktree
git-mv
git-name-rev
git-notes
git-pack-objects
git-pack-refs
git-prune
git-prune-packed
git-push
git-read-tree
git-reflog
git-remote
git-repack
git-replace
git-rerere
git-reset
git-revert
git-rev-parse
git-rm
git-show
git-show-branch
git-show-ref
git-stage
git-status
git-symbolic-ref
git-tag
git-update-index
git-update-ref
git-update-server-info
git-verify-pack
git-verify-tag
git-whatchanged
git-write-tree"""
import subprocess
shorts={}
cmdoptions={}
for cmd in cmds.split("\n"):
p = subprocess.Popen("./"+cmd, stdout=subprocess.PIPE)
p.wait()
lines = p.stdout.read()
for line in lines.split("\n"):
if not len(line):
continue
name, short, long = line.split(",")
if not short in shorts:
shorts[short] = len(long)
else:
shorts[short] = max(shorts[short], len(long))
if not name in cmdoptions:
cmdoptions[name] = {}
cmdoptions[name][short] = long
longest_cmd = 0
for cmd in cmdoptions:
longest_cmd = max(longest_cmd, len(cmd))
print " "*(longest_cmd-len("Name\\short")), "Name\\short",
for short in shorts:
print "|" + " "*(1+shorts[short]-len(short)) + short,
print
for cmd in cmdoptions:
print " "*(longest_cmd-len(cmd)), cmd,
for short in shorts:
s = ""
if short in cmdoptions[cmd]:
s = cmdoptions[cmd][short]
print "|" + " "*(1+shorts[short]-len(s)) + s,
print " ", cmd
--8<--
I am not sure if we should add such code to the git code base, as it would need some cleanup.
The existing table however would become outdated fast?
So I do not have a good idea, how such a table could be easily incorporated and kept up to date.
Thanks,
Stefan
next prev parent reply other threads:[~2013-10-27 17:03 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20131024122255.GI9378@mwanda>
[not found] ` <20131024122512.GB9534@mwanda>
[not found] ` <20131026181709.GB10488@kroah.com>
2013-10-27 1:34 ` [PATCH] commit: Add -f, --fixes <commit> option to add Fixes: line Josh Triplett
2013-10-27 5:42 ` Michael Haggerty
2013-10-27 6:37 ` Theodore Ts'o
2013-10-27 7:14 ` Josh Triplett
2013-10-27 8:03 ` [Ksummit-2013-discuss] " Michel Lespinasse
2013-10-27 9:23 ` Josh Triplett
2013-10-27 8:09 ` Thomas Rast
2013-10-27 9:20 ` Josh Triplett
2013-10-27 10:59 ` Johan Herland
2013-10-27 19:10 ` Christian Couder
2013-10-28 2:46 ` Johan Herland
2013-10-28 22:10 ` Thomas Rast
2013-10-29 2:02 ` Jeff King
2013-10-30 17:53 ` Johan Herland
2013-10-29 6:23 ` Christian Couder
2013-10-30 19:07 ` Johan Herland
2013-11-02 12:54 ` Christian Couder
2013-10-27 9:26 ` Stefan Beller
2013-10-27 16:30 ` Thomas Rast
2013-10-27 17:03 ` Stefan Beller [this message]
2013-10-31 23:03 ` Stefan Beller
2013-10-31 23:04 ` [PATCH] Documentation: add a script to generate a (long/short) options overview Stefan Beller
2013-10-31 23:09 ` Stefan Beller
2013-10-31 23:45 ` brian m. carlson
2013-11-01 0:09 ` Junio C Hamano
2013-10-28 9:02 ` [PATCH] commit: Add -f, --fixes <commit> option to add Fixes: line Michael Haggerty
2013-10-28 11:29 ` Johan Herland
2013-10-29 2:08 ` Jeff King
2013-10-29 8:26 ` Matthieu Moy
2013-10-30 18:12 ` Johan Herland
2013-10-31 6:28 ` Duy Nguyen
2013-10-31 17:20 ` Junio C Hamano
2013-10-31 23:52 ` Duy Nguyen
2013-11-01 0:16 ` Johan Herland
2013-10-27 8:33 ` Duy Nguyen
2013-10-27 9:13 ` Josh Triplett
2013-10-28 0:49 ` Jim Hill
2013-10-28 1:52 ` Junio C Hamano
2013-10-28 7:16 ` Josh Triplett
2013-10-28 8:27 ` Michael Haggerty
2013-10-28 8:59 ` [ksummit-attendees] " Christoph Hellwig
2013-10-28 23:09 ` Benjamin Herrenschmidt
2013-10-28 23:38 ` Russell King - ARM Linux
2013-10-28 23:41 ` Russell King - ARM Linux
2013-10-28 23:48 ` tytso
2013-10-28 9:08 ` Junio C Hamano
2013-10-29 4:45 ` Christian Couder
2013-10-29 19:54 ` Junio C Hamano
2013-10-30 17:28 ` Tony Luck
2013-10-30 18:33 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=526D4750.7040804@googlemail.com \
--to=stefanbeller@googlemail.com \
--cc=dan.carpenter@oracle.com \
--cc=git@vger.kernel.org \
--cc=greg@kroah.com \
--cc=josh@joshtriplett.org \
--cc=ksummit-2013-discuss@lists.linuxfoundation.org \
--cc=ksummit-attendees@lists.linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mhagger@alum.mit.edu \
--cc=tr@thomasrast.ch \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.