mirror of
https://github.com/libgit2/libgit2.git
synced 2026-06-22 06:26:26 +00:00
refspec: return GIT_EINVALIDSPEC for invalid specs
Disambiguate invalid specifications in `git_refspec__parse` so that callers can determine the difference between invalid specifications and actual errors. No call sites wil propagagte this new error message to an end-user, so there is no user-facing API change.
This commit is contained in:
@@ -155,12 +155,13 @@ int git_refspec__parse(git_refspec *refspec, const char *input, bool is_fetch)
|
||||
return 0;
|
||||
|
||||
invalid:
|
||||
git_error_set(
|
||||
GIT_ERROR_INVALID,
|
||||
"'%s' is not a valid refspec.", input);
|
||||
git_error_set(GIT_ERROR_INVALID,
|
||||
"'%s' is not a valid refspec.", input);
|
||||
git_refspec__dispose(refspec);
|
||||
return GIT_EINVALIDSPEC;
|
||||
|
||||
on_error:
|
||||
git_refspec__dispose(refspec);
|
||||
git_refspec__dispose(refspec);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -110,12 +110,8 @@ static int write_add_refspec(git_repository *repo, const char *name, const char
|
||||
if ((error = ensure_remote_name_is_valid(name)) < 0)
|
||||
return error;
|
||||
|
||||
if ((error = git_refspec__parse(&spec, refspec, fetch)) < 0) {
|
||||
if (git_error_last()->klass != GIT_ERROR_NOMEMORY)
|
||||
error = GIT_EINVALIDSPEC;
|
||||
|
||||
if ((error = git_refspec__parse(&spec, refspec, fetch)) < 0)
|
||||
return error;
|
||||
}
|
||||
|
||||
git_refspec__dispose(&spec);
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ static void assert_refspec(unsigned int direction, const char *input, bool is_ex
|
||||
if (is_expected_to_be_valid)
|
||||
cl_assert_equal_i(0, error);
|
||||
else
|
||||
cl_assert_equal_i(GIT_ERROR, error);
|
||||
cl_assert_equal_i(GIT_EINVALIDSPEC, error);
|
||||
}
|
||||
|
||||
void test_network_refspecs__parsing(void)
|
||||
|
||||
Reference in New Issue
Block a user