refs: add git_reference_has_log()

This commit is contained in:
nulltoken 2012-07-04 11:58:04 +02:00
parent b6bfd96fdd
commit 75261421ec
3 changed files with 44 additions and 0 deletions

View File

@ -353,6 +353,16 @@ GIT_EXTERN(int) git_reference_foreach_glob(
void *payload void *payload
); );
/**
* Check if a reflog exists for the specified reference.
*
* @param ref A git reference
*
* @return 0 when no reflog can be found, 1 when it exists;
* otherwise an error code.
*/
GIT_EXTERN(int) git_reference_has_log(git_reference *ref);
/** @} */ /** @} */
GIT_END_DECL GIT_END_DECL
#endif #endif

View File

@ -1802,3 +1802,20 @@ int git_reference_foreach_glob(
return git_reference_foreach( return git_reference_foreach(
repo, list_flags, fromglob_cb, &data); repo, list_flags, fromglob_cb, &data);
} }
int git_reference_has_log(
git_reference *ref)
{
git_buf path = GIT_BUF_INIT;
int result;
assert(ref);
if (git_buf_join_n(&path, '/', 3, ref->owner->path_repository, GIT_REFLOG_DIR, ref->name) < 0)
return -1;
result = git_path_isfile(git_buf_cstr(&path));
git_buf_free(&path);
return result;
}

View File

@ -145,3 +145,20 @@ void test_refs_reflog__renaming_the_reference_moves_the_reflog(void)
git_buf_free(&moved_log_path); git_buf_free(&moved_log_path);
git_buf_free(&master_log_path); git_buf_free(&master_log_path);
} }
static void assert_has_reflog(bool expected_result, const char *name)
{
git_reference *ref;
cl_git_pass(git_reference_lookup(&ref, g_repo, name));
cl_assert_equal_i(expected_result, git_reference_has_log(ref));
git_reference_free(ref);
}
void test_refs_reflog__reference_has_reflog(void)
{
assert_has_reflog(true, "HEAD");
assert_has_reflog(true, "refs/heads/master");
assert_has_reflog(false, "refs/heads/subtrees");
}