diff --git a/src/clone.c b/src/clone.c index 13572d9e1..def1c0fce 100644 --- a/src/clone.c +++ b/src/clone.c @@ -19,8 +19,9 @@ GIT_BEGIN_DECL -static int git_checkout(git_repository *repo, git_commit *commit, git_indexer_stats *stats) +static int git_checkout_branch(git_repository *repo, const char *branchname) { + /* TODO */ return 0; } @@ -31,7 +32,9 @@ static int git_checkout(git_repository *repo, git_commit *commit, git_indexer_st -static int setup_remotes_and_fetch(git_repository *repo, const char *origin_url, git_indexer_stats *stats) +static int setup_remotes_and_fetch(git_repository *repo, + const char *origin_url, + git_indexer_stats *stats) { int retcode = GIT_ERROR; git_remote *origin = NULL; @@ -55,11 +58,15 @@ static int setup_remotes_and_fetch(git_repository *repo, const char *origin_url, return retcode; } -static int clone_internal(git_repository **out, const char *origin_url, const char *fullpath, git_indexer_stats *stats, int is_bare) +static int clone_internal(git_repository **out, + const char *origin_url, + const char *fullpath, + git_indexer_stats *stats, + int is_bare) { int retcode = GIT_ERROR; git_repository *repo = NULL; - + if (!(retcode = git_repository_init(&repo, fullpath, is_bare))) { if ((retcode = setup_remotes_and_fetch(repo, origin_url, stats)) < 0) { /* Failed to fetch; clean up */ @@ -70,25 +77,31 @@ static int clone_internal(git_repository **out, const char *origin_url, const ch retcode = 0; } } - + return retcode; } -int git_clone_bare(git_repository **out, const char *origin_url, const char *dest_path, git_indexer_stats *stats) +int git_clone_bare(git_repository **out, + const char *origin_url, + const char *dest_path, + git_indexer_stats *stats) { char fullpath[512] = {0}; - + p_realpath(dest_path, fullpath); if (git_path_exists(fullpath)) { giterr_set(GITERR_INVALID, "Destination already exists: %s", fullpath); return GIT_ERROR; } - + return clone_internal(out, origin_url, fullpath, stats, 1); } -int git_clone(git_repository **out, const char *origin_url, const char *workdir_path, git_indexer_stats *stats) +int git_clone(git_repository **out, + const char *origin_url, + const char *workdir_path, + git_indexer_stats *stats) { int retcode = GIT_ERROR; char fullpath[512] = {0}; @@ -100,12 +113,9 @@ int git_clone(git_repository **out, const char *origin_url, const char *workdir_ } if (!clone_internal(out, origin_url, workdir_path, stats, 0)) { - git_object *commit_to_checkout = NULL; - if (!git_revparse_single(&commit_to_checkout, *out, "master")) { - if (git_object_type(commit_to_checkout) == GIT_OBJ_COMMIT) { - retcode = git_checkout(*out, (git_commit*)commit_to_checkout, stats); - } - } + char default_branch_name[256] = "master"; + /* TODO */ + retcode = git_checkout_branch(*out, default_branch_name); } return retcode; diff --git a/tests-clar/clone/clone.c b/tests-clar/clone/clone.c index 7b7c7b822..1f7cdff81 100644 --- a/tests-clar/clone/clone.c +++ b/tests-clar/clone/clone.c @@ -65,7 +65,7 @@ void test_clone_clone__bad_url(void) cl_git_fail(git_clone(&g_repo, "not_a_repo", "./foo", NULL)); cl_assert(!git_path_exists("./foo")); cl_git_fail(git_clone_bare(&g_repo, "not_a_repo", "./foo.git", NULL)); - cl_assert(!git_path_exists("./foo")); + cl_assert(!git_path_exists("./foo.git")); } @@ -89,7 +89,11 @@ void test_clone_clone__network(void) cl_git_pass(git_clone(&g_repo, "https://github.com/libgit2/libgit2.git", "./libgit2", NULL)); + cl_git_pass(git_clone_bare(&g_repo, + "https://github.com/libgit2/libgit2.git", + "./libgit2.git", NULL)); git_futils_rmdir_r("./libgit2", GIT_DIRREMOVAL_FILES_AND_DIRS); + git_futils_rmdir_r("./libgit2.git", GIT_DIRREMOVAL_FILES_AND_DIRS); }