diff --git a/components/content-service/pkg/git/git.go b/components/content-service/pkg/git/git.go index 872269d11766f8..88caa8353016ee 100644 --- a/components/content-service/pkg/git/git.go +++ b/components/content-service/pkg/git/git.go @@ -287,9 +287,32 @@ func GitStatusFromFiles(ctx context.Context, loc string) (res *Status, err error }, nil } +// StatusOption configures the behavior of git status +type StatusOption func(*statusOptions) + +type statusOptions struct { + disableOptionalLocks bool +} + +// WithDisableOptionalLocks disables optional locks during git status +func WithDisableOptionalLocks(disable bool) StatusOption { + return func(o *statusOptions) { + o.disableOptionalLocks = disable + } +} + // Status runs git status -func (c *Client) Status(ctx context.Context) (res *Status, err error) { - gitout, err := c.GitWithOutput(ctx, nil, "status", "--porcelain=v2", "--branch", "-uall") +func (c *Client) Status(ctx context.Context, opts ...StatusOption) (res *Status, err error) { + options := &statusOptions{} + for _, opt := range opts { + opt(options) + } + + args := []string{"status", "--porcelain=v2", "--branch", "-uall"} + if options.disableOptionalLocks { + args = append([]string{"--no-optional-locks"}, args...) + } + gitout, err := c.GitWithOutput(ctx, nil, args[0], args[1:]...) if err != nil { return nil, err } diff --git a/components/supervisor/pkg/supervisor/git.go b/components/supervisor/pkg/supervisor/git.go index 229134f29a3f48..c937df9b64d56d 100644 --- a/components/supervisor/pkg/supervisor/git.go +++ b/components/supervisor/pkg/supervisor/git.go @@ -182,7 +182,7 @@ func (s *GitStatusService) Run(ctx context.Context, wg *sync.WaitGroup) { } func (s *GitStatusService) update(ctx context.Context, updateContext *gitStatusUpdateContext) { - status, err := s.git.Status(ctx) + status, err := s.git.Status(ctx, git.WithDisableOptionalLocks(true)) if err != nil { log.WithError(err).Error("git: error getting status") time.Sleep(updateContext.statusBackoff.NextBackOff())