Skip to content

Commit 023ebb9

Browse files
committed
refs: introduce git_remote_name_is_valid
Provide a function that can check remote name validity but can also signal when an error occurs. Use the name "name_is_valid", which is more suggestive of checking a given name, rather than "is_valid_name", which suggests that the function checks the validity of the current remote's name.
1 parent 68e3558 commit 023ebb9

File tree

2 files changed

+34
-7
lines changed

2 files changed

+34
-7
lines changed

include/git2/remote.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -912,6 +912,15 @@ GIT_EXTERN(int) git_remote_rename(
912912
const char *name,
913913
const char *new_name);
914914

915+
/**
916+
* Ensure the remote name is well-formed.
917+
*
918+
* @param valid output pointer to set with validity of given remote name
919+
* @param remote_name name to be checked.
920+
* @return 0 on success or an error code
921+
*/
922+
int git_remote_name_is_valid(int *valid, const char *remote_name);
923+
915924
/**
916925
* Ensure the remote name is well-formed.
917926
*

src/remote.c

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2092,24 +2092,42 @@ int git_remote_rename(git_strarray *out, git_repository *repo, const char *name,
20922092
return error;
20932093
}
20942094

2095-
int git_remote_is_valid_name(
2096-
const char *remote_name)
2095+
int git_remote_name_is_valid(int *valid, const char *remote_name)
20972096
{
20982097
git_buf buf = GIT_BUF_INIT;
2099-
git_refspec refspec;
2100-
int error = -1;
2098+
git_refspec refspec = {0};
2099+
int error;
2100+
2101+
GIT_ASSERT(valid);
2102+
2103+
*valid = 0;
21012104

21022105
if (!remote_name || *remote_name == '\0')
21032106
return 0;
21042107

2105-
git_buf_printf(&buf, "refs/heads/test:refs/remotes/%s/test", remote_name);
2108+
if ((error = git_buf_printf(&buf, "refs/heads/test:refs/remotes/%s/test", remote_name)) < 0)
2109+
goto done;
2110+
21062111
error = git_refspec__parse(&refspec, git_buf_cstr(&buf), true);
21072112

2113+
if (!error)
2114+
*valid = 1;
2115+
else if (error == GIT_EINVALIDSPEC)
2116+
error = 0;
2117+
2118+
done:
21082119
git_buf_dispose(&buf);
21092120
git_refspec__dispose(&refspec);
21102121

2111-
git_error_clear();
2112-
return error == 0;
2122+
return error;
2123+
}
2124+
2125+
int git_remote_is_valid_name(const char *remote_name)
2126+
{
2127+
int valid = 0;
2128+
2129+
git_remote_name_is_valid(&valid, remote_name);
2130+
return valid;
21132131
}
21142132

21152133
git_refspec *git_remote__matching_refspec(git_remote *remote, const char *refname)

0 commit comments

Comments
 (0)