summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/git2/refspec.h8
-rw-r--r--src/refspec.c31
-rw-r--r--src/refspec.h2
-rw-r--r--src/remote.c6
-rw-r--r--tests-clar/network/refspecs.c1
5 files changed, 8 insertions, 40 deletions
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
@@ -20,14 +20,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
*
* @param refspec the refspec
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);