gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // Copyright 2024 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package git
  4. import (
  5. "bufio"
  6. "context"
  7. )
  8. type Batch struct {
  9. cancel context.CancelFunc
  10. Reader *bufio.Reader
  11. Writer WriteCloserError
  12. }
  13. // NewBatch creates a new batch for the given repository, the Close must be invoked before release the batch
  14. func NewBatch(ctx context.Context, repoPath string) (*Batch, error) {
  15. // Now because of some insanity with git cat-file not immediately failing if not run in a valid git directory we need to run git rev-parse first!
  16. if err := ensureValidGitRepository(ctx, repoPath); err != nil {
  17. return nil, err
  18. }
  19. var batch Batch
  20. batch.Writer, batch.Reader, batch.cancel = catFileBatch(ctx, repoPath)
  21. return &batch, nil
  22. }
  23. func NewBatchCheck(ctx context.Context, repoPath string) (*Batch, error) {
  24. // Now because of some insanity with git cat-file not immediately failing if not run in a valid git directory we need to run git rev-parse first!
  25. if err := ensureValidGitRepository(ctx, repoPath); err != nil {
  26. return nil, err
  27. }
  28. var check Batch
  29. check.Writer, check.Reader, check.cancel = catFileBatchCheck(ctx, repoPath)
  30. return &check, nil
  31. }
  32. func (b *Batch) Close() {
  33. if b.cancel != nil {
  34. b.cancel()
  35. b.Reader = nil
  36. b.Writer = nil
  37. b.cancel = nil
  38. }
  39. }