Re: [PATCH 6/7] read-cache: refuse to create index referring to external objects
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 25, 2013, 19:00 UTC
- Message-ID
- <7vpq0t3x60.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <CACsJy8C3tLOHCK4Qc--W630do0M=xLKSMoYUxxv2_GDaUXaRww@mail.gmail.com>
Duy Nguyen <pclouds@gmail.com> writes:
> .... Even
> when cache-tree is not involved, I do not want the index to point to
> an non-existing SHA-1 ("git diff --cached" may fail next time, for
> example).I think we have tests that explicitly add SHA-1 that names an object that does not exist to the index and check failures; you may have to think what to do with them.
Show 12 quoted lines
>> This is a tangent, but in addition, you may want to add an even >> narrower variant that checks the same but ignoring _all_ alternate >> object databases, "external" or not: >> >> int has_sha1_file_local(const unsigned char *sha1); >> >> That may be useful if we want to later make the alternate safer to >> use; instead of letting the codepath to create an object ask >> has_sha1_file() to see if it already exists and refrain from writing >> a new copy, we switch to ask has_sha1_file_locally() and even if an >> alternate object database we borrow from has it, we keep our own >> copy in our repository.
This is not a tangent, but if you want to go this "forbid making our repository depend on objects we do not have but we know about after we peek submodule odb" route [*1*], write_sha1_file() needs to be told about has_sha1_file_proper(). We may "git add" a new blob in the superproject, the blob may not yet exist in *our* repository, but may happen to already exist in the submodue odb. In such a case, write_sha1_file() has to write that blob in our repository, without the existing has_sha1_file() check bypassing it. Otherwise our attempt to create a tree that contains that blob will fail, saying that the blob only seems to exist to us via submodule odb but not in our repository.
[Footnote]
*1* which I do not necessarily agree with---I am in favor of getting rid of add_submodule_odb() to fix these issues at the root cause of them.