summaryrefslogtreecommitdiff
path: root/builtin
diff options
context:
space:
mode:
authorIlya Bobyr <ilya.bobyr@gmail.com>2014-03-22 09:47:34 (GMT)
committerJunio C Hamano <gitster@pobox.com>2014-03-24 00:28:03 (GMT)
commit9bab5b6061f1bc8ca54f8ac145f4f88c644e3bc4 (patch)
treeeaa52a5624ceb7be5177a4ffc2f809019865138b /builtin
parent3f09db07b3dc0758756fad73c96abd0e47cbcd1b (diff)
downloadgit-9bab5b6061f1bc8ca54f8ac145f4f88c644e3bc4.zip
git-9bab5b6061f1bc8ca54f8ac145f4f88c644e3bc4.tar.gz
git-9bab5b6061f1bc8ca54f8ac145f4f88c644e3bc4.tar.bz2
rev-parse --parseopt: option argument name hints
Built-in commands can specify names for option arguments when usage text is generated for a command. sh based commands should be able to do the same. Option argument name hint is any text that comes after [*=?!] after the argument name up to the first whitespace. Signed-off-by: Ilya Bobyr <ilya.bobyr@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r--builtin/rev-parse.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index 45901df..1a6122d 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c
@@ -395,9 +395,10 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix)
usage[unb++] = strbuf_detach(&sb, NULL);
}
- /* parse: (<short>|<short>,<long>|<long>)[=?]? SP+ <help> */
+ /* parse: (<short>|<short>,<long>|<long>)[*=?!]*<arghint>? SP+ <help> */
while (strbuf_getline(&sb, stdin, '\n') != EOF) {
const char *s;
+ const char *end;
struct option *o;
if (!sb.len)
@@ -419,6 +420,16 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix)
o->value = &parsed;
o->flags = PARSE_OPT_NOARG;
o->callback = &parseopt_dump;
+
+ /* Possible argument name hint */
+ end = s;
+ while (s > sb.buf && strchr("*=?!", s[-1]) == NULL)
+ --s;
+ if (s != sb.buf && s != end)
+ o->argh = xmemdupz(s, end - s);
+ if (s == sb.buf)
+ s = end;
+
while (s > sb.buf && strchr("*=?!", s[-1])) {
switch (*--s) {
case '=':