From 7450c70214886fd7f506b6f9f870e4147a7907d6 Mon Sep 17 00:00:00 2001 From: Sam Alba Date: Wed, 17 Nov 2021 16:23:23 -0800 Subject: [PATCH] mod/stdlib: attempt to remove the lock file after file unlock Signed-off-by: Sam Alba --- mod/mod.go | 17 +++++++++++++---- stdlib/stdlib.go | 8 ++++++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/mod/mod.go b/mod/mod.go index 79f9ac46..bf49c284 100644 --- a/mod/mod.go +++ b/mod/mod.go @@ -2,6 +2,7 @@ package mod import ( "context" + "os" "path" "strings" @@ -36,12 +37,16 @@ func Install(ctx context.Context, workspace, repoName, versionConstraint string) return nil, err } - fileLock := flock.New(path.Join(workspace, lockFilePath)) + fileLockPath := path.Join(workspace, lockFilePath) + fileLock := flock.New(fileLockPath) if err := fileLock.Lock(); err != nil { return nil, err } - defer fileLock.Unlock() + defer func() { + fileLock.Unlock() + os.Remove(fileLockPath) + }() err = modfile.install(ctx, require) if err != nil { @@ -91,12 +96,16 @@ func Update(ctx context.Context, workspace, repoName, versionConstraint string) return nil, err } - fileLock := flock.New(path.Join(workspace, lockFilePath)) + fileLockPath := path.Join(workspace, lockFilePath) + fileLock := flock.New(fileLockPath) if err := fileLock.Lock(); err != nil { return nil, err } - defer fileLock.Unlock() + defer func() { + fileLock.Unlock() + os.Remove(fileLockPath) + }() updatedRequire, err := modfile.updateToLatest(ctx, require) if err != nil { diff --git a/stdlib/stdlib.go b/stdlib/stdlib.go index b17308d7..a31ce6cc 100644 --- a/stdlib/stdlib.go +++ b/stdlib/stdlib.go @@ -23,12 +23,16 @@ var ( ) func Vendor(ctx context.Context, mod string) error { - fileLock := flock.New(path.Join(mod, lockFilePath)) + lockFilePath := path.Join(mod, lockFilePath) + fileLock := flock.New(lockFilePath) if err := fileLock.Lock(); err != nil { return err } - defer fileLock.Unlock() + defer func() { + fileLock.Unlock() + os.Remove(lockFilePath) + }() // Remove any existing copy of the universe if err := os.RemoveAll(path.Join(mod, Path)); err != nil {