@@ -30,8 +30,12 @@ type diskHandler struct {
30
30
31
31
func NewDiskBlobHandler (dir string ) BlobHandler { return & diskHandler {dir : dir } }
32
32
33
+ func (m * diskHandler ) blobHashPath (h v1.Hash ) string {
34
+ return filepath .Join (m .dir , h .Algorithm , h .Hex )
35
+ }
36
+
33
37
func (m * diskHandler ) Stat (_ context.Context , _ string , h v1.Hash ) (int64 , error ) {
34
- fi , err := os .Stat (filepath . Join ( m . dir , h . String () ))
38
+ fi , err := os .Stat (m . blobHashPath ( h ))
35
39
if errors .Is (err , os .ErrNotExist ) {
36
40
return 0 , errNotFound
37
41
} else if err != nil {
@@ -40,7 +44,7 @@ func (m *diskHandler) Stat(_ context.Context, _ string, h v1.Hash) (int64, error
40
44
return fi .Size (), nil
41
45
}
42
46
func (m * diskHandler ) Get (_ context.Context , _ string , h v1.Hash ) (io.ReadCloser , error ) {
43
- return os .Open (filepath . Join ( m . dir , h . String () ))
47
+ return os .Open (m . blobHashPath ( h ))
44
48
}
45
49
func (m * diskHandler ) Put (_ context.Context , _ string , h v1.Hash , rc io.ReadCloser ) error {
46
50
// Put the temp file in the same directory to avoid cross-device problems
@@ -57,9 +61,11 @@ func (m *diskHandler) Put(_ context.Context, _ string, h v1.Hash, rc io.ReadClos
57
61
}(); err != nil {
58
62
return err
59
63
}
60
-
61
- return os .Rename (f .Name (), filepath .Join (m .dir , h .String ()))
64
+ if err := os .MkdirAll (filepath .Join (m .dir , h .Algorithm ), os .ModePerm ); err != nil {
65
+ return err
66
+ }
67
+ return os .Rename (f .Name (), m .blobHashPath (h ))
62
68
}
63
69
func (m * diskHandler ) Delete (_ context.Context , _ string , h v1.Hash ) error {
64
- return os .Remove (filepath . Join ( m . dir , h . String () ))
70
+ return os .Remove (m . blobHashPath ( h ))
65
71
}
0 commit comments