Subject: Re: [PATCH 1/4] odb: store ODB source in `struct odb_transaction`

From: Justin Tobler <[email-masked]>
Date: Thu, 29 Jan 2026 13:30:54 -0600

On 26/01/29 12:24PM, Patrick Steinhardt wrote:
> On Wed, Jan 28, 2026 at 05:45:16PM -0600, Justin Tobler wrote:
> > diff --git a/object-file.c b/object-file.c
> > index e7e4c3348f..196509b252 100644
> > --- a/object-file.c
> > +++ b/object-file.c
> > @@ -728,7 +728,7 @@ static void prepare_loose_object_transaction(struct odb_transaction *transaction
> >  	if (!transaction || transaction->objdir)
> >  		return;
> >  
> > -	transaction->objdir = tmp_objdir_create(transaction->odb->repo, "bulk-fsync");
> > +	transaction->objdir = tmp_objdir_create(transaction->source->odb->repo, "bulk-fsync");
> >  	if (transaction->objdir)
> >  		tmp_objdir_replace_primary_odb(transaction->objdir, 0);
> >  }
> 
> This makes me wonder whether we should first refactor the `tmp_objdir`
> subsystem to receive a source instead of a repository as input.
> Otherwise we "pretend" that the transaction is on the source level, but
> we ultimately still end up creating the temporary directory in the
> repository's object directory unconditionally.
> 
> It wouldn't really change anything right now as we only ever write
> objects via the primary object source anyway, so the end result would be
> the same. But it just feels like a good first step to me to fix this
> conceptual inconsistency, and it shouldn't be too involved either as
> `tmp_objdir_create()` only has three callsites.

Ya this seems reasonable and I agree that it makes sense to do as a
first step. In the next version I'll make this change in a prepatory
commit.

-Justin