From 0decf97455da2588b1d2dc2efbecd5bf39163e48 Mon Sep 17 00:00:00 2001 From: Jacob Vosmaer Date: Wed, 21 Sep 2016 16:48:32 +0200 Subject: [PATCH] Handle EEXIST when finalizing git archive Closes https://gitlab.com/gitlab-org/gitlab-workhorse/issues/63 --- internal/git/archive.go | 6 +++++- internal/git/archive_test.go | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/internal/git/archive.go b/internal/git/archive.go index d742a9887e04..3921f8c1e95a 100644 --- a/internal/git/archive.go +++ b/internal/git/archive.go @@ -173,7 +173,11 @@ func finalizeCachedArchive(tempFile *os.File, archivePath string) error { if err := tempFile.Close(); err != nil { return err } - return os.Link(tempFile.Name(), archivePath) + if err := os.Link(tempFile.Name(), archivePath); err != nil && !os.IsExist(err) { + return err + } + + return nil } func parseBasename(basename string) (string, bool) { diff --git a/internal/git/archive_test.go b/internal/git/archive_test.go index e4520a0f2a9a..e3e85baf2630 100644 --- a/internal/git/archive_test.go +++ b/internal/git/archive_test.go @@ -1,6 +1,7 @@ package git import ( + "io/ioutil" "testing" ) @@ -27,3 +28,17 @@ func TestParseBasename(t *testing.T) { } } } + +func TestFinalizeArchive(t *testing.T) { + tempFile, err := ioutil.TempFile("", "gitlab-workhorse-test") + if err != nil { + t.Fatal(err) + } + defer tempFile.Close() + + // Deliberately cause an EEXIST error: we know tempFile.Name() already exists + err = finalizeCachedArchive(tempFile, tempFile.Name()) + if err != nil { + t.Fatalf("expected nil from finalizeCachedArchive, received %v", err) + } +} -- GitLab