Duy Nguyen <pclouds@xxxxxxxxx> 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. >> 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. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html