refs: add ref_type function
Add a function ref_type, which categorizes refs as per-worktree, pseudoref, or normal ref. Later, we will use this in refs.c to treat pseudorefs specially. Alternate ref backends may use it to treat both pseudorefs and per-worktree refs differently. Signed-off-by: David Turner <dturner@twopensource.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
2036cb98d0
commit
266b18273a
26
refs.c
26
refs.c
@ -2821,6 +2821,32 @@ static int delete_ref_loose(struct ref_lock *lock, int flag, struct strbuf *err)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int is_per_worktree_ref(const char *refname)
|
||||||
|
{
|
||||||
|
return !strcmp(refname, "HEAD");
|
||||||
|
}
|
||||||
|
|
||||||
|
static int is_pseudoref_syntax(const char *refname)
|
||||||
|
{
|
||||||
|
const char *c;
|
||||||
|
|
||||||
|
for (c = refname; *c; c++) {
|
||||||
|
if (!isupper(*c) && *c != '-' && *c != '_')
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum ref_type ref_type(const char *refname)
|
||||||
|
{
|
||||||
|
if (is_per_worktree_ref(refname))
|
||||||
|
return REF_TYPE_PER_WORKTREE;
|
||||||
|
if (is_pseudoref_syntax(refname))
|
||||||
|
return REF_TYPE_PSEUDOREF;
|
||||||
|
return REF_TYPE_NORMAL;
|
||||||
|
}
|
||||||
|
|
||||||
int delete_ref(const char *refname, const unsigned char *sha1, unsigned int flags)
|
int delete_ref(const char *refname, const unsigned char *sha1, unsigned int flags)
|
||||||
{
|
{
|
||||||
struct ref_transaction *transaction;
|
struct ref_transaction *transaction;
|
||||||
|
8
refs.h
8
refs.h
@ -380,6 +380,14 @@ int update_ref(const char *msg, const char *refname,
|
|||||||
extern int parse_hide_refs_config(const char *var, const char *value, const char *);
|
extern int parse_hide_refs_config(const char *var, const char *value, const char *);
|
||||||
extern int ref_is_hidden(const char *);
|
extern int ref_is_hidden(const char *);
|
||||||
|
|
||||||
|
enum ref_type {
|
||||||
|
REF_TYPE_PER_WORKTREE,
|
||||||
|
REF_TYPE_PSEUDOREF,
|
||||||
|
REF_TYPE_NORMAL,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum ref_type ref_type(const char *refname);
|
||||||
|
|
||||||
enum expire_reflog_flags {
|
enum expire_reflog_flags {
|
||||||
EXPIRE_REFLOGS_DRY_RUN = 1 << 0,
|
EXPIRE_REFLOGS_DRY_RUN = 1 << 0,
|
||||||
EXPIRE_REFLOGS_UPDATE_REF = 1 << 1,
|
EXPIRE_REFLOGS_UPDATE_REF = 1 << 1,
|
||||||
|
Reference in New Issue
Block a user