bb59bee4dfc46802fcdc43342ed05c5d04387dd2

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

fix: use the latest git-lfs-transfer and update implementation

Diff

This diff is truncated to protect this page.

  1diff --git a/pkg/git/lfs.go b/pkg/git/lfs.go
  2index 4b0065f3e5e3d830347dc2bbc3b50ead7a19b347..acf41468c36695458577bd95e839103b6ed03f5b 100644
  3--- a/pkg/git/lfs.go
  4+++ b/pkg/git/lfs.go
  5@@ -6,7 +6,6 @@ import (
  6 	"errors"
  7 	"fmt"
  8 	"io"
  9-	"io/fs"
 10 	"path"
 11 	"path/filepath"
 12 	"strconv"
 13@@ -60,10 +59,7 @@ func LFSTransfer(ctx context.Context, cmd ServiceCommand) error {
 14 	}
 15 
 16 	// Advertise capabilities.
 17-	for _, cap := range []string{
 18-		"version=1",
 19-		"locking",
 20-	} {
 21+	for _, cap := range transfer.Capabilities {
 22 		if err := handler.WritePacketText(cap); err != nil {
 23 			logger.Errorf("error sending capability: %s: %v", cap, err)
 24 			return err
 25@@ -114,34 +110,32 @@ func (t *lfsTransfer) Batch(_ string, pointers []transfer.BatchItem, _ transfer.
 26 }
 27 
 28 // Download implements transfer.Backend.
 29-func (t *lfsTransfer) Download(oid string, _ transfer.Args) (fs.File, error) {
 30+func (t *lfsTransfer) Download(oid string, _ transfer.Args) (io.ReadCloser, int64, error) {
 31 	cfg := config.FromContext(t.ctx)
 32 	repoID := strconv.FormatInt(t.repo.ID(), 10)
 33 	strg := storage.NewLocalStorage(filepath.Join(cfg.DataPath, "lfs", repoID))
 34 	pointer := transfer.Pointer{Oid: oid}
 35-	return strg.Open(path.Join("objects", pointer.RelativePath()))
 36-}
 37-
 38-type uploadObject struct {
 39-	oid    string
 40-	size   int64
 41-	object storage.Object
 42-}
 43-
 44-func (u *uploadObject) Close() error {
 45-	return u.object.Close()
 46+	obj, err := strg.Open(path.Join("objects", pointer.RelativePath()))
 47+	if err != nil {
 48+		return nil, 0, err
 49+	}
 50+	stat, err := obj.Stat()
 51+	if err != nil {
 52+		return nil, 0, err
 53+	}
 54+	return obj, stat.Size(), nil
 55 }
 56 
 57-// StartUpload implements transfer.Backend.
 58-func (t *lfsTransfer) StartUpload(oid string, r io.Reader, _ transfer.Args) (io.Closer, error) {
 59+// Upload implements transfer.Backend.
 60+func (t *lfsTransfer) Upload(oid string, size int64, r io.Reader, _ transfer.Args) error {
 61 	if r == nil {
 62-		return nil, fmt.Errorf("no reader: %w", transfer.ErrMissingData)
 63+		return fmt.Errorf("no reader: %w", transfer.ErrMissingData)
 64 	}
 65 
 66 	tempDir := "incomplete"
 67 	randBytes := make([]byte, 12)
 68 	if _, err := rand.Read(randBytes); err != nil {
 69-		return nil, err
 70+		return err
 71 	}
 72 
 73 	tempName := fmt.Sprintf("%s%x", oid, randBytes)
 74@@ -150,37 +144,22 @@ func (t *lfsTransfer) StartUpload(oid string, r io.Reader, _ transfer.Args) (io.
 75 	written, err := t.storage.Put(tempName, r)
 76 	if err != nil {
 77 		t.logger.Errorf("error putting object: %v", err)
 78-		return nil, err
 79+		return err
 80 	}
 81 
 82 	obj, err := t.storage.Open(tempName)
 83 	if err != nil {
 84 		t.logger.Errorf("error opening object: %v", err)
 85-		return nil, err
 86-	}
 87-
 88-	return &uploadObject{
 89-		oid:    oid,
 90-		size:   written,
 91-		object: obj,
 92-	}, nil
 93-}
 94-
 95-// FinishUpload implements transfer.Backend.
 96-func (t *lfsTransfer) FinishUpload(state io.Closer, args transfer.Args) error {
 97-	upl, ok := state.(*uploadObject)
 98-	if !ok {
 99-		return errors.New("invalid state")
100+		return err
101 	}
102 
103-	size, _ := transfer.SizeFromArgs(args)
104 	pointer := transfer.Pointer{