refs: consolidate remote name validation

In preparation for a future patch, extract from remote.c a function that
validates possible remote names so that its rules can be used
consistently in other places.

Helped-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Sean Barag <sean@barag.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Sean Barag 2020-10-01 03:46:13 +00:00 коммит произвёл Junio C Hamano
Родитель 444825c7c1
Коммит f2c6fda886
3 изменённых файлов: 13 добавлений и 5 удалений

Просмотреть файл

@ -194,8 +194,7 @@ static int add(int argc, const char **argv)
if (remote_is_configured(remote, 1)) if (remote_is_configured(remote, 1))
die(_("remote %s already exists."), name); die(_("remote %s already exists."), name);
strbuf_addf(&buf2, "refs/heads/test:refs/remotes/%s/test", name); if (!valid_remote_name(name))
if (!valid_fetch_refspec(buf2.buf))
die(_("'%s' is not a valid remote name"), name); die(_("'%s' is not a valid remote name"), name);
strbuf_addf(&buf, "remote.%s.url", name); strbuf_addf(&buf, "remote.%s.url", name);
@ -696,11 +695,9 @@ static int mv(int argc, const char **argv)
if (remote_is_configured(newremote, 1)) if (remote_is_configured(newremote, 1))
die(_("remote %s already exists."), rename.new_name); die(_("remote %s already exists."), rename.new_name);
strbuf_addf(&buf, "refs/heads/test:refs/remotes/%s/test", rename.new_name); if (!valid_remote_name(rename.new_name))
if (!valid_fetch_refspec(buf.buf))
die(_("'%s' is not a valid remote name"), rename.new_name); die(_("'%s' is not a valid remote name"), rename.new_name);
strbuf_reset(&buf);
strbuf_addf(&buf, "remote.%s", rename.old_name); strbuf_addf(&buf, "remote.%s", rename.old_name);
strbuf_addf(&buf2, "remote.%s", rename.new_name); strbuf_addf(&buf2, "remote.%s", rename.new_name);
if (git_config_rename_section(buf.buf, buf2.buf) < 1) if (git_config_rename_section(buf.buf, buf2.buf) < 1)

Просмотреть файл

@ -201,6 +201,16 @@ int valid_fetch_refspec(const char *fetch_refspec_str)
return ret; return ret;
} }
int valid_remote_name(const char *name)
{
int result;
struct strbuf refspec = STRBUF_INIT;
strbuf_addf(&refspec, "refs/heads/test:refs/remotes/%s/test", name);
result = valid_fetch_refspec(refspec.buf);
strbuf_release(&refspec);
return result;
}
void refspec_ref_prefixes(const struct refspec *rs, void refspec_ref_prefixes(const struct refspec *rs,
struct strvec *ref_prefixes) struct strvec *ref_prefixes)
{ {

Просмотреть файл

@ -60,6 +60,7 @@ void refspec_appendn(struct refspec *rs, const char **refspecs, int nr);
void refspec_clear(struct refspec *rs); void refspec_clear(struct refspec *rs);
int valid_fetch_refspec(const char *refspec); int valid_fetch_refspec(const char *refspec);
int valid_remote_name(const char *name);
struct strvec; struct strvec;
/* /*