From a49f22efd84d1cc656242319cca27cbdf8852e05 Mon Sep 17 00:00:00 2001 From: William Hubbs Date: Fri, 23 Jun 2017 12:34:25 -0500 Subject: [PATCH] make ostree optional --- vendor/github.com/containers/image/README.md | 14 ++++++--- .../transports/alltransports/alltransports.go | 2 +- .../image/transports/alltransports/ostree.go | 8 +++++ .../image/transports/alltransports/ostree_stub.go | 9 ++++++ .../github.com/containers/image/transports/stub.go | 36 ++++++++++++++++++++++ .../containers/image/transports/stub_test.go | 18 +++++++++++ 6 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 vendor/github.com/containers/image/transports/alltransports/ostree.go create mode 100644 vendor/github.com/containers/image/transports/alltransports/ostree_stub.go create mode 100644 vendor/github.com/containers/image/transports/stub.go create mode 100644 vendor/github.com/containers/image/transports/stub_test.go diff --git a/vendor/github.com/containers/image/README.md b/vendor/github.com/containers/image/README.md index ca8afd4..8e812bb 100644 --- a/vendor/github.com/containers/image/README.md +++ b/vendor/github.com/containers/image/README.md @@ -51,14 +51,20 @@ Ensure that the dependencies documented [in vendor.conf](https://github.com/cont are also available (using those exact versions or different versions of your choosing). -This library, by default, also depends on the GpgME C library. Either install it: +This library, by default, also depends on the GpgME and libostree C libraries. Either install them: ```sh -Fedora$ dnf install gpgme-devel libassuan-devel +Fedora$ dnf install gpgme-devel libassuan-devel libostree-devel macOS$ brew install gpgme ``` -or use the `containers_image_openpgp` build tag (e.g. using `go build -tags …`) -This will use a Golang-only OpenPGP implementation for signature verification instead of the default cgo/gpgme-based implementation; +or use the build tags described below to avoid the dependencies (e.g. using `go build -tags …`) + +### Supported build tags + +- `containers_image_openpgp`: Use a Golang-only OpenPGP implementation for signature verification instead of the default cgo/gpgme-based implementation; the primary downside is that creating new signatures with the Golang-only implementation is not supported. +- `containers_image_ostree_stub`: Instead of importing `ostree:` transport in `github.com/containers/image/transports/alltransports`, use a stub which reports that the transport is not supported. This allows building the library without requiring the `libostree` development libraries. + + (Note that explicitly importing `github.com/containers/image/ostree` will still depend on the `libostree` library, this build tag only affects generic users of …`/alltransports`.) ## Contributing diff --git a/vendor/github.com/containers/image/transports/alltransports/alltransports.go b/vendor/github.com/containers/image/transports/alltransports/alltransports.go index dc70fad..dd80b7f 100644 --- a/vendor/github.com/containers/image/transports/alltransports/alltransports.go +++ b/vendor/github.com/containers/image/transports/alltransports/alltransports.go @@ -12,7 +12,7 @@ import ( _ "github.com/containers/image/docker/daemon" _ "github.com/containers/image/oci/layout" _ "github.com/containers/image/openshift" - _ "github.com/containers/image/ostree" + // The ostree transport is registered by ostree*.go _ "github.com/containers/image/storage" "github.com/containers/image/transports" "github.com/containers/image/types" diff --git a/vendor/github.com/containers/image/transports/alltransports/ostree.go b/vendor/github.com/containers/image/transports/alltransports/ostree.go new file mode 100644 index 0000000..0fc5d7e --- /dev/null +++ b/vendor/github.com/containers/image/transports/alltransports/ostree.go @@ -0,0 +1,8 @@ +// +build !containers_image_ostree_stub + +package alltransports + +import ( + // Register the ostree transport + _ "github.com/containers/image/ostree" +) diff --git a/vendor/github.com/containers/image/transports/alltransports/ostree_stub.go b/vendor/github.com/containers/image/transports/alltransports/ostree_stub.go new file mode 100644 index 0000000..8b01afe --- /dev/null +++ b/vendor/github.com/containers/image/transports/alltransports/ostree_stub.go @@ -0,0 +1,9 @@ +// +build containers_image_ostree_stub + +package alltransports + +import "github.com/containers/image/transports" + +func init() { + transports.Register(transports.NewStubTransport("ostree")) +} diff --git a/vendor/github.com/containers/image/transports/stub.go b/vendor/github.com/containers/image/transports/stub.go new file mode 100644 index 0000000..087f69b --- /dev/null +++ b/vendor/github.com/containers/image/transports/stub.go @@ -0,0 +1,36 @@ +package transports + +import ( + "fmt" + + "github.com/containers/image/types" +) + +// stubTransport is an implementation of types.ImageTransport which has a name, but rejects any references with “the transport $name: is not supported in this build”. +type stubTransport string + +// NewStubTransport returns an implementation of types.ImageTransport which has a name, but rejects any references with “the transport $name: is not supported in this build”. +func NewStubTransport(name string) types.ImageTransport { + return stubTransport(name) +} + +// Name returns the name of the transport, which must be unique among other transports. +func (s stubTransport) Name() string { + return string(s) +} + +// ParseReference converts a string, which should not start with the ImageTransport.Name prefix, into an ImageReference. +func (s stubTransport) ParseReference(reference string) (types.ImageReference, error) { + return nil, fmt.Errorf(`The transport "%s:" is not supported in this build`, string(s)) +} + +// ValidatePolicyConfigurationScope checks that scope is a valid name for a signature.PolicyTransportScopes keys +// (i.e. a valid PolicyConfigurationIdentity() or PolicyConfigurationNamespaces() return value). +// It is acceptable to allow an invalid value which will never be matched, it can "only" cause user confusion. +// scope passed to this function will not be "", that value is always allowed. +func (s stubTransport) ValidatePolicyConfigurationScope(scope string) error { + // Allowing any reference in here allows tools with some transports stubbed-out to still + // use signature verification policies which refer to these stubbed-out transports. + // See also the treatment of unknown transports in policyTransportScopesWithTransport.UnmarshalJSON . + return nil +} diff --git a/vendor/github.com/containers/image/transports/stub_test.go b/vendor/github.com/containers/image/transports/stub_test.go new file mode 100644 index 0000000..f181a1a --- /dev/null +++ b/vendor/github.com/containers/image/transports/stub_test.go @@ -0,0 +1,18 @@ +package transports + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestStubTransport(t *testing.T) { + const name = "whatever" + + s := NewStubTransport(name) + assert.Equal(t, name, s.Name()) + _, err := s.ParseReference("this is rejected regardless of content") + assert.Error(t, err) + err = s.ValidatePolicyConfigurationScope("this is accepted regardless of content") + assert.NoError(t, err) +} -- 2.13.0