NVR: skopeo-0.1.13-5

- include go-srpm-macros and compiler(go-compiler) in fedora conditionals
- define %gobuild if not already
- add patch to build with older version of golang

Signed-off-by: Lokesh Mandvekar <lsm5@redhat.com>
This commit is contained in:
Lokesh Mandvekar 2016-06-21 14:18:32 -04:00 committed by Lokesh Mandvekar
parent 39846c01e9
commit 706be66447
2 changed files with 221 additions and 2 deletions

203
skopeo-go142.patch Normal file
View File

@ -0,0 +1,203 @@
diff --git a/signature/json.go b/signature/json.go
index a612db0..48f3a5c 100644
--- a/signature/json.go
+++ b/signature/json.go
@@ -1,10 +1,8 @@
package signature
import (
- "bytes"
"encoding/json"
"fmt"
- "io"
)
// jsonFormatError is returned when JSON does not match expected format.
@@ -64,28 +62,14 @@ func stringField(m map[string]interface{}, fieldName string) (string, error) {
func paranoidUnmarshalJSONObject(data []byte, fieldResolver func(string) interface{}) error {
seenKeys := map[string]struct{}{}
- dec := json.NewDecoder(bytes.NewReader(data))
- t, err := dec.Token()
- if err != nil {
+ // NOTE: This is a go 1.4 implementation, very much non-paranoid! The json.Unmarshal below
+ // already throws out duplicate keys.
+ var obj map[string]json.RawMessage
+ if err := json.Unmarshal(data, &obj); err != nil {
return jsonFormatError(err.Error())
}
- if t != json.Delim('{') {
- return jsonFormatError(fmt.Sprintf("JSON object expected, got \"%s\"", t))
- }
- for {
- t, err := dec.Token()
- if err != nil {
- return jsonFormatError(err.Error())
- }
- if t == json.Delim('}') {
- break
- }
- key, ok := t.(string)
- if !ok {
- // Coverage: This should never happen, dec.Token() rejects non-string-literals in this state.
- return jsonFormatError(fmt.Sprintf("Key string literal expected, got \"%s\"", t))
- }
+ for key, valueJSON := range obj {
if _, ok := seenKeys[key]; ok {
return jsonFormatError(fmt.Sprintf("Duplicate key \"%s\"", key))
}
@@ -95,13 +79,9 @@ func paranoidUnmarshalJSONObject(data []byte, fieldResolver func(string) interfa
if valuePtr == nil {
return jsonFormatError(fmt.Sprintf("Unknown key \"%s\"", key))
}
- // This works like json.Unmarshal, in particular it allows us to implement UnmarshalJSON to implement strict parsing of the field value.
- if err := dec.Decode(valuePtr); err != nil {
+ if err := json.Unmarshal(valueJSON, valuePtr); err != nil {
return jsonFormatError(err.Error())
}
}
- if _, err := dec.Token(); err != io.EOF {
- return jsonFormatError("Unexpected data after JSON object")
- }
return nil
}
diff --git a/signature/json_test.go b/signature/json_test.go
index 8d0f63c..80719e0 100644
--- a/signature/json_test.go
+++ b/signature/json_test.go
@@ -131,12 +131,12 @@ func TestParanoidUnmarshalJSONObject(t *testing.T) {
// Various kinds of invalid input
for _, input := range []string{
- ``, // Empty input
- `&`, // Entirely invalid JSON
- `1`, // Not an object
- `{&}`, // Invalid key JSON
- `{1:1}`, // Key not a string
- `{"b":1, "b":1}`, // Duplicate key
+ ``, // Empty input
+ `&`, // Entirely invalid JSON
+ `1`, // Not an object
+ `{&}`, // Invalid key JSON
+ `{1:1}`, // Key not a string
+ // `{"b":1, "b":1}`, // Duplicate key
`{"thisdoesnotexist":1}`, // Key rejected by resolver
`{"a":&}`, // Invalid value JSON
`{"a":1}`, // Type mismatch
@@ -144,6 +144,6 @@ func TestParanoidUnmarshalJSONObject(t *testing.T) {
} {
ts = testStruct{}
err := paranoidUnmarshalJSONObject([]byte(input), tsResolver)
- assert.Error(t, err)
+ assert.Error(t, err, input)
}
}
diff --git a/signature/policy_config_test.go b/signature/policy_config_test.go
index 63fd8c7..579aa5f 100644
--- a/signature/policy_config_test.go
+++ b/signature/policy_config_test.go
@@ -203,7 +203,7 @@ func TestPolicyUnmarshalJSON(t *testing.T) {
}
// Duplicated fields
- for _, field := range []string{"default", "specific"} {
+ for _, field := range []string{ /*"default", "specific"*/ } {
var tmp mSI
err := json.Unmarshal(validJSON, &tmp)
require.NoError(t, err)
@@ -367,7 +367,7 @@ func TestPRInsecureAcceptAnythingUnmarshalJSON(t *testing.T) {
}
// Duplicated fields
- for _, field := range []string{"type"} {
+ for _, field := range []string{ /*"type"*/ } {
var tmp mSI
err := json.Unmarshal(validJSON, &tmp)
require.NoError(t, err)
@@ -438,7 +438,7 @@ func TestPRRejectUnmarshalJSON(t *testing.T) {
}
// Duplicated fields
- for _, field := range []string{"type"} {
+ for _, field := range []string{ /*"type"*/ } {
var tmp mSI
err := json.Unmarshal(validJSON, &tmp)
require.NoError(t, err)
@@ -601,7 +601,7 @@ func TestPRSignedByUnmarshalJSON(t *testing.T) {
}
// Duplicated fields
- for _, field := range []string{"type", "keyType", "keyData", "signedIdentity"} {
+ for _, field := range []string{ /*"type", "keyType", "keyData", "signedIdentity"*/ } {
var tmp mSI
err := json.Unmarshal(validJSON, &tmp)
require.NoError(t, err)
@@ -613,14 +613,14 @@ func TestPRSignedByUnmarshalJSON(t *testing.T) {
assert.Error(t, err)
}
// Handle "keyPath", which is not in validJSON, specially
- pathPR, err := NewPRSignedByKeyPath(SBKeyTypeGPGKeys, "/foo/bar", NewPRMMatchExact())
- require.NoError(t, err)
- testJSON, err = json.Marshal(pathPR)
- require.NoError(t, err)
- testJSON = addExtraJSONMember(t, testJSON, "keyPath", pr.KeyPath)
- pr = prSignedBy{}
- err = json.Unmarshal(testJSON, &pr)
- assert.Error(t, err)
+ // pathPR, err := NewPRSignedByKeyPath(SBKeyTypeGPGKeys, "/foo/bar", NewPRMMatchExact())
+ // require.NoError(t, err)
+ // testJSON, err = json.Marshal(pathPR)
+ // require.NoError(t, err)
+ // testJSON = addExtraJSONMember(t, testJSON, "keyPath", pr.KeyPath)
+ // pr = prSignedBy{}
+ // err = json.Unmarshal(testJSON, &pr)
+ // assert.Error(t, err)
// Various allowed modifications to the requirement
allowedModificationFns := []func(mSI){
@@ -779,7 +779,7 @@ func TestPRSignedBaseLayerUnmarshalJSON(t *testing.T) {
}
// Duplicated fields
- for _, field := range []string{"type", "baseLayerIdentity"} {
+ for _, field := range []string{ /*"type", "baseLayerIdentity"*/ } {
var tmp mSI
err := json.Unmarshal(validJSON, &tmp)
require.NoError(t, err)
@@ -881,7 +881,7 @@ func TestPRMMatchExactUnmarshalJSON(t *testing.T) {
}
// Duplicated fields
- for _, field := range []string{"type"} {
+ for _, field := range []string{ /*"type"*/ } {
var tmp mSI
err := json.Unmarshal(validJSON, &tmp)
require.NoError(t, err)
@@ -952,7 +952,7 @@ func TestPRMMatchRepositoryUnmarshalJSON(t *testing.T) {
}
// Duplicated fields
- for _, field := range []string{"type"} {
+ for _, field := range []string{ /*"type"*/ } {
var tmp mSI
err := json.Unmarshal(validJSON, &tmp)
require.NoError(t, err)
@@ -1059,7 +1059,7 @@ func TestPRMExactReferenceUnmarshalJSON(t *testing.T) {
}
// Duplicated fields
- for _, field := range []string{"type", "baseLayerIdentity"} {
+ for _, field := range []string{ /*"type", "baseLayerIdentity"*/ } {
var tmp mSI
err := json.Unmarshal(validJSON, &tmp)
require.NoError(t, err)
@@ -1163,7 +1163,7 @@ func TestPRMExactRepositoryUnmarshalJSON(t *testing.T) {
}
// Duplicated fields
- for _, field := range []string{"type", "baseLayerIdentity"} {
+ for _, field := range []string{ /*"type", "baseLayerIdentity"*/ } {
var tmp mSI
err := json.Unmarshal(validJSON, &tmp)
require.NoError(t, err)

View File

@ -30,16 +30,22 @@
Name: skopeo Name: skopeo
Version: 0.1.13 Version: 0.1.13
Release: 1%{?dist} Release: 5%{?dist}
Summary: Inspect Docker images and repositories on registries Summary: Inspect Docker images and repositories on registries
License: ASL 2.0 License: ASL 2.0
URL: https://%{provider_prefix} URL: https://%{provider_prefix}
Source0: https://%{provider_prefix}/archive/%{commit}/%{repo}-%{shortcommit}.tar.gz Source0: https://%{provider_prefix}/archive/%{commit}/%{repo}-%{shortcommit}.tar.gz
%if 0%{?rhel}
Patch0: skopeo-go142.patch
%endif
# e.g. el6 has ppc64 arch without gcc-go, so EA tag is required # e.g. el6 has ppc64 arch without gcc-go, so EA tag is required
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}} ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
%if 0%{?fedora}
BuildRequires: go-srpm-macros BuildRequires: go-srpm-macros
BuildRequires: compiler(go-compiler) BuildRequires: compiler(go-compiler)
%endif
BuildRequires: git
# If go_compiler is not set to 1, there is no virtual provide. Use golang instead. # If go_compiler is not set to 1, there is no virtual provide. Use golang instead.
BuildRequires: %{?go_compiler:compiler(go-compiler)}%{!?go_compiler:golang} BuildRequires: %{?go_compiler:compiler(go-compiler)}%{!?go_compiler:golang}
BuildRequires: golang-github-cpuguy83-go-md2man BuildRequires: golang-github-cpuguy83-go-md2man
@ -158,7 +164,7 @@ providing packages with %{import_path} prefix.
%endif %endif
%prep %prep
%setup -q -n %{repo}-%{commit} %autosetup -Sgit -n %{repo}-%{commit}
%build %build
mkdir -p src/github.com/projectatomic mkdir -p src/github.com/projectatomic
@ -180,6 +186,11 @@ export GOPATH=$(pwd):$(pwd)/vendor:%{gopath}
%endif %endif
export GO15VENDOREXPERIMENT=1 export GO15VENDOREXPERIMENT=1
%if ! 0%{?gobuild:1}
%define gobuild(o:) go build -ldflags "${LDFLAGS:-} -B 0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \\n')" -a -v -x %{?**};
%endif
%gobuild -o skopeo ./cmd/skopeo %gobuild -o skopeo ./cmd/skopeo
if test -f man/skopeo.1.md; then if test -f man/skopeo.1.md; then
@ -253,6 +264,11 @@ export GOPATH=%{buildroot}/%{gopath}:$(pwd)/vendor:%{gopath}
%doc README.md %doc README.md
%changelog %changelog
* Tue Jun 21 2016 Lokesh Mandvekar <lsm5@fedoraproject.org> - 0.1.13-5
- include go-srpm-macros and compiler(go-compiler) in fedora conditionals
- define %%gobuild if not already
- add patch to build with older version of golang
* Thu Jun 02 2016 Antonio Murdaca <runcom@fedoraproject.org> - 0.1.13-4 * Thu Jun 02 2016 Antonio Murdaca <runcom@fedoraproject.org> - 0.1.13-4
- update to v0.1.12 - update to v0.1.12