diff --git a/pkg/commands/executor.go b/pkg/commands/executor.go index 9581acab..0becc990 100644 --- a/pkg/commands/executor.go +++ b/pkg/commands/executor.go @@ -218,11 +218,15 @@ func (e *Executor) acquireFileLock() bool { lockFile := filepath.Join(os.TempDir(), "golangci-lint.lock") e.debugf("Locking on file %s...", lockFile) f := flock.New(lockFile) - const totalTimeout = 5 * time.Second const retryDelay = time.Second - ctx, finish := context.WithTimeout(context.Background(), totalTimeout) - defer finish() + ctx := context.Background() + if !e.cfg.Run.AllowSerialRunners { + const totalTimeout = 5 * time.Second + var cancel context.CancelFunc + ctx, cancel = context.WithTimeout(ctx, totalTimeout) + defer cancel() + } if ok, _ := f.TryLockContext(ctx, retryDelay); !ok { return false } diff --git a/pkg/commands/run.go b/pkg/commands/run.go index 3cd4381c..57cb5471 100644 --- a/pkg/commands/run.go +++ b/pkg/commands/run.go @@ -111,6 +111,9 @@ func initFlagSet(fs *pflag.FlagSet, cfg *config.Config, m *lintersdb.Manager, is const allowParallelDesc = "Allow multiple parallel golangci-lint instances running. " + "If false (default) - golangci-lint acquires file lock on start." fs.BoolVar(&rc.AllowParallelRunners, "allow-parallel-runners", false, wh(allowParallelDesc)) + const allowSerialDesc = "Allow multiple golangci-lint instances running, but serialize them around a lock. " + + "If false (default) - golangci-lint exits with an error if it fails to acquire file lock on start." + fs.BoolVar(&rc.AllowSerialRunners, "allow-serial-runners", false, wh(allowSerialDesc)) // Linters settings config lsc := &cfg.LintersSettings diff --git a/pkg/config/config.go b/pkg/config/config.go index bf7641f2..9689ea09 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -152,6 +152,7 @@ type Run struct { UseDefaultSkipDirs bool `mapstructure:"skip-dirs-use-default"` AllowParallelRunners bool `mapstructure:"allow-parallel-runners"` + AllowSerialRunners bool `mapstructure:"allow-serial-runners"` } type LintersSettings struct {