Skip to content

Commit

Permalink
object-file: don't special-case missing source file in collision check
Browse files Browse the repository at this point in the history
In 0ad3d65 (object-file: fix race in object collision check,
2024-12-30) we have started to ignore ENOENT when opening either the
source or destination file of the collision check. This was done to
handle races more gracefully in case either of the potentially-colliding
disappears.

The fix is overly broad though: while the destination file may indeed
vanish racily, this shouldn't ever happen for the source file, which is
a temporary object file (either loose or in packfile format) that we
have just created. So if any concurrent process would have removed that
temporary file it would indicate an actual issue.

Stop treating ENOENT specially for the source file so that we always
bubble up this error.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
pks-t authored and gitster committed Jan 6, 2025
1 parent c1acf1a commit cfae50e
Showing 1 changed file with 1 addition and 2 deletions.
3 changes: 1 addition & 2 deletions object-file.c
Original file line number Diff line number Diff line change
Expand Up @@ -1982,8 +1982,7 @@ static int check_collision(const char *source, const char *dest)

fd_source = open(source, O_RDONLY);
if (fd_source < 0) {
if (errno != ENOENT)
ret = error_errno(_("unable to open %s"), source);
ret = error_errno(_("unable to open %s"), source);
goto out;
}

Expand Down

0 comments on commit cfae50e

Please sign in to comment.