Commit 08e1fd651716b2fd13b4e594c057ba30edadd23c

Patrick Steinhardt 2015-04-07T14:44:08

describe: only abort without tags if fallback is not allowed. When no reference names could be found we did error out when trying to describe a commit. This is wrong, though, when the option to fall back to a commit's object ID is set.

diff --git a/src/describe.c b/src/describe.c
index 68bac2d..5aea927 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 9a523a1..a8c57d8 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);