mirror of
				https://git.proxmox.com/git/libgit2
				synced 2025-11-04 14:08:17 +00:00 
			
		
		
		
	Clone: restructure.
This commit is contained in:
		
							parent
							
								
									bb1f6087e4
								
							
						
					
					
						commit
						f2a855d5fe
					
				
							
								
								
									
										40
									
								
								src/clone.c
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								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;
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user