module git2.clone;

import git2.checkout;
import git2.common;
import git2.indexer;
import git2.remote;
import git2.transport;
import git2.types;

extern (C):

struct git_clone_options {
	uint version_ = GIT_CLONE_OPTIONS_VERSION;

	git_checkout_opts checkout_opts;
	int bare;
	git_transfer_progress_callback fetch_progress_cb;
	void *fetch_progress_payload;

	const(char)* remote_name;
	const(char)* pushurl;
	const(char)* fetch_spec;
	const(char)* push_spec;
	git_cred_acquire_cb cred_acquire_cb;
	void *cred_acquire_payload;
    git_transport_flags_t transport_flags;
	git_transport *transport;
	git2.remote.git_remote_callbacks *remote_callbacks;
	git_remote_autotag_option_t remote_autotag;
	const(char)* checkout_branch;
}

enum GIT_CLONE_OPTIONS_VERSION = 1;
enum git_clone_options GIT_CLONE_OPTIONS_INIT = { GIT_CLONE_OPTIONS_VERSION };

int git_clone(
		git_repository **out_,
		const(char)* url,
		const(char)* local_path,
		const(git_clone_options)* options);