func()

in internal/server/index_builder.go [36:87]


func (b DefaultIndexBuilder) IndexRepository(ctx context.Context, req IndexRequest, callbackFunc callback.CallbackFunc) error {
	if req.GitalyConnectionInfo == nil {
		return errors.New("gitalyConnectionInfo is not set")
	}

	if req.FileSizeLimit == 0 {
		return errors.New("fileSizeLimit is not set")
	}

	timeout, err := time.ParseDuration(req.Timeout)
	if err != nil {
		return fmt.Errorf("failed to parse Timeout: %v with error %w", req.Timeout, err)
	}

	ctx, cancel := context.WithTimeout(ctx, timeout)
	defer cancel()

	idx := &indexer.Indexer{
		IndexDir:           b.IndexDir,
		ProjectID:          req.RepoID,
		GitalyAddress:      req.GitalyConnectionInfo.Address,
		GitalyStorageName:  req.GitalyConnectionInfo.Storage,
		GitalyToken:        req.GitalyConnectionInfo.Token,
		GitalyRelativePath: req.GitalyConnectionInfo.Path,
		LimitFileSize:      req.FileSizeLimit,
		ForceReindex:       req.Force,
		Parallelism:        req.Parallelism,
		Writer:             &indexer.DefaultIndexWriter{},
		OnRetryableFailure: indexer.IndexingFailureFallback,
	}

	ctx = correlation.ContextWithCorrelation(ctx, correlation.ExtractFromContextOrGenerate(ctx))
	indexingResult, err := idx.IndexRepository(ctx)
	if indexingResult != nil {
		slog.Debug("indexing Result", "project_id", idx.ProjectID, "force", idx.ForceReindex, "modified_files_count", indexingResult.ModifiedFilesCount, "deleted_files_count", indexingResult.DeletedFilesCount)
	}

	railsCallback := req.Callback

	if err != nil {
		if railsCallback != nil {
			callbackFunc.OnFailure(*railsCallback, err)
		}
		return err
	}

	if railsCallback != nil {
		callbackFunc.OnSuccess(*railsCallback)
	}

	return nil
}