refs: move ref name helpers around

strbuf_branchname(), strbuf_check_{branch,tag}_ref() are helper
functions to deal with branch and tag names, and the fact that they
happen to use strbuf to hold the name of a branch or a tag is not
essential.  These functions fit better in the refs API than strbuf
API, the latter of which is about string manipulations.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano
2024-12-03 11:32:37 +09:00
parent 92999a42db
commit 5bcbde9e49
5 changed files with 76 additions and 69 deletions

View File

@ -1734,42 +1734,6 @@ int repo_interpret_branch_name(struct repository *r,
return -1;
}
void strbuf_branchname(struct strbuf *sb, const char *name, unsigned allowed)
{
int len = strlen(name);
struct interpret_branch_name_options options = {
.allowed = allowed
};
int used = repo_interpret_branch_name(the_repository, name, len, sb,
&options);
if (used < 0)
used = 0;
strbuf_add(sb, name + used, len - used);
}
int strbuf_check_branch_ref(struct strbuf *sb, const char *name)
{
if (startup_info->have_repository)
strbuf_branchname(sb, name, INTERPRET_BRANCH_LOCAL);
else
strbuf_addstr(sb, name);
/*
* This splice must be done even if we end up rejecting the
* name; builtin/branch.c::copy_or_rename_branch() still wants
* to see what the name expanded to so that "branch -m" can be
* used as a tool to correct earlier mistakes.
*/
strbuf_splice(sb, 0, 0, "refs/heads/", 11);
if (*name == '-' ||
!strcmp(sb->buf, "refs/heads/HEAD"))
return -1;
return check_refname_format(sb->buf, 0);
}
void object_context_release(struct object_context *ctx)
{
free(ctx->path);