Re: [PATCH 02/10] struct ref_transaction: add a place for backends to store data
From: Michael Haggerty <hidden>
Date: 2017-09-08 08:20:04
On 09/08/2017 09:02 AM, Jeff King wrote:
On Tue, Aug 29, 2017 at 10:20:26AM +0200, Michael Haggerty wrote:quoted
`packed_ref_store` is going to want to store some transaction-wide data, so make a place for it.That makes sense, although...quoted
diff --git a/refs/refs-internal.h b/refs/refs-internal.h index b02dc5a7e3..d7d344de73 100644 --- a/refs/refs-internal.h +++ b/refs/refs-internal.h@@ -242,6 +242,7 @@ struct ref_transaction { size_t alloc; size_t nr; enum ref_transaction_state state; + void *backend_data; };This is just one pointer. Once we start layering ref backends (and already we're moving towards a "files" layer which sits atop loose and packed backends, right?), how do we avoid backends stomping on each other (or worse, dereferencing somebody else's data as their own struct)?
My conception is that layered backends would be separated as much as possible, and if the "top" layer needs to modify the "bottom" layer, it would do so via a separate reference transaction on the bottom layer. That transaction would be owned by the bottom layer, which would be able to use the corresponding `backend_data` pointers however it likes. You can see an example of this construct in patch 08. Michael