summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2015-04-08 16:32:28 +0200
committerEdward Thomson <ethomson@edwardthomson.com>2015-04-08 16:32:28 +0200
commita01d3a0b503559fe09519b787f353b25e52a0420 (patch)
tree2757d32483566ee02f4044daf6a1c352f97a6ad2
parent47f37400253210f483d84fb9c2ecf44fb5986849 (diff)
parent08e1fd651716b2fd13b4e594c057ba30edadd23c (diff)
downloadlibgit2-a01d3a0b503559fe09519b787f353b25e52a0420.tar.gz
Merge pull request #3033 from pks-t/describe-oid-fallback
Fix describe without refs and OID fallbacks
-rw-r--r--examples/.gitignore1
-rw-r--r--examples/Makefile1
-rw-r--r--src/describe.c2
-rw-r--r--tests/describe/describe.c7
4 files changed, 9 insertions, 2 deletions
diff --git a/examples/.gitignore b/examples/.gitignore
index fb96d7925..0e491598a 100644
--- a/examples/.gitignore
+++ b/examples/.gitignore
@@ -11,4 +11,5 @@ remote
status
tag
for-each-ref
+describe
*.dSYM
diff --git a/examples/Makefile b/examples/Makefile
index 01f8592d9..bd7e92dc9 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -5,6 +5,7 @@ CFLAGS = -g -I../include -I../src -Wall -Wextra -Wmissing-prototypes -Wno-missin
LFLAGS = -L../build -lgit2 -lz
APPS = general showindex diff rev-list cat-file status log rev-parse init blame tag remote
APPS += for-each-ref
+APPS += describe
all: $(APPS)
diff --git a/src/describe.c b/src/describe.c
index 68bac2d2f..5aea927c1 100644
--- a/src/describe.c
+++ b/src/describe.c
@@ -693,7 +693,7 @@ int git_describe_commit(
get_name, &data)) < 0)
goto cleanup;
- if (git_oidmap_size(data.names) == 0) {
+ if (git_oidmap_size(data.names) == 0 && !opts->show_commit_oid_as_fallback) {
giterr_set(GITERR_DESCRIBE, "Cannot describe - "
"No reference found, cannot describe anything.");
error = -1;
diff --git a/tests/describe/describe.c b/tests/describe/describe.c
index 9a523a169..a8c57d874 100644
--- a/tests/describe/describe.c
+++ b/tests/describe/describe.c
@@ -28,7 +28,7 @@ static int delete_cb(git_reference *ref, void *payload)
return 0;
}
-void test_describe_describe__cannot_describe_against_a_repo_with_no_ref(void)
+void test_describe_describe__describe_a_repo_with_no_refs(void)
{
git_repository *repo;
git_describe_options opts = GIT_DESCRIBE_OPTIONS_INIT;
@@ -41,8 +41,13 @@ void test_describe_describe__cannot_describe_against_a_repo_with_no_ref(void)
cl_git_pass(git_reference_foreach(repo, delete_cb, NULL));
+ /* Impossible to describe without falling back to OIDs */
cl_git_fail(git_describe_commit(&result, object, &opts));
+ /* Try again with OID fallbacks */
+ opts.show_commit_oid_as_fallback = 1;
+ cl_git_pass(git_describe_commit(&result, object, &opts));
+
git_describe_result_free(result);
git_object_free(object);
git_buf_free(&buf);