From 706be66447106f3be14883a78ffdab8b0e5415ad Mon Sep 17 00:00:00 2001 From: Lokesh Mandvekar Date: Tue, 21 Jun 2016 14:18:32 -0400 Subject: [PATCH] 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 --- skopeo-go142.patch | 203 +++++++++++++++++++++++++++++++++++++++++++++ skopeo.spec | 20 ++++- 2 files changed, 221 insertions(+), 2 deletions(-) create mode 100644 skopeo-go142.patch diff --git a/skopeo-go142.patch b/skopeo-go142.patch new file mode 100644 index 0000000..07b94e1 --- /dev/null +++ b/skopeo-go142.patch @@ -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) diff --git a/skopeo.spec b/skopeo.spec index fbf63e5..5975221 100644 --- a/skopeo.spec +++ b/skopeo.spec @@ -30,16 +30,22 @@ Name: skopeo Version: 0.1.13 -Release: 1%{?dist} +Release: 5%{?dist} Summary: Inspect Docker images and repositories on registries License: ASL 2.0 URL: https://%{provider_prefix} 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 ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}} +%if 0%{?fedora} BuildRequires: go-srpm-macros BuildRequires: compiler(go-compiler) +%endif +BuildRequires: git # 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: golang-github-cpuguy83-go-md2man @@ -158,7 +164,7 @@ providing packages with %{import_path} prefix. %endif %prep -%setup -q -n %{repo}-%{commit} +%autosetup -Sgit -n %{repo}-%{commit} %build mkdir -p src/github.com/projectatomic @@ -180,6 +186,11 @@ export GOPATH=$(pwd):$(pwd)/vendor:%{gopath} %endif 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 if test -f man/skopeo.1.md; then @@ -253,6 +264,11 @@ export GOPATH=%{buildroot}/%{gopath}:$(pwd)/vendor:%{gopath} %doc README.md %changelog +* Tue Jun 21 2016 Lokesh Mandvekar - 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 - 0.1.13-4 - update to v0.1.12