{"action":"created","comment":{"url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments/45537294","id":45537294,"diff_hunk":"@@ -0,0 +1,283 @@\n+/* Copyright 2015 The Kubernetes Authors All rights reserved.\n+\n+Licensed under the Apache License, Version 2.0 (the \"License\");\n+you may not use this file except in compliance with the License.\n+You may obtain a copy of the License at\n+\n+    http://www.apache.org/licenses/LICENSE-2.0\n+\n+Unless required by applicable law or agreed to in writing, software\n+distributed under the License is distributed on an \"AS IS\" BASIS,\n+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+See the License for the specific language governing permissions and\n+limitations under the License.\n+*/\n+\n+// Package generators has the generators for the set-gen utility.\n+package generators\n+\n+import (\n+\t\"io\"\n+\t\"os\"\n+\t\"path/filepath\"\n+\t\"strings\"\n+\n+\t\"k8s.io/kubernetes/cmd/libs/go2idl/args\"\n+\t\"k8s.io/kubernetes/cmd/libs/go2idl/generator\"\n+\t\"k8s.io/kubernetes/cmd/libs/go2idl/namer\"\n+\t\"k8s.io/kubernetes/cmd/libs/go2idl/types\"\n+\n+\t\"github.com/golang/glog\"\n+)\n+\n+// NameSystems returns the name system used by the generators in this package.\n+func NameSystems() namer.NameSystems {\n+\treturn namer.NameSystems{\n+\t\t\"public\":  namer.NewPublicNamer(0),\n+\t\t\"private\": namer.NewPrivateNamer(0),\n+\t\t\"raw\":     namer.NewRawNamer(\"\", nil),\n+\t}\n+}\n+\n+// DefaultNameSystem returns the default name system for ordering the types to be\n+// processed by the generators in this package.\n+func DefaultNameSystem() string {\n+\treturn \"public\"\n+}\n+\n+// Packages makes the sets package definition.\n+func Packages(context *generator.Context, arguments *args.GeneratorArgs) generator.Packages {\n+\tboilerplate, err := arguments.LoadGoBoilerplate()\n+\tif err != nil {\n+\t\tglog.Fatalf(\"Failed loading boilerplate: %v\", err)\n+\t}\n+\n+\t// @lavalamp: This is quite hacky. Any suggestions?\n+\ttopLevelTypes := map[*types.Type]struct{}{}\n+\tref := context.Universe.Get(types.Name{\"k8s.io/kubernetes/cmd/libs/go2idl/make-deployment/input\", \"ReferenceTypes\"})\n+\tfor _, m := range ref.Members {\n+\t\ttopLevelTypes[m.Type] = struct{}{}\n+\t}\n+\treturn generator.Packages{&generator.DefaultPackage{\n+\t\tPackageName: \"unversionedClient\",\n+\t\tPackagePath: arguments.OutputPackagePath,\n+\t\tHeaderText: append(boilerplate, []byte(\n+\t\t\t`\n+// This file was autogenerated by the command:\n+// $ `+strings.Join(os.Args, \" \")+`\n+// Do not edit it manually!\n+\n+`)...),\n+\t\tPackageDocumentation: []byte(\n+\t\t\t`// Package unversionedClient has the automatically generated clients for unversioned resources.\n+`),\n+\t\t// GeneratorFunc returns a list of generators. Each generator makes a\n+\t\t// single file.\n+\t\tGeneratorFunc: func(c *generator.Context) (generators []generator.Generator) {\n+\t\t\tgenerators = []generator.Generator{\n+\t\t\t\t// Always generate a \"doc.go\" file.\n+\t\t\t\tgenerator.DefaultGen{OptionalName: \"doc\"},\n+\t\t\t}\n+\t\t\t// Since we want a file per type that we generate a set for, we\n+\t\t\t// have to provide a function for this.\n+\t\t\tfor _, t := range c.Order {\n+\t\t\t\tgenerators = append(generators, &genClient{\n+\t\t\t\t\tDefaultGen: generator.DefaultGen{\n+\t\t\t\t\t\t// Use the privatized version of the\n+\t\t\t\t\t\t// type name as the file name.\n+\t\t\t\t\t\t//\n+\t\t\t\t\t\t// TODO: make a namer that converts\n+\t\t\t\t\t\t// camelCase to '-' separation for file\n+\t\t\t\t\t\t// names?\n+\t\t\t\t\t\tOptionalName: c.Namers[\"private\"].Name(t),\n+\t\t\t\t\t},\n+\t\t\t\t\toutputPackage: arguments.OutputPackagePath,\n+\t\t\t\t\ttypeToMatch:   t,\n+\t\t\t\t\timports:       generator.NewImportTracker(),\n+\t\t\t\t})\n+\t\t\t}\n+\t\t\treturn generators\n+\t\t},\n+\t\tFilterFunc: func(c *generator.Context, t *types.Type) bool {\n+\t\t\t_, found := topLevelTypes[t]\n+\t\t\treturn found\n+\t\t},\n+\t}}\n+}\n+\n+// genClient produces a file with a set for a single type.\n+type genClient struct {\n+\tgenerator.DefaultGen\n+\toutputPackage string\n+\ttypeToMatch   *types.Type\n+\timports       *generator.ImportTracker\n+}\n+\n+// Filter ignores all but one type because we're making a single file per type.\n+func (g *genClient) Filter(c *generator.Context, t *types.Type) bool { return t == g.typeToMatch }\n+\n+func (g *genClient) Namers(c *generator.Context) namer.NameSystems {\n+\treturn namer.NameSystems{\n+\t\t\"raw\": namer.NewRawNamer(g.outputPackage, g.imports),\n+\t}\n+}\n+\n+func (g *genClient) Imports(c *generator.Context) (imports []string) {\n+\treturn append(g.imports.ImportLines())\n+}\n+\n+// args constructs arguments for templates. Usage:\n+// g.args(t, \"key1\", value1, \"key2\", value2, ...)\n+//\n+// 't' is loaded with the key 'type'.\n+//\n+// We could use t directly as the argument, but doing it this way makes it easy\n+// to mix in additional parameters. This feature is not used in this set\n+// generator, but is present as an example.\n+func (g *genClient) args(t *types.Type, kv ...interface{}) interface{} {\n+\tm := map[interface{}]interface{}{\"type\": t}\n+\t// @lavalamp, shall I create a namer?\n+\tpkg := filepath.Base(t.Name.Package)\n+\tm[\"package\"] = pkg\n+\tm[\"Package\"] = namer.IC(pkg)\n+\t// @lavalamp: how about making a plural function in pkg/util, RESTMapper also needs such a function.\n+\t// m[\"plural\"] = util.Plural(type.Name.Name)\n+\tm[\"fieldSelector\"] = fieldSelector\n+\tm[\"labelSelector\"] = labelSelector\n+\tm[\"watchInterface\"] = watchInterface\n+\tm[\"apiDeleteOptions\"] = apiDeleteOptions\n+\tm[\"apiListOptions\"] = apiListOptions\n+\tfor i := 0; i < len(kv)/2; i++ {\n+\t\tm[kv[i*2]] = kv[i*2+1]\n+\t}\n+\treturn m\n+}\n+\n+// GenerateType makes the body of a file implementing a set for type t.\n+func (g *genClient) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {\n+\tsw := generator.NewSnippetWriter(w, c, \"$\", \"$\")\n+\tsw.Do(nameSpacerTemplate, g.args(t))","path":"cmd/libs/go2idl/make-client/generators/client-generator.go","position":159,"original_position":159,"commit_id":"da54370caaff6ae671b138d49593ca3e76181b48","original_commit_id":"da54370caaff6ae671b138d49593ca3e76181b48","user":{"login":"lavalamp","id":647318,"avatar_url":"https://avatars.githubusercontent.com/u/647318?v=3","gravatar_id":"","url":"https://api.github.com/users/lavalamp","html_url":"https://github.com/lavalamp","followers_url":"https://api.github.com/users/lavalamp/followers","following_url":"https://api.github.com/users/lavalamp/following{/other_user}","gists_url":"https://api.github.com/users/lavalamp/gists{/gist_id}","starred_url":"https://api.github.com/users/lavalamp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lavalamp/subscriptions","organizations_url":"https://api.github.com/users/lavalamp/orgs","repos_url":"https://api.github.com/users/lavalamp/repos","events_url":"https://api.github.com/users/lavalamp/events{/privacy}","received_events_url":"https://api.github.com/users/lavalamp/received_events","type":"User","site_admin":false},"body":"Functions are injected in the .Do method. There's no benefit to parsing\nearly since they won't break once you get them working, and they're not\nreused, and go2idl is not slow anyway.\n\nOn Fri, Nov 20, 2015 at 2:23 PM, krousey <notifications@github.com> wrote:\n\n> In cmd/libs/go2idl/make-client/generators/client-generator.go\n> <https://github.com/kubernetes/kubernetes/pull/17534#discussion_r45526693>\n> :\n>\n> > +\t// m[\"plural\"] = util.Plural(type.Name.Name)\n> > +\tm[\"fieldSelector\"] = fieldSelector\n> > +\tm[\"labelSelector\"] = labelSelector\n> > +\tm[\"watchInterface\"] = watchInterface\n> > +\tm[\"apiDeleteOptions\"] = apiDeleteOptions\n> > +\tm[\"apiListOptions\"] = apiListOptions\n> > +\tfor i := 0; i < len(kv)/2; i++ {\n> > +\t\tm[kv[i*2]] = kv[i*2+1]\n> > +\t}\n> > +\treturn m\n> > +}\n> > +\n> > +// GenerateType makes the body of a file implementing a set for type t.\n> > +func (g *genClient) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {\n> > +\tsw := generator.NewSnippetWriter(w, c, \"$\", \"$\")\n> > +\tsw.Do(nameSpacerTemplate, g.args(t))\n>\n> Why are we waiting until this point to try to parse the templates? I would\n> think it'd be better to use template.MustParse at the package level\n> definition so you wouldn't have to have a unit test hit these lines to know\n> you have template errors.\n>\n> —\n> Reply to this email directly or view it on GitHub\n> <https://github.com/kubernetes/kubernetes/pull/17534/files#r45526693>.\n>\n","created_at":"2015-11-21T00:58:49Z","updated_at":"2015-11-21T00:58:49Z","html_url":"https://github.com/kubernetes/kubernetes/pull/17534#discussion_r45537294","pull_request_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/17534","_links":{"self":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments/45537294"},"html":{"href":"https://github.com/kubernetes/kubernetes/pull/17534#discussion_r45537294"},"pull_request":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/17534"}}},"pull_request":{"url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/17534","id":51288625,"html_url":"https://github.com/kubernetes/kubernetes/pull/17534","diff_url":"https://github.com/kubernetes/kubernetes/pull/17534.diff","patch_url":"https://github.com/kubernetes/kubernetes/pull/17534.patch","issue_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/17534","number":17534,"state":"open","locked":false,"title":"[WIP] make client for extensions.deployment with go2idl","user":{"login":"caesarxuchao","id":2823529,"avatar_url":"https://avatars.githubusercontent.com/u/2823529?v=3","gravatar_id":"","url":"https://api.github.com/users/caesarxuchao","html_url":"https://github.com/caesarxuchao","followers_url":"https://api.github.com/users/caesarxuchao/followers","following_url":"https://api.github.com/users/caesarxuchao/following{/other_user}","gists_url":"https://api.github.com/users/caesarxuchao/gists{/gist_id}","starred_url":"https://api.github.com/users/caesarxuchao/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/caesarxuchao/subscriptions","organizations_url":"https://api.github.com/users/caesarxuchao/orgs","repos_url":"https://api.github.com/users/caesarxuchao/repos","events_url":"https://api.github.com/users/caesarxuchao/events{/privacy}","received_events_url":"https://api.github.com/users/caesarxuchao/received_events","type":"User","site_admin":false},"body":"I generated the client for extensions.Deployment. Later we can add more types into ReferenceTypes to generate clients for other resource.\r\nref #17468","created_at":"2015-11-19T22:09:08Z","updated_at":"2015-11-21T00:58:49Z","closed_at":null,"merged_at":null,"merge_commit_sha":"635d846eac79e87db7a2405f8ade254477563dd1","assignee":{"login":"krousey","id":157083,"avatar_url":"https://avatars.githubusercontent.com/u/157083?v=3","gravatar_id":"","url":"https://api.github.com/users/krousey","html_url":"https://github.com/krousey","followers_url":"https://api.github.com/users/krousey/followers","following_url":"https://api.github.com/users/krousey/following{/other_user}","gists_url":"https://api.github.com/users/krousey/gists{/gist_id}","starred_url":"https://api.github.com/users/krousey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/krousey/subscriptions","organizations_url":"https://api.github.com/users/krousey/orgs","repos_url":"https://api.github.com/users/krousey/repos","events_url":"https://api.github.com/users/krousey/events{/privacy}","received_events_url":"https://api.github.com/users/krousey/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/17534/commits","review_comments_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/17534/comments","review_comment_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments{/number}","comments_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/17534/comments","statuses_url":"https://api.github.com/repos/kubernetes/kubernetes/statuses/da54370caaff6ae671b138d49593ca3e76181b48","head":{"label":"caesarxuchao:make-client","ref":"make-client","sha":"da54370caaff6ae671b138d49593ca3e76181b48","user":{"login":"caesarxuchao","id":2823529,"avatar_url":"https://avatars.githubusercontent.com/u/2823529?v=3","gravatar_id":"","url":"https://api.github.com/users/caesarxuchao","html_url":"https://github.com/caesarxuchao","followers_url":"https://api.github.com/users/caesarxuchao/followers","following_url":"https://api.github.com/users/caesarxuchao/following{/other_user}","gists_url":"https://api.github.com/users/caesarxuchao/gists{/gist_id}","starred_url":"https://api.github.com/users/caesarxuchao/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/caesarxuchao/subscriptions","organizations_url":"https://api.github.com/users/caesarxuchao/orgs","repos_url":"https://api.github.com/users/caesarxuchao/repos","events_url":"https://api.github.com/users/caesarxuchao/events{/privacy}","received_events_url":"https://api.github.com/users/caesarxuchao/received_events","type":"User","site_admin":false},"repo":{"id":34024678,"name":"kubernetes","full_name":"caesarxuchao/kubernetes","owner":{"login":"caesarxuchao","id":2823529,"avatar_url":"https://avatars.githubusercontent.com/u/2823529?v=3","gravatar_id":"","url":"https://api.github.com/users/caesarxuchao","html_url":"https://github.com/caesarxuchao","followers_url":"https://api.github.com/users/caesarxuchao/followers","following_url":"https://api.github.com/users/caesarxuchao/following{/other_user}","gists_url":"https://api.github.com/users/caesarxuchao/gists{/gist_id}","starred_url":"https://api.github.com/users/caesarxuchao/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/caesarxuchao/subscriptions","organizations_url":"https://api.github.com/users/caesarxuchao/orgs","repos_url":"https://api.github.com/users/caesarxuchao/repos","events_url":"https://api.github.com/users/caesarxuchao/events{/privacy}","received_events_url":"https://api.github.com/users/caesarxuchao/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/caesarxuchao/kubernetes","description":"Container Cluster Manager from Google","fork":true,"url":"https://api.github.com/repos/caesarxuchao/kubernetes","forks_url":"https://api.github.com/repos/caesarxuchao/kubernetes/forks","keys_url":"https://api.github.com/repos/caesarxuchao/kubernetes/keys{/key_id}","collaborators_url":"https://api.github.com/repos/caesarxuchao/kubernetes/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/caesarxuchao/kubernetes/teams","hooks_url":"https://api.github.com/repos/caesarxuchao/kubernetes/hooks","issue_events_url":"https://api.github.com/repos/caesarxuchao/kubernetes/issues/events{/number}","events_url":"https://api.github.com/repos/caesarxuchao/kubernetes/events","assignees_url":"https://api.github.com/repos/caesarxuchao/kubernetes/assignees{/user}","branches_url":"https://api.github.com/repos/caesarxuchao/kubernetes/branches{/branch}","tags_url":"https://api.github.com/repos/caesarxuchao/kubernetes/tags","blobs_url":"https://api.github.com/repos/caesarxuchao/kubernetes/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/caesarxuchao/kubernetes/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/caesarxuchao/kubernetes/git/refs{/sha}","trees_url":"https://api.github.com/repos/caesarxuchao/kubernetes/git/trees{/sha}","statuses_url":"https://api.github.com/repos/caesarxuchao/kubernetes/statuses/{sha}","languages_url":"https://api.github.com/repos/caesarxuchao/kubernetes/languages","stargazers_url":"https://api.github.com/repos/caesarxuchao/kubernetes/stargazers","contributors_url":"https://api.github.com/repos/caesarxuchao/kubernetes/contributors","subscribers_url":"https://api.github.com/repos/caesarxuchao/kubernetes/subscribers","subscription_url":"https://api.github.com/repos/caesarxuchao/kubernetes/subscription","commits_url":"https://api.github.com/repos/caesarxuchao/kubernetes/commits{/sha}","git_commits_url":"https://api.github.com/repos/caesarxuchao/kubernetes/git/commits{/sha}","comments_url":"https://api.github.com/repos/caesarxuchao/kubernetes/comments{/number}","issue_comment_url":"https://api.github.com/repos/caesarxuchao/kubernetes/issues/comments{/number}","contents_url":"https://api.github.com/repos/caesarxuchao/kubernetes/contents/{+path}","compare_url":"https://api.github.com/repos/caesarxuchao/kubernetes/compare/{base}...{head}","merges_url":"https://api.github.com/repos/caesarxuchao/kubernetes/merges","archive_url":"https://api.github.com/repos/caesarxuchao/kubernetes/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/caesarxuchao/kubernetes/downloads","issues_url":"https://api.github.com/repos/caesarxuchao/kubernetes/issues{/number}","pulls_url":"https://api.github.com/repos/caesarxuchao/kubernetes/pulls{/number}","milestones_url":"https://api.github.com/repos/caesarxuchao/kubernetes/milestones{/number}","notifications_url":"https://api.github.com/repos/caesarxuchao/kubernetes/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/caesarxuchao/kubernetes/labels{/name}","releases_url":"https://api.github.com/repos/caesarxuchao/kubernetes/releases{/id}","created_at":"2015-04-15T23:57:43Z","updated_at":"2015-05-07T17:21:06Z","pushed_at":"2015-11-20T17:57:54Z","git_url":"git://github.com/caesarxuchao/kubernetes.git","ssh_url":"git@github.com:caesarxuchao/kubernetes.git","clone_url":"https://github.com/caesarxuchao/kubernetes.git","svn_url":"https://github.com/caesarxuchao/kubernetes","homepage":"http://kubernetes.io","size":138824,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"kubernetes:master","ref":"master","sha":"57c63ba8720d0b37c0c8ee0e4ed52c918b394163","user":{"login":"kubernetes","id":13629408,"avatar_url":"https://avatars.githubusercontent.com/u/13629408?v=3","gravatar_id":"","url":"https://api.github.com/users/kubernetes","html_url":"https://github.com/kubernetes","followers_url":"https://api.github.com/users/kubernetes/followers","following_url":"https://api.github.com/users/kubernetes/following{/other_user}","gists_url":"https://api.github.com/users/kubernetes/gists{/gist_id}","starred_url":"https://api.github.com/users/kubernetes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kubernetes/subscriptions","organizations_url":"https://api.github.com/users/kubernetes/orgs","repos_url":"https://api.github.com/users/kubernetes/repos","events_url":"https://api.github.com/users/kubernetes/events{/privacy}","received_events_url":"https://api.github.com/users/kubernetes/received_events","type":"Organization","site_admin":false},"repo":{"id":20580498,"name":"kubernetes","full_name":"kubernetes/kubernetes","owner":{"login":"kubernetes","id":13629408,"avatar_url":"https://avatars.githubusercontent.com/u/13629408?v=3","gravatar_id":"","url":"https://api.github.com/users/kubernetes","html_url":"https://github.com/kubernetes","followers_url":"https://api.github.com/users/kubernetes/followers","following_url":"https://api.github.com/users/kubernetes/following{/other_user}","gists_url":"https://api.github.com/users/kubernetes/gists{/gist_id}","starred_url":"https://api.github.com/users/kubernetes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kubernetes/subscriptions","organizations_url":"https://api.github.com/users/kubernetes/orgs","repos_url":"https://api.github.com/users/kubernetes/repos","events_url":"https://api.github.com/users/kubernetes/events{/privacy}","received_events_url":"https://api.github.com/users/kubernetes/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/kubernetes/kubernetes","description":"Container Cluster Manager from Google","fork":false,"url":"https://api.github.com/repos/kubernetes/kubernetes","forks_url":"https://api.github.com/repos/kubernetes/kubernetes/forks","keys_url":"https://api.github.com/repos/kubernetes/kubernetes/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kubernetes/kubernetes/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kubernetes/kubernetes/teams","hooks_url":"https://api.github.com/repos/kubernetes/kubernetes/hooks","issue_events_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/events{/number}","events_url":"https://api.github.com/repos/kubernetes/kubernetes/events","assignees_url":"https://api.github.com/repos/kubernetes/kubernetes/assignees{/user}","branches_url":"https://api.github.com/repos/kubernetes/kubernetes/branches{/branch}","tags_url":"https://api.github.com/repos/kubernetes/kubernetes/tags","blobs_url":"https://api.github.com/repos/kubernetes/kubernetes/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kubernetes/kubernetes/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kubernetes/kubernetes/git/refs{/sha}","trees_url":"https://api.github.com/repos/kubernetes/kubernetes/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kubernetes/kubernetes/statuses/{sha}","languages_url":"https://api.github.com/repos/kubernetes/kubernetes/languages","stargazers_url":"https://api.github.com/repos/kubernetes/kubernetes/stargazers","contributors_url":"https://api.github.com/repos/kubernetes/kubernetes/contributors","subscribers_url":"https://api.github.com/repos/kubernetes/kubernetes/subscribers","subscription_url":"https://api.github.com/repos/kubernetes/kubernetes/subscription","commits_url":"https://api.github.com/repos/kubernetes/kubernetes/commits{/sha}","git_commits_url":"https://api.github.com/repos/kubernetes/kubernetes/git/commits{/sha}","comments_url":"https://api.github.com/repos/kubernetes/kubernetes/comments{/number}","issue_comment_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/comments{/number}","contents_url":"https://api.github.com/repos/kubernetes/kubernetes/contents/{+path}","compare_url":"https://api.github.com/repos/kubernetes/kubernetes/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kubernetes/kubernetes/merges","archive_url":"https://api.github.com/repos/kubernetes/kubernetes/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kubernetes/kubernetes/downloads","issues_url":"https://api.github.com/repos/kubernetes/kubernetes/issues{/number}","pulls_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls{/number}","milestones_url":"https://api.github.com/repos/kubernetes/kubernetes/milestones{/number}","notifications_url":"https://api.github.com/repos/kubernetes/kubernetes/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kubernetes/kubernetes/labels{/name}","releases_url":"https://api.github.com/repos/kubernetes/kubernetes/releases{/id}","created_at":"2014-06-06T22:56:04Z","updated_at":"2015-11-20T22:53:37Z","pushed_at":"2015-11-21T00:55:10Z","git_url":"git://github.com/kubernetes/kubernetes.git","ssh_url":"git@github.com:kubernetes/kubernetes.git","clone_url":"https://github.com/kubernetes/kubernetes.git","svn_url":"https://github.com/kubernetes/kubernetes","homepage":"http://kubernetes.io","size":289091,"stargazers_count":11363,"watchers_count":11363,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":3014,"mirror_url":null,"open_issues_count":2402,"forks":3014,"open_issues":2402,"watchers":11363,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/17534"},"html":{"href":"https://github.com/kubernetes/kubernetes/pull/17534"},"issue":{"href":"https://api.github.com/repos/kubernetes/kubernetes/issues/17534"},"comments":{"href":"https://api.github.com/repos/kubernetes/kubernetes/issues/17534/comments"},"review_comments":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/17534/comments"},"review_comment":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/17534/commits"},"statuses":{"href":"https://api.github.com/repos/kubernetes/kubernetes/statuses/da54370caaff6ae671b138d49593ca3e76181b48"}}}}