Commit 1db9d2c3 by Paul Betts

Ensure that commits don't fail if committing content that already exists

Making a commit that results in a blob that already exists in the ODB (i.e.
committing something, then making a revert commit) will result in us trying
to p_rename -> MoveFileExW a temp file into the existing ODB entry. Despite
the MOVEFILE_REPLACE_EXISTING flag is passed in, Win32 does not care and
fails it with STATUS_ACCESS_DENIED.

To fix this, we p_unlink the ODB entry before attempting to rename it. This
call will typically fail, but we don't care, we'll let the p_rename fail if
the file actually does exist and we couldn't delete it for some reason (ACLs,
etc).
parent 34ab819e
......@@ -291,6 +291,8 @@ int git_filebuf_commit(git_filebuf *file, mode_t mode)
goto cleanup;
}
p_unlink(file->path_original);
error = p_rename(file->path_lock, file->path_original);
cleanup:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment