refs: add a backend method structure
Add a `struct ref_storage_be` to represent types of reference stores. In OO notation, this is the class, and will soon hold some class methods (e.g., a factory to create new ref_store instances) and will also serve as the vtable for ref_store instances of that type. As yet, the backends cannot do anything. Signed-off-by: Ronnie Sahlberg <sahlberg@google.com> Signed-off-by: David Turner <dturner@twopensource.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
65a0a8e5fa
commit
3dce444f17
19
refs.c
19
refs.c
@ -9,6 +9,25 @@
|
||||
#include "object.h"
|
||||
#include "tag.h"
|
||||
|
||||
/*
|
||||
* List of all available backends
|
||||
*/
|
||||
static struct ref_storage_be *refs_backends = &refs_be_files;
|
||||
|
||||
static struct ref_storage_be *find_ref_storage_backend(const char *name)
|
||||
{
|
||||
struct ref_storage_be *be;
|
||||
for (be = refs_backends; be; be = be->next)
|
||||
if (!strcmp(be->name, name))
|
||||
return be;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int ref_storage_backend_exists(const char *name)
|
||||
{
|
||||
return find_ref_storage_backend(name) != NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* How to handle various characters in refnames:
|
||||
* 0: An acceptable character for refs
|
||||
|
2
refs.h
2
refs.h
@ -544,4 +544,6 @@ int reflog_expire(const char *refname, const unsigned char *sha1,
|
||||
reflog_expiry_cleanup_fn cleanup_fn,
|
||||
void *policy_cb_data);
|
||||
|
||||
int ref_storage_backend_exists(const char *name);
|
||||
|
||||
#endif /* REFS_H */
|
||||
|
@ -4066,3 +4066,8 @@ int reflog_expire(const char *refname, const unsigned char *sha1,
|
||||
unlock_ref(lock);
|
||||
return -1;
|
||||
}
|
||||
|
||||
struct ref_storage_be refs_be_files = {
|
||||
NULL,
|
||||
"files"
|
||||
};
|
||||
|
@ -525,4 +525,12 @@ int do_for_each_ref_iterator(struct ref_iterator *iter,
|
||||
int read_raw_ref(const char *refname, unsigned char *sha1,
|
||||
struct strbuf *referent, unsigned int *type);
|
||||
|
||||
/* refs backends */
|
||||
struct ref_storage_be {
|
||||
struct ref_storage_be *next;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
extern struct ref_storage_be refs_be_files;
|
||||
|
||||
#endif /* REFS_REFS_INTERNAL_H */
|
||||
|
Loading…
Reference in New Issue
Block a user