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:
parent
92999a42db
commit
5bcbde9e49
@ -447,17 +447,6 @@ static int parse_msg_arg(const struct option *opt, const char *arg, int unset)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int strbuf_check_tag_ref(struct strbuf *sb, const char *name)
|
|
||||||
{
|
|
||||||
if (name[0] == '-')
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
strbuf_reset(sb);
|
|
||||||
strbuf_addf(sb, "refs/tags/%s", name);
|
|
||||||
|
|
||||||
return check_refname_format(sb->buf, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int cmd_tag(int argc,
|
int cmd_tag(int argc,
|
||||||
const char **argv,
|
const char **argv,
|
||||||
const char *prefix,
|
const char *prefix,
|
||||||
|
@ -1734,42 +1734,6 @@ int repo_interpret_branch_name(struct repository *r,
|
|||||||
return -1;
|
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)
|
void object_context_release(struct object_context *ctx)
|
||||||
{
|
{
|
||||||
free(ctx->path);
|
free(ctx->path);
|
||||||
|
47
refs.c
47
refs.c
@ -697,6 +697,53 @@ static char *substitute_branch_name(struct repository *r,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
int strbuf_check_tag_ref(struct strbuf *sb, const char *name)
|
||||||
|
{
|
||||||
|
if (name[0] == '-')
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
strbuf_reset(sb);
|
||||||
|
strbuf_addf(sb, "refs/tags/%s", name);
|
||||||
|
|
||||||
|
return check_refname_format(sb->buf, 0);
|
||||||
|
}
|
||||||
|
|
||||||
int repo_dwim_ref(struct repository *r, const char *str, int len,
|
int repo_dwim_ref(struct repository *r, const char *str, int len,
|
||||||
struct object_id *oid, char **ref, int nonfatal_dangling_mark)
|
struct object_id *oid, char **ref, int nonfatal_dangling_mark)
|
||||||
{
|
{
|
||||||
|
29
refs.h
29
refs.h
@ -180,6 +180,35 @@ int repo_dwim_log(struct repository *r, const char *str, int len, struct object_
|
|||||||
*/
|
*/
|
||||||
char *repo_default_branch_name(struct repository *r, int quiet);
|
char *repo_default_branch_name(struct repository *r, int quiet);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copy "name" to "sb", expanding any special @-marks as handled by
|
||||||
|
* repo_interpret_branch_name(). The result is a non-qualified branch name
|
||||||
|
* (so "foo" or "origin/master" instead of "refs/heads/foo" or
|
||||||
|
* "refs/remotes/origin/master").
|
||||||
|
*
|
||||||
|
* Note that the resulting name may not be a syntactically valid refname.
|
||||||
|
*
|
||||||
|
* If "allowed" is non-zero, restrict the set of allowed expansions. See
|
||||||
|
* repo_interpret_branch_name() for details.
|
||||||
|
*/
|
||||||
|
void strbuf_branchname(struct strbuf *sb, const char *name,
|
||||||
|
unsigned allowed);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Like strbuf_branchname() above, but confirm that the result is
|
||||||
|
* syntactically valid to be used as a local branch name in refs/heads/.
|
||||||
|
*
|
||||||
|
* The return value is "0" if the result is valid, and "-1" otherwise.
|
||||||
|
*/
|
||||||
|
int strbuf_check_branch_ref(struct strbuf *sb, const char *name);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Similar for a tag name in refs/tags/.
|
||||||
|
*
|
||||||
|
* The return value is "0" if the result is valid, and "-1" otherwise.
|
||||||
|
*/
|
||||||
|
int strbuf_check_tag_ref(struct strbuf *sb, const char *name);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A ref_transaction represents a collection of reference updates that
|
* A ref_transaction represents a collection of reference updates that
|
||||||
* should succeed or fail together.
|
* should succeed or fail together.
|
||||||
|
22
strbuf.h
22
strbuf.h
@ -637,28 +637,6 @@ static inline void strbuf_complete_line(struct strbuf *sb)
|
|||||||
strbuf_complete(sb, '\n');
|
strbuf_complete(sb, '\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Copy "name" to "sb", expanding any special @-marks as handled by
|
|
||||||
* repo_interpret_branch_name(). The result is a non-qualified branch name
|
|
||||||
* (so "foo" or "origin/master" instead of "refs/heads/foo" or
|
|
||||||
* "refs/remotes/origin/master").
|
|
||||||
*
|
|
||||||
* Note that the resulting name may not be a syntactically valid refname.
|
|
||||||
*
|
|
||||||
* If "allowed" is non-zero, restrict the set of allowed expansions. See
|
|
||||||
* repo_interpret_branch_name() for details.
|
|
||||||
*/
|
|
||||||
void strbuf_branchname(struct strbuf *sb, const char *name,
|
|
||||||
unsigned allowed);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Like strbuf_branchname() above, but confirm that the result is
|
|
||||||
* syntactically valid to be used as a local branch name in refs/heads/.
|
|
||||||
*
|
|
||||||
* The return value is "0" if the result is valid, and "-1" otherwise.
|
|
||||||
*/
|
|
||||||
int strbuf_check_branch_ref(struct strbuf *sb, const char *name);
|
|
||||||
|
|
||||||
typedef int (*char_predicate)(char ch);
|
typedef int (*char_predicate)(char ch);
|
||||||
|
|
||||||
void strbuf_addstr_urlencode(struct strbuf *sb, const char *name,
|
void strbuf_addstr_urlencode(struct strbuf *sb, const char *name,
|
||||||
|
Loading…
Reference in New Issue
Block a user