Commit 4811c150 by Vicent Martí

Merge pull request #1603 from ben/shallow

Shallow-clone detection
parents 30caf0cf 6f0b8142
...@@ -657,6 +657,15 @@ GIT_EXTERN(int) git_repository_set_namespace(git_repository *repo, const char *n ...@@ -657,6 +657,15 @@ GIT_EXTERN(int) git_repository_set_namespace(git_repository *repo, const char *n
*/ */
GIT_EXTERN(const char *) git_repository_get_namespace(git_repository *repo); GIT_EXTERN(const char *) git_repository_get_namespace(git_repository *repo);
/**
* Determine if the repository was a shallow clone
*
* @param repo The repository
* @return 1 if shallow, zero if not
*/
GIT_EXTERN(int) git_repository_is_shallow(git_repository *repo);
/** @} */ /** @} */
GIT_END_DECL GIT_END_DECL
#endif #endif
...@@ -1822,3 +1822,20 @@ int git_repository_state(git_repository *repo) ...@@ -1822,3 +1822,20 @@ int git_repository_state(git_repository *repo)
git_buf_free(&repo_path); git_buf_free(&repo_path);
return state; return state;
} }
int git_repository_is_shallow(git_repository *repo)
{
git_buf path = GIT_BUF_INIT;
struct stat st;
int error;
git_buf_joinpath(&path, repo->path_repository, "shallow");
error = git_path_lstat(path.ptr, &st);
git_buf_free(&path);
if (error == GIT_ENOTFOUND)
return 0;
if (error < 0)
return -1;
return st.st_size == 0 ? 0 : 1;
}
#include "clar_libgit2.h"
#include "fileops.h"
static git_repository *g_repo;
void test_repo_shallow__initialize(void)
{
}
void test_repo_shallow__cleanup(void)
{
cl_git_sandbox_cleanup();
}
void test_repo_shallow__no_shallow_file(void)
{
g_repo = cl_git_sandbox_init("testrepo.git");
cl_assert_equal_i(0, git_repository_is_shallow(g_repo));
}
void test_repo_shallow__empty_shallow_file(void)
{
g_repo = cl_git_sandbox_init("testrepo.git");
cl_git_mkfile("testrepo.git/shallow", "");
cl_assert_equal_i(0, git_repository_is_shallow(g_repo));
}
void test_repo_shallow__shallow_repo(void)
{
g_repo = cl_git_sandbox_init("shallow.git");
cl_assert_equal_i(1, git_repository_is_shallow(g_repo));
}
[core]
repositoryformatversion = 0
filemode = true
bare = true
ignorecase = true
precomposeunicode = false
[remote "origin"]
url = file://testrepo.git
# pack-refs with: peeled
a65fedf39aefe402d3bb6e24df4d4f5fe4547750 refs/heads/master
be3563ae3f795b2b4353bcce3a527ad0a4f7f644
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment