describe --contains: default to HEAD when no commit-ish is given
'git describe --contains' doesn't default to HEAD when no commit is given, and it doesn't produce any output, not even an error: ~/src/git ((v2.5.0))$ ./git describe --contains ~/src/git ((v2.5.0))$ ./git describe --contains HEAD v2.5.0^0 Unlike other 'git describe' options, the '--contains' code path is implemented by calling 'name-rev' with a bunch of options plus all the commit-ishes that were passed to 'git describe'. If no commit-ish was present, then 'name-rev' got invoked with none, which then leads to the behavior illustrated above. Porcelain commands usually default to HEAD when no commit-ish is given, and 'git describe' already does so in all other cases, so it should do so with '--contains' as well. Pass HEAD to 'name-rev' when no commit-ish is given on the command line to make '--contains' behave consistently with other 'git describe' options. While at it, use argv_array_pushv() instead of the loop to pass commit-ishes to 'git name-rev'. 'git describe's short help already indicates that the commit-ish is optional, but the synopsis in the man page doesn't, so update it accordingly as well. Signed-off-by: SZEDER Gábor <szeder@ira.uka.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
282616c72d
commit
2bd07065c3
@ -9,7 +9,7 @@ git-describe - Show the most recent tag that is reachable from a commit
|
|||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
[verse]
|
[verse]
|
||||||
'git describe' [--all] [--tags] [--contains] [--abbrev=<n>] <commit-ish>...
|
'git describe' [--all] [--tags] [--contains] [--abbrev=<n>] [<commit-ish>...]
|
||||||
'git describe' [--all] [--tags] [--contains] [--abbrev=<n>] --dirty[=<mark>]
|
'git describe' [--all] [--tags] [--contains] [--abbrev=<n>] --dirty[=<mark>]
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
@ -27,7 +27,7 @@ see the -a and -s options to linkgit:git-tag[1].
|
|||||||
OPTIONS
|
OPTIONS
|
||||||
-------
|
-------
|
||||||
<commit-ish>...::
|
<commit-ish>...::
|
||||||
Commit-ish object names to describe.
|
Commit-ish object names to describe. Defaults to HEAD if omitted.
|
||||||
|
|
||||||
--dirty[=<mark>]::
|
--dirty[=<mark>]::
|
||||||
Describe the working tree.
|
Describe the working tree.
|
||||||
|
@ -451,10 +451,10 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
|
|||||||
if (pattern)
|
if (pattern)
|
||||||
argv_array_pushf(&args, "--refs=refs/tags/%s", pattern);
|
argv_array_pushf(&args, "--refs=refs/tags/%s", pattern);
|
||||||
}
|
}
|
||||||
while (*argv) {
|
if (argc)
|
||||||
argv_array_push(&args, *argv);
|
argv_array_pushv(&args, argv);
|
||||||
argv++;
|
else
|
||||||
}
|
argv_array_push(&args, "HEAD");
|
||||||
return cmd_name_rev(args.argc, args.argv, prefix);
|
return cmd_name_rev(args.argc, args.argv, prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,6 +113,14 @@ check_describe A-3-* --long HEAD^^2
|
|||||||
check_describe c-7-* --tags
|
check_describe c-7-* --tags
|
||||||
check_describe e-3-* --first-parent --tags
|
check_describe e-3-* --first-parent --tags
|
||||||
|
|
||||||
|
test_expect_success 'describe --contains defaults to HEAD without commit-ish' '
|
||||||
|
echo "A^0" >expect &&
|
||||||
|
git checkout A &&
|
||||||
|
test_when_finished "git checkout -" &&
|
||||||
|
git describe --contains >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
: >err.expect
|
: >err.expect
|
||||||
check_describe A --all A^0
|
check_describe A --all A^0
|
||||||
test_expect_success 'no warning was displayed for A' '
|
test_expect_success 'no warning was displayed for A' '
|
||||||
|
Loading…
Reference in New Issue
Block a user