Hi folks, my apologies if old thread reanimation is frowned upon, I have not been able to find any indications that this is the case. On Sat, Mar 14, 2020 at 6:43 AM Christian Couder <christian.couder@xxxxxxxxx> wrote: > On Fri, Mar 13, 2020 at 12:09 AM Jonathan Nieder <jrnieder@xxxxxxxxx> wrote: > > [...] > > >>> Hmm...besides giving the name of the promisor remote, the > > >>> extensions.partialClone setting is there to prevent old versions of Git > > >>> (that do not know this extension) from manipulating the repo. I was going to start a new thread about just this topic today, but learned to use the archives instead, for better or for worse... > > I can start writing a proposed patch to send this evening or tomorrow. > That would be very much appreciated! Thanks! Was this change ever attempted? Git's current behavior (as of 2.31.1) appears to still violate the semantics of core.repositoryformatversion=1 as documented at https://github.com/git/git/blob/master/Documentation/technical/repository-version.txt, and this has been the case since git 2.24. I assume the right fix at this point would be to do something like auto-detecting promisor remotes and/or packfiles and adding the extensions.partialClone config key automatically/transparently. The main question seems to be *what value* the config key should hold, if there are multiple promisor remotes? > > >> Christian, what would your prefered way be to fix this? Should > > >> extensions.partialclone specify a particular "default" promisor > > >> remote, or should we use a new repository extension for multiple > > >> promisors? > > [...] > > > So I'd rather obsolete "extensions.partialClone = <remote>" and to > > > find other ways. > > > > I *think* that means "new repository extension". > > [...] > > That suggests something like > > > > [extensions] > > multiplePromisors = true > > [...] > > > or maybe > > > we could have another extension alltogether like > > > "[extensions]\npromisorremotes=<bool>" and over time obsolete > > > "extensions.partialClone" altogether. I prefer the later. > > > > I think we're going to have to continue to support > > extensions.partialClone=<remote> for a long time anyway (breaking the > > ability to work with existing repositories is expensive), so I'm > > reasonably comfortable with multiplePromisors being a separate > > extension. Some faraway day, we can introduce > > "repositoryFormatVersion = 2" that mandates support for these > > extensions by default, allowing us to clean up and simplify. > > > This behavior has been around for a few releases so it would want to > > cook until the 2.27 cycle. > > Yeah, and partial clone is experimental, so I think it's ok. > I'm a little confused by suggestions to create a *new* extension key here. In principle, this would mean that existing repositories created/updated by the newest git version would declare themselves to be incompatible with git clients that don't understand this entirely-new key, even though: * promisor packfiles are a reasonably longstanding thing now (several years old), * they have officially/theoretically been associated with the "partialClone" extension key throughout that time (at least in the docs), and * partial clone is no longer considered "experimental" in any public doc, The kind of sudden backwards-incompatibility implied by a new "extensions.*" key seems... bad? (unless it's something that you *newly* opt in to - which doesn't seem to be the case here) Thanks, Tao