gitea源码

main.go 1.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. // Copyright 2024 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package lfstransfer
  4. import (
  5. "context"
  6. "fmt"
  7. "os"
  8. "code.gitea.io/gitea/modules/lfstransfer/backend"
  9. "github.com/charmbracelet/git-lfs-transfer/transfer"
  10. )
  11. func Main(ctx context.Context, repo, verb, token string) error {
  12. logger := newLogger()
  13. pktline := transfer.NewPktline(os.Stdin, os.Stdout, logger)
  14. giteaBackend, err := backend.New(ctx, repo, verb, token, logger)
  15. if err != nil {
  16. return err
  17. }
  18. for _, cap := range backend.Capabilities {
  19. if err := pktline.WritePacketText(cap); err != nil {
  20. logger.Log("error sending capability due to error:", err)
  21. }
  22. }
  23. if err := pktline.WriteFlush(); err != nil {
  24. logger.Log("error flushing capabilities:", err)
  25. }
  26. p := transfer.NewProcessor(pktline, giteaBackend, logger)
  27. defer logger.Log("done processing commands")
  28. switch verb {
  29. case "upload":
  30. return p.ProcessCommands(transfer.UploadOperation)
  31. case "download":
  32. return p.ProcessCommands(transfer.DownloadOperation)
  33. default:
  34. return fmt.Errorf("unknown operation %q", verb)
  35. }
  36. }