@@ -18,20 +18,14 @@ package legacy
18
18
import (
19
19
"bytes"
20
20
"encoding/json"
21
- "fmt"
22
- "net/http"
23
- "net/url"
24
21
25
- "github.com/google/go-containerregistry/pkg/authn"
26
- "github.com/google/go-containerregistry/pkg/logs"
27
22
"github.com/google/go-containerregistry/pkg/name"
28
23
"github.com/google/go-containerregistry/pkg/v1/remote"
29
- "github.com/google/go-containerregistry/pkg/v1/remote/transport"
30
24
)
31
25
32
26
// CopySchema1 allows `[g]crane cp` to work with old images without adding
33
27
// full support for schema 1 images to this package.
34
- func CopySchema1 (desc * remote.Descriptor , srcRef , dstRef name.Reference , srcAuth , dstAuth authn. Authenticator ) error {
28
+ func CopySchema1 (desc * remote.Descriptor , srcRef , dstRef name.Reference , opts ... remote. Option ) error {
35
29
m := schema1 {}
36
30
if err := json .NewDecoder (bytes .NewReader (desc .Manifest )).Decode (& m ); err != nil {
37
31
return err
@@ -41,56 +35,17 @@ func CopySchema1(desc *remote.Descriptor, srcRef, dstRef name.Reference, srcAuth
41
35
src := srcRef .Context ().Digest (layer .BlobSum )
42
36
dst := dstRef .Context ().Digest (layer .BlobSum )
43
37
44
- blob , err := remote .Layer (src , remote . WithAuth ( srcAuth ) )
38
+ blob , err := remote .Layer (src , opts ... )
45
39
if err != nil {
46
40
return err
47
41
}
48
42
49
- if err := remote .WriteLayer (dst .Context (), blob , remote . WithAuth ( dstAuth ) ); err != nil {
43
+ if err := remote .WriteLayer (dst .Context (), blob , opts ... ); err != nil {
50
44
return err
51
45
}
52
46
}
53
47
54
- return putManifest (desc , dstRef , dstAuth )
55
- }
56
-
57
- // TODO: perhaps expose this in remote?
58
- func putManifest (desc * remote.Descriptor , dstRef name.Reference , dstAuth authn.Authenticator ) error {
59
- reg := dstRef .Context ().Registry
60
- scopes := []string {dstRef .Scope (transport .PushScope )}
61
-
62
- // TODO(jonjohnsonjr): Use NewWithContext.
63
- tr , err := transport .New (reg , dstAuth , http .DefaultTransport , scopes )
64
- if err != nil {
65
- return err
66
- }
67
- client := & http.Client {Transport : tr }
68
-
69
- u := url.URL {
70
- Scheme : dstRef .Context ().Registry .Scheme (),
71
- Host : dstRef .Context ().RegistryStr (),
72
- Path : fmt .Sprintf ("/v2/%s/manifests/%s" , dstRef .Context ().RepositoryStr (), dstRef .Identifier ()),
73
- }
74
-
75
- req , err := http .NewRequest (http .MethodPut , u .String (), bytes .NewBuffer (desc .Manifest ))
76
- if err != nil {
77
- return err
78
- }
79
- req .Header .Set ("Content-Type" , string (desc .MediaType ))
80
-
81
- resp , err := client .Do (req )
82
- if err != nil {
83
- return err
84
- }
85
- defer resp .Body .Close ()
86
-
87
- if err := transport .CheckError (resp , http .StatusOK , http .StatusCreated , http .StatusAccepted ); err != nil {
88
- return err
89
- }
90
-
91
- // The image was successfully pushed!
92
- logs .Progress .Printf ("%v: digest: %v size: %d" , dstRef , desc .Digest , len (desc .Manifest ))
93
- return nil
48
+ return remote .Put (dstRef , desc , opts ... )
94
49
}
95
50
96
51
type fslayer struct {
0 commit comments