summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Rüger <mrueg@gentoo.org>2017-05-19 16:47:59 +0200
committerManuel Rüger <mrueg@gentoo.org>2017-05-19 16:47:59 +0200
commit21eba0700591adc9435adc2b75bbdddddbf98915 (patch)
tree026560185d75687dfc756d5550854b4e8d2f740e
parentapp-eselect/eselect-postgresql: Support FEATURES="noman" (diff)
downloadgentoo-21eba0700591adc9435adc2b75bbdddddbf98915.zip
gentoo-21eba0700591adc9435adc2b75bbdddddbf98915.tar.gz
gentoo-21eba0700591adc9435adc2b75bbdddddbf98915.tar.bz2
app-emulation/docker-registry: Include patch to fix json in notifications endpoint
Package-Manager: Portage-2.3.5, Repoman-2.3.2
-rw-r--r--app-emulation/docker-registry/docker-registry-2.6.1-r1.ebuild42
-rw-r--r--app-emulation/docker-registry/files/docker-registry-2.6.1-notifications-expvar.patch64
2 files changed, 106 insertions, 0 deletions
diff --git a/app-emulation/docker-registry/docker-registry-2.6.1-r1.ebuild b/app-emulation/docker-registry/docker-registry-2.6.1-r1.ebuild
new file mode 100644
index 00000000..45aac73
--- /dev/null
+++ b/app-emulation/docker-registry/docker-registry-2.6.1-r1.ebuild
@@ -0,0 +1,42 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+inherit golang-vcs-snapshot systemd user
+
+KEYWORDS="~amd64"
+EGO_PN="github.com/docker/distribution/..."
+EGIT_COMMIT="v${PV}"
+SRC_URI="https://${EGO_PN%/*}/archive/${EGIT_COMMIT}.tar.gz -> ${P}.tar.gz"
+DESCRIPTION="Docker Registry 2.0"
+HOMEPAGE="https://github.com/docker/distribution"
+LICENSE="Apache-2.0"
+SLOT="0"
+IUSE=""
+SVCNAME=registry
+
+PATCHES=( "${FILESDIR}/${P}-notifications-expvar.patch" )
+
+pkg_setup() {
+ enewgroup ${SVCNAME}
+ enewuser ${SVCNAME} -1 -1 /dev/null ${SVCNAME}
+}
+
+src_compile() {
+ GOPATH="${S}" \
+ go install -v -work -x ${EGO_BUILD_FLAGS} "${EGO_PN}" || die
+}
+
+src_install() {
+ exeinto /usr/libexec/${PN}
+ doexe bin/*
+ insinto /etc/docker/registry
+ newins src/${EGO_PN%/*}/cmd/registry/config-example.yml config.yml.example
+ newinitd "${FILESDIR}/${SVCNAME}.initd" "${SVCNAME}"
+ newconfd "${FILESDIR}/${SVCNAME}.confd" "${SVCNAME}"
+ systemd_dounit "${FILESDIR}/${SVCNAME}.service"
+ keepdir /var/{lib,log}/${SVCNAME}
+ fowners ${SVCNAME}:${SVCNAME} /var/{lib,log}/${SVCNAME}
+ insinto /etc/logrotate.d
+ newins "${FILESDIR}/${SVCNAME}.logrotated" "${SVCNAME}"
+}
diff --git a/app-emulation/docker-registry/files/docker-registry-2.6.1-notifications-expvar.patch b/app-emulation/docker-registry/files/docker-registry-2.6.1-notifications-expvar.patch
new file mode 100644
index 00000000..1d40edf
--- /dev/null
+++ b/app-emulation/docker-registry/files/docker-registry-2.6.1-notifications-expvar.patch
@@ -0,0 +1,64 @@
+From 9a58c91051e03b46f1461e371a7bf527c1284612 Mon Sep 17 00:00:00 2001
+From: Noah Treuhaft <noah.treuhaft@docker.com>
+Date: Wed, 8 Feb 2017 11:38:44 -0800
+Subject: [PATCH] notifications: fix expvar for Go 1.7
+
+Remove EndpointConfig.Transport from the return value of the
+registry.notifications.endpoints expvar.Func. It results in an empty
+value for that expvar variable under Go 1.7 because it is a non-nil
+*http.Transport, which Go 1.7 can no longer encode as JSON.
+
+Signed-off-by: Noah Treuhaft <noah.treuhaft@docker.com>
+---
+ notifications/endpoint.go | 2 +-
+ notifications/metrics_test.go | 28 ++++++++++++++++++++++++++++
+ 2 files changed, 29 insertions(+), 1 deletion(-)
+ create mode 100644 notifications/metrics_test.go
+
+diff --git a/src/github.com/docker/distribution/notifications/endpoint.go b/src/github.com/docker/distribution/notifications/endpoint.go
+index 29a9e27b5..44d0f6d7b 100644
+--- a/src/github.com/docker/distribution/notifications/endpoint.go
++++ b/src/github.com/docker/distribution/notifications/endpoint.go
+@@ -13,7 +13,7 @@ type EndpointConfig struct {
+ Threshold int
+ Backoff time.Duration
+ IgnoredMediaTypes []string
+- Transport *http.Transport
++ Transport *http.Transport `json:"-"`
+ }
+
+ // defaults set any zero-valued fields to a reasonable default.
+diff --git a/src/github.com/docker/distribution/notifications/metrics_test.go b/src/github.com/docker/distribution/notifications/metrics_test.go
+new file mode 100644
+index 000000000..03a08e2c8
+--- /dev/null
++++ b/notifications/metrics_test.go
+@@ -0,0 +1,28 @@
++package notifications
++
++import (
++ "encoding/json"
++ "expvar"
++ "testing"
++)
++
++func TestMetricsExpvar(t *testing.T) {
++ endpointsVar := expvar.Get("registry").(*expvar.Map).Get("notifications").(*expvar.Map).Get("endpoints")
++
++ var v interface{}
++ if err := json.Unmarshal([]byte(endpointsVar.String()), &v); err != nil {
++ t.Fatalf("unexpected error unmarshaling endpoints: %v", err)
++ }
++ if v != nil {
++ t.Fatalf("expected nil, got %#v", v)
++ }
++
++ NewEndpoint("x", "y", EndpointConfig{})
++
++ if err := json.Unmarshal([]byte(endpointsVar.String()), &v); err != nil {
++ t.Fatalf("unexpected error unmarshaling endpoints: %v", err)
++ }
++ if slice, ok := v.([]interface{}); !ok || len(slice) != 1 {
++ t.Logf("expected one-element []interface{}, got %#v", v)
++ }
++}