From b412d5638929f8b08ea63d862a1a46b3d9f9e4c9 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Tue, 18 Dec 2012 19:46:05 -0800 Subject: Add more clone options. Push test suite segfaults. --- include/git2/clone.h | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) (limited to 'include/git2') diff --git a/include/git2/clone.h b/include/git2/clone.h index 2b5381e4d..72fba0ee2 100644 --- a/include/git2/clone.h +++ b/include/git2/clone.h @@ -11,6 +11,7 @@ #include "types.h" #include "indexer.h" #include "checkout.h" +#include "remote.h" /** @@ -36,8 +37,26 @@ GIT_BEGIN_DECL * this is called inline with network and indexing operations, so performance * may be affected. * - `fetch_progress_payload` is payload for fetch_progress_cb - * - `checkout_opts` is options for the checkout step. If NULL, no checkout - * is performed + * - `checkout_opts` is options for the checkout step. If NULL, no checkout is + * performed + * + * ** "origin" remote options: ** + * - `remote_name` is the name given to the "origin" remote. The default is + * "origin". + * - `pushurl` is a URL to be used for pushing. NULL means use the fetch url. + * - `fetch_spec` is the fetch specification to be used for fetching. NULL + * results in the same behavior as GIT_REMOTE_DEFAULT_FETCH. + * - `push_spec` is the fetch specification to be used for pushing. NULL means + * use the same spec as for fetching. + * - `cred_acquire_cb` is a callback to be used if credentials are required + * during the initial fetch. + * - `cred_acquire_payload` is the payload for the above callback. + * - `transport` is a custom transport to be used for the initial fetch. NULL + * means use the transport autodetected from the URL. + * - `remote_callbacks` may be used to specify custom progress callbacks for + * the origin remote before the fetch is initiated. + * - `remote_autotag` may be used to specify the autotag setting before the + * initial fetch. */ typedef struct git_clone_options { @@ -47,6 +66,16 @@ typedef struct git_clone_options { git_transfer_progress_callback fetch_progress_cb; void *fetch_progress_payload; git_checkout_opts *checkout_opts; + + 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 *transport; + git_remote_callbacks *remote_callbacks; + git_remote_autotag_option_t remote_autotag; } git_clone_options; #define GIT_CLONE_OPTIONS_VERSION 1 @@ -66,7 +95,7 @@ typedef struct git_clone_options { */ GIT_EXTERN(int) git_clone( git_repository **out, - git_remote *origin, + const char *url, const char *local_path, const git_clone_options *options); -- cgit v1.2.1 From 29f27599eab750d2b4b8935a14be8b596b7affe2 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 20 Dec 2012 10:51:09 -0800 Subject: Rename remote creation APIs git_remote_add -> git_remote_create git_remote_new -> git_remote_create_inmemory --- include/git2/remote.h | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) (limited to 'include/git2') diff --git a/include/git2/remote.h b/include/git2/remote.h index f3b0a9443..52404c08e 100644 --- a/include/git2/remote.h +++ b/include/git2/remote.h @@ -41,10 +41,25 @@ typedef int (*git_remote_rename_problem_cb)(const char *problematic_refspec, voi * - _del (needs support from config) */ +/** + * Add a remote with the default fetch refspec to the repository's configuration + * + * @param out the resulting remote + * @param repo the repository in which to create the remote + * @param name the remote's name + * @param url the remote's url + * @return 0 or an error code + */ +GIT_EXTERN(int) git_remote_create( + git_remote **out, + git_repository *repo, + const char *name, + const char *url); + /** * Create a remote in memory * - * Create a remote with the default refspecs in memory. You can use + * Create a remote with the given refspec in memory. You can use * this when you have a URL instead of a remote's name. * * The name, when provided, will be checked for validity. @@ -57,7 +72,12 @@ typedef int (*git_remote_rename_problem_cb)(const char *problematic_refspec, voi * @param fetch the fetch refspec to use for this remote. May be NULL for defaults. * @return 0, GIT_EINVALIDSPEC or an error code */ -GIT_EXTERN(int) git_remote_new(git_remote **out, git_repository *repo, const char *name, const char *url, const char *fetch); +GIT_EXTERN(int) git_remote_create_inmemory( + git_remote **out, + git_repository *repo, + const char *name, + const char *url, + const char *fetch); /** * Sets the owning repository for the remote. This is only allowed on @@ -300,17 +320,6 @@ GIT_EXTERN(int) git_remote_supported_url(const char* url); */ GIT_EXTERN(int) git_remote_list(git_strarray *out, git_repository *repo); -/** - * Add a remote with the default fetch refspec to the repository's configuration - * - * @param out the resulting remote - * @param repo the repository in which to create the remote - * @param name the remote's name - * @param url the remote's url - * @return 0 or an error code - */ -GIT_EXTERN(int) git_remote_add(git_remote **out, git_repository *repo, const char *name, const char *url); - /** * Choose whether to check the server's certificate (applies to HTTPS only) * -- cgit v1.2.1 From 874dcb25eba8637ed6d2a070741dd0363e30d83d Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 20 Dec 2012 11:49:05 -0800 Subject: Remote: deprecate dangling, prevent saving in-memory --- include/git2/remote.h | 8 -------- 1 file changed, 8 deletions(-) (limited to 'include/git2') diff --git a/include/git2/remote.h b/include/git2/remote.h index 52404c08e..e77deaf93 100644 --- a/include/git2/remote.h +++ b/include/git2/remote.h @@ -24,14 +24,6 @@ */ GIT_BEGIN_DECL -/** - * Use this when creating a remote with git_remote_new to get the default fetch - * behavior produced by git_remote_add. It corresponds to this fetchspec (note - * the spaces between '/' and '*' to avoid C compiler errors): - * "+refs/heads/ *:refs/remotes// *" - */ -#define GIT_REMOTE_DEFAULT_FETCH "" - typedef int (*git_remote_rename_problem_cb)(const char *problematic_refspec, void *payload); /* * TODO: This functions still need to be implemented: -- cgit v1.2.1 From 87bc689fbf571aa3cbc77e510f14304cc3502ca5 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 20 Dec 2012 15:50:33 -0800 Subject: git_remote_create calls git_remote_save --- include/git2/remote.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'include/git2') diff --git a/include/git2/remote.h b/include/git2/remote.h index e77deaf93..aa3f93c7b 100644 --- a/include/git2/remote.h +++ b/include/git2/remote.h @@ -34,7 +34,8 @@ typedef int (*git_remote_rename_problem_cb)(const char *problematic_refspec, voi */ /** - * Add a remote with the default fetch refspec to the repository's configuration + * Add a remote with the default fetch refspec to the repository's configuration. This + * calls git_remote_save before returning. * * @param out the resulting remote * @param repo the repository in which to create the remote @@ -52,7 +53,8 @@ GIT_EXTERN(int) git_remote_create( * Create a remote in memory * * Create a remote with the given refspec in memory. You can use - * this when you have a URL instead of a remote's name. + * this when you have a URL instead of a remote's name. Note that in-memory + * remotes cannot be converted to persisted remotes. * * The name, when provided, will be checked for validity. * See `git_tag_create()` for rules about valid names. -- cgit v1.2.1 From 79000951ec907c967a1c322da8c351998676f753 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Fri, 21 Dec 2012 08:05:59 -0800 Subject: In-memory remotes don't have names --- include/git2/remote.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'include/git2') diff --git a/include/git2/remote.h b/include/git2/remote.h index aa3f93c7b..319976fc1 100644 --- a/include/git2/remote.h +++ b/include/git2/remote.h @@ -61,7 +61,6 @@ GIT_EXTERN(int) git_remote_create( * * @param out pointer to the new remote object * @param repo the associated repository. May be NULL for a "dangling" remote. - * @param name the optional remote's name. May be NULL. * @param url the remote repository's URL * @param fetch the fetch refspec to use for this remote. May be NULL for defaults. * @return 0, GIT_EINVALIDSPEC or an error code @@ -69,7 +68,6 @@ GIT_EXTERN(int) git_remote_create( GIT_EXTERN(int) git_remote_create_inmemory( git_remote **out, git_repository *repo, - const char *name, const char *url, const char *fetch); -- cgit v1.2.1 From b0aa14aa3c1fff7bb585df5e06e23588fb829bf6 Mon Sep 17 00:00:00 2001 From: nulltoken Date: Mon, 24 Dec 2012 15:27:42 +0100 Subject: remote: Enhance in-memory remote test coverage --- include/git2/remote.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include/git2') diff --git a/include/git2/remote.h b/include/git2/remote.h index 319976fc1..4397154e9 100644 --- a/include/git2/remote.h +++ b/include/git2/remote.h @@ -109,7 +109,7 @@ GIT_EXTERN(int) git_remote_save(const git_remote *remote); * Get the remote's name * * @param remote the remote - * @return a pointer to the name + * @return a pointer to the name or NULL for in-memory remotes */ GIT_EXTERN(const char *) git_remote_name(const git_remote *remote); -- cgit v1.2.1 From ae35aa07082968e00b9b77173c622482ea02db5d Mon Sep 17 00:00:00 2001 From: nulltoken Date: Mon, 24 Dec 2012 15:29:26 +0100 Subject: remote: Improve documentation --- include/git2/remote.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'include/git2') diff --git a/include/git2/remote.h b/include/git2/remote.h index 4397154e9..0be30cd02 100644 --- a/include/git2/remote.h +++ b/include/git2/remote.h @@ -41,7 +41,7 @@ typedef int (*git_remote_rename_problem_cb)(const char *problematic_refspec, voi * @param repo the repository in which to create the remote * @param name the remote's name * @param url the remote's url - * @return 0 or an error code + * @return 0, GIT_EINVALIDSPEC or an error code */ GIT_EXTERN(int) git_remote_create( git_remote **out, @@ -63,7 +63,7 @@ GIT_EXTERN(int) git_remote_create( * @param repo the associated repository. May be NULL for a "dangling" remote. * @param url the remote repository's URL * @param fetch the fetch refspec to use for this remote. May be NULL for defaults. - * @return 0, GIT_EINVALIDSPEC or an error code + * @return 0 or an error code */ GIT_EXTERN(int) git_remote_create_inmemory( git_remote **out, @@ -97,7 +97,7 @@ GIT_EXTERN(int) git_remote_load(git_remote **out, git_repository *repo, const ch /** * Save a remote to its repository's configuration * - * One can't save a nameless inmemory remote. Doing so will + * One can't save a in-memory remote. Doing so will * result in a GIT_EINVALIDSPEC being returned. * * @param remote the remote to save to config @@ -428,12 +428,14 @@ GIT_EXTERN(void) git_remote_set_autotag( * The new name will be checked for validity. * See `git_tag_create()` for rules about valid names. * + * A temporary in-memory remote cannot be given a name with this method. + * * @param remote the remote to rename * @param new_name the new name the remote should bear * @param callback Optional callback to notify the consumer of fetch refspecs * that haven't been automatically updated and need potential manual tweaking. * @param payload Additional data to pass to the callback - * @return 0, GIT_EINVALIDSPEC or an error code + * @return 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code */ GIT_EXTERN(int) git_remote_rename( git_remote *remote, -- cgit v1.2.1 From f19304d2653cdc829f549283b3fb4e2e4d9b06ce Mon Sep 17 00:00:00 2001 From: nulltoken Date: Mon, 24 Dec 2012 15:59:01 +0100 Subject: remote: Prevent create() from blindly overwriting --- include/git2/remote.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include/git2') diff --git a/include/git2/remote.h b/include/git2/remote.h index 0be30cd02..29bda796d 100644 --- a/include/git2/remote.h +++ b/include/git2/remote.h @@ -41,7 +41,7 @@ typedef int (*git_remote_rename_problem_cb)(const char *problematic_refspec, voi * @param repo the repository in which to create the remote * @param name the remote's name * @param url the remote's url - * @return 0, GIT_EINVALIDSPEC or an error code + * @return 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code */ GIT_EXTERN(int) git_remote_create( git_remote **out, -- cgit v1.2.1 From 0642c1431eccdf7aef496c0dc6d64805c513db53 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Wed, 2 Jan 2013 12:44:47 -0800 Subject: Move `url` to last place in parameter list --- include/git2/remote.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'include/git2') diff --git a/include/git2/remote.h b/include/git2/remote.h index 29bda796d..5f6a78097 100644 --- a/include/git2/remote.h +++ b/include/git2/remote.h @@ -61,15 +61,15 @@ GIT_EXTERN(int) git_remote_create( * * @param out pointer to the new remote object * @param repo the associated repository. May be NULL for a "dangling" remote. - * @param url the remote repository's URL * @param fetch the fetch refspec to use for this remote. May be NULL for defaults. + * @param url the remote repository's URL * @return 0 or an error code */ GIT_EXTERN(int) git_remote_create_inmemory( git_remote **out, git_repository *repo, - const char *url, - const char *fetch); + const char *fetch, + const char *url); /** * Sets the owning repository for the remote. This is only allowed on -- cgit v1.2.1 From 730df6d0f70a343ade75ef9411fe0435b0afd5a9 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Wed, 2 Jan 2013 13:43:54 -0800 Subject: Include checkout options inline --- include/git2/clone.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'include/git2') diff --git a/include/git2/clone.h b/include/git2/clone.h index 72fba0ee2..c6ab8032b 100644 --- a/include/git2/clone.h +++ b/include/git2/clone.h @@ -31,14 +31,14 @@ GIT_BEGIN_DECL * * git_clone_options opts = GIT_CLONE_OPTIONS_INIT; * + * - `checkout_opts` is options for the checkout step. To disable checkout, + * set the `checkout_strategy` to GIT_CHECKOUT_DEFAULT. * - `bare` should be set to zero to create a standard repo, non-zero for * a bare repo * - `fetch_progress_cb` is optional callback for fetch progress. Be aware that * this is called inline with network and indexing operations, so performance * may be affected. * - `fetch_progress_payload` is payload for fetch_progress_cb - * - `checkout_opts` is options for the checkout step. If NULL, no checkout is - * performed * * ** "origin" remote options: ** * - `remote_name` is the name given to the "origin" remote. The default is @@ -62,10 +62,10 @@ GIT_BEGIN_DECL typedef struct git_clone_options { unsigned int version; + git_checkout_opts checkout_opts; int bare; git_transfer_progress_callback fetch_progress_cb; void *fetch_progress_payload; - git_checkout_opts *checkout_opts; const char *remote_name; const char *pushurl; @@ -79,7 +79,7 @@ typedef struct git_clone_options { } git_clone_options; #define GIT_CLONE_OPTIONS_VERSION 1 -#define GIT_CLONE_OPTIONS_INIT {GIT_CLONE_OPTIONS_VERSION} +#define GIT_CLONE_OPTIONS_INIT {GIT_CLONE_OPTIONS_VERSION, {GIT_CHECKOUT_OPTS_VERSION, GIT_CHECKOUT_SAFE}} /** * Clone a remote repository, and checkout the branch pointed to by the remote -- cgit v1.2.1