diff --git a/include/git2/refspec.h b/include/git2/refspec.h index 9e84aad99..1100e9022 100644 --- a/include/git2/refspec.h +++ b/include/git2/refspec.h @@ -19,14 +19,6 @@ */ GIT_BEGIN_DECL -/** - * Parse a refspec string and create a refspec object - * - * @param refspec pointer to the refspec structure to be used - * @param str the refspec as a string - */ -GIT_EXTERN(int) git_refspec_parse(git_refspec *refspec, const char *str); - /** * Get the source specifier * diff --git a/src/refspec.c b/src/refspec.c index 1265c566c..cd3a528bd 100644 --- a/src/refspec.c +++ b/src/refspec.c @@ -125,35 +125,10 @@ int git_refspec__parse(git_refspec *refspec, const char *input, bool is_fetch) return -1; } -int git_refspec_parse(git_refspec *refspec, const char *str) +void git_refspec__free(git_refspec *refspec) { - char *delim; - - memset(refspec, 0x0, sizeof(git_refspec)); - - if (*str == '+') { - refspec->force = 1; - str++; - } - - delim = strchr(str, ':'); - if (delim == NULL) { - refspec->src = git__strdup(str); - GITERR_CHECK_ALLOC(refspec->src); - return 0; - } - - refspec->src = git__strndup(str, delim - str); - GITERR_CHECK_ALLOC(refspec->src); - - refspec->dst = git__strdup(delim + 1); - if (refspec->dst == NULL) { - git__free(refspec->src); - refspec->src = NULL; - return -1; - } - - return 0; + git__free(refspec->src); + git__free(refspec->dst); } const char *git_refspec_src(const git_refspec *refspec) diff --git a/src/refspec.h b/src/refspec.h index 2f46b3e59..83078151b 100644 --- a/src/refspec.h +++ b/src/refspec.h @@ -25,6 +25,8 @@ int git_refspec__parse( const char *str, bool is_fetch); +void git_refspec__free(git_refspec *refspec); + /** * Transform a reference to its target following the refspec's rules, * and writes the results into a git_buf. diff --git a/src/remote.c b/src/remote.c index 7bc631d45..0ae47c364 100644 --- a/src/remote.c +++ b/src/remote.c @@ -536,10 +536,8 @@ void git_remote_free(git_remote *remote) git_vector_free(&remote->refs); - git__free(remote->fetch.src); - git__free(remote->fetch.dst); - git__free(remote->push.src); - git__free(remote->push.dst); + git_refspec__free(&remote->fetch); + git_refspec__free(&remote->push); git__free(remote->url); git__free(remote->pushurl); git__free(remote->name); diff --git a/tests-clar/network/refspecs.c b/tests-clar/network/refspecs.c index bfe0af48c..3b1281722 100644 --- a/tests-clar/network/refspecs.c +++ b/tests-clar/network/refspecs.c @@ -8,6 +8,7 @@ static void assert_refspec(unsigned int direction, const char *input, bool is_ex int error; error = git_refspec__parse(&refspec, input, direction == GIT_DIR_FETCH); + git_refspec__free(&refspec); if (is_expected_to_be_valid) cl_assert_equal_i(0, error);