summaryrefslogtreecommitdiff
path: root/src/remote.c
diff options
context:
space:
mode:
authorEtienne Samson <samson.etienne@gmail.com>2018-06-20 02:27:14 +0200
committerEtienne Samson <samson.etienne@gmail.com>2018-11-02 14:58:12 +0100
commitd365029406087471fda7cbf7bda68e8453200494 (patch)
tree836ae8e6a8dd6b5788a7832bfbe18647184eafdf /src/remote.c
parentfdb116b364c59d1e3692441963ec47616c71b3db (diff)
downloadlibgit2-d365029406087471fda7cbf7bda68e8453200494.tar.gz
remote: add a flag to prevent generation of the default fetchspec
Diffstat (limited to 'src/remote.c')
-rw-r--r--src/remote.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/remote.c b/src/remote.c
index 9dcd2fe56..ac79ad79a 100644
--- a/src/remote.c
+++ b/src/remote.c
@@ -230,6 +230,7 @@ static int create_internal(git_remote **out, const char *url, const git_remote_c
git_config *config_ro = NULL, *config_rw;
git_buf canonical_url = GIT_BUF_INIT;
git_buf var = GIT_BUF_INIT;
+ git_buf specbuf = GIT_BUF_INIT;
const git_remote_create_options dummy_opts = GIT_REMOTE_CREATE_OPTIONS_INIT;
int error = -1;
@@ -282,13 +283,24 @@ static int create_internal(git_remote **out, const char *url, const git_remote_c
goto on_error;
}
- if (opts->fetchspec != NULL) {
- if ((error = add_refspec(remote, opts->fetchspec, true)) < 0)
+ if (opts->fetchspec != NULL ||
+ (opts->name && !(opts->flags & GIT_REMOTE_CREATE_SKIP_DEFAULT_FETCHSPEC))) {
+ const char *fetch = NULL;
+ if (opts->fetchspec) {
+ fetch = opts->fetchspec;
+ } else {
+ if ((error = default_fetchspec_for_name(&specbuf, opts->name)) < 0)
+ goto on_error;
+
+ fetch = git_buf_cstr(&specbuf);
+ }
+
+ if ((error = add_refspec(remote, fetch, true)) < 0)
goto on_error;
/* only write for named remotes with a repository */
if (opts->repository && opts->name &&
- ((error = write_add_refspec(opts->repository, opts->name, opts->fetchspec, true)) < 0 ||
+ ((error = write_add_refspec(opts->repository, opts->name, fetch, true)) < 0 ||
(error = lookup_remote_prune_config(remote, config_ro, opts->name)) < 0))
goto on_error;
@@ -314,6 +326,7 @@ on_error:
git_remote_free(remote);
git_config_free(config_ro);
+ git_buf_dispose(&specbuf);
git_buf_dispose(&canonical_url);
git_buf_dispose(&var);
return error;
@@ -336,7 +349,6 @@ int git_remote_create(git_remote **out, git_repository *repo, const char *name,
opts.repository = repo;
opts.name = name;
- opts.fetchspec = git_buf_cstr(&buf);
error = create_internal(out, url, &opts);
@@ -361,6 +373,7 @@ int git_remote_create_with_fetchspec(git_remote **out, git_repository *repo, con
opts.repository = repo;
opts.name = name;
opts.fetchspec = fetch;
+ opts.flags = GIT_REMOTE_CREATE_SKIP_DEFAULT_FETCHSPEC;
return create_internal(out, url, &opts);
}