diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2017-03-26 04:42:32 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-04-14 12:53:18 +0200 |
commit | 9e7ec634a130535982e9bc63d65c2fe8c076a662 (patch) | |
tree | ba46cac1a5efa78d3c0fb809f4d3396e25830ea9 /refs/refs-internal.h | |
parent | refs: move submodule code out of files-backend.c (diff) | |
download | git-9e7ec634a130535982e9bc63d65c2fe8c076a662.tar.xz git-9e7ec634a130535982e9bc63d65c2fe8c076a662.zip |
files-backend: replace submodule_allowed check in files_downcast()
files-backend.c is unlearning submodules. Instead of having a specific
check for submodules to see what operation is allowed, files backend
now takes a set of flags at init. Each operation will check if the
required flags is present before performing.
For now we have four flags: read, write and odb access. Main ref store
has all flags, obviously, while submodule stores are read-only and have
access to odb (*).
The "main" flag stays because many functions in the backend calls
frontend ones without a ref store, so these functions always target the
main ref store. Ideally the flag should be gone after ref-store-aware
api is in place and used by backends.
(*) Submodule code needs for_each_ref. Try take REF_STORE_ODB flag
out. At least t3404 would fail. The "have access to odb" in submodule is
a bit hacky since we don't know from he whether add_submodule_odb() has
been called.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs/refs-internal.h')
-rw-r--r-- | refs/refs-internal.h | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/refs/refs-internal.h b/refs/refs-internal.h index dfa1817929..0cca280b5c 100644 --- a/refs/refs-internal.h +++ b/refs/refs-internal.h @@ -481,12 +481,19 @@ struct ref_store; /* refs backends */ +/* ref_store_init flags */ +#define REF_STORE_READ (1 << 0) +#define REF_STORE_WRITE (1 << 1) /* can perform update operations */ +#define REF_STORE_ODB (1 << 2) /* has access to object database */ +#define REF_STORE_MAIN (1 << 3) + /* * Initialize the ref_store for the specified gitdir. These functions * should call base_ref_store_init() to initialize the shared part of * the ref_store and to record the ref_store for later lookup. */ -typedef struct ref_store *ref_store_init_fn(const char *gitdir); +typedef struct ref_store *ref_store_init_fn(const char *gitdir, + unsigned int flags); typedef int ref_init_db_fn(struct ref_store *refs, struct strbuf *err); |