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:
Ronnie Sahlberg 2016-09-04 18:08:10 +02:00 committed by Junio C Hamano
parent 65a0a8e5fa
commit 3dce444f17
4 changed files with 34 additions and 0 deletions

19
refs.c
View File

@ -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
View File

@ -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 */

View File

@ -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"
};

View File

@ -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 */