Przeglądaj źródła

Remove dependencies on registry packages

Because docker core cannot vendor non-master Go dependencies, we need to remove
dependencies on registry package. The definition of digest.Digest has been
changed to a string and the regular expressions have been ported from
docker-registry/common library.

We'll likely change this be dependent on the registry in the future when the
API stabilizies and use of the master branch becomes the norm.

Signed-off-by: Stephen J Day <stephen.day@docker.com>
Stephen J Day 10 lat temu
rodzic
commit
dbb4b03bfc
4 zmienionych plików z 28 dodań i 15 usunięć
  1. 1 3
      registry/v2/errors_test.go
  2. 19 0
      registry/v2/regexp.go
  3. 6 9
      registry/v2/routes.go
  4. 2 3
      registry/v2/urls.go

+ 1 - 3
registry/v2/errors_test.go

@@ -4,8 +4,6 @@ import (
 	"encoding/json"
 	"reflect"
 	"testing"
-
-	"github.com/docker/docker-registry/digest"
 )
 
 // TestErrorCodes ensures that error code format, mappings and
@@ -61,7 +59,7 @@ func TestErrorsManagement(t *testing.T) {
 
 	errs.Push(ErrorCodeDigestInvalid)
 	errs.Push(ErrorCodeBlobUnknown,
-		map[string]digest.Digest{"digest": "sometestblobsumdoesntmatter"})
+		map[string]string{"digest": "sometestblobsumdoesntmatter"})
 
 	p, err := json.Marshal(errs)
 

+ 19 - 0
registry/v2/regexp.go

@@ -0,0 +1,19 @@
+package v2
+
+import "regexp"
+
+// This file defines regular expressions for use in route definition. These
+// are also defined in the registry code base. Until they are in a common,
+// shared location, and exported, they must be repeated here.
+
+// RepositoryNameComponentRegexp restricts registtry path components names to
+// start with at least two letters or numbers, with following parts able to
+// separated by one period, dash or underscore.
+var RepositoryNameComponentRegexp = regexp.MustCompile(`[a-z0-9]+(?:[._-][a-z0-9]+)*`)
+
+// RepositoryNameRegexp builds on RepositoryNameComponentRegexp to allow 2 to
+// 5 path components, separated by a forward slash.
+var RepositoryNameRegexp = regexp.MustCompile(`(?:` + RepositoryNameComponentRegexp.String() + `/){1,4}` + RepositoryNameComponentRegexp.String())
+
+// TagNameRegexp matches valid tag names. From docker/docker:graph/tags.go.
+var TagNameRegexp = regexp.MustCompile(`[\w][\w.-]{0,127}`)

+ 6 - 9
registry/v2/routes.go

@@ -1,9 +1,6 @@
 package v2
 
-import (
-	"github.com/docker/docker-registry/common"
-	"github.com/gorilla/mux"
-)
+import "github.com/gorilla/mux"
 
 // The following are definitions of the name under which all V2 routes are
 // registered. These symbols can be used to look up a route based on the name.
@@ -40,29 +37,29 @@ func Router() *mux.Router {
 	// PUT      /v2/<name>/manifest/<tag>	Image Manifest	Upload the image manifest identified by name and tag.
 	// DELETE   /v2/<name>/manifest/<tag>	Image Manifest	Delete the image identified by name and tag.
 	router.
-		Path("/v2/{name:" + common.RepositoryNameRegexp.String() + "}/manifests/{tag:" + common.TagNameRegexp.String() + "}").
+		Path("/v2/{name:" + RepositoryNameRegexp.String() + "}/manifests/{tag:" + TagNameRegexp.String() + "}").
 		Name(RouteNameManifest)
 
 	// GET	/v2/<name>/tags/list	Tags	Fetch the tags under the repository identified by name.
 	router.
-		Path("/v2/{name:" + common.RepositoryNameRegexp.String() + "}/tags/list").
+		Path("/v2/{name:" + RepositoryNameRegexp.String() + "}/tags/list").
 		Name(RouteNameTags)
 
 	// GET	/v2/<name>/blob/<digest>	Layer	Fetch the blob identified by digest.
 	router.
-		Path("/v2/{name:" + common.RepositoryNameRegexp.String() + "}/blobs/{digest:[a-zA-Z0-9-_+.]+:[a-zA-Z0-9-_+.=]+}").
+		Path("/v2/{name:" + RepositoryNameRegexp.String() + "}/blobs/{digest:[a-zA-Z0-9-_+.]+:[a-zA-Z0-9-_+.=]+}").
 		Name(RouteNameBlob)
 
 	// POST	/v2/<name>/blob/upload/	Layer Upload	Initiate an upload of the layer identified by tarsum.
 	router.
-		Path("/v2/{name:" + common.RepositoryNameRegexp.String() + "}/blobs/uploads/").
+		Path("/v2/{name:" + RepositoryNameRegexp.String() + "}/blobs/uploads/").
 		Name(RouteNameBlobUpload)
 
 	// GET	/v2/<name>/blob/upload/<uuid>	Layer Upload	Get the status of the upload identified by tarsum and uuid.
 	// PUT	/v2/<name>/blob/upload/<uuid>	Layer Upload	Upload all or a chunk of the upload identified by tarsum and uuid.
 	// DELETE	/v2/<name>/blob/upload/<uuid>	Layer Upload	Cancel the upload identified by layer and uuid
 	router.
-		Path("/v2/{name:" + common.RepositoryNameRegexp.String() + "}/blobs/uploads/{uuid}").
+		Path("/v2/{name:" + RepositoryNameRegexp.String() + "}/blobs/uploads/{uuid}").
 		Name(RouteNameBlobUploadChunk)
 
 	return router

+ 2 - 3
registry/v2/urls.go

@@ -4,7 +4,6 @@ import (
 	"net/http"
 	"net/url"
 
-	"github.com/docker/docker-registry/digest"
 	"github.com/gorilla/mux"
 )
 
@@ -88,10 +87,10 @@ func (ub *URLBuilder) BuildManifestURL(name, tag string) (string, error) {
 }
 
 // BuildBlobURL constructs the url for the blob identified by name and dgst.
-func (ub *URLBuilder) BuildBlobURL(name string, dgst digest.Digest) (string, error) {
+func (ub *URLBuilder) BuildBlobURL(name string, dgst string) (string, error) {
 	route := ub.cloneRoute(RouteNameBlob)
 
-	layerURL, err := route.URL("name", name, "digest", dgst.String())
+	layerURL, err := route.URL("name", name, "digest", dgst)
 	if err != nil {
 		return "", err
 	}