diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/odb.c | 4 | ||||
-rw-r--r-- | src/odb_loose.c | 7 |
2 files changed, 4 insertions, 7 deletions
@@ -900,6 +900,10 @@ int git_odb_stream_write(git_odb_stream *stream, const char *buffer, size_t len) int git_odb_stream_finalize_write(git_oid *out, git_odb_stream *stream) { git_hash_final(out, stream->hash_ctx); + + if (git_odb_exists(stream->backend->odb, out)) + return 0; + return stream->finalize_write(stream, out); } diff --git a/src/odb_loose.c b/src/odb_loose.c index abf46a118..ce63f4673 100644 --- a/src/odb_loose.c +++ b/src/odb_loose.c @@ -781,13 +781,6 @@ static int loose_backend__stream_fwrite(git_odb_stream *_stream, const git_oid * if (object_file_name(&final_path, backend, oid) < 0 || object_mkdir(&final_path, backend) < 0) error = -1; - /* - * Don't try to add an existing object to the repository. This - * is what git does and allows us to sidestep the fact that - * we're not allowed to overwrite a read-only file on Windows. - */ - else if (git_path_exists(final_path.ptr) == true) - git_filebuf_cleanup(&stream->fbuf); else error = git_filebuf_commit_at( &stream->fbuf, final_path.ptr, GIT_OBJECT_FILE_MODE); |