On Wed, Jun 15, 2022 at 02:01:33PM -0700, Junio C Hamano wrote: > Richard Oliver <roliver@xxxxxxxx> writes: > > > Meanwhile, is it worth considering a '--promised-as-missing' option > > (or a config option) for invocations such as 'mktree --missing' that > > prevents promised objects being faulted-in? Currently, the only > > reliable way that I've found to prevent 'mktree --missing' faulting-in > > promised objects is to remove the remote. Such an option could either > > set the global variable 'fetch_if_missing' to '0' or could ensure > > 'OBJECT_INFO_SKIP_FETCH_OBJECT' is passed appropriately. > > I didn't spend too much time on thinking this one through myself, > but do we really need a separte option? > [...] > We by grave mistake at 31c8221a (mktree: validate entry type in > input, 2009-05-14) started insisting on inspecting objects even when > allow-mising was given. I do not think it was sensible, given why > we had "--missing" as an option to allow users to say "you do not > have to be too paranoid". > > The codebase is so distant but I think we should probably do a moral > revert/reconstruct of that commit so that the extra paranoia of the > said commit applies only when "--missing" is not in effect, or > something like that. FWIW, I had the same reaction. I think fixing "--missing" should be the first step, and would unstick Richard's use case, as I understand it. There is some value to improving the promisor case, since using "--missing" is a pretty broad stroke (i.e., you'd fail to actual corruption of missing non-promisor objects). That could either be checking the promisor object and type without faulting it in, or just skipping the type-check for objects after confirming that they're promisors. But that can come on top, I think. The use case there is also a bit narrower. The local repository does not know about all promised objects. It can only see the boundaries of objects it doesn't have (so with --filter=tree:0, for example, a partial clone of a repo with path "a/b/c" would know about "b" but not "c"). So in the most general case you'd still have to resort to "--missing", but I suspect in practice you'd always feed things at that boundary to mktree (otherwise, how would you even know the oid of "c"). -Peff