bb59bee4dfc46802fcdc43342ed05c5d04387dd2
- Author
- Ayman Bagabas <ayman.bagabas@gmail.com>
- Committer
- Ayman Bagabas <ayman.bagabas@gmail.com>
- Date
Message
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{