Re: [PATCH v3 2/5] object-file.c: handle undetermined oid in write_loose_object()
- From
Derrick Stolee <stolee@gmail.com>
- Date
- Nov 29, 2021, 22:18 UTC
- Message-ID
- <2271576b-79d3-7983-d3df-5548e0a12e85@gmail.com>
- In-Reply-To
- <xmqqsfve669w.fsf@gitster.g>
On 11/29/2021 3:44 PM, Junio C Hamano wrote:
Show 16 quoted lines
> Derrick Stolee <stolee@gmail.com> writes: > >> My first reaction is to not write into .git/objects/ directly, but >> instead make a .git/objects/tmp/ directory and write within that >> directory. The idea is to prevent leaving stale files in the >> .git/objects/ directory if the process terminates strangely (say, >> a power outage or segfault). > > Even if we know the name of the object we are writing beforehand, I > do not think it is a good idea to open-write-close the final object > file. The approach we already use everywhere is to write into a > tmpfile/lockfile and rename it to the final name > > object-file.c::write_loose_object() uses create_tmpfile() to prepare > a temporary file whose name begins with "tmp_obj_", so that "gc" can > recognize stale ones and remove them.
The only difference is that the tmp_obj_* file would go into the loose object directory corresponding to the first two hex characters of the OID, but that no longer happens now.
Show 8 quoted lines
>> If this was an interesting idea to pursue, it does leave a question: >> should we clean up the tmp/ directory when it is empty? That would >> require adding a check in finalize_object_file() that is probably >> best left unchecked (the lstat() would add a cost per loose object >> write that is probably too costly). I would rather leave an empty >> tmp/ directory than add that cost per loose object write. > > I am not sure why we want a new tmp/ directory.
I'm just thinking of a case where this fails repeatedly I would rather have those failed tmp_obj_* files isolated in their own directory. It's an extremely minor point, so I'm fine to drop the recommendation.
Thanks, -Stolee