Browse Source

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>
maint
SZEDER Gábor 10 years ago committed by Junio C Hamano
parent
commit
2bd07065c3
  1. 4
      Documentation/git-describe.txt
  2. 8
      builtin/describe.c
  3. 8
      t/t6120-describe.sh

4
Documentation/git-describe.txt

@ -9,7 +9,7 @@ git-describe - Show the most recent tag that is reachable from a commit @@ -9,7 +9,7 @@ git-describe - Show the most recent tag that is reachable from a commit
SYNOPSIS
--------
[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>]

DESCRIPTION
@ -27,7 +27,7 @@ see the -a and -s options to linkgit:git-tag[1]. @@ -27,7 +27,7 @@ see the -a and -s options to linkgit:git-tag[1].
OPTIONS
-------
<commit-ish>...::
Commit-ish object names to describe.
Commit-ish object names to describe. Defaults to HEAD if omitted.

--dirty[=<mark>]::
Describe the working tree.

8
builtin/describe.c

@ -451,10 +451,10 @@ int cmd_describe(int argc, const char **argv, const char *prefix) @@ -451,10 +451,10 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
if (pattern)
argv_array_pushf(&args, "--refs=refs/tags/%s", pattern);
}
while (*argv) {
argv_array_push(&args, *argv);
argv++;
}
if (argc)
argv_array_pushv(&args, argv);
else
argv_array_push(&args, "HEAD");
return cmd_name_rev(args.argc, args.argv, prefix);
}


8
t/t6120-describe.sh

@ -113,6 +113,14 @@ check_describe A-3-* --long HEAD^^2 @@ -113,6 +113,14 @@ check_describe A-3-* --long HEAD^^2
check_describe c-7-* --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
check_describe A --all A^0
test_expect_success 'no warning was displayed for A' '

Loading…
Cancel
Save