Remove old gengo detritus
This commit is contained in:
		
							
								
								
									
										206
									
								
								LICENSES/vendor/k8s.io/gengo/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										206
									
								
								LICENSES/vendor/k8s.io/gengo/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,206 +0,0 @@ | |||||||
| = vendor/k8s.io/gengo licensed under: = |  | ||||||
|  |  | ||||||
|  |  | ||||||
|                                  Apache License |  | ||||||
|                            Version 2.0, January 2004 |  | ||||||
|                         http://www.apache.org/licenses/ |  | ||||||
|  |  | ||||||
|    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION |  | ||||||
|  |  | ||||||
|    1. Definitions. |  | ||||||
|  |  | ||||||
|       "License" shall mean the terms and conditions for use, reproduction, |  | ||||||
|       and distribution as defined by Sections 1 through 9 of this document. |  | ||||||
|  |  | ||||||
|       "Licensor" shall mean the copyright owner or entity authorized by |  | ||||||
|       the copyright owner that is granting the License. |  | ||||||
|  |  | ||||||
|       "Legal Entity" shall mean the union of the acting entity and all |  | ||||||
|       other entities that control, are controlled by, or are under common |  | ||||||
|       control with that entity. For the purposes of this definition, |  | ||||||
|       "control" means (i) the power, direct or indirect, to cause the |  | ||||||
|       direction or management of such entity, whether by contract or |  | ||||||
|       otherwise, or (ii) ownership of fifty percent (50%) or more of the |  | ||||||
|       outstanding shares, or (iii) beneficial ownership of such entity. |  | ||||||
|  |  | ||||||
|       "You" (or "Your") shall mean an individual or Legal Entity |  | ||||||
|       exercising permissions granted by this License. |  | ||||||
|  |  | ||||||
|       "Source" form shall mean the preferred form for making modifications, |  | ||||||
|       including but not limited to software source code, documentation |  | ||||||
|       source, and configuration files. |  | ||||||
|  |  | ||||||
|       "Object" form shall mean any form resulting from mechanical |  | ||||||
|       transformation or translation of a Source form, including but |  | ||||||
|       not limited to compiled object code, generated documentation, |  | ||||||
|       and conversions to other media types. |  | ||||||
|  |  | ||||||
|       "Work" shall mean the work of authorship, whether in Source or |  | ||||||
|       Object form, made available under the License, as indicated by a |  | ||||||
|       copyright notice that is included in or attached to the work |  | ||||||
|       (an example is provided in the Appendix below). |  | ||||||
|  |  | ||||||
|       "Derivative Works" shall mean any work, whether in Source or Object |  | ||||||
|       form, that is based on (or derived from) the Work and for which the |  | ||||||
|       editorial revisions, annotations, elaborations, or other modifications |  | ||||||
|       represent, as a whole, an original work of authorship. For the purposes |  | ||||||
|       of this License, Derivative Works shall not include works that remain |  | ||||||
|       separable from, or merely link (or bind by name) to the interfaces of, |  | ||||||
|       the Work and Derivative Works thereof. |  | ||||||
|  |  | ||||||
|       "Contribution" shall mean any work of authorship, including |  | ||||||
|       the original version of the Work and any modifications or additions |  | ||||||
|       to that Work or Derivative Works thereof, that is intentionally |  | ||||||
|       submitted to Licensor for inclusion in the Work by the copyright owner |  | ||||||
|       or by an individual or Legal Entity authorized to submit on behalf of |  | ||||||
|       the copyright owner. For the purposes of this definition, "submitted" |  | ||||||
|       means any form of electronic, verbal, or written communication sent |  | ||||||
|       to the Licensor or its representatives, including but not limited to |  | ||||||
|       communication on electronic mailing lists, source code control systems, |  | ||||||
|       and issue tracking systems that are managed by, or on behalf of, the |  | ||||||
|       Licensor for the purpose of discussing and improving the Work, but |  | ||||||
|       excluding communication that is conspicuously marked or otherwise |  | ||||||
|       designated in writing by the copyright owner as "Not a Contribution." |  | ||||||
|  |  | ||||||
|       "Contributor" shall mean Licensor and any individual or Legal Entity |  | ||||||
|       on behalf of whom a Contribution has been received by Licensor and |  | ||||||
|       subsequently incorporated within the Work. |  | ||||||
|  |  | ||||||
|    2. Grant of Copyright License. Subject to the terms and conditions of |  | ||||||
|       this License, each Contributor hereby grants to You a perpetual, |  | ||||||
|       worldwide, non-exclusive, no-charge, royalty-free, irrevocable |  | ||||||
|       copyright license to reproduce, prepare Derivative Works of, |  | ||||||
|       publicly display, publicly perform, sublicense, and distribute the |  | ||||||
|       Work and such Derivative Works in Source or Object form. |  | ||||||
|  |  | ||||||
|    3. Grant of Patent License. Subject to the terms and conditions of |  | ||||||
|       this License, each Contributor hereby grants to You a perpetual, |  | ||||||
|       worldwide, non-exclusive, no-charge, royalty-free, irrevocable |  | ||||||
|       (except as stated in this section) patent license to make, have made, |  | ||||||
|       use, offer to sell, sell, import, and otherwise transfer the Work, |  | ||||||
|       where such license applies only to those patent claims licensable |  | ||||||
|       by such Contributor that are necessarily infringed by their |  | ||||||
|       Contribution(s) alone or by combination of their Contribution(s) |  | ||||||
|       with the Work to which such Contribution(s) was submitted. If You |  | ||||||
|       institute patent litigation against any entity (including a |  | ||||||
|       cross-claim or counterclaim in a lawsuit) alleging that the Work |  | ||||||
|       or a Contribution incorporated within the Work constitutes direct |  | ||||||
|       or contributory patent infringement, then any patent licenses |  | ||||||
|       granted to You under this License for that Work shall terminate |  | ||||||
|       as of the date such litigation is filed. |  | ||||||
|  |  | ||||||
|    4. Redistribution. You may reproduce and distribute copies of the |  | ||||||
|       Work or Derivative Works thereof in any medium, with or without |  | ||||||
|       modifications, and in Source or Object form, provided that You |  | ||||||
|       meet the following conditions: |  | ||||||
|  |  | ||||||
|       (a) You must give any other recipients of the Work or |  | ||||||
|           Derivative Works a copy of this License; and |  | ||||||
|  |  | ||||||
|       (b) You must cause any modified files to carry prominent notices |  | ||||||
|           stating that You changed the files; and |  | ||||||
|  |  | ||||||
|       (c) You must retain, in the Source form of any Derivative Works |  | ||||||
|           that You distribute, all copyright, patent, trademark, and |  | ||||||
|           attribution notices from the Source form of the Work, |  | ||||||
|           excluding those notices that do not pertain to any part of |  | ||||||
|           the Derivative Works; and |  | ||||||
|  |  | ||||||
|       (d) If the Work includes a "NOTICE" text file as part of its |  | ||||||
|           distribution, then any Derivative Works that You distribute must |  | ||||||
|           include a readable copy of the attribution notices contained |  | ||||||
|           within such NOTICE file, excluding those notices that do not |  | ||||||
|           pertain to any part of the Derivative Works, in at least one |  | ||||||
|           of the following places: within a NOTICE text file distributed |  | ||||||
|           as part of the Derivative Works; within the Source form or |  | ||||||
|           documentation, if provided along with the Derivative Works; or, |  | ||||||
|           within a display generated by the Derivative Works, if and |  | ||||||
|           wherever such third-party notices normally appear. The contents |  | ||||||
|           of the NOTICE file are for informational purposes only and |  | ||||||
|           do not modify the License. You may add Your own attribution |  | ||||||
|           notices within Derivative Works that You distribute, alongside |  | ||||||
|           or as an addendum to the NOTICE text from the Work, provided |  | ||||||
|           that such additional attribution notices cannot be construed |  | ||||||
|           as modifying the License. |  | ||||||
|  |  | ||||||
|       You may add Your own copyright statement to Your modifications and |  | ||||||
|       may provide additional or different license terms and conditions |  | ||||||
|       for use, reproduction, or distribution of Your modifications, or |  | ||||||
|       for any such Derivative Works as a whole, provided Your use, |  | ||||||
|       reproduction, and distribution of the Work otherwise complies with |  | ||||||
|       the conditions stated in this License. |  | ||||||
|  |  | ||||||
|    5. Submission of Contributions. Unless You explicitly state otherwise, |  | ||||||
|       any Contribution intentionally submitted for inclusion in the Work |  | ||||||
|       by You to the Licensor shall be under the terms and conditions of |  | ||||||
|       this License, without any additional terms or conditions. |  | ||||||
|       Notwithstanding the above, nothing herein shall supersede or modify |  | ||||||
|       the terms of any separate license agreement you may have executed |  | ||||||
|       with Licensor regarding such Contributions. |  | ||||||
|  |  | ||||||
|    6. Trademarks. This License does not grant permission to use the trade |  | ||||||
|       names, trademarks, service marks, or product names of the Licensor, |  | ||||||
|       except as required for reasonable and customary use in describing the |  | ||||||
|       origin of the Work and reproducing the content of the NOTICE file. |  | ||||||
|  |  | ||||||
|    7. Disclaimer of Warranty. Unless required by applicable law or |  | ||||||
|       agreed to in writing, Licensor provides the Work (and each |  | ||||||
|       Contributor provides its Contributions) on an "AS IS" BASIS, |  | ||||||
|       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |  | ||||||
|       implied, including, without limitation, any warranties or conditions |  | ||||||
|       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A |  | ||||||
|       PARTICULAR PURPOSE. You are solely responsible for determining the |  | ||||||
|       appropriateness of using or redistributing the Work and assume any |  | ||||||
|       risks associated with Your exercise of permissions under this License. |  | ||||||
|  |  | ||||||
|    8. Limitation of Liability. In no event and under no legal theory, |  | ||||||
|       whether in tort (including negligence), contract, or otherwise, |  | ||||||
|       unless required by applicable law (such as deliberate and grossly |  | ||||||
|       negligent acts) or agreed to in writing, shall any Contributor be |  | ||||||
|       liable to You for damages, including any direct, indirect, special, |  | ||||||
|       incidental, or consequential damages of any character arising as a |  | ||||||
|       result of this License or out of the use or inability to use the |  | ||||||
|       Work (including but not limited to damages for loss of goodwill, |  | ||||||
|       work stoppage, computer failure or malfunction, or any and all |  | ||||||
|       other commercial damages or losses), even if such Contributor |  | ||||||
|       has been advised of the possibility of such damages. |  | ||||||
|  |  | ||||||
|    9. Accepting Warranty or Additional Liability. While redistributing |  | ||||||
|       the Work or Derivative Works thereof, You may choose to offer, |  | ||||||
|       and charge a fee for, acceptance of support, warranty, indemnity, |  | ||||||
|       or other liability obligations and/or rights consistent with this |  | ||||||
|       License. However, in accepting such obligations, You may act only |  | ||||||
|       on Your own behalf and on Your sole responsibility, not on behalf |  | ||||||
|       of any other Contributor, and only if You agree to indemnify, |  | ||||||
|       defend, and hold each Contributor harmless for any liability |  | ||||||
|       incurred by, or claims asserted against, such Contributor by reason |  | ||||||
|       of your accepting any such warranty or additional liability. |  | ||||||
|  |  | ||||||
|    END OF TERMS AND CONDITIONS |  | ||||||
|  |  | ||||||
|    APPENDIX: How to apply the Apache License to your work. |  | ||||||
|  |  | ||||||
|       To apply the Apache License to your work, attach the following |  | ||||||
|       boilerplate notice, with the fields enclosed by brackets "[]" |  | ||||||
|       replaced with your own identifying information. (Don't include |  | ||||||
|       the brackets!)  The text should be enclosed in the appropriate |  | ||||||
|       comment syntax for the file format. We also recommend that a |  | ||||||
|       file or class name and description of purpose be included on the |  | ||||||
|       same "printed page" as the copyright notice for easier |  | ||||||
|       identification within third-party archives. |  | ||||||
|  |  | ||||||
|    Copyright 2014 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
|    Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
|    you may not use this file except in compliance with the License. |  | ||||||
|    You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
|    Unless required by applicable law or agreed to in writing, software |  | ||||||
|    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
|    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
|    See the License for the specific language governing permissions and |  | ||||||
|    limitations under the License. |  | ||||||
|  |  | ||||||
| = vendor/k8s.io/gengo/LICENSE ad09685d909e7a9f763d2bb62d4bd6fb |  | ||||||
							
								
								
									
										2
									
								
								LICENSES/vendor/k8s.io/gengo/v2/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								LICENSES/vendor/k8s.io/gengo/v2/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -203,4 +203,4 @@ | |||||||
|    See the License for the specific language governing permissions and |    See the License for the specific language governing permissions and | ||||||
|    limitations under the License. |    limitations under the License. | ||||||
|  |  | ||||||
| = vendor/k8s.io/gengo/LICENSE ad09685d909e7a9f763d2bb62d4bd6fb | = vendor/k8s.io/gengo/v2/LICENSE ad09685d909e7a9f763d2bb62d4bd6fb | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								go.mod
									
									
									
									
									
								
							| @@ -104,7 +104,6 @@ require ( | |||||||
| 	k8s.io/csi-translation-lib v0.0.0 | 	k8s.io/csi-translation-lib v0.0.0 | ||||||
| 	k8s.io/dynamic-resource-allocation v0.0.0 | 	k8s.io/dynamic-resource-allocation v0.0.0 | ||||||
| 	k8s.io/endpointslice v0.0.0 | 	k8s.io/endpointslice v0.0.0 | ||||||
| 	k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 |  | ||||||
| 	k8s.io/klog/v2 v2.120.1 | 	k8s.io/klog/v2 v2.120.1 | ||||||
| 	k8s.io/kms v0.0.0 | 	k8s.io/kms v0.0.0 | ||||||
| 	k8s.io/kube-aggregator v0.0.0 | 	k8s.io/kube-aggregator v0.0.0 | ||||||
|   | |||||||
							
								
								
									
										9
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								go.sum
									
									
									
									
									
								
							| @@ -352,7 +352,6 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 | |||||||
| github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= | github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= | ||||||
| github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= | github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= | ||||||
| github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= | github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= | ||||||
| github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= |  | ||||||
| github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | ||||||
| github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= | github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= | ||||||
| github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | ||||||
| @@ -450,7 +449,6 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN | |||||||
| github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | ||||||
| github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||||
| github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||||||
| github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= |  | ||||||
| github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= | github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= | ||||||
| github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||||||
| github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= | github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= | ||||||
| @@ -558,7 +556,6 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o | |||||||
| github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | ||||||
| github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= | github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= | ||||||
| github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= | ||||||
| github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= |  | ||||||
| github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | ||||||
| github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= | github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= | ||||||
| github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= | github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= | ||||||
| @@ -1064,7 +1061,6 @@ golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjs | |||||||
| golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= | golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= | ||||||
| golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= | golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= | ||||||
| golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||||
| golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= |  | ||||||
| golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||||
| golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||||
| golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||||
| @@ -1243,7 +1239,6 @@ google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw | |||||||
| gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= | gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= | ||||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||||
| gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||||
| gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= |  | ||||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | ||||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | ||||||
| gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= | gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= | ||||||
| @@ -1278,12 +1273,9 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh | |||||||
| honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= | honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= | ||||||
| honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= | honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= | ||||||
| honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= | honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= | ||||||
| k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 h1:pWEwq4Asjm4vjW7vcsmijwBhOr1/shsbSYiWXmNGlks= |  | ||||||
| k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= |  | ||||||
| k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo= | k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo= | ||||||
| k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= | k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= | ||||||
| k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= | k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= | ||||||
| k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= |  | ||||||
| k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= | k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= | ||||||
| k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= | k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= | ||||||
| k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= | k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= | ||||||
| @@ -1310,6 +1302,5 @@ sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 h1:W6cLQc5pnqM | |||||||
| sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3/go.mod h1:JWP1Fj0VWGHyw3YUPjXSQnRnrwezrZSrApfX5S0nIag= | sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3/go.mod h1:JWP1Fj0VWGHyw3YUPjXSQnRnrwezrZSrApfX5S0nIag= | ||||||
| sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= | sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= | ||||||
| sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= | sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= | ||||||
| sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= |  | ||||||
| sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= | sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= | ||||||
| sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= | sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= | ||||||
|   | |||||||
| @@ -36,7 +36,4 @@ require ( | |||||||
| 	sigs.k8s.io/yaml v1.3.0 // indirect | 	sigs.k8s.io/yaml v1.3.0 // indirect | ||||||
| ) | ) | ||||||
|  |  | ||||||
| replace ( | replace k8s.io/apimachinery => ../apimachinery | ||||||
| 	k8s.io/api => ../api |  | ||||||
| 	k8s.io/apimachinery => ../apimachinery |  | ||||||
| ) |  | ||||||
|   | |||||||
| @@ -121,7 +121,6 @@ require ( | |||||||
| 	gopkg.in/inf.v0 v0.9.1 // indirect | 	gopkg.in/inf.v0 v0.9.1 // indirect | ||||||
| 	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect | 	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect | ||||||
| 	gopkg.in/yaml.v3 v3.0.1 // indirect | 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||||
| 	k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 // indirect |  | ||||||
| 	k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 // indirect | 	k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 // indirect | ||||||
| 	k8s.io/kms v0.0.0 // indirect | 	k8s.io/kms v0.0.0 // indirect | ||||||
| 	sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0 // indirect | 	sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0 // indirect | ||||||
| @@ -129,7 +128,6 @@ require ( | |||||||
|  |  | ||||||
| replace ( | replace ( | ||||||
| 	k8s.io/api => ../api | 	k8s.io/api => ../api | ||||||
| 	k8s.io/apiextensions-apiserver => ../apiextensions-apiserver |  | ||||||
| 	k8s.io/apimachinery => ../apimachinery | 	k8s.io/apimachinery => ../apimachinery | ||||||
| 	k8s.io/apiserver => ../apiserver | 	k8s.io/apiserver => ../apiserver | ||||||
| 	k8s.io/client-go => ../client-go | 	k8s.io/client-go => ../client-go | ||||||
|   | |||||||
| @@ -184,7 +184,6 @@ github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 | |||||||
| github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= | github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= | ||||||
| github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= | github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= | ||||||
| github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= | github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= | ||||||
| github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= |  | ||||||
| github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | ||||||
| github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= | github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= | ||||||
| github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | ||||||
| @@ -232,7 +231,6 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN | |||||||
| github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | ||||||
| github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||||
| github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||||||
| github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= |  | ||||||
| github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= | github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= | ||||||
| github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||||||
| github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= | github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= | ||||||
| @@ -268,7 +266,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI | |||||||
| github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | ||||||
| github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | ||||||
| github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= | github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= | ||||||
| github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= |  | ||||||
| github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | ||||||
| github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= | github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= | ||||||
| github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= | github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= | ||||||
| @@ -471,7 +468,6 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 | |||||||
| golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | ||||||
| golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= | golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= | ||||||
| golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||||
| golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= |  | ||||||
| golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||||
| golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||||
| golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= | golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= | ||||||
| @@ -508,7 +504,6 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ | |||||||
| google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= | google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= | ||||||
| google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | ||||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||||
| gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= |  | ||||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | ||||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | ||||||
| gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= | gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= | ||||||
| @@ -526,8 +521,6 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | |||||||
| gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||||
| honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | ||||||
| honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | ||||||
| k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 h1:pWEwq4Asjm4vjW7vcsmijwBhOr1/shsbSYiWXmNGlks= |  | ||||||
| k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= |  | ||||||
| k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo= | k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo= | ||||||
| k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= | k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= | ||||||
| k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= | k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= | ||||||
| @@ -542,6 +535,5 @@ sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMm | |||||||
| sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= | sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= | ||||||
| sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= | sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= | ||||||
| sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= | sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= | ||||||
| sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= |  | ||||||
| sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= | sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= | ||||||
| sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= | sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= | ||||||
|   | |||||||
| @@ -56,5 +56,3 @@ require ( | |||||||
| 	gopkg.in/yaml.v2 v2.4.0 // indirect | 	gopkg.in/yaml.v2 v2.4.0 // indirect | ||||||
| 	gopkg.in/yaml.v3 v3.0.1 // indirect | 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||||
| ) | ) | ||||||
|  |  | ||||||
| replace k8s.io/apimachinery => ../apimachinery |  | ||||||
|   | |||||||
| @@ -127,7 +127,6 @@ require ( | |||||||
| replace ( | replace ( | ||||||
| 	k8s.io/api => ../api | 	k8s.io/api => ../api | ||||||
| 	k8s.io/apimachinery => ../apimachinery | 	k8s.io/apimachinery => ../apimachinery | ||||||
| 	k8s.io/apiserver => ../apiserver |  | ||||||
| 	k8s.io/client-go => ../client-go | 	k8s.io/client-go => ../client-go | ||||||
| 	k8s.io/component-base => ../component-base | 	k8s.io/component-base => ../component-base | ||||||
| 	k8s.io/kms => ../kms | 	k8s.io/kms => ../kms | ||||||
|   | |||||||
| @@ -73,6 +73,5 @@ require ( | |||||||
| replace ( | replace ( | ||||||
| 	k8s.io/api => ../api | 	k8s.io/api => ../api | ||||||
| 	k8s.io/apimachinery => ../apimachinery | 	k8s.io/apimachinery => ../apimachinery | ||||||
| 	k8s.io/cli-runtime => ../cli-runtime |  | ||||||
| 	k8s.io/client-go => ../client-go | 	k8s.io/client-go => ../client-go | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -63,5 +63,4 @@ require ( | |||||||
| replace ( | replace ( | ||||||
| 	k8s.io/api => ../api | 	k8s.io/api => ../api | ||||||
| 	k8s.io/apimachinery => ../apimachinery | 	k8s.io/apimachinery => ../apimachinery | ||||||
| 	k8s.io/client-go => ../client-go |  | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -114,7 +114,6 @@ replace ( | |||||||
| 	k8s.io/apimachinery => ../apimachinery | 	k8s.io/apimachinery => ../apimachinery | ||||||
| 	k8s.io/apiserver => ../apiserver | 	k8s.io/apiserver => ../apiserver | ||||||
| 	k8s.io/client-go => ../client-go | 	k8s.io/client-go => ../client-go | ||||||
| 	k8s.io/cloud-provider => ../cloud-provider |  | ||||||
| 	k8s.io/component-base => ../component-base | 	k8s.io/component-base => ../component-base | ||||||
| 	k8s.io/component-helpers => ../component-helpers | 	k8s.io/component-helpers => ../component-helpers | ||||||
| 	k8s.io/controller-manager => ../controller-manager | 	k8s.io/controller-manager => ../controller-manager | ||||||
|   | |||||||
| @@ -35,5 +35,4 @@ require ( | |||||||
| replace ( | replace ( | ||||||
| 	k8s.io/api => ../api | 	k8s.io/api => ../api | ||||||
| 	k8s.io/apimachinery => ../apimachinery | 	k8s.io/apimachinery => ../apimachinery | ||||||
| 	k8s.io/cluster-bootstrap => ../cluster-bootstrap |  | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -5,11 +5,13 @@ module k8s.io/code-generator | |||||||
| go 1.22.0 | go 1.22.0 | ||||||
|  |  | ||||||
| require ( | require ( | ||||||
|  | 	github.com/davecgh/go-spew v1.1.1 | ||||||
| 	github.com/gogo/protobuf v1.3.2 | 	github.com/gogo/protobuf v1.3.2 | ||||||
| 	github.com/google/gnostic-models v0.6.8 | 	github.com/google/gnostic-models v0.6.8 | ||||||
|  | 	github.com/google/go-cmp v0.6.0 | ||||||
|  | 	github.com/google/gofuzz v1.2.0 | ||||||
| 	github.com/spf13/pflag v1.0.5 | 	github.com/spf13/pflag v1.0.5 | ||||||
| 	gopkg.in/yaml.v2 v2.4.0 | 	gopkg.in/yaml.v2 v2.4.0 | ||||||
| 	k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 |  | ||||||
| 	k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 | 	k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 | ||||||
| 	k8s.io/klog/v2 v2.120.1 | 	k8s.io/klog/v2 v2.120.1 | ||||||
| 	k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 | 	k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 | ||||||
| @@ -22,9 +24,6 @@ require ( | |||||||
| 	github.com/go-openapi/jsonreference v0.20.2 // indirect | 	github.com/go-openapi/jsonreference v0.20.2 // indirect | ||||||
| 	github.com/go-openapi/swag v0.22.3 // indirect | 	github.com/go-openapi/swag v0.22.3 // indirect | ||||||
| 	github.com/golang/protobuf v1.5.3 // indirect | 	github.com/golang/protobuf v1.5.3 // indirect | ||||||
| 	github.com/google/go-cmp v0.6.0 // indirect |  | ||||||
| 	github.com/google/gofuzz v1.2.0 // indirect |  | ||||||
| 	github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect |  | ||||||
| 	github.com/josharian/intern v1.0.0 // indirect | 	github.com/josharian/intern v1.0.0 // indirect | ||||||
| 	github.com/json-iterator/go v1.1.12 // indirect | 	github.com/json-iterator/go v1.1.12 // indirect | ||||||
| 	github.com/kr/pretty v0.3.1 // indirect | 	github.com/kr/pretty v0.3.1 // indirect | ||||||
|   | |||||||
							
								
								
									
										53
									
								
								staging/src/k8s.io/code-generator/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										53
									
								
								staging/src/k8s.io/code-generator/go.sum
									
									
									
										generated
									
									
									
								
							| @@ -9,7 +9,6 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c | |||||||
| github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||||
| github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= | github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= | ||||||
| github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= | github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= | ||||||
| github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= |  | ||||||
| github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= | github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= | ||||||
| github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | ||||||
| github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= | github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= | ||||||
| @@ -27,13 +26,11 @@ github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg | |||||||
| github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= | github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= | ||||||
| github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= | github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= | ||||||
| github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= | github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= | ||||||
| github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= |  | ||||||
| github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||||
| github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||||
| github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | ||||||
| github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||||
| github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||||||
| github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= |  | ||||||
| github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= | github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= | ||||||
| github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||||||
| github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= | github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= | ||||||
| @@ -46,7 +43,6 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr | |||||||
| github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= | github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= | ||||||
| github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= | github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= | ||||||
| github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | ||||||
| github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= |  | ||||||
| github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | ||||||
| github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= | github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= | ||||||
| github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= | github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= | ||||||
| @@ -89,12 +85,6 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t | |||||||
| golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | ||||||
| golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||||||
| golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||||||
| <<<<<<< HEAD |  | ||||||
| ||||||| parent of 58d43dc74bf (Re-vendor latest kube-openapi and gengo/v2) |  | ||||||
| golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= |  | ||||||
| ======= |  | ||||||
| golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= |  | ||||||
| >>>>>>> 58d43dc74bf (Re-vendor latest kube-openapi and gengo/v2) |  | ||||||
| golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||||
| golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||||
| golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= | golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= | ||||||
| @@ -103,20 +93,6 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn | |||||||
| golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||||
| golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||||
| golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | ||||||
| <<<<<<< HEAD |  | ||||||
| golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= |  | ||||||
| golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= |  | ||||||
| ||||||| parent of 58d43dc74bf (Re-vendor latest kube-openapi and gengo/v2) |  | ||||||
| golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= |  | ||||||
| golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= |  | ||||||
| golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8= |  | ||||||
| golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= |  | ||||||
| ======= |  | ||||||
| golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= |  | ||||||
| golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= |  | ||||||
| golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8= |  | ||||||
| golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= |  | ||||||
| >>>>>>> 58d43dc74bf (Re-vendor latest kube-openapi and gengo/v2) |  | ||||||
| golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
| golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
| golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
| @@ -128,22 +104,12 @@ golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7w | |||||||
| golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||||
| golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= | golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= | ||||||
| golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||||||
| <<<<<<< HEAD |  | ||||||
| ||||||| parent of 58d43dc74bf (Re-vendor latest kube-openapi and gengo/v2) |  | ||||||
| golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= |  | ||||||
| golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= |  | ||||||
| ======= |  | ||||||
| golang.org/x/telemetry v0.0.0-20240208230135-b75ee8823808/go.mod h1:KG1lNk5ZFNssSZLrpVb4sMXKMpGwGXOxSG3rnu2gZQQ= |  | ||||||
| golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= |  | ||||||
| golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= |  | ||||||
| >>>>>>> 58d43dc74bf (Re-vendor latest kube-openapi and gengo/v2) |  | ||||||
| golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||||
| golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||||
| golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= | golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= | ||||||
| golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= | golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= | ||||||
| golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||||
| golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||||
| golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= |  | ||||||
| golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||||
| golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||||
| golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= | golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= | ||||||
| @@ -158,7 +124,6 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ | |||||||
| google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= | google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= | ||||||
| google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | ||||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||||
| gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= |  | ||||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | ||||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | ||||||
| gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||||||
| @@ -167,31 +132,13 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= | |||||||
| gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||||
| gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | ||||||
| gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||||
| k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 h1:pWEwq4Asjm4vjW7vcsmijwBhOr1/shsbSYiWXmNGlks= |  | ||||||
| k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= |  | ||||||
| k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo= | k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo= | ||||||
| k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= | k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= | ||||||
| k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= | k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= | ||||||
| k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= | k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= | ||||||
| <<<<<<< HEAD |  | ||||||
| k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e h1:snPmy96t93RredGRjKfMFt+gvxuVAncqSAyBveJtr4Q= |  | ||||||
| k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= |  | ||||||
| k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= |  | ||||||
| ||||||| parent of 58d43dc74bf (Re-vendor latest kube-openapi and gengo/v2) |  | ||||||
| k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e h1:snPmy96t93RredGRjKfMFt+gvxuVAncqSAyBveJtr4Q= |  | ||||||
| k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= |  | ||||||
| k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= |  | ||||||
| k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= |  | ||||||
| ======= |  | ||||||
| k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= |  | ||||||
| k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= |  | ||||||
| k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= |  | ||||||
| k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= |  | ||||||
| >>>>>>> 58d43dc74bf (Re-vendor latest kube-openapi and gengo/v2) |  | ||||||
| sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= | sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= | ||||||
| sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= | sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= | ||||||
| sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= | sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= | ||||||
| sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= | sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= | ||||||
| sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= |  | ||||||
| sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= | sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= | ||||||
| sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= | sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= | ||||||
|   | |||||||
| @@ -86,5 +86,4 @@ replace ( | |||||||
| 	k8s.io/api => ../api | 	k8s.io/api => ../api | ||||||
| 	k8s.io/apimachinery => ../apimachinery | 	k8s.io/apimachinery => ../apimachinery | ||||||
| 	k8s.io/client-go => ../client-go | 	k8s.io/client-go => ../client-go | ||||||
| 	k8s.io/component-base => ../component-base |  | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -56,5 +56,4 @@ replace ( | |||||||
| 	k8s.io/api => ../api | 	k8s.io/api => ../api | ||||||
| 	k8s.io/apimachinery => ../apimachinery | 	k8s.io/apimachinery => ../apimachinery | ||||||
| 	k8s.io/client-go => ../client-go | 	k8s.io/client-go => ../client-go | ||||||
| 	k8s.io/component-helpers => ../component-helpers |  | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -108,6 +108,5 @@ replace ( | |||||||
| 	k8s.io/apiserver => ../apiserver | 	k8s.io/apiserver => ../apiserver | ||||||
| 	k8s.io/client-go => ../client-go | 	k8s.io/client-go => ../client-go | ||||||
| 	k8s.io/component-base => ../component-base | 	k8s.io/component-base => ../component-base | ||||||
| 	k8s.io/controller-manager => ../controller-manager |  | ||||||
| 	k8s.io/kms => ../kms | 	k8s.io/kms => ../kms | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -25,5 +25,3 @@ require ( | |||||||
| 	gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect | 	gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect | ||||||
| 	gopkg.in/yaml.v3 v3.0.1 // indirect | 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||||
| ) | ) | ||||||
|  |  | ||||||
| replace k8s.io/cri-api => ../cri-api |  | ||||||
|   | |||||||
| @@ -34,5 +34,4 @@ require ( | |||||||
| replace ( | replace ( | ||||||
| 	k8s.io/api => ../api | 	k8s.io/api => ../api | ||||||
| 	k8s.io/apimachinery => ../apimachinery | 	k8s.io/apimachinery => ../apimachinery | ||||||
| 	k8s.io/csi-translation-lib => ../csi-translation-lib |  | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -63,6 +63,5 @@ replace ( | |||||||
| 	k8s.io/client-go => ../client-go | 	k8s.io/client-go => ../client-go | ||||||
| 	k8s.io/component-base => ../component-base | 	k8s.io/component-base => ../component-base | ||||||
| 	k8s.io/cri-api => ../cri-api | 	k8s.io/cri-api => ../cri-api | ||||||
| 	k8s.io/dynamic-resource-allocation => ../dynamic-resource-allocation |  | ||||||
| 	k8s.io/kubelet => ../kubelet | 	k8s.io/kubelet => ../kubelet | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -68,5 +68,4 @@ replace ( | |||||||
| 	k8s.io/apimachinery => ../apimachinery | 	k8s.io/apimachinery => ../apimachinery | ||||||
| 	k8s.io/client-go => ../client-go | 	k8s.io/client-go => ../client-go | ||||||
| 	k8s.io/component-base => ../component-base | 	k8s.io/component-base => ../component-base | ||||||
| 	k8s.io/endpointslice => ../endpointslice |  | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -18,5 +18,3 @@ require ( | |||||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect | 	google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect | ||||||
| 	google.golang.org/protobuf v1.31.0 // indirect | 	google.golang.org/protobuf v1.31.0 // indirect | ||||||
| ) | ) | ||||||
|  |  | ||||||
| replace k8s.io/kms => ../kms |  | ||||||
|   | |||||||
| @@ -104,7 +104,6 @@ require ( | |||||||
| 	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect | 	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect | ||||||
| 	gopkg.in/yaml.v2 v2.4.0 // indirect | 	gopkg.in/yaml.v2 v2.4.0 // indirect | ||||||
| 	gopkg.in/yaml.v3 v3.0.1 // indirect | 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||||
| 	k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 // indirect |  | ||||||
| 	k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 // indirect | 	k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 // indirect | ||||||
| 	k8s.io/kms v0.0.0 // indirect | 	k8s.io/kms v0.0.0 // indirect | ||||||
| 	sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0 // indirect | 	sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0 // indirect | ||||||
| @@ -120,5 +119,4 @@ replace ( | |||||||
| 	k8s.io/code-generator => ../code-generator | 	k8s.io/code-generator => ../code-generator | ||||||
| 	k8s.io/component-base => ../component-base | 	k8s.io/component-base => ../component-base | ||||||
| 	k8s.io/kms => ../kms | 	k8s.io/kms => ../kms | ||||||
| 	k8s.io/kube-aggregator => ../kube-aggregator |  | ||||||
| ) | ) | ||||||
|   | |||||||
							
								
								
									
										9
									
								
								staging/src/k8s.io/kube-aggregator/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										9
									
								
								staging/src/k8s.io/kube-aggregator/go.sum
									
									
									
										generated
									
									
									
								
							| @@ -168,7 +168,6 @@ github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyT | |||||||
| github.com/fxamacker/cbor/v2 v2.6.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= | github.com/fxamacker/cbor/v2 v2.6.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= | ||||||
| github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= | github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= | ||||||
| github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= | github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= | ||||||
| github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= |  | ||||||
| github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | ||||||
| github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= | github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= | ||||||
| github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | ||||||
| @@ -204,13 +203,11 @@ github.com/google/cel-go v0.17.8 h1:j9m730pMZt1Fc4oKhCLUHfjj6527LuhYcYw0Rl8gqto= | |||||||
| github.com/google/cel-go v0.17.8/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= | github.com/google/cel-go v0.17.8/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= | ||||||
| github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= | github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= | ||||||
| github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= | github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= | ||||||
| github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= |  | ||||||
| github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||||
| github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||||
| github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | ||||||
| github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||||
| github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||||||
| github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= |  | ||||||
| github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= | github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= | ||||||
| github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||||||
| github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= | github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= | ||||||
| @@ -243,7 +240,6 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm | |||||||
| github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= | github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= | ||||||
| github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= | github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= | ||||||
| github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | ||||||
| github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= |  | ||||||
| github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | ||||||
| github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= | github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= | ||||||
| github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= | github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= | ||||||
| @@ -403,7 +399,6 @@ golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= | |||||||
| golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||||
| golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||||
| golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||||
| golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= |  | ||||||
| golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||||
| golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||||
| golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= | golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= | ||||||
| @@ -428,7 +423,6 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ | |||||||
| google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= | google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= | ||||||
| google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | ||||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||||
| gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= |  | ||||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | ||||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | ||||||
| gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= | gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= | ||||||
| @@ -443,8 +437,6 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= | |||||||
| gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||||
| gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | ||||||
| gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||||
| k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 h1:pWEwq4Asjm4vjW7vcsmijwBhOr1/shsbSYiWXmNGlks= |  | ||||||
| k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= |  | ||||||
| k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo= | k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo= | ||||||
| k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= | k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= | ||||||
| k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= | k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= | ||||||
| @@ -459,6 +451,5 @@ sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMm | |||||||
| sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= | sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= | ||||||
| sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= | sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= | ||||||
| sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= | sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= | ||||||
| sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= |  | ||||||
| sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= | sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= | ||||||
| sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= | sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= | ||||||
|   | |||||||
| @@ -40,5 +40,4 @@ replace ( | |||||||
| 	k8s.io/component-helpers => ../component-helpers | 	k8s.io/component-helpers => ../component-helpers | ||||||
| 	k8s.io/controller-manager => ../controller-manager | 	k8s.io/controller-manager => ../controller-manager | ||||||
| 	k8s.io/kms => ../kms | 	k8s.io/kms => ../kms | ||||||
| 	k8s.io/kube-controller-manager => ../kube-controller-manager |  | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -48,5 +48,4 @@ replace ( | |||||||
| 	k8s.io/apimachinery => ../apimachinery | 	k8s.io/apimachinery => ../apimachinery | ||||||
| 	k8s.io/client-go => ../client-go | 	k8s.io/client-go => ../client-go | ||||||
| 	k8s.io/component-base => ../component-base | 	k8s.io/component-base => ../component-base | ||||||
| 	k8s.io/kube-proxy => ../kube-proxy |  | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -34,5 +34,4 @@ replace ( | |||||||
| 	k8s.io/apimachinery => ../apimachinery | 	k8s.io/apimachinery => ../apimachinery | ||||||
| 	k8s.io/client-go => ../client-go | 	k8s.io/client-go => ../client-go | ||||||
| 	k8s.io/component-base => ../component-base | 	k8s.io/component-base => ../component-base | ||||||
| 	k8s.io/kube-scheduler => ../kube-scheduler |  | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -103,6 +103,5 @@ replace ( | |||||||
| 	k8s.io/code-generator => ../code-generator | 	k8s.io/code-generator => ../code-generator | ||||||
| 	k8s.io/component-base => ../component-base | 	k8s.io/component-base => ../component-base | ||||||
| 	k8s.io/component-helpers => ../component-helpers | 	k8s.io/component-helpers => ../component-helpers | ||||||
| 	k8s.io/kubectl => ../kubectl |  | ||||||
| 	k8s.io/metrics => ../metrics | 	k8s.io/metrics => ../metrics | ||||||
| ) | ) | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								staging/src/k8s.io/kubectl/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1
									
								
								staging/src/k8s.io/kubectl/go.sum
									
									
									
										generated
									
									
									
								
							| @@ -319,7 +319,6 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | |||||||
| gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||||
| honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | ||||||
| honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | ||||||
| k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= |  | ||||||
| k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= | k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= | ||||||
| k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= | k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= | ||||||
| k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= | k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= | ||||||
|   | |||||||
| @@ -68,5 +68,4 @@ replace ( | |||||||
| 	k8s.io/component-base => ../component-base | 	k8s.io/component-base => ../component-base | ||||||
| 	k8s.io/cri-api => ../cri-api | 	k8s.io/cri-api => ../cri-api | ||||||
| 	k8s.io/kms => ../kms | 	k8s.io/kms => ../kms | ||||||
| 	k8s.io/kubelet => ../kubelet |  | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -87,5 +87,4 @@ replace ( | |||||||
| 	k8s.io/component-helpers => ../component-helpers | 	k8s.io/component-helpers => ../component-helpers | ||||||
| 	k8s.io/controller-manager => ../controller-manager | 	k8s.io/controller-manager => ../controller-manager | ||||||
| 	k8s.io/kms => ../kms | 	k8s.io/kms => ../kms | ||||||
| 	k8s.io/legacy-cloud-providers => ../legacy-cloud-providers |  | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -48,7 +48,6 @@ require ( | |||||||
| 	gopkg.in/inf.v0 v0.9.1 // indirect | 	gopkg.in/inf.v0 v0.9.1 // indirect | ||||||
| 	gopkg.in/yaml.v2 v2.4.0 // indirect | 	gopkg.in/yaml.v2 v2.4.0 // indirect | ||||||
| 	gopkg.in/yaml.v3 v3.0.1 // indirect | 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||||
| 	k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 // indirect |  | ||||||
| 	k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 // indirect | 	k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 // indirect | ||||||
| 	k8s.io/klog/v2 v2.120.1 // indirect | 	k8s.io/klog/v2 v2.120.1 // indirect | ||||||
| 	k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect | 	k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect | ||||||
| @@ -63,5 +62,4 @@ replace ( | |||||||
| 	k8s.io/apimachinery => ../apimachinery | 	k8s.io/apimachinery => ../apimachinery | ||||||
| 	k8s.io/client-go => ../client-go | 	k8s.io/client-go => ../client-go | ||||||
| 	k8s.io/code-generator => ../code-generator | 	k8s.io/code-generator => ../code-generator | ||||||
| 	k8s.io/metrics => ../metrics |  | ||||||
| ) | ) | ||||||
|   | |||||||
							
								
								
									
										9
									
								
								staging/src/k8s.io/metrics/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										9
									
								
								staging/src/k8s.io/metrics/go.sum
									
									
									
										generated
									
									
									
								
							| @@ -12,7 +12,6 @@ github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRr | |||||||
| github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= | github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= | ||||||
| github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= | github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= | ||||||
| github.com/fxamacker/cbor/v2 v2.6.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= | github.com/fxamacker/cbor/v2 v2.6.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= | ||||||
| github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= |  | ||||||
| github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= | github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= | ||||||
| github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | ||||||
| github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= | github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= | ||||||
| @@ -33,13 +32,11 @@ github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu | |||||||
| github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= | github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= | ||||||
| github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= | github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= | ||||||
| github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= | github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= | ||||||
| github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= |  | ||||||
| github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||||
| github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||||
| github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | ||||||
| github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||||
| github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||||||
| github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= |  | ||||||
| github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= | github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= | ||||||
| github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||||||
| github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= | github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= | ||||||
| @@ -55,7 +52,6 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr | |||||||
| github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= | github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= | ||||||
| github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= | github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= | ||||||
| github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | ||||||
| github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= |  | ||||||
| github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | ||||||
| github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= | github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= | ||||||
| github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= | github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= | ||||||
| @@ -139,7 +135,6 @@ golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= | |||||||
| golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||||
| golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||||
| golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||||
| golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= |  | ||||||
| golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||||
| golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||||
| golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= | golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= | ||||||
| @@ -156,7 +151,6 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ | |||||||
| google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= | google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= | ||||||
| google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | ||||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||||
| gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= |  | ||||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | ||||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | ||||||
| gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= | gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= | ||||||
| @@ -167,8 +161,6 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= | |||||||
| gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||||
| gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | ||||||
| gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||||
| k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 h1:pWEwq4Asjm4vjW7vcsmijwBhOr1/shsbSYiWXmNGlks= |  | ||||||
| k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= |  | ||||||
| k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo= | k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo= | ||||||
| k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= | k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= | ||||||
| k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= | k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= | ||||||
| @@ -181,6 +173,5 @@ sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMm | |||||||
| sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= | sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= | ||||||
| sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= | sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= | ||||||
| sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= | sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= | ||||||
| sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= |  | ||||||
| sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= | sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= | ||||||
| sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= | sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= | ||||||
|   | |||||||
| @@ -21,5 +21,3 @@ require ( | |||||||
| 	gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect | 	gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect | ||||||
| 	gopkg.in/yaml.v3 v3.0.1 // indirect | 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||||
| ) | ) | ||||||
|  |  | ||||||
| replace k8s.io/mount-utils => ../mount-utils |  | ||||||
|   | |||||||
| @@ -112,5 +112,4 @@ replace ( | |||||||
| 	k8s.io/client-go => ../client-go | 	k8s.io/client-go => ../client-go | ||||||
| 	k8s.io/component-base => ../component-base | 	k8s.io/component-base => ../component-base | ||||||
| 	k8s.io/kms => ../kms | 	k8s.io/kms => ../kms | ||||||
| 	k8s.io/pod-security-admission => ../pod-security-admission |  | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -98,7 +98,6 @@ require ( | |||||||
| 	gopkg.in/yaml.v2 v2.4.0 // indirect | 	gopkg.in/yaml.v2 v2.4.0 // indirect | ||||||
| 	gopkg.in/yaml.v3 v3.0.1 // indirect | 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||||
| 	k8s.io/api v0.0.0 // indirect | 	k8s.io/api v0.0.0 // indirect | ||||||
| 	k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 // indirect |  | ||||||
| 	k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 // indirect | 	k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 // indirect | ||||||
| 	k8s.io/klog/v2 v2.120.1 // indirect | 	k8s.io/klog/v2 v2.120.1 // indirect | ||||||
| 	k8s.io/kms v0.0.0 // indirect | 	k8s.io/kms v0.0.0 // indirect | ||||||
| @@ -115,5 +114,4 @@ replace ( | |||||||
| 	k8s.io/code-generator => ../code-generator | 	k8s.io/code-generator => ../code-generator | ||||||
| 	k8s.io/component-base => ../component-base | 	k8s.io/component-base => ../component-base | ||||||
| 	k8s.io/kms => ../kms | 	k8s.io/kms => ../kms | ||||||
| 	k8s.io/sample-apiserver => ../sample-apiserver |  | ||||||
| ) | ) | ||||||
|   | |||||||
							
								
								
									
										9
									
								
								staging/src/k8s.io/sample-apiserver/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										9
									
								
								staging/src/k8s.io/sample-apiserver/go.sum
									
									
									
										generated
									
									
									
								
							| @@ -167,7 +167,6 @@ github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyT | |||||||
| github.com/fxamacker/cbor/v2 v2.6.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= | github.com/fxamacker/cbor/v2 v2.6.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= | ||||||
| github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= | github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= | ||||||
| github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= | github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= | ||||||
| github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= |  | ||||||
| github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | ||||||
| github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= | github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= | ||||||
| github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | ||||||
| @@ -203,13 +202,11 @@ github.com/google/cel-go v0.17.8 h1:j9m730pMZt1Fc4oKhCLUHfjj6527LuhYcYw0Rl8gqto= | |||||||
| github.com/google/cel-go v0.17.8/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= | github.com/google/cel-go v0.17.8/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= | ||||||
| github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= | github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= | ||||||
| github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= | github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= | ||||||
| github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= |  | ||||||
| github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||||
| github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||||
| github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | ||||||
| github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||||
| github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||||||
| github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= |  | ||||||
| github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= | github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= | ||||||
| github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||||||
| github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= | github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= | ||||||
| @@ -241,7 +238,6 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm | |||||||
| github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= | github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= | ||||||
| github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= | github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= | ||||||
| github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | ||||||
| github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= |  | ||||||
| github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | ||||||
| github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= | github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= | ||||||
| github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= | github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= | ||||||
| @@ -399,7 +395,6 @@ golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= | |||||||
| golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||||
| golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||||
| golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||||
| golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= |  | ||||||
| golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||||
| golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||||
| golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= | golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= | ||||||
| @@ -424,7 +419,6 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ | |||||||
| google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= | google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= | ||||||
| google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | ||||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||||
| gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= |  | ||||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | ||||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | ||||||
| gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= | gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= | ||||||
| @@ -439,8 +433,6 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= | |||||||
| gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||||
| gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | ||||||
| gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||||
| k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 h1:pWEwq4Asjm4vjW7vcsmijwBhOr1/shsbSYiWXmNGlks= |  | ||||||
| k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= |  | ||||||
| k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo= | k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo= | ||||||
| k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= | k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= | ||||||
| k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= | k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= | ||||||
| @@ -455,6 +447,5 @@ sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMm | |||||||
| sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= | sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= | ||||||
| sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= | sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= | ||||||
| sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= | sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= | ||||||
| sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= |  | ||||||
| sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= | sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= | ||||||
| sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= | sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= | ||||||
|   | |||||||
| @@ -73,5 +73,4 @@ replace ( | |||||||
| 	k8s.io/apimachinery => ../apimachinery | 	k8s.io/apimachinery => ../apimachinery | ||||||
| 	k8s.io/cli-runtime => ../cli-runtime | 	k8s.io/cli-runtime => ../cli-runtime | ||||||
| 	k8s.io/client-go => ../client-go | 	k8s.io/client-go => ../client-go | ||||||
| 	k8s.io/sample-cli-plugin => ../sample-cli-plugin |  | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -49,7 +49,6 @@ require ( | |||||||
| 	gopkg.in/inf.v0 v0.9.1 // indirect | 	gopkg.in/inf.v0 v0.9.1 // indirect | ||||||
| 	gopkg.in/yaml.v2 v2.4.0 // indirect | 	gopkg.in/yaml.v2 v2.4.0 // indirect | ||||||
| 	gopkg.in/yaml.v3 v3.0.1 // indirect | 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||||
| 	k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 // indirect |  | ||||||
| 	k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 // indirect | 	k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 // indirect | ||||||
| 	k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect | 	k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect | ||||||
| 	k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect | 	k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect | ||||||
| @@ -63,5 +62,4 @@ replace ( | |||||||
| 	k8s.io/apimachinery => ../apimachinery | 	k8s.io/apimachinery => ../apimachinery | ||||||
| 	k8s.io/client-go => ../client-go | 	k8s.io/client-go => ../client-go | ||||||
| 	k8s.io/code-generator => ../code-generator | 	k8s.io/code-generator => ../code-generator | ||||||
| 	k8s.io/sample-controller => ../sample-controller |  | ||||||
| ) | ) | ||||||
|   | |||||||
							
								
								
									
										9
									
								
								staging/src/k8s.io/sample-controller/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										9
									
								
								staging/src/k8s.io/sample-controller/go.sum
									
									
									
										generated
									
									
									
								
							| @@ -12,7 +12,6 @@ github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRr | |||||||
| github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= | github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= | ||||||
| github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= | github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= | ||||||
| github.com/fxamacker/cbor/v2 v2.6.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= | github.com/fxamacker/cbor/v2 v2.6.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= | ||||||
| github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= |  | ||||||
| github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= | github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= | ||||||
| github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | ||||||
| github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= | github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= | ||||||
| @@ -34,13 +33,11 @@ github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu | |||||||
| github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= | github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= | ||||||
| github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= | github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= | ||||||
| github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= | github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= | ||||||
| github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= |  | ||||||
| github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||||
| github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||||
| github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | ||||||
| github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||||
| github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||||||
| github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= |  | ||||||
| github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= | github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= | ||||||
| github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||||||
| github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= | github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= | ||||||
| @@ -57,7 +54,6 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr | |||||||
| github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= | github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= | ||||||
| github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= | github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= | ||||||
| github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | ||||||
| github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= |  | ||||||
| github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | ||||||
| github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= | github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= | ||||||
| github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= | github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= | ||||||
| @@ -141,7 +137,6 @@ golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= | |||||||
| golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||||
| golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||||
| golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||||
| golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= |  | ||||||
| golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||||
| golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||||
| golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= | golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= | ||||||
| @@ -158,7 +153,6 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ | |||||||
| google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= | google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= | ||||||
| google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | ||||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||||
| gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= |  | ||||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | ||||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | ||||||
| gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= | gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= | ||||||
| @@ -169,8 +163,6 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= | |||||||
| gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||||
| gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | ||||||
| gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||||
| k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 h1:pWEwq4Asjm4vjW7vcsmijwBhOr1/shsbSYiWXmNGlks= |  | ||||||
| k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= |  | ||||||
| k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo= | k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo= | ||||||
| k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= | k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= | ||||||
| k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= | k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= | ||||||
| @@ -183,6 +175,5 @@ sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMm | |||||||
| sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= | sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= | ||||||
| sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= | sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= | ||||||
| sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= | sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= | ||||||
| sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= |  | ||||||
| sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= | sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= | ||||||
| sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= | sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= | ||||||
|   | |||||||
							
								
								
									
										202
									
								
								vendor/k8s.io/gengo/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										202
									
								
								vendor/k8s.io/gengo/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,202 +0,0 @@ | |||||||
|  |  | ||||||
|                                  Apache License |  | ||||||
|                            Version 2.0, January 2004 |  | ||||||
|                         http://www.apache.org/licenses/ |  | ||||||
|  |  | ||||||
|    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION |  | ||||||
|  |  | ||||||
|    1. Definitions. |  | ||||||
|  |  | ||||||
|       "License" shall mean the terms and conditions for use, reproduction, |  | ||||||
|       and distribution as defined by Sections 1 through 9 of this document. |  | ||||||
|  |  | ||||||
|       "Licensor" shall mean the copyright owner or entity authorized by |  | ||||||
|       the copyright owner that is granting the License. |  | ||||||
|  |  | ||||||
|       "Legal Entity" shall mean the union of the acting entity and all |  | ||||||
|       other entities that control, are controlled by, or are under common |  | ||||||
|       control with that entity. For the purposes of this definition, |  | ||||||
|       "control" means (i) the power, direct or indirect, to cause the |  | ||||||
|       direction or management of such entity, whether by contract or |  | ||||||
|       otherwise, or (ii) ownership of fifty percent (50%) or more of the |  | ||||||
|       outstanding shares, or (iii) beneficial ownership of such entity. |  | ||||||
|  |  | ||||||
|       "You" (or "Your") shall mean an individual or Legal Entity |  | ||||||
|       exercising permissions granted by this License. |  | ||||||
|  |  | ||||||
|       "Source" form shall mean the preferred form for making modifications, |  | ||||||
|       including but not limited to software source code, documentation |  | ||||||
|       source, and configuration files. |  | ||||||
|  |  | ||||||
|       "Object" form shall mean any form resulting from mechanical |  | ||||||
|       transformation or translation of a Source form, including but |  | ||||||
|       not limited to compiled object code, generated documentation, |  | ||||||
|       and conversions to other media types. |  | ||||||
|  |  | ||||||
|       "Work" shall mean the work of authorship, whether in Source or |  | ||||||
|       Object form, made available under the License, as indicated by a |  | ||||||
|       copyright notice that is included in or attached to the work |  | ||||||
|       (an example is provided in the Appendix below). |  | ||||||
|  |  | ||||||
|       "Derivative Works" shall mean any work, whether in Source or Object |  | ||||||
|       form, that is based on (or derived from) the Work and for which the |  | ||||||
|       editorial revisions, annotations, elaborations, or other modifications |  | ||||||
|       represent, as a whole, an original work of authorship. For the purposes |  | ||||||
|       of this License, Derivative Works shall not include works that remain |  | ||||||
|       separable from, or merely link (or bind by name) to the interfaces of, |  | ||||||
|       the Work and Derivative Works thereof. |  | ||||||
|  |  | ||||||
|       "Contribution" shall mean any work of authorship, including |  | ||||||
|       the original version of the Work and any modifications or additions |  | ||||||
|       to that Work or Derivative Works thereof, that is intentionally |  | ||||||
|       submitted to Licensor for inclusion in the Work by the copyright owner |  | ||||||
|       or by an individual or Legal Entity authorized to submit on behalf of |  | ||||||
|       the copyright owner. For the purposes of this definition, "submitted" |  | ||||||
|       means any form of electronic, verbal, or written communication sent |  | ||||||
|       to the Licensor or its representatives, including but not limited to |  | ||||||
|       communication on electronic mailing lists, source code control systems, |  | ||||||
|       and issue tracking systems that are managed by, or on behalf of, the |  | ||||||
|       Licensor for the purpose of discussing and improving the Work, but |  | ||||||
|       excluding communication that is conspicuously marked or otherwise |  | ||||||
|       designated in writing by the copyright owner as "Not a Contribution." |  | ||||||
|  |  | ||||||
|       "Contributor" shall mean Licensor and any individual or Legal Entity |  | ||||||
|       on behalf of whom a Contribution has been received by Licensor and |  | ||||||
|       subsequently incorporated within the Work. |  | ||||||
|  |  | ||||||
|    2. Grant of Copyright License. Subject to the terms and conditions of |  | ||||||
|       this License, each Contributor hereby grants to You a perpetual, |  | ||||||
|       worldwide, non-exclusive, no-charge, royalty-free, irrevocable |  | ||||||
|       copyright license to reproduce, prepare Derivative Works of, |  | ||||||
|       publicly display, publicly perform, sublicense, and distribute the |  | ||||||
|       Work and such Derivative Works in Source or Object form. |  | ||||||
|  |  | ||||||
|    3. Grant of Patent License. Subject to the terms and conditions of |  | ||||||
|       this License, each Contributor hereby grants to You a perpetual, |  | ||||||
|       worldwide, non-exclusive, no-charge, royalty-free, irrevocable |  | ||||||
|       (except as stated in this section) patent license to make, have made, |  | ||||||
|       use, offer to sell, sell, import, and otherwise transfer the Work, |  | ||||||
|       where such license applies only to those patent claims licensable |  | ||||||
|       by such Contributor that are necessarily infringed by their |  | ||||||
|       Contribution(s) alone or by combination of their Contribution(s) |  | ||||||
|       with the Work to which such Contribution(s) was submitted. If You |  | ||||||
|       institute patent litigation against any entity (including a |  | ||||||
|       cross-claim or counterclaim in a lawsuit) alleging that the Work |  | ||||||
|       or a Contribution incorporated within the Work constitutes direct |  | ||||||
|       or contributory patent infringement, then any patent licenses |  | ||||||
|       granted to You under this License for that Work shall terminate |  | ||||||
|       as of the date such litigation is filed. |  | ||||||
|  |  | ||||||
|    4. Redistribution. You may reproduce and distribute copies of the |  | ||||||
|       Work or Derivative Works thereof in any medium, with or without |  | ||||||
|       modifications, and in Source or Object form, provided that You |  | ||||||
|       meet the following conditions: |  | ||||||
|  |  | ||||||
|       (a) You must give any other recipients of the Work or |  | ||||||
|           Derivative Works a copy of this License; and |  | ||||||
|  |  | ||||||
|       (b) You must cause any modified files to carry prominent notices |  | ||||||
|           stating that You changed the files; and |  | ||||||
|  |  | ||||||
|       (c) You must retain, in the Source form of any Derivative Works |  | ||||||
|           that You distribute, all copyright, patent, trademark, and |  | ||||||
|           attribution notices from the Source form of the Work, |  | ||||||
|           excluding those notices that do not pertain to any part of |  | ||||||
|           the Derivative Works; and |  | ||||||
|  |  | ||||||
|       (d) If the Work includes a "NOTICE" text file as part of its |  | ||||||
|           distribution, then any Derivative Works that You distribute must |  | ||||||
|           include a readable copy of the attribution notices contained |  | ||||||
|           within such NOTICE file, excluding those notices that do not |  | ||||||
|           pertain to any part of the Derivative Works, in at least one |  | ||||||
|           of the following places: within a NOTICE text file distributed |  | ||||||
|           as part of the Derivative Works; within the Source form or |  | ||||||
|           documentation, if provided along with the Derivative Works; or, |  | ||||||
|           within a display generated by the Derivative Works, if and |  | ||||||
|           wherever such third-party notices normally appear. The contents |  | ||||||
|           of the NOTICE file are for informational purposes only and |  | ||||||
|           do not modify the License. You may add Your own attribution |  | ||||||
|           notices within Derivative Works that You distribute, alongside |  | ||||||
|           or as an addendum to the NOTICE text from the Work, provided |  | ||||||
|           that such additional attribution notices cannot be construed |  | ||||||
|           as modifying the License. |  | ||||||
|  |  | ||||||
|       You may add Your own copyright statement to Your modifications and |  | ||||||
|       may provide additional or different license terms and conditions |  | ||||||
|       for use, reproduction, or distribution of Your modifications, or |  | ||||||
|       for any such Derivative Works as a whole, provided Your use, |  | ||||||
|       reproduction, and distribution of the Work otherwise complies with |  | ||||||
|       the conditions stated in this License. |  | ||||||
|  |  | ||||||
|    5. Submission of Contributions. Unless You explicitly state otherwise, |  | ||||||
|       any Contribution intentionally submitted for inclusion in the Work |  | ||||||
|       by You to the Licensor shall be under the terms and conditions of |  | ||||||
|       this License, without any additional terms or conditions. |  | ||||||
|       Notwithstanding the above, nothing herein shall supersede or modify |  | ||||||
|       the terms of any separate license agreement you may have executed |  | ||||||
|       with Licensor regarding such Contributions. |  | ||||||
|  |  | ||||||
|    6. Trademarks. This License does not grant permission to use the trade |  | ||||||
|       names, trademarks, service marks, or product names of the Licensor, |  | ||||||
|       except as required for reasonable and customary use in describing the |  | ||||||
|       origin of the Work and reproducing the content of the NOTICE file. |  | ||||||
|  |  | ||||||
|    7. Disclaimer of Warranty. Unless required by applicable law or |  | ||||||
|       agreed to in writing, Licensor provides the Work (and each |  | ||||||
|       Contributor provides its Contributions) on an "AS IS" BASIS, |  | ||||||
|       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |  | ||||||
|       implied, including, without limitation, any warranties or conditions |  | ||||||
|       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A |  | ||||||
|       PARTICULAR PURPOSE. You are solely responsible for determining the |  | ||||||
|       appropriateness of using or redistributing the Work and assume any |  | ||||||
|       risks associated with Your exercise of permissions under this License. |  | ||||||
|  |  | ||||||
|    8. Limitation of Liability. In no event and under no legal theory, |  | ||||||
|       whether in tort (including negligence), contract, or otherwise, |  | ||||||
|       unless required by applicable law (such as deliberate and grossly |  | ||||||
|       negligent acts) or agreed to in writing, shall any Contributor be |  | ||||||
|       liable to You for damages, including any direct, indirect, special, |  | ||||||
|       incidental, or consequential damages of any character arising as a |  | ||||||
|       result of this License or out of the use or inability to use the |  | ||||||
|       Work (including but not limited to damages for loss of goodwill, |  | ||||||
|       work stoppage, computer failure or malfunction, or any and all |  | ||||||
|       other commercial damages or losses), even if such Contributor |  | ||||||
|       has been advised of the possibility of such damages. |  | ||||||
|  |  | ||||||
|    9. Accepting Warranty or Additional Liability. While redistributing |  | ||||||
|       the Work or Derivative Works thereof, You may choose to offer, |  | ||||||
|       and charge a fee for, acceptance of support, warranty, indemnity, |  | ||||||
|       or other liability obligations and/or rights consistent with this |  | ||||||
|       License. However, in accepting such obligations, You may act only |  | ||||||
|       on Your own behalf and on Your sole responsibility, not on behalf |  | ||||||
|       of any other Contributor, and only if You agree to indemnify, |  | ||||||
|       defend, and hold each Contributor harmless for any liability |  | ||||||
|       incurred by, or claims asserted against, such Contributor by reason |  | ||||||
|       of your accepting any such warranty or additional liability. |  | ||||||
|  |  | ||||||
|    END OF TERMS AND CONDITIONS |  | ||||||
|  |  | ||||||
|    APPENDIX: How to apply the Apache License to your work. |  | ||||||
|  |  | ||||||
|       To apply the Apache License to your work, attach the following |  | ||||||
|       boilerplate notice, with the fields enclosed by brackets "[]" |  | ||||||
|       replaced with your own identifying information. (Don't include |  | ||||||
|       the brackets!)  The text should be enclosed in the appropriate |  | ||||||
|       comment syntax for the file format. We also recommend that a |  | ||||||
|       file or class name and description of purpose be included on the |  | ||||||
|       same "printed page" as the copyright notice for easier |  | ||||||
|       identification within third-party archives. |  | ||||||
|  |  | ||||||
|    Copyright 2014 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
|    Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
|    you may not use this file except in compliance with the License. |  | ||||||
|    You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
|    Unless required by applicable law or agreed to in writing, software |  | ||||||
|    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
|    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
|    See the License for the specific language governing permissions and |  | ||||||
|    limitations under the License. |  | ||||||
							
								
								
									
										199
									
								
								vendor/k8s.io/gengo/args/args.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										199
									
								
								vendor/k8s.io/gengo/args/args.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,199 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| // Package args has common command-line flags for generation programs. |  | ||||||
| package args |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"bytes" |  | ||||||
| 	goflag "flag" |  | ||||||
| 	"fmt" |  | ||||||
| 	"io/ioutil" |  | ||||||
| 	"os" |  | ||||||
| 	"path" |  | ||||||
| 	"path/filepath" |  | ||||||
| 	"strconv" |  | ||||||
| 	"strings" |  | ||||||
| 	"time" |  | ||||||
|  |  | ||||||
| 	"k8s.io/gengo/generator" |  | ||||||
| 	"k8s.io/gengo/namer" |  | ||||||
| 	"k8s.io/gengo/parser" |  | ||||||
|  |  | ||||||
| 	"github.com/spf13/pflag" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // Default returns a defaulted GeneratorArgs. You may change the defaults |  | ||||||
| // before calling AddFlags. |  | ||||||
| func Default() *GeneratorArgs { |  | ||||||
| 	return &GeneratorArgs{ |  | ||||||
| 		OutputBase:                 DefaultSourceTree(), |  | ||||||
| 		GoHeaderFilePath:           filepath.Join(DefaultSourceTree(), "k8s.io/gengo/boilerplate/boilerplate.go.txt"), |  | ||||||
| 		GeneratedBuildTag:          "ignore_autogenerated", |  | ||||||
| 		GeneratedByCommentTemplate: "// Code generated by GENERATOR_NAME. DO NOT EDIT.", |  | ||||||
| 		defaultCommandLineFlags:    true, |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // GeneratorArgs has arguments that are passed to generators. |  | ||||||
| type GeneratorArgs struct { |  | ||||||
| 	// Which directories to parse. |  | ||||||
| 	InputDirs []string |  | ||||||
|  |  | ||||||
| 	// Source tree to write results to. |  | ||||||
| 	OutputBase string |  | ||||||
|  |  | ||||||
| 	// Package path within the source tree. |  | ||||||
| 	OutputPackagePath string |  | ||||||
|  |  | ||||||
| 	// Output file name. |  | ||||||
| 	OutputFileBaseName string |  | ||||||
|  |  | ||||||
| 	// Where to get copyright header text. |  | ||||||
| 	GoHeaderFilePath string |  | ||||||
|  |  | ||||||
| 	// If GeneratedByCommentTemplate is set, generate a "Code generated by" comment |  | ||||||
| 	// below the bloilerplate, of the format defined by this string. |  | ||||||
| 	// Any instances of "GENERATOR_NAME" will be replaced with the name of the code generator. |  | ||||||
| 	GeneratedByCommentTemplate string |  | ||||||
|  |  | ||||||
| 	// If true, only verify, don't write anything. |  | ||||||
| 	VerifyOnly bool |  | ||||||
|  |  | ||||||
| 	// If true, include *_test.go files |  | ||||||
| 	IncludeTestFiles bool |  | ||||||
|  |  | ||||||
| 	// GeneratedBuildTag is the tag used to identify code generated by execution |  | ||||||
| 	// of this type. Each generator should use a different tag, and different |  | ||||||
| 	// groups of generators (external API that depends on Kube generations) should |  | ||||||
| 	// keep tags distinct as well. |  | ||||||
| 	GeneratedBuildTag string |  | ||||||
|  |  | ||||||
| 	// Any custom arguments go here |  | ||||||
| 	CustomArgs interface{} |  | ||||||
|  |  | ||||||
| 	// If specified, trim the prefix from OutputPackagePath before writing files. |  | ||||||
| 	TrimPathPrefix string |  | ||||||
|  |  | ||||||
| 	// Whether to use default command line flags |  | ||||||
| 	defaultCommandLineFlags bool |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // WithoutDefaultFlagParsing disables implicit addition of command line flags and parsing. |  | ||||||
| func (g *GeneratorArgs) WithoutDefaultFlagParsing() *GeneratorArgs { |  | ||||||
| 	g.defaultCommandLineFlags = false |  | ||||||
| 	return g |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (g *GeneratorArgs) AddFlags(fs *pflag.FlagSet) { |  | ||||||
| 	fs.StringSliceVarP(&g.InputDirs, "input-dirs", "i", g.InputDirs, "Comma-separated list of import paths to get input types from.") |  | ||||||
| 	fs.StringVarP(&g.OutputBase, "output-base", "o", g.OutputBase, "Output base; defaults to $GOPATH/src/ or ./ if $GOPATH is not set.") |  | ||||||
| 	fs.StringVarP(&g.OutputPackagePath, "output-package", "p", g.OutputPackagePath, "Base package path.") |  | ||||||
| 	fs.StringVarP(&g.OutputFileBaseName, "output-file-base", "O", g.OutputFileBaseName, "Base name (without .go suffix) for output files.") |  | ||||||
| 	fs.StringVarP(&g.GoHeaderFilePath, "go-header-file", "h", g.GoHeaderFilePath, "File containing boilerplate header text. The string YEAR will be replaced with the current 4-digit year.") |  | ||||||
| 	fs.BoolVar(&g.VerifyOnly, "verify-only", g.VerifyOnly, "If true, only verify existing output, do not write anything.") |  | ||||||
| 	fs.StringVar(&g.GeneratedBuildTag, "build-tag", g.GeneratedBuildTag, "A Go build tag to use to identify files generated by this command. Should be unique.") |  | ||||||
| 	fs.StringVar(&g.TrimPathPrefix, "trim-path-prefix", g.TrimPathPrefix, "If set, trim the specified prefix from --output-package when generating files.") |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // LoadGoBoilerplate loads the boilerplate file passed to --go-header-file. |  | ||||||
| func (g *GeneratorArgs) LoadGoBoilerplate() ([]byte, error) { |  | ||||||
| 	b, err := ioutil.ReadFile(g.GoHeaderFilePath) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, err |  | ||||||
| 	} |  | ||||||
| 	b = bytes.Replace(b, []byte("YEAR"), []byte(strconv.Itoa(time.Now().UTC().Year())), -1) |  | ||||||
|  |  | ||||||
| 	if g.GeneratedByCommentTemplate != "" { |  | ||||||
| 		if len(b) != 0 { |  | ||||||
| 			b = append(b, byte('\n')) |  | ||||||
| 		} |  | ||||||
| 		generatorName := path.Base(os.Args[0]) |  | ||||||
| 		generatedByComment := strings.Replace(g.GeneratedByCommentTemplate, "GENERATOR_NAME", generatorName, -1) |  | ||||||
| 		s := fmt.Sprintf("%s\n\n", generatedByComment) |  | ||||||
| 		b = append(b, []byte(s)...) |  | ||||||
| 	} |  | ||||||
| 	return b, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // NewBuilder makes a new parser.Builder and populates it with the input |  | ||||||
| // directories. |  | ||||||
| func (g *GeneratorArgs) NewBuilder() (*parser.Builder, error) { |  | ||||||
| 	b := parser.New() |  | ||||||
|  |  | ||||||
| 	// flag for including *_test.go |  | ||||||
| 	b.IncludeTestFiles = g.IncludeTestFiles |  | ||||||
|  |  | ||||||
| 	// Ignore all auto-generated files. |  | ||||||
| 	b.AddBuildTags(g.GeneratedBuildTag) |  | ||||||
|  |  | ||||||
| 	for _, d := range g.InputDirs { |  | ||||||
| 		var err error |  | ||||||
| 		if strings.HasSuffix(d, "/...") { |  | ||||||
| 			err = b.AddDirRecursive(strings.TrimSuffix(d, "/...")) |  | ||||||
| 		} else { |  | ||||||
| 			err = b.AddDir(d) |  | ||||||
| 		} |  | ||||||
| 		if err != nil { |  | ||||||
| 			return nil, fmt.Errorf("unable to add directory %q: %v", d, err) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return b, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // DefaultSourceTree returns the /src directory of the first entry in $GOPATH. |  | ||||||
| // If $GOPATH is empty, it returns "./". Useful as a default output location. |  | ||||||
| func DefaultSourceTree() string { |  | ||||||
| 	paths := strings.Split(os.Getenv("GOPATH"), string(filepath.ListSeparator)) |  | ||||||
| 	if len(paths) > 0 && len(paths[0]) > 0 { |  | ||||||
| 		return filepath.Join(paths[0], "src") |  | ||||||
| 	} |  | ||||||
| 	return "./" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Execute implements main(). |  | ||||||
| // If you don't need any non-default behavior, use as: |  | ||||||
| // args.Default().Execute(...) |  | ||||||
| func (g *GeneratorArgs) Execute(nameSystems namer.NameSystems, defaultSystem string, pkgs func(*generator.Context, *GeneratorArgs) generator.Packages) error { |  | ||||||
| 	if g.defaultCommandLineFlags { |  | ||||||
| 		g.AddFlags(pflag.CommandLine) |  | ||||||
| 		pflag.CommandLine.AddGoFlagSet(goflag.CommandLine) |  | ||||||
| 		pflag.Parse() |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	b, err := g.NewBuilder() |  | ||||||
| 	if err != nil { |  | ||||||
| 		return fmt.Errorf("Failed making a parser: %v", err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// pass through the flag on whether to include *_test.go files |  | ||||||
| 	b.IncludeTestFiles = g.IncludeTestFiles |  | ||||||
|  |  | ||||||
| 	c, err := generator.NewContext(b, nameSystems, defaultSystem) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return fmt.Errorf("Failed making a context: %v", err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	c.TrimPathPrefix = g.TrimPathPrefix |  | ||||||
|  |  | ||||||
| 	c.Verify = g.VerifyOnly |  | ||||||
| 	packages := pkgs(c, g) |  | ||||||
| 	if err := c.ExecutePackages(g.OutputBase, packages); err != nil { |  | ||||||
| 		return fmt.Errorf("Failed executing generator: %v", err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
							
								
								
									
										935
									
								
								vendor/k8s.io/gengo/examples/deepcopy-gen/generators/deepcopy.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										935
									
								
								vendor/k8s.io/gengo/examples/deepcopy-gen/generators/deepcopy.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,935 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| package generators |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"fmt" |  | ||||||
| 	"io" |  | ||||||
| 	"path/filepath" |  | ||||||
| 	"sort" |  | ||||||
| 	"strings" |  | ||||||
|  |  | ||||||
| 	"k8s.io/gengo/args" |  | ||||||
| 	"k8s.io/gengo/examples/set-gen/sets" |  | ||||||
| 	"k8s.io/gengo/generator" |  | ||||||
| 	"k8s.io/gengo/namer" |  | ||||||
| 	"k8s.io/gengo/types" |  | ||||||
|  |  | ||||||
| 	"k8s.io/klog/v2" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // CustomArgs is used tby the go2idl framework to pass args specific to this |  | ||||||
| // generator. |  | ||||||
| type CustomArgs struct { |  | ||||||
| 	BoundingDirs []string // Only deal with types rooted under these dirs. |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // This is the comment tag that carries parameters for deep-copy generation. |  | ||||||
| const ( |  | ||||||
| 	tagEnabledName              = "k8s:deepcopy-gen" |  | ||||||
| 	interfacesTagName           = tagEnabledName + ":interfaces" |  | ||||||
| 	interfacesNonPointerTagName = tagEnabledName + ":nonpointer-interfaces" // attach the DeepCopy<Interface> methods to the |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // Known values for the comment tag. |  | ||||||
| const tagValuePackage = "package" |  | ||||||
|  |  | ||||||
| // enabledTagValue holds parameters from a tagName tag. |  | ||||||
| type enabledTagValue struct { |  | ||||||
| 	value    string |  | ||||||
| 	register bool |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func extractEnabledTypeTag(t *types.Type) *enabledTagValue { |  | ||||||
| 	comments := append(append([]string{}, t.SecondClosestCommentLines...), t.CommentLines...) |  | ||||||
| 	return extractEnabledTag(comments) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func extractEnabledTag(comments []string) *enabledTagValue { |  | ||||||
| 	tagVals := types.ExtractCommentTags("+", comments)[tagEnabledName] |  | ||||||
| 	if tagVals == nil { |  | ||||||
| 		// No match for the tag. |  | ||||||
| 		return nil |  | ||||||
| 	} |  | ||||||
| 	// If there are multiple values, abort. |  | ||||||
| 	if len(tagVals) > 1 { |  | ||||||
| 		klog.Fatalf("Found %d %s tags: %q", len(tagVals), tagEnabledName, tagVals) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// If we got here we are returning something. |  | ||||||
| 	tag := &enabledTagValue{} |  | ||||||
|  |  | ||||||
| 	// Get the primary value. |  | ||||||
| 	parts := strings.Split(tagVals[0], ",") |  | ||||||
| 	if len(parts) >= 1 { |  | ||||||
| 		tag.value = parts[0] |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// Parse extra arguments. |  | ||||||
| 	parts = parts[1:] |  | ||||||
| 	for i := range parts { |  | ||||||
| 		kv := strings.SplitN(parts[i], "=", 2) |  | ||||||
| 		k := kv[0] |  | ||||||
| 		v := "" |  | ||||||
| 		if len(kv) == 2 { |  | ||||||
| 			v = kv[1] |  | ||||||
| 		} |  | ||||||
| 		switch k { |  | ||||||
| 		case "register": |  | ||||||
| 			if v != "false" { |  | ||||||
| 				tag.register = true |  | ||||||
| 			} |  | ||||||
| 		default: |  | ||||||
| 			klog.Fatalf("Unsupported %s param: %q", tagEnabledName, parts[i]) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return tag |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // TODO: This is created only to reduce number of changes in a single PR. |  | ||||||
| // Remove it and use PublicNamer instead. |  | ||||||
| func deepCopyNamer() *namer.NameStrategy { |  | ||||||
| 	return &namer.NameStrategy{ |  | ||||||
| 		Join: func(pre string, in []string, post string) string { |  | ||||||
| 			return strings.Join(in, "_") |  | ||||||
| 		}, |  | ||||||
| 		PrependPackageNames: 1, |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // NameSystems returns the name system used by the generators in this package. |  | ||||||
| func NameSystems() namer.NameSystems { |  | ||||||
| 	return namer.NameSystems{ |  | ||||||
| 		"public": deepCopyNamer(), |  | ||||||
| 		"raw":    namer.NewRawNamer("", nil), |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // DefaultNameSystem returns the default name system for ordering the types to be |  | ||||||
| // processed by the generators in this package. |  | ||||||
| func DefaultNameSystem() string { |  | ||||||
| 	return "public" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func Packages(context *generator.Context, arguments *args.GeneratorArgs) generator.Packages { |  | ||||||
| 	boilerplate, err := arguments.LoadGoBoilerplate() |  | ||||||
| 	if err != nil { |  | ||||||
| 		klog.Fatalf("Failed loading boilerplate: %v", err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	inputs := sets.NewString(context.Inputs...) |  | ||||||
| 	packages := generator.Packages{} |  | ||||||
| 	header := append([]byte(fmt.Sprintf("//go:build !%s\n// +build !%s\n\n", arguments.GeneratedBuildTag, arguments.GeneratedBuildTag)), boilerplate...) |  | ||||||
|  |  | ||||||
| 	boundingDirs := []string{} |  | ||||||
| 	if customArgs, ok := arguments.CustomArgs.(*CustomArgs); ok { |  | ||||||
| 		if customArgs.BoundingDirs == nil { |  | ||||||
| 			customArgs.BoundingDirs = context.Inputs |  | ||||||
| 		} |  | ||||||
| 		for i := range customArgs.BoundingDirs { |  | ||||||
| 			// Strip any trailing slashes - they are not exactly "correct" but |  | ||||||
| 			// this is friendlier. |  | ||||||
| 			boundingDirs = append(boundingDirs, strings.TrimRight(customArgs.BoundingDirs[i], "/")) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	for i := range inputs { |  | ||||||
| 		klog.V(5).Infof("Considering pkg %q", i) |  | ||||||
| 		pkg := context.Universe[i] |  | ||||||
| 		if pkg == nil { |  | ||||||
| 			// If the input had no Go files, for example. |  | ||||||
| 			continue |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		ptag := extractEnabledTag(pkg.Comments) |  | ||||||
| 		ptagValue := "" |  | ||||||
| 		ptagRegister := false |  | ||||||
| 		if ptag != nil { |  | ||||||
| 			ptagValue = ptag.value |  | ||||||
| 			if ptagValue != tagValuePackage { |  | ||||||
| 				klog.Fatalf("Package %v: unsupported %s value: %q", i, tagEnabledName, ptagValue) |  | ||||||
| 			} |  | ||||||
| 			ptagRegister = ptag.register |  | ||||||
| 			klog.V(5).Infof("  tag.value: %q, tag.register: %t", ptagValue, ptagRegister) |  | ||||||
| 		} else { |  | ||||||
| 			klog.V(5).Infof("  no tag") |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		// If the pkg-scoped tag says to generate, we can skip scanning types. |  | ||||||
| 		pkgNeedsGeneration := (ptagValue == tagValuePackage) |  | ||||||
| 		if !pkgNeedsGeneration { |  | ||||||
| 			// If the pkg-scoped tag did not exist, scan all types for one that |  | ||||||
| 			// explicitly wants generation. Ensure all types that want generation |  | ||||||
| 			// can be copied. |  | ||||||
| 			var uncopyable []string |  | ||||||
| 			for _, t := range pkg.Types { |  | ||||||
| 				klog.V(5).Infof("  considering type %q", t.Name.String()) |  | ||||||
| 				ttag := extractEnabledTypeTag(t) |  | ||||||
| 				if ttag != nil && ttag.value == "true" { |  | ||||||
| 					klog.V(5).Infof("    tag=true") |  | ||||||
| 					if !copyableType(t) { |  | ||||||
| 						uncopyable = append(uncopyable, fmt.Sprintf("%v", t)) |  | ||||||
| 					} else { |  | ||||||
| 						pkgNeedsGeneration = true |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 			if len(uncopyable) > 0 { |  | ||||||
| 				klog.Fatalf("Types requested deepcopy generation but are not copyable: %s", |  | ||||||
| 					strings.Join(uncopyable, ", ")) |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		if pkgNeedsGeneration { |  | ||||||
| 			klog.V(3).Infof("Package %q needs generation", i) |  | ||||||
| 			path := pkg.Path |  | ||||||
| 			// if the source path is within a /vendor/ directory (for example, |  | ||||||
| 			// k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/meta/v1), allow |  | ||||||
| 			// generation to output to the proper relative path (under vendor). |  | ||||||
| 			// Otherwise, the generator will create the file in the wrong location |  | ||||||
| 			// in the output directory. |  | ||||||
| 			// TODO: build a more fundamental concept in gengo for dealing with modifications |  | ||||||
| 			// to vendored packages. |  | ||||||
| 			if strings.HasPrefix(pkg.SourcePath, arguments.OutputBase) { |  | ||||||
| 				expandedPath := strings.TrimPrefix(pkg.SourcePath, arguments.OutputBase) |  | ||||||
| 				if strings.Contains(expandedPath, "/vendor/") { |  | ||||||
| 					path = expandedPath |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 			packages = append(packages, |  | ||||||
| 				&generator.DefaultPackage{ |  | ||||||
| 					PackageName: strings.Split(filepath.Base(pkg.Path), ".")[0], |  | ||||||
| 					PackagePath: path, |  | ||||||
| 					HeaderText:  header, |  | ||||||
| 					GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { |  | ||||||
| 						return []generator.Generator{ |  | ||||||
| 							NewGenDeepCopy(arguments.OutputFileBaseName, pkg.Path, boundingDirs, (ptagValue == tagValuePackage), ptagRegister), |  | ||||||
| 						} |  | ||||||
| 					}, |  | ||||||
| 					FilterFunc: func(c *generator.Context, t *types.Type) bool { |  | ||||||
| 						return t.Name.Package == pkg.Path |  | ||||||
| 					}, |  | ||||||
| 				}) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return packages |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // genDeepCopy produces a file with autogenerated deep-copy functions. |  | ||||||
| type genDeepCopy struct { |  | ||||||
| 	generator.DefaultGen |  | ||||||
| 	targetPackage string |  | ||||||
| 	boundingDirs  []string |  | ||||||
| 	allTypes      bool |  | ||||||
| 	registerTypes bool |  | ||||||
| 	imports       namer.ImportTracker |  | ||||||
| 	typesForInit  []*types.Type |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func NewGenDeepCopy(sanitizedName, targetPackage string, boundingDirs []string, allTypes, registerTypes bool) generator.Generator { |  | ||||||
| 	return &genDeepCopy{ |  | ||||||
| 		DefaultGen: generator.DefaultGen{ |  | ||||||
| 			OptionalName: sanitizedName, |  | ||||||
| 		}, |  | ||||||
| 		targetPackage: targetPackage, |  | ||||||
| 		boundingDirs:  boundingDirs, |  | ||||||
| 		allTypes:      allTypes, |  | ||||||
| 		registerTypes: registerTypes, |  | ||||||
| 		imports:       generator.NewImportTracker(), |  | ||||||
| 		typesForInit:  make([]*types.Type, 0), |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (g *genDeepCopy) Namers(c *generator.Context) namer.NameSystems { |  | ||||||
| 	// Have the raw namer for this file track what it imports. |  | ||||||
| 	return namer.NameSystems{ |  | ||||||
| 		"raw": namer.NewRawNamer(g.targetPackage, g.imports), |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (g *genDeepCopy) Filter(c *generator.Context, t *types.Type) bool { |  | ||||||
| 	// Filter out types not being processed or not copyable within the package. |  | ||||||
| 	enabled := g.allTypes |  | ||||||
| 	if !enabled { |  | ||||||
| 		ttag := extractEnabledTypeTag(t) |  | ||||||
| 		if ttag != nil && ttag.value == "true" { |  | ||||||
| 			enabled = true |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	if !enabled { |  | ||||||
| 		return false |  | ||||||
| 	} |  | ||||||
| 	if !copyableType(t) { |  | ||||||
| 		klog.V(2).Infof("Type %v is not copyable", t) |  | ||||||
| 		return false |  | ||||||
| 	} |  | ||||||
| 	klog.V(4).Infof("Type %v is copyable", t) |  | ||||||
| 	g.typesForInit = append(g.typesForInit, t) |  | ||||||
| 	return true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (g *genDeepCopy) copyableAndInBounds(t *types.Type) bool { |  | ||||||
| 	if !copyableType(t) { |  | ||||||
| 		return false |  | ||||||
| 	} |  | ||||||
| 	// Only packages within the restricted range can be processed. |  | ||||||
| 	if !isRootedUnder(t.Name.Package, g.boundingDirs) { |  | ||||||
| 		return false |  | ||||||
| 	} |  | ||||||
| 	return true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // deepCopyMethod returns the signature of a DeepCopy() method, nil or an error |  | ||||||
| // if the type does not match. This allows more efficient deep copy |  | ||||||
| // implementations to be defined by the type's author.  The correct signature |  | ||||||
| // for a type T is: |  | ||||||
| //    func (t T) DeepCopy() T |  | ||||||
| // or: |  | ||||||
| //    func (t *T) DeepCopy() *T |  | ||||||
| func deepCopyMethod(t *types.Type) (*types.Signature, error) { |  | ||||||
| 	f, found := t.Methods["DeepCopy"] |  | ||||||
| 	if !found { |  | ||||||
| 		return nil, nil |  | ||||||
| 	} |  | ||||||
| 	if len(f.Signature.Parameters) != 0 { |  | ||||||
| 		return nil, fmt.Errorf("type %v: invalid DeepCopy signature, expected no parameters", t) |  | ||||||
| 	} |  | ||||||
| 	if len(f.Signature.Results) != 1 { |  | ||||||
| 		return nil, fmt.Errorf("type %v: invalid DeepCopy signature, expected exactly one result", t) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	ptrResult := f.Signature.Results[0].Kind == types.Pointer && f.Signature.Results[0].Elem.Name == t.Name |  | ||||||
| 	nonPtrResult := f.Signature.Results[0].Name == t.Name |  | ||||||
|  |  | ||||||
| 	if !ptrResult && !nonPtrResult { |  | ||||||
| 		return nil, fmt.Errorf("type %v: invalid DeepCopy signature, expected to return %s or *%s", t, t.Name.Name, t.Name.Name) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	ptrRcvr := f.Signature.Receiver != nil && f.Signature.Receiver.Kind == types.Pointer && f.Signature.Receiver.Elem.Name == t.Name |  | ||||||
| 	nonPtrRcvr := f.Signature.Receiver != nil && f.Signature.Receiver.Name == t.Name |  | ||||||
|  |  | ||||||
| 	if ptrRcvr && !ptrResult { |  | ||||||
| 		return nil, fmt.Errorf("type %v: invalid DeepCopy signature, expected a *%s result for a *%s receiver", t, t.Name.Name, t.Name.Name) |  | ||||||
| 	} |  | ||||||
| 	if nonPtrRcvr && !nonPtrResult { |  | ||||||
| 		return nil, fmt.Errorf("type %v: invalid DeepCopy signature, expected a %s result for a %s receiver", t, t.Name.Name, t.Name.Name) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return f.Signature, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // deepCopyMethodOrDie returns the signatrue of a DeepCopy method, nil or calls klog.Fatalf |  | ||||||
| // if the type does not match. |  | ||||||
| func deepCopyMethodOrDie(t *types.Type) *types.Signature { |  | ||||||
| 	ret, err := deepCopyMethod(t) |  | ||||||
| 	if err != nil { |  | ||||||
| 		klog.Fatal(err) |  | ||||||
| 	} |  | ||||||
| 	return ret |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // deepCopyIntoMethod returns the signature of a DeepCopyInto() method, nil or an error |  | ||||||
| // if the type is wrong. DeepCopyInto allows more efficient deep copy |  | ||||||
| // implementations to be defined by the type's author.  The correct signature |  | ||||||
| // for a type T is: |  | ||||||
| //    func (t T) DeepCopyInto(t *T) |  | ||||||
| // or: |  | ||||||
| //    func (t *T) DeepCopyInto(t *T) |  | ||||||
| func deepCopyIntoMethod(t *types.Type) (*types.Signature, error) { |  | ||||||
| 	f, found := t.Methods["DeepCopyInto"] |  | ||||||
| 	if !found { |  | ||||||
| 		return nil, nil |  | ||||||
| 	} |  | ||||||
| 	if len(f.Signature.Parameters) != 1 { |  | ||||||
| 		return nil, fmt.Errorf("type %v: invalid DeepCopy signature, expected exactly one parameter", t) |  | ||||||
| 	} |  | ||||||
| 	if len(f.Signature.Results) != 0 { |  | ||||||
| 		return nil, fmt.Errorf("type %v: invalid DeepCopy signature, expected no result type", t) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	ptrParam := f.Signature.Parameters[0].Kind == types.Pointer && f.Signature.Parameters[0].Elem.Name == t.Name |  | ||||||
|  |  | ||||||
| 	if !ptrParam { |  | ||||||
| 		return nil, fmt.Errorf("type %v: invalid DeepCopy signature, expected parameter of type *%s", t, t.Name.Name) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	ptrRcvr := f.Signature.Receiver != nil && f.Signature.Receiver.Kind == types.Pointer && f.Signature.Receiver.Elem.Name == t.Name |  | ||||||
| 	nonPtrRcvr := f.Signature.Receiver != nil && f.Signature.Receiver.Name == t.Name |  | ||||||
|  |  | ||||||
| 	if !ptrRcvr && !nonPtrRcvr { |  | ||||||
| 		// this should never happen |  | ||||||
| 		return nil, fmt.Errorf("type %v: invalid DeepCopy signature, expected a receiver of type %s or *%s", t, t.Name.Name, t.Name.Name) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return f.Signature, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // deepCopyIntoMethodOrDie returns the signature of a DeepCopyInto() method, nil or calls klog.Fatalf |  | ||||||
| // if the type is wrong. |  | ||||||
| func deepCopyIntoMethodOrDie(t *types.Type) *types.Signature { |  | ||||||
| 	ret, err := deepCopyIntoMethod(t) |  | ||||||
| 	if err != nil { |  | ||||||
| 		klog.Fatal(err) |  | ||||||
| 	} |  | ||||||
| 	return ret |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func isRootedUnder(pkg string, roots []string) bool { |  | ||||||
| 	// Add trailing / to avoid false matches, e.g. foo/bar vs foo/barn.  This |  | ||||||
| 	// assumes that bounding dirs do not have trailing slashes. |  | ||||||
| 	pkg = pkg + "/" |  | ||||||
| 	for _, root := range roots { |  | ||||||
| 		if strings.HasPrefix(pkg, root+"/") { |  | ||||||
| 			return true |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func copyableType(t *types.Type) bool { |  | ||||||
| 	// If the type opts out of copy-generation, stop. |  | ||||||
| 	ttag := extractEnabledTypeTag(t) |  | ||||||
| 	if ttag != nil && ttag.value == "false" { |  | ||||||
| 		return false |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// Filter out private types. |  | ||||||
| 	if namer.IsPrivateGoName(t.Name.Name) { |  | ||||||
| 		return false |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if t.Kind == types.Alias { |  | ||||||
| 		// if the underlying built-in is not deepcopy-able, deepcopy is opt-in through definition of custom methods. |  | ||||||
| 		// Note that aliases of builtins, maps, slices can have deepcopy methods. |  | ||||||
| 		if deepCopyMethodOrDie(t) != nil || deepCopyIntoMethodOrDie(t) != nil { |  | ||||||
| 			return true |  | ||||||
| 		} else { |  | ||||||
| 			return t.Underlying.Kind != types.Builtin || copyableType(t.Underlying) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if t.Kind != types.Struct { |  | ||||||
| 		return false |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func underlyingType(t *types.Type) *types.Type { |  | ||||||
| 	for t.Kind == types.Alias { |  | ||||||
| 		t = t.Underlying |  | ||||||
| 	} |  | ||||||
| 	return t |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (g *genDeepCopy) isOtherPackage(pkg string) bool { |  | ||||||
| 	if pkg == g.targetPackage { |  | ||||||
| 		return false |  | ||||||
| 	} |  | ||||||
| 	if strings.HasSuffix(pkg, "\""+g.targetPackage+"\"") { |  | ||||||
| 		return false |  | ||||||
| 	} |  | ||||||
| 	return true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (g *genDeepCopy) Imports(c *generator.Context) (imports []string) { |  | ||||||
| 	importLines := []string{} |  | ||||||
| 	for _, singleImport := range g.imports.ImportLines() { |  | ||||||
| 		if g.isOtherPackage(singleImport) { |  | ||||||
| 			importLines = append(importLines, singleImport) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return importLines |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func argsFromType(ts ...*types.Type) generator.Args { |  | ||||||
| 	a := generator.Args{ |  | ||||||
| 		"type": ts[0], |  | ||||||
| 	} |  | ||||||
| 	for i, t := range ts { |  | ||||||
| 		a[fmt.Sprintf("type%d", i+1)] = t |  | ||||||
| 	} |  | ||||||
| 	return a |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (g *genDeepCopy) Init(c *generator.Context, w io.Writer) error { |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (g *genDeepCopy) needsGeneration(t *types.Type) bool { |  | ||||||
| 	tag := extractEnabledTypeTag(t) |  | ||||||
| 	tv := "" |  | ||||||
| 	if tag != nil { |  | ||||||
| 		tv = tag.value |  | ||||||
| 		if tv != "true" && tv != "false" { |  | ||||||
| 			klog.Fatalf("Type %v: unsupported %s value: %q", t, tagEnabledName, tag.value) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	if g.allTypes && tv == "false" { |  | ||||||
| 		// The whole package is being generated, but this type has opted out. |  | ||||||
| 		klog.V(5).Infof("Not generating for type %v because type opted out", t) |  | ||||||
| 		return false |  | ||||||
| 	} |  | ||||||
| 	if !g.allTypes && tv != "true" { |  | ||||||
| 		// The whole package is NOT being generated, and this type has NOT opted in. |  | ||||||
| 		klog.V(5).Infof("Not generating for type %v because type did not opt in", t) |  | ||||||
| 		return false |  | ||||||
| 	} |  | ||||||
| 	return true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func extractInterfacesTag(t *types.Type) []string { |  | ||||||
| 	var result []string |  | ||||||
| 	comments := append(append([]string{}, t.SecondClosestCommentLines...), t.CommentLines...) |  | ||||||
| 	values := types.ExtractCommentTags("+", comments)[interfacesTagName] |  | ||||||
| 	for _, v := range values { |  | ||||||
| 		if len(v) == 0 { |  | ||||||
| 			continue |  | ||||||
| 		} |  | ||||||
| 		intfs := strings.Split(v, ",") |  | ||||||
| 		for _, intf := range intfs { |  | ||||||
| 			if intf == "" { |  | ||||||
| 				continue |  | ||||||
| 			} |  | ||||||
| 			result = append(result, intf) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func extractNonPointerInterfaces(t *types.Type) (bool, error) { |  | ||||||
| 	comments := append(append([]string{}, t.SecondClosestCommentLines...), t.CommentLines...) |  | ||||||
| 	values := types.ExtractCommentTags("+", comments)[interfacesNonPointerTagName] |  | ||||||
| 	if len(values) == 0 { |  | ||||||
| 		return false, nil |  | ||||||
| 	} |  | ||||||
| 	result := values[0] == "true" |  | ||||||
| 	for _, v := range values { |  | ||||||
| 		if v == "true" != result { |  | ||||||
| 			return false, fmt.Errorf("contradicting %v value %q found to previous value %v", interfacesNonPointerTagName, v, result) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return result, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (g *genDeepCopy) deepCopyableInterfacesInner(c *generator.Context, t *types.Type) ([]*types.Type, error) { |  | ||||||
| 	if t.Kind != types.Struct { |  | ||||||
| 		return nil, nil |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	intfs := extractInterfacesTag(t) |  | ||||||
|  |  | ||||||
| 	var ts []*types.Type |  | ||||||
| 	for _, intf := range intfs { |  | ||||||
| 		t := types.ParseFullyQualifiedName(intf) |  | ||||||
| 		err := c.AddDir(t.Package) |  | ||||||
| 		if err != nil { |  | ||||||
| 			return nil, err |  | ||||||
| 		} |  | ||||||
| 		intfT := c.Universe.Type(t) |  | ||||||
| 		if intfT == nil { |  | ||||||
| 			return nil, fmt.Errorf("unknown type %q in %s tag of type %s", intf, interfacesTagName, intfT) |  | ||||||
| 		} |  | ||||||
| 		if intfT.Kind != types.Interface { |  | ||||||
| 			return nil, fmt.Errorf("type %q in %s tag of type %s is not an interface, but: %q", intf, interfacesTagName, t, intfT.Kind) |  | ||||||
| 		} |  | ||||||
| 		g.imports.AddType(intfT) |  | ||||||
| 		ts = append(ts, intfT) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return ts, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // deepCopyableInterfaces returns the interface types to implement and whether they apply to a non-pointer receiver. |  | ||||||
| func (g *genDeepCopy) deepCopyableInterfaces(c *generator.Context, t *types.Type) ([]*types.Type, bool, error) { |  | ||||||
| 	ts, err := g.deepCopyableInterfacesInner(c, t) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, false, err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	set := map[string]*types.Type{} |  | ||||||
| 	for _, t := range ts { |  | ||||||
| 		set[t.String()] = t |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	result := []*types.Type{} |  | ||||||
| 	for _, t := range set { |  | ||||||
| 		result = append(result, t) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	TypeSlice(result).Sort() // we need a stable sorting because it determines the order in generation |  | ||||||
|  |  | ||||||
| 	nonPointerReceiver, err := extractNonPointerInterfaces(t) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, false, err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return result, nonPointerReceiver, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type TypeSlice []*types.Type |  | ||||||
|  |  | ||||||
| func (s TypeSlice) Len() int           { return len(s) } |  | ||||||
| func (s TypeSlice) Less(i, j int) bool { return s[i].String() < s[j].String() } |  | ||||||
| func (s TypeSlice) Swap(i, j int)      { s[i], s[j] = s[j], s[i] } |  | ||||||
| func (s TypeSlice) Sort()              { sort.Sort(s) } |  | ||||||
|  |  | ||||||
| func (g *genDeepCopy) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { |  | ||||||
| 	if !g.needsGeneration(t) { |  | ||||||
| 		return nil |  | ||||||
| 	} |  | ||||||
| 	klog.V(5).Infof("Generating deepcopy function for type %v", t) |  | ||||||
|  |  | ||||||
| 	sw := generator.NewSnippetWriter(w, c, "$", "$") |  | ||||||
| 	args := argsFromType(t) |  | ||||||
|  |  | ||||||
| 	if deepCopyIntoMethodOrDie(t) == nil { |  | ||||||
| 		sw.Do("// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\n", args) |  | ||||||
| 		if isReference(t) { |  | ||||||
| 			sw.Do("func (in $.type|raw$) DeepCopyInto(out *$.type|raw$) {\n", args) |  | ||||||
| 			sw.Do("{in:=&in\n", nil) |  | ||||||
| 		} else { |  | ||||||
| 			sw.Do("func (in *$.type|raw$) DeepCopyInto(out *$.type|raw$) {\n", args) |  | ||||||
| 		} |  | ||||||
| 		if deepCopyMethodOrDie(t) != nil { |  | ||||||
| 			if t.Methods["DeepCopy"].Signature.Receiver.Kind == types.Pointer { |  | ||||||
| 				sw.Do("clone := in.DeepCopy()\n", nil) |  | ||||||
| 				sw.Do("*out = *clone\n", nil) |  | ||||||
| 			} else { |  | ||||||
| 				sw.Do("*out = in.DeepCopy()\n", nil) |  | ||||||
| 			} |  | ||||||
| 			sw.Do("return\n", nil) |  | ||||||
| 		} else { |  | ||||||
| 			g.generateFor(t, sw) |  | ||||||
| 			sw.Do("return\n", nil) |  | ||||||
| 		} |  | ||||||
| 		if isReference(t) { |  | ||||||
| 			sw.Do("}\n", nil) |  | ||||||
| 		} |  | ||||||
| 		sw.Do("}\n\n", nil) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if deepCopyMethodOrDie(t) == nil { |  | ||||||
| 		sw.Do("// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new $.type|raw$.\n", args) |  | ||||||
| 		if isReference(t) { |  | ||||||
| 			sw.Do("func (in $.type|raw$) DeepCopy() $.type|raw$ {\n", args) |  | ||||||
| 		} else { |  | ||||||
| 			sw.Do("func (in *$.type|raw$) DeepCopy() *$.type|raw$ {\n", args) |  | ||||||
| 		} |  | ||||||
| 		sw.Do("if in == nil { return nil }\n", nil) |  | ||||||
| 		sw.Do("out := new($.type|raw$)\n", args) |  | ||||||
| 		sw.Do("in.DeepCopyInto(out)\n", nil) |  | ||||||
| 		if isReference(t) { |  | ||||||
| 			sw.Do("return *out\n", nil) |  | ||||||
| 		} else { |  | ||||||
| 			sw.Do("return out\n", nil) |  | ||||||
| 		} |  | ||||||
| 		sw.Do("}\n\n", nil) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	intfs, nonPointerReceiver, err := g.deepCopyableInterfaces(c, t) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	for _, intf := range intfs { |  | ||||||
| 		sw.Do(fmt.Sprintf("// DeepCopy%s is an autogenerated deepcopy function, copying the receiver, creating a new $.type2|raw$.\n", intf.Name.Name), argsFromType(t, intf)) |  | ||||||
| 		if nonPointerReceiver { |  | ||||||
| 			sw.Do(fmt.Sprintf("func (in $.type|raw$) DeepCopy%s() $.type2|raw$ {\n", intf.Name.Name), argsFromType(t, intf)) |  | ||||||
| 			sw.Do("return *in.DeepCopy()", nil) |  | ||||||
| 			sw.Do("}\n\n", nil) |  | ||||||
| 		} else { |  | ||||||
| 			sw.Do(fmt.Sprintf("func (in *$.type|raw$) DeepCopy%s() $.type2|raw$ {\n", intf.Name.Name), argsFromType(t, intf)) |  | ||||||
| 			sw.Do("if c := in.DeepCopy(); c != nil {\n", nil) |  | ||||||
| 			sw.Do("return c\n", nil) |  | ||||||
| 			sw.Do("}\n", nil) |  | ||||||
| 			sw.Do("return nil\n", nil) |  | ||||||
| 			sw.Do("}\n\n", nil) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return sw.Error() |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // isReference return true for pointer, maps, slices and aliases of those. |  | ||||||
| func isReference(t *types.Type) bool { |  | ||||||
| 	if t.Kind == types.Pointer || t.Kind == types.Map || t.Kind == types.Slice { |  | ||||||
| 		return true |  | ||||||
| 	} |  | ||||||
| 	return t.Kind == types.Alias && isReference(underlyingType(t)) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // we use the system of shadowing 'in' and 'out' so that the same code is valid |  | ||||||
| // at any nesting level. This makes the autogenerator easy to understand, and |  | ||||||
| // the compiler shouldn't care. |  | ||||||
| func (g *genDeepCopy) generateFor(t *types.Type, sw *generator.SnippetWriter) { |  | ||||||
| 	// derive inner types if t is an alias. We call the do* methods below with the alias type. |  | ||||||
| 	// basic rule: generate according to inner type, but construct objects with the alias type. |  | ||||||
| 	ut := underlyingType(t) |  | ||||||
|  |  | ||||||
| 	var f func(*types.Type, *generator.SnippetWriter) |  | ||||||
| 	switch ut.Kind { |  | ||||||
| 	case types.Builtin: |  | ||||||
| 		f = g.doBuiltin |  | ||||||
| 	case types.Map: |  | ||||||
| 		f = g.doMap |  | ||||||
| 	case types.Slice: |  | ||||||
| 		f = g.doSlice |  | ||||||
| 	case types.Struct: |  | ||||||
| 		f = g.doStruct |  | ||||||
| 	case types.Pointer: |  | ||||||
| 		f = g.doPointer |  | ||||||
| 	case types.Interface: |  | ||||||
| 		// interfaces are handled in-line in the other cases |  | ||||||
| 		klog.Fatalf("Hit an interface type %v. This should never happen.", t) |  | ||||||
| 	case types.Alias: |  | ||||||
| 		// can never happen because we branch on the underlying type which is never an alias |  | ||||||
| 		klog.Fatalf("Hit an alias type %v. This should never happen.", t) |  | ||||||
| 	default: |  | ||||||
| 		klog.Fatalf("Hit an unsupported type %v.", t) |  | ||||||
| 	} |  | ||||||
| 	f(t, sw) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // doBuiltin generates code for a builtin or an alias to a builtin. The generated code is |  | ||||||
| // is the same for both cases, i.e. it's the code for the underlying type. |  | ||||||
| func (g *genDeepCopy) doBuiltin(t *types.Type, sw *generator.SnippetWriter) { |  | ||||||
| 	if deepCopyMethodOrDie(t) != nil || deepCopyIntoMethodOrDie(t) != nil { |  | ||||||
| 		sw.Do("*out = in.DeepCopy()\n", nil) |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	sw.Do("*out = *in\n", nil) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // doMap generates code for a map or an alias to a map. The generated code is |  | ||||||
| // is the same for both cases, i.e. it's the code for the underlying type. |  | ||||||
| func (g *genDeepCopy) doMap(t *types.Type, sw *generator.SnippetWriter) { |  | ||||||
| 	ut := underlyingType(t) |  | ||||||
| 	uet := underlyingType(ut.Elem) |  | ||||||
|  |  | ||||||
| 	if deepCopyMethodOrDie(t) != nil || deepCopyIntoMethodOrDie(t) != nil { |  | ||||||
| 		sw.Do("*out = in.DeepCopy()\n", nil) |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if !ut.Key.IsAssignable() { |  | ||||||
| 		klog.Fatalf("Hit an unsupported type %v for: %v", uet, t) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	sw.Do("*out = make($.|raw$, len(*in))\n", t) |  | ||||||
| 	sw.Do("for key, val := range *in {\n", nil) |  | ||||||
| 	dc, dci := deepCopyMethodOrDie(ut.Elem), deepCopyIntoMethodOrDie(ut.Elem) |  | ||||||
| 	switch { |  | ||||||
| 	case dc != nil || dci != nil: |  | ||||||
| 		// Note: a DeepCopy exists because it is added if DeepCopyInto is manually defined |  | ||||||
| 		leftPointer := ut.Elem.Kind == types.Pointer |  | ||||||
| 		rightPointer := !isReference(ut.Elem) |  | ||||||
| 		if dc != nil { |  | ||||||
| 			rightPointer = dc.Results[0].Kind == types.Pointer |  | ||||||
| 		} |  | ||||||
| 		if leftPointer == rightPointer { |  | ||||||
| 			sw.Do("(*out)[key] = val.DeepCopy()\n", nil) |  | ||||||
| 		} else if leftPointer { |  | ||||||
| 			sw.Do("x := val.DeepCopy()\n", nil) |  | ||||||
| 			sw.Do("(*out)[key] = &x\n", nil) |  | ||||||
| 		} else { |  | ||||||
| 			sw.Do("(*out)[key] = *val.DeepCopy()\n", nil) |  | ||||||
| 		} |  | ||||||
| 	case ut.Elem.IsAnonymousStruct(): // not uet here because it needs type cast |  | ||||||
| 		sw.Do("(*out)[key] = val\n", nil) |  | ||||||
| 	case uet.IsAssignable(): |  | ||||||
| 		sw.Do("(*out)[key] = val\n", nil) |  | ||||||
| 	case uet.Kind == types.Interface: |  | ||||||
| 		// Note: do not generate code that won't compile as `DeepCopyinterface{}()` is not a valid function |  | ||||||
| 		if uet.Name.Name == "interface{}" { |  | ||||||
| 			klog.Fatalf("DeepCopy of %q is unsupported. Instead, use named interfaces with DeepCopy<named-interface> as one of the methods.", uet.Name.Name) |  | ||||||
| 		} |  | ||||||
| 		sw.Do("if val == nil {(*out)[key]=nil} else {\n", nil) |  | ||||||
| 		// Note: if t.Elem has been an alias "J" of an interface "I" in Go, we will see it |  | ||||||
| 		// as kind Interface of name "J" here, i.e. generate val.DeepCopyJ(). The golang |  | ||||||
| 		// parser does not give us the underlying interface name. So we cannot do any better. |  | ||||||
| 		sw.Do(fmt.Sprintf("(*out)[key] = val.DeepCopy%s()\n", uet.Name.Name), nil) |  | ||||||
| 		sw.Do("}\n", nil) |  | ||||||
| 	case uet.Kind == types.Slice || uet.Kind == types.Map || uet.Kind == types.Pointer: |  | ||||||
| 		sw.Do("var outVal $.|raw$\n", uet) |  | ||||||
| 		sw.Do("if val == nil { (*out)[key] = nil } else {\n", nil) |  | ||||||
| 		sw.Do("in, out := &val, &outVal\n", uet) |  | ||||||
| 		g.generateFor(ut.Elem, sw) |  | ||||||
| 		sw.Do("}\n", nil) |  | ||||||
| 		sw.Do("(*out)[key] = outVal\n", nil) |  | ||||||
| 	case uet.Kind == types.Struct: |  | ||||||
| 		sw.Do("(*out)[key] = *val.DeepCopy()\n", uet) |  | ||||||
| 	default: |  | ||||||
| 		klog.Fatalf("Hit an unsupported type %v for %v", uet, t) |  | ||||||
| 	} |  | ||||||
| 	sw.Do("}\n", nil) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // doSlice generates code for a slice or an alias to a slice. The generated code is |  | ||||||
| // is the same for both cases, i.e. it's the code for the underlying type. |  | ||||||
| func (g *genDeepCopy) doSlice(t *types.Type, sw *generator.SnippetWriter) { |  | ||||||
| 	ut := underlyingType(t) |  | ||||||
| 	uet := underlyingType(ut.Elem) |  | ||||||
|  |  | ||||||
| 	if deepCopyMethodOrDie(t) != nil || deepCopyIntoMethodOrDie(t) != nil { |  | ||||||
| 		sw.Do("*out = in.DeepCopy()\n", nil) |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	sw.Do("*out = make($.|raw$, len(*in))\n", t) |  | ||||||
| 	if deepCopyMethodOrDie(ut.Elem) != nil || deepCopyIntoMethodOrDie(ut.Elem) != nil { |  | ||||||
| 		sw.Do("for i := range *in {\n", nil) |  | ||||||
| 		// Note: a DeepCopyInto exists because it is added if DeepCopy is manually defined |  | ||||||
| 		sw.Do("(*in)[i].DeepCopyInto(&(*out)[i])\n", nil) |  | ||||||
| 		sw.Do("}\n", nil) |  | ||||||
| 	} else if uet.Kind == types.Builtin || uet.IsAssignable() { |  | ||||||
| 		sw.Do("copy(*out, *in)\n", nil) |  | ||||||
| 	} else { |  | ||||||
| 		sw.Do("for i := range *in {\n", nil) |  | ||||||
| 		if uet.Kind == types.Slice || uet.Kind == types.Map || uet.Kind == types.Pointer || deepCopyMethodOrDie(ut.Elem) != nil || deepCopyIntoMethodOrDie(ut.Elem) != nil { |  | ||||||
| 			sw.Do("if (*in)[i] != nil {\n", nil) |  | ||||||
| 			sw.Do("in, out := &(*in)[i], &(*out)[i]\n", nil) |  | ||||||
| 			g.generateFor(ut.Elem, sw) |  | ||||||
| 			sw.Do("}\n", nil) |  | ||||||
| 		} else if uet.Kind == types.Interface { |  | ||||||
| 			// Note: do not generate code that won't compile as `DeepCopyinterface{}()` is not a valid function |  | ||||||
| 			if uet.Name.Name == "interface{}" { |  | ||||||
| 				klog.Fatalf("DeepCopy of %q is unsupported. Instead, use named interfaces with DeepCopy<named-interface> as one of the methods.", uet.Name.Name) |  | ||||||
| 			} |  | ||||||
| 			sw.Do("if (*in)[i] != nil {\n", nil) |  | ||||||
| 			// Note: if t.Elem has been an alias "J" of an interface "I" in Go, we will see it |  | ||||||
| 			// as kind Interface of name "J" here, i.e. generate val.DeepCopyJ(). The golang |  | ||||||
| 			// parser does not give us the underlying interface name. So we cannot do any better. |  | ||||||
| 			sw.Do(fmt.Sprintf("(*out)[i] = (*in)[i].DeepCopy%s()\n", uet.Name.Name), nil) |  | ||||||
| 			sw.Do("}\n", nil) |  | ||||||
| 		} else if uet.Kind == types.Struct { |  | ||||||
| 			sw.Do("(*in)[i].DeepCopyInto(&(*out)[i])\n", nil) |  | ||||||
| 		} else { |  | ||||||
| 			klog.Fatalf("Hit an unsupported type %v for %v", uet, t) |  | ||||||
| 		} |  | ||||||
| 		sw.Do("}\n", nil) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // doStruct generates code for a struct or an alias to a struct. The generated code is |  | ||||||
| // is the same for both cases, i.e. it's the code for the underlying type. |  | ||||||
| func (g *genDeepCopy) doStruct(t *types.Type, sw *generator.SnippetWriter) { |  | ||||||
| 	ut := underlyingType(t) |  | ||||||
|  |  | ||||||
| 	if deepCopyMethodOrDie(t) != nil || deepCopyIntoMethodOrDie(t) != nil { |  | ||||||
| 		sw.Do("*out = in.DeepCopy()\n", nil) |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// Simple copy covers a lot of cases. |  | ||||||
| 	sw.Do("*out = *in\n", nil) |  | ||||||
|  |  | ||||||
| 	// Now fix-up fields as needed. |  | ||||||
| 	for _, m := range ut.Members { |  | ||||||
| 		ft := m.Type |  | ||||||
| 		uft := underlyingType(ft) |  | ||||||
|  |  | ||||||
| 		args := generator.Args{ |  | ||||||
| 			"type": ft, |  | ||||||
| 			"kind": ft.Kind, |  | ||||||
| 			"name": m.Name, |  | ||||||
| 		} |  | ||||||
| 		dc, dci := deepCopyMethodOrDie(ft), deepCopyIntoMethodOrDie(ft) |  | ||||||
| 		switch { |  | ||||||
| 		case dc != nil || dci != nil: |  | ||||||
| 			// Note: a DeepCopyInto exists because it is added if DeepCopy is manually defined |  | ||||||
| 			leftPointer := ft.Kind == types.Pointer |  | ||||||
| 			rightPointer := !isReference(ft) |  | ||||||
| 			if dc != nil { |  | ||||||
| 				rightPointer = dc.Results[0].Kind == types.Pointer |  | ||||||
| 			} |  | ||||||
| 			if leftPointer == rightPointer { |  | ||||||
| 				sw.Do("out.$.name$ = in.$.name$.DeepCopy()\n", args) |  | ||||||
| 			} else if leftPointer { |  | ||||||
| 				sw.Do("x := in.$.name$.DeepCopy()\n", args) |  | ||||||
| 				sw.Do("out.$.name$ =  = &x\n", args) |  | ||||||
| 			} else { |  | ||||||
| 				sw.Do("in.$.name$.DeepCopyInto(&out.$.name$)\n", args) |  | ||||||
| 			} |  | ||||||
| 		case uft.Kind == types.Builtin: |  | ||||||
| 			// the initial *out = *in was enough |  | ||||||
| 		case uft.Kind == types.Map, uft.Kind == types.Slice, uft.Kind == types.Pointer: |  | ||||||
| 			// Fixup non-nil reference-semantic types. |  | ||||||
| 			sw.Do("if in.$.name$ != nil {\n", args) |  | ||||||
| 			sw.Do("in, out := &in.$.name$, &out.$.name$\n", args) |  | ||||||
| 			g.generateFor(ft, sw) |  | ||||||
| 			sw.Do("}\n", nil) |  | ||||||
| 		case uft.Kind == types.Array: |  | ||||||
| 			sw.Do("out.$.name$ = in.$.name$\n", args) |  | ||||||
| 		case uft.Kind == types.Struct: |  | ||||||
| 			if ft.IsAssignable() { |  | ||||||
| 				sw.Do("out.$.name$ = in.$.name$\n", args) |  | ||||||
| 			} else { |  | ||||||
| 				sw.Do("in.$.name$.DeepCopyInto(&out.$.name$)\n", args) |  | ||||||
| 			} |  | ||||||
| 		case uft.Kind == types.Interface: |  | ||||||
| 			// Note: do not generate code that won't compile as `DeepCopyinterface{}()` is not a valid function |  | ||||||
| 			if uft.Name.Name == "interface{}" { |  | ||||||
| 				klog.Fatalf("DeepCopy of %q is unsupported. Instead, use named interfaces with DeepCopy<named-interface> as one of the methods.", uft.Name.Name) |  | ||||||
| 			} |  | ||||||
| 			sw.Do("if in.$.name$ != nil {\n", args) |  | ||||||
| 			// Note: if t.Elem has been an alias "J" of an interface "I" in Go, we will see it |  | ||||||
| 			// as kind Interface of name "J" here, i.e. generate val.DeepCopyJ(). The golang |  | ||||||
| 			// parser does not give us the underlying interface name. So we cannot do any better. |  | ||||||
| 			sw.Do(fmt.Sprintf("out.$.name$ = in.$.name$.DeepCopy%s()\n", uft.Name.Name), args) |  | ||||||
| 			sw.Do("}\n", nil) |  | ||||||
| 		default: |  | ||||||
| 			klog.Fatalf("Hit an unsupported type %v for %v, from %v", uft, ft, t) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // doPointer generates code for a pointer or an alias to a pointer. The generated code is |  | ||||||
| // is the same for both cases, i.e. it's the code for the underlying type. |  | ||||||
| func (g *genDeepCopy) doPointer(t *types.Type, sw *generator.SnippetWriter) { |  | ||||||
| 	ut := underlyingType(t) |  | ||||||
| 	uet := underlyingType(ut.Elem) |  | ||||||
|  |  | ||||||
| 	dc, dci := deepCopyMethodOrDie(ut.Elem), deepCopyIntoMethodOrDie(ut.Elem) |  | ||||||
| 	switch { |  | ||||||
| 	case dc != nil || dci != nil: |  | ||||||
| 		rightPointer := !isReference(ut.Elem) |  | ||||||
| 		if dc != nil { |  | ||||||
| 			rightPointer = dc.Results[0].Kind == types.Pointer |  | ||||||
| 		} |  | ||||||
| 		if rightPointer { |  | ||||||
| 			sw.Do("*out = (*in).DeepCopy()\n", nil) |  | ||||||
| 		} else { |  | ||||||
| 			sw.Do("x := (*in).DeepCopy()\n", nil) |  | ||||||
| 			sw.Do("*out = &x\n", nil) |  | ||||||
| 		} |  | ||||||
| 	case uet.IsAssignable(): |  | ||||||
| 		sw.Do("*out = new($.Elem|raw$)\n", ut) |  | ||||||
| 		sw.Do("**out = **in", nil) |  | ||||||
| 	case uet.Kind == types.Map, uet.Kind == types.Slice, uet.Kind == types.Pointer: |  | ||||||
| 		sw.Do("*out = new($.Elem|raw$)\n", ut) |  | ||||||
| 		sw.Do("if **in != nil {\n", nil) |  | ||||||
| 		sw.Do("in, out := *in, *out\n", nil) |  | ||||||
| 		g.generateFor(uet, sw) |  | ||||||
| 		sw.Do("}\n", nil) |  | ||||||
| 	case uet.Kind == types.Struct: |  | ||||||
| 		sw.Do("*out = new($.Elem|raw$)\n", ut) |  | ||||||
| 		sw.Do("(*in).DeepCopyInto(*out)\n", nil) |  | ||||||
| 	default: |  | ||||||
| 		klog.Fatalf("Hit an unsupported type %v for %v", uet, t) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
							
								
								
									
										1260
									
								
								vendor/k8s.io/gengo/examples/defaulter-gen/generators/defaulter.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1260
									
								
								vendor/k8s.io/gengo/examples/defaulter-gen/generators/defaulter.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										443
									
								
								vendor/k8s.io/gengo/examples/import-boss/generators/import_restrict.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										443
									
								
								vendor/k8s.io/gengo/examples/import-boss/generators/import_restrict.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,443 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2016 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| // Package generators has the generators for the import-boss utility. |  | ||||||
| package generators |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"encoding/json" |  | ||||||
| 	"errors" |  | ||||||
| 	"fmt" |  | ||||||
| 	"io" |  | ||||||
| 	"io/ioutil" |  | ||||||
| 	"os" |  | ||||||
| 	"path/filepath" |  | ||||||
| 	"regexp" |  | ||||||
| 	"sort" |  | ||||||
| 	"strings" |  | ||||||
|  |  | ||||||
| 	"k8s.io/gengo/args" |  | ||||||
| 	"k8s.io/gengo/generator" |  | ||||||
| 	"k8s.io/gengo/namer" |  | ||||||
| 	"k8s.io/gengo/types" |  | ||||||
| 	"sigs.k8s.io/yaml" |  | ||||||
|  |  | ||||||
| 	"k8s.io/klog/v2" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| const ( |  | ||||||
| 	goModFile          = "go.mod" |  | ||||||
| 	importBossFileType = "import-boss" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // NameSystems returns the name system used by the generators in this package. |  | ||||||
| func NameSystems() namer.NameSystems { |  | ||||||
| 	return namer.NameSystems{ |  | ||||||
| 		"raw": namer.NewRawNamer("", nil), |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // DefaultNameSystem returns the default name system for ordering the types to be |  | ||||||
| // processed by the generators in this package. |  | ||||||
| func DefaultNameSystem() string { |  | ||||||
| 	return "raw" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Packages makes the import-boss package definition. |  | ||||||
| func Packages(c *generator.Context, arguments *args.GeneratorArgs) generator.Packages { |  | ||||||
| 	pkgs := generator.Packages{} |  | ||||||
| 	c.FileTypes = map[string]generator.FileType{ |  | ||||||
| 		importBossFileType: importRuleFile{c}, |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	for _, p := range c.Universe { |  | ||||||
| 		if !inputIncludes(arguments.InputDirs, p) { |  | ||||||
| 			// Don't run on e.g. third party dependencies. |  | ||||||
| 			continue |  | ||||||
| 		} |  | ||||||
| 		savedPackage := p |  | ||||||
| 		pkgs = append(pkgs, &generator.DefaultPackage{ |  | ||||||
| 			PackageName: p.Name, |  | ||||||
| 			PackagePath: p.Path, |  | ||||||
| 			Source:      p.SourcePath, |  | ||||||
| 			// GeneratorFunc returns a list of generators. Each generator makes a |  | ||||||
| 			// single file. |  | ||||||
| 			GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { |  | ||||||
| 				return []generator.Generator{&importRules{ |  | ||||||
| 					myPackage: savedPackage, |  | ||||||
| 				}} |  | ||||||
| 			}, |  | ||||||
| 			FilterFunc: func(c *generator.Context, t *types.Type) bool { |  | ||||||
| 				return false |  | ||||||
| 			}, |  | ||||||
| 		}) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return pkgs |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // inputIncludes returns true if the given package is a (sub) package of one of |  | ||||||
| // the InputDirs. |  | ||||||
| func inputIncludes(inputs []string, p *types.Package) bool { |  | ||||||
| 	// TODO: This does not handle conversion of local paths (./foo) into |  | ||||||
| 	// canonical packages (github.com/example/project/foo). |  | ||||||
| 	for _, input := range inputs { |  | ||||||
| 		// Normalize paths |  | ||||||
| 		input := strings.TrimSuffix(input, "/") |  | ||||||
| 		input = strings.TrimPrefix(input, "./vendor/") |  | ||||||
| 		seek := strings.TrimSuffix(p.Path, "/") |  | ||||||
|  |  | ||||||
| 		if input == seek { |  | ||||||
| 			return true |  | ||||||
| 		} |  | ||||||
| 		if strings.HasSuffix(input, "...") { |  | ||||||
| 			input = strings.TrimSuffix(input, "...") |  | ||||||
| 			if strings.HasPrefix(seek+"/", input) { |  | ||||||
| 				return true |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // A single import restriction rule. |  | ||||||
| type Rule struct { |  | ||||||
| 	// All import paths that match this regexp... |  | ||||||
| 	SelectorRegexp string |  | ||||||
| 	// ... must have one of these prefixes ... |  | ||||||
| 	AllowedPrefixes []string |  | ||||||
| 	// ... and must not have one of these prefixes. |  | ||||||
| 	ForbiddenPrefixes []string |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type InverseRule struct { |  | ||||||
| 	Rule |  | ||||||
| 	// True if the rule is to be applied to transitive imports. |  | ||||||
| 	Transitive bool |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type fileFormat struct { |  | ||||||
| 	CurrentImports []string |  | ||||||
|  |  | ||||||
| 	Rules        []Rule |  | ||||||
| 	InverseRules []InverseRule |  | ||||||
|  |  | ||||||
| 	path string |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func readFile(path string) (*fileFormat, error) { |  | ||||||
| 	currentBytes, err := ioutil.ReadFile(path) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, fmt.Errorf("couldn't read %v: %v", path, err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	var current fileFormat |  | ||||||
| 	err = yaml.Unmarshal(currentBytes, ¤t) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, fmt.Errorf("couldn't unmarshal %v: %v", path, err) |  | ||||||
| 	} |  | ||||||
| 	current.path = path |  | ||||||
| 	return ¤t, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func writeFile(path string, ff *fileFormat) error { |  | ||||||
| 	raw, err := json.MarshalIndent(ff, "", "\t") |  | ||||||
| 	if err != nil { |  | ||||||
| 		return fmt.Errorf("couldn't format data for file %v.\n%#v", path, ff) |  | ||||||
| 	} |  | ||||||
| 	f, err := os.Create(path) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return fmt.Errorf("couldn't open %v for writing: %v", path, err) |  | ||||||
| 	} |  | ||||||
| 	defer f.Close() |  | ||||||
| 	_, err = f.Write(raw) |  | ||||||
| 	return err |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // This does the actual checking, since it knows the literal destination file. |  | ||||||
| type importRuleFile struct { |  | ||||||
| 	context *generator.Context |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (irf importRuleFile) AssembleFile(f *generator.File, path string) error { |  | ||||||
| 	return irf.VerifyFile(f, path) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // TODO: make a flag to enable this, or expose this information in some other way. |  | ||||||
| func (importRuleFile) listEntireImportTree(f *generator.File, path string) error { |  | ||||||
| 	// If the file exists, populate its current imports. This is mostly to help |  | ||||||
| 	// humans figure out what they need to fix. |  | ||||||
| 	if _, err := os.Stat(path); err != nil { |  | ||||||
| 		// Ignore packages which haven't opted in by adding an .import-restrictions file. |  | ||||||
| 		return nil |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	current, err := readFile(path) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	current.CurrentImports = []string{} |  | ||||||
| 	for v := range f.Imports { |  | ||||||
| 		current.CurrentImports = append(current.CurrentImports, v) |  | ||||||
| 	} |  | ||||||
| 	sort.Strings(current.CurrentImports) |  | ||||||
|  |  | ||||||
| 	return writeFile(path, current) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // removeLastDir removes the last directory, but leaves the file name |  | ||||||
| // unchanged. It returns the new path and the removed directory. So: |  | ||||||
| // "a/b/c/file" -> ("a/b/file", "c") |  | ||||||
| func removeLastDir(path string) (newPath, removedDir string) { |  | ||||||
| 	dir, file := filepath.Split(path) |  | ||||||
| 	dir = strings.TrimSuffix(dir, string(filepath.Separator)) |  | ||||||
| 	return filepath.Join(filepath.Dir(dir), file), filepath.Base(dir) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // isGoModRoot checks if a directory is the root directory for a package |  | ||||||
| // by checking for the existence of a 'go.mod' file in that directory. |  | ||||||
| func isGoModRoot(path string) bool { |  | ||||||
| 	_, err := os.Stat(filepath.Join(filepath.Dir(path), goModFile)) |  | ||||||
| 	return err == nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // recursiveRead collects all '.import-restriction' files, between the current directory, |  | ||||||
| // and the package root when Go modules are enabled, or $GOPATH/src when they are not. |  | ||||||
| func recursiveRead(path string) ([]*fileFormat, error) { |  | ||||||
| 	restrictionFiles := make([]*fileFormat, 0) |  | ||||||
|  |  | ||||||
| 	for { |  | ||||||
| 		if _, err := os.Stat(path); err == nil { |  | ||||||
| 			rules, err := readFile(path) |  | ||||||
| 			if err != nil { |  | ||||||
| 				return nil, err |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			restrictionFiles = append(restrictionFiles, rules) |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		nextPath, removedDir := removeLastDir(path) |  | ||||||
| 		if nextPath == path || isGoModRoot(path) || removedDir == "src" { |  | ||||||
| 			break |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		path = nextPath |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return restrictionFiles, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (irf importRuleFile) VerifyFile(f *generator.File, path string) error { |  | ||||||
| 	restrictionFiles, err := recursiveRead(filepath.Join(f.PackageSourcePath, f.Name)) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return fmt.Errorf("error finding rules file: %v", err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if err := irf.verifyRules(restrictionFiles, f); err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return irf.verifyInverseRules(restrictionFiles, f) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (irf importRuleFile) verifyRules(restrictionFiles []*fileFormat, f *generator.File) error { |  | ||||||
| 	selectors := make([][]*regexp.Regexp, len(restrictionFiles)) |  | ||||||
| 	for i, restrictionFile := range restrictionFiles { |  | ||||||
| 		for _, r := range restrictionFile.Rules { |  | ||||||
| 			re, err := regexp.Compile(r.SelectorRegexp) |  | ||||||
| 			if err != nil { |  | ||||||
| 				return fmt.Errorf("regexp `%s` in file %q doesn't compile: %v", r.SelectorRegexp, restrictionFile.path, err) |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			selectors[i] = append(selectors[i], re) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	forbiddenImports := map[string]string{} |  | ||||||
| 	allowedMismatchedImports := []string{} |  | ||||||
|  |  | ||||||
| 	for v := range f.Imports { |  | ||||||
| 		explicitlyAllowed := false |  | ||||||
|  |  | ||||||
| 	NextRestrictionFiles: |  | ||||||
| 		for i, rules := range restrictionFiles { |  | ||||||
| 			for j, r := range rules.Rules { |  | ||||||
| 				matching := selectors[i][j].MatchString(v) |  | ||||||
| 				klog.V(5).Infof("Checking %v matches %v: %v\n", r.SelectorRegexp, v, matching) |  | ||||||
| 				if !matching { |  | ||||||
| 					continue |  | ||||||
| 				} |  | ||||||
| 				for _, forbidden := range r.ForbiddenPrefixes { |  | ||||||
| 					klog.V(4).Infof("Checking %v against %v\n", v, forbidden) |  | ||||||
| 					if strings.HasPrefix(v, forbidden) { |  | ||||||
| 						forbiddenImports[v] = forbidden |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 				for _, allowed := range r.AllowedPrefixes { |  | ||||||
| 					klog.V(4).Infof("Checking %v against %v\n", v, allowed) |  | ||||||
| 					if strings.HasPrefix(v, allowed) { |  | ||||||
| 						explicitlyAllowed = true |  | ||||||
| 						break |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
|  |  | ||||||
| 				if !explicitlyAllowed { |  | ||||||
| 					allowedMismatchedImports = append(allowedMismatchedImports, v) |  | ||||||
| 				} else { |  | ||||||
| 					klog.V(2).Infof("%v importing %v allowed by %v\n", f.PackagePath, v, restrictionFiles[i].path) |  | ||||||
| 					break NextRestrictionFiles |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if len(forbiddenImports) > 0 || len(allowedMismatchedImports) > 0 { |  | ||||||
| 		var errorBuilder strings.Builder |  | ||||||
| 		for i, f := range forbiddenImports { |  | ||||||
| 			fmt.Fprintf(&errorBuilder, "import %v has forbidden prefix %v\n", i, f) |  | ||||||
| 		} |  | ||||||
| 		if len(allowedMismatchedImports) > 0 { |  | ||||||
| 			sort.Sort(sort.StringSlice(allowedMismatchedImports)) |  | ||||||
| 			fmt.Fprintf(&errorBuilder, "the following imports did not match any allowed prefix:\n") |  | ||||||
| 			for _, i := range allowedMismatchedImports { |  | ||||||
| 				fmt.Fprintf(&errorBuilder, "  %v\n", i) |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		return errors.New(errorBuilder.String()) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // verifyInverseRules checks that all packages that import a package are allowed to import it. |  | ||||||
| func (irf importRuleFile) verifyInverseRules(restrictionFiles []*fileFormat, f *generator.File) error { |  | ||||||
| 	// compile all Selector regex in all restriction files |  | ||||||
| 	selectors := make([][]*regexp.Regexp, len(restrictionFiles)) |  | ||||||
| 	for i, restrictionFile := range restrictionFiles { |  | ||||||
| 		for _, r := range restrictionFile.InverseRules { |  | ||||||
| 			re, err := regexp.Compile(r.SelectorRegexp) |  | ||||||
| 			if err != nil { |  | ||||||
| 				return fmt.Errorf("regexp `%s` in file %q doesn't compile: %v", r.SelectorRegexp, restrictionFile.path, err) |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			selectors[i] = append(selectors[i], re) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	directImport := map[string]bool{} |  | ||||||
| 	for _, imp := range irf.context.IncomingImports()[f.PackagePath] { |  | ||||||
| 		directImport[imp] = true |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	forbiddenImports := map[string]string{} |  | ||||||
| 	allowedMismatchedImports := []string{} |  | ||||||
|  |  | ||||||
| 	for _, v := range irf.context.TransitiveIncomingImports()[f.PackagePath] { |  | ||||||
| 		explicitlyAllowed := false |  | ||||||
|  |  | ||||||
| 	NextRestrictionFiles: |  | ||||||
| 		for i, rules := range restrictionFiles { |  | ||||||
| 			for j, r := range rules.InverseRules { |  | ||||||
| 				if !r.Transitive && !directImport[v] { |  | ||||||
| 					continue |  | ||||||
| 				} |  | ||||||
|  |  | ||||||
| 				re := selectors[i][j] |  | ||||||
| 				matching := re.MatchString(v) |  | ||||||
| 				klog.V(4).Infof("Checking %v matches %v (importing %v: %v\n", r.SelectorRegexp, v, f.PackagePath, matching) |  | ||||||
| 				if !matching { |  | ||||||
| 					continue |  | ||||||
| 				} |  | ||||||
| 				for _, forbidden := range r.ForbiddenPrefixes { |  | ||||||
| 					klog.V(4).Infof("Checking %v against %v\n", v, forbidden) |  | ||||||
| 					if strings.HasPrefix(v, forbidden) { |  | ||||||
| 						forbiddenImports[v] = forbidden |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 				for _, allowed := range r.AllowedPrefixes { |  | ||||||
| 					klog.V(4).Infof("Checking %v against %v\n", v, allowed) |  | ||||||
| 					if strings.HasPrefix(v, allowed) { |  | ||||||
| 						explicitlyAllowed = true |  | ||||||
| 						break |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 				if !explicitlyAllowed { |  | ||||||
| 					allowedMismatchedImports = append(allowedMismatchedImports, v) |  | ||||||
| 				} else { |  | ||||||
| 					klog.V(2).Infof("%v importing %v allowed by %v\n", v, f.PackagePath, restrictionFiles[i].path) |  | ||||||
| 					break NextRestrictionFiles |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if len(forbiddenImports) > 0 || len(allowedMismatchedImports) > 0 { |  | ||||||
| 		var errorBuilder strings.Builder |  | ||||||
| 		for i, f := range forbiddenImports { |  | ||||||
| 			fmt.Fprintf(&errorBuilder, "(inverse): import %v has forbidden prefix %v\n", i, f) |  | ||||||
| 		} |  | ||||||
| 		if len(allowedMismatchedImports) > 0 { |  | ||||||
| 			sort.Sort(sort.StringSlice(allowedMismatchedImports)) |  | ||||||
| 			fmt.Fprintf(&errorBuilder, "(inverse): the following imports did not match any allowed prefix:\n") |  | ||||||
| 			for _, i := range allowedMismatchedImports { |  | ||||||
| 				fmt.Fprintf(&errorBuilder, "  %v\n", i) |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		return errors.New(errorBuilder.String()) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // importRules produces a file with a set for a single type. |  | ||||||
| type importRules struct { |  | ||||||
| 	myPackage *types.Package |  | ||||||
| 	imports   namer.ImportTracker |  | ||||||
| } |  | ||||||
|  |  | ||||||
| var ( |  | ||||||
| 	_ = generator.Generator(&importRules{}) |  | ||||||
| 	_ = generator.FileType(importRuleFile{}) |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| func (r *importRules) Name() string                                                  { return "import rules" } |  | ||||||
| func (r *importRules) Filter(*generator.Context, *types.Type) bool                   { return false } |  | ||||||
| func (r *importRules) Namers(*generator.Context) namer.NameSystems                   { return nil } |  | ||||||
| func (r *importRules) PackageVars(*generator.Context) []string                       { return []string{} } |  | ||||||
| func (r *importRules) PackageConsts(*generator.Context) []string                     { return []string{} } |  | ||||||
| func (r *importRules) GenerateType(*generator.Context, *types.Type, io.Writer) error { return nil } |  | ||||||
| func (r *importRules) Filename() string                                              { return ".import-restrictions" } |  | ||||||
| func (r *importRules) FileType() string                                              { return importBossFileType } |  | ||||||
| func (r *importRules) Init(c *generator.Context, w io.Writer) error                  { return nil } |  | ||||||
| func (r *importRules) Finalize(*generator.Context, io.Writer) error                  { return nil } |  | ||||||
|  |  | ||||||
| func dfsImports(dest *[]string, seen map[string]bool, p *types.Package) { |  | ||||||
| 	for _, p2 := range p.Imports { |  | ||||||
| 		if seen[p2.Path] { |  | ||||||
| 			continue |  | ||||||
| 		} |  | ||||||
| 		seen[p2.Path] = true |  | ||||||
| 		dfsImports(dest, seen, p2) |  | ||||||
| 		*dest = append(*dest, p2.Path) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (r *importRules) Imports(*generator.Context) []string { |  | ||||||
| 	all := []string{} |  | ||||||
| 	dfsImports(&all, map[string]bool{}, r.myPackage) |  | ||||||
| 	return all |  | ||||||
| } |  | ||||||
							
								
								
									
										378
									
								
								vendor/k8s.io/gengo/examples/set-gen/generators/sets.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										378
									
								
								vendor/k8s.io/gengo/examples/set-gen/generators/sets.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,378 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| // Package generators has the generators for the set-gen utility. |  | ||||||
| package generators |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"io" |  | ||||||
|  |  | ||||||
| 	"k8s.io/gengo/args" |  | ||||||
| 	"k8s.io/gengo/generator" |  | ||||||
| 	"k8s.io/gengo/namer" |  | ||||||
| 	"k8s.io/gengo/types" |  | ||||||
|  |  | ||||||
| 	"k8s.io/klog/v2" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // NameSystems returns the name system used by the generators in this package. |  | ||||||
| func NameSystems() namer.NameSystems { |  | ||||||
| 	return namer.NameSystems{ |  | ||||||
| 		"public":  namer.NewPublicNamer(0), |  | ||||||
| 		"private": namer.NewPrivateNamer(0), |  | ||||||
| 		"raw":     namer.NewRawNamer("", nil), |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // DefaultNameSystem returns the default name system for ordering the types to be |  | ||||||
| // processed by the generators in this package. |  | ||||||
| func DefaultNameSystem() string { |  | ||||||
| 	return "public" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Packages makes the sets package definition. |  | ||||||
| func Packages(_ *generator.Context, arguments *args.GeneratorArgs) generator.Packages { |  | ||||||
| 	boilerplate, err := arguments.LoadGoBoilerplate() |  | ||||||
| 	if err != nil { |  | ||||||
| 		klog.Fatalf("Failed loading boilerplate: %v", err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return generator.Packages{&generator.DefaultPackage{ |  | ||||||
| 		PackageName: "sets", |  | ||||||
| 		PackagePath: arguments.OutputPackagePath, |  | ||||||
| 		HeaderText:  boilerplate, |  | ||||||
| 		PackageDocumentation: []byte( |  | ||||||
| 			`// Package sets has auto-generated set types. |  | ||||||
| `), |  | ||||||
| 		// GeneratorFunc returns a list of generators. Each generator makes a |  | ||||||
| 		// single file. |  | ||||||
| 		GeneratorFunc: func(c *generator.Context) (generators []generator.Generator) { |  | ||||||
| 			generators = []generator.Generator{ |  | ||||||
| 				// Always generate a "doc.go" file. |  | ||||||
| 				generator.DefaultGen{OptionalName: "doc"}, |  | ||||||
| 				// Make a separate file for the Empty type, since it's shared by every type. |  | ||||||
| 				generator.DefaultGen{ |  | ||||||
| 					OptionalName: "empty", |  | ||||||
| 					OptionalBody: []byte(emptyTypeDecl), |  | ||||||
| 				}, |  | ||||||
| 			} |  | ||||||
| 			// Since we want a file per type that we generate a set for, we |  | ||||||
| 			// have to provide a function for this. |  | ||||||
| 			for _, t := range c.Order { |  | ||||||
| 				generators = append(generators, &genSet{ |  | ||||||
| 					DefaultGen: generator.DefaultGen{ |  | ||||||
| 						// Use the privatized version of the |  | ||||||
| 						// type name as the file name. |  | ||||||
| 						// |  | ||||||
| 						// TODO: make a namer that converts |  | ||||||
| 						// camelCase to '-' separation for file |  | ||||||
| 						// names? |  | ||||||
| 						OptionalName: c.Namers["private"].Name(t), |  | ||||||
| 					}, |  | ||||||
| 					outputPackage: arguments.OutputPackagePath, |  | ||||||
| 					typeToMatch:   t, |  | ||||||
| 					imports:       generator.NewImportTracker(), |  | ||||||
| 				}) |  | ||||||
| 			} |  | ||||||
| 			return generators |  | ||||||
| 		}, |  | ||||||
| 		FilterFunc: func(c *generator.Context, t *types.Type) bool { |  | ||||||
| 			// It would be reasonable to filter by the type's package here. |  | ||||||
| 			// It might be necessary if your input directory has a big |  | ||||||
| 			// import graph. |  | ||||||
| 			switch t.Kind { |  | ||||||
| 			case types.Map, types.Slice, types.Pointer: |  | ||||||
| 				// These types can't be keys in a map. |  | ||||||
| 				return false |  | ||||||
| 			case types.Builtin: |  | ||||||
| 				return true |  | ||||||
| 			case types.Struct: |  | ||||||
| 				// Only some structs can be keys in a map. This is triggered by the line |  | ||||||
| 				// // +genset |  | ||||||
| 				// or |  | ||||||
| 				// // +genset=true |  | ||||||
| 				return extractBoolTagOrDie("genset", t.CommentLines) == true |  | ||||||
| 			} |  | ||||||
| 			return false |  | ||||||
| 		}, |  | ||||||
| 	}} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // genSet produces a file with a set for a single type. |  | ||||||
| type genSet struct { |  | ||||||
| 	generator.DefaultGen |  | ||||||
| 	outputPackage string |  | ||||||
| 	typeToMatch   *types.Type |  | ||||||
| 	imports       namer.ImportTracker |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Filter ignores all but one type because we're making a single file per type. |  | ||||||
| func (g *genSet) Filter(c *generator.Context, t *types.Type) bool { return t == g.typeToMatch } |  | ||||||
|  |  | ||||||
| func (g *genSet) Namers(c *generator.Context) namer.NameSystems { |  | ||||||
| 	return namer.NameSystems{ |  | ||||||
| 		"raw": namer.NewRawNamer(g.outputPackage, g.imports), |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (g *genSet) Imports(c *generator.Context) (imports []string) { |  | ||||||
| 	return append(g.imports.ImportLines(), "reflect", "sort") |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // args constructs arguments for templates. Usage: |  | ||||||
| // g.args(t, "key1", value1, "key2", value2, ...) |  | ||||||
| // |  | ||||||
| // 't' is loaded with the key 'type'. |  | ||||||
| // |  | ||||||
| // We could use t directly as the argument, but doing it this way makes it easy |  | ||||||
| // to mix in additional parameters. This feature is not used in this set |  | ||||||
| // generator, but is present as an example. |  | ||||||
| func (g *genSet) args(t *types.Type, kv ...interface{}) interface{} { |  | ||||||
| 	m := map[interface{}]interface{}{"type": t} |  | ||||||
| 	for i := 0; i < len(kv)/2; i++ { |  | ||||||
| 		m[kv[i*2]] = kv[i*2+1] |  | ||||||
| 	} |  | ||||||
| 	return m |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // GenerateType makes the body of a file implementing a set for type t. |  | ||||||
| func (g *genSet) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { |  | ||||||
| 	sw := generator.NewSnippetWriter(w, c, "$", "$") |  | ||||||
| 	sw.Do(setCode, g.args(t)) |  | ||||||
| 	sw.Do("func less$.type|public$(lhs, rhs $.type|raw$) bool {\n", g.args(t)) |  | ||||||
| 	g.lessBody(sw, t) |  | ||||||
| 	sw.Do("}\n", g.args(t)) |  | ||||||
| 	return sw.Error() |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (g *genSet) lessBody(sw *generator.SnippetWriter, t *types.Type) { |  | ||||||
| 	// TODO: make this recursive, handle pointers and multiple nested structs... |  | ||||||
| 	switch t.Kind { |  | ||||||
| 	case types.Struct: |  | ||||||
| 		for _, m := range types.FlattenMembers(t.Members) { |  | ||||||
| 			sw.Do("if lhs.$.Name$ < rhs.$.Name$ { return true }\n", m) |  | ||||||
| 			sw.Do("if lhs.$.Name$ > rhs.$.Name$ { return false }\n", m) |  | ||||||
| 		} |  | ||||||
| 		sw.Do("return false\n", nil) |  | ||||||
| 	default: |  | ||||||
| 		sw.Do("return lhs < rhs\n", nil) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // written to the "empty.go" file. |  | ||||||
| var emptyTypeDecl = ` |  | ||||||
| // Empty is public since it is used by some internal API objects for conversions between external |  | ||||||
| // string arrays and internal sets, and conversion logic requires public types today. |  | ||||||
| type Empty struct{} |  | ||||||
| ` |  | ||||||
|  |  | ||||||
| // Written for every type. If you've never used text/template before: |  | ||||||
| // $.type$ refers to the source type; |public means to |  | ||||||
| // call the function giving the public name, |raw the raw type name. |  | ||||||
| var setCode = `// sets.$.type|public$ is a set of $.type|raw$s, implemented via map[$.type|raw$]struct{} for minimal memory consumption. |  | ||||||
| type $.type|public$ map[$.type|raw$]Empty |  | ||||||
|  |  | ||||||
| // New$.type|public$ creates a $.type|public$ from a list of values. |  | ||||||
| func New$.type|public$(items ...$.type|raw$) $.type|public$ { |  | ||||||
| 	ss := make($.type|public$, len(items)) |  | ||||||
| 	ss.Insert(items...) |  | ||||||
| 	return ss |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // $.type|public$KeySet creates a $.type|public$ from a keys of a map[$.type|raw$](? extends interface{}). |  | ||||||
| // If the value passed in is not actually a map, this will panic. |  | ||||||
| func $.type|public$KeySet(theMap interface{}) $.type|public$ { |  | ||||||
| 	v := reflect.ValueOf(theMap) |  | ||||||
| 	ret := $.type|public${} |  | ||||||
|  |  | ||||||
| 	for _, keyValue := range v.MapKeys() { |  | ||||||
| 		ret.Insert(keyValue.Interface().($.type|raw$)) |  | ||||||
| 	} |  | ||||||
| 	return ret |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Insert adds items to the set. |  | ||||||
| func (s $.type|public$) Insert(items ...$.type|raw$) $.type|public$ { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		s[item] = Empty{} |  | ||||||
| 	} |  | ||||||
| 	return s |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Delete removes all items from the set. |  | ||||||
| func (s $.type|public$) Delete(items ...$.type|raw$) $.type|public$ { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		delete(s, item) |  | ||||||
| 	} |  | ||||||
| 	return s |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Has returns true if and only if item is contained in the set. |  | ||||||
| func (s $.type|public$) Has(item $.type|raw$) bool { |  | ||||||
| 	_, contained := s[item] |  | ||||||
| 	return contained |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // HasAll returns true if and only if all items are contained in the set. |  | ||||||
| func (s $.type|public$) HasAll(items ...$.type|raw$) bool { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		if !s.Has(item) { |  | ||||||
| 			return false |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // HasAny returns true if any items are contained in the set. |  | ||||||
| func (s $.type|public$) HasAny(items ...$.type|raw$) bool { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		if s.Has(item) { |  | ||||||
| 			return true |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Clone returns a new set which is a copy of the current set. |  | ||||||
| func (s $.type|public$) Clone() $.type|public$ { |  | ||||||
| 	result := make($.type|public$, len(s)) |  | ||||||
| 	for key := range s { |  | ||||||
| 		result.Insert(key) |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Difference returns a set of objects that are not in s2. |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2, a3} |  | ||||||
| // s2 = {a1, a2, a4, a5} |  | ||||||
| // s1.Difference(s2) = {a3} |  | ||||||
| // s2.Difference(s1) = {a4, a5} |  | ||||||
| func (s1 $.type|public$) Difference(s2 $.type|public$) $.type|public$ { |  | ||||||
| 	result := New$.type|public$() |  | ||||||
| 	for key := range s1 { |  | ||||||
| 		if !s2.Has(key) { |  | ||||||
| 			result.Insert(key) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // SymmetricDifference returns a set of elements which are in either of the sets, but not in their intersection. |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2, a3} |  | ||||||
| // s2 = {a1, a2, a4, a5} |  | ||||||
| // s1.SymmetricDifference(s2) = {a3, a4, a5} |  | ||||||
| // s2.SymmetricDifference(s1) = {a3, a4, a5} |  | ||||||
| func (s1 $.type|public$) SymmetricDifference(s2 $.type|public$) $.type|public$ { |  | ||||||
| 	return s1.Difference(s2).Union(s2.Difference(s1)) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Union returns a new set which includes items in either s1 or s2. |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2} |  | ||||||
| // s2 = {a3, a4} |  | ||||||
| // s1.Union(s2) = {a1, a2, a3, a4} |  | ||||||
| // s2.Union(s1) = {a1, a2, a3, a4} |  | ||||||
| func (s1 $.type|public$) Union(s2 $.type|public$) $.type|public$ { |  | ||||||
| 	result := s1.Clone() |  | ||||||
| 	for key := range s2 { |  | ||||||
| 		result.Insert(key) |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Intersection returns a new set which includes the item in BOTH s1 and s2 |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2} |  | ||||||
| // s2 = {a2, a3} |  | ||||||
| // s1.Intersection(s2) = {a2} |  | ||||||
| func (s1 $.type|public$) Intersection(s2 $.type|public$) $.type|public$ { |  | ||||||
| 	var walk, other $.type|public$ |  | ||||||
| 	result := New$.type|public$() |  | ||||||
| 	if s1.Len() < s2.Len() { |  | ||||||
| 		walk = s1 |  | ||||||
| 		other = s2 |  | ||||||
| 	} else { |  | ||||||
| 		walk = s2 |  | ||||||
| 		other = s1 |  | ||||||
| 	} |  | ||||||
| 	for key := range walk { |  | ||||||
| 		if other.Has(key) { |  | ||||||
| 			result.Insert(key) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // IsSuperset returns true if and only if s1 is a superset of s2. |  | ||||||
| func (s1 $.type|public$) IsSuperset(s2 $.type|public$) bool { |  | ||||||
| 	for item := range s2 { |  | ||||||
| 		if !s1.Has(item) { |  | ||||||
| 			return false |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Equal returns true if and only if s1 is equal (as a set) to s2. |  | ||||||
| // Two sets are equal if their membership is identical. |  | ||||||
| // (In practice, this means same elements, order doesn't matter) |  | ||||||
| func (s1 $.type|public$) Equal(s2 $.type|public$) bool { |  | ||||||
| 	return len(s1) == len(s2) && s1.IsSuperset(s2) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type sortableSliceOf$.type|public$ []$.type|raw$ |  | ||||||
|  |  | ||||||
| func (s sortableSliceOf$.type|public$) Len() int { return len(s) } |  | ||||||
| func (s sortableSliceOf$.type|public$) Less(i, j int) bool { return less$.type|public$(s[i], s[j]) } |  | ||||||
| func (s sortableSliceOf$.type|public$) Swap(i, j int) { s[i], s[j] = s[j], s[i] } |  | ||||||
|  |  | ||||||
| // List returns the contents as a sorted $.type|raw$ slice. |  | ||||||
| func (s $.type|public$) List() []$.type|raw$ { |  | ||||||
| 	res := make(sortableSliceOf$.type|public$, 0, len(s)) |  | ||||||
| 	for key := range s { |  | ||||||
| 		res = append(res, key) |  | ||||||
| 	} |  | ||||||
| 	sort.Sort(res) |  | ||||||
| 	return []$.type|raw$(res) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // UnsortedList returns the slice with contents in random order. |  | ||||||
| func (s $.type|public$) UnsortedList() []$.type|raw$ { |  | ||||||
| 	res :=make([]$.type|raw$, 0, len(s)) |  | ||||||
| 	for key := range s { |  | ||||||
| 		res = append(res, key) |  | ||||||
| 	} |  | ||||||
| 	return res |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Returns a single element from the set. |  | ||||||
| func (s $.type|public$) PopAny() ($.type|raw$, bool) { |  | ||||||
| 	for key := range s { |  | ||||||
| 		s.Delete(key) |  | ||||||
| 		return key, true |  | ||||||
| 	} |  | ||||||
| 	var zeroValue $.type|raw$ |  | ||||||
| 	return zeroValue, false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Len returns the size of the set. |  | ||||||
| func (s $.type|public$) Len() int { |  | ||||||
| 	return len(s) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| ` |  | ||||||
							
								
								
									
										33
									
								
								vendor/k8s.io/gengo/examples/set-gen/generators/tags.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								vendor/k8s.io/gengo/examples/set-gen/generators/tags.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,33 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2016 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| package generators |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"k8s.io/gengo/types" |  | ||||||
| 	"k8s.io/klog/v2" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // extractBoolTagOrDie gets the comment-tags for the key and asserts that, if |  | ||||||
| // it exists, the value is boolean.  If the tag did not exist, it returns |  | ||||||
| // false. |  | ||||||
| func extractBoolTagOrDie(key string, lines []string) bool { |  | ||||||
| 	val, err := types.ExtractSingleBoolCommentTag("+", key, false, lines) |  | ||||||
| 	if err != nil { |  | ||||||
| 		klog.Fatalf(err.Error()) |  | ||||||
| 	} |  | ||||||
| 	return val |  | ||||||
| } |  | ||||||
							
								
								
									
										221
									
								
								vendor/k8s.io/gengo/examples/set-gen/sets/byte.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										221
									
								
								vendor/k8s.io/gengo/examples/set-gen/sets/byte.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,221 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| // Code generated by set-gen. DO NOT EDIT. |  | ||||||
|  |  | ||||||
| package sets |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"reflect" |  | ||||||
| 	"sort" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // sets.Byte is a set of bytes, implemented via map[byte]struct{} for minimal memory consumption. |  | ||||||
| type Byte map[byte]Empty |  | ||||||
|  |  | ||||||
| // NewByte creates a Byte from a list of values. |  | ||||||
| func NewByte(items ...byte) Byte { |  | ||||||
| 	ss := make(Byte, len(items)) |  | ||||||
| 	ss.Insert(items...) |  | ||||||
| 	return ss |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // ByteKeySet creates a Byte from a keys of a map[byte](? extends interface{}). |  | ||||||
| // If the value passed in is not actually a map, this will panic. |  | ||||||
| func ByteKeySet(theMap interface{}) Byte { |  | ||||||
| 	v := reflect.ValueOf(theMap) |  | ||||||
| 	ret := Byte{} |  | ||||||
|  |  | ||||||
| 	for _, keyValue := range v.MapKeys() { |  | ||||||
| 		ret.Insert(keyValue.Interface().(byte)) |  | ||||||
| 	} |  | ||||||
| 	return ret |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Insert adds items to the set. |  | ||||||
| func (s Byte) Insert(items ...byte) Byte { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		s[item] = Empty{} |  | ||||||
| 	} |  | ||||||
| 	return s |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Delete removes all items from the set. |  | ||||||
| func (s Byte) Delete(items ...byte) Byte { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		delete(s, item) |  | ||||||
| 	} |  | ||||||
| 	return s |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Has returns true if and only if item is contained in the set. |  | ||||||
| func (s Byte) Has(item byte) bool { |  | ||||||
| 	_, contained := s[item] |  | ||||||
| 	return contained |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // HasAll returns true if and only if all items are contained in the set. |  | ||||||
| func (s Byte) HasAll(items ...byte) bool { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		if !s.Has(item) { |  | ||||||
| 			return false |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // HasAny returns true if any items are contained in the set. |  | ||||||
| func (s Byte) HasAny(items ...byte) bool { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		if s.Has(item) { |  | ||||||
| 			return true |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Clone returns a new set which is a copy of the current set. |  | ||||||
| func (s Byte) Clone() Byte { |  | ||||||
| 	result := make(Byte, len(s)) |  | ||||||
| 	for key := range s { |  | ||||||
| 		result.Insert(key) |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Difference returns a set of objects that are not in s2. |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2, a3} |  | ||||||
| // s2 = {a1, a2, a4, a5} |  | ||||||
| // s1.Difference(s2) = {a3} |  | ||||||
| // s2.Difference(s1) = {a4, a5} |  | ||||||
| func (s1 Byte) Difference(s2 Byte) Byte { |  | ||||||
| 	result := NewByte() |  | ||||||
| 	for key := range s1 { |  | ||||||
| 		if !s2.Has(key) { |  | ||||||
| 			result.Insert(key) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // SymmetricDifference returns a set of elements which are in either of the sets, but not in their intersection. |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2, a3} |  | ||||||
| // s2 = {a1, a2, a4, a5} |  | ||||||
| // s1.SymmetricDifference(s2) = {a3, a4, a5} |  | ||||||
| // s2.SymmetricDifference(s1) = {a3, a4, a5} |  | ||||||
| func (s1 Byte) SymmetricDifference(s2 Byte) Byte { |  | ||||||
| 	return s1.Difference(s2).Union(s2.Difference(s1)) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Union returns a new set which includes items in either s1 or s2. |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2} |  | ||||||
| // s2 = {a3, a4} |  | ||||||
| // s1.Union(s2) = {a1, a2, a3, a4} |  | ||||||
| // s2.Union(s1) = {a1, a2, a3, a4} |  | ||||||
| func (s1 Byte) Union(s2 Byte) Byte { |  | ||||||
| 	result := s1.Clone() |  | ||||||
| 	for key := range s2 { |  | ||||||
| 		result.Insert(key) |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Intersection returns a new set which includes the item in BOTH s1 and s2 |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2} |  | ||||||
| // s2 = {a2, a3} |  | ||||||
| // s1.Intersection(s2) = {a2} |  | ||||||
| func (s1 Byte) Intersection(s2 Byte) Byte { |  | ||||||
| 	var walk, other Byte |  | ||||||
| 	result := NewByte() |  | ||||||
| 	if s1.Len() < s2.Len() { |  | ||||||
| 		walk = s1 |  | ||||||
| 		other = s2 |  | ||||||
| 	} else { |  | ||||||
| 		walk = s2 |  | ||||||
| 		other = s1 |  | ||||||
| 	} |  | ||||||
| 	for key := range walk { |  | ||||||
| 		if other.Has(key) { |  | ||||||
| 			result.Insert(key) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // IsSuperset returns true if and only if s1 is a superset of s2. |  | ||||||
| func (s1 Byte) IsSuperset(s2 Byte) bool { |  | ||||||
| 	for item := range s2 { |  | ||||||
| 		if !s1.Has(item) { |  | ||||||
| 			return false |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Equal returns true if and only if s1 is equal (as a set) to s2. |  | ||||||
| // Two sets are equal if their membership is identical. |  | ||||||
| // (In practice, this means same elements, order doesn't matter) |  | ||||||
| func (s1 Byte) Equal(s2 Byte) bool { |  | ||||||
| 	return len(s1) == len(s2) && s1.IsSuperset(s2) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type sortableSliceOfByte []byte |  | ||||||
|  |  | ||||||
| func (s sortableSliceOfByte) Len() int           { return len(s) } |  | ||||||
| func (s sortableSliceOfByte) Less(i, j int) bool { return lessByte(s[i], s[j]) } |  | ||||||
| func (s sortableSliceOfByte) Swap(i, j int)      { s[i], s[j] = s[j], s[i] } |  | ||||||
|  |  | ||||||
| // List returns the contents as a sorted byte slice. |  | ||||||
| func (s Byte) List() []byte { |  | ||||||
| 	res := make(sortableSliceOfByte, 0, len(s)) |  | ||||||
| 	for key := range s { |  | ||||||
| 		res = append(res, key) |  | ||||||
| 	} |  | ||||||
| 	sort.Sort(res) |  | ||||||
| 	return []byte(res) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // UnsortedList returns the slice with contents in random order. |  | ||||||
| func (s Byte) UnsortedList() []byte { |  | ||||||
| 	res := make([]byte, 0, len(s)) |  | ||||||
| 	for key := range s { |  | ||||||
| 		res = append(res, key) |  | ||||||
| 	} |  | ||||||
| 	return res |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Returns a single element from the set. |  | ||||||
| func (s Byte) PopAny() (byte, bool) { |  | ||||||
| 	for key := range s { |  | ||||||
| 		s.Delete(key) |  | ||||||
| 		return key, true |  | ||||||
| 	} |  | ||||||
| 	var zeroValue byte |  | ||||||
| 	return zeroValue, false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Len returns the size of the set. |  | ||||||
| func (s Byte) Len() int { |  | ||||||
| 	return len(s) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func lessByte(lhs, rhs byte) bool { |  | ||||||
| 	return lhs < rhs |  | ||||||
| } |  | ||||||
							
								
								
									
										20
									
								
								vendor/k8s.io/gengo/examples/set-gen/sets/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								vendor/k8s.io/gengo/examples/set-gen/sets/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,20 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| // Code generated by set-gen. DO NOT EDIT. |  | ||||||
|  |  | ||||||
| // Package sets has auto-generated set types. |  | ||||||
| package sets |  | ||||||
							
								
								
									
										23
									
								
								vendor/k8s.io/gengo/examples/set-gen/sets/empty.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								vendor/k8s.io/gengo/examples/set-gen/sets/empty.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,23 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| // Code generated by set-gen. DO NOT EDIT. |  | ||||||
|  |  | ||||||
| package sets |  | ||||||
|  |  | ||||||
| // Empty is public since it is used by some internal API objects for conversions between external |  | ||||||
| // string arrays and internal sets, and conversion logic requires public types today. |  | ||||||
| type Empty struct{} |  | ||||||
							
								
								
									
										221
									
								
								vendor/k8s.io/gengo/examples/set-gen/sets/int.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										221
									
								
								vendor/k8s.io/gengo/examples/set-gen/sets/int.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,221 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| // Code generated by set-gen. DO NOT EDIT. |  | ||||||
|  |  | ||||||
| package sets |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"reflect" |  | ||||||
| 	"sort" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // sets.Int is a set of ints, implemented via map[int]struct{} for minimal memory consumption. |  | ||||||
| type Int map[int]Empty |  | ||||||
|  |  | ||||||
| // NewInt creates a Int from a list of values. |  | ||||||
| func NewInt(items ...int) Int { |  | ||||||
| 	ss := make(Int, len(items)) |  | ||||||
| 	ss.Insert(items...) |  | ||||||
| 	return ss |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // IntKeySet creates a Int from a keys of a map[int](? extends interface{}). |  | ||||||
| // If the value passed in is not actually a map, this will panic. |  | ||||||
| func IntKeySet(theMap interface{}) Int { |  | ||||||
| 	v := reflect.ValueOf(theMap) |  | ||||||
| 	ret := Int{} |  | ||||||
|  |  | ||||||
| 	for _, keyValue := range v.MapKeys() { |  | ||||||
| 		ret.Insert(keyValue.Interface().(int)) |  | ||||||
| 	} |  | ||||||
| 	return ret |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Insert adds items to the set. |  | ||||||
| func (s Int) Insert(items ...int) Int { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		s[item] = Empty{} |  | ||||||
| 	} |  | ||||||
| 	return s |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Delete removes all items from the set. |  | ||||||
| func (s Int) Delete(items ...int) Int { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		delete(s, item) |  | ||||||
| 	} |  | ||||||
| 	return s |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Has returns true if and only if item is contained in the set. |  | ||||||
| func (s Int) Has(item int) bool { |  | ||||||
| 	_, contained := s[item] |  | ||||||
| 	return contained |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // HasAll returns true if and only if all items are contained in the set. |  | ||||||
| func (s Int) HasAll(items ...int) bool { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		if !s.Has(item) { |  | ||||||
| 			return false |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // HasAny returns true if any items are contained in the set. |  | ||||||
| func (s Int) HasAny(items ...int) bool { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		if s.Has(item) { |  | ||||||
| 			return true |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Clone returns a new set which is a copy of the current set. |  | ||||||
| func (s Int) Clone() Int { |  | ||||||
| 	result := make(Int, len(s)) |  | ||||||
| 	for key := range s { |  | ||||||
| 		result.Insert(key) |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Difference returns a set of objects that are not in s2. |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2, a3} |  | ||||||
| // s2 = {a1, a2, a4, a5} |  | ||||||
| // s1.Difference(s2) = {a3} |  | ||||||
| // s2.Difference(s1) = {a4, a5} |  | ||||||
| func (s1 Int) Difference(s2 Int) Int { |  | ||||||
| 	result := NewInt() |  | ||||||
| 	for key := range s1 { |  | ||||||
| 		if !s2.Has(key) { |  | ||||||
| 			result.Insert(key) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // SymmetricDifference returns a set of elements which are in either of the sets, but not in their intersection. |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2, a3} |  | ||||||
| // s2 = {a1, a2, a4, a5} |  | ||||||
| // s1.SymmetricDifference(s2) = {a3, a4, a5} |  | ||||||
| // s2.SymmetricDifference(s1) = {a3, a4, a5} |  | ||||||
| func (s1 Int) SymmetricDifference(s2 Int) Int { |  | ||||||
| 	return s1.Difference(s2).Union(s2.Difference(s1)) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Union returns a new set which includes items in either s1 or s2. |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2} |  | ||||||
| // s2 = {a3, a4} |  | ||||||
| // s1.Union(s2) = {a1, a2, a3, a4} |  | ||||||
| // s2.Union(s1) = {a1, a2, a3, a4} |  | ||||||
| func (s1 Int) Union(s2 Int) Int { |  | ||||||
| 	result := s1.Clone() |  | ||||||
| 	for key := range s2 { |  | ||||||
| 		result.Insert(key) |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Intersection returns a new set which includes the item in BOTH s1 and s2 |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2} |  | ||||||
| // s2 = {a2, a3} |  | ||||||
| // s1.Intersection(s2) = {a2} |  | ||||||
| func (s1 Int) Intersection(s2 Int) Int { |  | ||||||
| 	var walk, other Int |  | ||||||
| 	result := NewInt() |  | ||||||
| 	if s1.Len() < s2.Len() { |  | ||||||
| 		walk = s1 |  | ||||||
| 		other = s2 |  | ||||||
| 	} else { |  | ||||||
| 		walk = s2 |  | ||||||
| 		other = s1 |  | ||||||
| 	} |  | ||||||
| 	for key := range walk { |  | ||||||
| 		if other.Has(key) { |  | ||||||
| 			result.Insert(key) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // IsSuperset returns true if and only if s1 is a superset of s2. |  | ||||||
| func (s1 Int) IsSuperset(s2 Int) bool { |  | ||||||
| 	for item := range s2 { |  | ||||||
| 		if !s1.Has(item) { |  | ||||||
| 			return false |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Equal returns true if and only if s1 is equal (as a set) to s2. |  | ||||||
| // Two sets are equal if their membership is identical. |  | ||||||
| // (In practice, this means same elements, order doesn't matter) |  | ||||||
| func (s1 Int) Equal(s2 Int) bool { |  | ||||||
| 	return len(s1) == len(s2) && s1.IsSuperset(s2) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type sortableSliceOfInt []int |  | ||||||
|  |  | ||||||
| func (s sortableSliceOfInt) Len() int           { return len(s) } |  | ||||||
| func (s sortableSliceOfInt) Less(i, j int) bool { return lessInt(s[i], s[j]) } |  | ||||||
| func (s sortableSliceOfInt) Swap(i, j int)      { s[i], s[j] = s[j], s[i] } |  | ||||||
|  |  | ||||||
| // List returns the contents as a sorted int slice. |  | ||||||
| func (s Int) List() []int { |  | ||||||
| 	res := make(sortableSliceOfInt, 0, len(s)) |  | ||||||
| 	for key := range s { |  | ||||||
| 		res = append(res, key) |  | ||||||
| 	} |  | ||||||
| 	sort.Sort(res) |  | ||||||
| 	return []int(res) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // UnsortedList returns the slice with contents in random order. |  | ||||||
| func (s Int) UnsortedList() []int { |  | ||||||
| 	res := make([]int, 0, len(s)) |  | ||||||
| 	for key := range s { |  | ||||||
| 		res = append(res, key) |  | ||||||
| 	} |  | ||||||
| 	return res |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Returns a single element from the set. |  | ||||||
| func (s Int) PopAny() (int, bool) { |  | ||||||
| 	for key := range s { |  | ||||||
| 		s.Delete(key) |  | ||||||
| 		return key, true |  | ||||||
| 	} |  | ||||||
| 	var zeroValue int |  | ||||||
| 	return zeroValue, false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Len returns the size of the set. |  | ||||||
| func (s Int) Len() int { |  | ||||||
| 	return len(s) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func lessInt(lhs, rhs int) bool { |  | ||||||
| 	return lhs < rhs |  | ||||||
| } |  | ||||||
							
								
								
									
										221
									
								
								vendor/k8s.io/gengo/examples/set-gen/sets/int64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										221
									
								
								vendor/k8s.io/gengo/examples/set-gen/sets/int64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,221 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| // Code generated by set-gen. DO NOT EDIT. |  | ||||||
|  |  | ||||||
| package sets |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"reflect" |  | ||||||
| 	"sort" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // sets.Int64 is a set of int64s, implemented via map[int64]struct{} for minimal memory consumption. |  | ||||||
| type Int64 map[int64]Empty |  | ||||||
|  |  | ||||||
| // NewInt64 creates a Int64 from a list of values. |  | ||||||
| func NewInt64(items ...int64) Int64 { |  | ||||||
| 	ss := make(Int64, len(items)) |  | ||||||
| 	ss.Insert(items...) |  | ||||||
| 	return ss |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Int64KeySet creates a Int64 from a keys of a map[int64](? extends interface{}). |  | ||||||
| // If the value passed in is not actually a map, this will panic. |  | ||||||
| func Int64KeySet(theMap interface{}) Int64 { |  | ||||||
| 	v := reflect.ValueOf(theMap) |  | ||||||
| 	ret := Int64{} |  | ||||||
|  |  | ||||||
| 	for _, keyValue := range v.MapKeys() { |  | ||||||
| 		ret.Insert(keyValue.Interface().(int64)) |  | ||||||
| 	} |  | ||||||
| 	return ret |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Insert adds items to the set. |  | ||||||
| func (s Int64) Insert(items ...int64) Int64 { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		s[item] = Empty{} |  | ||||||
| 	} |  | ||||||
| 	return s |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Delete removes all items from the set. |  | ||||||
| func (s Int64) Delete(items ...int64) Int64 { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		delete(s, item) |  | ||||||
| 	} |  | ||||||
| 	return s |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Has returns true if and only if item is contained in the set. |  | ||||||
| func (s Int64) Has(item int64) bool { |  | ||||||
| 	_, contained := s[item] |  | ||||||
| 	return contained |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // HasAll returns true if and only if all items are contained in the set. |  | ||||||
| func (s Int64) HasAll(items ...int64) bool { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		if !s.Has(item) { |  | ||||||
| 			return false |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // HasAny returns true if any items are contained in the set. |  | ||||||
| func (s Int64) HasAny(items ...int64) bool { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		if s.Has(item) { |  | ||||||
| 			return true |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Clone returns a new set which is a copy of the current set. |  | ||||||
| func (s Int64) Clone() Int64 { |  | ||||||
| 	result := make(Int64, len(s)) |  | ||||||
| 	for key := range s { |  | ||||||
| 		result.Insert(key) |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Difference returns a set of objects that are not in s2. |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2, a3} |  | ||||||
| // s2 = {a1, a2, a4, a5} |  | ||||||
| // s1.Difference(s2) = {a3} |  | ||||||
| // s2.Difference(s1) = {a4, a5} |  | ||||||
| func (s1 Int64) Difference(s2 Int64) Int64 { |  | ||||||
| 	result := NewInt64() |  | ||||||
| 	for key := range s1 { |  | ||||||
| 		if !s2.Has(key) { |  | ||||||
| 			result.Insert(key) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // SymmetricDifference returns a set of elements which are in either of the sets, but not in their intersection. |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2, a3} |  | ||||||
| // s2 = {a1, a2, a4, a5} |  | ||||||
| // s1.SymmetricDifference(s2) = {a3, a4, a5} |  | ||||||
| // s2.SymmetricDifference(s1) = {a3, a4, a5} |  | ||||||
| func (s1 Int64) SymmetricDifference(s2 Int64) Int64 { |  | ||||||
| 	return s1.Difference(s2).Union(s2.Difference(s1)) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Union returns a new set which includes items in either s1 or s2. |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2} |  | ||||||
| // s2 = {a3, a4} |  | ||||||
| // s1.Union(s2) = {a1, a2, a3, a4} |  | ||||||
| // s2.Union(s1) = {a1, a2, a3, a4} |  | ||||||
| func (s1 Int64) Union(s2 Int64) Int64 { |  | ||||||
| 	result := s1.Clone() |  | ||||||
| 	for key := range s2 { |  | ||||||
| 		result.Insert(key) |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Intersection returns a new set which includes the item in BOTH s1 and s2 |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2} |  | ||||||
| // s2 = {a2, a3} |  | ||||||
| // s1.Intersection(s2) = {a2} |  | ||||||
| func (s1 Int64) Intersection(s2 Int64) Int64 { |  | ||||||
| 	var walk, other Int64 |  | ||||||
| 	result := NewInt64() |  | ||||||
| 	if s1.Len() < s2.Len() { |  | ||||||
| 		walk = s1 |  | ||||||
| 		other = s2 |  | ||||||
| 	} else { |  | ||||||
| 		walk = s2 |  | ||||||
| 		other = s1 |  | ||||||
| 	} |  | ||||||
| 	for key := range walk { |  | ||||||
| 		if other.Has(key) { |  | ||||||
| 			result.Insert(key) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // IsSuperset returns true if and only if s1 is a superset of s2. |  | ||||||
| func (s1 Int64) IsSuperset(s2 Int64) bool { |  | ||||||
| 	for item := range s2 { |  | ||||||
| 		if !s1.Has(item) { |  | ||||||
| 			return false |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Equal returns true if and only if s1 is equal (as a set) to s2. |  | ||||||
| // Two sets are equal if their membership is identical. |  | ||||||
| // (In practice, this means same elements, order doesn't matter) |  | ||||||
| func (s1 Int64) Equal(s2 Int64) bool { |  | ||||||
| 	return len(s1) == len(s2) && s1.IsSuperset(s2) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type sortableSliceOfInt64 []int64 |  | ||||||
|  |  | ||||||
| func (s sortableSliceOfInt64) Len() int           { return len(s) } |  | ||||||
| func (s sortableSliceOfInt64) Less(i, j int) bool { return lessInt64(s[i], s[j]) } |  | ||||||
| func (s sortableSliceOfInt64) Swap(i, j int)      { s[i], s[j] = s[j], s[i] } |  | ||||||
|  |  | ||||||
| // List returns the contents as a sorted int64 slice. |  | ||||||
| func (s Int64) List() []int64 { |  | ||||||
| 	res := make(sortableSliceOfInt64, 0, len(s)) |  | ||||||
| 	for key := range s { |  | ||||||
| 		res = append(res, key) |  | ||||||
| 	} |  | ||||||
| 	sort.Sort(res) |  | ||||||
| 	return []int64(res) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // UnsortedList returns the slice with contents in random order. |  | ||||||
| func (s Int64) UnsortedList() []int64 { |  | ||||||
| 	res := make([]int64, 0, len(s)) |  | ||||||
| 	for key := range s { |  | ||||||
| 		res = append(res, key) |  | ||||||
| 	} |  | ||||||
| 	return res |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Returns a single element from the set. |  | ||||||
| func (s Int64) PopAny() (int64, bool) { |  | ||||||
| 	for key := range s { |  | ||||||
| 		s.Delete(key) |  | ||||||
| 		return key, true |  | ||||||
| 	} |  | ||||||
| 	var zeroValue int64 |  | ||||||
| 	return zeroValue, false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Len returns the size of the set. |  | ||||||
| func (s Int64) Len() int { |  | ||||||
| 	return len(s) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func lessInt64(lhs, rhs int64) bool { |  | ||||||
| 	return lhs < rhs |  | ||||||
| } |  | ||||||
							
								
								
									
										221
									
								
								vendor/k8s.io/gengo/examples/set-gen/sets/string.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										221
									
								
								vendor/k8s.io/gengo/examples/set-gen/sets/string.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,221 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| // Code generated by set-gen. DO NOT EDIT. |  | ||||||
|  |  | ||||||
| package sets |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"reflect" |  | ||||||
| 	"sort" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // sets.String is a set of strings, implemented via map[string]struct{} for minimal memory consumption. |  | ||||||
| type String map[string]Empty |  | ||||||
|  |  | ||||||
| // NewString creates a String from a list of values. |  | ||||||
| func NewString(items ...string) String { |  | ||||||
| 	ss := make(String, len(items)) |  | ||||||
| 	ss.Insert(items...) |  | ||||||
| 	return ss |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // StringKeySet creates a String from a keys of a map[string](? extends interface{}). |  | ||||||
| // If the value passed in is not actually a map, this will panic. |  | ||||||
| func StringKeySet(theMap interface{}) String { |  | ||||||
| 	v := reflect.ValueOf(theMap) |  | ||||||
| 	ret := String{} |  | ||||||
|  |  | ||||||
| 	for _, keyValue := range v.MapKeys() { |  | ||||||
| 		ret.Insert(keyValue.Interface().(string)) |  | ||||||
| 	} |  | ||||||
| 	return ret |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Insert adds items to the set. |  | ||||||
| func (s String) Insert(items ...string) String { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		s[item] = Empty{} |  | ||||||
| 	} |  | ||||||
| 	return s |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Delete removes all items from the set. |  | ||||||
| func (s String) Delete(items ...string) String { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		delete(s, item) |  | ||||||
| 	} |  | ||||||
| 	return s |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Has returns true if and only if item is contained in the set. |  | ||||||
| func (s String) Has(item string) bool { |  | ||||||
| 	_, contained := s[item] |  | ||||||
| 	return contained |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // HasAll returns true if and only if all items are contained in the set. |  | ||||||
| func (s String) HasAll(items ...string) bool { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		if !s.Has(item) { |  | ||||||
| 			return false |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // HasAny returns true if any items are contained in the set. |  | ||||||
| func (s String) HasAny(items ...string) bool { |  | ||||||
| 	for _, item := range items { |  | ||||||
| 		if s.Has(item) { |  | ||||||
| 			return true |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Clone returns a new set which is a copy of the current set. |  | ||||||
| func (s String) Clone() String { |  | ||||||
| 	result := make(String, len(s)) |  | ||||||
| 	for key := range s { |  | ||||||
| 		result.Insert(key) |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Difference returns a set of objects that are not in s2. |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2, a3} |  | ||||||
| // s2 = {a1, a2, a4, a5} |  | ||||||
| // s1.Difference(s2) = {a3} |  | ||||||
| // s2.Difference(s1) = {a4, a5} |  | ||||||
| func (s1 String) Difference(s2 String) String { |  | ||||||
| 	result := NewString() |  | ||||||
| 	for key := range s1 { |  | ||||||
| 		if !s2.Has(key) { |  | ||||||
| 			result.Insert(key) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // SymmetricDifference returns a set of elements which are in either of the sets, but not in their intersection. |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2, a3} |  | ||||||
| // s2 = {a1, a2, a4, a5} |  | ||||||
| // s1.SymmetricDifference(s2) = {a3, a4, a5} |  | ||||||
| // s2.SymmetricDifference(s1) = {a3, a4, a5} |  | ||||||
| func (s1 String) SymmetricDifference(s2 String) String { |  | ||||||
| 	return s1.Difference(s2).Union(s2.Difference(s1)) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Union returns a new set which includes items in either s1 or s2. |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2} |  | ||||||
| // s2 = {a3, a4} |  | ||||||
| // s1.Union(s2) = {a1, a2, a3, a4} |  | ||||||
| // s2.Union(s1) = {a1, a2, a3, a4} |  | ||||||
| func (s1 String) Union(s2 String) String { |  | ||||||
| 	result := s1.Clone() |  | ||||||
| 	for key := range s2 { |  | ||||||
| 		result.Insert(key) |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Intersection returns a new set which includes the item in BOTH s1 and s2 |  | ||||||
| // For example: |  | ||||||
| // s1 = {a1, a2} |  | ||||||
| // s2 = {a2, a3} |  | ||||||
| // s1.Intersection(s2) = {a2} |  | ||||||
| func (s1 String) Intersection(s2 String) String { |  | ||||||
| 	var walk, other String |  | ||||||
| 	result := NewString() |  | ||||||
| 	if s1.Len() < s2.Len() { |  | ||||||
| 		walk = s1 |  | ||||||
| 		other = s2 |  | ||||||
| 	} else { |  | ||||||
| 		walk = s2 |  | ||||||
| 		other = s1 |  | ||||||
| 	} |  | ||||||
| 	for key := range walk { |  | ||||||
| 		if other.Has(key) { |  | ||||||
| 			result.Insert(key) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // IsSuperset returns true if and only if s1 is a superset of s2. |  | ||||||
| func (s1 String) IsSuperset(s2 String) bool { |  | ||||||
| 	for item := range s2 { |  | ||||||
| 		if !s1.Has(item) { |  | ||||||
| 			return false |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Equal returns true if and only if s1 is equal (as a set) to s2. |  | ||||||
| // Two sets are equal if their membership is identical. |  | ||||||
| // (In practice, this means same elements, order doesn't matter) |  | ||||||
| func (s1 String) Equal(s2 String) bool { |  | ||||||
| 	return len(s1) == len(s2) && s1.IsSuperset(s2) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type sortableSliceOfString []string |  | ||||||
|  |  | ||||||
| func (s sortableSliceOfString) Len() int           { return len(s) } |  | ||||||
| func (s sortableSliceOfString) Less(i, j int) bool { return lessString(s[i], s[j]) } |  | ||||||
| func (s sortableSliceOfString) Swap(i, j int)      { s[i], s[j] = s[j], s[i] } |  | ||||||
|  |  | ||||||
| // List returns the contents as a sorted string slice. |  | ||||||
| func (s String) List() []string { |  | ||||||
| 	res := make(sortableSliceOfString, 0, len(s)) |  | ||||||
| 	for key := range s { |  | ||||||
| 		res = append(res, key) |  | ||||||
| 	} |  | ||||||
| 	sort.Sort(res) |  | ||||||
| 	return []string(res) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // UnsortedList returns the slice with contents in random order. |  | ||||||
| func (s String) UnsortedList() []string { |  | ||||||
| 	res := make([]string, 0, len(s)) |  | ||||||
| 	for key := range s { |  | ||||||
| 		res = append(res, key) |  | ||||||
| 	} |  | ||||||
| 	return res |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Returns a single element from the set. |  | ||||||
| func (s String) PopAny() (string, bool) { |  | ||||||
| 	for key := range s { |  | ||||||
| 		s.Delete(key) |  | ||||||
| 		return key, true |  | ||||||
| 	} |  | ||||||
| 	var zeroValue string |  | ||||||
| 	return zeroValue, false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Len returns the size of the set. |  | ||||||
| func (s String) Len() int { |  | ||||||
| 	return len(s) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func lessString(lhs, rhs string) bool { |  | ||||||
| 	return lhs < rhs |  | ||||||
| } |  | ||||||
							
								
								
									
										62
									
								
								vendor/k8s.io/gengo/generator/default_generator.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										62
									
								
								vendor/k8s.io/gengo/generator/default_generator.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,62 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| package generator |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"io" |  | ||||||
|  |  | ||||||
| 	"k8s.io/gengo/namer" |  | ||||||
| 	"k8s.io/gengo/types" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| const ( |  | ||||||
| 	GolangFileType = "golang" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // DefaultGen implements a do-nothing Generator. |  | ||||||
| // |  | ||||||
| // It can be used to implement static content files. |  | ||||||
| type DefaultGen struct { |  | ||||||
| 	// OptionalName, if present, will be used for the generator's name, and |  | ||||||
| 	// the filename (with ".go" appended). |  | ||||||
| 	OptionalName string |  | ||||||
|  |  | ||||||
| 	// OptionalBody, if present, will be used as the return from the "Init" |  | ||||||
| 	// method. This causes it to be static content for the entire file if |  | ||||||
| 	// no other generator touches the file. |  | ||||||
| 	OptionalBody []byte |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (d DefaultGen) Name() string                                        { return d.OptionalName } |  | ||||||
| func (d DefaultGen) Filter(*Context, *types.Type) bool                   { return true } |  | ||||||
| func (d DefaultGen) Namers(*Context) namer.NameSystems                   { return nil } |  | ||||||
| func (d DefaultGen) Imports(*Context) []string                           { return []string{} } |  | ||||||
| func (d DefaultGen) PackageVars(*Context) []string                       { return []string{} } |  | ||||||
| func (d DefaultGen) PackageConsts(*Context) []string                     { return []string{} } |  | ||||||
| func (d DefaultGen) GenerateType(*Context, *types.Type, io.Writer) error { return nil } |  | ||||||
| func (d DefaultGen) Filename() string                                    { return d.OptionalName + ".go" } |  | ||||||
| func (d DefaultGen) FileType() string                                    { return GolangFileType } |  | ||||||
| func (d DefaultGen) Finalize(*Context, io.Writer) error                  { return nil } |  | ||||||
|  |  | ||||||
| func (d DefaultGen) Init(c *Context, w io.Writer) error { |  | ||||||
| 	_, err := w.Write(d.OptionalBody) |  | ||||||
| 	return err |  | ||||||
| } |  | ||||||
|  |  | ||||||
| var ( |  | ||||||
| 	_ = Generator(DefaultGen{}) |  | ||||||
| ) |  | ||||||
							
								
								
									
										75
									
								
								vendor/k8s.io/gengo/generator/default_package.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										75
									
								
								vendor/k8s.io/gengo/generator/default_package.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,75 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| package generator |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"k8s.io/gengo/types" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // DefaultPackage contains a default implementation of Package. |  | ||||||
| type DefaultPackage struct { |  | ||||||
| 	// Short name of package, used in the "package xxxx" line. |  | ||||||
| 	PackageName string |  | ||||||
| 	// Import path of the package, and the location on disk of the package. |  | ||||||
| 	PackagePath string |  | ||||||
| 	// The location of the package on disk. |  | ||||||
| 	Source string |  | ||||||
|  |  | ||||||
| 	// Emitted at the top of every file. |  | ||||||
| 	HeaderText []byte |  | ||||||
|  |  | ||||||
| 	// Emitted only for a "doc.go" file; appended to the HeaderText for |  | ||||||
| 	// that file. |  | ||||||
| 	PackageDocumentation []byte |  | ||||||
|  |  | ||||||
| 	// If non-nil, will be called on "Generators"; otherwise, the static |  | ||||||
| 	// list will be used. So you should set only one of these two fields. |  | ||||||
| 	GeneratorFunc func(*Context) []Generator |  | ||||||
| 	GeneratorList []Generator |  | ||||||
|  |  | ||||||
| 	// Optional; filters the types exposed to the generators. |  | ||||||
| 	FilterFunc func(*Context, *types.Type) bool |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (d *DefaultPackage) Name() string       { return d.PackageName } |  | ||||||
| func (d *DefaultPackage) Path() string       { return d.PackagePath } |  | ||||||
| func (d *DefaultPackage) SourcePath() string { return d.Source } |  | ||||||
|  |  | ||||||
| func (d *DefaultPackage) Filter(c *Context, t *types.Type) bool { |  | ||||||
| 	if d.FilterFunc != nil { |  | ||||||
| 		return d.FilterFunc(c, t) |  | ||||||
| 	} |  | ||||||
| 	return true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (d *DefaultPackage) Generators(c *Context) []Generator { |  | ||||||
| 	if d.GeneratorFunc != nil { |  | ||||||
| 		return d.GeneratorFunc(c) |  | ||||||
| 	} |  | ||||||
| 	return d.GeneratorList |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (d *DefaultPackage) Header(filename string) []byte { |  | ||||||
| 	if filename == "doc.go" { |  | ||||||
| 		return append(d.HeaderText, d.PackageDocumentation...) |  | ||||||
| 	} |  | ||||||
| 	return d.HeaderText |  | ||||||
| } |  | ||||||
|  |  | ||||||
| var ( |  | ||||||
| 	_ = Package(&DefaultPackage{}) |  | ||||||
| ) |  | ||||||
							
								
								
									
										31
									
								
								vendor/k8s.io/gengo/generator/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										31
									
								
								vendor/k8s.io/gengo/generator/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,31 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| // Package generator defines an interface for code generators to implement. |  | ||||||
| // |  | ||||||
| // To use this package, you'll implement the "Package" and "Generator" |  | ||||||
| // interfaces; you'll call NewContext to load up the types you want to work |  | ||||||
| // with, and then you'll call one or more of the Execute methods. See the |  | ||||||
| // interface definitions for explanations. All output will have gofmt called on |  | ||||||
| // it automatically, so you do not need to worry about generating correct |  | ||||||
| // indentation. |  | ||||||
| // |  | ||||||
| // This package also exposes SnippetWriter. SnippetWriter reduces to a minimum |  | ||||||
| // the boilerplate involved in setting up a template from go's text/template |  | ||||||
| // package. Additionally, all naming systems in the Context will be added as |  | ||||||
| // functions to the parsed template, so that they can be called directly from |  | ||||||
| // your templates! |  | ||||||
| package generator // import "k8s.io/gengo/generator" |  | ||||||
							
								
								
									
										50
									
								
								vendor/k8s.io/gengo/generator/error_tracker.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										50
									
								
								vendor/k8s.io/gengo/generator/error_tracker.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,50 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| package generator |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"io" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // ErrorTracker tracks errors to the underlying writer, so that you can ignore |  | ||||||
| // them until you're ready to return. |  | ||||||
| type ErrorTracker struct { |  | ||||||
| 	io.Writer |  | ||||||
| 	err error |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // NewErrorTracker makes a new error tracker; note that it implements io.Writer. |  | ||||||
| func NewErrorTracker(w io.Writer) *ErrorTracker { |  | ||||||
| 	return &ErrorTracker{Writer: w} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Write intercepts calls to Write. |  | ||||||
| func (et *ErrorTracker) Write(p []byte) (n int, err error) { |  | ||||||
| 	if et.err != nil { |  | ||||||
| 		return 0, et.err |  | ||||||
| 	} |  | ||||||
| 	n, err = et.Writer.Write(p) |  | ||||||
| 	if err != nil { |  | ||||||
| 		et.err = err |  | ||||||
| 	} |  | ||||||
| 	return n, err |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Error returns nil if no error has occurred, otherwise it returns the error. |  | ||||||
| func (et *ErrorTracker) Error() error { |  | ||||||
| 	return et.err |  | ||||||
| } |  | ||||||
							
								
								
									
										329
									
								
								vendor/k8s.io/gengo/generator/execute.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										329
									
								
								vendor/k8s.io/gengo/generator/execute.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,329 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| package generator |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"bytes" |  | ||||||
| 	"fmt" |  | ||||||
| 	"io" |  | ||||||
| 	"io/ioutil" |  | ||||||
| 	"os" |  | ||||||
| 	"path/filepath" |  | ||||||
| 	"strings" |  | ||||||
|  |  | ||||||
| 	"golang.org/x/tools/imports" |  | ||||||
| 	"k8s.io/gengo/namer" |  | ||||||
| 	"k8s.io/gengo/types" |  | ||||||
|  |  | ||||||
| 	"k8s.io/klog/v2" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| func errs2strings(errors []error) []string { |  | ||||||
| 	strs := make([]string, len(errors)) |  | ||||||
| 	for i := range errors { |  | ||||||
| 		strs[i] = errors[i].Error() |  | ||||||
| 	} |  | ||||||
| 	return strs |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // ExecutePackages runs the generators for every package in 'packages'. 'outDir' |  | ||||||
| // is the base directory in which to place all the generated packages; it |  | ||||||
| // should be a physical path on disk, not an import path. e.g.: |  | ||||||
| // /path/to/home/path/to/gopath/src/ |  | ||||||
| // Each package has its import path already, this will be appended to 'outDir'. |  | ||||||
| func (c *Context) ExecutePackages(outDir string, packages Packages) error { |  | ||||||
| 	var errors []error |  | ||||||
| 	for _, p := range packages { |  | ||||||
| 		if err := c.ExecutePackage(outDir, p); err != nil { |  | ||||||
| 			errors = append(errors, err) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	if len(errors) > 0 { |  | ||||||
| 		return fmt.Errorf("some packages had errors:\n%v\n", strings.Join(errs2strings(errors), "\n")) |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type DefaultFileType struct { |  | ||||||
| 	Format   func([]byte) ([]byte, error) |  | ||||||
| 	Assemble func(io.Writer, *File) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (ft DefaultFileType) AssembleFile(f *File, pathname string) error { |  | ||||||
| 	klog.V(5).Infof("Assembling file %q", pathname) |  | ||||||
| 	destFile, err := os.Create(pathname) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	defer destFile.Close() |  | ||||||
|  |  | ||||||
| 	b := &bytes.Buffer{} |  | ||||||
| 	et := NewErrorTracker(b) |  | ||||||
| 	ft.Assemble(et, f) |  | ||||||
| 	if et.Error() != nil { |  | ||||||
| 		return et.Error() |  | ||||||
| 	} |  | ||||||
| 	if formatted, err := ft.Format(b.Bytes()); err != nil { |  | ||||||
| 		err = fmt.Errorf("unable to format file %q (%v).", pathname, err) |  | ||||||
| 		// Write the file anyway, so they can see what's going wrong and fix the generator. |  | ||||||
| 		if _, err2 := destFile.Write(b.Bytes()); err2 != nil { |  | ||||||
| 			return err2 |  | ||||||
| 		} |  | ||||||
| 		return err |  | ||||||
| 	} else { |  | ||||||
| 		_, err = destFile.Write(formatted) |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (ft DefaultFileType) VerifyFile(f *File, pathname string) error { |  | ||||||
| 	klog.V(5).Infof("Verifying file %q", pathname) |  | ||||||
| 	friendlyName := filepath.Join(f.PackageName, f.Name) |  | ||||||
| 	b := &bytes.Buffer{} |  | ||||||
| 	et := NewErrorTracker(b) |  | ||||||
| 	ft.Assemble(et, f) |  | ||||||
| 	if et.Error() != nil { |  | ||||||
| 		return et.Error() |  | ||||||
| 	} |  | ||||||
| 	formatted, err := ft.Format(b.Bytes()) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return fmt.Errorf("unable to format the output for %q: %v", friendlyName, err) |  | ||||||
| 	} |  | ||||||
| 	existing, err := ioutil.ReadFile(pathname) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return fmt.Errorf("unable to read file %q for comparison: %v", friendlyName, err) |  | ||||||
| 	} |  | ||||||
| 	if bytes.Compare(formatted, existing) == 0 { |  | ||||||
| 		return nil |  | ||||||
| 	} |  | ||||||
| 	// Be nice and find the first place where they differ |  | ||||||
| 	i := 0 |  | ||||||
| 	for i < len(formatted) && i < len(existing) && formatted[i] == existing[i] { |  | ||||||
| 		i++ |  | ||||||
| 	} |  | ||||||
| 	eDiff, fDiff := existing[i:], formatted[i:] |  | ||||||
| 	if len(eDiff) > 100 { |  | ||||||
| 		eDiff = eDiff[:100] |  | ||||||
| 	} |  | ||||||
| 	if len(fDiff) > 100 { |  | ||||||
| 		fDiff = fDiff[:100] |  | ||||||
| 	} |  | ||||||
| 	return fmt.Errorf("output for %q differs; first existing/expected diff: \n  %q\n  %q", friendlyName, string(eDiff), string(fDiff)) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func assembleGolangFile(w io.Writer, f *File) { |  | ||||||
| 	w.Write(f.Header) |  | ||||||
| 	fmt.Fprintf(w, "package %v\n\n", f.PackageName) |  | ||||||
|  |  | ||||||
| 	if len(f.Imports) > 0 { |  | ||||||
| 		fmt.Fprint(w, "import (\n") |  | ||||||
| 		for i := range f.Imports { |  | ||||||
| 			if strings.Contains(i, "\"") { |  | ||||||
| 				// they included quotes, or are using the |  | ||||||
| 				// `name "path/to/pkg"` format. |  | ||||||
| 				fmt.Fprintf(w, "\t%s\n", i) |  | ||||||
| 			} else { |  | ||||||
| 				fmt.Fprintf(w, "\t%q\n", i) |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		fmt.Fprint(w, ")\n\n") |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if f.Vars.Len() > 0 { |  | ||||||
| 		fmt.Fprint(w, "var (\n") |  | ||||||
| 		w.Write(f.Vars.Bytes()) |  | ||||||
| 		fmt.Fprint(w, ")\n\n") |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if f.Consts.Len() > 0 { |  | ||||||
| 		fmt.Fprint(w, "const (\n") |  | ||||||
| 		w.Write(f.Consts.Bytes()) |  | ||||||
| 		fmt.Fprint(w, ")\n\n") |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	w.Write(f.Body.Bytes()) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func importsWrapper(src []byte) ([]byte, error) { |  | ||||||
| 	return imports.Process("", src, nil) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func NewGolangFile() *DefaultFileType { |  | ||||||
| 	return &DefaultFileType{ |  | ||||||
| 		Format:   importsWrapper, |  | ||||||
| 		Assemble: assembleGolangFile, |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // format should be one line only, and not end with \n. |  | ||||||
| func addIndentHeaderComment(b *bytes.Buffer, format string, args ...interface{}) { |  | ||||||
| 	if b.Len() > 0 { |  | ||||||
| 		fmt.Fprintf(b, "\n// "+format+"\n", args...) |  | ||||||
| 	} else { |  | ||||||
| 		fmt.Fprintf(b, "// "+format+"\n", args...) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (c *Context) filteredBy(f func(*Context, *types.Type) bool) *Context { |  | ||||||
| 	c2 := *c |  | ||||||
| 	c2.Order = []*types.Type{} |  | ||||||
| 	for _, t := range c.Order { |  | ||||||
| 		if f(c, t) { |  | ||||||
| 			c2.Order = append(c2.Order, t) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return &c2 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // make a new context; inheret c.Namers, but add on 'namers'. In case of a name |  | ||||||
| // collision, the namer in 'namers' wins. |  | ||||||
| func (c *Context) addNameSystems(namers namer.NameSystems) *Context { |  | ||||||
| 	if namers == nil { |  | ||||||
| 		return c |  | ||||||
| 	} |  | ||||||
| 	c2 := *c |  | ||||||
| 	// Copy the existing name systems so we don't corrupt a parent context |  | ||||||
| 	c2.Namers = namer.NameSystems{} |  | ||||||
| 	for k, v := range c.Namers { |  | ||||||
| 		c2.Namers[k] = v |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	for name, namer := range namers { |  | ||||||
| 		c2.Namers[name] = namer |  | ||||||
| 	} |  | ||||||
| 	return &c2 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // ExecutePackage executes a single package. 'outDir' is the base directory in |  | ||||||
| // which to place the package; it should be a physical path on disk, not an |  | ||||||
| // import path. e.g.: '/path/to/home/path/to/gopath/src/' The package knows its |  | ||||||
| // import path already, this will be appended to 'outDir'. |  | ||||||
| func (c *Context) ExecutePackage(outDir string, p Package) error { |  | ||||||
| 	path := filepath.Join(outDir, p.Path()) |  | ||||||
|  |  | ||||||
| 	// When working outside of GOPATH, we typically won't want to generate the |  | ||||||
| 	// full path for a package. For example, if our current project's root/base |  | ||||||
| 	// package is github.com/foo/bar, outDir=., p.Path()=github.com/foo/bar/generated, |  | ||||||
| 	// then we really want to be writing files to ./generated, not ./github.com/foo/bar/generated. |  | ||||||
| 	// The following will trim a path prefix (github.com/foo/bar) from p.Path() to arrive at |  | ||||||
| 	// a relative path that works with projects not in GOPATH. |  | ||||||
| 	if c.TrimPathPrefix != "" { |  | ||||||
| 		separator := string(filepath.Separator) |  | ||||||
| 		if !strings.HasSuffix(c.TrimPathPrefix, separator) { |  | ||||||
| 			c.TrimPathPrefix += separator |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		path = strings.TrimPrefix(path, c.TrimPathPrefix) |  | ||||||
| 	} |  | ||||||
| 	klog.V(5).Infof("Processing package %q, disk location %q", p.Name(), path) |  | ||||||
| 	// Filter out any types the *package* doesn't care about. |  | ||||||
| 	packageContext := c.filteredBy(p.Filter) |  | ||||||
| 	os.MkdirAll(path, 0755) |  | ||||||
| 	files := map[string]*File{} |  | ||||||
| 	for _, g := range p.Generators(packageContext) { |  | ||||||
| 		// Filter out types the *generator* doesn't care about. |  | ||||||
| 		genContext := packageContext.filteredBy(g.Filter) |  | ||||||
| 		// Now add any extra name systems defined by this generator |  | ||||||
| 		genContext = genContext.addNameSystems(g.Namers(genContext)) |  | ||||||
|  |  | ||||||
| 		fileType := g.FileType() |  | ||||||
| 		if len(fileType) == 0 { |  | ||||||
| 			return fmt.Errorf("generator %q must specify a file type", g.Name()) |  | ||||||
| 		} |  | ||||||
| 		f := files[g.Filename()] |  | ||||||
| 		if f == nil { |  | ||||||
| 			// This is the first generator to reference this file, so start it. |  | ||||||
| 			f = &File{ |  | ||||||
| 				Name:              g.Filename(), |  | ||||||
| 				FileType:          fileType, |  | ||||||
| 				PackageName:       p.Name(), |  | ||||||
| 				PackagePath:       p.Path(), |  | ||||||
| 				PackageSourcePath: p.SourcePath(), |  | ||||||
| 				Header:            p.Header(g.Filename()), |  | ||||||
| 				Imports:           map[string]struct{}{}, |  | ||||||
| 			} |  | ||||||
| 			files[f.Name] = f |  | ||||||
| 		} else { |  | ||||||
| 			if f.FileType != g.FileType() { |  | ||||||
| 				return fmt.Errorf("file %q already has type %q, but generator %q wants to use type %q", f.Name, f.FileType, g.Name(), g.FileType()) |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		if vars := g.PackageVars(genContext); len(vars) > 0 { |  | ||||||
| 			addIndentHeaderComment(&f.Vars, "Package-wide variables from generator %q.", g.Name()) |  | ||||||
| 			for _, v := range vars { |  | ||||||
| 				if _, err := fmt.Fprintf(&f.Vars, "%s\n", v); err != nil { |  | ||||||
| 					return err |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		if consts := g.PackageConsts(genContext); len(consts) > 0 { |  | ||||||
| 			addIndentHeaderComment(&f.Consts, "Package-wide consts from generator %q.", g.Name()) |  | ||||||
| 			for _, v := range consts { |  | ||||||
| 				if _, err := fmt.Fprintf(&f.Consts, "%s\n", v); err != nil { |  | ||||||
| 					return err |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		if err := genContext.executeBody(&f.Body, g); err != nil { |  | ||||||
| 			return err |  | ||||||
| 		} |  | ||||||
| 		if imports := g.Imports(genContext); len(imports) > 0 { |  | ||||||
| 			for _, i := range imports { |  | ||||||
| 				f.Imports[i] = struct{}{} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	var errors []error |  | ||||||
| 	for _, f := range files { |  | ||||||
| 		finalPath := filepath.Join(path, f.Name) |  | ||||||
| 		assembler, ok := c.FileTypes[f.FileType] |  | ||||||
| 		if !ok { |  | ||||||
| 			return fmt.Errorf("the file type %q registered for file %q does not exist in the context", f.FileType, f.Name) |  | ||||||
| 		} |  | ||||||
| 		var err error |  | ||||||
| 		if c.Verify { |  | ||||||
| 			err = assembler.VerifyFile(f, finalPath) |  | ||||||
| 		} else { |  | ||||||
| 			err = assembler.AssembleFile(f, finalPath) |  | ||||||
| 		} |  | ||||||
| 		if err != nil { |  | ||||||
| 			errors = append(errors, err) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	if len(errors) > 0 { |  | ||||||
| 		return fmt.Errorf("errors in package %q:\n%v\n", p.Path(), strings.Join(errs2strings(errors), "\n")) |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (c *Context) executeBody(w io.Writer, generator Generator) error { |  | ||||||
| 	et := NewErrorTracker(w) |  | ||||||
| 	if err := generator.Init(c, et); err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	for _, t := range c.Order { |  | ||||||
| 		if err := generator.GenerateType(c, t, et); err != nil { |  | ||||||
| 			return err |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	if err := generator.Finalize(c, et); err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	return et.Error() |  | ||||||
| } |  | ||||||
							
								
								
									
										259
									
								
								vendor/k8s.io/gengo/generator/generator.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										259
									
								
								vendor/k8s.io/gengo/generator/generator.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,259 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| package generator |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"bytes" |  | ||||||
| 	"io" |  | ||||||
|  |  | ||||||
| 	"k8s.io/gengo/namer" |  | ||||||
| 	"k8s.io/gengo/parser" |  | ||||||
| 	"k8s.io/gengo/types" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // Package contains the contract for generating a package. |  | ||||||
| type Package interface { |  | ||||||
| 	// Name returns the package short name. |  | ||||||
| 	Name() string |  | ||||||
| 	// Path returns the package import path. |  | ||||||
| 	Path() string |  | ||||||
| 	// SourcePath returns the location of the package on disk. |  | ||||||
| 	SourcePath() string |  | ||||||
|  |  | ||||||
| 	// Filter should return true if this package cares about this type. |  | ||||||
| 	// Otherwise, this type will be omitted from the type ordering for |  | ||||||
| 	// this package. |  | ||||||
| 	Filter(*Context, *types.Type) bool |  | ||||||
|  |  | ||||||
| 	// Header should return a header for the file, including comment markers. |  | ||||||
| 	// Useful for copyright notices and doc strings. Include an |  | ||||||
| 	// autogeneration notice! Do not include the "package x" line. |  | ||||||
| 	Header(filename string) []byte |  | ||||||
|  |  | ||||||
| 	// Generators returns the list of generators for this package. It is |  | ||||||
| 	// allowed for more than one generator to write to the same file. |  | ||||||
| 	// A Context is passed in case the list of generators depends on the |  | ||||||
| 	// input types. |  | ||||||
| 	Generators(*Context) []Generator |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type File struct { |  | ||||||
| 	Name              string |  | ||||||
| 	FileType          string |  | ||||||
| 	PackageName       string |  | ||||||
| 	Header            []byte |  | ||||||
| 	PackagePath       string |  | ||||||
| 	PackageSourcePath string |  | ||||||
| 	Imports           map[string]struct{} |  | ||||||
| 	Vars              bytes.Buffer |  | ||||||
| 	Consts            bytes.Buffer |  | ||||||
| 	Body              bytes.Buffer |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type FileType interface { |  | ||||||
| 	AssembleFile(f *File, path string) error |  | ||||||
| 	VerifyFile(f *File, path string) error |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Packages is a list of packages to generate. |  | ||||||
| type Packages []Package |  | ||||||
|  |  | ||||||
| // Generator is the contract for anything that wants to do auto-generation. |  | ||||||
| // It's expected that the io.Writers passed to the below functions will be |  | ||||||
| // ErrorTrackers; this allows implementations to not check for io errors, |  | ||||||
| // making more readable code. |  | ||||||
| // |  | ||||||
| // The call order for the functions that take a Context is: |  | ||||||
| // 1. Filter()        // Subsequent calls see only types that pass this. |  | ||||||
| // 2. Namers()        // Subsequent calls see the namers provided by this. |  | ||||||
| // 3. PackageVars() |  | ||||||
| // 4. PackageConsts() |  | ||||||
| // 5. Init() |  | ||||||
| // 6. GenerateType()  // Called N times, once per type in the context's Order. |  | ||||||
| // 7. Imports() |  | ||||||
| // |  | ||||||
| // You may have multiple generators for the same file. |  | ||||||
| type Generator interface { |  | ||||||
| 	// The name of this generator. Will be included in generated comments. |  | ||||||
| 	Name() string |  | ||||||
|  |  | ||||||
| 	// Filter should return true if this generator cares about this type. |  | ||||||
| 	// (otherwise, GenerateType will not be called.) |  | ||||||
| 	// |  | ||||||
| 	// Filter is called before any of the generator's other functions; |  | ||||||
| 	// subsequent calls will get a context with only the types that passed |  | ||||||
| 	// this filter. |  | ||||||
| 	Filter(*Context, *types.Type) bool |  | ||||||
|  |  | ||||||
| 	// If this generator needs special namers, return them here. These will |  | ||||||
| 	// override the original namers in the context if there is a collision. |  | ||||||
| 	// You may return nil if you don't need special names. These names will |  | ||||||
| 	// be available in the context passed to the rest of the generator's |  | ||||||
| 	// functions. |  | ||||||
| 	// |  | ||||||
| 	// A use case for this is to return a namer that tracks imports. |  | ||||||
| 	Namers(*Context) namer.NameSystems |  | ||||||
|  |  | ||||||
| 	// Init should write an init function, and any other content that's not |  | ||||||
| 	// generated per-type. (It's not intended for generator specific |  | ||||||
| 	// initialization! Do that when your Package constructs the |  | ||||||
| 	// Generators.) |  | ||||||
| 	Init(*Context, io.Writer) error |  | ||||||
|  |  | ||||||
| 	// Finalize should write finish up functions, and any other content that's not |  | ||||||
| 	// generated per-type. |  | ||||||
| 	Finalize(*Context, io.Writer) error |  | ||||||
|  |  | ||||||
| 	// PackageVars should emit an array of variable lines. They will be |  | ||||||
| 	// placed in a var ( ... ) block. There's no need to include a leading |  | ||||||
| 	// \t or trailing \n. |  | ||||||
| 	PackageVars(*Context) []string |  | ||||||
|  |  | ||||||
| 	// PackageConsts should emit an array of constant lines. They will be |  | ||||||
| 	// placed in a const ( ... ) block. There's no need to include a leading |  | ||||||
| 	// \t or trailing \n. |  | ||||||
| 	PackageConsts(*Context) []string |  | ||||||
|  |  | ||||||
| 	// GenerateType should emit the code for a particular type. |  | ||||||
| 	GenerateType(*Context, *types.Type, io.Writer) error |  | ||||||
|  |  | ||||||
| 	// Imports should return a list of necessary imports. They will be |  | ||||||
| 	// formatted correctly. You do not need to include quotation marks, |  | ||||||
| 	// return only the package name; alternatively, you can also return |  | ||||||
| 	// imports in the format `name "path/to/pkg"`. Imports will be called |  | ||||||
| 	// after Init, PackageVars, PackageConsts, and GenerateType, to allow |  | ||||||
| 	// you to keep track of what imports you actually need. |  | ||||||
| 	Imports(*Context) []string |  | ||||||
|  |  | ||||||
| 	// Preferred file name of this generator, not including a path. It is |  | ||||||
| 	// allowed for multiple generators to use the same filename, but it's |  | ||||||
| 	// up to you to make sure they don't have colliding import names. |  | ||||||
| 	// TODO: provide per-file import tracking, removing the requirement |  | ||||||
| 	// that generators coordinate.. |  | ||||||
| 	Filename() string |  | ||||||
|  |  | ||||||
| 	// A registered file type in the context to generate this file with. If |  | ||||||
| 	// the FileType is not found in the context, execution will stop. |  | ||||||
| 	FileType() string |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Context is global context for individual generators to consume. |  | ||||||
| type Context struct { |  | ||||||
| 	// A map from the naming system to the names for that system. E.g., you |  | ||||||
| 	// might have public names and several private naming systems. |  | ||||||
| 	Namers namer.NameSystems |  | ||||||
|  |  | ||||||
| 	// All the types, in case you want to look up something. |  | ||||||
| 	Universe types.Universe |  | ||||||
|  |  | ||||||
| 	// Incoming imports, i.e. packages importing the given package. |  | ||||||
| 	incomingImports map[string][]string |  | ||||||
|  |  | ||||||
| 	// Incoming transitive imports, i.e. the transitive closure of IncomingImports |  | ||||||
| 	incomingTransitiveImports map[string][]string |  | ||||||
|  |  | ||||||
| 	// All the user-specified packages.  This is after recursive expansion. |  | ||||||
| 	Inputs []string |  | ||||||
|  |  | ||||||
| 	// The canonical ordering of the types (will be filtered by both the |  | ||||||
| 	// Package's and Generator's Filter methods). |  | ||||||
| 	Order []*types.Type |  | ||||||
|  |  | ||||||
| 	// A set of types this context can process. If this is empty or nil, |  | ||||||
| 	// the default "golang" filetype will be provided. |  | ||||||
| 	FileTypes map[string]FileType |  | ||||||
|  |  | ||||||
| 	// If true, Execute* calls will just verify that the existing output is |  | ||||||
| 	// correct. (You may set this after calling NewContext.) |  | ||||||
| 	Verify bool |  | ||||||
|  |  | ||||||
| 	// Allows generators to add packages at runtime. |  | ||||||
| 	builder *parser.Builder |  | ||||||
|  |  | ||||||
| 	// If specified, trim the prefix from a package's path before writing files. |  | ||||||
| 	TrimPathPrefix string |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // NewContext generates a context from the given builder, naming systems, and |  | ||||||
| // the naming system you wish to construct the canonical ordering from. |  | ||||||
| func NewContext(b *parser.Builder, nameSystems namer.NameSystems, canonicalOrderName string) (*Context, error) { |  | ||||||
| 	universe, err := b.FindTypes() |  | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	c := &Context{ |  | ||||||
| 		Namers:   namer.NameSystems{}, |  | ||||||
| 		Universe: universe, |  | ||||||
| 		Inputs:   b.FindPackages(), |  | ||||||
| 		FileTypes: map[string]FileType{ |  | ||||||
| 			GolangFileType: NewGolangFile(), |  | ||||||
| 		}, |  | ||||||
| 		builder: b, |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	for name, systemNamer := range nameSystems { |  | ||||||
| 		c.Namers[name] = systemNamer |  | ||||||
| 		if name == canonicalOrderName { |  | ||||||
| 			orderer := namer.Orderer{Namer: systemNamer} |  | ||||||
| 			c.Order = orderer.OrderUniverse(universe) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return c, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // IncomingImports returns the incoming imports for each package. The map is lazily computed. |  | ||||||
| func (ctxt *Context) IncomingImports() map[string][]string { |  | ||||||
| 	if ctxt.incomingImports == nil { |  | ||||||
| 		incoming := map[string][]string{} |  | ||||||
| 		for _, pkg := range ctxt.Universe { |  | ||||||
| 			for imp := range pkg.Imports { |  | ||||||
| 				incoming[imp] = append(incoming[imp], pkg.Path) |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		ctxt.incomingImports = incoming |  | ||||||
| 	} |  | ||||||
| 	return ctxt.incomingImports |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // TransitiveIncomingImports returns the transitive closure of the incoming imports for each package. |  | ||||||
| // The map is lazily computed. |  | ||||||
| func (ctxt *Context) TransitiveIncomingImports() map[string][]string { |  | ||||||
| 	if ctxt.incomingTransitiveImports == nil { |  | ||||||
| 		ctxt.incomingTransitiveImports = transitiveClosure(ctxt.IncomingImports()) |  | ||||||
| 	} |  | ||||||
| 	return ctxt.incomingTransitiveImports |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // AddDir adds a Go package to the context. The specified path must be a single |  | ||||||
| // go package import path.  GOPATH, GOROOT, and the location of your go binary |  | ||||||
| // (`which go`) will all be searched, in the normal Go fashion. |  | ||||||
| // Deprecated. Please use AddDirectory. |  | ||||||
| func (ctxt *Context) AddDir(path string) error { |  | ||||||
| 	ctxt.incomingImports = nil |  | ||||||
| 	ctxt.incomingTransitiveImports = nil |  | ||||||
| 	return ctxt.builder.AddDirTo(path, &ctxt.Universe) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // AddDirectory adds a Go package to the context. The specified path must be a |  | ||||||
| // single go package import path.  GOPATH, GOROOT, and the location of your go |  | ||||||
| // binary (`which go`) will all be searched, in the normal Go fashion. |  | ||||||
| func (ctxt *Context) AddDirectory(path string) (*types.Package, error) { |  | ||||||
| 	ctxt.incomingImports = nil |  | ||||||
| 	ctxt.incomingTransitiveImports = nil |  | ||||||
| 	return ctxt.builder.AddDirectoryTo(path, &ctxt.Universe) |  | ||||||
| } |  | ||||||
							
								
								
									
										89
									
								
								vendor/k8s.io/gengo/generator/import_tracker.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										89
									
								
								vendor/k8s.io/gengo/generator/import_tracker.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,89 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| package generator |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"go/token" |  | ||||||
| 	"strings" |  | ||||||
|  |  | ||||||
| 	"k8s.io/klog/v2" |  | ||||||
|  |  | ||||||
| 	"k8s.io/gengo/namer" |  | ||||||
| 	"k8s.io/gengo/types" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // NewImportTrackerForPackage creates a new import tracker which is aware |  | ||||||
| // of a generator's output package. The tracker will not add import lines |  | ||||||
| // when symbols or types are added from the same package, and LocalNameOf |  | ||||||
| // will return empty string for the output package. |  | ||||||
| // |  | ||||||
| // e.g.: |  | ||||||
| // |  | ||||||
| //	tracker := NewImportTrackerForPackage("bar.com/pkg/foo") |  | ||||||
| //	tracker.AddSymbol(types.Name{"bar.com/pkg/foo.MyType"}) |  | ||||||
| //	tracker.AddSymbol(types.Name{"bar.com/pkg/baz.MyType"}) |  | ||||||
| //	tracker.AddSymbol(types.Name{"bar.com/pkg/baz/baz.MyType"}) |  | ||||||
| // |  | ||||||
| //	tracker.LocalNameOf("bar.com/pkg/foo") -> "" |  | ||||||
| //	tracker.LocalNameOf("bar.com/pkg/baz") -> "baz" |  | ||||||
| //	tracker.LocalNameOf("bar.com/pkg/baz/baz") -> "bazbaz" |  | ||||||
| //	tracker.ImportLines() -> {`baz "bar.com/pkg/baz"`, `bazbaz "bar.com/pkg/baz/baz"`} |  | ||||||
| func NewImportTrackerForPackage(local string, typesToAdd ...*types.Type) *namer.DefaultImportTracker { |  | ||||||
| 	tracker := namer.NewDefaultImportTracker(types.Name{Package: local}) |  | ||||||
| 	tracker.IsInvalidType = func(*types.Type) bool { return false } |  | ||||||
| 	tracker.LocalName = func(name types.Name) string { return golangTrackerLocalName(&tracker, name) } |  | ||||||
| 	tracker.PrintImport = func(path, name string) string { return name + " \"" + path + "\"" } |  | ||||||
|  |  | ||||||
| 	tracker.AddTypes(typesToAdd...) |  | ||||||
| 	return &tracker |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func NewImportTracker(typesToAdd ...*types.Type) *namer.DefaultImportTracker { |  | ||||||
| 	return NewImportTrackerForPackage("", typesToAdd...) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func golangTrackerLocalName(tracker namer.ImportTracker, t types.Name) string { |  | ||||||
| 	path := t.Package |  | ||||||
|  |  | ||||||
| 	// Using backslashes in package names causes gengo to produce Go code which |  | ||||||
| 	// will not compile with the gc compiler. See the comment on GoSeperator. |  | ||||||
| 	if strings.ContainsRune(path, '\\') { |  | ||||||
| 		klog.Warningf("Warning: backslash used in import path '%v', this is unsupported.\n", path) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	dirs := strings.Split(path, namer.GoSeperator) |  | ||||||
| 	for n := len(dirs) - 1; n >= 0; n-- { |  | ||||||
| 		// follow kube convention of not having anything between directory names |  | ||||||
| 		name := strings.Join(dirs[n:], "") |  | ||||||
| 		name = strings.Replace(name, "_", "", -1) |  | ||||||
| 		// These characters commonly appear in import paths for go |  | ||||||
| 		// packages, but aren't legal go names. So we'll sanitize. |  | ||||||
| 		name = strings.Replace(name, ".", "", -1) |  | ||||||
| 		name = strings.Replace(name, "-", "", -1) |  | ||||||
| 		if _, found := tracker.PathOf(name); found { |  | ||||||
| 			// This name collides with some other package |  | ||||||
| 			continue |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		// If the import name is a Go keyword, prefix with an underscore. |  | ||||||
| 		if token.Lookup(name).IsKeyword() { |  | ||||||
| 			name = "_" + name |  | ||||||
| 		} |  | ||||||
| 		return name |  | ||||||
| 	} |  | ||||||
| 	panic("can't find import for " + path) |  | ||||||
| } |  | ||||||
							
								
								
									
										154
									
								
								vendor/k8s.io/gengo/generator/snippet_writer.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										154
									
								
								vendor/k8s.io/gengo/generator/snippet_writer.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,154 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| package generator |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"fmt" |  | ||||||
| 	"io" |  | ||||||
| 	"runtime" |  | ||||||
| 	"text/template" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // SnippetWriter is an attempt to make the template library usable. |  | ||||||
| // Methods are chainable, and you don't have to check Error() until you're all |  | ||||||
| // done. |  | ||||||
| type SnippetWriter struct { |  | ||||||
| 	w       io.Writer |  | ||||||
| 	context *Context |  | ||||||
| 	// Left & right delimiters. text/template defaults to "{{" and "}}" |  | ||||||
| 	// which is totally unusable for go code based templates. |  | ||||||
| 	left, right string |  | ||||||
| 	funcMap     template.FuncMap |  | ||||||
| 	err         error |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // w is the destination; left and right are the delimiters; @ and $ are both |  | ||||||
| // reasonable choices. |  | ||||||
| // |  | ||||||
| // c is used to make a function for every naming system, to which you can pass |  | ||||||
| // a type and get the corresponding name. |  | ||||||
| func NewSnippetWriter(w io.Writer, c *Context, left, right string) *SnippetWriter { |  | ||||||
| 	sw := &SnippetWriter{ |  | ||||||
| 		w:       w, |  | ||||||
| 		context: c, |  | ||||||
| 		left:    left, |  | ||||||
| 		right:   right, |  | ||||||
| 		funcMap: template.FuncMap{}, |  | ||||||
| 	} |  | ||||||
| 	for name, namer := range c.Namers { |  | ||||||
| 		sw.funcMap[name] = namer.Name |  | ||||||
| 	} |  | ||||||
| 	return sw |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Do parses format and runs args through it. You can have arbitrary logic in |  | ||||||
| // the format (see the text/template documentation), but consider running many |  | ||||||
| // short templates with ordinary go logic in between--this may be more |  | ||||||
| // readable. Do is chainable. Any error causes every other call to do to be |  | ||||||
| // ignored, and the error will be returned by Error(). So you can check it just |  | ||||||
| // once, at the end of your function. |  | ||||||
| // |  | ||||||
| // 'args' can be quite literally anything; read the text/template documentation |  | ||||||
| // for details. Maps and structs work particularly nicely. Conveniently, the |  | ||||||
| // types package is designed to have structs that are easily referencable from |  | ||||||
| // the template language. |  | ||||||
| // |  | ||||||
| // Example: |  | ||||||
| // |  | ||||||
| // sw := generator.NewSnippetWriter(outBuffer, context, "$", "$") |  | ||||||
| // sw.Do(`The public type name is: $.type|public$`, map[string]interface{}{"type": t}) |  | ||||||
| // return sw.Error() |  | ||||||
| // |  | ||||||
| // Where: |  | ||||||
| // * "$" starts a template directive |  | ||||||
| // * "." references the entire thing passed as args |  | ||||||
| // * "type" therefore sees a map and looks up the key "type" |  | ||||||
| // * "|" means "pass the thing on the left to the thing on the right" |  | ||||||
| // * "public" is the name of a naming system, so the SnippetWriter has given |  | ||||||
| //   the template a function called "public" that takes a *types.Type and |  | ||||||
| //   returns the naming system's name. E.g., if the type is "string" this might |  | ||||||
| //   return "String". |  | ||||||
| // * the second "$" ends the template directive. |  | ||||||
| // |  | ||||||
| // The map is actually not necessary. The below does the same thing: |  | ||||||
| // |  | ||||||
| // sw.Do(`The public type name is: $.|public$`, t) |  | ||||||
| // |  | ||||||
| // You may or may not find it more readable to use the map with a descriptive |  | ||||||
| // key, but if you want to pass more than one arg, the map or a custom struct |  | ||||||
| // becomes a requirement. You can do arbitrary logic inside these templates, |  | ||||||
| // but you should consider doing the logic in go and stitching them together |  | ||||||
| // for the sake of your readers. |  | ||||||
| // |  | ||||||
| // TODO: Change Do() to optionally take a list of pairs of parameters (key, value) |  | ||||||
| // and have it construct a combined map with that and args. |  | ||||||
| func (s *SnippetWriter) Do(format string, args interface{}) *SnippetWriter { |  | ||||||
| 	if s.err != nil { |  | ||||||
| 		return s |  | ||||||
| 	} |  | ||||||
| 	// Name the template by source file:line so it can be found when |  | ||||||
| 	// there's an error. |  | ||||||
| 	_, file, line, _ := runtime.Caller(1) |  | ||||||
| 	tmpl, err := template. |  | ||||||
| 		New(fmt.Sprintf("%s:%d", file, line)). |  | ||||||
| 		Delims(s.left, s.right). |  | ||||||
| 		Funcs(s.funcMap). |  | ||||||
| 		Parse(format) |  | ||||||
| 	if err != nil { |  | ||||||
| 		s.err = err |  | ||||||
| 		return s |  | ||||||
| 	} |  | ||||||
| 	err = tmpl.Execute(s.w, args) |  | ||||||
| 	if err != nil { |  | ||||||
| 		s.err = err |  | ||||||
| 	} |  | ||||||
| 	return s |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Args exists to make it convenient to construct arguments for |  | ||||||
| // SnippetWriter.Do. |  | ||||||
| type Args map[interface{}]interface{} |  | ||||||
|  |  | ||||||
| // With makes a copy of a and adds the given key, value pair. |  | ||||||
| func (a Args) With(key, value interface{}) Args { |  | ||||||
| 	a2 := Args{key: value} |  | ||||||
| 	for k, v := range a { |  | ||||||
| 		a2[k] = v |  | ||||||
| 	} |  | ||||||
| 	return a2 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // WithArgs makes a copy of a and adds the given arguments. |  | ||||||
| func (a Args) WithArgs(rhs Args) Args { |  | ||||||
| 	a2 := Args{} |  | ||||||
| 	for k, v := range rhs { |  | ||||||
| 		a2[k] = v |  | ||||||
| 	} |  | ||||||
| 	for k, v := range a { |  | ||||||
| 		a2[k] = v |  | ||||||
| 	} |  | ||||||
| 	return a2 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (s *SnippetWriter) Out() io.Writer { |  | ||||||
| 	return s.w |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Error returns any encountered error. |  | ||||||
| func (s *SnippetWriter) Error() error { |  | ||||||
| 	return s.err |  | ||||||
| } |  | ||||||
							
								
								
									
										65
									
								
								vendor/k8s.io/gengo/generator/transitive_closure.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										65
									
								
								vendor/k8s.io/gengo/generator/transitive_closure.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,65 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2019 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| package generator |  | ||||||
|  |  | ||||||
| import "sort" |  | ||||||
|  |  | ||||||
| type edge struct { |  | ||||||
| 	from string |  | ||||||
| 	to   string |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func transitiveClosure(in map[string][]string) map[string][]string { |  | ||||||
| 	adj := make(map[edge]bool) |  | ||||||
| 	imports := make(map[string]struct{}) |  | ||||||
| 	for from, tos := range in { |  | ||||||
| 		for _, to := range tos { |  | ||||||
| 			adj[edge{from, to}] = true |  | ||||||
| 			imports[to] = struct{}{} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// Warshal's algorithm |  | ||||||
| 	for k := range in { |  | ||||||
| 		for i := range in { |  | ||||||
| 			if !adj[edge{i, k}] { |  | ||||||
| 				continue |  | ||||||
| 			} |  | ||||||
| 			for j := range imports { |  | ||||||
| 				if adj[edge{i, j}] { |  | ||||||
| 					continue |  | ||||||
| 				} |  | ||||||
| 				if adj[edge{k, j}] { |  | ||||||
| 					adj[edge{i, j}] = true |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	out := make(map[string][]string, len(in)) |  | ||||||
| 	for i := range in { |  | ||||||
| 		for j := range imports { |  | ||||||
| 			if adj[edge{i, j}] { |  | ||||||
| 				out[i] = append(out[i], j) |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		sort.Strings(out[i]) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return out |  | ||||||
| } |  | ||||||
							
								
								
									
										31
									
								
								vendor/k8s.io/gengo/namer/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										31
									
								
								vendor/k8s.io/gengo/namer/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,31 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| // Package namer has support for making different type naming systems. |  | ||||||
| // |  | ||||||
| // This is because sometimes you want to refer to the literal type, sometimes |  | ||||||
| // you want to make a name for the thing you're generating, and you want to |  | ||||||
| // make the name based on the type. For example, if you have `type foo string`, |  | ||||||
| // you want to be able to generate something like `func FooPrinter(f *foo) { |  | ||||||
| // Print(string(*f)) }`; that is, you want to refer to a public name, a literal |  | ||||||
| // name, and the underlying literal name. |  | ||||||
| // |  | ||||||
| // This package supports the idea of a "Namer" and a set of "NameSystems" to |  | ||||||
| // support these use cases. |  | ||||||
| // |  | ||||||
| // Additionally, a "RawNamer" can optionally keep track of what needs to be |  | ||||||
| // imported. |  | ||||||
| package namer // import "k8s.io/gengo/namer" |  | ||||||
							
								
								
									
										121
									
								
								vendor/k8s.io/gengo/namer/import_tracker.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										121
									
								
								vendor/k8s.io/gengo/namer/import_tracker.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,121 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| package namer |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"sort" |  | ||||||
|  |  | ||||||
| 	"k8s.io/gengo/types" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // ImportTracker may be passed to a namer.RawNamer, to track the imports needed |  | ||||||
| // for the types it names. |  | ||||||
| // |  | ||||||
| // TODO: pay attention to the package name (instead of renaming every package). |  | ||||||
| type DefaultImportTracker struct { |  | ||||||
| 	pathToName map[string]string |  | ||||||
| 	// forbidden names are in here. (e.g. "go" is a directory in which |  | ||||||
| 	// there is code, but "go" is not a legal name for a package, so we put |  | ||||||
| 	// it here to prevent us from naming any package "go") |  | ||||||
| 	nameToPath map[string]string |  | ||||||
| 	local      types.Name |  | ||||||
|  |  | ||||||
| 	// Returns true if a given types is an invalid type and should be ignored. |  | ||||||
| 	IsInvalidType func(*types.Type) bool |  | ||||||
| 	// Returns the final local name for the given name |  | ||||||
| 	LocalName func(types.Name) string |  | ||||||
| 	// Returns the "import" line for a given (path, name). |  | ||||||
| 	PrintImport func(string, string) string |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func NewDefaultImportTracker(local types.Name) DefaultImportTracker { |  | ||||||
| 	return DefaultImportTracker{ |  | ||||||
| 		pathToName: map[string]string{}, |  | ||||||
| 		nameToPath: map[string]string{}, |  | ||||||
| 		local:      local, |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (tracker *DefaultImportTracker) AddTypes(types ...*types.Type) { |  | ||||||
| 	for _, t := range types { |  | ||||||
| 		tracker.AddType(t) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| func (tracker *DefaultImportTracker) AddSymbol(symbol types.Name) { |  | ||||||
| 	if tracker.local.Package == symbol.Package { |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if len(symbol.Package) == 0 { |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
| 	path := symbol.Path |  | ||||||
| 	if len(path) == 0 { |  | ||||||
| 		path = symbol.Package |  | ||||||
| 	} |  | ||||||
| 	if _, ok := tracker.pathToName[path]; ok { |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	name := tracker.LocalName(symbol) |  | ||||||
| 	tracker.nameToPath[name] = path |  | ||||||
| 	tracker.pathToName[path] = name |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (tracker *DefaultImportTracker) AddType(t *types.Type) { |  | ||||||
| 	if tracker.local.Package == t.Name.Package { |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if tracker.IsInvalidType(t) { |  | ||||||
| 		if t.Kind == types.Builtin { |  | ||||||
| 			return |  | ||||||
| 		} |  | ||||||
| 		if _, ok := tracker.nameToPath[t.Name.Package]; !ok { |  | ||||||
| 			tracker.nameToPath[t.Name.Package] = "" |  | ||||||
| 		} |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	tracker.AddSymbol(t.Name) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (tracker *DefaultImportTracker) ImportLines() []string { |  | ||||||
| 	importPaths := []string{} |  | ||||||
| 	for path := range tracker.pathToName { |  | ||||||
| 		importPaths = append(importPaths, path) |  | ||||||
| 	} |  | ||||||
| 	sort.Sort(sort.StringSlice(importPaths)) |  | ||||||
| 	out := []string{} |  | ||||||
| 	for _, path := range importPaths { |  | ||||||
| 		out = append(out, tracker.PrintImport(path, tracker.pathToName[path])) |  | ||||||
| 	} |  | ||||||
| 	return out |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // LocalNameOf returns the name you would use to refer to the package at the |  | ||||||
| // specified path within the body of a file. |  | ||||||
| func (tracker *DefaultImportTracker) LocalNameOf(path string) string { |  | ||||||
| 	return tracker.pathToName[path] |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // PathOf returns the path that a given localName is referring to within the |  | ||||||
| // body of a file. |  | ||||||
| func (tracker *DefaultImportTracker) PathOf(localName string) (string, bool) { |  | ||||||
| 	name, ok := tracker.nameToPath[localName] |  | ||||||
| 	return name, ok |  | ||||||
| } |  | ||||||
							
								
								
									
										395
									
								
								vendor/k8s.io/gengo/namer/namer.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										395
									
								
								vendor/k8s.io/gengo/namer/namer.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,395 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| package namer |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"fmt" |  | ||||||
| 	"path/filepath" |  | ||||||
| 	"strconv" |  | ||||||
| 	"strings" |  | ||||||
|  |  | ||||||
| 	"k8s.io/gengo/types" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| const ( |  | ||||||
| 	// GoSeperator is used to split go import paths. |  | ||||||
| 	// Forward slash is used instead of filepath.Seperator because it is the |  | ||||||
| 	// only universally-accepted path delimiter and the only delimiter not |  | ||||||
| 	// potentially forbidden by Go compilers. (In particular gc does not allow |  | ||||||
| 	// the use of backslashes in import paths.) |  | ||||||
| 	// See https://golang.org/ref/spec#Import_declarations. |  | ||||||
| 	// See also https://github.com/kubernetes/gengo/issues/83#issuecomment-367040772. |  | ||||||
| 	GoSeperator = "/" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // Returns whether a name is a private Go name. |  | ||||||
| func IsPrivateGoName(name string) bool { |  | ||||||
| 	return len(name) == 0 || strings.ToLower(name[:1]) == name[:1] |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // NewPublicNamer is a helper function that returns a namer that makes |  | ||||||
| // CamelCase names. See the NameStrategy struct for an explanation of the |  | ||||||
| // arguments to this constructor. |  | ||||||
| func NewPublicNamer(prependPackageNames int, ignoreWords ...string) *NameStrategy { |  | ||||||
| 	n := &NameStrategy{ |  | ||||||
| 		Join:                Joiner(IC, IC), |  | ||||||
| 		IgnoreWords:         map[string]bool{}, |  | ||||||
| 		PrependPackageNames: prependPackageNames, |  | ||||||
| 	} |  | ||||||
| 	for _, w := range ignoreWords { |  | ||||||
| 		n.IgnoreWords[w] = true |  | ||||||
| 	} |  | ||||||
| 	return n |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // NewPrivateNamer is a helper function that returns a namer that makes |  | ||||||
| // camelCase names. See the NameStrategy struct for an explanation of the |  | ||||||
| // arguments to this constructor. |  | ||||||
| func NewPrivateNamer(prependPackageNames int, ignoreWords ...string) *NameStrategy { |  | ||||||
| 	n := &NameStrategy{ |  | ||||||
| 		Join:                Joiner(IL, IC), |  | ||||||
| 		IgnoreWords:         map[string]bool{}, |  | ||||||
| 		PrependPackageNames: prependPackageNames, |  | ||||||
| 	} |  | ||||||
| 	for _, w := range ignoreWords { |  | ||||||
| 		n.IgnoreWords[w] = true |  | ||||||
| 	} |  | ||||||
| 	return n |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // NewRawNamer will return a Namer that makes a name by which you would |  | ||||||
| // directly refer to a type, optionally keeping track of the import paths |  | ||||||
| // necessary to reference the names it provides. Tracker may be nil. |  | ||||||
| // The 'pkg' is the full package name, in which the Namer is used - all |  | ||||||
| // types from that package will be referenced by just type name without |  | ||||||
| // referencing the package. |  | ||||||
| // |  | ||||||
| // For example, if the type is map[string]int, a raw namer will literally |  | ||||||
| // return "map[string]int". |  | ||||||
| // |  | ||||||
| // Or if the type, in package foo, is "type Bar struct { ... }", then the raw |  | ||||||
| // namer will return "foo.Bar" as the name of the type, and if 'tracker' was |  | ||||||
| // not nil, will record that package foo needs to be imported. |  | ||||||
| func NewRawNamer(pkg string, tracker ImportTracker) *rawNamer { |  | ||||||
| 	return &rawNamer{pkg: pkg, tracker: tracker} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Names is a map from Type to name, as defined by some Namer. |  | ||||||
| type Names map[*types.Type]string |  | ||||||
|  |  | ||||||
| // Namer takes a type, and assigns a name. |  | ||||||
| // |  | ||||||
| // The purpose of this complexity is so that you can assign coherent |  | ||||||
| // side-by-side systems of names for the types. For example, you might want a |  | ||||||
| // public interface, a private implementation struct, and also to reference |  | ||||||
| // literally the type name. |  | ||||||
| // |  | ||||||
| // Note that it is safe to call your own Name() function recursively to find |  | ||||||
| // the names of keys, elements, etc. This is because anonymous types can't have |  | ||||||
| // cycles in their names, and named types don't require the sort of recursion |  | ||||||
| // that would be problematic. |  | ||||||
| type Namer interface { |  | ||||||
| 	Name(*types.Type) string |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // NameSystems is a map of a system name to a namer for that system. |  | ||||||
| type NameSystems map[string]Namer |  | ||||||
|  |  | ||||||
| // NameStrategy is a general Namer. The easiest way to use it is to copy the |  | ||||||
| // Public/PrivateNamer variables, and modify the members you wish to change. |  | ||||||
| // |  | ||||||
| // The Name method produces a name for the given type, of the forms: |  | ||||||
| // Anonymous types: <Prefix><Type description><Suffix> |  | ||||||
| // Named types: <Prefix><Optional Prepended Package name(s)><Original name><Suffix> |  | ||||||
| // |  | ||||||
| // In all cases, every part of the name is run through the capitalization |  | ||||||
| // functions. |  | ||||||
| // |  | ||||||
| // The IgnoreWords map can be set if you have directory names that are |  | ||||||
| // semantically meaningless for naming purposes, e.g. "proto". |  | ||||||
| // |  | ||||||
| // Prefix and Suffix can be used to disambiguate parallel systems of type |  | ||||||
| // names. For example, if you want to generate an interface and an |  | ||||||
| // implementation, you might want to suffix one with "Interface" and the other |  | ||||||
| // with "Implementation". Another common use-- if you want to generate private |  | ||||||
| // types, and one of your source types could be "string", you can't use the |  | ||||||
| // default lowercase private namer. You'll have to add a suffix or prefix. |  | ||||||
| type NameStrategy struct { |  | ||||||
| 	Prefix, Suffix string |  | ||||||
| 	Join           func(pre string, parts []string, post string) string |  | ||||||
|  |  | ||||||
| 	// Add non-meaningful package directory names here (e.g. "proto") and |  | ||||||
| 	// they will be ignored. |  | ||||||
| 	IgnoreWords map[string]bool |  | ||||||
|  |  | ||||||
| 	// If > 0, prepend exactly that many package directory names (or as |  | ||||||
| 	// many as there are).  Package names listed in "IgnoreWords" will be |  | ||||||
| 	// ignored. |  | ||||||
| 	// |  | ||||||
| 	// For example, if Ignore words lists "proto" and type Foo is in |  | ||||||
| 	// pkg/server/frobbing/proto, then a value of 1 will give a type name |  | ||||||
| 	// of FrobbingFoo, 2 gives ServerFrobbingFoo, etc. |  | ||||||
| 	PrependPackageNames int |  | ||||||
|  |  | ||||||
| 	// A cache of names thus far assigned by this namer. |  | ||||||
| 	Names |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // IC ensures the first character is uppercase. |  | ||||||
| func IC(in string) string { |  | ||||||
| 	if in == "" { |  | ||||||
| 		return in |  | ||||||
| 	} |  | ||||||
| 	return strings.ToUpper(in[:1]) + in[1:] |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // IL ensures the first character is lowercase. |  | ||||||
| func IL(in string) string { |  | ||||||
| 	if in == "" { |  | ||||||
| 		return in |  | ||||||
| 	} |  | ||||||
| 	return strings.ToLower(in[:1]) + in[1:] |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Joiner lets you specify functions that preprocess the various components of |  | ||||||
| // a name before joining them. You can construct e.g. camelCase or CamelCase or |  | ||||||
| // any other way of joining words. (See the IC and IL convenience functions.) |  | ||||||
| func Joiner(first, others func(string) string) func(pre string, in []string, post string) string { |  | ||||||
| 	return func(pre string, in []string, post string) string { |  | ||||||
| 		tmp := []string{others(pre)} |  | ||||||
| 		for i := range in { |  | ||||||
| 			tmp = append(tmp, others(in[i])) |  | ||||||
| 		} |  | ||||||
| 		tmp = append(tmp, others(post)) |  | ||||||
| 		return first(strings.Join(tmp, "")) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (ns *NameStrategy) removePrefixAndSuffix(s string) string { |  | ||||||
| 	// The join function may have changed capitalization. |  | ||||||
| 	lowerIn := strings.ToLower(s) |  | ||||||
| 	lowerP := strings.ToLower(ns.Prefix) |  | ||||||
| 	lowerS := strings.ToLower(ns.Suffix) |  | ||||||
| 	b, e := 0, len(s) |  | ||||||
| 	if strings.HasPrefix(lowerIn, lowerP) { |  | ||||||
| 		b = len(ns.Prefix) |  | ||||||
| 	} |  | ||||||
| 	if strings.HasSuffix(lowerIn, lowerS) { |  | ||||||
| 		e -= len(ns.Suffix) |  | ||||||
| 	} |  | ||||||
| 	return s[b:e] |  | ||||||
| } |  | ||||||
|  |  | ||||||
| var ( |  | ||||||
| 	importPathNameSanitizer = strings.NewReplacer("-", "_", ".", "") |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // filters out unwanted directory names and sanitizes remaining names. |  | ||||||
| func (ns *NameStrategy) filterDirs(path string) []string { |  | ||||||
| 	allDirs := strings.Split(path, GoSeperator) |  | ||||||
| 	dirs := make([]string, 0, len(allDirs)) |  | ||||||
| 	for _, p := range allDirs { |  | ||||||
| 		if ns.IgnoreWords == nil || !ns.IgnoreWords[p] { |  | ||||||
| 			dirs = append(dirs, importPathNameSanitizer.Replace(p)) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return dirs |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // See the comment on NameStrategy. |  | ||||||
| func (ns *NameStrategy) Name(t *types.Type) string { |  | ||||||
| 	if ns.Names == nil { |  | ||||||
| 		ns.Names = Names{} |  | ||||||
| 	} |  | ||||||
| 	if s, ok := ns.Names[t]; ok { |  | ||||||
| 		return s |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if t.Name.Package != "" { |  | ||||||
| 		dirs := append(ns.filterDirs(t.Name.Package), t.Name.Name) |  | ||||||
| 		i := ns.PrependPackageNames + 1 |  | ||||||
| 		dn := len(dirs) |  | ||||||
| 		if i > dn { |  | ||||||
| 			i = dn |  | ||||||
| 		} |  | ||||||
| 		name := ns.Join(ns.Prefix, dirs[dn-i:], ns.Suffix) |  | ||||||
| 		ns.Names[t] = name |  | ||||||
| 		return name |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// Only anonymous types remain. |  | ||||||
| 	var name string |  | ||||||
| 	switch t.Kind { |  | ||||||
| 	case types.Builtin: |  | ||||||
| 		name = ns.Join(ns.Prefix, []string{t.Name.Name}, ns.Suffix) |  | ||||||
| 	case types.Map: |  | ||||||
| 		name = ns.Join(ns.Prefix, []string{ |  | ||||||
| 			"Map", |  | ||||||
| 			ns.removePrefixAndSuffix(ns.Name(t.Key)), |  | ||||||
| 			"To", |  | ||||||
| 			ns.removePrefixAndSuffix(ns.Name(t.Elem)), |  | ||||||
| 		}, ns.Suffix) |  | ||||||
| 	case types.Slice: |  | ||||||
| 		name = ns.Join(ns.Prefix, []string{ |  | ||||||
| 			"Slice", |  | ||||||
| 			ns.removePrefixAndSuffix(ns.Name(t.Elem)), |  | ||||||
| 		}, ns.Suffix) |  | ||||||
| 	case types.Array: |  | ||||||
| 		name = ns.Join(ns.Prefix, []string{ |  | ||||||
| 			"Array", |  | ||||||
| 			ns.removePrefixAndSuffix(fmt.Sprintf("%d", t.Len)), |  | ||||||
| 			ns.removePrefixAndSuffix(ns.Name(t.Elem)), |  | ||||||
| 		}, ns.Suffix) |  | ||||||
| 	case types.Pointer: |  | ||||||
| 		name = ns.Join(ns.Prefix, []string{ |  | ||||||
| 			"Pointer", |  | ||||||
| 			ns.removePrefixAndSuffix(ns.Name(t.Elem)), |  | ||||||
| 		}, ns.Suffix) |  | ||||||
| 	case types.Struct: |  | ||||||
| 		names := []string{"Struct"} |  | ||||||
| 		for _, m := range t.Members { |  | ||||||
| 			names = append(names, ns.removePrefixAndSuffix(ns.Name(m.Type))) |  | ||||||
| 		} |  | ||||||
| 		name = ns.Join(ns.Prefix, names, ns.Suffix) |  | ||||||
| 	case types.Chan: |  | ||||||
| 		name = ns.Join(ns.Prefix, []string{ |  | ||||||
| 			"Chan", |  | ||||||
| 			ns.removePrefixAndSuffix(ns.Name(t.Elem)), |  | ||||||
| 		}, ns.Suffix) |  | ||||||
| 	case types.Interface: |  | ||||||
| 		// TODO: add to name test |  | ||||||
| 		names := []string{"Interface"} |  | ||||||
| 		for _, m := range t.Methods { |  | ||||||
| 			// TODO: include function signature |  | ||||||
| 			names = append(names, m.Name.Name) |  | ||||||
| 		} |  | ||||||
| 		name = ns.Join(ns.Prefix, names, ns.Suffix) |  | ||||||
| 	case types.Func: |  | ||||||
| 		// TODO: add to name test |  | ||||||
| 		parts := []string{"Func"} |  | ||||||
| 		for _, pt := range t.Signature.Parameters { |  | ||||||
| 			parts = append(parts, ns.removePrefixAndSuffix(ns.Name(pt))) |  | ||||||
| 		} |  | ||||||
| 		parts = append(parts, "Returns") |  | ||||||
| 		for _, rt := range t.Signature.Results { |  | ||||||
| 			parts = append(parts, ns.removePrefixAndSuffix(ns.Name(rt))) |  | ||||||
| 		} |  | ||||||
| 		name = ns.Join(ns.Prefix, parts, ns.Suffix) |  | ||||||
| 	default: |  | ||||||
| 		name = "unnameable_" + string(t.Kind) |  | ||||||
| 	} |  | ||||||
| 	ns.Names[t] = name |  | ||||||
| 	return name |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // ImportTracker allows a raw namer to keep track of the packages needed for |  | ||||||
| // import. You can implement yourself or use the one in the generation package. |  | ||||||
| type ImportTracker interface { |  | ||||||
| 	AddType(*types.Type) |  | ||||||
| 	AddSymbol(types.Name) |  | ||||||
| 	LocalNameOf(packagePath string) string |  | ||||||
| 	PathOf(localName string) (string, bool) |  | ||||||
| 	ImportLines() []string |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type rawNamer struct { |  | ||||||
| 	pkg     string |  | ||||||
| 	tracker ImportTracker |  | ||||||
| 	Names |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Name makes a name the way you'd write it to literally refer to type t, |  | ||||||
| // making ordinary assumptions about how you've imported t's package (or using |  | ||||||
| // r.tracker to specifically track the package imports). |  | ||||||
| func (r *rawNamer) Name(t *types.Type) string { |  | ||||||
| 	if r.Names == nil { |  | ||||||
| 		r.Names = Names{} |  | ||||||
| 	} |  | ||||||
| 	if name, ok := r.Names[t]; ok { |  | ||||||
| 		return name |  | ||||||
| 	} |  | ||||||
| 	if t.Name.Package != "" { |  | ||||||
| 		var name string |  | ||||||
| 		if r.tracker != nil { |  | ||||||
| 			r.tracker.AddType(t) |  | ||||||
| 			if t.Name.Package == r.pkg { |  | ||||||
| 				name = t.Name.Name |  | ||||||
| 			} else { |  | ||||||
| 				name = r.tracker.LocalNameOf(t.Name.Package) + "." + t.Name.Name |  | ||||||
| 			} |  | ||||||
| 		} else { |  | ||||||
| 			if t.Name.Package == r.pkg { |  | ||||||
| 				name = t.Name.Name |  | ||||||
| 			} else { |  | ||||||
| 				name = filepath.Base(t.Name.Package) + "." + t.Name.Name |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		r.Names[t] = name |  | ||||||
| 		return name |  | ||||||
| 	} |  | ||||||
| 	var name string |  | ||||||
| 	switch t.Kind { |  | ||||||
| 	case types.Builtin: |  | ||||||
| 		name = t.Name.Name |  | ||||||
| 	case types.Map: |  | ||||||
| 		name = "map[" + r.Name(t.Key) + "]" + r.Name(t.Elem) |  | ||||||
| 	case types.Slice: |  | ||||||
| 		name = "[]" + r.Name(t.Elem) |  | ||||||
| 	case types.Array: |  | ||||||
| 		l := strconv.Itoa(int(t.Len)) |  | ||||||
| 		name = "[" + l + "]" + r.Name(t.Elem) |  | ||||||
| 	case types.Pointer: |  | ||||||
| 		name = "*" + r.Name(t.Elem) |  | ||||||
| 	case types.Struct: |  | ||||||
| 		elems := []string{} |  | ||||||
| 		for _, m := range t.Members { |  | ||||||
| 			elems = append(elems, m.Name+" "+r.Name(m.Type)) |  | ||||||
| 		} |  | ||||||
| 		name = "struct{" + strings.Join(elems, "; ") + "}" |  | ||||||
| 	case types.Chan: |  | ||||||
| 		// TODO: include directionality |  | ||||||
| 		name = "chan " + r.Name(t.Elem) |  | ||||||
| 	case types.Interface: |  | ||||||
| 		// TODO: add to name test |  | ||||||
| 		elems := []string{} |  | ||||||
| 		for _, m := range t.Methods { |  | ||||||
| 			// TODO: include function signature |  | ||||||
| 			elems = append(elems, m.Name.Name) |  | ||||||
| 		} |  | ||||||
| 		name = "interface{" + strings.Join(elems, "; ") + "}" |  | ||||||
| 	case types.Func: |  | ||||||
| 		// TODO: add to name test |  | ||||||
| 		params := []string{} |  | ||||||
| 		for _, pt := range t.Signature.Parameters { |  | ||||||
| 			params = append(params, r.Name(pt)) |  | ||||||
| 		} |  | ||||||
| 		results := []string{} |  | ||||||
| 		for _, rt := range t.Signature.Results { |  | ||||||
| 			results = append(results, r.Name(rt)) |  | ||||||
| 		} |  | ||||||
| 		name = "func(" + strings.Join(params, ",") + ")" |  | ||||||
| 		if len(results) == 1 { |  | ||||||
| 			name += " " + results[0] |  | ||||||
| 		} else if len(results) > 1 { |  | ||||||
| 			name += " (" + strings.Join(results, ",") + ")" |  | ||||||
| 		} |  | ||||||
| 	default: |  | ||||||
| 		name = "unnameable_" + string(t.Kind) |  | ||||||
| 	} |  | ||||||
| 	r.Names[t] = name |  | ||||||
| 	return name |  | ||||||
| } |  | ||||||
							
								
								
									
										72
									
								
								vendor/k8s.io/gengo/namer/order.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										72
									
								
								vendor/k8s.io/gengo/namer/order.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,72 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| package namer |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"sort" |  | ||||||
|  |  | ||||||
| 	"k8s.io/gengo/types" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // Orderer produces an ordering of types given a Namer. |  | ||||||
| type Orderer struct { |  | ||||||
| 	Namer |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // OrderUniverse assigns a name to every type in the Universe, including Types, |  | ||||||
| // Functions and Variables, and returns a list sorted by those names. |  | ||||||
| func (o *Orderer) OrderUniverse(u types.Universe) []*types.Type { |  | ||||||
| 	list := tList{ |  | ||||||
| 		namer: o.Namer, |  | ||||||
| 	} |  | ||||||
| 	for _, p := range u { |  | ||||||
| 		for _, t := range p.Types { |  | ||||||
| 			list.types = append(list.types, t) |  | ||||||
| 		} |  | ||||||
| 		for _, f := range p.Functions { |  | ||||||
| 			list.types = append(list.types, f) |  | ||||||
| 		} |  | ||||||
| 		for _, v := range p.Variables { |  | ||||||
| 			list.types = append(list.types, v) |  | ||||||
| 		} |  | ||||||
| 		for _, v := range p.Constants { |  | ||||||
| 			list.types = append(list.types, v) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	sort.Sort(list) |  | ||||||
| 	return list.types |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // OrderTypes assigns a name to every type, and returns a list sorted by those |  | ||||||
| // names. |  | ||||||
| func (o *Orderer) OrderTypes(typeList []*types.Type) []*types.Type { |  | ||||||
| 	list := tList{ |  | ||||||
| 		namer: o.Namer, |  | ||||||
| 		types: typeList, |  | ||||||
| 	} |  | ||||||
| 	sort.Sort(list) |  | ||||||
| 	return list.types |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type tList struct { |  | ||||||
| 	namer Namer |  | ||||||
| 	types []*types.Type |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (t tList) Len() int           { return len(t.types) } |  | ||||||
| func (t tList) Less(i, j int) bool { return t.namer.Name(t.types[i]) < t.namer.Name(t.types[j]) } |  | ||||||
| func (t tList) Swap(i, j int)      { t.types[i], t.types[j] = t.types[j], t.types[i] } |  | ||||||
							
								
								
									
										120
									
								
								vendor/k8s.io/gengo/namer/plural_namer.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										120
									
								
								vendor/k8s.io/gengo/namer/plural_namer.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,120 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| package namer |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"strings" |  | ||||||
|  |  | ||||||
| 	"k8s.io/gengo/types" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| var consonants = "bcdfghjklmnpqrstvwxyz" |  | ||||||
|  |  | ||||||
| type pluralNamer struct { |  | ||||||
| 	// key is the case-sensitive type name, value is the case-insensitive |  | ||||||
| 	// intended output. |  | ||||||
| 	exceptions map[string]string |  | ||||||
| 	finalize   func(string) string |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // NewPublicPluralNamer returns a namer that returns the plural form of the input |  | ||||||
| // type's name, starting with a uppercase letter. |  | ||||||
| func NewPublicPluralNamer(exceptions map[string]string) *pluralNamer { |  | ||||||
| 	return &pluralNamer{exceptions, IC} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // NewPrivatePluralNamer returns a namer that returns the plural form of the input |  | ||||||
| // type's name, starting with a lowercase letter. |  | ||||||
| func NewPrivatePluralNamer(exceptions map[string]string) *pluralNamer { |  | ||||||
| 	return &pluralNamer{exceptions, IL} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // NewAllLowercasePluralNamer returns a namer that returns the plural form of the input |  | ||||||
| // type's name, with all letters in lowercase. |  | ||||||
| func NewAllLowercasePluralNamer(exceptions map[string]string) *pluralNamer { |  | ||||||
| 	return &pluralNamer{exceptions, strings.ToLower} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Name returns the plural form of the type's name. If the type's name is found |  | ||||||
| // in the exceptions map, the map value is returned. |  | ||||||
| func (r *pluralNamer) Name(t *types.Type) string { |  | ||||||
| 	singular := t.Name.Name |  | ||||||
| 	var plural string |  | ||||||
| 	var ok bool |  | ||||||
| 	if plural, ok = r.exceptions[singular]; ok { |  | ||||||
| 		return r.finalize(plural) |  | ||||||
| 	} |  | ||||||
| 	if len(singular) < 2 { |  | ||||||
| 		return r.finalize(singular) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	switch rune(singular[len(singular)-1]) { |  | ||||||
| 	case 's', 'x', 'z': |  | ||||||
| 		plural = esPlural(singular) |  | ||||||
| 	case 'y': |  | ||||||
| 		sl := rune(singular[len(singular)-2]) |  | ||||||
| 		if isConsonant(sl) { |  | ||||||
| 			plural = iesPlural(singular) |  | ||||||
| 		} else { |  | ||||||
| 			plural = sPlural(singular) |  | ||||||
| 		} |  | ||||||
| 	case 'h': |  | ||||||
| 		sl := rune(singular[len(singular)-2]) |  | ||||||
| 		if sl == 'c' || sl == 's' { |  | ||||||
| 			plural = esPlural(singular) |  | ||||||
| 		} else { |  | ||||||
| 			plural = sPlural(singular) |  | ||||||
| 		} |  | ||||||
| 	case 'e': |  | ||||||
| 		sl := rune(singular[len(singular)-2]) |  | ||||||
| 		if sl == 'f' { |  | ||||||
| 			plural = vesPlural(singular[:len(singular)-1]) |  | ||||||
| 		} else { |  | ||||||
| 			plural = sPlural(singular) |  | ||||||
| 		} |  | ||||||
| 	case 'f': |  | ||||||
| 		plural = vesPlural(singular) |  | ||||||
| 	default: |  | ||||||
| 		plural = sPlural(singular) |  | ||||||
| 	} |  | ||||||
| 	return r.finalize(plural) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func iesPlural(singular string) string { |  | ||||||
| 	return singular[:len(singular)-1] + "ies" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func vesPlural(singular string) string { |  | ||||||
| 	return singular[:len(singular)-1] + "ves" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func esPlural(singular string) string { |  | ||||||
| 	return singular + "es" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func sPlural(singular string) string { |  | ||||||
| 	return singular + "s" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func isConsonant(char rune) bool { |  | ||||||
| 	for _, c := range consonants { |  | ||||||
| 		if char == c { |  | ||||||
| 			return true |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return false |  | ||||||
| } |  | ||||||
							
								
								
									
										19
									
								
								vendor/k8s.io/gengo/parser/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								vendor/k8s.io/gengo/parser/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,19 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| // Package parser provides code to parse go files, type-check them, extract the |  | ||||||
| // types. |  | ||||||
| package parser // import "k8s.io/gengo/parser" |  | ||||||
							
								
								
									
										925
									
								
								vendor/k8s.io/gengo/parser/parse.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										925
									
								
								vendor/k8s.io/gengo/parser/parse.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,925 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| package parser |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"fmt" |  | ||||||
| 	"go/ast" |  | ||||||
| 	"go/build" |  | ||||||
| 	"go/constant" |  | ||||||
| 	"go/parser" |  | ||||||
| 	"go/token" |  | ||||||
| 	tc "go/types" |  | ||||||
| 	"io/ioutil" |  | ||||||
| 	"os" |  | ||||||
| 	"os/exec" |  | ||||||
| 	"path" |  | ||||||
| 	"path/filepath" |  | ||||||
| 	"regexp" |  | ||||||
| 	"sort" |  | ||||||
| 	"strings" |  | ||||||
|  |  | ||||||
| 	"k8s.io/gengo/types" |  | ||||||
| 	"k8s.io/klog/v2" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // This clarifies when a pkg path has been canonicalized. |  | ||||||
| type importPathString string |  | ||||||
|  |  | ||||||
| // Builder lets you add all the go files in all the packages that you care |  | ||||||
| // about, then constructs the type source data. |  | ||||||
| type Builder struct { |  | ||||||
| 	context *build.Context |  | ||||||
|  |  | ||||||
| 	// If true, include *_test.go |  | ||||||
| 	IncludeTestFiles bool |  | ||||||
|  |  | ||||||
| 	// Map of package names to more canonical information about the package. |  | ||||||
| 	// This might hold the same value for multiple names, e.g. if someone |  | ||||||
| 	// referenced ./pkg/name or in the case of vendoring, which canonicalizes |  | ||||||
| 	// differently that what humans would type. |  | ||||||
| 	// |  | ||||||
| 	// This must only be accessed via getLoadedBuildPackage and setLoadedBuildPackage |  | ||||||
| 	buildPackages map[importPathString]*build.Package |  | ||||||
|  |  | ||||||
| 	fset *token.FileSet |  | ||||||
| 	// map of package path to list of parsed files |  | ||||||
| 	parsed map[importPathString][]parsedFile |  | ||||||
| 	// map of package path to absolute path (to prevent overlap) |  | ||||||
| 	absPaths map[importPathString]string |  | ||||||
|  |  | ||||||
| 	// Set by typeCheckPackage(), used by importPackage() and friends. |  | ||||||
| 	typeCheckedPackages map[importPathString]*tc.Package |  | ||||||
|  |  | ||||||
| 	// Map of package path to whether the user requested it or it was from |  | ||||||
| 	// an import. |  | ||||||
| 	userRequested map[importPathString]bool |  | ||||||
|  |  | ||||||
| 	// All comments from everywhere in every parsed file. |  | ||||||
| 	endLineToCommentGroup map[fileLine]*ast.CommentGroup |  | ||||||
|  |  | ||||||
| 	// map of package to list of packages it imports. |  | ||||||
| 	importGraph map[importPathString]map[string]struct{} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // parsedFile is for tracking files with name |  | ||||||
| type parsedFile struct { |  | ||||||
| 	name string |  | ||||||
| 	file *ast.File |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // key type for finding comments. |  | ||||||
| type fileLine struct { |  | ||||||
| 	file string |  | ||||||
| 	line int |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // New constructs a new builder. |  | ||||||
| func New() *Builder { |  | ||||||
| 	c := build.Default |  | ||||||
| 	if c.GOROOT == "" { |  | ||||||
| 		if p, err := exec.Command("which", "go").CombinedOutput(); err == nil { |  | ||||||
| 			// The returned string will have some/path/bin/go, so remove the last two elements. |  | ||||||
| 			c.GOROOT = filepath.Dir(filepath.Dir(strings.Trim(string(p), "\n"))) |  | ||||||
| 		} else { |  | ||||||
| 			klog.Warningf("Warning: $GOROOT not set, and unable to run `which go` to find it: %v\n", err) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	// Force this to off, since we don't properly parse CGo.  All symbols must |  | ||||||
| 	// have non-CGo equivalents. |  | ||||||
| 	c.CgoEnabled = false |  | ||||||
| 	return &Builder{ |  | ||||||
| 		context:               &c, |  | ||||||
| 		buildPackages:         map[importPathString]*build.Package{}, |  | ||||||
| 		typeCheckedPackages:   map[importPathString]*tc.Package{}, |  | ||||||
| 		fset:                  token.NewFileSet(), |  | ||||||
| 		parsed:                map[importPathString][]parsedFile{}, |  | ||||||
| 		absPaths:              map[importPathString]string{}, |  | ||||||
| 		userRequested:         map[importPathString]bool{}, |  | ||||||
| 		endLineToCommentGroup: map[fileLine]*ast.CommentGroup{}, |  | ||||||
| 		importGraph:           map[importPathString]map[string]struct{}{}, |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // AddBuildTags adds the specified build tags to the parse context. |  | ||||||
| func (b *Builder) AddBuildTags(tags ...string) { |  | ||||||
| 	b.context.BuildTags = append(b.context.BuildTags, tags...) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (b *Builder) getLoadedBuildPackage(importPath string) (*build.Package, bool) { |  | ||||||
| 	canonicalized := canonicalizeImportPath(importPath) |  | ||||||
| 	if string(canonicalized) != importPath { |  | ||||||
| 		klog.V(5).Infof("getLoadedBuildPackage: %s normalized to %s", importPath, canonicalized) |  | ||||||
| 	} |  | ||||||
| 	buildPkg, ok := b.buildPackages[canonicalized] |  | ||||||
| 	return buildPkg, ok |  | ||||||
| } |  | ||||||
| func (b *Builder) setLoadedBuildPackage(importPath string, buildPkg *build.Package) { |  | ||||||
| 	canonicalizedImportPath := canonicalizeImportPath(importPath) |  | ||||||
| 	if string(canonicalizedImportPath) != importPath { |  | ||||||
| 		klog.V(5).Infof("setLoadedBuildPackage: importPath %s normalized to %s", importPath, canonicalizedImportPath) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	canonicalizedBuildPkgImportPath := canonicalizeImportPath(buildPkg.ImportPath) |  | ||||||
| 	if string(canonicalizedBuildPkgImportPath) != buildPkg.ImportPath { |  | ||||||
| 		klog.V(5).Infof("setLoadedBuildPackage: buildPkg.ImportPath %s normalized to %s", buildPkg.ImportPath, canonicalizedBuildPkgImportPath) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if canonicalizedImportPath != canonicalizedBuildPkgImportPath { |  | ||||||
| 		klog.V(5).Infof("setLoadedBuildPackage: normalized importPath (%s) differs from buildPkg.ImportPath (%s)", canonicalizedImportPath, canonicalizedBuildPkgImportPath) |  | ||||||
| 	} |  | ||||||
| 	b.buildPackages[canonicalizedImportPath] = buildPkg |  | ||||||
| 	b.buildPackages[canonicalizedBuildPkgImportPath] = buildPkg |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Get package information from the go/build package. Automatically excludes |  | ||||||
| // e.g. test files and files for other platforms-- there is quite a bit of |  | ||||||
| // logic of that nature in the build package. |  | ||||||
| func (b *Builder) importBuildPackage(dir string) (*build.Package, error) { |  | ||||||
| 	if buildPkg, ok := b.getLoadedBuildPackage(dir); ok { |  | ||||||
| 		return buildPkg, nil |  | ||||||
| 	} |  | ||||||
| 	// This validates the `package foo // github.com/bar/foo` comments. |  | ||||||
| 	buildPkg, err := b.importWithMode(dir, build.ImportComment) |  | ||||||
| 	if err != nil { |  | ||||||
| 		if _, ok := err.(*build.NoGoError); !ok { |  | ||||||
| 			return nil, fmt.Errorf("unable to import %q: %v", dir, err) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	if buildPkg == nil { |  | ||||||
| 		// Might be an empty directory. Try to just find the dir. |  | ||||||
| 		buildPkg, err = b.importWithMode(dir, build.FindOnly) |  | ||||||
| 		if err != nil { |  | ||||||
| 			return nil, err |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// Remember it under the user-provided name. |  | ||||||
| 	klog.V(5).Infof("saving buildPackage %s", dir) |  | ||||||
| 	b.setLoadedBuildPackage(dir, buildPkg) |  | ||||||
|  |  | ||||||
| 	return buildPkg, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // AddFileForTest adds a file to the set, without verifying that the provided |  | ||||||
| // pkg actually exists on disk. The pkg must be of the form "canonical/pkg/path" |  | ||||||
| // and the path must be the absolute path to the file.  Because this bypasses |  | ||||||
| // the normal recursive finding of package dependencies (on disk), test should |  | ||||||
| // sort their test files topologically first, so all deps are resolved by the |  | ||||||
| // time we need them. |  | ||||||
| func (b *Builder) AddFileForTest(pkg string, path string, src []byte) error { |  | ||||||
| 	if err := b.addFile(importPathString(pkg), path, src, true); err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	if _, err := b.typeCheckPackage(importPathString(pkg), true); err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // addFile adds a file to the set. The pkgPath must be of the form |  | ||||||
| // "canonical/pkg/path" and the path must be the absolute path to the file. A |  | ||||||
| // flag indicates whether this file was user-requested or just from following |  | ||||||
| // the import graph. |  | ||||||
| func (b *Builder) addFile(pkgPath importPathString, path string, src []byte, userRequested bool) error { |  | ||||||
| 	for _, p := range b.parsed[pkgPath] { |  | ||||||
| 		if path == p.name { |  | ||||||
| 			klog.V(5).Infof("addFile %s %s already parsed, skipping", pkgPath, path) |  | ||||||
| 			return nil |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	klog.V(6).Infof("addFile %s %s", pkgPath, path) |  | ||||||
| 	p, err := parser.ParseFile(b.fset, path, src, parser.DeclarationErrors|parser.ParseComments) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// This is redundant with addDir, but some tests call AddFileForTest, which |  | ||||||
| 	// call into here without calling addDir. |  | ||||||
| 	b.userRequested[pkgPath] = userRequested || b.userRequested[pkgPath] |  | ||||||
|  |  | ||||||
| 	b.parsed[pkgPath] = append(b.parsed[pkgPath], parsedFile{path, p}) |  | ||||||
| 	for _, c := range p.Comments { |  | ||||||
| 		position := b.fset.Position(c.End()) |  | ||||||
| 		b.endLineToCommentGroup[fileLine{position.Filename, position.Line}] = c |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// We have to get the packages from this specific file, in case the |  | ||||||
| 	// user added individual files instead of entire directories. |  | ||||||
| 	if b.importGraph[pkgPath] == nil { |  | ||||||
| 		b.importGraph[pkgPath] = map[string]struct{}{} |  | ||||||
| 	} |  | ||||||
| 	for _, im := range p.Imports { |  | ||||||
| 		importedPath := strings.Trim(im.Path.Value, `"`) |  | ||||||
| 		b.importGraph[pkgPath][importedPath] = struct{}{} |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // AddDir adds an entire directory, scanning it for go files. 'dir' should have |  | ||||||
| // a single go package in it. GOPATH, GOROOT, and the location of your go |  | ||||||
| // binary (`which go`) will all be searched if dir doesn't literally resolve. |  | ||||||
| func (b *Builder) AddDir(dir string) error { |  | ||||||
| 	_, err := b.importPackage(dir, true) |  | ||||||
| 	return err |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // AddDirRecursive is just like AddDir, but it also recursively adds |  | ||||||
| // subdirectories; it returns an error only if the path couldn't be resolved; |  | ||||||
| // any directories recursed into without go source are ignored. |  | ||||||
| func (b *Builder) AddDirRecursive(dir string) error { |  | ||||||
| 	// Add the root. |  | ||||||
| 	if _, err := b.importPackage(dir, true); err != nil { |  | ||||||
| 		klog.Warningf("Ignoring directory %v: %v", dir, err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// filepath.Walk does not follow symlinks. We therefore evaluate symlinks and use that with |  | ||||||
| 	// filepath.Walk. |  | ||||||
| 	buildPkg, ok := b.getLoadedBuildPackage(dir) |  | ||||||
| 	if !ok { |  | ||||||
| 		return fmt.Errorf("no loaded build package for %s", dir) |  | ||||||
| 	} |  | ||||||
| 	realPath, err := filepath.EvalSymlinks(buildPkg.Dir) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	fn := func(filePath string, info os.FileInfo, err error) error { |  | ||||||
| 		if info != nil && info.IsDir() { |  | ||||||
| 			rel := filepath.ToSlash(strings.TrimPrefix(filePath, realPath)) |  | ||||||
| 			if rel != "" { |  | ||||||
| 				// Make a pkg path. |  | ||||||
| 				buildPkg, ok := b.getLoadedBuildPackage(dir) |  | ||||||
| 				if !ok { |  | ||||||
| 					return fmt.Errorf("no loaded build package for %s", dir) |  | ||||||
| 				} |  | ||||||
| 				pkg := path.Join(string(canonicalizeImportPath(buildPkg.ImportPath)), rel) |  | ||||||
|  |  | ||||||
| 				// Add it. |  | ||||||
| 				if _, err := b.importPackage(pkg, true); err != nil { |  | ||||||
| 					klog.Warningf("Ignoring child directory %v: %v", pkg, err) |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		return nil |  | ||||||
| 	} |  | ||||||
| 	if err := filepath.Walk(realPath, fn); err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // AddDirTo adds an entire directory to a given Universe. Unlike AddDir, this |  | ||||||
| // processes the package immediately, which makes it safe to use from within a |  | ||||||
| // generator (rather than just at init time. 'dir' must be a single go package. |  | ||||||
| // GOPATH, GOROOT, and the location of your go binary (`which go`) will all be |  | ||||||
| // searched if dir doesn't literally resolve. |  | ||||||
| // Deprecated. Please use AddDirectoryTo. |  | ||||||
| func (b *Builder) AddDirTo(dir string, u *types.Universe) error { |  | ||||||
| 	// We want all types from this package, as if they were directly added |  | ||||||
| 	// by the user.  They WERE added by the user, in effect. |  | ||||||
| 	if _, err := b.importPackage(dir, true); err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	pkg, ok := b.getLoadedBuildPackage(dir) |  | ||||||
| 	if !ok { |  | ||||||
| 		return fmt.Errorf("no such package: %q", dir) |  | ||||||
| 	} |  | ||||||
| 	return b.findTypesIn(canonicalizeImportPath(pkg.ImportPath), u) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // AddDirectoryTo adds an entire directory to a given Universe. Unlike AddDir, |  | ||||||
| // this processes the package immediately, which makes it safe to use from |  | ||||||
| // within a generator (rather than just at init time. 'dir' must be a single go |  | ||||||
| // package. GOPATH, GOROOT, and the location of your go binary (`which go`) |  | ||||||
| // will all be searched if dir doesn't literally resolve. |  | ||||||
| func (b *Builder) AddDirectoryTo(dir string, u *types.Universe) (*types.Package, error) { |  | ||||||
| 	// We want all types from this package, as if they were directly added |  | ||||||
| 	// by the user.  They WERE added by the user, in effect. |  | ||||||
| 	if _, err := b.importPackage(dir, true); err != nil { |  | ||||||
| 		return nil, err |  | ||||||
| 	} |  | ||||||
| 	pkg, ok := b.getLoadedBuildPackage(dir) |  | ||||||
| 	if !ok || pkg == nil { |  | ||||||
| 		return nil, fmt.Errorf("no such package: %q", dir) |  | ||||||
| 	} |  | ||||||
| 	path := canonicalizeImportPath(pkg.ImportPath) |  | ||||||
| 	if err := b.findTypesIn(path, u); err != nil { |  | ||||||
| 		return nil, err |  | ||||||
| 	} |  | ||||||
| 	return u.Package(string(path)), nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // The implementation of AddDir. A flag indicates whether this directory was |  | ||||||
| // user-requested or just from following the import graph. |  | ||||||
| func (b *Builder) addDir(dir string, userRequested bool) error { |  | ||||||
| 	klog.V(5).Infof("addDir %s", dir) |  | ||||||
| 	buildPkg, err := b.importBuildPackage(dir) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	canonicalPackage := canonicalizeImportPath(buildPkg.ImportPath) |  | ||||||
| 	pkgPath := canonicalPackage |  | ||||||
| 	if dir != string(canonicalPackage) { |  | ||||||
| 		klog.V(5).Infof("addDir %s, canonical path is %s", dir, pkgPath) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// Sanity check the pkg dir has not changed. |  | ||||||
| 	if prev, found := b.absPaths[pkgPath]; found { |  | ||||||
| 		if buildPkg.Dir != prev { |  | ||||||
| 			return fmt.Errorf("package %q (%s) previously resolved to %s", pkgPath, buildPkg.Dir, prev) |  | ||||||
| 		} |  | ||||||
| 	} else { |  | ||||||
| 		b.absPaths[pkgPath] = buildPkg.Dir |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	files := []string{} |  | ||||||
| 	files = append(files, buildPkg.GoFiles...) |  | ||||||
| 	if b.IncludeTestFiles { |  | ||||||
| 		files = append(files, buildPkg.TestGoFiles...) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	for _, file := range files { |  | ||||||
| 		if !strings.HasSuffix(file, ".go") { |  | ||||||
| 			continue |  | ||||||
| 		} |  | ||||||
| 		absPath := filepath.Join(buildPkg.Dir, file) |  | ||||||
| 		data, err := ioutil.ReadFile(absPath) |  | ||||||
| 		if err != nil { |  | ||||||
| 			return fmt.Errorf("while loading %q: %v", absPath, err) |  | ||||||
| 		} |  | ||||||
| 		err = b.addFile(pkgPath, absPath, data, userRequested) |  | ||||||
| 		if err != nil { |  | ||||||
| 			return fmt.Errorf("while parsing %q: %v", absPath, err) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // regexErrPackageNotFound helps test the expected error for not finding a package. |  | ||||||
| var regexErrPackageNotFound = regexp.MustCompile(`^unable to import ".*?":.*`) |  | ||||||
|  |  | ||||||
| func isErrPackageNotFound(err error) bool { |  | ||||||
| 	return regexErrPackageNotFound.MatchString(err.Error()) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // importPackage is a function that will be called by the type check package when it |  | ||||||
| // needs to import a go package. 'path' is the import path. |  | ||||||
| func (b *Builder) importPackage(dir string, userRequested bool) (*tc.Package, error) { |  | ||||||
| 	klog.V(5).Infof("importPackage %s", dir) |  | ||||||
|  |  | ||||||
| 	var pkgPath = importPathString(dir) |  | ||||||
|  |  | ||||||
| 	// Get the canonical path if we can. |  | ||||||
| 	if buildPkg, _ := b.getLoadedBuildPackage(dir); buildPkg != nil { |  | ||||||
| 		canonicalPackage := canonicalizeImportPath(buildPkg.ImportPath) |  | ||||||
| 		klog.V(5).Infof("importPackage %s, canonical path is %s", dir, canonicalPackage) |  | ||||||
| 		pkgPath = canonicalPackage |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// If we have not seen this before, process it now. |  | ||||||
| 	ignoreError := false |  | ||||||
| 	if _, found := b.parsed[pkgPath]; !found { |  | ||||||
| 		// Ignore errors in paths that we're importing solely because |  | ||||||
| 		// they're referenced by other packages. |  | ||||||
| 		ignoreError = true |  | ||||||
|  |  | ||||||
| 		// Add it. |  | ||||||
| 		if err := b.addDir(dir, userRequested); err != nil { |  | ||||||
| 			if isErrPackageNotFound(err) { |  | ||||||
| 				klog.V(6).Info(err) |  | ||||||
| 				return nil, nil |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			return nil, err |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		// Get the canonical path now that it has been added. |  | ||||||
| 		if buildPkg, _ := b.getLoadedBuildPackage(dir); buildPkg != nil { |  | ||||||
| 			canonicalPackage := canonicalizeImportPath(buildPkg.ImportPath) |  | ||||||
| 			klog.V(5).Infof("importPackage %s, canonical path is %s", dir, canonicalPackage) |  | ||||||
| 			pkgPath = canonicalPackage |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// If it was previously known, just check that the user-requestedness hasn't |  | ||||||
| 	// changed. |  | ||||||
| 	b.userRequested[pkgPath] = userRequested || b.userRequested[pkgPath] |  | ||||||
|  |  | ||||||
| 	// Run the type checker.  We may end up doing this to pkgs that are already |  | ||||||
| 	// done, or are in the queue to be done later, but it will short-circuit, |  | ||||||
| 	// and we can't miss pkgs that are only depended on. |  | ||||||
| 	pkg, err := b.typeCheckPackage(pkgPath, !ignoreError) |  | ||||||
| 	if err != nil { |  | ||||||
| 		switch { |  | ||||||
| 		case ignoreError && pkg != nil: |  | ||||||
| 			klog.V(4).Infof("type checking encountered some issues in %q, but ignoring.\n", pkgPath) |  | ||||||
| 		case !ignoreError && pkg != nil: |  | ||||||
| 			klog.V(3).Infof("type checking encountered some errors in %q\n", pkgPath) |  | ||||||
| 			return nil, err |  | ||||||
| 		default: |  | ||||||
| 			return nil, err |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return pkg, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type importAdapter struct { |  | ||||||
| 	b *Builder |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (a importAdapter) Import(path string) (*tc.Package, error) { |  | ||||||
| 	return a.b.importPackage(path, false) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // typeCheckPackage will attempt to return the package even if there are some |  | ||||||
| // errors, so you may check whether the package is nil or not even if you get |  | ||||||
| // an error. |  | ||||||
| func (b *Builder) typeCheckPackage(pkgPath importPathString, logErr bool) (*tc.Package, error) { |  | ||||||
| 	klog.V(5).Infof("typeCheckPackage %s", pkgPath) |  | ||||||
| 	if pkg, ok := b.typeCheckedPackages[pkgPath]; ok { |  | ||||||
| 		if pkg != nil { |  | ||||||
| 			klog.V(6).Infof("typeCheckPackage %s already done", pkgPath) |  | ||||||
| 			return pkg, nil |  | ||||||
| 		} |  | ||||||
| 		// We store a nil right before starting work on a package. So |  | ||||||
| 		// if we get here and it's present and nil, that means there's |  | ||||||
| 		// another invocation of this function on the call stack |  | ||||||
| 		// already processing this package. |  | ||||||
| 		return nil, fmt.Errorf("circular dependency for %q", pkgPath) |  | ||||||
| 	} |  | ||||||
| 	parsedFiles, ok := b.parsed[pkgPath] |  | ||||||
| 	if !ok { |  | ||||||
| 		return nil, fmt.Errorf("No files for pkg %q", pkgPath) |  | ||||||
| 	} |  | ||||||
| 	files := make([]*ast.File, len(parsedFiles)) |  | ||||||
| 	for i := range parsedFiles { |  | ||||||
| 		files[i] = parsedFiles[i].file |  | ||||||
| 	} |  | ||||||
| 	b.typeCheckedPackages[pkgPath] = nil |  | ||||||
| 	c := tc.Config{ |  | ||||||
| 		IgnoreFuncBodies: true, |  | ||||||
| 		// Note that importAdapter can call b.importPackage which calls this |  | ||||||
| 		// method. So there can't be cycles in the import graph. |  | ||||||
| 		Importer: importAdapter{b}, |  | ||||||
| 		Error: func(err error) { |  | ||||||
| 			if logErr { |  | ||||||
| 				klog.V(2).Infof("type checker: %v\n", err) |  | ||||||
| 			} else { |  | ||||||
| 				klog.V(3).Infof("type checker: %v\n", err) |  | ||||||
| 			} |  | ||||||
| 		}, |  | ||||||
| 	} |  | ||||||
| 	pkg, err := c.Check(string(pkgPath), b.fset, files, nil) |  | ||||||
| 	b.typeCheckedPackages[pkgPath] = pkg // record the result whether or not there was an error |  | ||||||
| 	return pkg, err |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // FindPackages fetches a list of the user-imported packages. |  | ||||||
| // Note that you need to call b.FindTypes() first. |  | ||||||
| func (b *Builder) FindPackages() []string { |  | ||||||
| 	// Iterate packages in a predictable order. |  | ||||||
| 	pkgPaths := []string{} |  | ||||||
| 	for k := range b.typeCheckedPackages { |  | ||||||
| 		pkgPaths = append(pkgPaths, string(k)) |  | ||||||
| 	} |  | ||||||
| 	sort.Strings(pkgPaths) |  | ||||||
|  |  | ||||||
| 	result := []string{} |  | ||||||
| 	for _, pkgPath := range pkgPaths { |  | ||||||
| 		if b.userRequested[importPathString(pkgPath)] { |  | ||||||
| 			// Since walkType is recursive, all types that are in packages that |  | ||||||
| 			// were directly mentioned will be included.  We don't need to |  | ||||||
| 			// include all types in all transitive packages, though. |  | ||||||
| 			result = append(result, pkgPath) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // FindTypes finalizes the package imports, and searches through all the |  | ||||||
| // packages for types. |  | ||||||
| func (b *Builder) FindTypes() (types.Universe, error) { |  | ||||||
| 	// Take a snapshot of pkgs to iterate, since this will recursively mutate |  | ||||||
| 	// b.parsed. Iterate in a predictable order. |  | ||||||
| 	pkgPaths := []string{} |  | ||||||
| 	for pkgPath := range b.parsed { |  | ||||||
| 		pkgPaths = append(pkgPaths, string(pkgPath)) |  | ||||||
| 	} |  | ||||||
| 	sort.Strings(pkgPaths) |  | ||||||
|  |  | ||||||
| 	u := types.Universe{} |  | ||||||
| 	for _, pkgPath := range pkgPaths { |  | ||||||
| 		if err := b.findTypesIn(importPathString(pkgPath), &u); err != nil { |  | ||||||
| 			return nil, err |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return u, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // addCommentsToType takes any accumulated comment lines prior to obj and |  | ||||||
| // attaches them to the type t. |  | ||||||
| func (b *Builder) addCommentsToType(obj tc.Object, t *types.Type) { |  | ||||||
| 	c1 := b.priorCommentLines(obj.Pos(), 1) |  | ||||||
| 	// c1.Text() is safe if c1 is nil |  | ||||||
| 	t.CommentLines = splitLines(c1.Text()) |  | ||||||
| 	if c1 == nil { |  | ||||||
| 		t.SecondClosestCommentLines = splitLines(b.priorCommentLines(obj.Pos(), 2).Text()) |  | ||||||
| 	} else { |  | ||||||
| 		t.SecondClosestCommentLines = splitLines(b.priorCommentLines(c1.List[0].Slash, 2).Text()) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // findTypesIn finalizes the package import and searches through the package |  | ||||||
| // for types. |  | ||||||
| func (b *Builder) findTypesIn(pkgPath importPathString, u *types.Universe) error { |  | ||||||
| 	klog.V(5).Infof("findTypesIn %s", pkgPath) |  | ||||||
| 	pkg := b.typeCheckedPackages[pkgPath] |  | ||||||
| 	if pkg == nil { |  | ||||||
| 		return fmt.Errorf("findTypesIn(%s): package is not known", pkgPath) |  | ||||||
| 	} |  | ||||||
| 	if !b.userRequested[pkgPath] { |  | ||||||
| 		// Since walkType is recursive, all types that the |  | ||||||
| 		// packages they asked for depend on will be included. |  | ||||||
| 		// But we don't need to include all types in all |  | ||||||
| 		// *packages* they depend on. |  | ||||||
| 		klog.V(5).Infof("findTypesIn %s: package is not user requested", pkgPath) |  | ||||||
| 		return nil |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// We're keeping this package.  This call will create the record. |  | ||||||
| 	u.Package(string(pkgPath)).Name = pkg.Name() |  | ||||||
| 	u.Package(string(pkgPath)).Path = pkg.Path() |  | ||||||
| 	u.Package(string(pkgPath)).SourcePath = b.absPaths[pkgPath] |  | ||||||
|  |  | ||||||
| 	for _, f := range b.parsed[pkgPath] { |  | ||||||
| 		if _, fileName := filepath.Split(f.name); fileName == "doc.go" { |  | ||||||
| 			tp := u.Package(string(pkgPath)) |  | ||||||
| 			// findTypesIn might be called multiple times. Clean up tp.Comments |  | ||||||
| 			// to avoid repeatedly fill same comments to it. |  | ||||||
| 			tp.Comments = []string{} |  | ||||||
| 			for i := range f.file.Comments { |  | ||||||
| 				tp.Comments = append(tp.Comments, splitLines(f.file.Comments[i].Text())...) |  | ||||||
| 			} |  | ||||||
| 			if f.file.Doc != nil { |  | ||||||
| 				tp.DocComments = splitLines(f.file.Doc.Text()) |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	s := pkg.Scope() |  | ||||||
| 	for _, n := range s.Names() { |  | ||||||
| 		obj := s.Lookup(n) |  | ||||||
| 		tn, ok := obj.(*tc.TypeName) |  | ||||||
| 		if ok { |  | ||||||
| 			t := b.walkType(*u, nil, tn.Type()) |  | ||||||
| 			b.addCommentsToType(obj, t) |  | ||||||
| 		} |  | ||||||
| 		tf, ok := obj.(*tc.Func) |  | ||||||
| 		// We only care about functions, not concrete/abstract methods. |  | ||||||
| 		if ok && tf.Type() != nil && tf.Type().(*tc.Signature).Recv() == nil { |  | ||||||
| 			t := b.addFunction(*u, nil, tf) |  | ||||||
| 			b.addCommentsToType(obj, t) |  | ||||||
| 		} |  | ||||||
| 		tv, ok := obj.(*tc.Var) |  | ||||||
| 		if ok && !tv.IsField() { |  | ||||||
| 			t := b.addVariable(*u, nil, tv) |  | ||||||
| 			b.addCommentsToType(obj, t) |  | ||||||
| 		} |  | ||||||
| 		tconst, ok := obj.(*tc.Const) |  | ||||||
| 		if ok { |  | ||||||
| 			t := b.addConstant(*u, nil, tconst) |  | ||||||
| 			b.addCommentsToType(obj, t) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	importedPkgs := []string{} |  | ||||||
| 	for k := range b.importGraph[pkgPath] { |  | ||||||
| 		importedPkgs = append(importedPkgs, string(k)) |  | ||||||
| 	} |  | ||||||
| 	sort.Strings(importedPkgs) |  | ||||||
| 	for _, p := range importedPkgs { |  | ||||||
| 		u.AddImports(string(pkgPath), p) |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (b *Builder) importWithMode(dir string, mode build.ImportMode) (*build.Package, error) { |  | ||||||
| 	// This is a bit of a hack.  The srcDir argument to Import() should |  | ||||||
| 	// properly be the dir of the file which depends on the package to be |  | ||||||
| 	// imported, so that vendoring can work properly and local paths can |  | ||||||
| 	// resolve.  We assume that there is only one level of vendoring, and that |  | ||||||
| 	// the CWD is inside the GOPATH, so this should be safe. Nobody should be |  | ||||||
| 	// using local (relative) paths except on the CLI, so CWD is also |  | ||||||
| 	// sufficient. |  | ||||||
| 	cwd, err := os.Getwd() |  | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, fmt.Errorf("unable to get current directory: %v", err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// normalize to drop /vendor/ if present |  | ||||||
| 	dir = string(canonicalizeImportPath(dir)) |  | ||||||
|  |  | ||||||
| 	buildPkg, err := b.context.Import(filepath.ToSlash(dir), cwd, mode) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, err |  | ||||||
| 	} |  | ||||||
| 	return buildPkg, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // if there's a comment on the line `lines` before pos, return its text, otherwise "". |  | ||||||
| func (b *Builder) priorCommentLines(pos token.Pos, lines int) *ast.CommentGroup { |  | ||||||
| 	position := b.fset.Position(pos) |  | ||||||
| 	key := fileLine{position.Filename, position.Line - lines} |  | ||||||
| 	return b.endLineToCommentGroup[key] |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func splitLines(str string) []string { |  | ||||||
| 	return strings.Split(strings.TrimRight(str, "\n"), "\n") |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func tcFuncNameToName(in string) types.Name { |  | ||||||
| 	name := strings.TrimPrefix(in, "func ") |  | ||||||
| 	nameParts := strings.Split(name, "(") |  | ||||||
| 	return tcNameToName(nameParts[0]) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func tcVarNameToName(in string) types.Name { |  | ||||||
| 	nameParts := strings.Split(in, " ") |  | ||||||
| 	// nameParts[0] is "var". |  | ||||||
| 	// nameParts[2:] is the type of the variable, we ignore it for now. |  | ||||||
| 	return tcNameToName(nameParts[1]) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func tcNameToName(in string) types.Name { |  | ||||||
| 	// Detect anonymous type names. (These may have '.' characters because |  | ||||||
| 	// embedded types may have packages, so we detect them specially.) |  | ||||||
| 	if strings.HasPrefix(in, "struct{") || |  | ||||||
| 		strings.HasPrefix(in, "<-chan") || |  | ||||||
| 		strings.HasPrefix(in, "chan<-") || |  | ||||||
| 		strings.HasPrefix(in, "chan ") || |  | ||||||
| 		strings.HasPrefix(in, "func(") || |  | ||||||
| 		strings.HasPrefix(in, "func (") || |  | ||||||
| 		strings.HasPrefix(in, "*") || |  | ||||||
| 		strings.HasPrefix(in, "map[") || |  | ||||||
| 		strings.HasPrefix(in, "[") { |  | ||||||
| 		return types.Name{Name: in} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// Otherwise, if there are '.' characters present, the name has a |  | ||||||
| 	// package path in front. |  | ||||||
| 	nameParts := strings.Split(in, ".") |  | ||||||
| 	name := types.Name{Name: in} |  | ||||||
| 	if n := len(nameParts); n >= 2 { |  | ||||||
| 		// The final "." is the name of the type--previous ones must |  | ||||||
| 		// have been in the package path. |  | ||||||
| 		name.Package, name.Name = strings.Join(nameParts[:n-1], "."), nameParts[n-1] |  | ||||||
| 	} |  | ||||||
| 	return name |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (b *Builder) convertSignature(u types.Universe, t *tc.Signature) *types.Signature { |  | ||||||
| 	signature := &types.Signature{} |  | ||||||
| 	for i := 0; i < t.Params().Len(); i++ { |  | ||||||
| 		signature.Parameters = append(signature.Parameters, b.walkType(u, nil, t.Params().At(i).Type())) |  | ||||||
| 		signature.ParameterNames = append(signature.ParameterNames, t.Params().At(i).Name()) |  | ||||||
| 	} |  | ||||||
| 	for i := 0; i < t.Results().Len(); i++ { |  | ||||||
| 		signature.Results = append(signature.Results, b.walkType(u, nil, t.Results().At(i).Type())) |  | ||||||
| 		signature.ResultNames = append(signature.ResultNames, t.Results().At(i).Name()) |  | ||||||
| 	} |  | ||||||
| 	if r := t.Recv(); r != nil { |  | ||||||
| 		signature.Receiver = b.walkType(u, nil, r.Type()) |  | ||||||
| 	} |  | ||||||
| 	signature.Variadic = t.Variadic() |  | ||||||
| 	return signature |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // walkType adds the type, and any necessary child types. |  | ||||||
| func (b *Builder) walkType(u types.Universe, useName *types.Name, in tc.Type) *types.Type { |  | ||||||
| 	// Most of the cases are underlying types of the named type. |  | ||||||
| 	name := tcNameToName(in.String()) |  | ||||||
| 	if useName != nil { |  | ||||||
| 		name = *useName |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	switch t := in.(type) { |  | ||||||
| 	case *tc.Struct: |  | ||||||
| 		out := u.Type(name) |  | ||||||
| 		if out.Kind != types.Unknown { |  | ||||||
| 			return out |  | ||||||
| 		} |  | ||||||
| 		out.Kind = types.Struct |  | ||||||
| 		for i := 0; i < t.NumFields(); i++ { |  | ||||||
| 			f := t.Field(i) |  | ||||||
| 			m := types.Member{ |  | ||||||
| 				Name:         f.Name(), |  | ||||||
| 				Embedded:     f.Anonymous(), |  | ||||||
| 				Tags:         t.Tag(i), |  | ||||||
| 				Type:         b.walkType(u, nil, f.Type()), |  | ||||||
| 				CommentLines: splitLines(b.priorCommentLines(f.Pos(), 1).Text()), |  | ||||||
| 			} |  | ||||||
| 			out.Members = append(out.Members, m) |  | ||||||
| 		} |  | ||||||
| 		return out |  | ||||||
| 	case *tc.Map: |  | ||||||
| 		out := u.Type(name) |  | ||||||
| 		if out.Kind != types.Unknown { |  | ||||||
| 			return out |  | ||||||
| 		} |  | ||||||
| 		out.Kind = types.Map |  | ||||||
| 		out.Elem = b.walkType(u, nil, t.Elem()) |  | ||||||
| 		out.Key = b.walkType(u, nil, t.Key()) |  | ||||||
| 		return out |  | ||||||
| 	case *tc.Pointer: |  | ||||||
| 		out := u.Type(name) |  | ||||||
| 		if out.Kind != types.Unknown { |  | ||||||
| 			return out |  | ||||||
| 		} |  | ||||||
| 		out.Kind = types.Pointer |  | ||||||
| 		out.Elem = b.walkType(u, nil, t.Elem()) |  | ||||||
| 		return out |  | ||||||
| 	case *tc.Slice: |  | ||||||
| 		out := u.Type(name) |  | ||||||
| 		if out.Kind != types.Unknown { |  | ||||||
| 			return out |  | ||||||
| 		} |  | ||||||
| 		out.Kind = types.Slice |  | ||||||
| 		out.Elem = b.walkType(u, nil, t.Elem()) |  | ||||||
| 		return out |  | ||||||
| 	case *tc.Array: |  | ||||||
| 		out := u.Type(name) |  | ||||||
| 		if out.Kind != types.Unknown { |  | ||||||
| 			return out |  | ||||||
| 		} |  | ||||||
| 		out.Kind = types.Array |  | ||||||
| 		out.Elem = b.walkType(u, nil, t.Elem()) |  | ||||||
| 		out.Len = in.(*tc.Array).Len() |  | ||||||
| 		return out |  | ||||||
| 	case *tc.Chan: |  | ||||||
| 		out := u.Type(name) |  | ||||||
| 		if out.Kind != types.Unknown { |  | ||||||
| 			return out |  | ||||||
| 		} |  | ||||||
| 		out.Kind = types.Chan |  | ||||||
| 		out.Elem = b.walkType(u, nil, t.Elem()) |  | ||||||
| 		// TODO: need to store direction, otherwise raw type name |  | ||||||
| 		// cannot be properly written. |  | ||||||
| 		return out |  | ||||||
| 	case *tc.Basic: |  | ||||||
| 		out := u.Type(types.Name{ |  | ||||||
| 			Package: "", |  | ||||||
| 			Name:    t.Name(), |  | ||||||
| 		}) |  | ||||||
| 		if out.Kind != types.Unknown { |  | ||||||
| 			return out |  | ||||||
| 		} |  | ||||||
| 		out.Kind = types.Unsupported |  | ||||||
| 		return out |  | ||||||
| 	case *tc.Signature: |  | ||||||
| 		out := u.Type(name) |  | ||||||
| 		if out.Kind != types.Unknown { |  | ||||||
| 			return out |  | ||||||
| 		} |  | ||||||
| 		out.Kind = types.Func |  | ||||||
| 		out.Signature = b.convertSignature(u, t) |  | ||||||
| 		return out |  | ||||||
| 	case *tc.Interface: |  | ||||||
| 		out := u.Type(name) |  | ||||||
| 		if out.Kind != types.Unknown { |  | ||||||
| 			return out |  | ||||||
| 		} |  | ||||||
| 		out.Kind = types.Interface |  | ||||||
| 		t.Complete() |  | ||||||
| 		for i := 0; i < t.NumMethods(); i++ { |  | ||||||
| 			if out.Methods == nil { |  | ||||||
| 				out.Methods = map[string]*types.Type{} |  | ||||||
| 			} |  | ||||||
| 			method := t.Method(i) |  | ||||||
| 			name := tcNameToName(method.String()) |  | ||||||
| 			mt := b.walkType(u, &name, method.Type()) |  | ||||||
| 			mt.CommentLines = splitLines(b.priorCommentLines(method.Pos(), 1).Text()) |  | ||||||
| 			out.Methods[method.Name()] = mt |  | ||||||
| 		} |  | ||||||
| 		return out |  | ||||||
| 	case *tc.Named: |  | ||||||
| 		var out *types.Type |  | ||||||
| 		switch t.Underlying().(type) { |  | ||||||
| 		case *tc.Named, *tc.Basic, *tc.Map, *tc.Slice: |  | ||||||
| 			name := tcNameToName(t.String()) |  | ||||||
| 			out = u.Type(name) |  | ||||||
| 			if out.Kind != types.Unknown { |  | ||||||
| 				return out |  | ||||||
| 			} |  | ||||||
| 			out.Kind = types.Alias |  | ||||||
| 			out.Underlying = b.walkType(u, nil, t.Underlying()) |  | ||||||
| 		default: |  | ||||||
| 			// tc package makes everything "named" with an |  | ||||||
| 			// underlying anonymous type--we remove that annoying |  | ||||||
| 			// "feature" for users. This flattens those types |  | ||||||
| 			// together. |  | ||||||
| 			name := tcNameToName(t.String()) |  | ||||||
| 			if out := u.Type(name); out.Kind != types.Unknown { |  | ||||||
| 				return out // short circuit if we've already made this. |  | ||||||
| 			} |  | ||||||
| 			out = b.walkType(u, &name, t.Underlying()) |  | ||||||
| 		} |  | ||||||
| 		// If the underlying type didn't already add methods, add them. |  | ||||||
| 		// (Interface types will have already added methods.) |  | ||||||
| 		if len(out.Methods) == 0 { |  | ||||||
| 			for i := 0; i < t.NumMethods(); i++ { |  | ||||||
| 				if out.Methods == nil { |  | ||||||
| 					out.Methods = map[string]*types.Type{} |  | ||||||
| 				} |  | ||||||
| 				method := t.Method(i) |  | ||||||
| 				name := tcNameToName(method.String()) |  | ||||||
| 				mt := b.walkType(u, &name, method.Type()) |  | ||||||
| 				mt.CommentLines = splitLines(b.priorCommentLines(method.Pos(), 1).Text()) |  | ||||||
| 				out.Methods[method.Name()] = mt |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		return out |  | ||||||
| 	default: |  | ||||||
| 		out := u.Type(name) |  | ||||||
| 		if out.Kind != types.Unknown { |  | ||||||
| 			return out |  | ||||||
| 		} |  | ||||||
| 		out.Kind = types.Unsupported |  | ||||||
| 		klog.Warningf("Making unsupported type entry %q for: %#v\n", out, t) |  | ||||||
| 		return out |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (b *Builder) addFunction(u types.Universe, useName *types.Name, in *tc.Func) *types.Type { |  | ||||||
| 	name := tcFuncNameToName(in.String()) |  | ||||||
| 	if useName != nil { |  | ||||||
| 		name = *useName |  | ||||||
| 	} |  | ||||||
| 	out := u.Function(name) |  | ||||||
| 	out.Kind = types.DeclarationOf |  | ||||||
| 	out.Underlying = b.walkType(u, nil, in.Type()) |  | ||||||
| 	return out |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (b *Builder) addVariable(u types.Universe, useName *types.Name, in *tc.Var) *types.Type { |  | ||||||
| 	name := tcVarNameToName(in.String()) |  | ||||||
| 	if useName != nil { |  | ||||||
| 		name = *useName |  | ||||||
| 	} |  | ||||||
| 	out := u.Variable(name) |  | ||||||
| 	out.Kind = types.DeclarationOf |  | ||||||
| 	out.Underlying = b.walkType(u, nil, in.Type()) |  | ||||||
| 	return out |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (b *Builder) addConstant(u types.Universe, useName *types.Name, in *tc.Const) *types.Type { |  | ||||||
| 	name := tcVarNameToName(in.String()) |  | ||||||
| 	if useName != nil { |  | ||||||
| 		name = *useName |  | ||||||
| 	} |  | ||||||
| 	out := u.Constant(name) |  | ||||||
| 	out.Kind = types.DeclarationOf |  | ||||||
| 	out.Underlying = b.walkType(u, nil, in.Type()) |  | ||||||
|  |  | ||||||
| 	var constval string |  | ||||||
|  |  | ||||||
| 	// For strings, we use `StringVal()` to get the un-truncated, |  | ||||||
| 	// un-quoted string. For other values, `.String()` is preferable to |  | ||||||
| 	// get something relatively human readable (especially since for |  | ||||||
| 	// floating point types, `ExactString()` will generate numeric |  | ||||||
| 	// expressions using `big.(*Float).Text()`. |  | ||||||
| 	switch in.Val().Kind() { |  | ||||||
| 	case constant.String: |  | ||||||
| 		constval = constant.StringVal(in.Val()) |  | ||||||
| 	default: |  | ||||||
| 		constval = in.Val().String() |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	out.ConstValue = &constval |  | ||||||
| 	return out |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // canonicalizeImportPath takes an import path and returns the actual package. |  | ||||||
| // It doesn't support nested vendoring. |  | ||||||
| func canonicalizeImportPath(importPath string) importPathString { |  | ||||||
| 	if !strings.Contains(importPath, "/vendor/") { |  | ||||||
| 		return importPathString(importPath) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return importPathString(importPath[strings.Index(importPath, "/vendor/")+len("/vendor/"):]) |  | ||||||
| } |  | ||||||
							
								
								
									
										82
									
								
								vendor/k8s.io/gengo/types/comments.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										82
									
								
								vendor/k8s.io/gengo/types/comments.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,82 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| // Package types contains go type information, packaged in a way that makes |  | ||||||
| // auto-generation convenient, whether by template or straight go functions. |  | ||||||
| package types |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"fmt" |  | ||||||
| 	"strings" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // ExtractCommentTags parses comments for lines of the form: |  | ||||||
| // |  | ||||||
| //   'marker' + "key=value". |  | ||||||
| // |  | ||||||
| // Values are optional; "" is the default.  A tag can be specified more than |  | ||||||
| // one time and all values are returned.  If the resulting map has an entry for |  | ||||||
| // a key, the value (a slice) is guaranteed to have at least 1 element. |  | ||||||
| // |  | ||||||
| // Example: if you pass "+" for 'marker', and the following lines are in |  | ||||||
| // the comments: |  | ||||||
| //   +foo=value1 |  | ||||||
| //   +bar |  | ||||||
| //   +foo=value2 |  | ||||||
| //   +baz="qux" |  | ||||||
| // Then this function will return: |  | ||||||
| //   map[string][]string{"foo":{"value1, "value2"}, "bar": {""}, "baz": {"qux"}} |  | ||||||
| func ExtractCommentTags(marker string, lines []string) map[string][]string { |  | ||||||
| 	out := map[string][]string{} |  | ||||||
| 	for _, line := range lines { |  | ||||||
| 		line = strings.Trim(line, " ") |  | ||||||
| 		if len(line) == 0 { |  | ||||||
| 			continue |  | ||||||
| 		} |  | ||||||
| 		if !strings.HasPrefix(line, marker) { |  | ||||||
| 			continue |  | ||||||
| 		} |  | ||||||
| 		// TODO: we could support multiple values per key if we split on spaces |  | ||||||
| 		kv := strings.SplitN(line[len(marker):], "=", 2) |  | ||||||
| 		if len(kv) == 2 { |  | ||||||
| 			out[kv[0]] = append(out[kv[0]], kv[1]) |  | ||||||
| 		} else if len(kv) == 1 { |  | ||||||
| 			out[kv[0]] = append(out[kv[0]], "") |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return out |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // ExtractSingleBoolCommentTag parses comments for lines of the form: |  | ||||||
| // |  | ||||||
| //   'marker' + "key=value1" |  | ||||||
| // |  | ||||||
| // If the tag is not found, the default value is returned.  Values are asserted |  | ||||||
| // to be boolean ("true" or "false"), and any other value will cause an error |  | ||||||
| // to be returned.  If the key has multiple values, the first one will be used. |  | ||||||
| func ExtractSingleBoolCommentTag(marker string, key string, defaultVal bool, lines []string) (bool, error) { |  | ||||||
| 	values := ExtractCommentTags(marker, lines)[key] |  | ||||||
| 	if values == nil { |  | ||||||
| 		return defaultVal, nil |  | ||||||
| 	} |  | ||||||
| 	if values[0] == "true" { |  | ||||||
| 		return true, nil |  | ||||||
| 	} |  | ||||||
| 	if values[0] == "false" { |  | ||||||
| 		return false, nil |  | ||||||
| 	} |  | ||||||
| 	return false, fmt.Errorf("tag value for %q is not boolean: %q", key, values[0]) |  | ||||||
| } |  | ||||||
							
								
								
									
										19
									
								
								vendor/k8s.io/gengo/types/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								vendor/k8s.io/gengo/types/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,19 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| // Package types contains go type information, packaged in a way that makes |  | ||||||
| // auto-generation convenient, whether by template or straight go functions. |  | ||||||
| package types // import "k8s.io/gengo/types" |  | ||||||
							
								
								
									
										57
									
								
								vendor/k8s.io/gengo/types/flatten.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										57
									
								
								vendor/k8s.io/gengo/types/flatten.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,57 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| package types |  | ||||||
|  |  | ||||||
| // FlattenMembers recursively takes any embedded members and puts them in the |  | ||||||
| // top level, correctly hiding them if the top level hides them. There must not |  | ||||||
| // be a cycle-- that implies infinite members. |  | ||||||
| // |  | ||||||
| // This is useful for e.g. computing all the valid keys in a json struct, |  | ||||||
| // properly considering any configuration of embedded structs. |  | ||||||
| func FlattenMembers(m []Member) []Member { |  | ||||||
| 	embedded := []Member{} |  | ||||||
| 	normal := []Member{} |  | ||||||
| 	type nameInfo struct { |  | ||||||
| 		top bool |  | ||||||
| 		i   int |  | ||||||
| 	} |  | ||||||
| 	names := map[string]nameInfo{} |  | ||||||
| 	for i := range m { |  | ||||||
| 		if m[i].Embedded && m[i].Type.Kind == Struct { |  | ||||||
| 			embedded = append(embedded, m[i]) |  | ||||||
| 		} else { |  | ||||||
| 			normal = append(normal, m[i]) |  | ||||||
| 			names[m[i].Name] = nameInfo{true, len(normal) - 1} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	for i := range embedded { |  | ||||||
| 		for _, e := range FlattenMembers(embedded[i].Type.Members) { |  | ||||||
| 			if info, found := names[e.Name]; found { |  | ||||||
| 				if info.top { |  | ||||||
| 					continue |  | ||||||
| 				} |  | ||||||
| 				if n := normal[info.i]; n.Name == e.Name && n.Type == e.Type { |  | ||||||
| 					continue |  | ||||||
| 				} |  | ||||||
| 				panic("conflicting members") |  | ||||||
| 			} |  | ||||||
| 			normal = append(normal, e) |  | ||||||
| 			names[e.Name] = nameInfo{false, len(normal) - 1} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return normal |  | ||||||
| } |  | ||||||
							
								
								
									
										537
									
								
								vendor/k8s.io/gengo/types/types.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										537
									
								
								vendor/k8s.io/gengo/types/types.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,537 +0,0 @@ | |||||||
| /* |  | ||||||
| Copyright 2015 The Kubernetes Authors. |  | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| you may not use this file except in compliance with the License. |  | ||||||
| You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
| Unless required by applicable law or agreed to in writing, software |  | ||||||
| distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| See the License for the specific language governing permissions and |  | ||||||
| limitations under the License. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| package types |  | ||||||
|  |  | ||||||
| import "strings" |  | ||||||
|  |  | ||||||
| // Ref makes a reference to the given type. It can only be used for e.g. |  | ||||||
| // passing to namers. |  | ||||||
| func Ref(packageName, typeName string) *Type { |  | ||||||
| 	return &Type{Name: Name{ |  | ||||||
| 		Name:    typeName, |  | ||||||
| 		Package: packageName, |  | ||||||
| 	}} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // A type name may have a package qualifier. |  | ||||||
| type Name struct { |  | ||||||
| 	// Empty if embedded or builtin. This is the package path unless Path is specified. |  | ||||||
| 	Package string |  | ||||||
| 	// The type name. |  | ||||||
| 	Name string |  | ||||||
| 	// An optional location of the type definition for languages that can have disjoint |  | ||||||
| 	// packages and paths. |  | ||||||
| 	Path string |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // String returns the name formatted as a string. |  | ||||||
| func (n Name) String() string { |  | ||||||
| 	if n.Package == "" { |  | ||||||
| 		return n.Name |  | ||||||
| 	} |  | ||||||
| 	return n.Package + "." + n.Name |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // ParseFullyQualifiedName parses a name like k8s.io/kubernetes/pkg/api.Pod into a Name. |  | ||||||
| func ParseFullyQualifiedName(fqn string) Name { |  | ||||||
| 	cs := strings.Split(fqn, ".") |  | ||||||
| 	pkg := "" |  | ||||||
| 	if len(cs) > 1 { |  | ||||||
| 		pkg = strings.Join(cs[0:len(cs)-1], ".") |  | ||||||
| 	} |  | ||||||
| 	return Name{ |  | ||||||
| 		Name:    cs[len(cs)-1], |  | ||||||
| 		Package: pkg, |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // The possible classes of types. |  | ||||||
| type Kind string |  | ||||||
|  |  | ||||||
| const ( |  | ||||||
| 	// Builtin is a primitive, like bool, string, int. |  | ||||||
| 	Builtin Kind = "Builtin" |  | ||||||
| 	Struct  Kind = "Struct" |  | ||||||
| 	Map     Kind = "Map" |  | ||||||
| 	Slice   Kind = "Slice" |  | ||||||
| 	Pointer Kind = "Pointer" |  | ||||||
|  |  | ||||||
| 	// Alias is an alias of another type, e.g. in: |  | ||||||
| 	//   type Foo string |  | ||||||
| 	//   type Bar Foo |  | ||||||
| 	// Bar is an alias of Foo. |  | ||||||
| 	// |  | ||||||
| 	// In the real go type system, Foo is a "Named" string; but to simplify |  | ||||||
| 	// generation, this type system will just say that Foo *is* a builtin. |  | ||||||
| 	// We then need "Alias" as a way for us to say that Bar *is* a Foo. |  | ||||||
| 	Alias Kind = "Alias" |  | ||||||
|  |  | ||||||
| 	// Interface is any type that could have differing types at run time. |  | ||||||
| 	Interface Kind = "Interface" |  | ||||||
|  |  | ||||||
| 	// Array is just like slice, but has a fixed length. |  | ||||||
| 	Array Kind = "Array" |  | ||||||
|  |  | ||||||
| 	// The remaining types are included for completeness, but are not well |  | ||||||
| 	// supported. |  | ||||||
| 	Chan Kind = "Chan" |  | ||||||
| 	Func Kind = "Func" |  | ||||||
|  |  | ||||||
| 	// DeclarationOf is different from other Kinds; it indicates that instead of |  | ||||||
| 	// representing an actual Type, the type is a declaration of an instance of |  | ||||||
| 	// a type. E.g., a top-level function, variable, or constant. See the |  | ||||||
| 	// comment for Type.Name for more detail. |  | ||||||
| 	DeclarationOf Kind = "DeclarationOf" |  | ||||||
| 	Unknown       Kind = "" |  | ||||||
| 	Unsupported   Kind = "Unsupported" |  | ||||||
|  |  | ||||||
| 	// Protobuf is protobuf type. |  | ||||||
| 	Protobuf Kind = "Protobuf" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // Package holds package-level information. |  | ||||||
| // Fields are public, as everything in this package, to enable consumption by |  | ||||||
| // templates (for example). But it is strongly encouraged for code to build by |  | ||||||
| // using the provided functions. |  | ||||||
| type Package struct { |  | ||||||
| 	// Canonical name of this package-- its path. |  | ||||||
| 	Path string |  | ||||||
|  |  | ||||||
| 	// The location this package was loaded from |  | ||||||
| 	SourcePath string |  | ||||||
|  |  | ||||||
| 	// Short name of this package; the name that appears in the |  | ||||||
| 	// 'package x' line. |  | ||||||
| 	Name string |  | ||||||
|  |  | ||||||
| 	// The comment right above the package declaration in doc.go, if any. |  | ||||||
| 	DocComments []string |  | ||||||
|  |  | ||||||
| 	// All comments from doc.go, if any. |  | ||||||
| 	// TODO: remove Comments and use DocComments everywhere. |  | ||||||
| 	Comments []string |  | ||||||
|  |  | ||||||
| 	// Types within this package, indexed by their name (*not* including |  | ||||||
| 	// package name). |  | ||||||
| 	Types map[string]*Type |  | ||||||
|  |  | ||||||
| 	// Functions within this package, indexed by their name (*not* including |  | ||||||
| 	// package name). |  | ||||||
| 	Functions map[string]*Type |  | ||||||
|  |  | ||||||
| 	// Global variables within this package, indexed by their name (*not* including |  | ||||||
| 	// package name). |  | ||||||
| 	Variables map[string]*Type |  | ||||||
|  |  | ||||||
| 	// Global constants within this package, indexed by their name (*not* including |  | ||||||
| 	// package name). |  | ||||||
| 	Constants map[string]*Type |  | ||||||
|  |  | ||||||
| 	// Packages imported by this package, indexed by (canonicalized) |  | ||||||
| 	// package path. |  | ||||||
| 	Imports map[string]*Package |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Has returns true if the given name references a type known to this package. |  | ||||||
| func (p *Package) Has(name string) bool { |  | ||||||
| 	_, has := p.Types[name] |  | ||||||
| 	return has |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Type gets the given Type in this Package.  If the Type is not already |  | ||||||
| // defined, this will add it and return the new Type value.  The caller is |  | ||||||
| // expected to finish initialization. |  | ||||||
| func (p *Package) Type(typeName string) *Type { |  | ||||||
| 	if t, ok := p.Types[typeName]; ok { |  | ||||||
| 		return t |  | ||||||
| 	} |  | ||||||
| 	if p.Path == "" { |  | ||||||
| 		// Import the standard builtin types! |  | ||||||
| 		if t, ok := builtins.Types[typeName]; ok { |  | ||||||
| 			p.Types[typeName] = t |  | ||||||
| 			return t |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	t := &Type{Name: Name{Package: p.Path, Name: typeName}} |  | ||||||
| 	p.Types[typeName] = t |  | ||||||
| 	return t |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Function gets the given function Type in this Package. If the function is |  | ||||||
| // not already defined, this will add it.  If a function is added, it's the |  | ||||||
| // caller's responsibility to finish construction of the function by setting |  | ||||||
| // Underlying to the correct type. |  | ||||||
| func (p *Package) Function(funcName string) *Type { |  | ||||||
| 	if t, ok := p.Functions[funcName]; ok { |  | ||||||
| 		return t |  | ||||||
| 	} |  | ||||||
| 	t := &Type{Name: Name{Package: p.Path, Name: funcName}} |  | ||||||
| 	t.Kind = DeclarationOf |  | ||||||
| 	p.Functions[funcName] = t |  | ||||||
| 	return t |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Variable gets the given variable Type in this Package. If the variable is |  | ||||||
| // not already defined, this will add it. If a variable is added, it's the caller's |  | ||||||
| // responsibility to finish construction of the variable by setting Underlying |  | ||||||
| // to the correct type. |  | ||||||
| func (p *Package) Variable(varName string) *Type { |  | ||||||
| 	if t, ok := p.Variables[varName]; ok { |  | ||||||
| 		return t |  | ||||||
| 	} |  | ||||||
| 	t := &Type{Name: Name{Package: p.Path, Name: varName}} |  | ||||||
| 	t.Kind = DeclarationOf |  | ||||||
| 	p.Variables[varName] = t |  | ||||||
| 	return t |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Constant gets the given constant Type in this Package. If the constant is |  | ||||||
| // not already defined, this will add it. If a constant is added, it's the caller's |  | ||||||
| // responsibility to finish construction of the constant by setting Underlying |  | ||||||
| // to the correct type. |  | ||||||
| func (p *Package) Constant(constName string) *Type { |  | ||||||
| 	if t, ok := p.Constants[constName]; ok { |  | ||||||
| 		return t |  | ||||||
| 	} |  | ||||||
| 	t := &Type{Name: Name{Package: p.Path, Name: constName}} |  | ||||||
| 	t.Kind = DeclarationOf |  | ||||||
| 	p.Constants[constName] = t |  | ||||||
| 	return t |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // HasImport returns true if p imports packageName. Package names include the |  | ||||||
| // package directory. |  | ||||||
| func (p *Package) HasImport(packageName string) bool { |  | ||||||
| 	_, has := p.Imports[packageName] |  | ||||||
| 	return has |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Universe is a map of all packages. The key is the package name, but you |  | ||||||
| // should use Package(), Type(), Function(), or Variable() instead of direct |  | ||||||
| // access. |  | ||||||
| type Universe map[string]*Package |  | ||||||
|  |  | ||||||
| // Type returns the canonical type for the given fully-qualified name. Builtin |  | ||||||
| // types will always be found, even if they haven't been explicitly added to |  | ||||||
| // the map. If a non-existing type is requested, this will create (a marker for) |  | ||||||
| // it. |  | ||||||
| func (u Universe) Type(n Name) *Type { |  | ||||||
| 	return u.Package(n.Package).Type(n.Name) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Function returns the canonical function for the given fully-qualified name. |  | ||||||
| // If a non-existing function is requested, this will create (a marker for) it. |  | ||||||
| // If a marker is created, it's the caller's responsibility to finish |  | ||||||
| // construction of the function by setting Underlying to the correct type. |  | ||||||
| func (u Universe) Function(n Name) *Type { |  | ||||||
| 	return u.Package(n.Package).Function(n.Name) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Variable returns the canonical variable for the given fully-qualified name. |  | ||||||
| // If a non-existing variable is requested, this will create (a marker for) it. |  | ||||||
| // If a marker is created, it's the caller's responsibility to finish |  | ||||||
| // construction of the variable by setting Underlying to the correct type. |  | ||||||
| func (u Universe) Variable(n Name) *Type { |  | ||||||
| 	return u.Package(n.Package).Variable(n.Name) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Constant returns the canonical constant for the given fully-qualified name. |  | ||||||
| // If a non-existing constant is requested, this will create (a marker for) it. |  | ||||||
| // If a marker is created, it's the caller's responsibility to finish |  | ||||||
| // construction of the constant by setting Underlying to the correct type. |  | ||||||
| func (u Universe) Constant(n Name) *Type { |  | ||||||
| 	return u.Package(n.Package).Constant(n.Name) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // AddImports registers import lines for packageName. May be called multiple times. |  | ||||||
| // You are responsible for canonicalizing all package paths. |  | ||||||
| func (u Universe) AddImports(packagePath string, importPaths ...string) { |  | ||||||
| 	p := u.Package(packagePath) |  | ||||||
| 	for _, i := range importPaths { |  | ||||||
| 		p.Imports[i] = u.Package(i) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Package returns the Package for the given path. |  | ||||||
| // If a non-existing package is requested, this will create (a marker for) it. |  | ||||||
| // If a marker is created, it's the caller's responsibility to finish |  | ||||||
| // construction of the package. |  | ||||||
| func (u Universe) Package(packagePath string) *Package { |  | ||||||
| 	if p, ok := u[packagePath]; ok { |  | ||||||
| 		return p |  | ||||||
| 	} |  | ||||||
| 	p := &Package{ |  | ||||||
| 		Path:      packagePath, |  | ||||||
| 		Types:     map[string]*Type{}, |  | ||||||
| 		Functions: map[string]*Type{}, |  | ||||||
| 		Variables: map[string]*Type{}, |  | ||||||
| 		Constants: map[string]*Type{}, |  | ||||||
| 		Imports:   map[string]*Package{}, |  | ||||||
| 	} |  | ||||||
| 	u[packagePath] = p |  | ||||||
| 	return p |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Type represents a subset of possible go types. |  | ||||||
| type Type struct { |  | ||||||
| 	// There are two general categories of types, those explicitly named |  | ||||||
| 	// and those anonymous. Named ones will have a non-empty package in the |  | ||||||
| 	// name field. |  | ||||||
| 	// |  | ||||||
| 	// An exception: If Kind == DeclarationOf, then this name is the name of a |  | ||||||
| 	// top-level function, variable, or const, and the type can be found in Underlying. |  | ||||||
| 	// We do this to allow the naming system to work against these objects, even |  | ||||||
| 	// though they aren't strictly speaking types. |  | ||||||
| 	Name Name |  | ||||||
|  |  | ||||||
| 	// The general kind of this type. |  | ||||||
| 	Kind Kind |  | ||||||
|  |  | ||||||
| 	// If there are comment lines immediately before the type definition, |  | ||||||
| 	// they will be recorded here. |  | ||||||
| 	CommentLines []string |  | ||||||
|  |  | ||||||
| 	// If there are comment lines preceding the `CommentLines`, they will be |  | ||||||
| 	// recorded here. There are two cases: |  | ||||||
| 	// --- |  | ||||||
| 	// SecondClosestCommentLines |  | ||||||
| 	// a blank line |  | ||||||
| 	// CommentLines |  | ||||||
| 	// type definition |  | ||||||
| 	// --- |  | ||||||
| 	// |  | ||||||
| 	// or |  | ||||||
| 	// --- |  | ||||||
| 	// SecondClosestCommentLines |  | ||||||
| 	// a blank line |  | ||||||
| 	// type definition |  | ||||||
| 	// --- |  | ||||||
| 	SecondClosestCommentLines []string |  | ||||||
|  |  | ||||||
| 	// If Kind == Struct |  | ||||||
| 	Members []Member |  | ||||||
|  |  | ||||||
| 	// If Kind == Map, Slice, Pointer, or Chan |  | ||||||
| 	Elem *Type |  | ||||||
|  |  | ||||||
| 	// If Kind == Map, this is the map's key type. |  | ||||||
| 	Key *Type |  | ||||||
|  |  | ||||||
| 	// If Kind == Alias, this is the underlying type. |  | ||||||
| 	// If Kind == DeclarationOf, this is the type of the declaration. |  | ||||||
| 	Underlying *Type |  | ||||||
|  |  | ||||||
| 	// If Kind == Interface, this is the set of all required functions. |  | ||||||
| 	// Otherwise, if this is a named type, this is the list of methods that |  | ||||||
| 	// type has. (All elements will have Kind=="Func") |  | ||||||
| 	Methods map[string]*Type |  | ||||||
|  |  | ||||||
| 	// If Kind == func, this is the signature of the function. |  | ||||||
| 	Signature *Signature |  | ||||||
|  |  | ||||||
| 	// ConstValue contains a stringified constant value if |  | ||||||
| 	// Kind == DeclarationOf and this is a constant value |  | ||||||
| 	// declaration. For string constants, this field contains |  | ||||||
| 	// the entire, un-quoted value. For other types, it contains |  | ||||||
| 	// a human-readable literal. |  | ||||||
| 	ConstValue *string |  | ||||||
|  |  | ||||||
| 	// TODO: Add: |  | ||||||
| 	// * channel direction |  | ||||||
|  |  | ||||||
| 	// If Kind == Array |  | ||||||
| 	Len int64 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // String returns the name of the type. |  | ||||||
| func (t *Type) String() string { |  | ||||||
| 	return t.Name.String() |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // IsPrimitive returns whether the type is a built-in type or is an alias to a |  | ||||||
| // built-in type.  For example: strings and aliases of strings are primitives, |  | ||||||
| // structs are not. |  | ||||||
| func (t *Type) IsPrimitive() bool { |  | ||||||
| 	if t.Kind == Builtin || (t.Kind == Alias && t.Underlying.Kind == Builtin) { |  | ||||||
| 		return true |  | ||||||
| 	} |  | ||||||
| 	return false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // IsAssignable returns whether the type is deep-assignable.  For example, |  | ||||||
| // slices and maps and pointers are shallow copies, but ints and strings are |  | ||||||
| // complete. |  | ||||||
| func (t *Type) IsAssignable() bool { |  | ||||||
| 	if t.IsPrimitive() { |  | ||||||
| 		return true |  | ||||||
| 	} |  | ||||||
| 	if t.Kind == Struct { |  | ||||||
| 		for _, m := range t.Members { |  | ||||||
| 			if !m.Type.IsAssignable() { |  | ||||||
| 				return false |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		return true |  | ||||||
| 	} |  | ||||||
| 	return false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // IsAnonymousStruct returns true if the type is an anonymous struct or an alias |  | ||||||
| // to an anonymous struct. |  | ||||||
| func (t *Type) IsAnonymousStruct() bool { |  | ||||||
| 	return (t.Kind == Struct && t.Name.Name == "struct{}") || (t.Kind == Alias && t.Underlying.IsAnonymousStruct()) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // A single struct member |  | ||||||
| type Member struct { |  | ||||||
| 	// The name of the member. |  | ||||||
| 	Name string |  | ||||||
|  |  | ||||||
| 	// If the member is embedded (anonymous) this will be true, and the |  | ||||||
| 	// Name will be the type name. |  | ||||||
| 	Embedded bool |  | ||||||
|  |  | ||||||
| 	// If there are comment lines immediately before the member in the type |  | ||||||
| 	// definition, they will be recorded here. |  | ||||||
| 	CommentLines []string |  | ||||||
|  |  | ||||||
| 	// If there are tags along with this member, they will be saved here. |  | ||||||
| 	Tags string |  | ||||||
|  |  | ||||||
| 	// The type of this member. |  | ||||||
| 	Type *Type |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // String returns the name and type of the member. |  | ||||||
| func (m Member) String() string { |  | ||||||
| 	return m.Name + " " + m.Type.String() |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Signature is a function's signature. |  | ||||||
| type Signature struct { |  | ||||||
| 	// If a method of some type, this is the type it's a member of. |  | ||||||
| 	Receiver       *Type |  | ||||||
| 	Parameters     []*Type |  | ||||||
| 	ParameterNames []string |  | ||||||
| 	Results        []*Type |  | ||||||
| 	ResultNames    []string |  | ||||||
|  |  | ||||||
| 	// True if the last in parameter is of the form ...T. |  | ||||||
| 	Variadic bool |  | ||||||
|  |  | ||||||
| 	// If there are comment lines immediately before this |  | ||||||
| 	// signature/method/function declaration, they will be recorded here. |  | ||||||
| 	CommentLines []string |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Built in types. |  | ||||||
| var ( |  | ||||||
| 	String = &Type{ |  | ||||||
| 		Name: Name{Name: "string"}, |  | ||||||
| 		Kind: Builtin, |  | ||||||
| 	} |  | ||||||
| 	Int64 = &Type{ |  | ||||||
| 		Name: Name{Name: "int64"}, |  | ||||||
| 		Kind: Builtin, |  | ||||||
| 	} |  | ||||||
| 	Int32 = &Type{ |  | ||||||
| 		Name: Name{Name: "int32"}, |  | ||||||
| 		Kind: Builtin, |  | ||||||
| 	} |  | ||||||
| 	Int16 = &Type{ |  | ||||||
| 		Name: Name{Name: "int16"}, |  | ||||||
| 		Kind: Builtin, |  | ||||||
| 	} |  | ||||||
| 	Int = &Type{ |  | ||||||
| 		Name: Name{Name: "int"}, |  | ||||||
| 		Kind: Builtin, |  | ||||||
| 	} |  | ||||||
| 	Uint64 = &Type{ |  | ||||||
| 		Name: Name{Name: "uint64"}, |  | ||||||
| 		Kind: Builtin, |  | ||||||
| 	} |  | ||||||
| 	Uint32 = &Type{ |  | ||||||
| 		Name: Name{Name: "uint32"}, |  | ||||||
| 		Kind: Builtin, |  | ||||||
| 	} |  | ||||||
| 	Uint16 = &Type{ |  | ||||||
| 		Name: Name{Name: "uint16"}, |  | ||||||
| 		Kind: Builtin, |  | ||||||
| 	} |  | ||||||
| 	Uint = &Type{ |  | ||||||
| 		Name: Name{Name: "uint"}, |  | ||||||
| 		Kind: Builtin, |  | ||||||
| 	} |  | ||||||
| 	Uintptr = &Type{ |  | ||||||
| 		Name: Name{Name: "uintptr"}, |  | ||||||
| 		Kind: Builtin, |  | ||||||
| 	} |  | ||||||
| 	Float64 = &Type{ |  | ||||||
| 		Name: Name{Name: "float64"}, |  | ||||||
| 		Kind: Builtin, |  | ||||||
| 	} |  | ||||||
| 	Float32 = &Type{ |  | ||||||
| 		Name: Name{Name: "float32"}, |  | ||||||
| 		Kind: Builtin, |  | ||||||
| 	} |  | ||||||
| 	Float = &Type{ |  | ||||||
| 		Name: Name{Name: "float"}, |  | ||||||
| 		Kind: Builtin, |  | ||||||
| 	} |  | ||||||
| 	Bool = &Type{ |  | ||||||
| 		Name: Name{Name: "bool"}, |  | ||||||
| 		Kind: Builtin, |  | ||||||
| 	} |  | ||||||
| 	Byte = &Type{ |  | ||||||
| 		Name: Name{Name: "byte"}, |  | ||||||
| 		Kind: Builtin, |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	builtins = &Package{ |  | ||||||
| 		Types: map[string]*Type{ |  | ||||||
| 			"bool":    Bool, |  | ||||||
| 			"string":  String, |  | ||||||
| 			"int":     Int, |  | ||||||
| 			"int64":   Int64, |  | ||||||
| 			"int32":   Int32, |  | ||||||
| 			"int16":   Int16, |  | ||||||
| 			"int8":    Byte, |  | ||||||
| 			"uint":    Uint, |  | ||||||
| 			"uint64":  Uint64, |  | ||||||
| 			"uint32":  Uint32, |  | ||||||
| 			"uint16":  Uint16, |  | ||||||
| 			"uint8":   Byte, |  | ||||||
| 			"uintptr": Uintptr, |  | ||||||
| 			"byte":    Byte, |  | ||||||
| 			"float":   Float, |  | ||||||
| 			"float64": Float64, |  | ||||||
| 			"float32": Float32, |  | ||||||
| 		}, |  | ||||||
| 		Imports: map[string]*Package{}, |  | ||||||
| 		Path:    "", |  | ||||||
| 		Name:    "", |  | ||||||
| 	} |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| func IsInteger(t *Type) bool { |  | ||||||
| 	switch t { |  | ||||||
| 	case Int, Int64, Int32, Int16, Uint, Uint64, Uint32, Uint16, Byte: |  | ||||||
| 		return true |  | ||||||
| 	default: |  | ||||||
| 		return false |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
							
								
								
									
										12
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							| @@ -1215,18 +1215,6 @@ gopkg.in/yaml.v3 | |||||||
| ## explicit; go 1.22.0 | ## explicit; go 1.22.0 | ||||||
| # k8s.io/endpointslice v0.0.0 => ./staging/src/k8s.io/endpointslice | # k8s.io/endpointslice v0.0.0 => ./staging/src/k8s.io/endpointslice | ||||||
| ## explicit; go 1.22.0 | ## explicit; go 1.22.0 | ||||||
| # k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 |  | ||||||
| ## explicit; go 1.13 |  | ||||||
| k8s.io/gengo/args |  | ||||||
| k8s.io/gengo/examples/deepcopy-gen/generators |  | ||||||
| k8s.io/gengo/examples/defaulter-gen/generators |  | ||||||
| k8s.io/gengo/examples/import-boss/generators |  | ||||||
| k8s.io/gengo/examples/set-gen/generators |  | ||||||
| k8s.io/gengo/examples/set-gen/sets |  | ||||||
| k8s.io/gengo/generator |  | ||||||
| k8s.io/gengo/namer |  | ||||||
| k8s.io/gengo/parser |  | ||||||
| k8s.io/gengo/types |  | ||||||
| # k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 | # k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 | ||||||
| ## explicit; go 1.20 | ## explicit; go 1.20 | ||||||
| k8s.io/gengo/v2 | k8s.io/gengo/v2 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Tim Hockin
					Tim Hockin