From b347c0f347b9fc73f183b57281941abea7b7f25e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Ga=C4=87e=C5=A1a?= Date: Wed, 5 Mar 2025 21:00:43 +0000 Subject: [PATCH] fix: [CODE-3307]: remove invalid file from repo if copy from sharedrepo fails (#3515) * remove invalid file from repo if copy from sharedrepo fails --- git/sharedrepo/sharedrepo.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/git/sharedrepo/sharedrepo.go b/git/sharedrepo/sharedrepo.go index bf1d36cfd..ca87c0705 100644 --- a/git/sharedrepo/sharedrepo.go +++ b/git/sharedrepo/sharedrepo.go @@ -946,7 +946,7 @@ func (r *SharedRepo) MoveObjects(ctx context.Context) error { // Try to copy the file - copyError := func() error { + errCopy := func() error { srcFile, err := os.Open(f.fullPath) if err != nil { return fmt.Errorf("failed to open source file: %w", err) @@ -966,17 +966,25 @@ func (r *SharedRepo) MoveObjects(ctx context.Context) error { return nil }() - if copyError != nil { - log.Ctx(ctx).Err(copyError). + if errCopy != nil { + // Make sure that an invalid or incomplete file does not remain in the repository if copying fails. + errRemove := os.Remove(dstPath) + if os.IsNotExist(errRemove) { + errRemove = nil + } + + log.Ctx(ctx).Err(errCopy). Str("object", f.relPath). - Str("renameErr", errRename.Error()). + Str("errRename", errRename.Error()). + Str("errRemove", errRemove.Error()). Msg("failed to move or copy git object") - return fmt.Errorf("failed to move or copy git object: %w", copyError) + + return fmt.Errorf("failed to move or copy git object: %w", errCopy) } log.Ctx(ctx).Warn(). Str("object", f.relPath). - Str("renameErr", errRename.Error()). + Str("errRename", errRename.Error()). Msg("copied git object") }