From: Patrick Steinhardt Date: Wed, 09 Sep 2026 05:48:25 GMT Subject: Re: [PATCH v3 2/9] builtin/clone: defer setup of the object database Message-ID: In-Reply-To: On Tue, Sep 08, 2026 at 05:20:06PM -0500, Justin Tobler wrote: > On 26/09/07 10:25AM, Patrick Steinhardt wrote: > > When cloning a repository we defer initialization of the reference > > database. This is because we don't yet know all details required for us > > to initialize the refdb in the first place. Most importantly, what we > > are missing is information about the object hash. > > > > We don't do the same thing for the object database yet, but here we > > essentially have the same problem. While the "files" database does not > > need any information about the object format at creation time, alternate > > backends are likely to require that information so that they can > > properly set up their data structures. > > > > Besides this forward-looking future proofing though, we also have a > > second use case for deferring initialization of the object database, > > namely alternates. When initializing the object database we do not yet > > know whether we'll need alternates or not because this depends on the > > repository we're about to clone from. If it is a local repository and > > the user has passed "--refernce{,-if-able}", then we will end up writing > > alternates into the object database. > > > > The ugly part though is that we cannot determine where the repository is > > getting cloned from before it has been initialized. While we of course > > already have access to the user-provided URI, that URI can be very well > > rewritten via "url..insteadOf". We can of course read the global- > > and system-level configuration to resolve it. But we explicitly resolve > > the URI a second time after we have initialized the repository because > > it can happen that we copy a ".git/config" over from our templates, and > > that file may cause us to rewrite the path. > > > > In a subsequent commit though we'll start to write alternates as part of > > the repository initialization, so we'll need to have the URI properly > > resolved before we can initialize the object database. This is ugly, but > > as mentioned above it makes sense for us to defer its initialization > > anyway so that we also know about the object hash already. > > > > Defer creation of the object database until after we have resolved the > > URI. > > > > Note that this also requires us to defer the call to `setup_reference()` > > until after we have created the object database. While you might think > > that this function has something to do with references ("refs/*"), it is > > in fact responsible for setting up alternates. Consequently, we can only > > call it after we have created the object database already. > > Ah ok, so now that we are deferring ODB creation a bit further, we need > to also move ref DB creation to afterwards too. Makes sense. This is not about the reference database, `setup_reference()` sets up out alternates. But I think you just miswrote here, as you do mention alternates further down in your reply. Patrick